{
  "sdk_version": "4.33.1",
  "notes": "C symbols list the SDK builds (aplite, basalt, emery) whose reference contains them. A symbol present only in emery needs SDK 4.9 or later; one absent from aplite needs SDK 3.0 or later. PebbleKit JS runs in the Pebble mobile app and is available for every platform.",
  "count": 1472,
  "symbols": [
    {
      "name": "Foundation",
      "kind": "group",
      "signature": "Foundation",
      "brief": "The core of the Pebble SDK.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation",
      "url": "https://developer.repebble.com/docs/c/Foundation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation.md"
    },
    {
      "name": "Alloy",
      "kind": "group",
      "signature": "Alloy",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Alloy",
      "url": "https://developer.repebble.com/docs/c/Foundation/Alloy/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Alloy.md"
    },
    {
      "name": "kModdableCreationFlagLogInstrumentation",
      "kind": "macro",
      "signature": "#define kModdableCreationFlagLogInstrumentation (1 << 0)",
      "brief": "Flag to enable XS instrumentation logging over Bluetooth. When set, the Moddable XS engine will log instrumentation data (e.g. memory usage, slot/chunk/stack statistics) via app_log. Logging is only active when a Bluetooth log listener is connected; otherwise this flag has no effect.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Alloy",
      "url": "https://developer.repebble.com/docs/c/Foundation/Alloy/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Alloy.md"
    },
    {
      "name": "kModdableCreationFlagDebug",
      "kind": "macro",
      "signature": "#define kModdableCreationFlagDebug (1 << 1)",
      "brief": "Flag to enable XS debugging using xsbug. Should be used in combination with pebble build -debug.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Alloy",
      "url": "https://developer.repebble.com/docs/c/Foundation/Alloy/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Alloy.md"
    },
    {
      "name": "moddable_createMachine",
      "kind": "function",
      "signature": "void moddable_createMachine(ModdableCreationRecord * creation)",
      "brief": "Create and start a Moddable XS virtual machine for an Alloy app.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Alloy",
      "url": "https://developer.repebble.com/docs/c/Foundation/Alloy/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Alloy.md"
    },
    {
      "name": "ModdableCreationRecord",
      "kind": "struct",
      "signature": "struct ModdableCreationRecord",
      "brief": "Configuration record for creating a Moddable XS virtual machine. Used with moddable_createMachine() to customize the JS runtime. Set recordSize to sizeof(ModdableCreationRecord) for version compatibility.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Alloy",
      "url": "https://developer.repebble.com/docs/c/Foundation/Alloy/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Alloy.md"
    },
    {
      "name": "App",
      "kind": "group",
      "signature": "App",
      "brief": "App entry point and event loop.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App",
      "url": "https://developer.repebble.com/docs/c/Foundation/App/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App.md"
    },
    {
      "name": "app_event_loop",
      "kind": "function",
      "signature": "void app_event_loop(void)",
      "brief": "The event loop for C apps, to be used in app's main(). Will block until the app is ready to exit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App",
      "url": "https://developer.repebble.com/docs/c/Foundation/App/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App.md"
    },
    {
      "name": "App Communication",
      "kind": "group",
      "signature": "App Communication",
      "brief": "API for interacting with the Pebble communication subsystem.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Communication",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Communication/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Communication.md"
    },
    {
      "name": "SniffInterval",
      "kind": "enum",
      "signature": "enum SniffInterval",
      "brief": "Intervals during which the Bluetooth module may enter a low power mode. The sniff interval defines the period during which the Bluetooth module may not exchange (ACL) packets. The longer the sniff interval, the more time the Bluetooth module may spend in a low power mode. It may be necessary to reduce the sniff interval if an app requires reduced latency when sending messages.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Communication",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Communication/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Communication.md"
    },
    {
      "name": "SNIFF_INTERVAL_NORMAL",
      "kind": "enumerator",
      "signature": "SNIFF_INTERVAL_NORMAL",
      "brief": "Set the sniff interval to normal (power-saving) mode.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Communication",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Communication/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Communication.md"
    },
    {
      "name": "SNIFF_INTERVAL_REDUCED",
      "kind": "enumerator",
      "signature": "SNIFF_INTERVAL_REDUCED",
      "brief": "Reduce the sniff interval to increase the responsiveness of the radio at the expense of increasing Bluetooth energy consumption by a multiple of 2-5 (very significant)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Communication",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Communication/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Communication.md"
    },
    {
      "name": "app_comm_set_sniff_interval",
      "kind": "function",
      "signature": "void app_comm_set_sniff_interval(const SniffInterval interval)",
      "brief": "Set the Bluetooth module's sniff interval. The sniff interval will be restored to normal by the OS after the app's de-init handler is called. Set the sniff interval to normal whenever possible.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Communication",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Communication/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Communication.md"
    },
    {
      "name": "app_comm_get_sniff_interval",
      "kind": "function",
      "signature": "SniffInterval app_comm_get_sniff_interval(void)",
      "brief": "Get the Bluetooth module's sniff interval.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Communication",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Communication/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Communication.md"
    },
    {
      "name": "App Glance",
      "kind": "group",
      "signature": "App Glance",
      "brief": "API for the application to modify its \"glance\" i.e. app menu subtitle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "PublishedId",
      "kind": "typedef",
      "signature": "typedef uint32_t PublishedId",
      "brief": "The ID of a published app resource defined within the publishedMedia section of package.json.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "APP_GLANCE_SLICE_NO_EXPIRATION",
      "kind": "macro",
      "signature": "#define APP_GLANCE_SLICE_NO_EXPIRATION ((time_t)0)",
      "brief": "Can be used for the expiration_time of an AppGlanceSlice so that the slice never expires.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "APP_GLANCE_SLICE_DEFAULT_ICON",
      "kind": "macro",
      "signature": "#define APP_GLANCE_SLICE_DEFAULT_ICON ((PublishedId)0)",
      "brief": "Can be used for the icon of an AppGlanceSlice so that the slice displays the app's default icon.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "AppGlanceResult",
      "kind": "enum",
      "signature": "enum AppGlanceResult",
      "brief": "Bitfield enum describing the result of trying to add an AppGlanceSlice to an app's glance.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "APP_GLANCE_RESULT_SUCCESS",
      "kind": "enumerator",
      "signature": "APP_GLANCE_RESULT_SUCCESS",
      "brief": "The slice was successfully added to the app's glance.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "APP_GLANCE_RESULT_INVALID_TEMPLATE_STRING",
      "kind": "enumerator",
      "signature": "APP_GLANCE_RESULT_INVALID_TEMPLATE_STRING",
      "brief": "The subtitle_template_string provided in the slice was invalid.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "APP_GLANCE_RESULT_TEMPLATE_STRING_TOO_LONG",
      "kind": "enumerator",
      "signature": "APP_GLANCE_RESULT_TEMPLATE_STRING_TOO_LONG",
      "brief": "The subtitle_template_string provided in the slice was longer than 150 bytes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "APP_GLANCE_RESULT_INVALID_ICON",
      "kind": "enumerator",
      "signature": "APP_GLANCE_RESULT_INVALID_ICON",
      "brief": "The icon provided in the slice was invalid.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "APP_GLANCE_RESULT_SLICE_CAPACITY_EXCEEDED",
      "kind": "enumerator",
      "signature": "APP_GLANCE_RESULT_SLICE_CAPACITY_EXCEEDED",
      "brief": "The provided slice would exceed the app glance's slice capacity.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "APP_GLANCE_RESULT_EXPIRES_IN_THE_PAST",
      "kind": "enumerator",
      "signature": "APP_GLANCE_RESULT_EXPIRES_IN_THE_PAST",
      "brief": "The expiration_time provided in the slice expires in the past.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "APP_GLANCE_RESULT_INVALID_SESSION",
      "kind": "enumerator",
      "signature": "APP_GLANCE_RESULT_INVALID_SESSION",
      "brief": "The AppGlanceReloadSession provided was invalid.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "AppGlanceReloadSession",
      "kind": "typedef",
      "signature": "typedef struct AppGlanceReloadSession AppGlanceReloadSession",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "app_glance_add_slice",
      "kind": "function",
      "signature": "AppGlanceResult app_glance_add_slice(AppGlanceReloadSession * session, AppGlanceSlice slice)",
      "brief": "Add a slice to the app's glance. This function will only succeed if called with a valid AppGlanceReloadSession that is provided in an AppGlanceReloadCallback.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "AppGlanceReloadCallback",
      "kind": "typedef",
      "signature": "typedef void(* AppGlanceReloadCallback)(AppGlanceReloadSession *session, size_t limit, void *context)",
      "brief": "User-provided callback for reloading the slices in the app's glance.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "app_glance_reload",
      "kind": "function",
      "signature": "void app_glance_reload(AppGlanceReloadCallback callback, void * context)",
      "brief": "Clear any existing slices in the app's glance and trigger a reload via the provided callback.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "AppGlanceSlice",
      "kind": "struct",
      "signature": "struct AppGlanceSlice",
      "brief": "An app's glance can change over time as defined by zero or more app glance slices that each describe the state of the app glance at a particular point in time. Slices are displayed in the order they are added, and they are removed at the specified expiration time.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "AppGlanceSliceLayout",
      "kind": "struct",
      "signature": "struct AppGlanceSliceLayout",
      "brief": "Describes how the slice should be visualized in the app's glance in the launcher.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / App Glance",
      "url": "https://developer.repebble.com/docs/c/Foundation/App_Glance/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/App_Glance.md"
    },
    {
      "name": "AppMessage",
      "kind": "group",
      "signature": "AppMessage",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "AppMessageResult",
      "kind": "enum",
      "signature": "enum AppMessageResult",
      "brief": "AppMessage result codes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_OK",
      "kind": "enumerator",
      "signature": "APP_MSG_OK",
      "brief": "(0) All good, operation was successful.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_SEND_TIMEOUT",
      "kind": "enumerator",
      "signature": "APP_MSG_SEND_TIMEOUT",
      "brief": "(2) The other end did not confirm receiving the sent data with an (n)ack in time.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_SEND_REJECTED",
      "kind": "enumerator",
      "signature": "APP_MSG_SEND_REJECTED",
      "brief": "(4) The other end rejected the sent data, with a \"nack\" reply.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_NOT_CONNECTED",
      "kind": "enumerator",
      "signature": "APP_MSG_NOT_CONNECTED",
      "brief": "(8) The other end was not connected.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_APP_NOT_RUNNING",
      "kind": "enumerator",
      "signature": "APP_MSG_APP_NOT_RUNNING",
      "brief": "(16) The local application was not running.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_INVALID_ARGS",
      "kind": "enumerator",
      "signature": "APP_MSG_INVALID_ARGS",
      "brief": "(32) The function was called with invalid arguments.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_BUSY",
      "kind": "enumerator",
      "signature": "APP_MSG_BUSY",
      "brief": "(64) There are pending (in or outbound) messages that need to be processed first before new ones can be received or sent.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_BUFFER_OVERFLOW",
      "kind": "enumerator",
      "signature": "APP_MSG_BUFFER_OVERFLOW",
      "brief": "(128) The buffer was too small to contain the incoming message.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_ALREADY_RELEASED",
      "kind": "enumerator",
      "signature": "APP_MSG_ALREADY_RELEASED",
      "brief": "(512) The resource had already been released.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_CALLBACK_ALREADY_REGISTERED",
      "kind": "enumerator",
      "signature": "APP_MSG_CALLBACK_ALREADY_REGISTERED",
      "brief": "(1024) The callback was already registered.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_CALLBACK_NOT_REGISTERED",
      "kind": "enumerator",
      "signature": "APP_MSG_CALLBACK_NOT_REGISTERED",
      "brief": "(2048) The callback could not be deregistered, because it had not been registered before.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_OUT_OF_MEMORY",
      "kind": "enumerator",
      "signature": "APP_MSG_OUT_OF_MEMORY",
      "brief": "(4096) The system did not have sufficient application memory to perform the requested operation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_CLOSED",
      "kind": "enumerator",
      "signature": "APP_MSG_CLOSED",
      "brief": "(8192) App message was closed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_INTERNAL_ERROR",
      "kind": "enumerator",
      "signature": "APP_MSG_INTERNAL_ERROR",
      "brief": "(16384) An internal OS error prevented AppMessage from completing an operation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MSG_INVALID_STATE",
      "kind": "enumerator",
      "signature": "APP_MSG_INVALID_STATE",
      "brief": "(32768) The function was called while App Message was not in the appropriate state.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_open",
      "kind": "function",
      "signature": "AppMessageResult app_message_open(const uint32_t size_inbound, const uint32_t size_outbound)",
      "brief": "Open AppMessage to transfers.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_deregister_callbacks",
      "kind": "function",
      "signature": "void app_message_deregister_callbacks(void)",
      "brief": "Deregisters all callbacks and their context.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "AppMessageInboxReceived",
      "kind": "typedef",
      "signature": "typedef void(* AppMessageInboxReceived)(DictionaryIterator *iterator, void *context)",
      "brief": "Called after an incoming message is received.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "AppMessageInboxDropped",
      "kind": "typedef",
      "signature": "typedef void(* AppMessageInboxDropped)(AppMessageResult reason, void *context)",
      "brief": "Called after an incoming message is dropped.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "AppMessageOutboxSent",
      "kind": "typedef",
      "signature": "typedef void(* AppMessageOutboxSent)(DictionaryIterator *iterator, void *context)",
      "brief": "Called after an outbound message has been sent and the reply has been received.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "AppMessageOutboxFailed",
      "kind": "typedef",
      "signature": "typedef void(* AppMessageOutboxFailed)(DictionaryIterator *iterator, AppMessageResult reason, void *context)",
      "brief": "Called after an outbound message has not been sent successfully.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_get_context",
      "kind": "function",
      "signature": "void * app_message_get_context(void)",
      "brief": "Gets the context that will be passed to all AppMessage callbacks.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_set_context",
      "kind": "function",
      "signature": "void * app_message_set_context(void * context)",
      "brief": "Sets the context that will be passed to all AppMessage callbacks.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_register_inbox_received",
      "kind": "function",
      "signature": "AppMessageInboxReceived app_message_register_inbox_received(AppMessageInboxReceived received_callback)",
      "brief": "Registers a function that will be called after any Inbox message is received successfully.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_register_inbox_dropped",
      "kind": "function",
      "signature": "AppMessageInboxDropped app_message_register_inbox_dropped(AppMessageInboxDropped dropped_callback)",
      "brief": "Registers a function that will be called after any Inbox message is received but dropped by the system.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_register_outbox_sent",
      "kind": "function",
      "signature": "AppMessageOutboxSent app_message_register_outbox_sent(AppMessageOutboxSent sent_callback)",
      "brief": "Registers a function that will be called after any Outbox message is sent and an ACK reply occurs in a timely fashion.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_register_outbox_failed",
      "kind": "function",
      "signature": "AppMessageOutboxFailed app_message_register_outbox_failed(AppMessageOutboxFailed failed_callback)",
      "brief": "Registers a function that will be called after any Outbox message is not sent with a timely ACK reply. The call to app_message_outbox_send() must have succeeded.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_inbox_size_maximum",
      "kind": "function",
      "signature": "uint32_t app_message_inbox_size_maximum(void)",
      "brief": "Programatically determine the inbox size maximum in the current configuration.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_outbox_size_maximum",
      "kind": "function",
      "signature": "uint32_t app_message_outbox_size_maximum(void)",
      "brief": "Programatically determine the outbox size maximum in the current configuration.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_outbox_begin",
      "kind": "function",
      "signature": "AppMessageResult app_message_outbox_begin(DictionaryIterator ** iterator)",
      "brief": "Begin writing to the Outbox's Dictionary buffer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "app_message_outbox_send",
      "kind": "function",
      "signature": "AppMessageResult app_message_outbox_send(void)",
      "brief": "Sends the outbound dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MESSAGE_INBOX_SIZE_MINIMUM",
      "kind": "macro",
      "signature": "#define APP_MESSAGE_INBOX_SIZE_MINIMUM 124",
      "brief": "As long as the firmware maintains its current major version, inboxes of this size or smaller will be allowed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "APP_MESSAGE_OUTBOX_SIZE_MINIMUM",
      "kind": "macro",
      "signature": "#define APP_MESSAGE_OUTBOX_SIZE_MINIMUM 636",
      "brief": "As long as the firmware maintains its current major version, outboxes of this size or smaller will be allowed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppMessage",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppMessage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppMessage.md"
    },
    {
      "name": "AppSync",
      "kind": "group",
      "signature": "AppSync",
      "brief": "UI synchronization layer for AppMessage",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppSync",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppSync/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppSync.md"
    },
    {
      "name": "AppSyncTupleChangedCallback",
      "kind": "typedef",
      "signature": "typedef void(* AppSyncTupleChangedCallback)(const uint32_t key, const Tuple *new_tuple, const Tuple *old_tuple, void *context)",
      "brief": "Called whenever a Tuple changes. This does not necessarily mean the value in the Tuple has changed. When the internal \"current\" dictionary gets updated, existing Tuples might get shuffled around in the backing buffer, even though the values stay the same. In this callback, the client code gets the chance to remove the old reference and start using the new one. In this callback, your application MUST clean up any references to the old_tuple of a PREVIOUS call to this callback (and replace it with the new_tuple that is passed in with the current call).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppSync",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppSync/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppSync.md"
    },
    {
      "name": "AppSyncErrorCallback",
      "kind": "typedef",
      "signature": "typedef void(* AppSyncErrorCallback)(DictionaryResult dict_error, AppMessageResult app_message_error, void *context)",
      "brief": "Called whenever there was an error.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppSync",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppSync/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppSync.md"
    },
    {
      "name": "app_sync_init",
      "kind": "function",
      "signature": "void app_sync_init(struct AppSync * s, uint8_t * buffer, const uint16_t buffer_size, const Tuplet *const keys_and_initial_values, const uint8_t count, AppSyncTupleChangedCallback tuple_changed_callback, AppSyncErrorCallback error_callback, void * context)",
      "brief": "Initialized an AppSync system with specific buffer size and initial keys and values. The callback.value_changed callback will be called asynchronously with the initial keys and values, as to avoid duplicating code to update your app's UI.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppSync",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppSync/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppSync.md"
    },
    {
      "name": "app_sync_deinit",
      "kind": "function",
      "signature": "void app_sync_deinit(struct AppSync * s)",
      "brief": "Cleans up an AppSync system. It frees the buffer allocated by an app_sync_init() call and deregisters itself from the AppMessage subsystem.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppSync",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppSync/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppSync.md"
    },
    {
      "name": "app_sync_set",
      "kind": "function",
      "signature": "AppMessageResult app_sync_set(struct AppSync * s, const Tuplet *const keys_and_values_to_update, const uint8_t count)",
      "brief": "Updates key/value pairs using an array of Tuplets.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppSync",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppSync/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppSync.md"
    },
    {
      "name": "app_sync_get",
      "kind": "function",
      "signature": "const Tuple * app_sync_get(const struct AppSync * s, const uint32_t key)",
      "brief": "Finds and gets a tuple in the \"current\" dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppSync",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppSync/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppSync.md"
    },
    {
      "name": "AppSync",
      "kind": "struct",
      "signature": "struct AppSync",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppSync",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppSync/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppSync.md"
    },
    {
      "name": "AppWorker",
      "kind": "group",
      "signature": "AppWorker",
      "brief": "Runs in the background, and can communicate with the foreground app.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "AppWorkerResult",
      "kind": "enum",
      "signature": "enum AppWorkerResult",
      "brief": "Possible error codes from app_worker_launch, app_worker_kill.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "APP_WORKER_RESULT_SUCCESS",
      "kind": "enumerator",
      "signature": "APP_WORKER_RESULT_SUCCESS",
      "brief": "Success.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "APP_WORKER_RESULT_NO_WORKER",
      "kind": "enumerator",
      "signature": "APP_WORKER_RESULT_NO_WORKER",
      "brief": "No worker found for the current app.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "APP_WORKER_RESULT_DIFFERENT_APP",
      "kind": "enumerator",
      "signature": "APP_WORKER_RESULT_DIFFERENT_APP",
      "brief": "A worker for a different app is already running.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "APP_WORKER_RESULT_NOT_RUNNING",
      "kind": "enumerator",
      "signature": "APP_WORKER_RESULT_NOT_RUNNING",
      "brief": "The worker is not running.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "APP_WORKER_RESULT_ALREADY_RUNNING",
      "kind": "enumerator",
      "signature": "APP_WORKER_RESULT_ALREADY_RUNNING",
      "brief": "The worker is already running.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "APP_WORKER_RESULT_ASKING_CONFIRMATION",
      "kind": "enumerator",
      "signature": "APP_WORKER_RESULT_ASKING_CONFIRMATION",
      "brief": "The user will be asked for confirmation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "app_worker_is_running",
      "kind": "function",
      "signature": "bool app_worker_is_running(void)",
      "brief": "Determine if the worker for the current app is running.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "app_worker_launch",
      "kind": "function",
      "signature": "AppWorkerResult app_worker_launch(void)",
      "brief": "Launch the worker for the current app. Note that this is an asynchronous operation, a result code of APP_WORKER_RESULT_SUCCESS merely means that the request was successfully queued up.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "app_worker_kill",
      "kind": "function",
      "signature": "AppWorkerResult app_worker_kill(void)",
      "brief": "Kill the worker for the current app. Note that this is an asynchronous operation, a result code of APP_WORKER_RESULT_SUCCESS merely means that the request was successfully queued up.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "AppWorkerMessageHandler",
      "kind": "typedef",
      "signature": "typedef void(* AppWorkerMessageHandler)(uint16_t type, AppWorkerMessage *data)",
      "brief": "Callback type for worker messages. Messages can be sent from worker to app or vice versa.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "app_worker_message_subscribe",
      "kind": "function",
      "signature": "bool app_worker_message_subscribe(AppWorkerMessageHandler handler)",
      "brief": "Subscribe to worker messages. Once subscribed, the handler gets called on every message emitted by the other task (either worker or app).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "app_worker_message_unsubscribe",
      "kind": "function",
      "signature": "bool app_worker_message_unsubscribe(void)",
      "brief": "Unsubscribe from worker messages. Once unsubscribed, the previously registered handler will no longer be called.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "app_worker_send_message",
      "kind": "function",
      "signature": "void app_worker_send_message(uint8_t type, AppWorkerMessage * data)",
      "brief": "Send a message to the other task (either worker or app).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "AppWorkerMessage",
      "kind": "struct",
      "signature": "struct AppWorkerMessage",
      "brief": "Generic structure of a worker message that can be sent between an app and its worker.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / AppWorker",
      "url": "https://developer.repebble.com/docs/c/Foundation/AppWorker/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/AppWorker.md"
    },
    {
      "name": "DataLogging",
      "kind": "group",
      "signature": "DataLogging",
      "brief": "Enables logging data asynchronously to a mobile app",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DataLoggingSessionRef",
      "kind": "typedef",
      "signature": "typedef void * DataLoggingSessionRef",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DataLoggingItemType",
      "kind": "enum",
      "signature": "enum DataLoggingItemType",
      "brief": "The different types of session data that Pebble supports. This type describes the type of a singular item in the data session. Every item in a given session is the same type and size.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DATA_LOGGING_BYTE_ARRAY",
      "kind": "enumerator",
      "signature": "DATA_LOGGING_BYTE_ARRAY",
      "brief": "Array of bytes. Remember that this is the type of a single item in the logging session, so using this type means you'll be logging multiple byte arrays (each a fixed length described by item_length) for the duration of the session.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DATA_LOGGING_UINT",
      "kind": "enumerator",
      "signature": "DATA_LOGGING_UINT",
      "brief": "Unsigned integer. This may be a 1, 2, or 4 byte integer depending on the item_length parameter.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DATA_LOGGING_INT",
      "kind": "enumerator",
      "signature": "DATA_LOGGING_INT",
      "brief": "Signed integer. This may be a 1, 2, or 4 byte integer depending on the item_length parameter.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DataLoggingResult",
      "kind": "enum",
      "signature": "enum DataLoggingResult",
      "brief": "Enumerated values describing the possible outcomes of data logging operations.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DATA_LOGGING_SUCCESS",
      "kind": "enumerator",
      "signature": "DATA_LOGGING_SUCCESS",
      "brief": "Successful operation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DATA_LOGGING_BUSY",
      "kind": "enumerator",
      "signature": "DATA_LOGGING_BUSY",
      "brief": "Someone else is writing to this logging session.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DATA_LOGGING_FULL",
      "kind": "enumerator",
      "signature": "DATA_LOGGING_FULL",
      "brief": "No more space to save data.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DATA_LOGGING_NOT_FOUND",
      "kind": "enumerator",
      "signature": "DATA_LOGGING_NOT_FOUND",
      "brief": "The logging session does not exist.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DATA_LOGGING_CLOSED",
      "kind": "enumerator",
      "signature": "DATA_LOGGING_CLOSED",
      "brief": "The logging session was made inactive.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DATA_LOGGING_INVALID_PARAMS",
      "kind": "enumerator",
      "signature": "DATA_LOGGING_INVALID_PARAMS",
      "brief": "An invalid parameter was passed to one of the functions.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DATA_LOGGING_INTERNAL_ERR",
      "kind": "enumerator",
      "signature": "DATA_LOGGING_INTERNAL_ERR",
      "brief": "An internal error occurred.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "data_logging_create",
      "kind": "function",
      "signature": "DataLoggingSessionRef data_logging_create(uint32_t tag, DataLoggingItemType item_type, uint16_t item_length, bool resume)",
      "brief": "Create a new data logging session.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "data_logging_finish",
      "kind": "function",
      "signature": "void data_logging_finish(DataLoggingSessionRef logging_session)",
      "brief": "Finish up a data logging_session. Logging data is kept until it has successfully been transferred over to the phone, but no data may be added to the session after this function is called.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "data_logging_log",
      "kind": "function",
      "signature": "DataLoggingResult data_logging_log(DataLoggingSessionRef logging_session, const void * data, uint32_t num_items)",
      "brief": "Add data to the data logging session. If a phone is available, the data is sent directly to the phone. Otherwise, it is saved to the watch storage until the watch is connected to a phone.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataLogging",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataLogging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataLogging.md"
    },
    {
      "name": "DataStructures",
      "kind": "group",
      "signature": "DataStructures",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataStructures",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataStructures/",
      "url_md": null
    },
    {
      "name": "UUID",
      "kind": "group",
      "signature": "UUID",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataStructures / UUID",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID.md"
    },
    {
      "name": "UUID_SIZE",
      "kind": "macro",
      "signature": "#define UUID_SIZE 16",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataStructures / UUID",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID.md"
    },
    {
      "name": "UuidMake",
      "kind": "macro",
      "signature": "#define UuidMake(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) ((Uuid) {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15})",
      "brief": "Make a Uuid object from sixteen bytes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataStructures / UUID",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID.md"
    },
    {
      "name": "UuidMakeFromBEBytes",
      "kind": "macro",
      "signature": "#define UuidMakeFromBEBytes(b) ((Uuid) { b[0], b[1], b[2], b[3], \\ b[4], b[5], b[6], b[7], \\ b[8], b[9], b[10], b[11], \\ b[12], b[13], b[14], b[15] })",
      "brief": "Creates a Uuid from an array of bytes with 16 bytes in Big Endian order.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataStructures / UUID",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID.md"
    },
    {
      "name": "UuidMakeFromLEBytes",
      "kind": "macro",
      "signature": "#define UuidMakeFromLEBytes(b) ((Uuid) { b[15], b[14], b[13], b[12], \\ b[11], b[10], b[9], b[8], \\ b[7], b[6], b[5], b[4], \\ b[3], b[2], b[1], b[0] })",
      "brief": "Creates a Uuid from an array of bytes with 16 bytes in Little Endian order.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataStructures / UUID",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID.md"
    },
    {
      "name": "uuid_equal",
      "kind": "function",
      "signature": "bool uuid_equal(const Uuid * uu1, const Uuid * uu2)",
      "brief": "Compares two UUIDs.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataStructures / UUID",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID.md"
    },
    {
      "name": "uuid_to_string",
      "kind": "function",
      "signature": "void uuid_to_string(const Uuid * uuid, char * buffer)",
      "brief": "Writes UUID in a string form into buffer that looks like the following... {12345678-1234-5678-1234-567812345678} or {NULL UUID} if NULL was passed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataStructures / UUID",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID.md"
    },
    {
      "name": "UUID_STRING_BUFFER_LENGTH",
      "kind": "macro",
      "signature": "#define UUID_STRING_BUFFER_LENGTH (32 + 4 + 2 + 1)",
      "brief": "The minimum required length of a string used to hold a uuid (including null).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataStructures / UUID",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID.md"
    },
    {
      "name": "Uuid",
      "kind": "struct",
      "signature": "struct Uuid",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / DataStructures / UUID",
      "url": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/DataStructures/UUID.md"
    },
    {
      "name": "Dictation",
      "kind": "group",
      "signature": "Dictation",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSession",
      "kind": "typedef",
      "signature": "typedef struct DictationSession DictationSession",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatus",
      "kind": "enum",
      "signature": "enum DictationSessionStatus",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatusSuccess",
      "kind": "enumerator",
      "signature": "DictationSessionStatusSuccess",
      "brief": "Transcription successful, with a valid result.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatusFailureTranscriptionRejected",
      "kind": "enumerator",
      "signature": "DictationSessionStatusFailureTranscriptionRejected",
      "brief": "User rejected transcription and exited UI.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatusFailureTranscriptionRejectedWithError",
      "kind": "enumerator",
      "signature": "DictationSessionStatusFailureTranscriptionRejectedWithError",
      "brief": "User exited UI after transcription error.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatusFailureSystemAborted",
      "kind": "enumerator",
      "signature": "DictationSessionStatusFailureSystemAborted",
      "brief": "Too many errors occurred during transcription and the UI exited.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatusFailureNoSpeechDetected",
      "kind": "enumerator",
      "signature": "DictationSessionStatusFailureNoSpeechDetected",
      "brief": "No speech was detected and UI exited.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatusFailureConnectivityError",
      "kind": "enumerator",
      "signature": "DictationSessionStatusFailureConnectivityError",
      "brief": "No BT or internet connection.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatusFailureDisabled",
      "kind": "enumerator",
      "signature": "DictationSessionStatusFailureDisabled",
      "brief": "Voice transcription disabled for this user.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatusFailureInternalError",
      "kind": "enumerator",
      "signature": "DictationSessionStatusFailureInternalError",
      "brief": "Voice transcription failed due to internal error.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatusFailureRecognizerError",
      "kind": "enumerator",
      "signature": "DictationSessionStatusFailureRecognizerError",
      "brief": "Cloud recognizer failed to transcribe speech (only possible if error dialogs disabled)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "DictationSessionStatusCallback",
      "kind": "typedef",
      "signature": "typedef void(* DictationSessionStatusCallback)(DictationSession *session, DictationSessionStatus status, char *transcription, void *context)",
      "brief": "Dictation status callback. Indicates success or failure of the dictation session and, if successful, passes the transcribed string to the user of the dictation session. The transcribed string will be freed after this call returns, so the string should be copied if it needs to be retained afterwards.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "dictation_session_create",
      "kind": "function",
      "signature": "DictationSession * dictation_session_create(uint32_t buffer_size, DictationSessionStatusCallback callback, void * callback_context)",
      "brief": "Create a dictation session. The session object can be used more than once to get a transcription. When a transcription is received a buffer will be allocated to store the text in with a maximum size specified by buffer_size. When a transcription is accepted by the user or a failure of some sort occurs, the callback specified will be called with the status and the transcription if one was accepted.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "dictation_session_destroy",
      "kind": "function",
      "signature": "void dictation_session_destroy(DictationSession * session)",
      "brief": "Destroy the dictation session and free its memory. Will terminate a session in progress.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "dictation_session_start",
      "kind": "function",
      "signature": "DictationSessionStatus dictation_session_start(DictationSession * session)",
      "brief": "Start the dictation session. The dictation UI will be shown. When the user accepts a transcription or exits the UI, or, when the confirmation dialog is disabled and a status is received, the status callback will be called. Can only be called when no session is in progress. The session can be restarted multiple times after the UI is exited or the session is stopped.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "dictation_session_stop",
      "kind": "function",
      "signature": "DictationSessionStatus dictation_session_stop(DictationSession * session)",
      "brief": "Stop the current dictation session. The UI will be hidden and no status callbacks will be received after the session is stopped.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "dictation_session_enable_confirmation",
      "kind": "function",
      "signature": "void dictation_session_enable_confirmation(DictationSession * session, bool is_enabled)",
      "brief": "Enable or disable user confirmation of transcribed text, which allows the user to accept or reject (and restart) the transcription. Must be called before the session is started.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "dictation_session_enable_error_dialogs",
      "kind": "function",
      "signature": "void dictation_session_enable_error_dialogs(DictationSession * session, bool is_enabled)",
      "brief": "Enable or disable error dialogs when transcription fails. Must be called before the session is started. Disabling error dialogs will also disable automatic retries if transcription fails.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "PBL_IF_MICROPHONE_ELSE",
      "kind": "macro",
      "signature": "#define PBL_IF_MICROPHONE_ELSE(if_true, if_false) (if_true)",
      "brief": "Convenience macro to switch between two expressions depending on mic support. On platforms with a mic the first expression will be chosen, the second otherwise.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictation",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictation/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictation.md"
    },
    {
      "name": "Dictionary",
      "kind": "group",
      "signature": "Dictionary",
      "brief": "Data serialization utilities",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "DictionaryResult",
      "kind": "enum",
      "signature": "enum DictionaryResult",
      "brief": "Return values for dictionary write/conversion functions.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "DICT_OK",
      "kind": "enumerator",
      "signature": "DICT_OK",
      "brief": "The operation returned successfully.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "DICT_NOT_ENOUGH_STORAGE",
      "kind": "enumerator",
      "signature": "DICT_NOT_ENOUGH_STORAGE",
      "brief": "There was not enough backing storage to complete the operation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "DICT_INVALID_ARGS",
      "kind": "enumerator",
      "signature": "DICT_INVALID_ARGS",
      "brief": "One or more arguments were invalid or uninitialized.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "DICT_INTERNAL_INCONSISTENCY",
      "kind": "enumerator",
      "signature": "DICT_INTERNAL_INCONSISTENCY",
      "brief": "The lengths and/or count of the dictionary its tuples are inconsistent.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "DICT_MALLOC_FAILED",
      "kind": "enumerator",
      "signature": "DICT_MALLOC_FAILED",
      "brief": "A requested operation required additional memory to be allocated, but the allocation failed, likely due to insufficient remaining heap memory.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "TupleType",
      "kind": "enum",
      "signature": "enum TupleType",
      "brief": "Values representing the type of data that the value field of a Tuple contains.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "TUPLE_BYTE_ARRAY",
      "kind": "enumerator",
      "signature": "TUPLE_BYTE_ARRAY",
      "brief": "The value is an array of bytes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "TUPLE_CSTRING",
      "kind": "enumerator",
      "signature": "TUPLE_CSTRING",
      "brief": "The value is a zero-terminated, UTF-8 C-string.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "TUPLE_UINT",
      "kind": "enumerator",
      "signature": "TUPLE_UINT",
      "brief": "The value is an unsigned integer. The tuple's .length field is used to determine the size of the integer (1, 2, or 4 bytes).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "TUPLE_INT",
      "kind": "enumerator",
      "signature": "TUPLE_INT",
      "brief": "The value is a signed integer. The tuple's .length field is used to determine the size of the integer (1, 2, or 4 bytes).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "Dictionary",
      "kind": "typedef",
      "signature": "typedef struct Dictionary Dictionary",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_calc_buffer_size",
      "kind": "function",
      "signature": "uint32_t dict_calc_buffer_size(const uint8_t tuple_count, ...)",
      "brief": "Calculates the number of bytes that a dictionary will occupy, given one or more value lengths that need to be stored in the dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_size",
      "kind": "function",
      "signature": "uint32_t dict_size(DictionaryIterator * iter)",
      "brief": "Calculates the size of data that has been written to the dictionary. AKA, the \"dictionary size\". Note that this is most likely different than the size of the backing storage/backing buffer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_begin",
      "kind": "function",
      "signature": "DictionaryResult dict_write_begin(DictionaryIterator * iter, uint8_t *const buffer, const uint16_t size)",
      "brief": "Initializes the dictionary iterator with a given buffer and size, resets and empties it, in preparation of writing key/value tuples.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_data",
      "kind": "function",
      "signature": "DictionaryResult dict_write_data(DictionaryIterator * iter, const uint32_t key, const uint8_t *const data, const uint16_t size)",
      "brief": "Adds a key with a byte array value pair to the dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_cstring",
      "kind": "function",
      "signature": "DictionaryResult dict_write_cstring(DictionaryIterator * iter, const uint32_t key, const char *const cstring)",
      "brief": "Adds a key with a C string value pair to the dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_int",
      "kind": "function",
      "signature": "DictionaryResult dict_write_int(DictionaryIterator * iter, const uint32_t key, const void * integer, const uint8_t width_bytes, const bool is_signed)",
      "brief": "Adds a key with an integer value pair to the dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_uint8",
      "kind": "function",
      "signature": "DictionaryResult dict_write_uint8(DictionaryIterator * iter, const uint32_t key, const uint8_t value)",
      "brief": "Adds a key with an unsigned, 8-bit integer value pair to the dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_uint16",
      "kind": "function",
      "signature": "DictionaryResult dict_write_uint16(DictionaryIterator * iter, const uint32_t key, const uint16_t value)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_uint32",
      "kind": "function",
      "signature": "DictionaryResult dict_write_uint32(DictionaryIterator * iter, const uint32_t key, const uint32_t value)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_int8",
      "kind": "function",
      "signature": "DictionaryResult dict_write_int8(DictionaryIterator * iter, const uint32_t key, const int8_t value)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_int16",
      "kind": "function",
      "signature": "DictionaryResult dict_write_int16(DictionaryIterator * iter, const uint32_t key, const int16_t value)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_int32",
      "kind": "function",
      "signature": "DictionaryResult dict_write_int32(DictionaryIterator * iter, const uint32_t key, const int32_t value)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_end",
      "kind": "function",
      "signature": "uint32_t dict_write_end(DictionaryIterator * iter)",
      "brief": "End a series of writing operations to a dictionary. This must be called before reading back from the dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_read_begin_from_buffer",
      "kind": "function",
      "signature": "Tuple * dict_read_begin_from_buffer(DictionaryIterator * iter, const uint8_t *const buffer, const uint16_t size)",
      "brief": "Initializes the dictionary iterator with a given buffer and size, in preparation of reading key/value tuples.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_read_next",
      "kind": "function",
      "signature": "Tuple * dict_read_next(DictionaryIterator * iter)",
      "brief": "Progresses the iterator to the next key/value pair.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_read_first",
      "kind": "function",
      "signature": "Tuple * dict_read_first(DictionaryIterator * iter)",
      "brief": "Resets the iterator back to the same state as a call to dict_read_begin_from_buffer() would do.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "TupletBytes",
      "kind": "macro",
      "signature": "#define TupletBytes(_key, _data, _length) ((const Tuplet) { .type = TUPLE_BYTE_ARRAY, .key = _key, .bytes = { .data = _data, .length = _length }})",
      "brief": "Macro to create a Tuplet with a byte array value.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "TupletCString",
      "kind": "macro",
      "signature": "#define TupletCString(_key, _cstring) ((const Tuplet) { .type = TUPLE_CSTRING, .key = _key, .cstring = { .data = _cstring, .length = _cstring ? strlen(_cstring) + 1 : 0 }})",
      "brief": "Macro to create a Tuplet with a c-string value.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "TupletInteger",
      "kind": "macro",
      "signature": "#define TupletInteger(_key, _integer) ((const Tuplet) { .type = IS_SIGNED(_integer) ? TUPLE_INT : TUPLE_UINT, .key = _key, .integer = { .storage = _integer, .width = sizeof(_integer) }})",
      "brief": "Macro to create a Tuplet with an integer value.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "DictionarySerializeCallback",
      "kind": "typedef",
      "signature": "typedef void(* DictionarySerializeCallback)(const uint8_t *const data, const uint16_t size, void *context)",
      "brief": "Callback for dict_serialize_tuplets() utility.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_serialize_tuplets",
      "kind": "function",
      "signature": "DictionaryResult dict_serialize_tuplets(DictionarySerializeCallback callback, void * context, const Tuplet *const tuplets, const uint8_t tuplets_count)",
      "brief": "Utility function that takes a list of Tuplets from which a dictionary will be serialized, ready to transmit or store.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_serialize_tuplets_to_buffer",
      "kind": "function",
      "signature": "DictionaryResult dict_serialize_tuplets_to_buffer(const Tuplet *const tuplets, const uint8_t tuplets_count, uint8_t * buffer, uint32_t * size_in_out)",
      "brief": "Utility function that takes an array of Tuplets and serializes them into a dictionary with a given buffer and size.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_serialize_tuplets_to_buffer_with_iter",
      "kind": "function",
      "signature": "DictionaryResult dict_serialize_tuplets_to_buffer_with_iter(DictionaryIterator * iter, const Tuplet *const tuplets, const uint8_t tuplets_count, uint8_t * buffer, uint32_t * size_in_out)",
      "brief": "Serializes an array of Tuplets into a dictionary with a given buffer and size.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_write_tuplet",
      "kind": "function",
      "signature": "DictionaryResult dict_write_tuplet(DictionaryIterator * iter, const Tuplet *const tuplet)",
      "brief": "Serializes a Tuplet and writes the resulting Tuple into a dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_calc_buffer_size_from_tuplets",
      "kind": "function",
      "signature": "uint32_t dict_calc_buffer_size_from_tuplets(const Tuplet *const tuplets, const uint8_t tuplets_count)",
      "brief": "Calculates the number of bytes that a dictionary will occupy, given one or more Tuplets that need to be stored in the dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "DictionaryKeyUpdatedCallback",
      "kind": "typedef",
      "signature": "typedef void(* DictionaryKeyUpdatedCallback)(const uint32_t key, const Tuple *new_tuple, const Tuple *old_tuple, void *context)",
      "brief": "Type of the callback used in dict_merge()",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_merge",
      "kind": "function",
      "signature": "DictionaryResult dict_merge(DictionaryIterator * dest, uint32_t * dest_max_size_in_out, DictionaryIterator * source, const bool update_existing_keys_only, const DictionaryKeyUpdatedCallback key_callback, void * context)",
      "brief": "Merges entries from another \"source\" dictionary into a \"destination\" dictionary. All Tuples from the source are written into the destination dictionary, while updating the exsting Tuples with matching keys.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "dict_find",
      "kind": "function",
      "signature": "Tuple * dict_find(const DictionaryIterator * iter, const uint32_t key)",
      "brief": "Tries to find a Tuple with specified key in a dictionary.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "DictionaryIterator",
      "kind": "struct",
      "signature": "struct DictionaryIterator",
      "brief": "An iterator can be used to iterate over the key/value tuples in an existing dictionary, using dict_read_begin_from_buffer(), dict_read_first() and dict_read_next(). An iterator can also be used to append key/value tuples to a dictionary, for example using dict_write_data() or dict_write_cstring().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "Tuple",
      "kind": "struct",
      "signature": "struct Tuple",
      "brief": "Data structure for one serialized key/value tuple.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "Tuplet",
      "kind": "struct",
      "signature": "struct Tuplet",
      "brief": "Non-serialized, template data structure for a key/value pair. For strings and byte arrays, it only has a pointer to the actual data. For integers, it provides storage for integers up to 32-bits wide. The Tuplet data structure is useful when creating dictionaries from values that are already stored in arbitrary buffers. See also Tuple, with is the header of a serialized key/value pair.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Dictionary",
      "url": "https://developer.repebble.com/docs/c/Foundation/Dictionary/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Dictionary.md"
    },
    {
      "name": "Event Service",
      "kind": "group",
      "signature": "Event Service",
      "brief": "APIs to handle event services.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service.md"
    },
    {
      "name": "AccelerometerService",
      "kind": "group",
      "signature": "AccelerometerService",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "AccelAxisType",
      "kind": "enum",
      "signature": "enum AccelAxisType",
      "brief": "Enumerated values defining the three accelerometer axes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "ACCEL_AXIS_X",
      "kind": "enumerator",
      "signature": "ACCEL_AXIS_X",
      "brief": "Accelerometer's X axis. The positive direction along the X axis goes toward the right of the watch.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "ACCEL_AXIS_Y",
      "kind": "enumerator",
      "signature": "ACCEL_AXIS_Y",
      "brief": "Accelerometer's Y axis. The positive direction along the Y axis goes toward the top of the watch.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "ACCEL_AXIS_Z",
      "kind": "enumerator",
      "signature": "ACCEL_AXIS_Z",
      "brief": "Accelerometer's Z axis. The positive direction along the Z axis goes vertically out of the watchface.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "AccelDataHandler",
      "kind": "typedef",
      "signature": "typedef void(* AccelDataHandler)(AccelData *data, uint32_t num_samples)",
      "brief": "Callback type for accelerometer data events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "AccelRawDataHandler",
      "kind": "typedef",
      "signature": "typedef void(* AccelRawDataHandler)(AccelRawData *data, uint32_t num_samples, uint64_t timestamp)",
      "brief": "Callback type for accelerometer raw data events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "AccelTapHandler",
      "kind": "typedef",
      "signature": "typedef void(* AccelTapHandler)(AccelAxisType axis, int32_t direction)",
      "brief": "Callback type for accelerometer tap events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "AccelSamplingRate",
      "kind": "enum",
      "signature": "enum AccelSamplingRate",
      "brief": "Valid accelerometer sampling rates, in Hz.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "ACCEL_SAMPLING_10HZ",
      "kind": "enumerator",
      "signature": "ACCEL_SAMPLING_10HZ",
      "brief": "10 HZ sampling rate",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "ACCEL_SAMPLING_25HZ",
      "kind": "enumerator",
      "signature": "ACCEL_SAMPLING_25HZ",
      "brief": "25 HZ sampling rate [Default]",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "ACCEL_SAMPLING_50HZ",
      "kind": "enumerator",
      "signature": "ACCEL_SAMPLING_50HZ",
      "brief": "50 HZ sampling rate",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "ACCEL_SAMPLING_100HZ",
      "kind": "enumerator",
      "signature": "ACCEL_SAMPLING_100HZ",
      "brief": "100 HZ sampling rate",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "accel_service_peek",
      "kind": "function",
      "signature": "int accel_service_peek(AccelData * data)",
      "brief": "Peek at the last recorded reading.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "accel_service_set_sampling_rate",
      "kind": "function",
      "signature": "int accel_service_set_sampling_rate(AccelSamplingRate rate)",
      "brief": "Change the accelerometer sampling rate.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "accel_service_set_samples_per_update",
      "kind": "function",
      "signature": "int accel_service_set_samples_per_update(uint32_t num_samples)",
      "brief": "Change the number of samples buffered between each accelerometer data event.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "accel_data_service_subscribe",
      "kind": "function",
      "signature": "void accel_data_service_subscribe(uint32_t samples_per_update, AccelDataHandler handler)",
      "brief": "Subscribe to the accelerometer data event service. Once subscribed, the handler gets called every time there are new accelerometer samples available.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "accel_data_service_unsubscribe",
      "kind": "function",
      "signature": "void accel_data_service_unsubscribe(void)",
      "brief": "Unsubscribe from the accelerometer data event service. Once unsubscribed, the previously registered handler will no longer be called.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "accel_tap_service_subscribe",
      "kind": "function",
      "signature": "void accel_tap_service_subscribe(AccelTapHandler handler)",
      "brief": "Subscribe to the accelerometer tap event service. Once subscribed, the handler gets called on every tap event emitted by the accelerometer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "accel_tap_service_unsubscribe",
      "kind": "function",
      "signature": "void accel_tap_service_unsubscribe(void)",
      "brief": "Unsubscribe from the accelerometer tap event service. Once unsubscribed, the previously registered handler will no longer be called.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "accel_raw_data_service_subscribe",
      "kind": "function",
      "signature": "void accel_raw_data_service_subscribe(uint32_t samples_per_update, AccelRawDataHandler handler)",
      "brief": "Subscribe to the accelerometer raw data event service. Once subscribed, the handler gets called every time there are new accelerometer samples available.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "AccelData",
      "kind": "struct",
      "signature": "struct AccelData",
      "brief": "A single accelerometer sample for all three axes including timestamp and vibration rumble status.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "AccelRawData",
      "kind": "struct",
      "signature": "struct AccelRawData",
      "brief": "A single accelerometer sample for all three axes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AccelerometerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AccelerometerService.md"
    },
    {
      "name": "AlarmService",
      "kind": "group",
      "signature": "AlarmService",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / AlarmService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AlarmService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AlarmService.md"
    },
    {
      "name": "alarm_service_peek_next",
      "kind": "function",
      "signature": "bool alarm_service_peek_next(time_t * timestamp_out)",
      "brief": "Peek at the next scheduled, enabled alarm.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / AlarmService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AlarmService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AlarmService.md"
    },
    {
      "name": "AppFocusService",
      "kind": "group",
      "signature": "AppFocusService",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AppFocusService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService.md"
    },
    {
      "name": "AppFocusHandler",
      "kind": "typedef",
      "signature": "typedef void(* AppFocusHandler)(bool in_focus)",
      "brief": "Callback type for focus events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AppFocusService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService.md"
    },
    {
      "name": "app_focus_service_subscribe_handlers",
      "kind": "function",
      "signature": "void app_focus_service_subscribe_handlers(AppFocusHandlers handlers)",
      "brief": "Subscribe to the focus event service. Once subscribed, the handlers get called every time the app gains or loses focus.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AppFocusService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService.md"
    },
    {
      "name": "app_focus_service_subscribe",
      "kind": "function",
      "signature": "void app_focus_service_subscribe(AppFocusHandler handler)",
      "brief": "Subscribe to the focus event service. Once subscribed, the handler gets called every time the app focus changes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AppFocusService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService.md"
    },
    {
      "name": "app_focus_service_unsubscribe",
      "kind": "function",
      "signature": "void app_focus_service_unsubscribe(void)",
      "brief": "Unsubscribe from the focus event service. Once unsubscribed, the previously registered handlers will no longer be called.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AppFocusService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService.md"
    },
    {
      "name": "AppFocusHandlers",
      "kind": "struct",
      "signature": "struct AppFocusHandlers",
      "brief": "There are two different focus events which take place when transitioning to and from an app being in focus. Below is an example of when these events will occur: 1) The app is launched. Once the system animation to the app has completed and the app is completely in focus, the did_focus handler is called with in_focus set to true. 2) A notification comes in and the animation to show the notification starts. The will_focus handler is called with in_focus set to false. 3) The animation completes and the notification is in focus, with the app being completely covered. The did_focus hander is called with in_focus set to false. 4) The notification is dismissed and the animation to return to the app starts. The will_focus handler is called with in_focus set to true. 5) The animation completes and the app is in focus. The did_focus handler is called with in_focus set to true.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / AppFocusService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/AppFocusService.md"
    },
    {
      "name": "BacklightService",
      "kind": "group",
      "signature": "BacklightService",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / BacklightService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BacklightService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BacklightService.md"
    },
    {
      "name": "BacklightHandler",
      "kind": "typedef",
      "signature": "typedef void(* BacklightHandler)(bool on)",
      "brief": "Callback type for backlight on/off events.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / BacklightService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BacklightService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BacklightService.md"
    },
    {
      "name": "backlight_service_subscribe",
      "kind": "function",
      "signature": "void backlight_service_subscribe(BacklightHandler handler)",
      "brief": "Subscribe to the backlight event service. Once subscribed, the handler is called every time the backlight transitions between off and on.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / BacklightService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BacklightService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BacklightService.md"
    },
    {
      "name": "backlight_service_unsubscribe",
      "kind": "function",
      "signature": "void backlight_service_unsubscribe(void)",
      "brief": "Unsubscribe from the backlight event service. Once unsubscribed, the previously registered handler will no longer be called.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / BacklightService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BacklightService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BacklightService.md"
    },
    {
      "name": "BatteryStateService",
      "kind": "group",
      "signature": "BatteryStateService",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / BatteryStateService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService.md"
    },
    {
      "name": "BatteryStateHandler",
      "kind": "typedef",
      "signature": "typedef void(* BatteryStateHandler)(BatteryChargeState charge)",
      "brief": "Callback type for battery state change events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / BatteryStateService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService.md"
    },
    {
      "name": "battery_state_service_subscribe",
      "kind": "function",
      "signature": "void battery_state_service_subscribe(BatteryStateHandler handler)",
      "brief": "Subscribe to the battery state event service. Once subscribed, the handler gets called on every battery state change.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / BatteryStateService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService.md"
    },
    {
      "name": "battery_state_service_unsubscribe",
      "kind": "function",
      "signature": "void battery_state_service_unsubscribe(void)",
      "brief": "Unsubscribe from the battery state event service. Once unsubscribed, the previously registered handler will no longer be called.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / BatteryStateService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService.md"
    },
    {
      "name": "battery_state_service_peek",
      "kind": "function",
      "signature": "BatteryChargeState battery_state_service_peek(void)",
      "brief": "Peek at the last known battery state.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / BatteryStateService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService.md"
    },
    {
      "name": "BatteryChargeState",
      "kind": "struct",
      "signature": "struct BatteryChargeState",
      "brief": "Structure for retrieval of the battery charge state.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / BatteryStateService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/BatteryStateService.md"
    },
    {
      "name": "CompassService",
      "kind": "group",
      "signature": "CompassService",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "CompassStatus",
      "kind": "enum",
      "signature": "enum CompassStatus",
      "brief": "Enum describing the current state of the Compass Service.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "CompassStatusUnavailable",
      "kind": "enumerator",
      "signature": "CompassStatusUnavailable",
      "brief": "The Compass Service is unavailable.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "CompassStatusDataInvalid",
      "kind": "enumerator",
      "signature": "CompassStatusDataInvalid",
      "brief": "Compass is calibrating: data is invalid and should not be used Data will become valid once calibration is complete.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "CompassStatusCalibrating",
      "kind": "enumerator",
      "signature": "CompassStatusCalibrating",
      "brief": "Compass is calibrating: the data is valid but the calibration is still being refined.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "CompassStatusCalibrated",
      "kind": "enumerator",
      "signature": "CompassStatusCalibrated",
      "brief": "Compass data is valid and the calibration has completed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "CompassHeading",
      "kind": "typedef",
      "signature": "typedef int32_t CompassHeading",
      "brief": "Represents an angle relative to get to a reference direction, e.g. (magnetic) north. The angle value is scaled linearly, such that a value of TRIG_MAX_ANGLE corresponds to 360 degrees or 2 PI radians. Thus, if heading towards north, north is 0, west is TRIG_MAX_ANGLE/4, south is TRIG_MAX_ANGLE/2, and so on.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "CompassHeadingHandler",
      "kind": "typedef",
      "signature": "typedef void(* CompassHeadingHandler)(CompassHeadingData heading)",
      "brief": "Callback type for compass heading events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "compass_service_set_heading_filter",
      "kind": "function",
      "signature": "int compass_service_set_heading_filter(CompassHeading filter)",
      "brief": "Set the minimum angular change required to generate new compass heading events. The angular distance is measured relative to the last delivered heading event. Use 0 to be notified of all movements. Negative values and values > TRIG_MAX_ANGLE / 2 are not valid. The default value of this property is TRIG_MAX_ANGLE / 360.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "compass_service_subscribe",
      "kind": "function",
      "signature": "void compass_service_subscribe(CompassHeadingHandler handler)",
      "brief": "Subscribe to the compass heading event service. Once subscribed, the handler gets called every time the angular distance relative to the previous value exceeds the configured filter.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "compass_service_unsubscribe",
      "kind": "function",
      "signature": "void compass_service_unsubscribe(void)",
      "brief": "Unsubscribe from the compass heading event service. Once unsubscribed, the previously registered handler will no longer be called.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "compass_service_peek",
      "kind": "function",
      "signature": "int compass_service_peek(CompassHeadingData * data)",
      "brief": "Peek at the last recorded reading.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "CompassHeadingData",
      "kind": "struct",
      "signature": "struct CompassHeadingData",
      "brief": "Structure containing a single heading towards magnetic and true north.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / CompassService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/CompassService.md"
    },
    {
      "name": "ConnectionService",
      "kind": "group",
      "signature": "ConnectionService",
      "brief": "Determine what the Pebble watch is connected to",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "ConnectionHandler",
      "kind": "typedef",
      "signature": "typedef void(* ConnectionHandler)(bool connected)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "connection_service_peek_pebble_app_connection",
      "kind": "function",
      "signature": "bool connection_service_peek_pebble_app_connection(void)",
      "brief": "Query the bluetooth connection service for the current Pebble app connection status.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "connection_service_peek_pebblekit_connection",
      "kind": "function",
      "signature": "bool connection_service_peek_pebblekit_connection(void)",
      "brief": "Query the bluetooth connection service for the current PebbleKit connection status.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "connection_service_subscribe",
      "kind": "function",
      "signature": "void connection_service_subscribe(ConnectionHandlers conn_handlers)",
      "brief": "Subscribe to the connection event service. Once subscribed, the appropriate handler gets called based on the type of connection event and user provided handlers.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "connection_service_unsubscribe",
      "kind": "function",
      "signature": "void connection_service_unsubscribe(void)",
      "brief": "Unsubscribe from the bluetooth event service. Once unsubscribed, the previously registered handler will no longer be called.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "BluetoothConnectionHandler",
      "kind": "typedef",
      "signature": "typedef ConnectionHandler BluetoothConnectionHandler",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "bluetooth_connection_service_peek",
      "kind": "function",
      "signature": "bool bluetooth_connection_service_peek(void)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "bluetooth_connection_service_subscribe",
      "kind": "function",
      "signature": "void bluetooth_connection_service_subscribe(ConnectionHandler handler)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "bluetooth_connection_service_unsubscribe",
      "kind": "function",
      "signature": "void bluetooth_connection_service_unsubscribe(void)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "ConnectionHandlers",
      "kind": "struct",
      "signature": "struct ConnectionHandlers",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / ConnectionService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/ConnectionService.md"
    },
    {
      "name": "HealthService",
      "kind": "group",
      "signature": "HealthService",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetric",
      "kind": "enum",
      "signature": "enum HealthMetric",
      "brief": "Health metric values used to retrieve health data. For example, using health_service_sum().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetricStepCount",
      "kind": "enumerator",
      "signature": "HealthMetricStepCount",
      "brief": "The number of steps counted.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetricActiveSeconds",
      "kind": "enumerator",
      "signature": "HealthMetricActiveSeconds",
      "brief": "The number of seconds spent active (i.e. not resting).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetricWalkedDistanceMeters",
      "kind": "enumerator",
      "signature": "HealthMetricWalkedDistanceMeters",
      "brief": "The distance walked, in meters.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetricSleepSeconds",
      "kind": "enumerator",
      "signature": "HealthMetricSleepSeconds",
      "brief": "The number of seconds spent sleeping.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetricSleepRestfulSeconds",
      "kind": "enumerator",
      "signature": "HealthMetricSleepRestfulSeconds",
      "brief": "The number of sleep seconds in the 'restful' or deep sleep state.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetricRestingKCalories",
      "kind": "enumerator",
      "signature": "HealthMetricRestingKCalories",
      "brief": "The number of kcal (Calories) burned while resting due to resting metabolism.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetricActiveKCalories",
      "kind": "enumerator",
      "signature": "HealthMetricActiveKCalories",
      "brief": "The number of kcal (Calories) burned while active.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetricHeartRateBPM",
      "kind": "enumerator",
      "signature": "HealthMetricHeartRateBPM",
      "brief": "The heart rate, in beats per minute. This is a filtered value that is at most 15 minutes old.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetricHeartRateRawBPM",
      "kind": "enumerator",
      "signature": "HealthMetricHeartRateRawBPM",
      "brief": "The raw heart rate value of the most recent sample, in beats per minute.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthValue",
      "kind": "typedef",
      "signature": "typedef int32_t HealthValue",
      "brief": "Type used to represent HealthMetric values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMetricAlert",
      "kind": "typedef",
      "signature": "typedef struct HealthMetricAlert HealthMetricAlert",
      "brief": "Type used as a handle to a registered metric alert (returned by health_service_register_metric_alert)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_sum",
      "kind": "function",
      "signature": "HealthValue health_service_sum(HealthMetric metric, time_t time_start, time_t time_end)",
      "brief": "Return the sum of a HealthMetric's values over a time range. The time_start and time_end parameters define the range of time you want the sum for.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_sum_today",
      "kind": "function",
      "signature": "HealthValue health_service_sum_today(HealthMetric metric)",
      "brief": "Convenience wrapper for health_service_sum() that returns the sum for today.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_peek_current_value",
      "kind": "function",
      "signature": "HealthValue health_service_peek_current_value(HealthMetric metric)",
      "brief": "Convenience function for peeking at the current value of a metric. This is useful for metrics like HealthMetricHeartRateBPM that represent instantaneous values. It is NOT applicable for metrics like HealthMetricStepCount that must be accumulated over time (it will return 0 if passed that type of metric). This call is equivalent to calling health_service_aggregate_averaged(metric, time(NULL), time(NULL), HealthAggregationAvg, HealthServiceTimeScopeOnce)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthServiceTimeScope",
      "kind": "enum",
      "signature": "enum HealthServiceTimeScope",
      "brief": "Used by health_service_sum_averaged() to specify how the average is computed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthServiceTimeScopeOnce",
      "kind": "enumerator",
      "signature": "HealthServiceTimeScopeOnce",
      "brief": "No average computed. The result is the same as calling health_service_sum().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthServiceTimeScopeWeekly",
      "kind": "enumerator",
      "signature": "HealthServiceTimeScopeWeekly",
      "brief": "Compute average using the same day from each week. For example, every Monday if the passed in time range falls on a Monday.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthServiceTimeScopeDailyWeekdayOrWeekend",
      "kind": "enumerator",
      "signature": "HealthServiceTimeScopeDailyWeekdayOrWeekend",
      "brief": "Compute average using either weekdays (Monday to Friday) or weekends (Saturday and Sunday), depending on which day the passed in time range falls.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthServiceTimeScopeDaily",
      "kind": "enumerator",
      "signature": "HealthServiceTimeScopeDaily",
      "brief": "Compute average across all days of the week.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_sum_averaged",
      "kind": "function",
      "signature": "HealthValue health_service_sum_averaged(HealthMetric metric, time_t time_start, time_t time_end, HealthServiceTimeScope scope)",
      "brief": "Return the value of a metric's sum over a given time range between time_start and time_end. Using this call you can specify the time range that you are interested in getting the average for, as well as a scope specifier on how to compute an average of the sum. For example, if you want to get the average number of steps taken from 12 AM (midnight) to 9 AM across all days you would specify:",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthAggregation",
      "kind": "enum",
      "signature": "enum HealthAggregation",
      "brief": "Used by health_service_aggregate_averaged() to specify what type of aggregation to perform. This aggregation is applied to the metric before the average is computed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthAggregationSum",
      "kind": "enumerator",
      "signature": "HealthAggregationSum",
      "brief": "Sum the metric. The result is the same as calling health_service_sum_averaged(). This operation is only applicable for metrics that accumulate, like HealthMetricStepCount, HealthMetricActiveSeconds, etc.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthAggregationAvg",
      "kind": "enumerator",
      "signature": "HealthAggregationAvg",
      "brief": "Use the average of the metric. This is only applicable for metrics that measure instantaneous values, like HealthMetricHeartRateBPM.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthAggregationMin",
      "kind": "enumerator",
      "signature": "HealthAggregationMin",
      "brief": "Use the minimum value of the metric. This is only applicable for metrics that measure instantaneous values, like HealthMetricHeartRateBPM.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthAggregationMax",
      "kind": "enumerator",
      "signature": "HealthAggregationMax",
      "brief": "Use the maximum value of the metric. This is only applicable for metrics that measure instantaneous values, like HealthMetricHeartRateBPM.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_aggregate_averaged",
      "kind": "function",
      "signature": "HealthValue health_service_aggregate_averaged(HealthMetric metric, time_t time_start, time_t time_end, HealthAggregation aggregation, HealthServiceTimeScope scope)",
      "brief": "Return the value of an aggregated metric over a given time range. This call is more flexible than health_service_sum_averaged because it lets you specify which aggregation function to perform.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthActivityMask",
      "kind": "typedef",
      "signature": "typedef uint32_t HealthActivityMask",
      "brief": "Expresses a set of HealthActivity values as a bitmask.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthActivityMaskAll",
      "kind": "macro",
      "signature": "#define HealthActivityMaskAll ((HealthActivityOpenWorkout << 1) - 1)",
      "brief": "A mask value representing all available activities.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthActivity",
      "kind": "enum",
      "signature": "enum HealthActivity",
      "brief": "Health-related activities that can be accessed using.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthActivityNone",
      "kind": "enumerator",
      "signature": "HealthActivityNone",
      "brief": "No special activity.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthActivitySleep",
      "kind": "enumerator",
      "signature": "HealthActivitySleep",
      "brief": "The 'sleeping' activity.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthActivityRestfulSleep",
      "kind": "enumerator",
      "signature": "HealthActivityRestfulSleep",
      "brief": "The 'restful sleeping' activity.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthActivityWalk",
      "kind": "enumerator",
      "signature": "HealthActivityWalk",
      "brief": "The 'walk' activity.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthActivityRun",
      "kind": "enumerator",
      "signature": "HealthActivityRun",
      "brief": "The 'run' activity.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthActivityOpenWorkout",
      "kind": "enumerator",
      "signature": "HealthActivityOpenWorkout",
      "brief": "The 'generic' activity.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_peek_current_activities",
      "kind": "function",
      "signature": "HealthActivityMask health_service_peek_current_activities(void)",
      "brief": "Return a HealthActivityMask containing a set of bits, one set for each activity that is currently active.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthActivityIteratorCB",
      "kind": "typedef",
      "signature": "typedef bool(* HealthActivityIteratorCB)(HealthActivity activity, time_t time_start, time_t time_end, void *context)",
      "brief": "Callback used by health_service_activities_iterate().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthIterationDirection",
      "kind": "enum",
      "signature": "enum HealthIterationDirection",
      "brief": "Iteration direction, passed to health_service_activities_iterate(). When iterating backwards (HealthIterationDirectionPast), activities that have a greater value for time_end come first. When iterating forward (HealthIterationDirectionFuture), activities that have a smaller value for time_start come first.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthIterationDirectionPast",
      "kind": "enumerator",
      "signature": "HealthIterationDirectionPast",
      "brief": "Iterate into the past.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthIterationDirectionFuture",
      "kind": "enumerator",
      "signature": "HealthIterationDirectionFuture",
      "brief": "Iterate into the future.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_activities_iterate",
      "kind": "function",
      "signature": "void health_service_activities_iterate(HealthActivityMask activity_mask, time_t time_start, time_t time_end, HealthIterationDirection direction, HealthActivityIteratorCB callback, void * context)",
      "brief": "Iterates backwards or forward within a given time span to list all recorded activities. For example, this can be used to find the last recorded sleep phase or all deep sleep phases in a given time range. Any activity that overlaps with time_start and time_end will be included, even if the start time starts before time_start or end time ends after time_end.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthServiceAccessibilityMask",
      "kind": "enum",
      "signature": "enum HealthServiceAccessibilityMask",
      "brief": "Possible values returned by health_service_metric_accessible(). The values are used in combination as a bitmask. For example, to check if any data is available for a given request use: bool any_data_available = value & HealthServiceAccessibilityMaskAvailable;.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthServiceAccessibilityMaskAvailable",
      "kind": "enumerator",
      "signature": "HealthServiceAccessibilityMaskAvailable",
      "brief": "Return values are available and represent the collected health information.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthServiceAccessibilityMaskNoPermission",
      "kind": "enumerator",
      "signature": "HealthServiceAccessibilityMaskNoPermission",
      "brief": "The user hasn't granted permission.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthServiceAccessibilityMaskNotSupported",
      "kind": "enumerator",
      "signature": "HealthServiceAccessibilityMaskNotSupported",
      "brief": "The queried combination of time span and HealthMetric or HealthActivityMask is currently unsupported.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthServiceAccessibilityMaskNotAvailable",
      "kind": "enumerator",
      "signature": "HealthServiceAccessibilityMaskNotAvailable",
      "brief": "No samples were recorded for the given time span.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_metric_accessible",
      "kind": "function",
      "signature": "HealthServiceAccessibilityMask health_service_metric_accessible(HealthMetric metric, time_t time_start, time_t time_end)",
      "brief": "Check if a certain combination of metric and time span is accessible using health_service_sum by returning a value of HealthServiceAccessibilityMask. Developers should check if the return value is HealthServiceAccessibilityMaskAvailable before calling health_service_sum.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_metric_averaged_accessible",
      "kind": "function",
      "signature": "HealthServiceAccessibilityMask health_service_metric_averaged_accessible(HealthMetric metric, time_t time_start, time_t time_end, HealthServiceTimeScope scope)",
      "brief": "Check if a certain combination of metric, time span, and scope is accessible for calculating summed, averaged data by returning a value of HealthServiceAccessibilityMask. Developers should check if the return value is HealthServiceAccessibilityMaskAvailable before calling health_service_sum_averaged.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_metric_aggregate_averaged_accessible",
      "kind": "function",
      "signature": "HealthServiceAccessibilityMask health_service_metric_aggregate_averaged_accessible(HealthMetric metric, time_t time_start, time_t time_end, HealthAggregation aggregation, HealthServiceTimeScope scope)",
      "brief": "Check if a certain combination of metric, time span, aggregation operation, and scope is accessible for calculating aggregated, averaged data by returning a value of HealthServiceAccessibilityMask. Developers should check if the return value is HealthServiceAccessibilityMaskAvailable before calling health_service_aggregate_averaged.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_any_activity_accessible",
      "kind": "function",
      "signature": "HealthServiceAccessibilityMask health_service_any_activity_accessible(HealthActivityMask activity_mask, time_t time_start, time_t time_end)",
      "brief": "Check if a certain combination of metric, HealthActivityMask and time span is accessible. Developers should check if the return value is HealthServiceAccessibilityMaskAvailable before calling any other HealthService APIs that involve the given activities.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthEventType",
      "kind": "enum",
      "signature": "enum HealthEventType",
      "brief": "Health event enum. Passed into the HealthEventHandler.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthEventSignificantUpdate",
      "kind": "enumerator",
      "signature": "HealthEventSignificantUpdate",
      "brief": "All data is considered as outdated and apps should re-read all health data. This happens after an app is subscribed via health_service_events_subscribe(), on a change of the day, or in other cases that significantly change the underlying data.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthEventMovementUpdate",
      "kind": "enumerator",
      "signature": "HealthEventMovementUpdate",
      "brief": "Recent values around HealthMetricStepCount, HealthMetricActiveSeconds, or HealthMetricWalkedDistanceMeters have changed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthEventSleepUpdate",
      "kind": "enumerator",
      "signature": "HealthEventSleepUpdate",
      "brief": "Recent values around HealthMetricSleepSeconds, HealthMetricSleepRestfulSeconds, HealthActivitySleep, and HealthActivityRestfulSleep changed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthEventMetricAlert",
      "kind": "enumerator",
      "signature": "HealthEventMetricAlert",
      "brief": "A metric has crossed the threshold set by health_service_register_metric_alert.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthEventHeartRateUpdate",
      "kind": "enumerator",
      "signature": "HealthEventHeartRateUpdate",
      "brief": "Value of HealthMetricHeartRateBPM or HealthMetricHeartRateRawBPM has changed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthEventHRVUpdate",
      "kind": "enumerator",
      "signature": "HealthEventHRVUpdate",
      "brief": "A new HRV peak-to-peak interval reading is available.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthEventHandler",
      "kind": "typedef",
      "signature": "typedef void(* HealthEventHandler)(HealthEventType event, void *context)",
      "brief": "Developer-supplied event handler, called when a health-related event occurs after subscribing via health_service_events_subscribe();.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_events_subscribe",
      "kind": "function",
      "signature": "bool health_service_events_subscribe(HealthEventHandler handler, void * context)",
      "brief": "Subscribe to HealthService events. This allocates a cache on the application's heap of up to 2048 bytes that will be de-allocated if you call health_service_events_unsubscribe(). If there's not enough heap available, this function will return false and will not subscribe to any events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_events_unsubscribe",
      "kind": "function",
      "signature": "bool health_service_events_unsubscribe(void)",
      "brief": "Unsubscribe from HealthService events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_set_heart_rate_sample_period",
      "kind": "function",
      "signature": "bool health_service_set_heart_rate_sample_period(uint16_t interval_sec)",
      "brief": "Set the desired sampling period for heart rate readings. Normally, the system will sample the heart rate using a sampling period that is automatically chosen to provide useful information without undue battery drain (it automatically samples more often during periods of intense activity, and less often when the user is idle). If desired though, an application can request a specific sampling period using this call. The system will use this as a suggestion, but does not guarantee that the requested period will be used. The actual sampling period may be greater or less due to system needs or heart rate sensor reading quality issues.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_get_heart_rate_sample_period_expiration_sec",
      "kind": "function",
      "signature": "uint16_t health_service_get_heart_rate_sample_period_expiration_sec(void)",
      "brief": "Return how long a heart rate sample period request (sent via health_service_set_heart_rate_sample_period) will remain active after the app exits. If there is no current request by this app, this call will return 0.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_register_metric_alert",
      "kind": "function",
      "signature": "HealthMetricAlert * health_service_register_metric_alert(HealthMetric metric, HealthValue threshold)",
      "brief": "Register for an alert when a metric crosses the given threshold. When the metric crosses this threshold (either goes above or below it), a HealthEventMetricAlert event will be generated. To cancel this registration, pass the returned HealthMetricAlert value to health_service_cancel_metric_alert. The only metric currently supported by this call is HealthMetricHeartRateBPM, but future versions may support additional metrics. To see if a specific metric is supported by this call, use:",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_cancel_metric_alert",
      "kind": "function",
      "signature": "bool health_service_cancel_metric_alert(HealthMetricAlert * alert)",
      "brief": "Cancel an metric alert previously created with health_service_register_metric_alert.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "AmbientLightLevel",
      "kind": "enum",
      "signature": "enum AmbientLightLevel",
      "brief": "Light level enum.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "AmbientLightLevelUnknown",
      "kind": "enumerator",
      "signature": "AmbientLightLevelUnknown",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "AmbientLightLevelVeryDark",
      "kind": "enumerator",
      "signature": "AmbientLightLevelVeryDark",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "AmbientLightLevelDark",
      "kind": "enumerator",
      "signature": "AmbientLightLevelDark",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "AmbientLightLevelLight",
      "kind": "enumerator",
      "signature": "AmbientLightLevelLight",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "AmbientLightLevelVeryLight",
      "kind": "enumerator",
      "signature": "AmbientLightLevelVeryLight",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_get_minute_history",
      "kind": "function",
      "signature": "uint32_t health_service_get_minute_history(HealthMinuteData * minute_data, uint32_t max_records, time_t * time_start, time_t * time_end)",
      "brief": "Return historical minute data records. This fills in the minute_data array parameter with minute by minute statistics of the user's steps, average watch orientation, etc. The data is returned in time order, with the oldest minute data returned at minute_data[0].",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "PBL_IF_HEALTH_ELSE",
      "kind": "macro",
      "signature": "#define PBL_IF_HEALTH_ELSE(if_true, if_false) (if_true)",
      "brief": "Convenience macro to switch between two expressions depending on health support. On platforms with health support the first expression will be chosen, the second otherwise.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "MeasurementSystem",
      "kind": "enum",
      "signature": "enum MeasurementSystem",
      "brief": "Types of measurement system a HealthMetric may be measured in.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "MeasurementSystemUnknown",
      "kind": "enumerator",
      "signature": "MeasurementSystemUnknown",
      "brief": "The measurement system is unknown, or does not apply to the chosen metric.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "MeasurementSystemMetric",
      "kind": "enumerator",
      "signature": "MeasurementSystemMetric",
      "brief": "The metric measurement system.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "MeasurementSystemImperial",
      "kind": "enumerator",
      "signature": "MeasurementSystemImperial",
      "brief": "The imperial measurement system.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "health_service_get_measurement_system_for_display",
      "kind": "function",
      "signature": "MeasurementSystem health_service_get_measurement_system_for_display(HealthMetric metric)",
      "brief": "Get the preferred measurement system for a given HealthMetric, if the user has chosen a preferred system and it is applicable to that metric.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "HealthMinuteData",
      "kind": "struct",
      "signature": "struct HealthMinuteData",
      "brief": "Structure representing a single minute data record returned by health_service_get_minute_history(). The orientation field encodes the angle of the watch in the x-y plane (the \"yaw\") in the lower 4 bits (360 degrees linearly mapped to 1 of 16 different values) and the angle to the z axis (the \"pitch\") in the upper 4 bits. The vmc value is a measure of the total amount of movement seen by the watch. More vigorous movement yields higher VMC values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / HealthService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/HealthService.md"
    },
    {
      "name": "TickTimerService",
      "kind": "group",
      "signature": "TickTimerService",
      "brief": "Handling time components",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "TimeUnits",
      "kind": "enum",
      "signature": "enum TimeUnits",
      "brief": "Time unit flags that can be used to create a bitmask for use in tick_timer_service_subscribe(). This will also be passed to TickHandler.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "SECOND_UNIT",
      "kind": "enumerator",
      "signature": "SECOND_UNIT",
      "brief": "Flag to represent the \"seconds\" time unit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "MINUTE_UNIT",
      "kind": "enumerator",
      "signature": "MINUTE_UNIT",
      "brief": "Flag to represent the \"minutes\" time unit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "HOUR_UNIT",
      "kind": "enumerator",
      "signature": "HOUR_UNIT",
      "brief": "Flag to represent the \"hours\" time unit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "DAY_UNIT",
      "kind": "enumerator",
      "signature": "DAY_UNIT",
      "brief": "Flag to represent the \"days\" time unit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "MONTH_UNIT",
      "kind": "enumerator",
      "signature": "MONTH_UNIT",
      "brief": "Flag to represent the \"months\" time unit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "YEAR_UNIT",
      "kind": "enumerator",
      "signature": "YEAR_UNIT",
      "brief": "Flag to represent the \"years\" time unit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "TickHandler",
      "kind": "typedef",
      "signature": "typedef void(* TickHandler)(struct tm *tick_time, TimeUnits units_changed)",
      "brief": "Callback type for tick timer events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "tick_timer_service_subscribe",
      "kind": "function",
      "signature": "void tick_timer_service_subscribe(TimeUnits tick_units, TickHandler handler)",
      "brief": "Subscribe to the tick timer event service. Once subscribed, the handler gets called on every requested unit change. Calling this function multiple times will override the units and handler (i.e., only  the last tick_units and handler passed will be used).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "tick_timer_service_unsubscribe",
      "kind": "function",
      "signature": "void tick_timer_service_unsubscribe(void)",
      "brief": "Unsubscribe from the tick timer event service. Once unsubscribed, the previously registered handler will no longer be called.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Event Service / TickTimerService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TickTimerService.md"
    },
    {
      "name": "TouchService",
      "kind": "group",
      "signature": "TouchService",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "TouchEventType",
      "kind": "enum",
      "signature": "enum TouchEventType",
      "brief": "Touch event type.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "TouchEvent_Touchdown",
      "kind": "enumerator",
      "signature": "TouchEvent_Touchdown",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "TouchEvent_Liftoff",
      "kind": "enumerator",
      "signature": "TouchEvent_Liftoff",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "TouchEvent_PositionUpdate",
      "kind": "enumerator",
      "signature": "TouchEvent_PositionUpdate",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "TouchServiceHandler",
      "kind": "typedef",
      "signature": "typedef void(* TouchServiceHandler)(const TouchEvent *event, void *context)",
      "brief": "Callback for touch events.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "touch_service_subscribe",
      "kind": "function",
      "signature": "void touch_service_subscribe(TouchServiceHandler handler, void * context)",
      "brief": "Subscribe to touch events. The touch sensor is enabled while subscribed.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "touch_service_unsubscribe",
      "kind": "function",
      "signature": "void touch_service_unsubscribe(void)",
      "brief": "Unsubscribe from touch events. The touch sensor is disabled if no other subscribers remain.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "touch_service_is_enabled",
      "kind": "function",
      "signature": "bool touch_service_is_enabled(void)",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "app_touch_navigation_enable",
      "kind": "function",
      "signature": "void app_touch_navigation_enable(bool enable)",
      "brief": "Opt this app into (or out of) touch navigation: the system gesture bridge that maps swipes/taps on a MenuLayer/ScrollLayer to button presses. Third-party apps are opt-out by default and receive no touch navigation even when the user has enabled it system-wide; call this with enable true to participate. Takes effect immediately when touch navigation is enabled system-wide, otherwise once the user enables it.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "TouchEvent",
      "kind": "struct",
      "signature": "struct TouchEvent",
      "brief": "Touch event data, carried directly in PebbleTouchEvent.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Event Service / TouchService",
      "url": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Event_Service/TouchService.md"
    },
    {
      "name": "Exit Reason",
      "kind": "group",
      "signature": "Exit Reason",
      "brief": "API for the application to notify the system of the reason it will exit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Exit Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason.md"
    },
    {
      "name": "AppExitReason",
      "kind": "enum",
      "signature": "enum AppExitReason",
      "brief": "AppExitReason is used to notify the system of the reason of an application exiting, which may affect the part of the system UI that is presented after the application terminates.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Exit Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason.md"
    },
    {
      "name": "APP_EXIT_NOT_SPECIFIED",
      "kind": "enumerator",
      "signature": "APP_EXIT_NOT_SPECIFIED",
      "brief": "Exit reason not specified.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Exit Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason.md"
    },
    {
      "name": "APP_EXIT_ACTION_PERFORMED_SUCCESSFULLY",
      "kind": "enumerator",
      "signature": "APP_EXIT_ACTION_PERFORMED_SUCCESSFULLY",
      "brief": "Application performed an action when it exited.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Exit Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason.md"
    },
    {
      "name": "NUM_EXIT_REASONS",
      "kind": "enumerator",
      "signature": "NUM_EXIT_REASONS",
      "brief": "Number of AppExitReason options.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Exit Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason.md"
    },
    {
      "name": "exit_reason_set",
      "kind": "function",
      "signature": "void exit_reason_set(AppExitReason exit_reason)",
      "brief": "Set the app exit reason to a new reason.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Exit Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Exit_Reason.md"
    },
    {
      "name": "Internationalization",
      "kind": "group",
      "signature": "Internationalization",
      "brief": "Internationalization & Localization APIs",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Internationalization",
      "url": "https://developer.repebble.com/docs/c/Foundation/Internationalization/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Internationalization.md"
    },
    {
      "name": "i18n_get_system_locale",
      "kind": "function",
      "signature": "const char * i18n_get_system_locale(void)",
      "brief": "Get the ISO locale name for the language currently set on the watch.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Internationalization",
      "url": "https://developer.repebble.com/docs/c/Foundation/Internationalization/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Internationalization.md"
    },
    {
      "name": "Launch Reason",
      "kind": "group",
      "signature": "Launch Reason",
      "brief": "API for checking what caused the application to launch.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "AppLaunchReason",
      "kind": "enum",
      "signature": "enum AppLaunchReason",
      "brief": "AppLaunchReason is used to inform the application about how it was launched.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_LAUNCH_SYSTEM",
      "kind": "enumerator",
      "signature": "APP_LAUNCH_SYSTEM",
      "brief": "App launched by the system.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_LAUNCH_USER",
      "kind": "enumerator",
      "signature": "APP_LAUNCH_USER",
      "brief": "App launched by user selection in launcher menu.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_LAUNCH_PHONE",
      "kind": "enumerator",
      "signature": "APP_LAUNCH_PHONE",
      "brief": "App launched by mobile or companion app.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_LAUNCH_WAKEUP",
      "kind": "enumerator",
      "signature": "APP_LAUNCH_WAKEUP",
      "brief": "App launched by wakeup event.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_LAUNCH_WORKER",
      "kind": "enumerator",
      "signature": "APP_LAUNCH_WORKER",
      "brief": "App launched by worker calling worker_launch_app()",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_LAUNCH_QUICK_LAUNCH",
      "kind": "enumerator",
      "signature": "APP_LAUNCH_QUICK_LAUNCH",
      "brief": "App launched by user using quick launch.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_LAUNCH_TIMELINE_ACTION",
      "kind": "enumerator",
      "signature": "APP_LAUNCH_TIMELINE_ACTION",
      "brief": "App launched by user opening it from a pin.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_LAUNCH_SMARTSTRAP",
      "kind": "enumerator",
      "signature": "APP_LAUNCH_SMARTSTRAP",
      "brief": "App launched by a smartstrap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "launch_reason",
      "kind": "function",
      "signature": "AppLaunchReason launch_reason(void)",
      "brief": "Provides the method used to launch the current application.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "launch_get_args",
      "kind": "function",
      "signature": "uint32_t launch_get_args(void)",
      "brief": "Get the argument passed to the app when it was launched.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "AppQuickLaunchAction",
      "kind": "enum",
      "signature": "enum AppQuickLaunchAction",
      "brief": "Details about how an app was quick launched. Returned by app_launch_get_quick_launch_action.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_QUICK_LAUNCH_ACTION_NONE",
      "kind": "enumerator",
      "signature": "APP_QUICK_LAUNCH_ACTION_NONE",
      "brief": "App was not launched via Quick Launch.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_QUICK_LAUNCH_ACTION_HOLD",
      "kind": "enumerator",
      "signature": "APP_QUICK_LAUNCH_ACTION_HOLD",
      "brief": "User held a single button.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_QUICK_LAUNCH_ACTION_TAP",
      "kind": "enumerator",
      "signature": "APP_QUICK_LAUNCH_ACTION_TAP",
      "brief": "User tapped a button (single click)",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "APP_QUICK_LAUNCH_ACTION_COMBO",
      "kind": "enumerator",
      "signature": "APP_QUICK_LAUNCH_ACTION_COMBO",
      "brief": "User held a button combination.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "launch_button",
      "kind": "function",
      "signature": "ButtonId launch_button(void)",
      "brief": "Get the button id used to launch the app. Only valid if the launch reason is APP_LAUNCH_USER or APP_LAUNCH_QUICK_LAUNCH.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "launch_get_quick_launch_action",
      "kind": "function",
      "signature": "AppQuickLaunchAction launch_get_quick_launch_action(void)",
      "brief": "Get the action that was used to quick launch the app.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Launch Reason",
      "url": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Launch_Reason.md"
    },
    {
      "name": "Logging",
      "kind": "group",
      "signature": "Logging",
      "brief": "Functions related to logging from apps.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Logging",
      "url": "https://developer.repebble.com/docs/c/Foundation/Logging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Logging.md"
    },
    {
      "name": "app_log",
      "kind": "function",
      "signature": "void app_log(uint8_t log_level, const char * src_filename, int src_line_number, const char * fmt, ...)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Logging",
      "url": "https://developer.repebble.com/docs/c/Foundation/Logging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Logging.md"
    },
    {
      "name": "APP_LOG",
      "kind": "macro",
      "signature": "#define APP_LOG(level, fmt, args...) app_log(level, __FILE_NAME__, __LINE__, fmt, ## args)",
      "brief": "A helper macro that simplifies the use of the app_log function.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Logging",
      "url": "https://developer.repebble.com/docs/c/Foundation/Logging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Logging.md"
    },
    {
      "name": "AppLogLevel",
      "kind": "enum",
      "signature": "enum AppLogLevel",
      "brief": "Suggested log level values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Logging",
      "url": "https://developer.repebble.com/docs/c/Foundation/Logging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Logging.md"
    },
    {
      "name": "APP_LOG_LEVEL_ERROR",
      "kind": "enumerator",
      "signature": "APP_LOG_LEVEL_ERROR",
      "brief": "Error level log message.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Logging",
      "url": "https://developer.repebble.com/docs/c/Foundation/Logging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Logging.md"
    },
    {
      "name": "APP_LOG_LEVEL_WARNING",
      "kind": "enumerator",
      "signature": "APP_LOG_LEVEL_WARNING",
      "brief": "Warning level log message.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Logging",
      "url": "https://developer.repebble.com/docs/c/Foundation/Logging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Logging.md"
    },
    {
      "name": "APP_LOG_LEVEL_INFO",
      "kind": "enumerator",
      "signature": "APP_LOG_LEVEL_INFO",
      "brief": "Info level log message.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Logging",
      "url": "https://developer.repebble.com/docs/c/Foundation/Logging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Logging.md"
    },
    {
      "name": "APP_LOG_LEVEL_DEBUG",
      "kind": "enumerator",
      "signature": "APP_LOG_LEVEL_DEBUG",
      "brief": "Debug level log message.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Logging",
      "url": "https://developer.repebble.com/docs/c/Foundation/Logging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Logging.md"
    },
    {
      "name": "APP_LOG_LEVEL_DEBUG_VERBOSE",
      "kind": "enumerator",
      "signature": "APP_LOG_LEVEL_DEBUG_VERBOSE",
      "brief": "Verbose Debug level log message.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Logging",
      "url": "https://developer.repebble.com/docs/c/Foundation/Logging/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Logging.md"
    },
    {
      "name": "Math",
      "kind": "group",
      "signature": "Math",
      "brief": "Math routines.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Math",
      "url": "https://developer.repebble.com/docs/c/Foundation/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Math.md"
    },
    {
      "name": "TRIG_MAX_RATIO",
      "kind": "macro",
      "signature": "#define TRIG_MAX_RATIO 0xffff",
      "brief": "The largest value that can result from a call to sin_lookup or cos_lookup. For a code example, see the detailed description at the top of this chapter: Math.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Math",
      "url": "https://developer.repebble.com/docs/c/Foundation/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Math.md"
    },
    {
      "name": "TRIG_MAX_ANGLE",
      "kind": "macro",
      "signature": "#define TRIG_MAX_ANGLE 0x10000",
      "brief": "Angle value that corresponds to 360 degrees or 2 PI radians.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Math",
      "url": "https://developer.repebble.com/docs/c/Foundation/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Math.md"
    },
    {
      "name": "TRIGANGLE_TO_DEG",
      "kind": "macro",
      "signature": "#define TRIGANGLE_TO_DEG(trig_angle) (((trig_angle) * 360) / TRIG_MAX_ANGLE)",
      "brief": "Converts from a fixed point value representation to the equivalent value in degrees.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Math",
      "url": "https://developer.repebble.com/docs/c/Foundation/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Math.md"
    },
    {
      "name": "DEG_TO_TRIGANGLE",
      "kind": "macro",
      "signature": "#define DEG_TO_TRIGANGLE(angle) (((angle) * TRIG_MAX_ANGLE) / 360)",
      "brief": "Converts from an angle in degrees to the equivalent fixed point value representation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Math",
      "url": "https://developer.repebble.com/docs/c/Foundation/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Math.md"
    },
    {
      "name": "sin_lookup",
      "kind": "function",
      "signature": "int32_t sin_lookup(int32_t angle)",
      "brief": "Look-up the sine of the given angle from a pre-computed table.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Math",
      "url": "https://developer.repebble.com/docs/c/Foundation/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Math.md"
    },
    {
      "name": "cos_lookup",
      "kind": "function",
      "signature": "int32_t cos_lookup(int32_t angle)",
      "brief": "Look-up the cosine of the given angle from a pre-computed table. This is equivalent to calling sin_lookup(angle + TRIG_MAX_ANGLE / 4).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Math",
      "url": "https://developer.repebble.com/docs/c/Foundation/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Math.md"
    },
    {
      "name": "atan2_lookup",
      "kind": "function",
      "signature": "int32_t atan2_lookup(int16_t y, int16_t x)",
      "brief": "Look-up the arctangent of a given x, y pair The angle value is scaled linearly, such that a value of 0x10000 corresponds to 360 degrees or 2 PI radians.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Math",
      "url": "https://developer.repebble.com/docs/c/Foundation/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Math.md"
    },
    {
      "name": "Memory Management",
      "kind": "group",
      "signature": "Memory Management",
      "brief": "Utility functions for managing an application's memory.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Memory Management",
      "url": "https://developer.repebble.com/docs/c/Foundation/Memory_Management/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Memory_Management.md"
    },
    {
      "name": "heap_bytes_free",
      "kind": "function",
      "signature": "size_t heap_bytes_free(void)",
      "brief": "Calculates the number of bytes of heap memory not currently being used by the application.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Memory Management",
      "url": "https://developer.repebble.com/docs/c/Foundation/Memory_Management/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Memory_Management.md"
    },
    {
      "name": "heap_bytes_used",
      "kind": "function",
      "signature": "size_t heap_bytes_used(void)",
      "brief": "Calculates the number of bytes of heap memory currently being used by the application.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Memory Management",
      "url": "https://developer.repebble.com/docs/c/Foundation/Memory_Management/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Memory_Management.md"
    },
    {
      "name": "memory_cache_flush",
      "kind": "function",
      "signature": "void memory_cache_flush(void * start, size_t size)",
      "brief": "Flushes the data cache and invalidates the instruction cache for the given region of memory, if necessary. This is only required when your app is loading or modifying code in memory and intends to execute it. On some platforms, code executed may be cached internally to improve performance. After writing to memory, but before executing, this function must be called in order to avoid undefined behavior. On platforms without caching, this performs no operation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Memory Management",
      "url": "https://developer.repebble.com/docs/c/Foundation/Memory_Management/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Memory_Management.md"
    },
    {
      "name": "Platform",
      "kind": "group",
      "signature": "Platform",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PlatformType",
      "kind": "enum",
      "signature": "enum PlatformType",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PlatformTypeAplite",
      "kind": "enumerator",
      "signature": "PlatformTypeAplite",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PlatformTypeBasalt",
      "kind": "enumerator",
      "signature": "PlatformTypeBasalt",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PlatformTypeChalk",
      "kind": "enumerator",
      "signature": "PlatformTypeChalk",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PlatformTypeDiorite",
      "kind": "enumerator",
      "signature": "PlatformTypeDiorite",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PlatformTypeEmery",
      "kind": "enumerator",
      "signature": "PlatformTypeEmery",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PlatformTypeFlint",
      "kind": "enumerator",
      "signature": "PlatformTypeFlint",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PlatformTypeGabbro",
      "kind": "enumerator",
      "signature": "PlatformTypeGabbro",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PBL_PLATFORM_TYPE_CURRENT",
      "kind": "macro",
      "signature": "#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeEmery",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PBL_PLATFORM_SWITCH_DEFAULT",
      "kind": "macro",
      "signature": "#define PBL_PLATFORM_SWITCH_DEFAULT(PLAT, DEFAULT, APLITE, BASALT, CHALK, DIORITE, EMERY, FLINT, GABBRO) (\\ ((PLAT) == PlatformTypeFlint) ? (FLINT) : \\ ((PLAT) == PlatformTypeEmery) ? (EMERY) : \\ ((PLAT) == PlatformTypeDiorite) ? (DIORITE) : \\ ((PLAT) == PlatformTypeChalk) ? (CHALK) : \\ ((PLAT) == PlatformTypeBasalt) ? (BASALT) : \\ ((PLAT) == PlatformTypeAplite) ? (APLITE) : \\ ((PLAT) == PlatformTypeGabbro) ? (GABBRO) : \\ (DEFAULT) \\ )",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "PBL_PLATFORM_SWITCH",
      "kind": "macro",
      "signature": "#define PBL_PLATFORM_SWITCH(PLAT, APLITE, BASALT, CHALK, DIORITE, EMERY, FLINT, GABBRO) PBL_PLATFORM_SWITCH_DEFAULT(PLAT, APLITE, APLITE, BASALT, CHALK, DIORITE, EMERY, FLINT, GABBRO)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Platform",
      "url": "https://developer.repebble.com/docs/c/Foundation/Platform/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Platform.md"
    },
    {
      "name": "Resources",
      "kind": "group",
      "signature": "Resources",
      "brief": "Managing application resources",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Resources",
      "url": "https://developer.repebble.com/docs/c/Foundation/Resources/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Resources.md"
    },
    {
      "name": "ResHandle",
      "kind": "typedef",
      "signature": "typedef void * ResHandle",
      "brief": "Opaque reference to a resource.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Resources",
      "url": "https://developer.repebble.com/docs/c/Foundation/Resources/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Resources.md"
    },
    {
      "name": "RESOURCE_ID_FONT_FALLBACK",
      "kind": "macro",
      "signature": "#define RESOURCE_ID_FONT_FALLBACK RESOURCE_ID_GOTHIC_14",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Resources",
      "url": "https://developer.repebble.com/docs/c/Foundation/Resources/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Resources.md"
    },
    {
      "name": "resource_get_handle",
      "kind": "function",
      "signature": "ResHandle resource_get_handle(uint32_t resource_id)",
      "brief": "Gets the resource handle for a file identifier.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Resources",
      "url": "https://developer.repebble.com/docs/c/Foundation/Resources/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Resources.md"
    },
    {
      "name": "resource_size",
      "kind": "function",
      "signature": "size_t resource_size(ResHandle h)",
      "brief": "Gets the size of the resource given a resource handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Resources",
      "url": "https://developer.repebble.com/docs/c/Foundation/Resources/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Resources.md"
    },
    {
      "name": "resource_load",
      "kind": "function",
      "signature": "size_t resource_load(ResHandle h, uint8_t * buffer, size_t max_length)",
      "brief": "Copies the bytes for the resource with a given handle from flash storage into a given buffer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Resources",
      "url": "https://developer.repebble.com/docs/c/Foundation/Resources/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Resources.md"
    },
    {
      "name": "resource_load_byte_range",
      "kind": "function",
      "signature": "size_t resource_load_byte_range(ResHandle h, uint32_t start_offset, uint8_t * buffer, size_t num_bytes)",
      "brief": "Copies a range of bytes from a resource with a given handle into a given buffer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Resources",
      "url": "https://developer.repebble.com/docs/c/Foundation/Resources/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Resources.md"
    },
    {
      "name": "File Formats",
      "kind": "group",
      "signature": "File Formats",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Resources / File Formats",
      "url": "https://developer.repebble.com/docs/c/Foundation/Resources/File_Formats/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Resources/File_Formats.md"
    },
    {
      "name": "PBI File Format",
      "kind": "group",
      "signature": "PBI File Format",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Resources / File Formats / PBI File Format",
      "url": "https://developer.repebble.com/docs/c/Foundation/Resources/File_Formats/PBI_File_Format/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Resources/File_Formats/PBI_File_Format.md"
    },
    {
      "name": "PNG8 File Format",
      "kind": "group",
      "signature": "PNG8 File Format",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Resources / File Formats / PNG8 File Format",
      "url": "https://developer.repebble.com/docs/c/Foundation/Resources/File_Formats/PNG8_File_Format/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Resources/File_Formats/PNG8_File_Format.md"
    },
    {
      "name": "Storage",
      "kind": "group",
      "signature": "Storage",
      "brief": "A mechanism to store persistent application data and state",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "PERSIST_DATA_MAX_LENGTH",
      "kind": "macro",
      "signature": "#define PERSIST_DATA_MAX_LENGTH 256",
      "brief": "The maximum size of a persist value in bytes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "PERSIST_STRING_MAX_LENGTH",
      "kind": "macro",
      "signature": "#define PERSIST_STRING_MAX_LENGTH PERSIST_DATA_MAX_LENGTH",
      "brief": "The maximum size of a persist string in bytes including the NULL terminator.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "StatusCode",
      "kind": "enum",
      "signature": "enum StatusCode",
      "brief": "Status codes. See status_t.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "S_SUCCESS",
      "kind": "enumerator",
      "signature": "S_SUCCESS",
      "brief": "Operation completed successfully.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_ERROR",
      "kind": "enumerator",
      "signature": "E_ERROR",
      "brief": "An error occurred (no description).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_UNKNOWN",
      "kind": "enumerator",
      "signature": "E_UNKNOWN",
      "brief": "No idea what went wrong.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_INTERNAL",
      "kind": "enumerator",
      "signature": "E_INTERNAL",
      "brief": "There was a generic internal logic error.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_INVALID_ARGUMENT",
      "kind": "enumerator",
      "signature": "E_INVALID_ARGUMENT",
      "brief": "The function was not called correctly.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_OUT_OF_MEMORY",
      "kind": "enumerator",
      "signature": "E_OUT_OF_MEMORY",
      "brief": "Insufficient allocatable memory available.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_OUT_OF_STORAGE",
      "kind": "enumerator",
      "signature": "E_OUT_OF_STORAGE",
      "brief": "Insufficient long-term storage available.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_OUT_OF_RESOURCES",
      "kind": "enumerator",
      "signature": "E_OUT_OF_RESOURCES",
      "brief": "Insufficient resources available.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_RANGE",
      "kind": "enumerator",
      "signature": "E_RANGE",
      "brief": "Argument out of range (may be dynamic).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_DOES_NOT_EXIST",
      "kind": "enumerator",
      "signature": "E_DOES_NOT_EXIST",
      "brief": "Target of operation does not exist.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_INVALID_OPERATION",
      "kind": "enumerator",
      "signature": "E_INVALID_OPERATION",
      "brief": "Operation not allowed (may depend on state).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_BUSY",
      "kind": "enumerator",
      "signature": "E_BUSY",
      "brief": "Another operation prevented this one.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "E_AGAIN",
      "kind": "enumerator",
      "signature": "E_AGAIN",
      "brief": "Operation not completed; try again.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "S_TRUE",
      "kind": "enumerator",
      "signature": "S_TRUE",
      "brief": "Equivalent of boolean true.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "S_FALSE",
      "kind": "enumerator",
      "signature": "S_FALSE",
      "brief": "Equivalent of boolean false.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "S_NO_MORE_ITEMS",
      "kind": "enumerator",
      "signature": "S_NO_MORE_ITEMS",
      "brief": "For list-style requests. At end of list.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "S_NO_ACTION_REQUIRED",
      "kind": "enumerator",
      "signature": "S_NO_ACTION_REQUIRED",
      "brief": "No action was taken as none was required.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "status_t",
      "kind": "typedef",
      "signature": "typedef int32_t status_t",
      "brief": "Return value for system operations. See StatusCode for possible values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_exists",
      "kind": "function",
      "signature": "bool persist_exists(const uint32_t key)",
      "brief": "Checks whether a value has been set for a given key in persistent storage.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_get_size",
      "kind": "function",
      "signature": "int persist_get_size(const uint32_t key)",
      "brief": "Gets the size of a value for a given key in persistent storage.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_read_bool",
      "kind": "function",
      "signature": "bool persist_read_bool(const uint32_t key)",
      "brief": "Reads a bool value for a given key from persistent storage. If the value has not yet been set, this will return false.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_read_int",
      "kind": "function",
      "signature": "int32_t persist_read_int(const uint32_t key)",
      "brief": "Reads an int value for a given key from persistent storage.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_read_data",
      "kind": "function",
      "signature": "int persist_read_data(const uint32_t key, void * buffer, const size_t buffer_size)",
      "brief": "Reads a blob of data for a given key from persistent storage into a given buffer. If the value has not yet been set, the given buffer is left unchanged.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_read_string",
      "kind": "function",
      "signature": "int persist_read_string(const uint32_t key, char * buffer, const size_t buffer_size)",
      "brief": "Reads a string for a given key from persistent storage into a given buffer. The string will be null terminated. If the value has not yet been set, the given buffer is left unchanged.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_write_bool",
      "kind": "function",
      "signature": "status_t persist_write_bool(const uint32_t key, const bool value)",
      "brief": "Writes a bool value flag for a given key into persistent storage.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_write_int",
      "kind": "function",
      "signature": "status_t persist_write_int(const uint32_t key, const int32_t value)",
      "brief": "Writes an int value for a given key into persistent storage.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_write_data",
      "kind": "function",
      "signature": "int persist_write_data(const uint32_t key, const void * data, const size_t size)",
      "brief": "Writes a blob of data of a specified size in bytes for a given key into persistent storage. The maximum size is PERSIST_DATA_MAX_LENGTH.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_write_string",
      "kind": "function",
      "signature": "int persist_write_string(const uint32_t key, const char * cstring)",
      "brief": "Writes a string a given key into persistent storage. The maximum size is PERSIST_STRING_MAX_LENGTH including the null terminator.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_delete",
      "kind": "function",
      "signature": "status_t persist_delete(const uint32_t key)",
      "brief": "Deletes the value of a key from persistent storage.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "persist_get_max_size",
      "kind": "function",
      "signature": "size_t persist_get_max_size(void)",
      "brief": "Gets the maximum total size in bytes of all persisted values for the current app on this firmware. Apps targeting older SDKs that don't have this function should assume a 4 KB limit.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / Storage",
      "url": "https://developer.repebble.com/docs/c/Foundation/Storage/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Storage.md"
    },
    {
      "name": "Timer",
      "kind": "group",
      "signature": "Timer",
      "brief": "Can be used to execute some code at some point in the future.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Timer",
      "url": "https://developer.repebble.com/docs/c/Foundation/Timer/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Timer.md"
    },
    {
      "name": "psleep",
      "kind": "function",
      "signature": "void psleep(int millis)",
      "brief": "Waits for a certain amount of milliseconds.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Timer",
      "url": "https://developer.repebble.com/docs/c/Foundation/Timer/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Timer.md"
    },
    {
      "name": "AppTimer",
      "kind": "typedef",
      "signature": "typedef struct AppTimer AppTimer",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Timer",
      "url": "https://developer.repebble.com/docs/c/Foundation/Timer/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Timer.md"
    },
    {
      "name": "AppTimerCallback",
      "kind": "typedef",
      "signature": "typedef void(* AppTimerCallback)(void *data)",
      "brief": "The type of function which can be called when a timer fires. The argument will be the callback_data passed to app_timer_register().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Timer",
      "url": "https://developer.repebble.com/docs/c/Foundation/Timer/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Timer.md"
    },
    {
      "name": "app_timer_register",
      "kind": "function",
      "signature": "AppTimer * app_timer_register(uint32_t timeout_ms, AppTimerCallback callback, void * callback_data)",
      "brief": "Registers a timer that ends up in callback being called some specified time in the future.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Timer",
      "url": "https://developer.repebble.com/docs/c/Foundation/Timer/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Timer.md"
    },
    {
      "name": "app_timer_reschedule",
      "kind": "function",
      "signature": "bool app_timer_reschedule(AppTimer * timer_handle, uint32_t new_timeout_ms)",
      "brief": "Reschedules an already running timer for some point in the future. Elapsed timers cannot be rescheduled.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Timer",
      "url": "https://developer.repebble.com/docs/c/Foundation/Timer/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Timer.md"
    },
    {
      "name": "app_timer_cancel",
      "kind": "function",
      "signature": "void app_timer_cancel(AppTimer * timer_handle)",
      "brief": "Cancels an already registered timer. Once cancelled the handle may no longer be used for any purpose. Elapsed timers do not need to be cancelled.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Timer",
      "url": "https://developer.repebble.com/docs/c/Foundation/Timer/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Timer.md"
    },
    {
      "name": "Wakeup",
      "kind": "group",
      "signature": "Wakeup",
      "brief": "Allows applications to schedule to be launched even if they are not running.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wakeup",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wakeup/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wakeup.md"
    },
    {
      "name": "WakeupId",
      "kind": "typedef",
      "signature": "typedef int32_t WakeupId",
      "brief": "WakeupId is an identifier for a wakeup event.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wakeup",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wakeup/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wakeup.md"
    },
    {
      "name": "WakeupHandler",
      "kind": "typedef",
      "signature": "typedef void(* WakeupHandler)(WakeupId wakeup_id, int32_t cookie)",
      "brief": "The type of function which can be called when a wakeup event occurs. The arguments will be the id of the wakeup event that occurred, as well as the scheduled cookie provided to wakeup_schedule.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wakeup",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wakeup/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wakeup.md"
    },
    {
      "name": "wakeup_service_subscribe",
      "kind": "function",
      "signature": "void wakeup_service_subscribe(WakeupHandler handler)",
      "brief": "Registers a WakeupHandler to be called when wakeup events occur.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wakeup",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wakeup/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wakeup.md"
    },
    {
      "name": "wakeup_schedule",
      "kind": "function",
      "signature": "WakeupId wakeup_schedule(time_t timestamp, int32_t cookie, bool notify_if_missed)",
      "brief": "Registers a wakeup event that triggers a callback at the specified time. Applications may only schedule up to 8 wakeup events. Wakeup events are given a 1 minute duration window, in that no application may schedule a wakeup event with 1 minute of a currently scheduled wakeup event.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wakeup",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wakeup/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wakeup.md"
    },
    {
      "name": "wakeup_cancel",
      "kind": "function",
      "signature": "void wakeup_cancel(WakeupId wakeup_id)",
      "brief": "Cancels a wakeup event.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wakeup",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wakeup/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wakeup.md"
    },
    {
      "name": "wakeup_cancel_all",
      "kind": "function",
      "signature": "void wakeup_cancel_all(void)",
      "brief": "Cancels all wakeup event for the app.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wakeup",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wakeup/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wakeup.md"
    },
    {
      "name": "wakeup_get_launch_event",
      "kind": "function",
      "signature": "bool wakeup_get_launch_event(WakeupId * wakeup_id, int32_t * cookie)",
      "brief": "Retrieves the wakeup event info for an app that was launched by a wakeup_event (ie. launch_reason() === APP_LAUNCH_WAKEUP) so that an app may display information regarding the wakeup event.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wakeup",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wakeup/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wakeup.md"
    },
    {
      "name": "wakeup_query",
      "kind": "function",
      "signature": "bool wakeup_query(WakeupId wakeup_id, time_t * timestamp)",
      "brief": "Checks if the current WakeupId is still scheduled and therefore valid.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wakeup",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wakeup/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wakeup.md"
    },
    {
      "name": "Wall Time",
      "kind": "group",
      "signature": "Wall Time",
      "brief": "Functions, data structures and other things related to wall clock time.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "WeekDay",
      "kind": "enum",
      "signature": "enum WeekDay",
      "brief": "Weekday values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "TODAY",
      "kind": "enumerator",
      "signature": "TODAY",
      "brief": "Today.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "SUNDAY",
      "kind": "enumerator",
      "signature": "SUNDAY",
      "brief": "Sunday.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "MONDAY",
      "kind": "enumerator",
      "signature": "MONDAY",
      "brief": "Monday.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "TUESDAY",
      "kind": "enumerator",
      "signature": "TUESDAY",
      "brief": "Tuesday.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "WEDNESDAY",
      "kind": "enumerator",
      "signature": "WEDNESDAY",
      "brief": "Wednesday.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "THURSDAY",
      "kind": "enumerator",
      "signature": "THURSDAY",
      "brief": "Thursday.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "FRIDAY",
      "kind": "enumerator",
      "signature": "FRIDAY",
      "brief": "Friday.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "SATURDAY",
      "kind": "enumerator",
      "signature": "SATURDAY",
      "brief": "Saturday.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "clock_copy_time_string",
      "kind": "function",
      "signature": "void clock_copy_time_string(char * buffer, uint8_t size)",
      "brief": "Copies a time string into the buffer, formatted according to the user's time display preferences (such as 12h/24h time). Example results: \"7:30\" or \"15:00\".",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "clock_is_24h_style",
      "kind": "function",
      "signature": "bool clock_is_24h_style(void)",
      "brief": "Gets the user's 12/24h clock style preference.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "clock_to_timestamp",
      "kind": "function",
      "signature": "time_t clock_to_timestamp(WeekDay day, int hour, int minute)",
      "brief": "Converts a (day, hour, minute) specification to a UTC timestamp occurring in the future Always returns a timestamp for the next occurring instance, example: specifying TODAY@14:30 when it is 14:40 will return a timestamp for 7 days from now at 14:30.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "clock_is_timezone_set",
      "kind": "function",
      "signature": "bool clock_is_timezone_set(void)",
      "brief": "Checks if timezone is currently set, otherwise gmtime == localtime.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "TIMEZONE_NAME_LENGTH",
      "kind": "macro",
      "signature": "#define TIMEZONE_NAME_LENGTH 32",
      "brief": "The maximum length for a timezone full name (e.g. America/Chicago)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "clock_get_timezone",
      "kind": "function",
      "signature": "void clock_get_timezone(char * timezone, const size_t buffer_size)",
      "brief": "If timezone is set, copies the current timezone long name (e.g. America/Chicago) to user-provided buffer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / Wall Time",
      "url": "https://developer.repebble.com/docs/c/Foundation/Wall_Time/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/Wall_Time.md"
    },
    {
      "name": "WatchInfo",
      "kind": "group",
      "signature": "WatchInfo",
      "brief": "Provides information about the watch itself.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WatchInfoModel",
      "kind": "enum",
      "signature": "enum WatchInfoModel",
      "brief": "The different watch models.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_UNKNOWN",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_UNKNOWN",
      "brief": "Unknown model.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_PEBBLE_ORIGINAL",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_PEBBLE_ORIGINAL",
      "brief": "Original Pebble.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_PEBBLE_STEEL",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_PEBBLE_STEEL",
      "brief": "Pebble Steel.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_PEBBLE_TIME",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_PEBBLE_TIME",
      "brief": "Pebble Time.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_PEBBLE_TIME_STEEL",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_PEBBLE_TIME_STEEL",
      "brief": "Pebble Time Steel.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_PEBBLE_TIME_ROUND_14",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_PEBBLE_TIME_ROUND_14",
      "brief": "Pebble Time Round, 14mm lug size.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_PEBBLE_TIME_ROUND_20",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_PEBBLE_TIME_ROUND_20",
      "brief": "Pebble Time Round, 20mm lug size.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_PEBBLE_2_HR",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_PEBBLE_2_HR",
      "brief": "Pebble 2 HR.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_PEBBLE_2_SE",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_PEBBLE_2_SE",
      "brief": "Pebble 2 SE.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_PEBBLE_TIME_2",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_PEBBLE_TIME_2",
      "brief": "Pebble Time 2.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_COREDEVICES_P2D",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_COREDEVICES_P2D",
      "brief": "CoreDevices P2D (Pebble 2 Duo)",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_COREDEVICES_PT2",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_COREDEVICES_PT2",
      "brief": "CoreDevices PT2 (Pebble Time 2)",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_COREDEVICES_PR2",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_COREDEVICES_PR2",
      "brief": "CoreDevices PR2 (Pebble Round 2)",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL__MAX",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL__MAX",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_COREDEVICES_C2D",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_COREDEVICES_C2D",
      "brief": "CoreDevices C2D (Core 2 Duo)",
      "platforms": [
        "aplite",
        "basalt"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_MODEL_COREDEVICES_CT2",
      "kind": "enumerator",
      "signature": "WATCH_INFO_MODEL_COREDEVICES_CT2",
      "brief": "CoreDevices CT2 (Core Time 2)",
      "platforms": [
        "aplite",
        "basalt"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WatchInfoColor",
      "kind": "enum",
      "signature": "enum WatchInfoColor",
      "brief": "The different watch colors.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_UNKNOWN",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_UNKNOWN",
      "brief": "Unknown color.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_BLACK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_BLACK",
      "brief": "Black.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_WHITE",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_WHITE",
      "brief": "White.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_RED",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_RED",
      "brief": "Red.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_ORANGE",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_ORANGE",
      "brief": "Orange.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_GRAY",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_GRAY",
      "brief": "Gray.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_STAINLESS_STEEL",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_STAINLESS_STEEL",
      "brief": "Stainless Steel.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_MATTE_BLACK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_MATTE_BLACK",
      "brief": "Matte Black.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_BLUE",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_BLUE",
      "brief": "Blue.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_GREEN",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_GREEN",
      "brief": "Green.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PINK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PINK",
      "brief": "Pink.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_WHITE",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_WHITE",
      "brief": "Time White.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_BLACK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_BLACK",
      "brief": "Time Black.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_RED",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_RED",
      "brief": "Time Red.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_STEEL_SILVER",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_STEEL_SILVER",
      "brief": "Time Steel Silver.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_STEEL_BLACK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_STEEL_BLACK",
      "brief": "Time Steel Black.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_STEEL_GOLD",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_STEEL_GOLD",
      "brief": "Time Steel Gold.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_ROUND_SILVER_14",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_ROUND_SILVER_14",
      "brief": "Time Round 14mm lug size, Silver.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_ROUND_BLACK_14",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_ROUND_BLACK_14",
      "brief": "Time Round 14mm lug size, Black.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_ROUND_SILVER_20",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_ROUND_SILVER_20",
      "brief": "Time Round 20mm lug size, Silver.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_ROUND_BLACK_20",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_ROUND_BLACK_20",
      "brief": "Time Round 20mm lug size, Black.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_TIME_ROUND_ROSE_GOLD_14",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_TIME_ROUND_ROSE_GOLD_14",
      "brief": "Time Round 14mm lug size, Rose Gold.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PEBBLE_2_HR_BLACK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PEBBLE_2_HR_BLACK",
      "brief": "Pebble 2 HR, Black / Charcoal.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PEBBLE_2_HR_LIME",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PEBBLE_2_HR_LIME",
      "brief": "Pebble 2 HR, Charcoal / Sorbet Green.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PEBBLE_2_HR_FLAME",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PEBBLE_2_HR_FLAME",
      "brief": "Pebble 2 HR, Charcoal / Red.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PEBBLE_2_HR_WHITE",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PEBBLE_2_HR_WHITE",
      "brief": "Pebble 2 HR, White / Gray.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PEBBLE_2_HR_AQUA",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PEBBLE_2_HR_AQUA",
      "brief": "Pebble 2 HR, White / Turquoise.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PEBBLE_2_SE_BLACK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PEBBLE_2_SE_BLACK",
      "brief": "Pebble 2 SE, Black / Charcoal.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PEBBLE_2_SE_WHITE",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PEBBLE_2_SE_WHITE",
      "brief": "Pebble 2 SE, White / Gray.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PEBBLE_TIME_2_BLACK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PEBBLE_TIME_2_BLACK",
      "brief": "Pebble Time 2, Black.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PEBBLE_TIME_2_SILVER",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PEBBLE_TIME_2_SILVER",
      "brief": "Pebble Time 2, Silver.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_PEBBLE_TIME_2_GOLD",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_PEBBLE_TIME_2_GOLD",
      "brief": "Pebble Time 2, Gold.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_P2D_BLACK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_P2D_BLACK",
      "brief": "CoreDevices P2D, Black.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_P2D_WHITE",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_P2D_WHITE",
      "brief": "CoreDevices P2D, White.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_PT2_BLACK_GREY",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_PT2_BLACK_GREY",
      "brief": "CoreDevices PT2, Black/Grey.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_PT2_BLACK_RED",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_PT2_BLACK_RED",
      "brief": "CoreDevices PT2, Black/Red.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_PT2_SILVER_BLUE",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_PT2_SILVER_BLUE",
      "brief": "CoreDevices PT2, Silver/Blue.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_PT2_SILVER_GREY",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_PT2_SILVER_GREY",
      "brief": "CoreDevices PT2, Silver/Grey.",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_PR2_BLACK_20",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_PR2_BLACK_20",
      "brief": "CoreDevices PR2, Black (20mm)",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_PR2_SILVER_20",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_PR2_SILVER_20",
      "brief": "CoreDevices PR2, Silver (20mm)",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_PR2_GOLD_14",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_PR2_GOLD_14",
      "brief": "CoreDevices PR2, Gold (14mm)",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_PR2_SILVER_14",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_PR2_SILVER_14",
      "brief": "CoreDevices PR2, Silver (14mm)",
      "platforms": [
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR__MAX",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR__MAX",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_CT2_BLACK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_CT2_BLACK",
      "brief": "CoreDevices CT2, Black.",
      "platforms": [
        "aplite",
        "basalt"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_C2D_WHITE",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_C2D_WHITE",
      "brief": "CoreDevices C2D, White.",
      "platforms": [
        "aplite",
        "basalt"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WATCH_INFO_COLOR_COREDEVICES_C2D_BLACK",
      "kind": "enumerator",
      "signature": "WATCH_INFO_COLOR_COREDEVICES_C2D_BLACK",
      "brief": "CoreDevices C2D, Black.",
      "platforms": [
        "aplite",
        "basalt"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "watch_info_get_model",
      "kind": "function",
      "signature": "WatchInfoModel watch_info_get_model(void)",
      "brief": "Provides the model of the watch.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "watch_info_get_firmware_version",
      "kind": "function",
      "signature": "WatchInfoVersion watch_info_get_firmware_version(void)",
      "brief": "Provides the version of the firmware running on the watch.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "watch_info_get_color",
      "kind": "function",
      "signature": "WatchInfoColor watch_info_get_color(void)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "WatchInfoVersion",
      "kind": "struct",
      "signature": "struct WatchInfoVersion",
      "brief": "Data structure containing the version of the firmware running on the watch. The version of the firmware has the form X.[X.[X]]. If a version number is not present it will be 0. For example: the version numbers of 2.4.1 are 2, 4, and 1. The version numbers of 2.4 are 2, 4, and 0.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Foundation / WatchInfo",
      "url": "https://developer.repebble.com/docs/c/Foundation/WatchInfo/",
      "url_md": "https://developer.repebble.com/docs/c/Foundation/WatchInfo.md"
    },
    {
      "name": "Graphics",
      "kind": "group",
      "signature": "Graphics",
      "brief": "Low-level drawing routines.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics",
      "url": "https://developer.repebble.com/docs/c/Graphics/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics.md"
    },
    {
      "name": "Draw Commands",
      "kind": "group",
      "signature": "Draw Commands",
      "brief": "Pebble Draw Commands are a way to encode arbitrary path draw and fill calls in binary format, so that vector-like graphics can be represented on the watch.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommand",
      "kind": "typedef",
      "signature": "typedef struct GDrawCommand GDrawCommand",
      "brief": "Draw commands are the basic building block of the draw command system, encoding the type of command to draw, the stroke width and color, fill color, and points that define the path (or center of a circle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommandFrame",
      "kind": "typedef",
      "signature": "typedef struct GDrawCommandFrame GDrawCommandFrame",
      "brief": "Draw command frames contain a list of commands to draw for that frame and a duration, indicating the length of time for which the frame should be drawn in an animation sequence. Frames form the building blocks of a GDrawCommandSequence, which consists of multiple frames.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommandImage",
      "kind": "typedef",
      "signature": "typedef struct GDrawCommandImage GDrawCommandImage",
      "brief": "Draw command images contain a list of commands that can be drawn. An image can be loaded from PDC file data.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommandList",
      "kind": "typedef",
      "signature": "typedef struct GDrawCommandList GDrawCommandList",
      "brief": "Draw command lists contain a list of commands that can be iterated over and drawn all at once.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommandListIteratorCb",
      "kind": "typedef",
      "signature": "typedef bool(* GDrawCommandListIteratorCb)(GDrawCommand *command, uint32_t index, void *context)",
      "brief": "Callback for iterating over draw command list.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommandSequence",
      "kind": "typedef",
      "signature": "typedef struct GDrawCommandSequence GDrawCommandSequence",
      "brief": "Draw command sequences allow the animation of frames over time. Each sequence has a list of frames that can be accessed by the elapsed duration of the animation (not maintained internally) or by index. Sequences can be loaded from PDC file data.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommandType",
      "kind": "enum",
      "signature": "enum GDrawCommandType",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommandTypeInvalid",
      "kind": "enumerator",
      "signature": "GDrawCommandTypeInvalid",
      "brief": "Invalid draw command type.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommandTypePath",
      "kind": "enumerator",
      "signature": "GDrawCommandTypePath",
      "brief": "Arbitrary path draw command type.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommandTypeCircle",
      "kind": "enumerator",
      "signature": "GDrawCommandTypeCircle",
      "brief": "Circle draw command type.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "GDrawCommandTypePrecisePath",
      "kind": "enumerator",
      "signature": "GDrawCommandTypePrecisePath",
      "brief": "Arbitrary path drawn with sub-pixel precision (1/8th precision)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_draw",
      "kind": "function",
      "signature": "void gdraw_command_draw(GContext * ctx, GDrawCommand * command)",
      "brief": "Draw a command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_get_type",
      "kind": "function",
      "signature": "GDrawCommandType gdraw_command_get_type(GDrawCommand * command)",
      "brief": "Get the command type.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_set_fill_color",
      "kind": "function",
      "signature": "void gdraw_command_set_fill_color(GDrawCommand * command, GColor fill_color)",
      "brief": "Set the fill color of a command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_get_fill_color",
      "kind": "function",
      "signature": "GColor gdraw_command_get_fill_color(GDrawCommand * command)",
      "brief": "Get the fill color of a command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_set_stroke_color",
      "kind": "function",
      "signature": "void gdraw_command_set_stroke_color(GDrawCommand * command, GColor stroke_color)",
      "brief": "Set the stroke color of a command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_get_stroke_color",
      "kind": "function",
      "signature": "GColor gdraw_command_get_stroke_color(GDrawCommand * command)",
      "brief": "Get the stroke color of a command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_set_stroke_width",
      "kind": "function",
      "signature": "void gdraw_command_set_stroke_width(GDrawCommand * command, uint8_t stroke_width)",
      "brief": "Set the stroke width of a command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_get_stroke_width",
      "kind": "function",
      "signature": "uint8_t gdraw_command_get_stroke_width(GDrawCommand * command)",
      "brief": "Get the stroke width of a command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_get_num_points",
      "kind": "function",
      "signature": "uint16_t gdraw_command_get_num_points(GDrawCommand * command)",
      "brief": "Get the number of points in a command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_set_point",
      "kind": "function",
      "signature": "void gdraw_command_set_point(GDrawCommand * command, uint16_t point_idx, GPoint point)",
      "brief": "Set the value of the point in a command at the specified index.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_get_point",
      "kind": "function",
      "signature": "GPoint gdraw_command_get_point(GDrawCommand * command, uint16_t point_idx)",
      "brief": "Get the value of a point in a command from the specified index.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_set_radius",
      "kind": "function",
      "signature": "void gdraw_command_set_radius(GDrawCommand * command, uint16_t radius)",
      "brief": "Set the radius of a circle command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_get_radius",
      "kind": "function",
      "signature": "uint16_t gdraw_command_get_radius(GDrawCommand * command)",
      "brief": "Get the radius of a circle command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_set_path_open",
      "kind": "function",
      "signature": "void gdraw_command_set_path_open(GDrawCommand * command, bool path_open)",
      "brief": "Set the path of a stroke command to be open.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_get_path_open",
      "kind": "function",
      "signature": "bool gdraw_command_get_path_open(GDrawCommand * command)",
      "brief": "Return whether a stroke command path is open.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_set_hidden",
      "kind": "function",
      "signature": "void gdraw_command_set_hidden(GDrawCommand * command, bool hidden)",
      "brief": "Set a command as hidden. This command will not be drawn when gdraw_command_draw is called with this command.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_get_hidden",
      "kind": "function",
      "signature": "bool gdraw_command_get_hidden(GDrawCommand * command)",
      "brief": "Return whether a command is hidden.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_frame_draw",
      "kind": "function",
      "signature": "void gdraw_command_frame_draw(GContext * ctx, GDrawCommandSequence * sequence, GDrawCommandFrame * frame, GPoint offset)",
      "brief": "Draw a frame.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_frame_set_duration",
      "kind": "function",
      "signature": "void gdraw_command_frame_set_duration(GDrawCommandFrame * frame, uint32_t duration)",
      "brief": "Set the duration of the frame.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_frame_get_duration",
      "kind": "function",
      "signature": "uint32_t gdraw_command_frame_get_duration(GDrawCommandFrame * frame)",
      "brief": "Get the duration of the frame.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_image_create_with_resource",
      "kind": "function",
      "signature": "GDrawCommandImage * gdraw_command_image_create_with_resource(uint32_t resource_id)",
      "brief": "Creates a GDrawCommandImage from the specified resource (PDC file)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_image_clone",
      "kind": "function",
      "signature": "GDrawCommandImage * gdraw_command_image_clone(GDrawCommandImage * image)",
      "brief": "Creates a GDrawCommandImage as a copy from a given image.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_image_destroy",
      "kind": "function",
      "signature": "void gdraw_command_image_destroy(GDrawCommandImage * image)",
      "brief": "Deletes the GDrawCommandImage structure and frees associated data.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_image_draw",
      "kind": "function",
      "signature": "void gdraw_command_image_draw(GContext * ctx, GDrawCommandImage * image, GPoint offset)",
      "brief": "Draw an image.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_image_get_bounds_size",
      "kind": "function",
      "signature": "GSize gdraw_command_image_get_bounds_size(GDrawCommandImage * image)",
      "brief": "Get size of the bounding box surrounding all draw commands in the image. This bounding box can be used to set the graphics context or layer bounds when drawing the image.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_image_set_bounds_size",
      "kind": "function",
      "signature": "void gdraw_command_image_set_bounds_size(GDrawCommandImage * image, GSize size)",
      "brief": "Set size of the bounding box surrounding all draw commands in the image. This bounding box can be used to set the graphics context or layer bounds when drawing the image.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_image_get_command_list",
      "kind": "function",
      "signature": "GDrawCommandList * gdraw_command_image_get_command_list(GDrawCommandImage * image)",
      "brief": "Get the command list of the image.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_list_iterate",
      "kind": "function",
      "signature": "void gdraw_command_list_iterate(GDrawCommandList * command_list, GDrawCommandListIteratorCb handle_command, void * callback_context)",
      "brief": "Iterate over all commands in a command list.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_list_draw",
      "kind": "function",
      "signature": "void gdraw_command_list_draw(GContext * ctx, GDrawCommandList * command_list)",
      "brief": "Draw all commands in a command list.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_list_get_command",
      "kind": "function",
      "signature": "GDrawCommand * gdraw_command_list_get_command(GDrawCommandList * command_list, uint16_t command_idx)",
      "brief": "Get the command at the specified index.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_list_get_num_commands",
      "kind": "function",
      "signature": "uint32_t gdraw_command_list_get_num_commands(GDrawCommandList * command_list)",
      "brief": "Get the number of commands in the list.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_create_with_resource",
      "kind": "function",
      "signature": "GDrawCommandSequence * gdraw_command_sequence_create_with_resource(uint32_t resource_id)",
      "brief": "Creates a GDrawCommandSequence from the specified resource (PDC file)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_clone",
      "kind": "function",
      "signature": "GDrawCommandSequence * gdraw_command_sequence_clone(GDrawCommandSequence * sequence)",
      "brief": "Creates a GDrawCommandSequence as a copy from a given sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_destroy",
      "kind": "function",
      "signature": "void gdraw_command_sequence_destroy(GDrawCommandSequence * sequence)",
      "brief": "Deletes the GDrawCommandSequence structure and frees associated data.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_get_frame_by_elapsed",
      "kind": "function",
      "signature": "GDrawCommandFrame * gdraw_command_sequence_get_frame_by_elapsed(GDrawCommandSequence * sequence, uint32_t elapsed_ms)",
      "brief": "Get the frame that should be shown after the specified amount of elapsed time The last frame will be returned if the elapsed time exceeds the total time.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_get_frame_by_index",
      "kind": "function",
      "signature": "GDrawCommandFrame * gdraw_command_sequence_get_frame_by_index(GDrawCommandSequence * sequence, uint32_t index)",
      "brief": "Get the frame at the specified index.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_get_bounds_size",
      "kind": "function",
      "signature": "GSize gdraw_command_sequence_get_bounds_size(GDrawCommandSequence * sequence)",
      "brief": "Get the size of the bounding box surrounding all draw commands in the sequence. This bounding box can be used to set the graphics context or layer bounds when drawing the frames in the sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_set_bounds_size",
      "kind": "function",
      "signature": "void gdraw_command_sequence_set_bounds_size(GDrawCommandSequence * sequence, GSize size)",
      "brief": "Set size of the bounding box surrounding all draw commands in the sequence. This bounding box can be used to set the graphics context or layer bounds when drawing the frames in the sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_get_play_count",
      "kind": "function",
      "signature": "uint32_t gdraw_command_sequence_get_play_count(GDrawCommandSequence * sequence)",
      "brief": "Get the play count of the sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_set_play_count",
      "kind": "function",
      "signature": "void gdraw_command_sequence_set_play_count(GDrawCommandSequence * sequence, uint32_t play_count)",
      "brief": "Set the play count of the sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_get_total_duration",
      "kind": "function",
      "signature": "uint32_t gdraw_command_sequence_get_total_duration(GDrawCommandSequence * sequence)",
      "brief": "Get the total duration of the sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_sequence_get_num_frames",
      "kind": "function",
      "signature": "uint32_t gdraw_command_sequence_get_num_frames(GDrawCommandSequence * sequence)",
      "brief": "Get the number of frames in the sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "gdraw_command_frame_get_command_list",
      "kind": "function",
      "signature": "GDrawCommandList * gdraw_command_frame_get_command_list(GDrawCommandFrame * frame)",
      "brief": "Get the command list of the frame.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Draw Commands",
      "url": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Draw_Commands.md"
    },
    {
      "name": "Drawing Paths",
      "kind": "group",
      "signature": "Drawing Paths",
      "brief": "Functions to draw polygons into a graphics context",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Paths",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths.md"
    },
    {
      "name": "gpath_create",
      "kind": "function",
      "signature": "GPath * gpath_create(const GPathInfo * init)",
      "brief": "Creates a new GPath on the heap based on a series of points described by a GPathInfo.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Paths",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths.md"
    },
    {
      "name": "gpath_destroy",
      "kind": "function",
      "signature": "void gpath_destroy(GPath * gpath)",
      "brief": "Free a dynamically allocated gpath created with gpath_create()",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Paths",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths.md"
    },
    {
      "name": "gpath_draw_filled",
      "kind": "function",
      "signature": "void gpath_draw_filled(GContext * ctx, GPath * path)",
      "brief": "Draws the fill of a path into a graphics context, using the current fill color, relative to the drawing area as set up by the layering system.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Paths",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths.md"
    },
    {
      "name": "gpath_draw_outline",
      "kind": "function",
      "signature": "void gpath_draw_outline(GContext * ctx, GPath * path)",
      "brief": "Draws the outline of a path into a graphics context, using the current stroke color and width, relative to the drawing area as set up by the layering system. The first and last points in the path do have a line between them.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Paths",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths.md"
    },
    {
      "name": "gpath_rotate_to",
      "kind": "function",
      "signature": "void gpath_rotate_to(GPath * path, int32_t angle)",
      "brief": "Sets the absolute rotation of the path. The current rotation will be replaced by the specified angle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Paths",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths.md"
    },
    {
      "name": "gpath_move_to",
      "kind": "function",
      "signature": "void gpath_move_to(GPath * path, GPoint point)",
      "brief": "Sets the absolute offset of the path. The current translation will be replaced by the specified offset.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Paths",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths.md"
    },
    {
      "name": "gpath_draw_outline_open",
      "kind": "function",
      "signature": "void gpath_draw_outline_open(GContext * ctx, GPath * path)",
      "brief": "Draws an open outline of a path into a graphics context, using the current stroke color and width, relative to the drawing area as set up by the layering system. The first and last points in the path do not have a line between them.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Paths",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths.md"
    },
    {
      "name": "GPath",
      "kind": "struct",
      "signature": "struct GPath",
      "brief": "Data structure describing a path, plus its rotation and translation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Paths",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths.md"
    },
    {
      "name": "GPathInfo",
      "kind": "struct",
      "signature": "struct GPathInfo",
      "brief": "Data structure describing a naked path.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Paths",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Paths.md"
    },
    {
      "name": "Drawing Primitives",
      "kind": "group",
      "signature": "Drawing Primitives",
      "brief": "Functions to draw into a graphics context",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornerMask",
      "kind": "enum",
      "signature": "enum GCornerMask",
      "brief": "Bit mask values to specify the corners of a rectangle. The values can be combines using binary OR (|), For example: the mask to indicate top left and bottom right corners can: be created as follows: (GCornerTopLeft | GCornerBottomRight)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornerNone",
      "kind": "enumerator",
      "signature": "GCornerNone",
      "brief": "No corners.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornerTopLeft",
      "kind": "enumerator",
      "signature": "GCornerTopLeft",
      "brief": "Top-Left corner.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornerTopRight",
      "kind": "enumerator",
      "signature": "GCornerTopRight",
      "brief": "Top-Right corner.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornerBottomLeft",
      "kind": "enumerator",
      "signature": "GCornerBottomLeft",
      "brief": "Bottom-Left corner.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornerBottomRight",
      "kind": "enumerator",
      "signature": "GCornerBottomRight",
      "brief": "Bottom-Right corner.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornersAll",
      "kind": "enumerator",
      "signature": "GCornersAll",
      "brief": "All corners.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornersTop",
      "kind": "enumerator",
      "signature": "GCornersTop",
      "brief": "Top corners.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornersBottom",
      "kind": "enumerator",
      "signature": "GCornersBottom",
      "brief": "Bottom corners.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornersLeft",
      "kind": "enumerator",
      "signature": "GCornersLeft",
      "brief": "Left corners.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GCornersRight",
      "kind": "enumerator",
      "signature": "GCornersRight",
      "brief": "Right corners.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_draw_pixel",
      "kind": "function",
      "signature": "void graphics_draw_pixel(GContext * ctx, GPoint point)",
      "brief": "Draws a pixel at given point in the current stroke color.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_draw_line",
      "kind": "function",
      "signature": "void graphics_draw_line(GContext * ctx, GPoint p0, GPoint p1)",
      "brief": "Draws line in the current stroke color, current stroke width and AA flag.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_draw_rect",
      "kind": "function",
      "signature": "void graphics_draw_rect(GContext * ctx, GRect rect)",
      "brief": "Draws a 1-pixel wide rectangle outline in the current stroke color.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_fill_rect",
      "kind": "function",
      "signature": "void graphics_fill_rect(GContext * ctx, GRect rect, uint16_t corner_radius, GCornerMask corner_mask)",
      "brief": "Fills a rectangle with the current fill color, optionally rounding all or a selection of its corners.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_draw_circle",
      "kind": "function",
      "signature": "void graphics_draw_circle(GContext * ctx, GPoint p, uint16_t radius)",
      "brief": "Draws the outline of a circle in the current stroke color.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_fill_circle",
      "kind": "function",
      "signature": "void graphics_fill_circle(GContext * ctx, GPoint p, uint16_t radius)",
      "brief": "Fills a circle in the current fill color.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_draw_round_rect",
      "kind": "function",
      "signature": "void graphics_draw_round_rect(GContext * ctx, GRect rect, uint16_t radius)",
      "brief": "Draws the outline of a rounded rectangle in the current stroke color.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_draw_bitmap_in_rect",
      "kind": "function",
      "signature": "void graphics_draw_bitmap_in_rect(GContext * ctx, const GBitmap * bitmap, GRect rect)",
      "brief": "Draws a bitmap into the graphics context, inside the specified rectangle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_capture_frame_buffer",
      "kind": "function",
      "signature": "GBitmap * graphics_capture_frame_buffer(GContext * ctx)",
      "brief": "A shortcut to capture the framebuffer in the native format of the watch.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_capture_frame_buffer_format",
      "kind": "function",
      "signature": "GBitmap * graphics_capture_frame_buffer_format(GContext * ctx, GBitmapFormat format)",
      "brief": "Captures the frame buffer for direct access, using the given format. Graphics functions will not affect the frame buffer while it is captured. The frame buffer is released when graphics_release_frame_buffer is called. The frame buffer must be released before the end of a layer's .update_proc for the layer to be drawn properly.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_release_frame_buffer",
      "kind": "function",
      "signature": "bool graphics_release_frame_buffer(GContext * ctx, GBitmap * buffer)",
      "brief": "Releases the frame buffer. Must be called before the end of a layer's .update_proc for the layer to be drawn properly.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_frame_buffer_is_captured",
      "kind": "function",
      "signature": "bool graphics_frame_buffer_is_captured(GContext * ctx)",
      "brief": "Whether or not the frame buffer has been captured by graphics_capture_frame_buffer. Graphics functions will not affect the frame buffer until it has been released by graphics_release_frame_buffer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_draw_rotated_bitmap",
      "kind": "function",
      "signature": "void graphics_draw_rotated_bitmap(GContext * ctx, GBitmap * src, GPoint src_ic, int rotation, GPoint dest_ic)",
      "brief": "Draws a rotated bitmap with a memory-sensitive 2x anti-aliasing technique (using ray-finding instead of super-sampling), which is thresholded into a b/w bitmap for 1-bit and color blended for 8-bit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GOvalScaleMode",
      "kind": "enum",
      "signature": "enum GOvalScaleMode",
      "brief": "Values to specify how a given rectangle should be used to derive an oval shape.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GOvalScaleModeFitCircle",
      "kind": "enumerator",
      "signature": "GOvalScaleModeFitCircle",
      "brief": "Places a circle at the center of the rectangle, with a diameter that matches the rectangle's shortest side.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "GOvalScaleModeFillCircle",
      "kind": "enumerator",
      "signature": "GOvalScaleModeFillCircle",
      "brief": "Places a circle at the center of the rectangle, with a diameter that matches the rectangle's longest side. The circle may overflow the bounds of the rectangle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_draw_arc",
      "kind": "function",
      "signature": "void graphics_draw_arc(GContext * ctx, GRect rect, GOvalScaleMode scale_mode, int32_t angle_start, int32_t angle_end)",
      "brief": "Draws a line arc clockwise between angle_start and angle_end, where 0° is the top of the circle. If the difference between angle_start and angle_end is greater than 360°, a full circle will be drawn.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "graphics_fill_radial",
      "kind": "function",
      "signature": "void graphics_fill_radial(GContext * ctx, GRect rect, GOvalScaleMode scale_mode, uint16_t inset_thickness, int32_t angle_start, int32_t angle_end)",
      "brief": "Fills a circle clockwise between angle_start and angle_end, where 0° is the top of the circle. If the difference between angle_start and angle_end is greater than 360°, a full circle will be drawn and filled. If angle_start is greater than angle_end nothing will be drawn.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "gpoint_from_polar",
      "kind": "function",
      "signature": "GPoint gpoint_from_polar(GRect rect, GOvalScaleMode scale_mode, int32_t angle)",
      "brief": "Calculates a GPoint located at the angle provided on the perimeter of a circle defined by the provided GRect.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "grect_centered_from_polar",
      "kind": "function",
      "signature": "GRect grect_centered_from_polar(GRect rect, GOvalScaleMode scale_mode, int32_t angle, GSize size)",
      "brief": "Calculates a rectangle centered on the perimeter of a circle at a given angle. Use this to construct rectangles that follow the perimeter of a circle as an input for graphics_fill_radial_internal or graphics_draw_arc_internal, e.g. to draw circles every 30 degrees on a watchface.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Primitives",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Primitives.md"
    },
    {
      "name": "Drawing Text",
      "kind": "group",
      "signature": "Drawing Text",
      "brief": "Functions to draw text into a graphics context",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "GTextOverflowMode",
      "kind": "enum",
      "signature": "enum GTextOverflowMode",
      "brief": "Text overflow mode controls the way text overflows when the string that is drawn does not fit inside the area constraint.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "GTextOverflowModeWordWrap",
      "kind": "enumerator",
      "signature": "GTextOverflowModeWordWrap",
      "brief": "On overflow, wrap words to a new line below the current one. Once vertical space is consumed, the last line may be clipped.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "GTextOverflowModeTrailingEllipsis",
      "kind": "enumerator",
      "signature": "GTextOverflowModeTrailingEllipsis",
      "brief": "On overflow, wrap words to a new line below the current one. Once vertical space is consumed, truncate as needed to fit a trailing ellipsis (...). Clipping may occur if the vertical space cannot accomodate the first line of text.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "GTextOverflowModeFill",
      "kind": "enumerator",
      "signature": "GTextOverflowModeFill",
      "brief": "Acts like GTextOverflowModeTrailingEllipsis, plus trims leading and trailing newlines, while treating all other newlines as spaces.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "GTextAlignment",
      "kind": "enum",
      "signature": "enum GTextAlignment",
      "brief": "Text aligment controls the way the text is aligned inside the box the text is drawn into.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "GTextAlignmentLeft",
      "kind": "enumerator",
      "signature": "GTextAlignmentLeft",
      "brief": "Aligns the text to the left of the drawing box.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "GTextAlignmentCenter",
      "kind": "enumerator",
      "signature": "GTextAlignmentCenter",
      "brief": "Aligns the text centered inside the drawing box.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "GTextAlignmentRight",
      "kind": "enumerator",
      "signature": "GTextAlignmentRight",
      "brief": "Aligns the text to the right of the drawing box.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "GTextAttributes",
      "kind": "typedef",
      "signature": "typedef struct GTextAttributes GTextAttributes",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "graphics_text_attributes_create",
      "kind": "function",
      "signature": "GTextAttributes * graphics_text_attributes_create(void)",
      "brief": "Creates an instance of GTextAttributes for advanced control when rendering text.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "graphics_text_attributes_destroy",
      "kind": "function",
      "signature": "void graphics_text_attributes_destroy(GTextAttributes * text_attributes)",
      "brief": "Destroys a previously created instance of GTextAttributes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "graphics_text_attributes_restore_default_text_flow",
      "kind": "function",
      "signature": "void graphics_text_attributes_restore_default_text_flow(GTextAttributes * text_attributes)",
      "brief": "Restores text flow to the rectangular default.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "graphics_text_attributes_enable_screen_text_flow",
      "kind": "function",
      "signature": "void graphics_text_attributes_enable_screen_text_flow(GTextAttributes * text_attributes, uint8_t inset)",
      "brief": "Enables text flow that follows the boundaries of the screen.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "graphics_text_attributes_restore_default_paging",
      "kind": "function",
      "signature": "void graphics_text_attributes_restore_default_paging(GTextAttributes * text_attributes)",
      "brief": "Restores paging and locked content origin to the defaults.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "graphics_text_attributes_enable_paging",
      "kind": "function",
      "signature": "void graphics_text_attributes_enable_paging(GTextAttributes * text_attributes, GPoint content_origin_on_screen, GRect paging_on_screen)",
      "brief": "Enables paging and locks the text flow calculation to a fixed point on the screen.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "graphics_draw_text",
      "kind": "function",
      "signature": "void graphics_draw_text(GContext * ctx, const char * text, GFont const font, const GRect box, const GTextOverflowMode overflow_mode, const GTextAlignment alignment, GTextAttributes * text_attributes)",
      "brief": "Draw text into the current graphics context, using the context's current text color. The text will be drawn inside a box with the specified dimensions and configuration, with clipping occuring automatically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "graphics_text_layout_get_content_size",
      "kind": "function",
      "signature": "GSize graphics_text_layout_get_content_size(const char * text, GFont const font, const GRect box, const GTextOverflowMode overflow_mode, const GTextAlignment alignment)",
      "brief": "Obtain the maximum size that a text with given font, overflow mode and alignment occupies within a given rectangular constraint.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "graphics_text_layout_get_content_size_with_attributes",
      "kind": "function",
      "signature": "GSize graphics_text_layout_get_content_size_with_attributes(const char * text, GFont const font, const GRect box, const GTextOverflowMode overflow_mode, const GTextAlignment alignment, GTextAttributes * text_attributes)",
      "brief": "Obtain the maximum size that a text with given font, overflow mode and alignment occupies within a given rectangular constraint.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Drawing Text",
      "url": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Drawing_Text.md"
    },
    {
      "name": "Fonts",
      "kind": "group",
      "signature": "Fonts",
      "brief": "Custom and system fonts.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Fonts",
      "url": "https://developer.repebble.com/docs/c/Graphics/Fonts/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Fonts.md"
    },
    {
      "name": "FontInfo",
      "kind": "typedef",
      "signature": "typedef struct FontInfo FontInfo",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Fonts",
      "url": "https://developer.repebble.com/docs/c/Graphics/Fonts/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Fonts.md"
    },
    {
      "name": "GFont",
      "kind": "typedef",
      "signature": "typedef FontInfo * GFont",
      "brief": "Pointer to opaque font data structure.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Fonts",
      "url": "https://developer.repebble.com/docs/c/Graphics/Fonts/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Fonts.md"
    },
    {
      "name": "fonts_get_system_font",
      "kind": "function",
      "signature": "GFont fonts_get_system_font(const char * font_key)",
      "brief": "Loads a system font corresponding to the specified font key.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Fonts",
      "url": "https://developer.repebble.com/docs/c/Graphics/Fonts/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Fonts.md"
    },
    {
      "name": "fonts_load_custom_font",
      "kind": "function",
      "signature": "GFont fonts_load_custom_font(ResHandle handle)",
      "brief": "Loads a custom font.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Fonts",
      "url": "https://developer.repebble.com/docs/c/Graphics/Fonts/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Fonts.md"
    },
    {
      "name": "fonts_unload_custom_font",
      "kind": "function",
      "signature": "void fonts_unload_custom_font(GFont font)",
      "brief": "Unloads the specified custom font and frees the memory that is occupied by it.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Fonts",
      "url": "https://developer.repebble.com/docs/c/Graphics/Fonts/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Fonts.md"
    },
    {
      "name": "Graphics Context",
      "kind": "group",
      "signature": "Graphics Context",
      "brief": "The \"canvas\" into which an application draws",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Context",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context.md"
    },
    {
      "name": "graphics_context_set_stroke_color",
      "kind": "function",
      "signature": "void graphics_context_set_stroke_color(GContext * ctx, GColor color)",
      "brief": "Sets the current stroke color of the graphics context.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Context",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context.md"
    },
    {
      "name": "graphics_context_set_fill_color",
      "kind": "function",
      "signature": "void graphics_context_set_fill_color(GContext * ctx, GColor color)",
      "brief": "Sets the current fill color of the graphics context.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Context",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context.md"
    },
    {
      "name": "graphics_context_set_text_color",
      "kind": "function",
      "signature": "void graphics_context_set_text_color(GContext * ctx, GColor color)",
      "brief": "Sets the current text color of the graphics context.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Context",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context.md"
    },
    {
      "name": "graphics_context_set_compositing_mode",
      "kind": "function",
      "signature": "void graphics_context_set_compositing_mode(GContext * ctx, GCompOp mode)",
      "brief": "Sets the current bitmap compositing mode of the graphics context. The default mode is GCompOpAssign i.e. bitmap transparency disabled.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Context",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context.md"
    },
    {
      "name": "graphics_context_set_antialiased",
      "kind": "function",
      "signature": "void graphics_context_set_antialiased(GContext * ctx, bool enable)",
      "brief": "Sets whether antialiasing is applied to stroke drawing.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Context",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context.md"
    },
    {
      "name": "graphics_context_set_stroke_width",
      "kind": "function",
      "signature": "void graphics_context_set_stroke_width(GContext * ctx, uint8_t stroke_width)",
      "brief": "Sets the width of the stroke for drawing routines.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Context",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Context.md"
    },
    {
      "name": "Graphics Types",
      "kind": "group",
      "signature": "Graphics Types",
      "brief": "Basic graphics types (point, rect, size, color, bitmaps, etc.) and utility functions.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GColorFromRGBA",
      "kind": "macro",
      "signature": "#define GColorFromRGBA(red, green, blue, alpha) ((GColor8){ \\ .b = (uint8_t)(blue) >> 6, \\ .g = (uint8_t)(green) >> 6, \\ .r = (uint8_t)(red) >> 6, \\ .a = (uint8_t)(alpha) >> 6, \\ })",
      "brief": "Convert RGBA to GColor.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GColorFromRGB",
      "kind": "macro",
      "signature": "#define GColorFromRGB(red, green, blue) GColorFromRGBA(red, green, blue, 255)",
      "brief": "Convert RGB to GColor.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GColorFromHEX",
      "kind": "macro",
      "signature": "#define GColorFromHEX(v) GColorFromRGB(((v) >> 16) & 0xff, ((v) >> 8) & 0xff, ((v) & 0xff))",
      "brief": "Convert hex integer to GColor.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GColor",
      "kind": "typedef",
      "signature": "typedef GColor8 GColor",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gcolor_equal",
      "kind": "function",
      "signature": "bool gcolor_equal(GColor8 x, GColor8 y)",
      "brief": "True if both colors are identical or both are invisible (i.e. both have alpha values of .a=0).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gcolor_legible_over",
      "kind": "function",
      "signature": "GColor8 gcolor_legible_over(GColor8 background_color)",
      "brief": "This method assists in improving the legibility of text on various background colors. It takes the background color for the region in question and computes a color for maximum legibility.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "COLOR_FALLBACK",
      "kind": "macro",
      "signature": "#define COLOR_FALLBACK(color, bw) (color)",
      "brief": "Convenience macro allowing use of a fallback color for black and white platforms. On color platforms, the first expression will be chosen, the second otherwise.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "PBL_IF_RECT_ELSE",
      "kind": "macro",
      "signature": "#define PBL_IF_RECT_ELSE(if_true, if_false) (if_true)",
      "brief": "Convenience macro to switch between two expression depending on the screen of the platform. On platforms with rectangular screen, the first expression will be chosen, the second otherwise.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "PBL_IF_ROUND_ELSE",
      "kind": "macro",
      "signature": "#define PBL_IF_ROUND_ELSE(if_true, if_false) (if_false)",
      "brief": "Convenience macro to switch between two expression depending on the screen of the platform. On platforms with round screen, the first expression will be chosen, the second otherwise.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "PBL_IF_BW_ELSE",
      "kind": "macro",
      "signature": "#define PBL_IF_BW_ELSE(if_true, if_false) (if_false)",
      "brief": "Convenience macro to switch between two expression depending on the screen of the platform. On black& white platforms, the first expression will be chosen, the second otherwise.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "PBL_IF_COLOR_ELSE",
      "kind": "macro",
      "signature": "#define PBL_IF_COLOR_ELSE(if_true, if_false) (if_true)",
      "brief": "Convenience macro to switch between two expression depending on the screen of the platform. On color platforms, the first expression will be chosen, the second otherwise.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GPoint",
      "kind": "macro",
      "signature": "#define GPoint(x, y) ((GPoint){(x), (y)})",
      "brief": "Convenience macro to make a GPoint.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GPointZero",
      "kind": "macro",
      "signature": "#define GPointZero GPoint(0, 0)",
      "brief": "Convenience macro to make a GPoint at (0, 0).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gpoint_equal",
      "kind": "function",
      "signature": "bool gpoint_equal(const GPoint *const point_a, const GPoint *const point_b)",
      "brief": "Tests whether 2 points are equal.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GSize",
      "kind": "macro",
      "signature": "#define GSize(w, h) ((GSize){(w), (h)})",
      "brief": "Convenience macro to make a GSize.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GSizeZero",
      "kind": "macro",
      "signature": "#define GSizeZero GSize(0, 0)",
      "brief": "Convenience macro to make a GSize of (0, 0).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gsize_equal",
      "kind": "function",
      "signature": "bool gsize_equal(const GSize * size_a, const GSize * size_b)",
      "brief": "Tests whether 2 sizes are equal.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GRect",
      "kind": "macro",
      "signature": "#define GRect(x, y, w, h) ((GRect){{(x), (y)}, {(w), (h)}})",
      "brief": "Convenience macro to make a GRect.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GRectZero",
      "kind": "macro",
      "signature": "#define GRectZero GRect(0, 0, 0, 0)",
      "brief": "Convenience macro to make a GRect of ((0, 0), (0, 0)).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "grect_equal",
      "kind": "function",
      "signature": "bool grect_equal(const GRect *const rect_a, const GRect *const rect_b)",
      "brief": "Tests whether 2 rectangles are equal.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "grect_is_empty",
      "kind": "function",
      "signature": "bool grect_is_empty(const GRect *const rect)",
      "brief": "Tests whether the size of the rectangle is (0, 0).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "grect_standardize",
      "kind": "function",
      "signature": "void grect_standardize(GRect * rect)",
      "brief": "Converts a rectangle's values so that the components of its size (width and/or height) are both positive. In the width and/or height are negative, the origin will offset, so that the final rectangle overlaps with the original. For example, a GRect with size (-10, -5) and origin (20, 20), will be standardized to size (10, 5) and origin (10, 15).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "grect_clip",
      "kind": "function",
      "signature": "void grect_clip(GRect *const rect_to_clip, const GRect *const rect_clipper)",
      "brief": "Trim one rectangle using the edges of a second rectangle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "grect_contains_point",
      "kind": "function",
      "signature": "bool grect_contains_point(const GRect * rect, const GPoint * point)",
      "brief": "Tests whether a rectangle contains a point.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "grect_center_point",
      "kind": "function",
      "signature": "GPoint grect_center_point(const GRect * rect)",
      "brief": "Convenience function to compute the center-point of a given rectangle. This is equal to (rect->x + rect->width / 2, rect->y + rect->height / 2).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "grect_crop",
      "kind": "function",
      "signature": "GRect grect_crop(GRect rect, const int32_t crop_size_px)",
      "brief": "Reduce the width and height of a rectangle by insetting each of the edges with a fixed inset. The returned rectangle will be centered relative to the input rectangle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "PLAY_COUNT_INFINITE",
      "kind": "macro",
      "signature": "#define PLAY_COUNT_INFINITE UINT32_MAX",
      "brief": "Repeat Sequence or animation indefinitely.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "PLAY_DURATION_INFINITE",
      "kind": "macro",
      "signature": "#define PLAY_DURATION_INFINITE UINT32_MAX",
      "brief": "Duration of Sequence or animation is infinite.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GBitmapFormat",
      "kind": "enum",
      "signature": "enum GBitmapFormat",
      "brief": "The format of a GBitmap can either be 1-bit or 8-bit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GBitmapFormat1Bit",
      "kind": "enumerator",
      "signature": "GBitmapFormat1Bit",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GBitmapFormat8Bit",
      "kind": "enumerator",
      "signature": "GBitmapFormat8Bit",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GBitmapFormat1BitPalette",
      "kind": "enumerator",
      "signature": "GBitmapFormat1BitPalette",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GBitmapFormat2BitPalette",
      "kind": "enumerator",
      "signature": "GBitmapFormat2BitPalette",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GBitmapFormat4BitPalette",
      "kind": "enumerator",
      "signature": "GBitmapFormat4BitPalette",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GBitmapFormat8BitCircular",
      "kind": "enumerator",
      "signature": "GBitmapFormat8BitCircular",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GBitmap",
      "kind": "typedef",
      "signature": "typedef struct GBitmap GBitmap",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GBitmapSequence",
      "kind": "typedef",
      "signature": "typedef struct GBitmapSequence GBitmapSequence",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_get_bytes_per_row",
      "kind": "function",
      "signature": "uint16_t gbitmap_get_bytes_per_row(const GBitmap * bitmap)",
      "brief": "Get the number of bytes per row in the bitmap data for the given GBitmap. On rectangular displays, this can be used as a safe way of iterating over the rows in the bitmap, since bytes per row should be set according to format. On circular displays with pixel format of GBitmapFormat8BitCircular this will return 0, and should not be used for iteration over frame buffer pixels. Instead, use GBitmapDataRowInfo, which provides safe minimum and maximum x values for a given row's y value.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_get_format",
      "kind": "function",
      "signature": "GBitmapFormat gbitmap_get_format(const GBitmap * bitmap)",
      "brief": "Get the GBitmapFormat for the GBitmap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_get_data",
      "kind": "function",
      "signature": "uint8_t * gbitmap_get_data(const GBitmap * bitmap)",
      "brief": "Get a pointer to the raw image data section of the given GBitmap as specified by the format of the bitmap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_set_data",
      "kind": "function",
      "signature": "void gbitmap_set_data(GBitmap * bitmap, uint8_t * data, GBitmapFormat format, uint16_t row_size_bytes, bool free_on_destroy)",
      "brief": "Set the bitmap data for the given GBitmap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_get_bounds",
      "kind": "function",
      "signature": "GRect gbitmap_get_bounds(const GBitmap * bitmap)",
      "brief": "Gets the bounds of the content for the GBitmap. This is set when loading the image or if changed by gbitmap_set_bounds.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_set_bounds",
      "kind": "function",
      "signature": "void gbitmap_set_bounds(GBitmap * bitmap, GRect bounds)",
      "brief": "Set the bounds of the given GBitmap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_get_palette",
      "kind": "function",
      "signature": "GColor * gbitmap_get_palette(const GBitmap * bitmap)",
      "brief": "Get the palette for the given GBitmap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_set_palette",
      "kind": "function",
      "signature": "void gbitmap_set_palette(GBitmap * bitmap, GColor * palette, bool free_on_destroy)",
      "brief": "Set the palette for the given GBitmap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_create_with_resource",
      "kind": "function",
      "signature": "GBitmap * gbitmap_create_with_resource(uint32_t resource_id)",
      "brief": "Creates a new GBitmap on the heap using a Pebble image file stored as a resource. The resulting GBitmap must be destroyed using gbitmap_destroy().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_create_with_data",
      "kind": "function",
      "signature": "GBitmap * gbitmap_create_with_data(const uint8_t * data)",
      "brief": "Creates a new GBitmap on the heap initialized with the provided Pebble image data.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_create_as_sub_bitmap",
      "kind": "function",
      "signature": "GBitmap * gbitmap_create_as_sub_bitmap(const GBitmap * base_bitmap, GRect sub_rect)",
      "brief": "Create a new GBitmap on the heap as a sub-bitmap of a 'base' GBitmap, using a GRect to indicate what portion of the base to use. The sub-bitmap will just reference the image data and palette of the base bitmap. No deep-copying occurs as a result of calling this function, thus the caller is responsible for making sure the base bitmap and palette will remain available when using the sub-bitmap. Note that you should not destroy the parent bitmap until the sub_bitmap has been destroyed. The resulting GBitmap must be destroyed using gbitmap_destroy().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_create_from_png_data",
      "kind": "function",
      "signature": "GBitmap * gbitmap_create_from_png_data(const uint8_t * png_data, size_t png_data_size)",
      "brief": "Create a GBitmap based on raw PNG data. The resulting GBitmap must be destroyed using gbitmap_destroy(). The developer is responsible for freeing png_data following this call.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_create_blank",
      "kind": "function",
      "signature": "GBitmap * gbitmap_create_blank(GSize size, GBitmapFormat format)",
      "brief": "Creates a new blank GBitmap on the heap initialized to zeroes. In the case that the format indicates a palettized bitmap, a palette of appropriate size will also be allocated on the heap. The resulting GBitmap must be destroyed using gbitmap_destroy().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_create_blank_with_palette",
      "kind": "function",
      "signature": "GBitmap * gbitmap_create_blank_with_palette(GSize size, GBitmapFormat format, GColor * palette, bool free_on_destroy)",
      "brief": "Creates a new blank GBitmap on the heap, initialized to zeroes, and assigns it the given palette. No deep-copying of the palette occurs, so the caller is responsible for making sure the palette remains available when using the resulting bitmap. Management of that memory can be handed off to the system with the free_on_destroy argument.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_create_palettized_from_1bit",
      "kind": "function",
      "signature": "GBitmap * gbitmap_create_palettized_from_1bit(const GBitmap * src_bitmap)",
      "brief": "Given a 1-bit GBitmap, create a new bitmap of format GBitmapFormat1BitPalette. The new data buffer is allocated on the heap, and a 2-color palette is allocated as well.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_destroy",
      "kind": "function",
      "signature": "void gbitmap_destroy(GBitmap * bitmap)",
      "brief": "Destroy a GBitmap. This must be called for every bitmap that's been created with gbitmap_create_*.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_sequence_create_with_resource",
      "kind": "function",
      "signature": "GBitmapSequence * gbitmap_sequence_create_with_resource(uint32_t resource_id)",
      "brief": "Creates a GBitmapSequence from the specified resource (APNG/PNG files)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_sequence_update_bitmap_next_frame",
      "kind": "function",
      "signature": "bool gbitmap_sequence_update_bitmap_next_frame(GBitmapSequence * bitmap_sequence, GBitmap * bitmap, uint32_t * delay_ms)",
      "brief": "Updates the contents of the bitmap sequence to the next frame and optionally returns the delay in milliseconds until the next frame.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_sequence_update_bitmap_by_elapsed",
      "kind": "function",
      "signature": "bool gbitmap_sequence_update_bitmap_by_elapsed(GBitmapSequence * bitmap_sequence, GBitmap * bitmap, uint32_t elapsed_ms)",
      "brief": "Updates the contents of the bitmap sequence to the frame at elapsed in the sequence. For looping animations this accounts for the loop, for example an animation of 1 second that is configured to loop 2 times updated to 1500 ms elapsed time will display the sequence frame at 500 ms. Elapsed time is the time from the start of the animation, and will be ignored if it is for a time earlier than the last rendered frame.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_sequence_destroy",
      "kind": "function",
      "signature": "void gbitmap_sequence_destroy(GBitmapSequence * bitmap_sequence)",
      "brief": "Deletes the GBitmapSequence structure and frees any allocated memory/decoder_data.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_sequence_restart",
      "kind": "function",
      "signature": "bool gbitmap_sequence_restart(GBitmapSequence * bitmap_sequence)",
      "brief": "Restarts the GBitmapSequence to the first frame gbitmap_sequence_update_bitmap_next_frame.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_sequence_get_current_frame_idx",
      "kind": "function",
      "signature": "int32_t gbitmap_sequence_get_current_frame_idx(GBitmapSequence * bitmap_sequence)",
      "brief": "This function gets the current frame number for the bitmap sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_sequence_get_total_num_frames",
      "kind": "function",
      "signature": "uint32_t gbitmap_sequence_get_total_num_frames(GBitmapSequence * bitmap_sequence)",
      "brief": "This function sets the total number of frames for the bitmap sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_sequence_get_play_count",
      "kind": "function",
      "signature": "uint32_t gbitmap_sequence_get_play_count(GBitmapSequence * bitmap_sequence)",
      "brief": "This function gets the play count (number of times to repeat) the bitmap sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_sequence_set_play_count",
      "kind": "function",
      "signature": "void gbitmap_sequence_set_play_count(GBitmapSequence * bitmap_sequence, uint32_t play_count)",
      "brief": "This function sets the play count (number of times to repeat) the bitmap sequence.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_sequence_get_bitmap_size",
      "kind": "function",
      "signature": "GSize gbitmap_sequence_get_bitmap_size(GBitmapSequence * bitmap_sequence)",
      "brief": "This function gets the minimum required size (dimensions) necessary to render the bitmap sequence to a GBitmap using the /ref gbitmap_sequence_update_bitmap_next_frame.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "gbitmap_get_data_row_info",
      "kind": "function",
      "signature": "GBitmapDataRowInfo gbitmap_get_data_row_info(const GBitmap * bitmap, uint16_t y)",
      "brief": "Provides information about a pixel data row.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GAlign",
      "kind": "enum",
      "signature": "enum GAlign",
      "brief": "Values to specify how two things should be aligned relative to each other.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GAlignCenter",
      "kind": "enumerator",
      "signature": "GAlignCenter",
      "brief": "Align by centering.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GAlignTopLeft",
      "kind": "enumerator",
      "signature": "GAlignTopLeft",
      "brief": "Align by making the top edges overlap and left edges overlap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GAlignTopRight",
      "kind": "enumerator",
      "signature": "GAlignTopRight",
      "brief": "Align by making the top edges overlap and left edges overlap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GAlignTop",
      "kind": "enumerator",
      "signature": "GAlignTop",
      "brief": "Align by making the top edges overlap and centered horizontally.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GAlignLeft",
      "kind": "enumerator",
      "signature": "GAlignLeft",
      "brief": "Align by making the left edges overlap and centered vertically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GAlignBottom",
      "kind": "enumerator",
      "signature": "GAlignBottom",
      "brief": "Align by making the bottom edges overlap and centered horizontally.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GAlignRight",
      "kind": "enumerator",
      "signature": "GAlignRight",
      "brief": "Align by making the right edges overlap and centered vertically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GAlignBottomRight",
      "kind": "enumerator",
      "signature": "GAlignBottomRight",
      "brief": "Align by making the bottom edges overlap and right edges overlap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GAlignBottomLeft",
      "kind": "enumerator",
      "signature": "GAlignBottomLeft",
      "brief": "Align by making the bottom edges overlap and left edges overlap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "grect_align",
      "kind": "function",
      "signature": "void grect_align(GRect * rect, const GRect * inside_rect, const GAlign alignment, const bool clip)",
      "brief": "Aligns one rectangle within another rectangle, using an alignment parameter. The relative coordinate systems of both rectangles are assumed to be the same. When clip is true, rect is also clipped by the constraint.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GCompOp",
      "kind": "enum",
      "signature": "enum GCompOp",
      "brief": "Values to specify how the source image should be composited onto the destination image.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GCompOpAssign",
      "kind": "enumerator",
      "signature": "GCompOpAssign",
      "brief": "Assign the pixel values of the source image to the destination pixels, effectively replacing the previous values for those pixels. For color displays, when drawing a palettized or 8-bit GBitmap image, the opacity value is ignored.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GCompOpAssignInverted",
      "kind": "enumerator",
      "signature": "GCompOpAssignInverted",
      "brief": "Assign the inverted pixel values of the source image to the destination pixels, effectively replacing the previous values for those pixels.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GCompOpOr",
      "kind": "enumerator",
      "signature": "GCompOpOr",
      "brief": "Use the boolean operator OR to composite the source and destination pixels. The visual result of this compositing mode is the source's white pixels are painted onto the destination and the source's black pixels are treated as clear.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GCompOpAnd",
      "kind": "enumerator",
      "signature": "GCompOpAnd",
      "brief": "Use the boolean operator AND to composite the source and destination pixels. The visual result of this compositing mode is the source's black pixels are painted onto the destination and the source's white pixels are treated as clear.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GCompOpClear",
      "kind": "enumerator",
      "signature": "GCompOpClear",
      "brief": "Clears the bits in the destination image, using the source image as mask. The visual result of this compositing mode is that for the parts where the source image is white, the destination image will be painted black. Other parts will be left untouched.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GCompOpSet",
      "kind": "enumerator",
      "signature": "GCompOpSet",
      "brief": "Sets the bits in the destination image, using the source image as mask. This mode is required to apply any transparency of your bitmap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GContext",
      "kind": "typedef",
      "signature": "typedef struct GContext GContext",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GEdgeInsets4",
      "kind": "macro",
      "signature": "#define GEdgeInsets4(t, r, b, l) ((GEdgeInsets){.top = t, .right = r, .bottom = b, .left = l})",
      "brief": "helper for GEdgeInsets macro",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GEdgeInsets3",
      "kind": "macro",
      "signature": "#define GEdgeInsets3(t, rl, b) ((GEdgeInsets){.top = t, .right = rl, .bottom = b, .left = rl})",
      "brief": "helper for GEdgeInsets macro",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GEdgeInsets2",
      "kind": "macro",
      "signature": "#define GEdgeInsets2(tb, rl) ((GEdgeInsets){.top = tb, .right = rl, .bottom = tb, .left = rl})",
      "brief": "helper for GEdgeInsets macro",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GEdgeInsets1",
      "kind": "macro",
      "signature": "#define GEdgeInsets1(trbl) ((GEdgeInsets){.top = trbl, .right = trbl, .bottom = trbl, .left = trbl})",
      "brief": "helper for GEdgeInsets macro",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GEdgeInsetsN",
      "kind": "macro",
      "signature": "#define GEdgeInsetsN(_1, _2, _3, _4, NAME, ...) NAME",
      "brief": "helper for GEdgeInsets macro",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GEdgeInsets",
      "kind": "macro",
      "signature": "#define GEdgeInsets(...) GEdgeInsetsN(__VA_ARGS__, GEdgeInsets4, GEdgeInsets3, GEdgeInsets2, GEdgeInsets1)(__VA_ARGS__)",
      "brief": "Convenience macro to make a GEdgeInsets This macro follows the CSS shorthand notation where you can call it with.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "grect_inset",
      "kind": "function",
      "signature": "GRect grect_inset(GRect rect, GEdgeInsets insets)",
      "brief": "Returns a rectangle that is shrinked or expanded by the given edge insets.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GBitmapDataRowInfo",
      "kind": "struct",
      "signature": "struct GBitmapDataRowInfo",
      "brief": "Description of a single data row in the pixel data of a bitmap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GColor8",
      "kind": "union",
      "signature": "union GColor8",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GEdgeInsets",
      "kind": "struct",
      "signature": "struct GEdgeInsets",
      "brief": "Represents insets for four sides. Negative values mean a side extends.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GPoint",
      "kind": "struct",
      "signature": "struct GPoint",
      "brief": "Represents a point in a 2-dimensional coordinate system.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GRect",
      "kind": "struct",
      "signature": "struct GRect",
      "brief": "Represents a rectangle and defining it using the origin of the upper-lefthand corner and its size.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "GSize",
      "kind": "struct",
      "signature": "struct GSize",
      "brief": "Represents a 2-dimensional size.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types.md"
    },
    {
      "name": "Color Definitions",
      "kind": "group",
      "signature": "Color Definitions",
      "brief": "A list of all of the named colors available with links to the color map on the Pebble Developer website.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBlackARGB8",
      "kind": "macro",
      "signature": "#define GColorBlackARGB8 ((uint8_t)0b11000000)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorOxfordBlueARGB8",
      "kind": "macro",
      "signature": "#define GColorOxfordBlueARGB8 ((uint8_t)0b11000001)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorDukeBlueARGB8",
      "kind": "macro",
      "signature": "#define GColorDukeBlueARGB8 ((uint8_t)0b11000010)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBlueARGB8",
      "kind": "macro",
      "signature": "#define GColorBlueARGB8 ((uint8_t)0b11000011)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorDarkGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorDarkGreenARGB8 ((uint8_t)0b11000100)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMidnightGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorMidnightGreenARGB8 ((uint8_t)0b11000101)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorCobaltBlueARGB8",
      "kind": "macro",
      "signature": "#define GColorCobaltBlueARGB8 ((uint8_t)0b11000110)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBlueMoonARGB8",
      "kind": "macro",
      "signature": "#define GColorBlueMoonARGB8 ((uint8_t)0b11000111)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorIslamicGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorIslamicGreenARGB8 ((uint8_t)0b11001000)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorJaegerGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorJaegerGreenARGB8 ((uint8_t)0b11001001)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorTiffanyBlueARGB8",
      "kind": "macro",
      "signature": "#define GColorTiffanyBlueARGB8 ((uint8_t)0b11001010)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorVividCeruleanARGB8",
      "kind": "macro",
      "signature": "#define GColorVividCeruleanARGB8 ((uint8_t)0b11001011)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorGreenARGB8 ((uint8_t)0b11001100)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMalachiteARGB8",
      "kind": "macro",
      "signature": "#define GColorMalachiteARGB8 ((uint8_t)0b11001101)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMediumSpringGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorMediumSpringGreenARGB8 ((uint8_t)0b11001110)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorCyanARGB8",
      "kind": "macro",
      "signature": "#define GColorCyanARGB8 ((uint8_t)0b11001111)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBulgarianRoseARGB8",
      "kind": "macro",
      "signature": "#define GColorBulgarianRoseARGB8 ((uint8_t)0b11010000)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorImperialPurpleARGB8",
      "kind": "macro",
      "signature": "#define GColorImperialPurpleARGB8 ((uint8_t)0b11010001)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorIndigoARGB8",
      "kind": "macro",
      "signature": "#define GColorIndigoARGB8 ((uint8_t)0b11010010)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorElectricUltramarineARGB8",
      "kind": "macro",
      "signature": "#define GColorElectricUltramarineARGB8 ((uint8_t)0b11010011)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorArmyGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorArmyGreenARGB8 ((uint8_t)0b11010100)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorDarkGrayARGB8",
      "kind": "macro",
      "signature": "#define GColorDarkGrayARGB8 ((uint8_t)0b11010101)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorLibertyARGB8",
      "kind": "macro",
      "signature": "#define GColorLibertyARGB8 ((uint8_t)0b11010110)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorVeryLightBlueARGB8",
      "kind": "macro",
      "signature": "#define GColorVeryLightBlueARGB8 ((uint8_t)0b11010111)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorKellyGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorKellyGreenARGB8 ((uint8_t)0b11011000)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMayGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorMayGreenARGB8 ((uint8_t)0b11011001)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorCadetBlueARGB8",
      "kind": "macro",
      "signature": "#define GColorCadetBlueARGB8 ((uint8_t)0b11011010)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorPictonBlueARGB8",
      "kind": "macro",
      "signature": "#define GColorPictonBlueARGB8 ((uint8_t)0b11011011)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBrightGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorBrightGreenARGB8 ((uint8_t)0b11011100)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorScreaminGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorScreaminGreenARGB8 ((uint8_t)0b11011101)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMediumAquamarineARGB8",
      "kind": "macro",
      "signature": "#define GColorMediumAquamarineARGB8 ((uint8_t)0b11011110)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorElectricBlueARGB8",
      "kind": "macro",
      "signature": "#define GColorElectricBlueARGB8 ((uint8_t)0b11011111)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorDarkCandyAppleRedARGB8",
      "kind": "macro",
      "signature": "#define GColorDarkCandyAppleRedARGB8 ((uint8_t)0b11100000)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorJazzberryJamARGB8",
      "kind": "macro",
      "signature": "#define GColorJazzberryJamARGB8 ((uint8_t)0b11100001)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorPurpleARGB8",
      "kind": "macro",
      "signature": "#define GColorPurpleARGB8 ((uint8_t)0b11100010)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorVividVioletARGB8",
      "kind": "macro",
      "signature": "#define GColorVividVioletARGB8 ((uint8_t)0b11100011)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorWindsorTanARGB8",
      "kind": "macro",
      "signature": "#define GColorWindsorTanARGB8 ((uint8_t)0b11100100)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorRoseValeARGB8",
      "kind": "macro",
      "signature": "#define GColorRoseValeARGB8 ((uint8_t)0b11100101)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorPurpureusARGB8",
      "kind": "macro",
      "signature": "#define GColorPurpureusARGB8 ((uint8_t)0b11100110)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorLavenderIndigoARGB8",
      "kind": "macro",
      "signature": "#define GColorLavenderIndigoARGB8 ((uint8_t)0b11100111)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorLimerickARGB8",
      "kind": "macro",
      "signature": "#define GColorLimerickARGB8 ((uint8_t)0b11101000)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBrassARGB8",
      "kind": "macro",
      "signature": "#define GColorBrassARGB8 ((uint8_t)0b11101001)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorLightGrayARGB8",
      "kind": "macro",
      "signature": "#define GColorLightGrayARGB8 ((uint8_t)0b11101010)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBabyBlueEyesARGB8",
      "kind": "macro",
      "signature": "#define GColorBabyBlueEyesARGB8 ((uint8_t)0b11101011)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorSpringBudARGB8",
      "kind": "macro",
      "signature": "#define GColorSpringBudARGB8 ((uint8_t)0b11101100)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorInchwormARGB8",
      "kind": "macro",
      "signature": "#define GColorInchwormARGB8 ((uint8_t)0b11101101)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMintGreenARGB8",
      "kind": "macro",
      "signature": "#define GColorMintGreenARGB8 ((uint8_t)0b11101110)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorCelesteARGB8",
      "kind": "macro",
      "signature": "#define GColorCelesteARGB8 ((uint8_t)0b11101111)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorRedARGB8",
      "kind": "macro",
      "signature": "#define GColorRedARGB8 ((uint8_t)0b11110000)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorFollyARGB8",
      "kind": "macro",
      "signature": "#define GColorFollyARGB8 ((uint8_t)0b11110001)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorFashionMagentaARGB8",
      "kind": "macro",
      "signature": "#define GColorFashionMagentaARGB8 ((uint8_t)0b11110010)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMagentaARGB8",
      "kind": "macro",
      "signature": "#define GColorMagentaARGB8 ((uint8_t)0b11110011)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorOrangeARGB8",
      "kind": "macro",
      "signature": "#define GColorOrangeARGB8 ((uint8_t)0b11110100)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorSunsetOrangeARGB8",
      "kind": "macro",
      "signature": "#define GColorSunsetOrangeARGB8 ((uint8_t)0b11110101)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBrilliantRoseARGB8",
      "kind": "macro",
      "signature": "#define GColorBrilliantRoseARGB8 ((uint8_t)0b11110110)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorShockingPinkARGB8",
      "kind": "macro",
      "signature": "#define GColorShockingPinkARGB8 ((uint8_t)0b11110111)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorChromeYellowARGB8",
      "kind": "macro",
      "signature": "#define GColorChromeYellowARGB8 ((uint8_t)0b11111000)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorRajahARGB8",
      "kind": "macro",
      "signature": "#define GColorRajahARGB8 ((uint8_t)0b11111001)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMelonARGB8",
      "kind": "macro",
      "signature": "#define GColorMelonARGB8 ((uint8_t)0b11111010)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorRichBrilliantLavenderARGB8",
      "kind": "macro",
      "signature": "#define GColorRichBrilliantLavenderARGB8 ((uint8_t)0b11111011)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorYellowARGB8",
      "kind": "macro",
      "signature": "#define GColorYellowARGB8 ((uint8_t)0b11111100)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorIcterineARGB8",
      "kind": "macro",
      "signature": "#define GColorIcterineARGB8 ((uint8_t)0b11111101)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorPastelYellowARGB8",
      "kind": "macro",
      "signature": "#define GColorPastelYellowARGB8 ((uint8_t)0b11111110)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorWhiteARGB8",
      "kind": "macro",
      "signature": "#define GColorWhiteARGB8 ((uint8_t)0b11111111)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBlack",
      "kind": "macro",
      "signature": "#define GColorBlack (GColor8){.argb=GColorBlackARGB8}",
      "brief": "GColorBlack",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorOxfordBlue",
      "kind": "macro",
      "signature": "#define GColorOxfordBlue (GColor8){.argb=GColorOxfordBlueARGB8}",
      "brief": "GColorOxfordBlue",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorDukeBlue",
      "kind": "macro",
      "signature": "#define GColorDukeBlue (GColor8){.argb=GColorDukeBlueARGB8}",
      "brief": "GColorDukeBlue",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBlue",
      "kind": "macro",
      "signature": "#define GColorBlue (GColor8){.argb=GColorBlueARGB8}",
      "brief": "GColorBlue",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorDarkGreen",
      "kind": "macro",
      "signature": "#define GColorDarkGreen (GColor8){.argb=GColorDarkGreenARGB8}",
      "brief": "GColorDarkGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMidnightGreen",
      "kind": "macro",
      "signature": "#define GColorMidnightGreen (GColor8){.argb=GColorMidnightGreenARGB8}",
      "brief": "GColorMidnightGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorCobaltBlue",
      "kind": "macro",
      "signature": "#define GColorCobaltBlue (GColor8){.argb=GColorCobaltBlueARGB8}",
      "brief": "GColorCobaltBlue",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBlueMoon",
      "kind": "macro",
      "signature": "#define GColorBlueMoon (GColor8){.argb=GColorBlueMoonARGB8}",
      "brief": "GColorBlueMoon",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorIslamicGreen",
      "kind": "macro",
      "signature": "#define GColorIslamicGreen (GColor8){.argb=GColorIslamicGreenARGB8}",
      "brief": "GColorIslamicGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorJaegerGreen",
      "kind": "macro",
      "signature": "#define GColorJaegerGreen (GColor8){.argb=GColorJaegerGreenARGB8}",
      "brief": "GColorJaegerGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorTiffanyBlue",
      "kind": "macro",
      "signature": "#define GColorTiffanyBlue (GColor8){.argb=GColorTiffanyBlueARGB8}",
      "brief": "GColorTiffanyBlue",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorVividCerulean",
      "kind": "macro",
      "signature": "#define GColorVividCerulean (GColor8){.argb=GColorVividCeruleanARGB8}",
      "brief": "GColorVividCerulean",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorGreen",
      "kind": "macro",
      "signature": "#define GColorGreen (GColor8){.argb=GColorGreenARGB8}",
      "brief": "GColorGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMalachite",
      "kind": "macro",
      "signature": "#define GColorMalachite (GColor8){.argb=GColorMalachiteARGB8}",
      "brief": "GColorMalachite",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMediumSpringGreen",
      "kind": "macro",
      "signature": "#define GColorMediumSpringGreen (GColor8){.argb=GColorMediumSpringGreenARGB8}",
      "brief": "GColorMediumSpringGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorCyan",
      "kind": "macro",
      "signature": "#define GColorCyan (GColor8){.argb=GColorCyanARGB8}",
      "brief": "GColorCyan",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBulgarianRose",
      "kind": "macro",
      "signature": "#define GColorBulgarianRose (GColor8){.argb=GColorBulgarianRoseARGB8}",
      "brief": "GColorBulgarianRose",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorImperialPurple",
      "kind": "macro",
      "signature": "#define GColorImperialPurple (GColor8){.argb=GColorImperialPurpleARGB8}",
      "brief": "GColorImperialPurple",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorIndigo",
      "kind": "macro",
      "signature": "#define GColorIndigo (GColor8){.argb=GColorIndigoARGB8}",
      "brief": "GColorIndigo",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorElectricUltramarine",
      "kind": "macro",
      "signature": "#define GColorElectricUltramarine (GColor8){.argb=GColorElectricUltramarineARGB8}",
      "brief": "GColorElectricUltramarine",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorArmyGreen",
      "kind": "macro",
      "signature": "#define GColorArmyGreen (GColor8){.argb=GColorArmyGreenARGB8}",
      "brief": "GColorArmyGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorDarkGray",
      "kind": "macro",
      "signature": "#define GColorDarkGray (GColor8){.argb=GColorDarkGrayARGB8}",
      "brief": "GColorDarkGray",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorLiberty",
      "kind": "macro",
      "signature": "#define GColorLiberty (GColor8){.argb=GColorLibertyARGB8}",
      "brief": "GColorLiberty",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorVeryLightBlue",
      "kind": "macro",
      "signature": "#define GColorVeryLightBlue (GColor8){.argb=GColorVeryLightBlueARGB8}",
      "brief": "GColorVeryLightBlue",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorKellyGreen",
      "kind": "macro",
      "signature": "#define GColorKellyGreen (GColor8){.argb=GColorKellyGreenARGB8}",
      "brief": "GColorKellyGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMayGreen",
      "kind": "macro",
      "signature": "#define GColorMayGreen (GColor8){.argb=GColorMayGreenARGB8}",
      "brief": "GColorMayGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorCadetBlue",
      "kind": "macro",
      "signature": "#define GColorCadetBlue (GColor8){.argb=GColorCadetBlueARGB8}",
      "brief": "GColorCadetBlue",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorPictonBlue",
      "kind": "macro",
      "signature": "#define GColorPictonBlue (GColor8){.argb=GColorPictonBlueARGB8}",
      "brief": "GColorPictonBlue",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBrightGreen",
      "kind": "macro",
      "signature": "#define GColorBrightGreen (GColor8){.argb=GColorBrightGreenARGB8}",
      "brief": "GColorBrightGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorScreaminGreen",
      "kind": "macro",
      "signature": "#define GColorScreaminGreen (GColor8){.argb=GColorScreaminGreenARGB8}",
      "brief": "GColorScreaminGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMediumAquamarine",
      "kind": "macro",
      "signature": "#define GColorMediumAquamarine (GColor8){.argb=GColorMediumAquamarineARGB8}",
      "brief": "GColorMediumAquamarine",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorElectricBlue",
      "kind": "macro",
      "signature": "#define GColorElectricBlue (GColor8){.argb=GColorElectricBlueARGB8}",
      "brief": "GColorElectricBlue",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorDarkCandyAppleRed",
      "kind": "macro",
      "signature": "#define GColorDarkCandyAppleRed (GColor8){.argb=GColorDarkCandyAppleRedARGB8}",
      "brief": "GColorDarkCandyAppleRed",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorJazzberryJam",
      "kind": "macro",
      "signature": "#define GColorJazzberryJam (GColor8){.argb=GColorJazzberryJamARGB8}",
      "brief": "GColorJazzberryJam",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorPurple",
      "kind": "macro",
      "signature": "#define GColorPurple (GColor8){.argb=GColorPurpleARGB8}",
      "brief": "GColorPurple",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorVividViolet",
      "kind": "macro",
      "signature": "#define GColorVividViolet (GColor8){.argb=GColorVividVioletARGB8}",
      "brief": "GColorVividViolet",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorWindsorTan",
      "kind": "macro",
      "signature": "#define GColorWindsorTan (GColor8){.argb=GColorWindsorTanARGB8}",
      "brief": "GColorWindsorTan",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorRoseVale",
      "kind": "macro",
      "signature": "#define GColorRoseVale (GColor8){.argb=GColorRoseValeARGB8}",
      "brief": "GColorRoseVale",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorPurpureus",
      "kind": "macro",
      "signature": "#define GColorPurpureus (GColor8){.argb=GColorPurpureusARGB8}",
      "brief": "GColorPurpureus",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorLavenderIndigo",
      "kind": "macro",
      "signature": "#define GColorLavenderIndigo (GColor8){.argb=GColorLavenderIndigoARGB8}",
      "brief": "GColorLavenderIndigo",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorLimerick",
      "kind": "macro",
      "signature": "#define GColorLimerick (GColor8){.argb=GColorLimerickARGB8}",
      "brief": "GColorLimerick",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBrass",
      "kind": "macro",
      "signature": "#define GColorBrass (GColor8){.argb=GColorBrassARGB8}",
      "brief": "GColorBrass",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorLightGray",
      "kind": "macro",
      "signature": "#define GColorLightGray (GColor8){.argb=GColorLightGrayARGB8}",
      "brief": "GColorLightGray",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBabyBlueEyes",
      "kind": "macro",
      "signature": "#define GColorBabyBlueEyes (GColor8){.argb=GColorBabyBlueEyesARGB8}",
      "brief": "GColorBabyBlueEyes",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorSpringBud",
      "kind": "macro",
      "signature": "#define GColorSpringBud (GColor8){.argb=GColorSpringBudARGB8}",
      "brief": "GColorSpringBud",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorInchworm",
      "kind": "macro",
      "signature": "#define GColorInchworm (GColor8){.argb=GColorInchwormARGB8}",
      "brief": "GColorInchworm",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMintGreen",
      "kind": "macro",
      "signature": "#define GColorMintGreen (GColor8){.argb=GColorMintGreenARGB8}",
      "brief": "GColorMintGreen",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorCeleste",
      "kind": "macro",
      "signature": "#define GColorCeleste (GColor8){.argb=GColorCelesteARGB8}",
      "brief": "GColorCeleste",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorRed",
      "kind": "macro",
      "signature": "#define GColorRed (GColor8){.argb=GColorRedARGB8}",
      "brief": "GColorRed",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorFolly",
      "kind": "macro",
      "signature": "#define GColorFolly (GColor8){.argb=GColorFollyARGB8}",
      "brief": "GColorFolly",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorFashionMagenta",
      "kind": "macro",
      "signature": "#define GColorFashionMagenta (GColor8){.argb=GColorFashionMagentaARGB8}",
      "brief": "GColorFashionMagenta",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMagenta",
      "kind": "macro",
      "signature": "#define GColorMagenta (GColor8){.argb=GColorMagentaARGB8}",
      "brief": "GColorMagenta",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorOrange",
      "kind": "macro",
      "signature": "#define GColorOrange (GColor8){.argb=GColorOrangeARGB8}",
      "brief": "GColorOrange",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorSunsetOrange",
      "kind": "macro",
      "signature": "#define GColorSunsetOrange (GColor8){.argb=GColorSunsetOrangeARGB8}",
      "brief": "GColorSunsetOrange",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorBrilliantRose",
      "kind": "macro",
      "signature": "#define GColorBrilliantRose (GColor8){.argb=GColorBrilliantRoseARGB8}",
      "brief": "GColorBrilliantRose",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorShockingPink",
      "kind": "macro",
      "signature": "#define GColorShockingPink (GColor8){.argb=GColorShockingPinkARGB8}",
      "brief": "GColorShockingPink",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorChromeYellow",
      "kind": "macro",
      "signature": "#define GColorChromeYellow (GColor8){.argb=GColorChromeYellowARGB8}",
      "brief": "GColorChromeYellow",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorRajah",
      "kind": "macro",
      "signature": "#define GColorRajah (GColor8){.argb=GColorRajahARGB8}",
      "brief": "GColorRajah",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorMelon",
      "kind": "macro",
      "signature": "#define GColorMelon (GColor8){.argb=GColorMelonARGB8}",
      "brief": "GColorMelon",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorRichBrilliantLavender",
      "kind": "macro",
      "signature": "#define GColorRichBrilliantLavender (GColor8){.argb=GColorRichBrilliantLavenderARGB8}",
      "brief": "GColorRichBrilliantLavender",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorYellow",
      "kind": "macro",
      "signature": "#define GColorYellow (GColor8){.argb=GColorYellowARGB8}",
      "brief": "GColorYellow",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorIcterine",
      "kind": "macro",
      "signature": "#define GColorIcterine (GColor8){.argb=GColorIcterineARGB8}",
      "brief": "GColorIcterine",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorPastelYellow",
      "kind": "macro",
      "signature": "#define GColorPastelYellow (GColor8){.argb=GColorPastelYellowARGB8}",
      "brief": "GColorPastelYellow",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorWhite",
      "kind": "macro",
      "signature": "#define GColorWhite (GColor8){.argb=GColorWhiteARGB8}",
      "brief": "GColorWhite",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorClearARGB8",
      "kind": "macro",
      "signature": "#define GColorClearARGB8 ((uint8_t)0b00000000)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "GColorClear",
      "kind": "macro",
      "signature": "#define GColorClear ((GColor8){.argb=GColorClearARGB8})",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Graphics / Graphics Types / Color Definitions",
      "url": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions/",
      "url_md": "https://developer.repebble.com/docs/c/Graphics/Graphics_Types/Color_Definitions.md"
    },
    {
      "name": "User Interface",
      "kind": "group",
      "signature": "User Interface",
      "brief": "Everything related to user interface.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface",
      "url": "https://developer.repebble.com/docs/c/User_Interface/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface.md"
    },
    {
      "name": "Animation",
      "kind": "group",
      "signature": "Animation",
      "brief": "Abstract framework to create arbitrary animations",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "Animation",
      "kind": "typedef",
      "signature": "typedef struct Animation Animation",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationProgress",
      "kind": "typedef",
      "signature": "typedef int32_t AnimationProgress",
      "brief": "The type used to represent how far an animation has progressed. This is passed to the animation's update handler.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurve",
      "kind": "enum",
      "signature": "enum AnimationCurve",
      "brief": "Values that are used to indicate the different animation curves, which determine the speed at which the animated value(s) change(s).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurveLinear",
      "kind": "enumerator",
      "signature": "AnimationCurveLinear",
      "brief": "Linear curve: the velocity is constant.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurveEaseIn",
      "kind": "enumerator",
      "signature": "AnimationCurveEaseIn",
      "brief": "Bicubic ease-in: accelerate from zero velocity.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurveEaseOut",
      "kind": "enumerator",
      "signature": "AnimationCurveEaseOut",
      "brief": "Bicubic ease-in: decelerate to zero velocity.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurveEaseInOut",
      "kind": "enumerator",
      "signature": "AnimationCurveEaseInOut",
      "brief": "Bicubic ease-in-out: accelerate from zero velocity, decelerate to zero velocity.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurveDefault",
      "kind": "enumerator",
      "signature": "AnimationCurveDefault",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurveCustomFunction",
      "kind": "enumerator",
      "signature": "AnimationCurveCustomFunction",
      "brief": "Custom (user-provided) animation curve.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurveCustomInterpolationFunction",
      "kind": "enumerator",
      "signature": "AnimationCurveCustomInterpolationFunction",
      "brief": "User-provided interpolation function.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurve_Reserved1",
      "kind": "enumerator",
      "signature": "AnimationCurve_Reserved1",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurve_Reserved2",
      "kind": "enumerator",
      "signature": "AnimationCurve_Reserved2",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_create",
      "kind": "function",
      "signature": "Animation * animation_create(void)",
      "brief": "Creates a new Animation on the heap and initalizes it with the default values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_destroy",
      "kind": "function",
      "signature": "bool animation_destroy(Animation * animation)",
      "brief": "Destroys an Animation previously created by animation_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "ANIMATION_DURATION_INFINITE",
      "kind": "macro",
      "signature": "#define ANIMATION_DURATION_INFINITE UINT32_MAX",
      "brief": "Constant to indicate \"infinite\" duration. This can be used with animation_set_duration() to indicate that the animation should run indefinitely. This is useful when implementing for example a frame-by-frame simulation that does not have a clear ending (e.g. a game).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "ANIMATION_PLAY_COUNT_INFINITE",
      "kind": "macro",
      "signature": "#define ANIMATION_PLAY_COUNT_INFINITE UINT32_MAX",
      "brief": "Constant to indicate infinite play count. Can be passed to animation_set_play_count() to repeat indefinitely.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "ANIMATION_NORMALIZED_MIN",
      "kind": "macro",
      "signature": "#define ANIMATION_NORMALIZED_MIN 0",
      "brief": "The normalized distance at the start of the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "ANIMATION_NORMALIZED_MAX",
      "kind": "macro",
      "signature": "#define ANIMATION_NORMALIZED_MAX 65535",
      "brief": "The normalized distance at the end of the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_clone",
      "kind": "function",
      "signature": "Animation * animation_clone(Animation * from)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_sequence_create",
      "kind": "function",
      "signature": "Animation * animation_sequence_create(Animation * animation_a, Animation * animation_b, Animation * animation_c, ...)",
      "brief": "Create a new sequence animation from a list of 2 or more other animations. The returned animation owns the animations that were provided as arguments and no further write operations on those handles are allowed. The variable length argument list must be terminated with a NULL ptr.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_sequence_create_from_array",
      "kind": "function",
      "signature": "Animation * animation_sequence_create_from_array(Animation ** animation_array, uint32_t array_len)",
      "brief": "An alternate form of animation_sequence_create() that accepts an array of other animations.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_spawn_create",
      "kind": "function",
      "signature": "Animation * animation_spawn_create(Animation * animation_a, Animation * animation_b, Animation * animation_c, ...)",
      "brief": "Create a new spawn animation from a list of 2 or more other animations. The returned animation owns the animations that were provided as arguments and no further write operations on those handles are allowed. The variable length argument list must be terminated with a NULL ptr.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_spawn_create_from_array",
      "kind": "function",
      "signature": "Animation * animation_spawn_create_from_array(Animation ** animation_array, uint32_t array_len)",
      "brief": "An alternate form of animation_spawn_create() that accepts an array of other animations.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_set_elapsed",
      "kind": "function",
      "signature": "bool animation_set_elapsed(Animation * animation, uint32_t elapsed_ms)",
      "brief": "Seek to a specific location in the animation. Only forward seeking is allowed. Returns true if successful, false if the passed in seek location is invalid.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_get_elapsed",
      "kind": "function",
      "signature": "bool animation_get_elapsed(Animation * animation, int32_t * elapsed_ms)",
      "brief": "Get the current location in the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_set_reverse",
      "kind": "function",
      "signature": "bool animation_set_reverse(Animation * animation, bool reverse)",
      "brief": "Set an animation to run in reverse (or forward)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_get_reverse",
      "kind": "function",
      "signature": "bool animation_get_reverse(Animation * animation)",
      "brief": "Get the reverse setting of an animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_set_play_count",
      "kind": "function",
      "signature": "bool animation_set_play_count(Animation * animation, uint32_t play_count)",
      "brief": "Set an animation to play N times. The default is 1.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_get_play_count",
      "kind": "function",
      "signature": "uint32_t animation_get_play_count(Animation * animation)",
      "brief": "Get the play count of an animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_set_duration",
      "kind": "function",
      "signature": "bool animation_set_duration(Animation * animation, uint32_t duration_ms)",
      "brief": "Sets the time in milliseconds that an animation takes from start to finish.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_get_duration",
      "kind": "function",
      "signature": "uint32_t animation_get_duration(Animation * animation, bool include_delay, bool include_play_count)",
      "brief": "Get the static duration of an animation from start to end (ignoring how much has already played, if any).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_set_delay",
      "kind": "function",
      "signature": "bool animation_set_delay(Animation * animation, uint32_t delay_ms)",
      "brief": "Sets an optional delay for the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_get_delay",
      "kind": "function",
      "signature": "uint32_t animation_get_delay(Animation * animation)",
      "brief": "Get the delay of an animation in milliseconds.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_set_curve",
      "kind": "function",
      "signature": "bool animation_set_curve(Animation * animation, AnimationCurve curve)",
      "brief": "Sets the animation curve for the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_get_curve",
      "kind": "function",
      "signature": "AnimationCurve animation_get_curve(Animation * animation)",
      "brief": "Gets the animation curve for the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationCurveFunction",
      "kind": "typedef",
      "signature": "typedef AnimationProgress(* AnimationCurveFunction)(AnimationProgress linear_distance)",
      "brief": "The function pointer type of a custom animation curve.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_set_custom_curve",
      "kind": "function",
      "signature": "bool animation_set_custom_curve(Animation * animation, AnimationCurveFunction curve_function)",
      "brief": "Sets a custom animation curve function.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_get_custom_curve",
      "kind": "function",
      "signature": "AnimationCurveFunction animation_get_custom_curve(Animation * animation)",
      "brief": "Gets the custom animation curve function for the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationStartedHandler",
      "kind": "typedef",
      "signature": "typedef void(* AnimationStartedHandler)(Animation *animation, void *context)",
      "brief": "The function pointer type of the handler that will be called when an animation is started, just before updating the first frame of the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationStoppedHandler",
      "kind": "typedef",
      "signature": "typedef void(* AnimationStoppedHandler)(Animation *animation, bool finished, void *context)",
      "brief": "The function pointer type of the handler that will be called when the animation is stopped.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_set_handlers",
      "kind": "function",
      "signature": "bool animation_set_handlers(Animation * animation, AnimationHandlers callbacks, void * context)",
      "brief": "Sets the callbacks for the animation. Often an application needs to run code at the start or at the end of an animation. Using this function is possible to register callback functions with an animation, that will get called at the start and end of the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_get_context",
      "kind": "function",
      "signature": "void * animation_get_context(Animation * animation)",
      "brief": "Gets the application-specific callback context of the animation. This void pointer is passed as an argument when the animation system calls AnimationHandlers callbacks. The context pointer can be set to point to any application specific data using animation_set_handlers().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_schedule",
      "kind": "function",
      "signature": "bool animation_schedule(Animation * animation)",
      "brief": "Schedules the animation. Call this once after configuring an animation to get it to start running.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_unschedule",
      "kind": "function",
      "signature": "bool animation_unschedule(Animation * animation)",
      "brief": "Unschedules the animation, which in effect stops the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_unschedule_all",
      "kind": "function",
      "signature": "void animation_unschedule_all(void)",
      "brief": "Unschedules all animations of the application.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_is_scheduled",
      "kind": "function",
      "signature": "bool animation_is_scheduled(Animation * animation)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationSetupImplementation",
      "kind": "typedef",
      "signature": "typedef void(* AnimationSetupImplementation)(Animation *animation)",
      "brief": "Pointer to function that (optionally) prepares the animation for running. This callback is called when the animation is added to the scheduler.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationUpdateImplementation",
      "kind": "typedef",
      "signature": "typedef void(* AnimationUpdateImplementation)(Animation *animation, const AnimationProgress progress)",
      "brief": "Pointer to function that updates the animation according to the given normalized progress. This callback will be called repeatedly by the animation scheduler whenever the animation needs to be updated.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationTeardownImplementation",
      "kind": "typedef",
      "signature": "typedef void(* AnimationTeardownImplementation)(Animation *animation)",
      "brief": "Pointer to function that (optionally) cleans up the animation. This callback is called when the animation is removed from the scheduler. In case the .setup implementation allocated any memory, this is a good place to release that memory again.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_set_implementation",
      "kind": "function",
      "signature": "bool animation_set_implementation(Animation * animation, const AnimationImplementation * implementation)",
      "brief": "Sets the implementation of the custom animation. When implementing custom animations, use this function to specify what functions need to be called to for the setup, frame update and teardown of the animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "animation_get_implementation",
      "kind": "function",
      "signature": "const AnimationImplementation * animation_get_implementation(Animation * animation)",
      "brief": "Gets the implementation of the custom animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationHandlers",
      "kind": "struct",
      "signature": "struct AnimationHandlers",
      "brief": "The handlers that will get called when an animation starts and stops. See documentation with the function pointer types for more information.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "AnimationImplementation",
      "kind": "struct",
      "signature": "struct AnimationImplementation",
      "brief": "The 3 callbacks that implement a custom animation. Only the .update callback is mandatory, .setup and .teardown are optional. See the documentation with the function pointer typedefs for more information.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation.md"
    },
    {
      "name": "PropertyAnimation",
      "kind": "group",
      "signature": "PropertyAnimation",
      "brief": "A ProperyAnimation animates the value of a \"property\" of a \"subject\" over time.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "PropertyAnimation",
      "kind": "typedef",
      "signature": "typedef struct PropertyAnimation PropertyAnimation",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_create_layer_frame",
      "kind": "function",
      "signature": "PropertyAnimation * property_animation_create_layer_frame(struct Layer * layer, GRect * from_frame, GRect * to_frame)",
      "brief": "Convenience function to create and initialize a property animation that animates the frame of a Layer. It sets up the PropertyAnimation to use layer_set_frame() and layer_get_frame() as accessors and uses the layer parameter as the subject for the animation. The same defaults are used as with animation_create().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_create_bounds_origin",
      "kind": "function",
      "signature": "PropertyAnimation * property_animation_create_bounds_origin(struct Layer * layer, GPoint * from, GPoint * to)",
      "brief": "Convenience function to create and initialize a property animation that animates the bound's origin of a Layer. It sets up the PropertyAnimation to use layer_set_bounds() and layer_get_bounds() as accessors and uses the layer parameter as the subject for the animation. The same defaults are used as with animation_create().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_create",
      "kind": "function",
      "signature": "PropertyAnimation * property_animation_create(const PropertyAnimationImplementation * implementation, void * subject, void * from_value, void * to_value)",
      "brief": "Creates a new PropertyAnimation on the heap and and initializes it with the specified values. The same defaults are used as with animation_create(). If the from_value or the to_value is NULL, the getter accessor will be called to get the current value of the property and be used instead.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_destroy",
      "kind": "function",
      "signature": "void property_animation_destroy(PropertyAnimation * property_animation)",
      "brief": "Destroy a property animation allocated by property_animation_create() or relatives.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_update_int16",
      "kind": "function",
      "signature": "void property_animation_update_int16(PropertyAnimation * property_animation, const uint32_t distance_normalized)",
      "brief": "Default update callback for a property animations to update a property of type int16_t. Assign this function to the .base.update callback field of your PropertyAnimationImplementation, in combination with a .getter and .setter accessors of types Int16Getter and Int16Setter. The implementation of this function will calculate the next value of the animation and call the setter to set the new value upon the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_update_uint32",
      "kind": "function",
      "signature": "void property_animation_update_uint32(PropertyAnimation * property_animation, const uint32_t distance_normalized)",
      "brief": "Default update callback for a property animations to update a property of type uint32_t. Assign this function to the .base.update callback field of your PropertyAnimationImplementation, in combination with a .getter and .setter accessors of types UInt32Getter and UInt32Setter. The implementation of this function will calculate the next value of the animation and call the setter to set the new value upon the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_update_gpoint",
      "kind": "function",
      "signature": "void property_animation_update_gpoint(PropertyAnimation * property_animation, const uint32_t distance_normalized)",
      "brief": "Default update callback for a property animations to update a property of type GPoint. Assign this function to the .base.update callback field of your PropertyAnimationImplementation, in combination with a .getter and .setter accessors of types GPointGetter and GPointSetter. The implementation of this function will calculate the next point of the animation and call the setter to set the new point upon the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_update_grect",
      "kind": "function",
      "signature": "void property_animation_update_grect(PropertyAnimation * property_animation, const uint32_t distance_normalized)",
      "brief": "Default update callback for a property animations to update a property of type GRect. Assign this function to the .base.update callback field of your PropertyAnimationImplementation, in combination with a .getter and .setter accessors of types GRectGetter and GRectSetter. The implementation of this function will calculate the next rectangle of the animation and call the setter to set the new rectangle upon the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_update_gcolor8",
      "kind": "function",
      "signature": "void property_animation_update_gcolor8(PropertyAnimation * property_animation, const uint32_t distance_normalized)",
      "brief": "Default update callback for a property animations to update a property of type GColor8. Assign this function to the .base.update callback field of your PropertyAnimationImplementation, in combination with a .getter and .setter accessors of types GColor8Getter and GColor8Setter. The implementation of this function will calculate the next rectangle of the animation and call the setter to set the new value upon the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "GPointReturn",
      "kind": "typedef",
      "signature": "typedef GPoint GPointReturn",
      "brief": "Work-around for function pointer return type GPoint to avoid tripping the pre-processor to use the equally named GPoint define.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "GRectReturn",
      "kind": "typedef",
      "signature": "typedef GRect GRectReturn",
      "brief": "Work-around for function pointer return type GRect to avoid tripping the pre-processor to use the equally named GRect define.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "Int16Setter",
      "kind": "typedef",
      "signature": "typedef void(* Int16Setter)(void *subject, int16_t int16)",
      "brief": "Function signature of a setter function to set a property of type int16_t onto the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "Int16Getter",
      "kind": "typedef",
      "signature": "typedef int16_t(* Int16Getter)(void *subject)",
      "brief": "Function signature of a getter function to get the current property of type int16_t of the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "UInt32Setter",
      "kind": "typedef",
      "signature": "typedef void(* UInt32Setter)(void *subject, uint32_t uint32)",
      "brief": "Function signature of a setter function to set a property of type uint32_t onto the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "UInt32Getter",
      "kind": "typedef",
      "signature": "typedef uint32_t(* UInt32Getter)(void *subject)",
      "brief": "Function signature of a getter function to get the current property of type uint32_t of the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "GPointSetter",
      "kind": "typedef",
      "signature": "typedef void(* GPointSetter)(void *subject, GPoint gpoint)",
      "brief": "Function signature of a setter function to set a property of type GPoint onto the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "GPointGetter",
      "kind": "typedef",
      "signature": "typedef GPointReturn(* GPointGetter)(void *subject)",
      "brief": "Function signature of a getter function to get the current property of type GPoint of the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "GRectSetter",
      "kind": "typedef",
      "signature": "typedef void(* GRectSetter)(void *subject, GRect grect)",
      "brief": "Function signature of a setter function to set a property of type GRect onto the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "GRectGetter",
      "kind": "typedef",
      "signature": "typedef GRectReturn(* GRectGetter)(void *subject)",
      "brief": "Function signature of a getter function to get the current property of type GRect of the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "GColor8Setter",
      "kind": "typedef",
      "signature": "typedef void(* GColor8Setter)(void *subject, GColor8 gcolor)",
      "brief": "Function signature of a setter function to set a property of type GColor8 onto the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "GColor8Getter",
      "kind": "typedef",
      "signature": "typedef GColor8(* GColor8Getter)(void *subject)",
      "brief": "Function signature of a getter function to get the current property of type GColor8 of the subject.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_get_animation",
      "kind": "function",
      "signature": "Animation * property_animation_get_animation(PropertyAnimation * property_animation)",
      "brief": "Convenience function to retrieve an animation instance from a property animation instance.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_clone",
      "kind": "macro",
      "signature": "#define property_animation_clone(property_animation) (PropertyAnimation *)animation_clone((Animation *)property_animation)",
      "brief": "Convenience function to clone a property animation instance.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_get_from_grect",
      "kind": "macro",
      "signature": "#define property_animation_get_from_grect(property_animation, value_ptr) property_animation_from(property_animation, value_ptr, sizeof(GRect), false)",
      "brief": "Convenience function to retrieve the 'from' GRect value from property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_set_from_grect",
      "kind": "macro",
      "signature": "#define property_animation_set_from_grect(property_animation, value_ptr) property_animation_from(property_animation, value_ptr, sizeof(GRect), true)",
      "brief": "Convenience function to set the 'from' GRect value of property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_get_from_gpoint",
      "kind": "macro",
      "signature": "#define property_animation_get_from_gpoint(property_animation, value_ptr) property_animation_from(property_animation, value_ptr, sizeof(GPoint), false)",
      "brief": "Convenience function to retrieve the 'from' GPoint value from property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_set_from_gpoint",
      "kind": "macro",
      "signature": "#define property_animation_set_from_gpoint(property_animation, value_ptr) property_animation_from(property_animation, value_ptr, sizeof(GPoint), true)",
      "brief": "Convenience function to set the 'from' GPoint value of property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_get_from_int16",
      "kind": "macro",
      "signature": "#define property_animation_get_from_int16(property_animation, value_ptr) property_animation_from(property_animation, value_ptr, sizeof(int16_t), false)",
      "brief": "Convenience function to retrieve the 'from' int16_t value from property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_set_from_int16",
      "kind": "macro",
      "signature": "#define property_animation_set_from_int16(property_animation, value_ptr) property_animation_from(property_animation, value_ptr, sizeof(int16_t), true)",
      "brief": "Convenience function to set the 'from' int16_t value of property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_get_to_grect",
      "kind": "macro",
      "signature": "#define property_animation_get_to_grect(property_animation, value_ptr) property_animation_to(property_animation, value_ptr, sizeof(GRect), false)",
      "brief": "Convenience function to retrieve the 'to' GRect value from property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_set_to_grect",
      "kind": "macro",
      "signature": "#define property_animation_set_to_grect(property_animation, value_ptr) property_animation_to(property_animation, value_ptr, sizeof(GRect), true)",
      "brief": "Convenience function to set the 'to' GRect value of property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_get_to_gpoint",
      "kind": "macro",
      "signature": "#define property_animation_get_to_gpoint(property_animation, value_ptr) property_animation_to(property_animation, value_ptr, sizeof(GPoint), false)",
      "brief": "Convenience function to retrieve the 'to' GPoint value from property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_set_to_gpoint",
      "kind": "macro",
      "signature": "#define property_animation_set_to_gpoint(property_animation, value_ptr) property_animation_to(property_animation, value_ptr, sizeof(GPoint), true)",
      "brief": "Convenience function to set the 'to' GPoint value of property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_get_to_int16",
      "kind": "macro",
      "signature": "#define property_animation_get_to_int16(property_animation, value_ptr) property_animation_to(property_animation, value_ptr, sizeof(int16_t), false)",
      "brief": "Convenience function to retrieve the 'to' int16_t value from property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_set_to_int16",
      "kind": "macro",
      "signature": "#define property_animation_set_to_int16(property_animation, value_ptr) property_animation_to(property_animation, value_ptr, sizeof(int16_t), true)",
      "brief": "Convenience function to set the 'to' int16_t value of property animation handle.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_get_subject",
      "kind": "macro",
      "signature": "#define property_animation_get_subject(property_animation, value_ptr) property_animation_subject(property_animation, value_ptr, false)",
      "brief": "Retrieve the subject of a property animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_set_subject",
      "kind": "macro",
      "signature": "#define property_animation_set_subject(property_animation, value_ptr) property_animation_subject(property_animation, value_ptr, true)",
      "brief": "Set the subject of a property animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_subject",
      "kind": "function",
      "signature": "bool property_animation_subject(PropertyAnimation * property_animation, void ** subject, bool set)",
      "brief": "Helper function used by the property_animation_get|set_subject macros.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_from",
      "kind": "function",
      "signature": "bool property_animation_from(PropertyAnimation * property_animation, void * from, size_t size, bool set)",
      "brief": "Helper function used by the property_animation_get|set_from_.* macros.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "property_animation_to",
      "kind": "function",
      "signature": "bool property_animation_to(PropertyAnimation * property_animation, void * to, size_t size, bool set)",
      "brief": "Helper function used by the property_animation_get|set_to_.* macros.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "PropertyAnimationAccessors",
      "kind": "struct",
      "signature": "struct PropertyAnimationAccessors",
      "brief": "Data structure containing the setter and getter function pointers that the property animation should use. The specified setter function will be used by the animation's update callback. Based on the type of the property (int16_t, GPoint or GRect), the accompanying update callback should be used, see property_animation_update_int16(), property_animation_update_gpoint() and property_animation_update_grect(). The getter function is used when the animation is initialized, to assign the current value of the subject's property as \"from\" or \"to\" value, see property_animation_create().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "PropertyAnimationImplementation",
      "kind": "struct",
      "signature": "struct PropertyAnimationImplementation",
      "brief": "Data structure containing a collection of function pointers that form the implementation of the property animation. See the code example at the top (PropertyAnimation).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Animation / PropertyAnimation",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Animation/PropertyAnimation.md"
    },
    {
      "name": "Clicks",
      "kind": "group",
      "signature": "Clicks",
      "brief": "Handling button click interactions",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "ButtonId",
      "kind": "enum",
      "signature": "enum ButtonId",
      "brief": "Button ID values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "BUTTON_ID_BACK",
      "kind": "enumerator",
      "signature": "BUTTON_ID_BACK",
      "brief": "Back button.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "BUTTON_ID_UP",
      "kind": "enumerator",
      "signature": "BUTTON_ID_UP",
      "brief": "Up button.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "BUTTON_ID_SELECT",
      "kind": "enumerator",
      "signature": "BUTTON_ID_SELECT",
      "brief": "Select (middle) button.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "BUTTON_ID_DOWN",
      "kind": "enumerator",
      "signature": "BUTTON_ID_DOWN",
      "brief": "Down button.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "NUM_BUTTONS",
      "kind": "enumerator",
      "signature": "NUM_BUTTONS",
      "brief": "Total number of buttons.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "ClickRecognizerRef",
      "kind": "typedef",
      "signature": "typedef void * ClickRecognizerRef",
      "brief": "Reference to opaque click recognizer When a ClickHandler callback is called, the recognizer that fired the handler is passed in.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "ClickHandler",
      "kind": "typedef",
      "signature": "typedef void(* ClickHandler)(ClickRecognizerRef recognizer, void *context)",
      "brief": "Function signature of the callback that handles a recognized click pattern.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "ClickConfigProvider",
      "kind": "typedef",
      "signature": "typedef void(* ClickConfigProvider)(void *context)",
      "brief": "This callback is called every time the window becomes visible (and when you call window_set_click_config_provider() if the window is already visible).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "click_number_of_clicks_counted",
      "kind": "function",
      "signature": "uint8_t click_number_of_clicks_counted(ClickRecognizerRef recognizer)",
      "brief": "Gets the click count. You can use this inside a click handler implementation to get the click count for multi_click and (repeated) click events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "click_recognizer_get_button_id",
      "kind": "function",
      "signature": "ButtonId click_recognizer_get_button_id(ClickRecognizerRef recognizer)",
      "brief": "Gets the button identifier. You can use this inside a click handler implementation to get the button id for the click event.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "click_recognizer_is_repeating",
      "kind": "function",
      "signature": "bool click_recognizer_is_repeating(ClickRecognizerRef recognizer)",
      "brief": "Is this a repeating click. You can use this inside a click handler implementation to find out whether this is a repeating click or not.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Clicks",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Clicks/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Clicks.md"
    },
    {
      "name": "Gesture Recognizers",
      "kind": "group",
      "signature": "Gesture Recognizers",
      "brief": "Low-level touch-gesture recognizers for building fully custom touch interactions on touch-capable hardware.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "Recognizer",
      "kind": "typedef",
      "signature": "typedef struct Recognizer Recognizer",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "RecognizerEvent",
      "kind": "enum",
      "signature": "enum RecognizerEvent",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "RecognizerEvent_Started",
      "kind": "enumerator",
      "signature": "RecognizerEvent_Started",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "RecognizerEvent_Updated",
      "kind": "enumerator",
      "signature": "RecognizerEvent_Updated",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "RecognizerEvent_Completed",
      "kind": "enumerator",
      "signature": "RecognizerEvent_Completed",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "RecognizerEvent_Cancelled",
      "kind": "enumerator",
      "signature": "RecognizerEvent_Cancelled",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "RecognizerEventCb",
      "kind": "typedef",
      "signature": "typedef void(* RecognizerEventCb)(const Recognizer *recognizer, RecognizerEvent event_type)",
      "brief": "User event callback. When a recognizer changes state to any state other than the failed state the user callback of this type will be called.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "RecognizerSimultaneousWithCb",
      "kind": "typedef",
      "signature": "typedef bool(* RecognizerSimultaneousWithCb)(const Recognizer *recognizer, const Recognizer *simultaneous_with)",
      "brief": "This function is called to determine whether recognizer should be evaluated simultaneously with simultaneous_with.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "PanAxis",
      "kind": "enum",
      "signature": "enum PanAxis",
      "brief": "Axis to which a pan recognizer is locked. A pan is only recognized when the finger moves unambiguously along this axis.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "PanAxis_Horizontal",
      "kind": "enumerator",
      "signature": "PanAxis_Horizontal",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "PanAxis_Vertical",
      "kind": "enumerator",
      "signature": "PanAxis_Vertical",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "SwipeDirection",
      "kind": "enum",
      "signature": "enum SwipeDirection",
      "brief": "Swipe direction, also used as a bitmask when configuring which directions a swipe recognizer accepts. Screen coordinates grow downward, so a positive y delta is a downward swipe.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "SwipeDirection_None",
      "kind": "enumerator",
      "signature": "SwipeDirection_None",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "SwipeDirection_Up",
      "kind": "enumerator",
      "signature": "SwipeDirection_Up",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "SwipeDirection_Down",
      "kind": "enumerator",
      "signature": "SwipeDirection_Down",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "SwipeDirection_Left",
      "kind": "enumerator",
      "signature": "SwipeDirection_Left",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "SwipeDirection_Right",
      "kind": "enumerator",
      "signature": "SwipeDirection_Right",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "tap_recognizer_create",
      "kind": "function",
      "signature": "Recognizer * tap_recognizer_create(RecognizerEventCb event_cb, void * user_data)",
      "brief": "Create a tap recognizer. The default recognizer recognizes a single tap from a single finger.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "pan_recognizer_create",
      "kind": "function",
      "signature": "Recognizer * pan_recognizer_create(RecognizerEventCb event_cb, void * user_data, PanAxis axis)",
      "brief": "Create a pan recognizer locked to a single axis. The recognizer stays in the Possible state until the finger moves unambiguously along axis and crosses the start threshold, at which point it Starts. It Fails if the finger instead moves unambiguously along the foreign axis.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "swipe_recognizer_create",
      "kind": "function",
      "signature": "Recognizer * swipe_recognizer_create(RecognizerEventCb event_cb, void * user_data, uint8_t direction_mask)",
      "brief": "Create a swipe recognizer that accepts the directions set in direction_mask. The recognizer stays Possible while tracking the path and Completes on liftoff if the path is a fast, straight, long-enough flick whose direction is in the mask; otherwise it Fails.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "tap_recognizer_get_tap_point",
      "kind": "function",
      "signature": "GPoint tap_recognizer_get_tap_point(const Recognizer * recognizer)",
      "brief": "Get the coordinate of the recognized tap. The coordinate is taken from the last position update, not the liftoff. Valid once the recognizer has completed.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "pan_recognizer_get_total_delta",
      "kind": "function",
      "signature": "GPoint pan_recognizer_get_total_delta(const Recognizer * recognizer)",
      "brief": "Get the total movement of the pan since the touchdown point. Component-wise.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "pan_recognizer_get_delta_since_start",
      "kind": "function",
      "signature": "GPoint pan_recognizer_get_delta_since_start(const Recognizer * recognizer)",
      "brief": "Get the movement of the pan since it Started (i.e. since the start threshold was crossed). This is exactly (0, 0) at the instant the recognizer transitions to Started, so live scroll that consumes this value does not jump at gesture start. Component-wise.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "pan_recognizer_get_delta_since_prev",
      "kind": "function",
      "signature": "GPoint pan_recognizer_get_delta_since_prev(const Recognizer * recognizer)",
      "brief": "Get the movement of the pan since the previous position update. Component-wise.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "pan_recognizer_get_velocity",
      "kind": "function",
      "signature": "GPoint pan_recognizer_get_velocity(const Recognizer * recognizer)",
      "brief": "Get the current velocity of the pan, in pixels per second, component-wise. Computed over the most-recent events within a short time window (see PAN_VELOCITY_WINDOW_MS). Zero when the elapsed time across the sampled events is zero.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "swipe_recognizer_get_direction",
      "kind": "function",
      "signature": "SwipeDirection swipe_recognizer_get_direction(const Recognizer * recognizer)",
      "brief": "Get the recognized swipe direction. Valid once the recognizer has Completed; otherwise SwipeDirection_None.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "swipe_recognizer_get_velocity",
      "kind": "function",
      "signature": "GPoint swipe_recognizer_get_velocity(const Recognizer * recognizer)",
      "brief": "Get the velocity of the swipe, in pixels per second, component-wise. Computed over the most-recent events within a short time window. Zero when the elapsed time is zero.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "recognizer_destroy",
      "kind": "function",
      "signature": "void recognizer_destroy(Recognizer * recognizer)",
      "brief": "Destroy an un-owned recognizer. If a recognizer is not owned, this will destroy the recognizer freeing it's data and calling the destructor (see recognizer_set_on_destroy), if set. If it is owned, this will do nothing.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "recognizer_set_simultaneous_with",
      "kind": "function",
      "signature": "void recognizer_set_simultaneous_with(Recognizer * recognizer, RecognizerSimultaneousWithCb simultaneous_with_cb)",
      "brief": "Specify a callback to determine whether a recognizer should be evaluated simultaneously with another recognizer.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "recognizer_set_fail_after",
      "kind": "function",
      "signature": "void recognizer_set_fail_after(Recognizer * recognizer, Recognizer * fail_after)",
      "brief": "Tell a recognizer to only evaluate after the another recognizer fails.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Gesture Recognizers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Gesture_Recognizers.md"
    },
    {
      "name": "Layers",
      "kind": "group",
      "signature": "Layers",
      "brief": "User interface layers for displaying graphic components",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "Layer",
      "kind": "typedef",
      "signature": "typedef struct Layer Layer",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "LayerUpdateProc",
      "kind": "typedef",
      "signature": "typedef void(* LayerUpdateProc)(struct Layer *layer, GContext *ctx)",
      "brief": "Function signature for a Layer's render callback (the name of the type is derived from the words 'update procedure'). The system will call the .update_proc callback whenever the Layer needs to be rendered.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_create",
      "kind": "function",
      "signature": "Layer * layer_create(GRect frame)",
      "brief": "Creates a layer on the heap and sets its frame and bounds. Default values:",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_create_with_data",
      "kind": "function",
      "signature": "Layer * layer_create_with_data(GRect frame, size_t data_size)",
      "brief": "Creates a layer on the heap with extra space for callback data, and set its frame andbounds. Default values:",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_destroy",
      "kind": "function",
      "signature": "void layer_destroy(Layer * layer)",
      "brief": "Destroys a layer previously created by layer_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_mark_dirty",
      "kind": "function",
      "signature": "void layer_mark_dirty(Layer * layer)",
      "brief": "Marks the complete layer as \"dirty\", awaiting to be asked by the system to redraw itself. Typically, this function is called whenever state has changed that affects what the layer is displaying.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_set_update_proc",
      "kind": "function",
      "signature": "void layer_set_update_proc(Layer * layer, LayerUpdateProc update_proc)",
      "brief": "Sets the layer's render function. The system will call the update_proc automatically when the layer needs to redraw itself, see also layer_mark_dirty().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_set_frame",
      "kind": "function",
      "signature": "void layer_set_frame(Layer * layer, GRect frame)",
      "brief": "Sets the frame of the layer, which is it's bounding box relative to the coordinate system of its parent layer. The size of the layer's bounds will be extended automatically, so that the bounds cover the new frame.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_get_frame",
      "kind": "function",
      "signature": "GRect layer_get_frame(const Layer * layer)",
      "brief": "Gets the frame of the layer, which is it's bounding box relative to the coordinate system of its parent layer. If the frame has changed, layer_mark_dirty() will be called automatically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_set_bounds",
      "kind": "function",
      "signature": "void layer_set_bounds(Layer * layer, GRect bounds)",
      "brief": "Sets the bounds of the layer, which is it's bounding box relative to its frame. If the bounds has changed, layer_mark_dirty() will be called automatically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_get_bounds",
      "kind": "function",
      "signature": "GRect layer_get_bounds(const Layer * layer)",
      "brief": "Gets the bounds of the layer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_get_unobstructed_bounds",
      "kind": "function",
      "signature": "GRect layer_get_unobstructed_bounds(const Layer * layer)",
      "brief": "Get the largest unobstructed bounds rectangle of a layer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_convert_point_to_screen",
      "kind": "function",
      "signature": "GPoint layer_convert_point_to_screen(const Layer * layer, GPoint point)",
      "brief": "Converts a point from the layer's local coordinate system to screen coordinates.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_convert_rect_to_screen",
      "kind": "function",
      "signature": "GRect layer_convert_rect_to_screen(const Layer * layer, GRect rect)",
      "brief": "Converts a rectangle from the layer's local coordinate system to screen coordinates.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_get_window",
      "kind": "function",
      "signature": "struct Window * layer_get_window(const Layer * layer)",
      "brief": "Gets the window that the layer is currently attached to.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_remove_from_parent",
      "kind": "function",
      "signature": "void layer_remove_from_parent(Layer * child)",
      "brief": "Removes the layer from its current parent layer If removed successfully, the child's parent layer will be marked dirty automatically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_remove_child_layers",
      "kind": "function",
      "signature": "void layer_remove_child_layers(Layer * parent)",
      "brief": "Removes child layers from given layer If removed successfully, the child's parent layer will be marked dirty automatically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_add_child",
      "kind": "function",
      "signature": "void layer_add_child(Layer * parent, Layer * child)",
      "brief": "Adds the child layer to a given parent layer, making it appear in front of its parent and in front of any existing child layers of the parent. If the child layer was already part of a layer hierarchy, it will be removed from its old parent first. If added successfully, the parent (and children) will be marked dirty automatically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_insert_below_sibling",
      "kind": "function",
      "signature": "void layer_insert_below_sibling(Layer * layer_to_insert, Layer * below_sibling_layer)",
      "brief": "Inserts the layer as a sibling behind another layer. If the layer to insert was already part of a layer hierarchy, it will be removed from its old parent first. The below_layer has to be a child of a parent layer, otherwise this function will be a noop. If inserted successfully, the parent (and children) will be marked dirty automatically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_insert_above_sibling",
      "kind": "function",
      "signature": "void layer_insert_above_sibling(Layer * layer_to_insert, Layer * above_sibling_layer)",
      "brief": "Inserts the layer as a sibling in front of another layer. The above_layer has to be a child of a parent layer, otherwise this function will be a noop. If inserted successfully, the parent (and children) will be marked dirty automatically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_set_hidden",
      "kind": "function",
      "signature": "void layer_set_hidden(Layer * layer, bool hidden)",
      "brief": "Sets the visibility of the layer. If the visibility has changed, layer_mark_dirty() will be called automatically on the parent layer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_get_hidden",
      "kind": "function",
      "signature": "bool layer_get_hidden(const Layer * layer)",
      "brief": "Gets the visibility of the layer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_set_clips",
      "kind": "function",
      "signature": "void layer_set_clips(Layer * layer, bool clips)",
      "brief": "Sets whether clipping is enabled for the layer. If enabled, whatever the layer and its children will draw using their .update_proc callbacks, will be clipped by the this layer's frame. If the clipping has changed, layer_mark_dirty() will be called automatically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_get_clips",
      "kind": "function",
      "signature": "bool layer_get_clips(const Layer * layer)",
      "brief": "Gets whether clipping is enabled for the layer. If enabled, whatever the layer and its children will draw using their .update_proc callbacks, will be clipped by the this layer's frame.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "layer_get_data",
      "kind": "function",
      "signature": "void * layer_get_data(const Layer * layer)",
      "brief": "Gets the data from a layer that has been created with an extra data region.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers.md"
    },
    {
      "name": "ActionBarLayer",
      "kind": "group",
      "signature": "ActionBarLayer",
      "brief": "Vertical, bar-shaped control widget on the right edge of the window",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "ACTION_BAR_WIDTH",
      "kind": "macro",
      "signature": "#define ACTION_BAR_WIDTH _ACTION_BAR_WIDTH(PBL_PLATFORM_TYPE_CURRENT)",
      "brief": "The width of the action bar in pixels.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "_ACTION_BAR_WIDTH",
      "kind": "macro",
      "signature": "#define _ACTION_BAR_WIDTH(plat) PBL_PLATFORM_SWITCH(plat, \\ /*aplite*/ 30, \\ /*basalt*/ 30, \\ /*chalk*/ 40, \\ /*diorite*/ 30, \\ /*emery*/ 34, \\ /*flint*/ 30, \\ /*gabbro*/ 40)",
      "brief": "The width of the action bar in pixels, for all platforms.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "NUM_ACTION_BAR_ITEMS",
      "kind": "macro",
      "signature": "#define NUM_ACTION_BAR_ITEMS 3",
      "brief": "The maximum number of action bar items.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "ActionBarLayerIconPressAnimation",
      "kind": "enum",
      "signature": "enum ActionBarLayerIconPressAnimation",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "ActionBarLayerIconPressAnimationNone",
      "kind": "enumerator",
      "signature": "ActionBarLayerIconPressAnimationNone",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "ActionBarLayerIconPressAnimationMoveLeft",
      "kind": "enumerator",
      "signature": "ActionBarLayerIconPressAnimationMoveLeft",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "ActionBarLayerIconPressAnimationMoveUp",
      "kind": "enumerator",
      "signature": "ActionBarLayerIconPressAnimationMoveUp",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "ActionBarLayerIconPressAnimationMoveRight",
      "kind": "enumerator",
      "signature": "ActionBarLayerIconPressAnimationMoveRight",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "ActionBarLayerIconPressAnimationMoveDown",
      "kind": "enumerator",
      "signature": "ActionBarLayerIconPressAnimationMoveDown",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "ActionBarLayer",
      "kind": "typedef",
      "signature": "typedef struct ActionBarLayer ActionBarLayer",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_create",
      "kind": "function",
      "signature": "ActionBarLayer * action_bar_layer_create(void)",
      "brief": "Creates a new ActionBarLayer on the heap and initalizes it with the default values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_destroy",
      "kind": "function",
      "signature": "void action_bar_layer_destroy(ActionBarLayer * action_bar_layer)",
      "brief": "Destroys a ActionBarLayer previously created by action_bar_layer_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_get_layer",
      "kind": "function",
      "signature": "Layer * action_bar_layer_get_layer(ActionBarLayer * action_bar_layer)",
      "brief": "Gets the \"root\" Layer of the action bar layer, which is the parent for the sub- layers used for its implementation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_set_context",
      "kind": "function",
      "signature": "void action_bar_layer_set_context(ActionBarLayer * action_bar, void * context)",
      "brief": "Sets the context parameter, which will be passed in to ClickHandler callbacks and the ClickConfigProvider callback of the action bar.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_set_click_config_provider",
      "kind": "function",
      "signature": "void action_bar_layer_set_click_config_provider(ActionBarLayer * action_bar, ClickConfigProvider click_config_provider)",
      "brief": "Sets the click configuration provider callback of the action bar. In this callback your application can associate handlers to the different types of click events for each of the buttons, see Clicks.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_set_icon",
      "kind": "function",
      "signature": "void action_bar_layer_set_icon(ActionBarLayer * action_bar, ButtonId button_id, const GBitmap * icon)",
      "brief": "Sets an action bar icon onto one of the 3 slots as identified by button_id. Only BUTTON_ID_UP, BUTTON_ID_SELECT and BUTTON_ID_DOWN can be used. The transition will not be animated. Whenever an icon is set, the click configuration provider will be called, to give the application the opportunity to reconfigure the button interaction.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_clear_icon",
      "kind": "function",
      "signature": "void action_bar_layer_clear_icon(ActionBarLayer * action_bar, ButtonId button_id)",
      "brief": "Convenience function to clear out an existing icon. All it does is call action_bar_layer_set_icon(action_bar, button_id, NULL)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_add_to_window",
      "kind": "function",
      "signature": "void action_bar_layer_add_to_window(ActionBarLayer * action_bar, struct Window * window)",
      "brief": "Adds the action bar's layer on top of the window's root layer. It also adjusts the layout of the action bar to match the geometry of the window it gets added to. Lastly, it calls window_set_click_config_provider_with_context() on the window to set it up to work with the internal callback and raw click handlers of the action bar, to enable the highlighting of the section of the action bar when the user presses a button.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_remove_from_window",
      "kind": "function",
      "signature": "void action_bar_layer_remove_from_window(ActionBarLayer * action_bar)",
      "brief": "Removes the action bar from the window and unconfigures the window's click configuration provider. NULL is set as the window's new click config provider and also as its callback context. If it has not been added to a window before, this function is a no-op.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_set_background_color",
      "kind": "function",
      "signature": "void action_bar_layer_set_background_color(ActionBarLayer * action_bar, GColor background_color)",
      "brief": "Sets the background color of the action bar. Defaults to GColorBlack. The action bar's layer is automatically marked dirty.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_set_icon_animated",
      "kind": "function",
      "signature": "void action_bar_layer_set_icon_animated(ActionBarLayer * action_bar, ButtonId button_id, const GBitmap * icon, bool animated)",
      "brief": "Sets an action bar icon onto one of the 3 slots as identified by button_id. Only BUTTON_ID_UP, BUTTON_ID_SELECT and BUTTON_ID_DOWN can be used. Optionally, if animated is true, the transition will be animated. Whenever an icon is set, the click configuration provider will be called, to give the application the opportunity to reconfigure the button interaction.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "action_bar_layer_set_icon_press_animation",
      "kind": "function",
      "signature": "void action_bar_layer_set_icon_press_animation(ActionBarLayer * action_bar, ButtonId button_id, ActionBarLayerIconPressAnimation animation)",
      "brief": "Sets the animation to use while a button is pressed on an ActionBarLayer. By default we use ActionBarLayerIconPressAnimationMoveLeft.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ActionBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ActionBarLayer.md"
    },
    {
      "name": "BitmapLayer",
      "kind": "group",
      "signature": "BitmapLayer",
      "brief": "Layer that displays a bitmap image.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / BitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer.md"
    },
    {
      "name": "BitmapLayer",
      "kind": "typedef",
      "signature": "typedef struct BitmapLayer BitmapLayer",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / BitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer.md"
    },
    {
      "name": "bitmap_layer_create",
      "kind": "function",
      "signature": "BitmapLayer * bitmap_layer_create(GRect frame)",
      "brief": "Creates a new bitmap layer on the heap and initalizes it the default values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / BitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer.md"
    },
    {
      "name": "bitmap_layer_destroy",
      "kind": "function",
      "signature": "void bitmap_layer_destroy(BitmapLayer * bitmap_layer)",
      "brief": "Destroys a window previously created by bitmap_layer_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / BitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer.md"
    },
    {
      "name": "bitmap_layer_get_layer",
      "kind": "function",
      "signature": "Layer * bitmap_layer_get_layer(const BitmapLayer * bitmap_layer)",
      "brief": "Gets the \"root\" Layer of the bitmap layer, which is the parent for the sub- layers used for its implementation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / BitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer.md"
    },
    {
      "name": "bitmap_layer_get_bitmap",
      "kind": "function",
      "signature": "const GBitmap * bitmap_layer_get_bitmap(BitmapLayer * bitmap_layer)",
      "brief": "Gets the pointer to the bitmap image that the BitmapLayer is using.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / BitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer.md"
    },
    {
      "name": "bitmap_layer_set_bitmap",
      "kind": "function",
      "signature": "void bitmap_layer_set_bitmap(BitmapLayer * bitmap_layer, const GBitmap * bitmap)",
      "brief": "Sets the bitmap onto the BitmapLayer. The bitmap is set by reference (no deep copy), thus the caller of this function has to make sure the bitmap is kept in memory.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / BitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer.md"
    },
    {
      "name": "bitmap_layer_set_alignment",
      "kind": "function",
      "signature": "void bitmap_layer_set_alignment(BitmapLayer * bitmap_layer, GAlign alignment)",
      "brief": "Sets the alignment of the image to draw with in frame of the BitmapLayer. The aligment parameter specifies which edges of the bitmap should overlap with the frame of the BitmapLayer. If the bitmap is smaller than the frame of the BitmapLayer, the background is filled with the background color.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / BitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer.md"
    },
    {
      "name": "bitmap_layer_set_background_color",
      "kind": "function",
      "signature": "void bitmap_layer_set_background_color(BitmapLayer * bitmap_layer, GColor color)",
      "brief": "Sets the background color of bounding box that will be drawn behind the image of the BitmapLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / BitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer.md"
    },
    {
      "name": "bitmap_layer_set_compositing_mode",
      "kind": "function",
      "signature": "void bitmap_layer_set_compositing_mode(BitmapLayer * bitmap_layer, GCompOp mode)",
      "brief": "Sets the compositing mode of how the bitmap image is composited onto the BitmapLayer's background plane, or how it is composited onto what has been drawn beneath the BitmapLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / BitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/BitmapLayer.md"
    },
    {
      "name": "MenuLayer",
      "kind": "group",
      "signature": "MenuLayer",
      "brief": "Layer that displays a standard list menu. Data is provided using callbacks.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_cell_basic_draw",
      "kind": "function",
      "signature": "void menu_cell_basic_draw(GContext * ctx, const Layer * cell_layer, const char * title, const char * subtitle, GBitmap * icon)",
      "brief": "Section drawing function to draw a basic section cell with the title, subtitle, and icon of the section. Call this function inside the .draw_row callback implementation, see MenuLayerCallbacks. Note that if the size of cell_layer is too small to fit all of the cell items specified, not all of them may be drawn.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_cell_title_draw",
      "kind": "function",
      "signature": "void menu_cell_title_draw(GContext * ctx, const Layer * cell_layer, const char * title)",
      "brief": "Cell drawing function to draw a basic menu cell layout with title, subtitle Cell drawing function to draw a menu cell layout with only one big title. Call this function inside the .draw_row callback implementation, see MenuLayerCallbacks.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_cell_basic_header_draw",
      "kind": "function",
      "signature": "void menu_cell_basic_header_draw(GContext * ctx, const Layer * cell_layer, const char * title)",
      "brief": "Section header drawing function to draw a basic section header cell layout with the title of the section. Call this function inside the .draw_header callback implementation, see MenuLayerCallbacks.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MENU_CELL_BASIC_HEADER_HEIGHT",
      "kind": "macro",
      "signature": "#define MENU_CELL_BASIC_HEADER_HEIGHT ((const int16_t) 16)",
      "brief": "Default section header height in pixels.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MENU_INDEX_NOT_FOUND",
      "kind": "macro",
      "signature": "#define MENU_INDEX_NOT_FOUND ((const uint16_t) ~0)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuIndex",
      "kind": "macro",
      "signature": "#define MenuIndex(section, row) ((MenuIndex){ (section), (row) })",
      "brief": "Macro to create a MenuIndex.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_index_compare",
      "kind": "function",
      "signature": "int16_t menu_index_compare(const MenuIndex * a, const MenuIndex * b)",
      "brief": "Comparator function to determine the order of two MenuIndex values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayer",
      "kind": "typedef",
      "signature": "typedef struct MenuLayer MenuLayer",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerGetNumberOfSectionsCallback",
      "kind": "typedef",
      "signature": "typedef uint16_t(* MenuLayerGetNumberOfSectionsCallback)(struct MenuLayer *menu_layer, void *callback_context)",
      "brief": "Function signature for the callback to get the number of sections in a menu.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerGetNumberOfRowsInSectionsCallback",
      "kind": "typedef",
      "signature": "typedef uint16_t(* MenuLayerGetNumberOfRowsInSectionsCallback)(struct MenuLayer *menu_layer, uint16_t section_index, void *callback_context)",
      "brief": "Function signature for the callback to get the number of rows in a given section in a menu.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerGetCellHeightCallback",
      "kind": "typedef",
      "signature": "typedef int16_t(* MenuLayerGetCellHeightCallback)(struct MenuLayer *menu_layer, MenuIndex *cell_index, void *callback_context)",
      "brief": "Function signature for the callback to get the height of the menu cell at a given index.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerGetHeaderHeightCallback",
      "kind": "typedef",
      "signature": "typedef int16_t(* MenuLayerGetHeaderHeightCallback)(struct MenuLayer *menu_layer, uint16_t section_index, void *callback_context)",
      "brief": "Function signature for the callback to get the height of the section header at a given section index.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerGetSeparatorHeightCallback",
      "kind": "typedef",
      "signature": "typedef int16_t(* MenuLayerGetSeparatorHeightCallback)(struct MenuLayer *menu_layer, MenuIndex *cell_index, void *callback_context)",
      "brief": "Function signature for the callback to get the height of the separator at a given index.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerDrawRowCallback",
      "kind": "typedef",
      "signature": "typedef void(* MenuLayerDrawRowCallback)(GContext *ctx, const Layer *cell_layer, MenuIndex *cell_index, void *callback_context)",
      "brief": "Function signature for the callback to render the menu cell at a given MenuIndex.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerDrawHeaderCallback",
      "kind": "typedef",
      "signature": "typedef void(* MenuLayerDrawHeaderCallback)(GContext *ctx, const Layer *cell_layer, uint16_t section_index, void *callback_context)",
      "brief": "Function signature for the callback to render the section header at a given section index.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerDrawSeparatorCallback",
      "kind": "typedef",
      "signature": "typedef void(* MenuLayerDrawSeparatorCallback)(GContext *ctx, const Layer *cell_layer, MenuIndex *cell_index, void *callback_context)",
      "brief": "Function signature for the callback to render the separator at a given MenuIndex.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerSelectCallback",
      "kind": "typedef",
      "signature": "typedef void(* MenuLayerSelectCallback)(struct MenuLayer *menu_layer, MenuIndex *cell_index, void *callback_context)",
      "brief": "Function signature for the callback to handle the event that a user hits the SELECT button.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerSelectionChangedCallback",
      "kind": "typedef",
      "signature": "typedef void(* MenuLayerSelectionChangedCallback)(struct MenuLayer *menu_layer, MenuIndex new_index, MenuIndex old_index, void *callback_context)",
      "brief": "Function signature for the callback to handle a change in the current selected item in the menu.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerSelectionWillChangeCallback",
      "kind": "typedef",
      "signature": "typedef void(* MenuLayerSelectionWillChangeCallback)(struct MenuLayer *menu_layer, MenuIndex *new_index, MenuIndex old_index, void *callback_context)",
      "brief": "Function signature for the callback which allows or changes selection behavior of the menu. In order to change the cell that should be selected, modify the passed in new_index. Preventing the selection from changing, new_index can be assigned the value of old_index.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerDrawBackgroundCallback",
      "kind": "typedef",
      "signature": "typedef void(* MenuLayerDrawBackgroundCallback)(GContext *ctx, const Layer *bg_layer, bool highlight, void *callback_context)",
      "brief": "Function signature for the callback which draws the menu's background. The background is underneath the cells of the menu, and is visible in the padding below the bottom cell, or if a cell's background color is set to GColorClear.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_create",
      "kind": "function",
      "signature": "MenuLayer * menu_layer_create(GRect frame)",
      "brief": "Creates a new MenuLayer on the heap and initalizes it with the default values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_destroy",
      "kind": "function",
      "signature": "void menu_layer_destroy(MenuLayer * menu_layer)",
      "brief": "Destroys a MenuLayer previously created by menu_layer_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_get_layer",
      "kind": "function",
      "signature": "Layer * menu_layer_get_layer(const MenuLayer * menu_layer)",
      "brief": "Gets the \"root\" Layer of the MenuLayer, which is the parent for the sub- layers used for its implementation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_get_scroll_layer",
      "kind": "function",
      "signature": "ScrollLayer * menu_layer_get_scroll_layer(const MenuLayer * menu_layer)",
      "brief": "Gets the ScrollLayer of the MenuLayer, which is the layer responsible for the scrolling of the MenuLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_set_callbacks",
      "kind": "function",
      "signature": "void menu_layer_set_callbacks(MenuLayer * menu_layer, void * callback_context, MenuLayerCallbacks callbacks)",
      "brief": "Sets the callbacks for the MenuLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_set_click_config_onto_window",
      "kind": "function",
      "signature": "void menu_layer_set_click_config_onto_window(MenuLayer * menu_layer, struct Window * window)",
      "brief": "Convenience function to set the ClickConfigProvider callback on the given window to the MenuLayer internal click config provider. This internal click configuration provider, will set up the default UP & DOWN scrolling / menu item selection behavior. This function calls scroll_layer_set_click_config_onto_window to accomplish this.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuRowAlign",
      "kind": "enum",
      "signature": "enum MenuRowAlign",
      "brief": "Values to specify how a (selected) row should be aligned relative to the visible area of the MenuLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuRowAlignNone",
      "kind": "enumerator",
      "signature": "MenuRowAlignNone",
      "brief": "Don't align or update the scroll offset of the MenuLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuRowAlignCenter",
      "kind": "enumerator",
      "signature": "MenuRowAlignCenter",
      "brief": "Scroll the contents of the MenuLayer in such way that the selected row is centered relative to the visible area.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuRowAlignTop",
      "kind": "enumerator",
      "signature": "MenuRowAlignTop",
      "brief": "Scroll the contents of the MenuLayer in such way that the selected row is at the top of the visible area.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuRowAlignBottom",
      "kind": "enumerator",
      "signature": "MenuRowAlignBottom",
      "brief": "Scroll the contents of the MenuLayer in such way that the selected row is at the bottom of the visible area.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_set_selected_next",
      "kind": "function",
      "signature": "void menu_layer_set_selected_next(MenuLayer * menu_layer, bool up, MenuRowAlign scroll_align, bool animated)",
      "brief": "Selects the next or previous item, relative to the current selection.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_set_selected_index",
      "kind": "function",
      "signature": "void menu_layer_set_selected_index(MenuLayer * menu_layer, MenuIndex index, MenuRowAlign scroll_align, bool animated)",
      "brief": "Selects the item with given MenuIndex.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_get_selected_index",
      "kind": "function",
      "signature": "MenuIndex menu_layer_get_selected_index(const MenuLayer * menu_layer)",
      "brief": "Gets the MenuIndex of the currently selected menu item.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_reload_data",
      "kind": "function",
      "signature": "void menu_layer_reload_data(MenuLayer * menu_layer)",
      "brief": "Reloads the data of the menu. This causes the menu to re-request the menu item data, by calling the relevant callbacks. The current selection and scroll position will not be changed. See the note with menu_layer_set_selected_index() for the behavior if the old selection is no longer valid.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_cell_layer_is_highlighted",
      "kind": "function",
      "signature": "bool menu_cell_layer_is_highlighted(const Layer * cell_layer)",
      "brief": "Returns whether or not the given cell layer is highlighted. Using this for determining highlight behaviour is preferable to using menu_layer_get_selected_index. Row drawing callbacks may be invoked multiple times with a different highlight status on the same cell in order to handle partially highlighted cells during animation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_set_normal_colors",
      "kind": "function",
      "signature": "void menu_layer_set_normal_colors(MenuLayer * menu_layer, GColor background, GColor foreground)",
      "brief": "Set the default colors to be used for cells when it is in a normal state (not highlighted). The GContext's text and fill colors will be set appropriately prior to calling the .draw_row callback. If this function is not explicitly called on a MenuLayer, it will default to white background with black foreground.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_set_highlight_colors",
      "kind": "function",
      "signature": "void menu_layer_set_highlight_colors(MenuLayer * menu_layer, GColor background, GColor foreground)",
      "brief": "Set the default colors to be used for cells when it is in a highlighted state. The GContext's text and fill colors will be set appropriately prior to calling the .draw_row callback. If this function is not explicitly called on a MenuLayer, it will default to black background with white foreground.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_pad_bottom_enable",
      "kind": "function",
      "signature": "void menu_layer_pad_bottom_enable(MenuLayer * menu_layer, bool enable)",
      "brief": "This enables or disables padding at the bottom of the MenuLayer. Padding at the bottom of the layer keeps the bottom item from being at the very bottom of the screen. Padding is turned on by default for all MenuLayers. The color of the padded area will be the background color set using menu_layer_set_normal_colors(). To color the padding a different color, use MenuLayerDrawBackgroundCallback.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_get_center_focused",
      "kind": "function",
      "signature": "bool menu_layer_get_center_focused(MenuLayer * menu_layer)",
      "brief": "True, if the MenuLayer generally scrolls such that the selected row is in the center.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_set_center_focused",
      "kind": "function",
      "signature": "void menu_layer_set_center_focused(MenuLayer * menu_layer, bool center_focused)",
      "brief": "Controls if the MenuLayer generally scrolls such that the selected row is in the center. For platforms with a round display (PBL_ROUND) the default is true, otherwise false is the default.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "menu_layer_is_index_selected",
      "kind": "function",
      "signature": "bool menu_layer_is_index_selected(const MenuLayer * menu_layer, MenuIndex * index)",
      "brief": "Returns whether or not the specified cell index is currently selected.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MENU_CELL_ROUND_FOCUSED_SHORT_CELL_HEIGHT",
      "kind": "macro",
      "signature": "#define MENU_CELL_ROUND_FOCUSED_SHORT_CELL_HEIGHT ((const int16_t) 68)",
      "brief": "Constant value representing MenuLayer short cell height when this item is the selected item on a round display.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MENU_CELL_ROUND_UNFOCUSED_SHORT_CELL_HEIGHT",
      "kind": "macro",
      "signature": "#define MENU_CELL_ROUND_UNFOCUSED_SHORT_CELL_HEIGHT ((const int16_t) 24)",
      "brief": "Constant value representing MenuLayer short cell height when this item is not the selected item on a round display.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MENU_CELL_ROUND_FOCUSED_TALL_CELL_HEIGHT",
      "kind": "macro",
      "signature": "#define MENU_CELL_ROUND_FOCUSED_TALL_CELL_HEIGHT ((const int16_t) 84)",
      "brief": "Constant value representing MenuLayer tall cell height when this item is the selected item on a round display.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MENU_CELL_ROUND_UNFOCUSED_TALL_CELL_HEIGHT",
      "kind": "macro",
      "signature": "#define MENU_CELL_ROUND_UNFOCUSED_TALL_CELL_HEIGHT ((const int16_t) 32)",
      "brief": "Constant value representing MenuLayer tall cell height when this item is not the selected item on a round display.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuCellSpan",
      "kind": "struct",
      "signature": "struct MenuCellSpan",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuIndex",
      "kind": "struct",
      "signature": "struct MenuIndex",
      "brief": "Data structure to represent an menu item's position in a menu, by specifying the section index and the row index within that section.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "MenuLayerCallbacks",
      "kind": "struct",
      "signature": "struct MenuLayerCallbacks",
      "brief": "Data structure containing all the callbacks of a MenuLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / MenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/MenuLayer.md"
    },
    {
      "name": "RotBitmapLayer",
      "kind": "group",
      "signature": "RotBitmapLayer",
      "brief": "Layer that displays a rotated bitmap image.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / RotBitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer.md"
    },
    {
      "name": "RotBitmapLayer",
      "kind": "typedef",
      "signature": "typedef struct RotBitmapLayer RotBitmapLayer",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / RotBitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer.md"
    },
    {
      "name": "rot_bitmap_layer_create",
      "kind": "function",
      "signature": "RotBitmapLayer * rot_bitmap_layer_create(GBitmap * bitmap)",
      "brief": "Creates a new RotBitmapLayer on the heap and initializes it with the default values:",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / RotBitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer.md"
    },
    {
      "name": "rot_bitmap_layer_destroy",
      "kind": "function",
      "signature": "void rot_bitmap_layer_destroy(RotBitmapLayer * bitmap)",
      "brief": "Destroys a RotBitmapLayer and frees all associated memory.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / RotBitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer.md"
    },
    {
      "name": "rot_bitmap_layer_set_corner_clip_color",
      "kind": "function",
      "signature": "void rot_bitmap_layer_set_corner_clip_color(RotBitmapLayer * bitmap, GColor color)",
      "brief": "Defines what color to use in areas that are not covered by the source bitmap. By default this is GColorClear.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / RotBitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer.md"
    },
    {
      "name": "rot_bitmap_layer_set_angle",
      "kind": "function",
      "signature": "void rot_bitmap_layer_set_angle(RotBitmapLayer * bitmap, int32_t angle)",
      "brief": "Sets the rotation angle of this RotBitmapLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / RotBitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer.md"
    },
    {
      "name": "rot_bitmap_layer_increment_angle",
      "kind": "function",
      "signature": "void rot_bitmap_layer_increment_angle(RotBitmapLayer * bitmap, int32_t angle_change)",
      "brief": "Change the rotation angle of this RotBitmapLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / RotBitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer.md"
    },
    {
      "name": "rot_bitmap_set_src_ic",
      "kind": "function",
      "signature": "void rot_bitmap_set_src_ic(RotBitmapLayer * bitmap, GPoint ic)",
      "brief": "Defines the only point that will not be affected by the rotation in the source bitmap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / RotBitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer.md"
    },
    {
      "name": "rot_bitmap_set_compositing_mode",
      "kind": "function",
      "signature": "void rot_bitmap_set_compositing_mode(RotBitmapLayer * bitmap, GCompOp mode)",
      "brief": "Sets the compositing mode of how the bitmap image is composited onto what has been drawn beneath the RotBitmapLayer. By default this is GCompOpAssign, i.e. transparency disabled. The RotBitmapLayer is automatically marked dirty after this operation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / RotBitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer.md"
    },
    {
      "name": "rot_bitmap_layer_get_layer",
      "kind": "function",
      "signature": "Layer * rot_bitmap_layer_get_layer(const RotBitmapLayer * rot_bitmap_layer)",
      "brief": "Gets the \"root\" Layer of the RotBitmapLayer, which is the parent for the sub- layers used for its implementation.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Layers / RotBitmapLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/RotBitmapLayer.md"
    },
    {
      "name": "ScrollLayer",
      "kind": "group",
      "signature": "ScrollLayer",
      "brief": "Layer that scrolls its contents, animated.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "ScrollLayer",
      "kind": "typedef",
      "signature": "typedef struct ScrollLayer ScrollLayer",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "ScrollLayerCallback",
      "kind": "typedef",
      "signature": "typedef void(* ScrollLayerCallback)(struct ScrollLayer *scroll_layer, void *context)",
      "brief": "Function signature for the .content_offset_changed_handler callback.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_create",
      "kind": "function",
      "signature": "ScrollLayer * scroll_layer_create(GRect frame)",
      "brief": "Creates a new ScrollLayer on the heap and initalizes it with the default values:",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_destroy",
      "kind": "function",
      "signature": "void scroll_layer_destroy(ScrollLayer * scroll_layer)",
      "brief": "Destroys a ScrollLayer previously created by scroll_layer_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_get_layer",
      "kind": "function",
      "signature": "Layer * scroll_layer_get_layer(const ScrollLayer * scroll_layer)",
      "brief": "Gets the \"root\" Layer of the scroll layer, which is the parent for the sub- layers used for its implementation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_add_child",
      "kind": "function",
      "signature": "void scroll_layer_add_child(ScrollLayer * scroll_layer, Layer * child)",
      "brief": "Adds the child layer to the content sub-layer of the ScrollLayer. This will make the child layer part of the scrollable contents. The content sub-layer of the ScrollLayer will become the parent of the child layer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_set_click_config_onto_window",
      "kind": "function",
      "signature": "void scroll_layer_set_click_config_onto_window(ScrollLayer * scroll_layer, struct Window * window)",
      "brief": "Convenience function to set the ClickConfigProvider callback on the given window to scroll layer's internal click config provider. This internal click configuration provider, will set up the default UP & DOWN scrolling behavior. This function calls window_set_click_config_provider_with_context to accomplish this.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_set_callbacks",
      "kind": "function",
      "signature": "void scroll_layer_set_callbacks(ScrollLayer * scroll_layer, ScrollLayerCallbacks callbacks)",
      "brief": "Sets the callbacks that the scroll layer exposes. The context as set by scroll_layer_set_context() is passed into each of the callbacks. See ScrollLayerCallbacks for the different callbacks.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_set_context",
      "kind": "function",
      "signature": "void scroll_layer_set_context(ScrollLayer * scroll_layer, void * context)",
      "brief": "Sets a new callback context. This context is passed into the scroll layer's callbacks and also the ClickHandler for the SELECT button. If NULL or not set, the context defaults to a pointer to the ScrollLayer itself.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_set_content_offset",
      "kind": "function",
      "signature": "void scroll_layer_set_content_offset(ScrollLayer * scroll_layer, GPoint offset, bool animated)",
      "brief": "Scrolls to the given offset, optionally animated.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_get_content_offset",
      "kind": "function",
      "signature": "GPoint scroll_layer_get_content_offset(ScrollLayer * scroll_layer)",
      "brief": "Gets the point by which the contents are offset.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_set_content_size",
      "kind": "function",
      "signature": "void scroll_layer_set_content_size(ScrollLayer * scroll_layer, GSize size)",
      "brief": "Sets the size of the contents layer. This determines the area that is scrollable. At the moment, this needs to be set \"manually\" and is not derived from the geometry of the contents layers.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_get_content_size",
      "kind": "function",
      "signature": "GSize scroll_layer_get_content_size(const ScrollLayer * scroll_layer)",
      "brief": "Gets the size of the contents layer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_set_frame",
      "kind": "function",
      "signature": "void scroll_layer_set_frame(ScrollLayer * scroll_layer, GRect frame)",
      "brief": "Set the frame of the scroll layer and adjusts the internal layers' geometry accordingly. The scroll layer is marked dirty automatically.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_scroll_up_click_handler",
      "kind": "function",
      "signature": "void scroll_layer_scroll_up_click_handler(ClickRecognizerRef recognizer, void * context)",
      "brief": "The click handlers for the UP button that the scroll layer will install as part of scroll_layer_set_click_config_onto_window().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_scroll_down_click_handler",
      "kind": "function",
      "signature": "void scroll_layer_scroll_down_click_handler(ClickRecognizerRef recognizer, void * context)",
      "brief": "The click handlers for the DOWN button that the scroll layer will install as part of scroll_layer_set_click_config_onto_window().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_set_shadow_hidden",
      "kind": "function",
      "signature": "void scroll_layer_set_shadow_hidden(ScrollLayer * scroll_layer, bool hidden)",
      "brief": "Sets the visibility of the scroll layer shadow. If the visibility has changed, layer_mark_dirty() will be called automatically on the scroll layer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_get_shadow_hidden",
      "kind": "function",
      "signature": "bool scroll_layer_get_shadow_hidden(const ScrollLayer * scroll_layer)",
      "brief": "Gets the visibility of the scroll layer shadow.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_set_paging",
      "kind": "function",
      "signature": "void scroll_layer_set_paging(ScrollLayer * scroll_layer, bool paging_enabled)",
      "brief": "Enables or disables paging of the ScrollLayer (default: disabled). When enabled, every button press will change the scroll offset by the frame's height.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_get_paging",
      "kind": "function",
      "signature": "bool scroll_layer_get_paging(ScrollLayer * scroll_layer)",
      "brief": "Check whether or not the ScrollLayer uses paging when pressing buttons.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "ContentIndicator",
      "kind": "typedef",
      "signature": "typedef struct ContentIndicator ContentIndicator",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "scroll_layer_get_content_indicator",
      "kind": "function",
      "signature": "ContentIndicator * scroll_layer_get_content_indicator(ScrollLayer * scroll_layer)",
      "brief": "Gets the ContentIndicator for a ScrollLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "ContentIndicatorDirection",
      "kind": "enum",
      "signature": "enum ContentIndicatorDirection",
      "brief": "Value to describe directions for ContentIndicator.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "ContentIndicatorDirectionUp",
      "kind": "enumerator",
      "signature": "ContentIndicatorDirectionUp",
      "brief": "The up direction.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "ContentIndicatorDirectionDown",
      "kind": "enumerator",
      "signature": "ContentIndicatorDirectionDown",
      "brief": "The down direction.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "NumContentIndicatorDirections",
      "kind": "enumerator",
      "signature": "NumContentIndicatorDirections",
      "brief": "The number of supported directions.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "content_indicator_create",
      "kind": "function",
      "signature": "ContentIndicator * content_indicator_create(void)",
      "brief": "Creates a ContentIndicator on the heap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "content_indicator_destroy",
      "kind": "function",
      "signature": "void content_indicator_destroy(ContentIndicator * content_indicator)",
      "brief": "Destroys a ContentIndicator previously created using content_indicator_create().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "content_indicator_configure_direction",
      "kind": "function",
      "signature": "bool content_indicator_configure_direction(ContentIndicator * content_indicator, ContentIndicatorDirection direction, const ContentIndicatorConfig * config)",
      "brief": "Configures a ContentIndicator for the given direction.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "content_indicator_get_content_available",
      "kind": "function",
      "signature": "bool content_indicator_get_content_available(ContentIndicator * content_indicator, ContentIndicatorDirection direction)",
      "brief": "Retrieves the availability status of content in the given direction.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "content_indicator_set_content_available",
      "kind": "function",
      "signature": "void content_indicator_set_content_available(ContentIndicator * content_indicator, ContentIndicatorDirection direction, bool available)",
      "brief": "Sets the availability status of content in the given direction.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "ContentIndicatorConfig",
      "kind": "struct",
      "signature": "struct ContentIndicatorConfig",
      "brief": "Struct used to configure directions for ContentIndicator.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "ScrollLayerCallbacks",
      "kind": "struct",
      "signature": "struct ScrollLayerCallbacks",
      "brief": "All the callbacks that the ScrollLayer exposes for use by applications.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / ScrollLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/ScrollLayer.md"
    },
    {
      "name": "SimpleMenuLayer",
      "kind": "group",
      "signature": "SimpleMenuLayer",
      "brief": "Wrapper around MenuLayer, that uses static data to display a list menu.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "SimpleMenuLayer",
      "kind": "typedef",
      "signature": "typedef struct SimpleMenuLayer SimpleMenuLayer",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "SimpleMenuLayerSelectCallback",
      "kind": "typedef",
      "signature": "typedef void(* SimpleMenuLayerSelectCallback)(int index, void *context)",
      "brief": "Function signature for the callback to handle the event that a user hits the SELECT button.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "simple_menu_layer_create",
      "kind": "function",
      "signature": "SimpleMenuLayer * simple_menu_layer_create(GRect frame, Window * window, const SimpleMenuSection * sections, int32_t num_sections, void * callback_context)",
      "brief": "Creates a new SimpleMenuLayer on the heap and initializes it. It also sets the internal click configuration provider onto given window.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "simple_menu_layer_destroy",
      "kind": "function",
      "signature": "void simple_menu_layer_destroy(SimpleMenuLayer * menu_layer)",
      "brief": "Destroys a SimpleMenuLayer previously created by simple_menu_layer_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "simple_menu_layer_get_layer",
      "kind": "function",
      "signature": "Layer * simple_menu_layer_get_layer(const SimpleMenuLayer * simple_menu)",
      "brief": "Gets the \"root\" Layer of the simple menu layer, which is the parent for the sub-layers used for its implementation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "simple_menu_layer_get_selected_index",
      "kind": "function",
      "signature": "int simple_menu_layer_get_selected_index(const SimpleMenuLayer * simple_menu)",
      "brief": "Gets the row index of the currently selection menu item.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "simple_menu_layer_set_selected_index",
      "kind": "function",
      "signature": "void simple_menu_layer_set_selected_index(SimpleMenuLayer * simple_menu, int32_t index, bool animated)",
      "brief": "Selects the item in the first section at given row index.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "simple_menu_layer_get_menu_layer",
      "kind": "function",
      "signature": "MenuLayer * simple_menu_layer_get_menu_layer(SimpleMenuLayer * simple_menu)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "SimpleMenuItem",
      "kind": "struct",
      "signature": "struct SimpleMenuItem",
      "brief": "Data structure containing the information of a menu item.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "SimpleMenuSection",
      "kind": "struct",
      "signature": "struct SimpleMenuSection",
      "brief": "Data structure containing the information of a menu section.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / SimpleMenuLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/SimpleMenuLayer.md"
    },
    {
      "name": "StatusBarLayer",
      "kind": "group",
      "signature": "StatusBarLayer",
      "brief": "Layer that serves as a configurable status bar.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "StatusBarLayer",
      "kind": "typedef",
      "signature": "typedef struct StatusBarLayer StatusBarLayer",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "StatusBarLayerSeparatorMode",
      "kind": "enum",
      "signature": "enum StatusBarLayerSeparatorMode",
      "brief": "Values that are used to indicate the different status bar separator modes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "StatusBarLayerSeparatorModeNone",
      "kind": "enumerator",
      "signature": "StatusBarLayerSeparatorModeNone",
      "brief": "The default mode. No separator will be shown.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "StatusBarLayerSeparatorModeDotted",
      "kind": "enumerator",
      "signature": "StatusBarLayerSeparatorModeDotted",
      "brief": "A dotted separator at the bottom of the status bar.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "STATUS_BAR_LAYER_HEIGHT",
      "kind": "macro",
      "signature": "#define STATUS_BAR_LAYER_HEIGHT _STATUS_BAR_LAYER_HEIGHT(PBL_PLATFORM_TYPE_CURRENT)",
      "brief": "The fixed height of the status bar, including separator height.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "_STATUS_BAR_LAYER_HEIGHT",
      "kind": "macro",
      "signature": "#define _STATUS_BAR_LAYER_HEIGHT(plat) PBL_PLATFORM_SWITCH(plat, \\ /*aplite*/ 16, \\ /*basalt*/ 16, \\ /*chalk*/ 24, \\ /*diorite*/ 16, \\ /*emery*/ 20, \\ /*flint*/ 16, \\ /*gabbro*/ 20)",
      "brief": "The fixed height of the status bar, including separator height, for all platforms.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "status_bar_layer_create",
      "kind": "function",
      "signature": "StatusBarLayer * status_bar_layer_create(void)",
      "brief": "Creates a new StatusBarLayer on the heap and initializes it with the default values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "status_bar_layer_destroy",
      "kind": "function",
      "signature": "void status_bar_layer_destroy(StatusBarLayer * status_bar_layer)",
      "brief": "Destroys a StatusBarLayer previously created by status_bar_layer_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "status_bar_layer_get_layer",
      "kind": "function",
      "signature": "Layer * status_bar_layer_get_layer(StatusBarLayer * status_bar_layer)",
      "brief": "Gets the \"root\" Layer of the status bar, which is the parent for the sub- layers used for its implementation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "status_bar_layer_get_background_color",
      "kind": "function",
      "signature": "GColor status_bar_layer_get_background_color(const StatusBarLayer * status_bar_layer)",
      "brief": "Gets background color of StatusBarLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "status_bar_layer_get_foreground_color",
      "kind": "function",
      "signature": "GColor status_bar_layer_get_foreground_color(const StatusBarLayer * status_bar_layer)",
      "brief": "Gets foreground color of StatusBarLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "status_bar_layer_set_colors",
      "kind": "function",
      "signature": "void status_bar_layer_set_colors(StatusBarLayer * status_bar_layer, GColor background, GColor foreground)",
      "brief": "Sets the background and foreground colors of StatusBarLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "status_bar_layer_set_separator_mode",
      "kind": "function",
      "signature": "void status_bar_layer_set_separator_mode(StatusBarLayer * status_bar_layer, StatusBarLayerSeparatorMode mode)",
      "brief": "Sets the mode of the StatusBarLayer separator, to help divide it from content.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / StatusBarLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/StatusBarLayer.md"
    },
    {
      "name": "TextLayer",
      "kind": "group",
      "signature": "TextLayer",
      "brief": "Layer that displays and formats a text string.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "TextLayer",
      "kind": "typedef",
      "signature": "typedef struct TextLayer TextLayer",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_create",
      "kind": "function",
      "signature": "TextLayer * text_layer_create(GRect frame)",
      "brief": "Creates a new TextLayer on the heap and initializes it with the default values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_destroy",
      "kind": "function",
      "signature": "void text_layer_destroy(TextLayer * text_layer)",
      "brief": "Destroys a TextLayer previously created by text_layer_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_get_layer",
      "kind": "function",
      "signature": "Layer * text_layer_get_layer(TextLayer * text_layer)",
      "brief": "Gets the \"root\" Layer of the text layer, which is the parent for the sub- layers used for its implementation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_set_text",
      "kind": "function",
      "signature": "void text_layer_set_text(TextLayer * text_layer, const char * text)",
      "brief": "Sets the pointer to the string where the TextLayer is supposed to find the text at a later point in time, when it needs to draw itself.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_get_text",
      "kind": "function",
      "signature": "const char * text_layer_get_text(TextLayer * text_layer)",
      "brief": "Gets the pointer to the string that the TextLayer is using.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_set_background_color",
      "kind": "function",
      "signature": "void text_layer_set_background_color(TextLayer * text_layer, GColor color)",
      "brief": "Sets the background color of the bounding box that will be drawn behind the text.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_set_text_color",
      "kind": "function",
      "signature": "void text_layer_set_text_color(TextLayer * text_layer, GColor color)",
      "brief": "Sets the color of text that will be drawn.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_set_overflow_mode",
      "kind": "function",
      "signature": "void text_layer_set_overflow_mode(TextLayer * text_layer, GTextOverflowMode line_mode)",
      "brief": "Sets the line break mode of the TextLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_set_font",
      "kind": "function",
      "signature": "void text_layer_set_font(TextLayer * text_layer, GFont font)",
      "brief": "Sets the font of the TextLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_set_text_alignment",
      "kind": "function",
      "signature": "void text_layer_set_text_alignment(TextLayer * text_layer, GTextAlignment text_alignment)",
      "brief": "Sets the alignment of the TextLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_enable_screen_text_flow_and_paging",
      "kind": "function",
      "signature": "void text_layer_enable_screen_text_flow_and_paging(TextLayer * text_layer, uint8_t inset)",
      "brief": "Enables text flow following the boundaries of the screen and pagination that introduces extra line spacing at page breaks to avoid partially clipped lines for the TextLayer. If the TextLayer is part of a ScrollLayer the ScrollLayer's frame will be used to configure paging.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_restore_default_text_flow_and_paging",
      "kind": "function",
      "signature": "void text_layer_restore_default_text_flow_and_paging(TextLayer * text_layer)",
      "brief": "Restores text flow and paging for the TextLayer to the rectangular defaults.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_get_content_size",
      "kind": "function",
      "signature": "GSize text_layer_get_content_size(TextLayer * text_layer)",
      "brief": "Calculates the size occupied by the current text of the TextLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "text_layer_set_size",
      "kind": "function",
      "signature": "void text_layer_set_size(TextLayer * text_layer, const GSize max_size)",
      "brief": "Update the size of the text layer This is a convenience function to update the frame of the TextLayer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Layers / TextLayer",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Layers/TextLayer.md"
    },
    {
      "name": "Light",
      "kind": "group",
      "signature": "Light",
      "brief": "Controlling Pebble's backlight",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Light",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Light/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Light.md"
    },
    {
      "name": "light_enable_interaction",
      "kind": "function",
      "signature": "void light_enable_interaction(void)",
      "brief": "Trigger the backlight and schedule a timer to automatically disable the backlight after a short delay. This is the preferred method of interacting with the backlight.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Light",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Light/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Light.md"
    },
    {
      "name": "light_enable",
      "kind": "function",
      "signature": "void light_enable(bool enable)",
      "brief": "Turn the watch's backlight on or put it back into automatic control. Developers should take care when calling this function, keeping Pebble's backlight on for long periods of time will rapidly deplete the battery.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Light",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Light/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Light.md"
    },
    {
      "name": "light_is_on",
      "kind": "function",
      "signature": "bool light_is_on(void)",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Light",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Light/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Light.md"
    },
    {
      "name": "light_set_color",
      "kind": "function",
      "signature": "void light_set_color(GColor color)",
      "brief": "Tint the backlight LED to the given color. The color persists while the app is foregrounded and is automatically reset to the user's default (white) when the app exits or is preempted by a system notification. On platforms without a color backlight this is a no-op.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Light",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Light/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Light.md"
    },
    {
      "name": "light_set_color_rgb888",
      "kind": "function",
      "signature": "void light_set_color_rgb888(uint32_t rgb)",
      "brief": "Tint the backlight LED to a packed 24-bit RGB value (0x00RRGGBB). Same persistence semantics as light_set_color(): the override lasts while the app is foregrounded and is reset on app exit or system preempt. No-op on platforms without a color backlight.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Light",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Light/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Light.md"
    },
    {
      "name": "light_set_system_color",
      "kind": "function",
      "signature": "void light_set_system_color(void)",
      "brief": "Restore the backlight to the user's default color. Rarely needed — the system resets automatically on app exit. No-op on platforms without a color backlight.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Light",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Light/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Light.md"
    },
    {
      "name": "Preferences",
      "kind": "group",
      "signature": "Preferences",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Preferences",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Preferences/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Preferences.md"
    },
    {
      "name": "preferred_result_display_duration",
      "kind": "function",
      "signature": "uint32_t preferred_result_display_duration(void)",
      "brief": "Get the recommended amount of milliseconds a result window should be visible before it should automatically close.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Preferences",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Preferences/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Preferences.md"
    },
    {
      "name": "PreferredContentSize",
      "kind": "enum",
      "signature": "enum PreferredContentSize",
      "brief": "PreferredContentSize represents the display scale of all the app's UI components. The enum contains all sizes that all platforms as a whole are capable of displaying, but each individual platform may not be able to display all sizes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Preferences",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Preferences/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Preferences.md"
    },
    {
      "name": "PreferredContentSizeSmall",
      "kind": "enumerator",
      "signature": "PreferredContentSizeSmall",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Preferences",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Preferences/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Preferences.md"
    },
    {
      "name": "PreferredContentSizeMedium",
      "kind": "enumerator",
      "signature": "PreferredContentSizeMedium",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Preferences",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Preferences/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Preferences.md"
    },
    {
      "name": "PreferredContentSizeLarge",
      "kind": "enumerator",
      "signature": "PreferredContentSizeLarge",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Preferences",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Preferences/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Preferences.md"
    },
    {
      "name": "PreferredContentSizeExtraLarge",
      "kind": "enumerator",
      "signature": "PreferredContentSizeExtraLarge",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Preferences",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Preferences/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Preferences.md"
    },
    {
      "name": "NumPreferredContentSizes",
      "kind": "enumerator",
      "signature": "NumPreferredContentSizes",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Preferences",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Preferences/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Preferences.md"
    },
    {
      "name": "preferred_content_size",
      "kind": "function",
      "signature": "PreferredContentSize preferred_content_size(void)",
      "brief": "Returns the user's preferred content size representing the scale of all the app's UI components should use for display.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Preferences",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Preferences/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Preferences.md"
    },
    {
      "name": "quiet_time_is_active",
      "kind": "function",
      "signature": "bool quiet_time_is_active(void)",
      "brief": "Users can toggle Quiet Time manually or on schedule. Watchfaces and apps should respect this choice and avoid disturbing actions such as vibration if quiet time is active.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Preferences",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Preferences/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Preferences.md"
    },
    {
      "name": "Speaker",
      "kind": "group",
      "signature": "Speaker",
      "brief": "Controlling the speaker",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerWaveform",
      "kind": "enum",
      "signature": "enum SpeakerWaveform",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerWaveformSine",
      "kind": "enumerator",
      "signature": "SpeakerWaveformSine",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerWaveformSquare",
      "kind": "enumerator",
      "signature": "SpeakerWaveformSquare",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerWaveformTriangle",
      "kind": "enumerator",
      "signature": "SpeakerWaveformTriangle",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerWaveformSawtooth",
      "kind": "enumerator",
      "signature": "SpeakerWaveformSawtooth",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerWaveformCount",
      "kind": "enumerator",
      "signature": "SpeakerWaveformCount",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerPcmFormat",
      "kind": "enum",
      "signature": "enum SpeakerPcmFormat",
      "brief": "PCM audio format for speaker streaming. Bit layout: bit0 = sample rate (0=8kHz, 1=16kHz), bit1 = bit depth (0=8-bit, 1=16-bit). All formats are mono signed PCM (8-bit samples are signed [-128,127], not unsigned).",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerPcmFormat_8kHz_8bit",
      "kind": "enumerator",
      "signature": "SpeakerPcmFormat_8kHz_8bit",
      "brief": "8kHz 8-bit signed (1 byte/sample)",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerPcmFormat_16kHz_8bit",
      "kind": "enumerator",
      "signature": "SpeakerPcmFormat_16kHz_8bit",
      "brief": "16kHz 8-bit signed (1 byte/sample)",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerPcmFormat_8kHz_16bit",
      "kind": "enumerator",
      "signature": "SpeakerPcmFormat_8kHz_16bit",
      "brief": "8kHz 16-bit signed little-endian (2 bytes/sample)",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerPcmFormat_16kHz_16bit",
      "kind": "enumerator",
      "signature": "SpeakerPcmFormat_16kHz_16bit",
      "brief": "16kHz 16-bit signed little-endian (2 bytes/sample)",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerPcmFormatCount",
      "kind": "enumerator",
      "signature": "SpeakerPcmFormatCount",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerStatus",
      "kind": "enum",
      "signature": "enum SpeakerStatus",
      "brief": "Speaker status.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerStatusIdle",
      "kind": "enumerator",
      "signature": "SpeakerStatusIdle",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerStatusPlaying",
      "kind": "enumerator",
      "signature": "SpeakerStatusPlaying",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerStatusDraining",
      "kind": "enumerator",
      "signature": "SpeakerStatusDraining",
      "brief": "",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerFinishReason",
      "kind": "enum",
      "signature": "enum SpeakerFinishReason",
      "brief": "Reason reported when speaker playback ends.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerFinishReasonDone",
      "kind": "enumerator",
      "signature": "SpeakerFinishReasonDone",
      "brief": "Playback completed naturally.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerFinishReasonStopped",
      "kind": "enumerator",
      "signature": "SpeakerFinishReasonStopped",
      "brief": "Playback was stopped by the app.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerFinishReasonPreempted",
      "kind": "enumerator",
      "signature": "SpeakerFinishReasonPreempted",
      "brief": "Preempted by higher priority source.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerFinishReasonError",
      "kind": "enumerator",
      "signature": "SpeakerFinishReasonError",
      "brief": "An error occurred.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerFinishedCallback",
      "kind": "typedef",
      "signature": "typedef void(* SpeakerFinishedCallback)(SpeakerFinishReason reason, void *ctx)",
      "brief": "Callback invoked when playback finishes.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SPEAKER_MAX_NOTES",
      "kind": "macro",
      "signature": "#define SPEAKER_MAX_NOTES 256",
      "brief": "Maximum number of notes in a single speaker_play_notes() call.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SPEAKER_MAX_TRACKS",
      "kind": "macro",
      "signature": "#define SPEAKER_MAX_TRACKS 4",
      "brief": "Maximum number of parallel tracks in a single speaker_play_tracks() call.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SPEAKER_MAX_SAMPLE_BYTES_TOTAL",
      "kind": "macro",
      "signature": "#define SPEAKER_MAX_SAMPLE_BYTES_TOTAL (16 * 1024)",
      "brief": "Maximum total sample-data bytes across all tracks in one speaker_play_tracks() call.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_play_notes",
      "kind": "function",
      "signature": "bool speaker_play_notes(const SpeakerNote * notes, uint32_t num_notes, uint8_t volume)",
      "brief": "Play a sequence of notes on the speaker.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_play_tracks",
      "kind": "function",
      "signature": "bool speaker_play_tracks(const SpeakerTrack * tracks, uint32_t num_tracks, uint8_t volume)",
      "brief": "Play N monophonic tracks in parallel, mixed (polyphony).",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_play_tone",
      "kind": "function",
      "signature": "bool speaker_play_tone(uint16_t frequency_hz, uint32_t duration_ms, uint8_t volume, SpeakerWaveform waveform)",
      "brief": "Play a single tone on the speaker (convenience wrapper).",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_stream_open",
      "kind": "function",
      "signature": "bool speaker_stream_open(SpeakerPcmFormat format, uint8_t volume)",
      "brief": "Open a raw PCM stream for app-generated audio.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_stream_write",
      "kind": "function",
      "signature": "uint32_t speaker_stream_write(const void * data, uint32_t num_bytes)",
      "brief": "Write PCM data to the open stream.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_stream_close",
      "kind": "function",
      "signature": "void speaker_stream_close(void)",
      "brief": "Close the PCM stream. Buffered data will be played before stopping.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_stop",
      "kind": "function",
      "signature": "void speaker_stop(void)",
      "brief": "Stop any active speaker playback immediately.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_set_volume",
      "kind": "function",
      "signature": "void speaker_set_volume(uint8_t volume)",
      "brief": "Set the speaker volume.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_get_status",
      "kind": "function",
      "signature": "SpeakerStatus speaker_get_status(void)",
      "brief": "Get the current speaker status.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_set_finish_callback",
      "kind": "function",
      "signature": "void speaker_set_finish_callback(SpeakerFinishedCallback cb, void * ctx)",
      "brief": "Register a callback invoked when speaker playback ends. The callback runs on the app task.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "speaker_is_muted",
      "kind": "function",
      "signature": "bool speaker_is_muted(void)",
      "brief": "Check whether the speaker is currently muted system-wide. The watch can mute the speaker either always-on (Settings → Sounds & Haptics) or for the duration of Quiet Time (Settings → Quiet Time). Apps cannot override the mute, but they can use this to adapt UI or skip long sounds the user won't hear.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerNote",
      "kind": "struct",
      "signature": "struct SpeakerNote",
      "brief": "A single note in a sequence. midi_note: MIDI note number (0-127, 60=C4). 0 = rest (silence). waveform: SpeakerWaveform value. duration_ms: Note duration in ms (max 10000). velocity: Volume 0-127 (0 = use global volume).",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerSample",
      "kind": "struct",
      "signature": "struct SpeakerSample",
      "brief": "A raw PCM sample that can be pitch-shifted when played by a track. data: mono signed PCM in the given format. num_bytes: size of data in bytes. format: sample rate + bit depth (see SpeakerPcmFormat). base_midi_note: the MIDI note at which the sample plays unshifted (e.g. 60 = C4). Notes above/below this value are produced by resampling. loop: if true, the sample restarts from the beginning each time it runs out, and keeps playing until the owning note's duration elapses.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "SpeakerTrack",
      "kind": "struct",
      "signature": "struct SpeakerTrack",
      "brief": "A single monophonic voice. Multiple tracks are mixed together by speaker_play_tracks() to produce polyphony. notes: array of notes to play sequentially. num_notes: length of the notes array. sample: if non-NULL, notes are played by pitch-shifting this sample; note.waveform is ignored. If NULL, notes use their waveform field.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Speaker",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Speaker/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Speaker.md"
    },
    {
      "name": "UnobstructedArea",
      "kind": "group",
      "signature": "UnobstructedArea",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / UnobstructedArea",
      "url": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea.md"
    },
    {
      "name": "UnobstructedAreaWillChangeHandler",
      "kind": "typedef",
      "signature": "typedef void(* UnobstructedAreaWillChangeHandler)(GRect final_unobstructed_screen_area, void *context)",
      "brief": "Handler that will be called just before the unobstructed area will begin changing.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / UnobstructedArea",
      "url": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea.md"
    },
    {
      "name": "UnobstructedAreaChangeHandler",
      "kind": "typedef",
      "signature": "typedef void(* UnobstructedAreaChangeHandler)(AnimationProgress progress, void *context)",
      "brief": "Handler that will be called every time the unobstructed area changes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / UnobstructedArea",
      "url": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea.md"
    },
    {
      "name": "UnobstructedAreaDidChangeHandler",
      "kind": "typedef",
      "signature": "typedef void(* UnobstructedAreaDidChangeHandler)(void *context)",
      "brief": "Handler that will be called after the unobstructed area has finished changing.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / UnobstructedArea",
      "url": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea.md"
    },
    {
      "name": "unobstructed_area_service_subscribe",
      "kind": "function",
      "signature": "void unobstructed_area_service_subscribe(UnobstructedAreaHandlers handlers, void * context)",
      "brief": "Subscribe to be notified when the app's unobstructed area changes. When an unobstructed area begins changing, the will_change handler will be called, and every will_change call is always paired with a did_change call that occurs when it is done changing given that the will_change and did_change handlers are set. When subscribing while the unobstructed area is changing, the will_change handler will be called after subscription in the next event loop.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / UnobstructedArea",
      "url": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea.md"
    },
    {
      "name": "unobstructed_area_service_unsubscribe",
      "kind": "function",
      "signature": "void unobstructed_area_service_unsubscribe(void)",
      "brief": "Unsubscribe from notifications about changes to the app's unobstructed area.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / UnobstructedArea",
      "url": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea.md"
    },
    {
      "name": "UnobstructedAreaHandlers",
      "kind": "struct",
      "signature": "struct UnobstructedAreaHandlers",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / UnobstructedArea",
      "url": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/UnobstructedArea.md"
    },
    {
      "name": "Vibes",
      "kind": "group",
      "signature": "Vibes",
      "brief": "Controlling the vibration motor",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Vibes",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Vibes/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Vibes.md"
    },
    {
      "name": "vibes_cancel",
      "kind": "function",
      "signature": "void vibes_cancel(void)",
      "brief": "Cancel any in-flight vibe patterns; this is a no-op if there is no on-going vibe.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Vibes",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Vibes/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Vibes.md"
    },
    {
      "name": "vibes_short_pulse",
      "kind": "function",
      "signature": "void vibes_short_pulse(void)",
      "brief": "Makes the watch emit one short vibration.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Vibes",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Vibes/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Vibes.md"
    },
    {
      "name": "vibes_long_pulse",
      "kind": "function",
      "signature": "void vibes_long_pulse(void)",
      "brief": "Makes the watch emit one long vibration.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Vibes",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Vibes/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Vibes.md"
    },
    {
      "name": "vibes_double_pulse",
      "kind": "function",
      "signature": "void vibes_double_pulse(void)",
      "brief": "Makes the watch emit two brief vibrations.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Vibes",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Vibes/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Vibes.md"
    },
    {
      "name": "vibes_enqueue_custom_pattern",
      "kind": "function",
      "signature": "void vibes_enqueue_custom_pattern(VibePattern pattern)",
      "brief": "Makes the watch emit a 'custom' vibration pattern.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Vibes",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Vibes/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Vibes.md"
    },
    {
      "name": "VibePattern",
      "kind": "struct",
      "signature": "struct VibePattern",
      "brief": "Data structure describing a vibration pattern.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Vibes",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Vibes/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Vibes.md"
    },
    {
      "name": "Window",
      "kind": "group",
      "signature": "Window",
      "brief": "The basic building block of the user interface",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "Window",
      "kind": "typedef",
      "signature": "typedef struct Window Window",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "WindowHandler",
      "kind": "typedef",
      "signature": "typedef void(* WindowHandler)(struct Window *window)",
      "brief": "Function signature for a handler that deals with transition events of a window.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_create",
      "kind": "function",
      "signature": "Window * window_create(void)",
      "brief": "Creates a new Window on the heap and initalizes it with the default values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_destroy",
      "kind": "function",
      "signature": "void window_destroy(Window * window)",
      "brief": "Destroys a Window previously created by window_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_set_click_config_provider",
      "kind": "function",
      "signature": "void window_set_click_config_provider(Window * window, ClickConfigProvider click_config_provider)",
      "brief": "Sets the click configuration provider callback function on the window. This will automatically setup the input handlers of the window as well to use the click recognizer subsystem.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_set_click_config_provider_with_context",
      "kind": "function",
      "signature": "void window_set_click_config_provider_with_context(Window * window, ClickConfigProvider click_config_provider, void * context)",
      "brief": "Same as window_set_click_config_provider(), but will assign a custom context pointer (instead of the window pointer) that will be passed into the ClickHandler click event handlers.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_get_click_config_provider",
      "kind": "function",
      "signature": "ClickConfigProvider window_get_click_config_provider(const Window * window)",
      "brief": "Gets the current click configuration provider of the window.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_get_click_config_context",
      "kind": "function",
      "signature": "void * window_get_click_config_context(Window * window)",
      "brief": "Gets the current click configuration provider context of the window.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_set_window_handlers",
      "kind": "function",
      "signature": "void window_set_window_handlers(Window * window, WindowHandlers handlers)",
      "brief": "Sets the window handlers of the window. These handlers get called e.g. when the user enters or leaves the window.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_get_root_layer",
      "kind": "function",
      "signature": "struct Layer * window_get_root_layer(const Window * window)",
      "brief": "Gets the root Layer of the window. The root layer is the layer at the bottom of the layer hierarchy for this window. It is the window's \"canvas\" if you will. By default, the root layer only draws a solid fill with the window's background color.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_set_background_color",
      "kind": "function",
      "signature": "void window_set_background_color(Window * window, GColor background_color)",
      "brief": "Sets the background color of the window, which is drawn automatically by the root layer of the window.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_is_loaded",
      "kind": "function",
      "signature": "bool window_is_loaded(Window * window)",
      "brief": "Gets whether the window has been loaded. If a window is loaded, its .load handler has been called (and the .unload handler has not been called since).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_set_user_data",
      "kind": "function",
      "signature": "void window_set_user_data(Window * window, void * data)",
      "brief": "Sets a pointer to developer-supplied data that the window uses, to provide a means to access the data at later times in one of the window event handlers.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_get_user_data",
      "kind": "function",
      "signature": "void * window_get_user_data(const Window * window)",
      "brief": "Gets the pointer to developer-supplied data that was previously set using window_set_user_data().",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_single_click_subscribe",
      "kind": "function",
      "signature": "void window_single_click_subscribe(ButtonId button_id, ClickHandler handler)",
      "brief": "Subscribe to single click events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_single_repeating_click_subscribe",
      "kind": "function",
      "signature": "void window_single_repeating_click_subscribe(ButtonId button_id, uint16_t repeat_interval_ms, ClickHandler handler)",
      "brief": "Subscribe to single click event, with a repeat interval. A single click is detected every time \"repeat_interval_ms\" has been reached.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_multi_click_subscribe",
      "kind": "function",
      "signature": "void window_multi_click_subscribe(ButtonId button_id, uint8_t min_clicks, uint8_t max_clicks, uint16_t timeout, bool last_click_only, ClickHandler handler)",
      "brief": "Subscribe to multi click events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_long_click_subscribe",
      "kind": "function",
      "signature": "void window_long_click_subscribe(ButtonId button_id, uint16_t delay_ms, ClickHandler down_handler, ClickHandler up_handler)",
      "brief": "Subscribe to long click events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_raw_click_subscribe",
      "kind": "function",
      "signature": "void window_raw_click_subscribe(ButtonId button_id, ClickHandler down_handler, ClickHandler up_handler, void * context)",
      "brief": "Subscribe to raw click events.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_set_click_context",
      "kind": "function",
      "signature": "void window_set_click_context(ButtonId button_id, void * context)",
      "brief": "Set the context that will be passed to handlers for the given button's events. By default the context passed to handlers is equal to the ClickConfigProvider context (defaults to the window).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_attach_recognizer",
      "kind": "function",
      "signature": "void window_attach_recognizer(Window * window, Recognizer * recognizer)",
      "brief": "Attach a recognizer to the window.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_detach_recognizer",
      "kind": "function",
      "signature": "void window_detach_recognizer(Window * window, Recognizer * recognizer)",
      "brief": "Detach a recognizer from the window.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "window_set_touch_bridge_disabled",
      "kind": "function",
      "signature": "void window_set_touch_bridge_disabled(Window * window, bool disabled)",
      "brief": "Disable the system touch-navigation bridge for a window. With the bridge disabled the system recognizer set fails on Touchdown for this window, handing every touch to the recognizers the app attached, so an app can take over touch input instead of the built-in button emulation.",
      "platforms": [
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "WindowHandlers",
      "kind": "struct",
      "signature": "struct WindowHandlers",
      "brief": "WindowHandlers These handlers are called by the Window Stack as windows get pushed on / popped. All these handlers use WindowHandler as their function signature.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window.md"
    },
    {
      "name": "ActionMenu",
      "kind": "group",
      "signature": "ActionMenu",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuItem",
      "kind": "typedef",
      "signature": "typedef struct ActionMenuItem ActionMenuItem",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuLevel",
      "kind": "typedef",
      "signature": "typedef struct ActionMenuLevel ActionMenuLevel",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuAlign",
      "kind": "enum",
      "signature": "enum ActionMenuAlign",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuAlignTop",
      "kind": "enumerator",
      "signature": "ActionMenuAlignTop",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuAlignCenter",
      "kind": "enumerator",
      "signature": "ActionMenuAlignCenter",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenu",
      "kind": "typedef",
      "signature": "typedef struct ActionMenu ActionMenu",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuDidCloseCb",
      "kind": "typedef",
      "signature": "typedef void(* ActionMenuDidCloseCb)(ActionMenu *menu, const ActionMenuItem *performed_action, void *context)",
      "brief": "Callback executed after the ActionMenu has closed, so memory may be freed.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuLevelDisplayMode",
      "kind": "enum",
      "signature": "enum ActionMenuLevelDisplayMode",
      "brief": "enum value that controls whether menu items are displayed in a grid (similarly to the emoji replies) or in a single column (reminiscent of MenuLayer)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuLevelDisplayModeWide",
      "kind": "enumerator",
      "signature": "ActionMenuLevelDisplayModeWide",
      "brief": "Each item gets its own row.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuLevelDisplayModeThin",
      "kind": "enumerator",
      "signature": "ActionMenuLevelDisplayModeThin",
      "brief": "Grid view: multiple items per row.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuPerformActionCb",
      "kind": "typedef",
      "signature": "typedef void(* ActionMenuPerformActionCb)(ActionMenu *action_menu, const ActionMenuItem *action, void *context)",
      "brief": "Callback executed when a given action is selected.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuEachItemCb",
      "kind": "typedef",
      "signature": "typedef void(* ActionMenuEachItemCb)(const ActionMenuItem *item, void *context)",
      "brief": "Callback invoked for each item in an action menu hierarchy.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_item_get_label",
      "kind": "function",
      "signature": "char * action_menu_item_get_label(const ActionMenuItem * item)",
      "brief": "Getter for the label of a given ActionMenuItem.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_item_get_action_data",
      "kind": "function",
      "signature": "void * action_menu_item_get_action_data(const ActionMenuItem * item)",
      "brief": "Getter for the action_data pointer of a given ActionMenuItem.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_level_create",
      "kind": "function",
      "signature": "ActionMenuLevel * action_menu_level_create(uint16_t max_items)",
      "brief": "Create a new action menu level with storage allocated for a given number of items.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_level_set_display_mode",
      "kind": "function",
      "signature": "void action_menu_level_set_display_mode(ActionMenuLevel * level, ActionMenuLevelDisplayMode display_mode)",
      "brief": "Set the action menu display mode.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_level_add_action",
      "kind": "function",
      "signature": "ActionMenuItem * action_menu_level_add_action(ActionMenuLevel * level, const char * label, ActionMenuPerformActionCb cb, void * action_data)",
      "brief": "Add an action to an ActionLevel.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_level_add_child",
      "kind": "function",
      "signature": "ActionMenuItem * action_menu_level_add_child(ActionMenuLevel * level, ActionMenuLevel * child, const char * label)",
      "brief": "Add a child to this ActionMenuLevel.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_hierarchy_destroy",
      "kind": "function",
      "signature": "void action_menu_hierarchy_destroy(const ActionMenuLevel * root, ActionMenuEachItemCb each_cb, void * context)",
      "brief": "Destroy a hierarchy of ActionMenuLevels.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_get_context",
      "kind": "function",
      "signature": "void * action_menu_get_context(ActionMenu * action_menu)",
      "brief": "Get the context pointer this ActionMenu was created with.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_get_root_level",
      "kind": "function",
      "signature": "ActionMenuLevel * action_menu_get_root_level(ActionMenu * action_menu)",
      "brief": "Get the root level of an ActionMenu.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_open",
      "kind": "function",
      "signature": "ActionMenu * action_menu_open(ActionMenuConfig * config)",
      "brief": "Open a new ActionMenu. The ActionMenu acts much like a window. It fills the whole screen and handles clicks.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_freeze",
      "kind": "function",
      "signature": "void action_menu_freeze(ActionMenu * action_menu)",
      "brief": "Freeze the ActionMenu. The ActionMenu will no longer respond to user input.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_unfreeze",
      "kind": "function",
      "signature": "void action_menu_unfreeze(ActionMenu * action_menu)",
      "brief": "Unfreeze the ActionMenu previously frozen with action_menu_freeze.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_set_result_window",
      "kind": "function",
      "signature": "void action_menu_set_result_window(ActionMenu * action_menu, Window * result_window)",
      "brief": "Set the result window for an ActionMenu. The result window will be shown when the ActionMenu closes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "action_menu_close",
      "kind": "function",
      "signature": "void action_menu_close(ActionMenu * action_menu, bool animated)",
      "brief": "Close the ActionMenu, whether it is frozen or not.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "ActionMenuConfig",
      "kind": "struct",
      "signature": "struct ActionMenuConfig",
      "brief": "Configuration struct for the ActionMenu.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / ActionMenu",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/ActionMenu.md"
    },
    {
      "name": "NumberWindow",
      "kind": "group",
      "signature": "NumberWindow",
      "brief": "A ready-made Window prompting the user to pick a number",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "NumberWindow",
      "kind": "typedef",
      "signature": "typedef struct NumberWindow NumberWindow",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "NumberWindowCallback",
      "kind": "typedef",
      "signature": "typedef void(* NumberWindowCallback)(struct NumberWindow *number_window, void *context)",
      "brief": "Function signature for NumberWindow callbacks.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "number_window_create",
      "kind": "function",
      "signature": "NumberWindow * number_window_create(const char * label, NumberWindowCallbacks callbacks, void * callback_context)",
      "brief": "Creates a new NumberWindow on the heap and initalizes it with the default values.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "number_window_destroy",
      "kind": "function",
      "signature": "void number_window_destroy(NumberWindow * number_window)",
      "brief": "Destroys a NumberWindow previously created by number_window_create.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "number_window_set_label",
      "kind": "function",
      "signature": "void number_window_set_label(NumberWindow * numberwindow, const char * label)",
      "brief": "Sets the text of the title or prompt label.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "number_window_set_max",
      "kind": "function",
      "signature": "void number_window_set_max(NumberWindow * numberwindow, int32_t max)",
      "brief": "Sets the maximum value this field can hold.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "number_window_set_min",
      "kind": "function",
      "signature": "void number_window_set_min(NumberWindow * numberwindow, int32_t min)",
      "brief": "Sets the minimum value this field can hold.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "number_window_set_value",
      "kind": "function",
      "signature": "void number_window_set_value(NumberWindow * numberwindow, int32_t value)",
      "brief": "Sets the current value of the field.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "number_window_set_step_size",
      "kind": "function",
      "signature": "void number_window_set_step_size(NumberWindow * numberwindow, int32_t step)",
      "brief": "Sets the amount by which to increment/decrement by on a button click.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "number_window_get_value",
      "kind": "function",
      "signature": "int32_t number_window_get_value(const NumberWindow * numberwindow)",
      "brief": "Gets the current value.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "number_window_get_window",
      "kind": "function",
      "signature": "Window * number_window_get_window(NumberWindow * numberwindow)",
      "brief": "Gets the \"root\" Window of the number window.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "NumberWindowCallbacks",
      "kind": "struct",
      "signature": "struct NumberWindowCallbacks",
      "brief": "Data structure containing all the callbacks for a NumberWindow.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window / NumberWindow",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window/NumberWindow.md"
    },
    {
      "name": "Window Stack",
      "kind": "group",
      "signature": "Window Stack",
      "brief": "The multiple window manager",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window Stack",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack.md"
    },
    {
      "name": "window_stack_push",
      "kind": "function",
      "signature": "void window_stack_push(Window * window, bool animated)",
      "brief": "Pushes the given window on the window navigation stack, on top of the current topmost window of the app.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window Stack",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack.md"
    },
    {
      "name": "window_stack_pop",
      "kind": "function",
      "signature": "Window * window_stack_pop(bool animated)",
      "brief": "Pops the topmost window on the navigation stack.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window Stack",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack.md"
    },
    {
      "name": "window_stack_pop_all",
      "kind": "function",
      "signature": "void window_stack_pop_all(const bool animated)",
      "brief": "Pops all windows. See window_stack_remove() for a description of the animated parameter and notes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window Stack",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack.md"
    },
    {
      "name": "window_stack_remove",
      "kind": "function",
      "signature": "bool window_stack_remove(Window * window, bool animated)",
      "brief": "Removes a given window from the window stack that belongs to the app task.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window Stack",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack.md"
    },
    {
      "name": "window_stack_get_top_window",
      "kind": "function",
      "signature": "Window * window_stack_get_top_window(void)",
      "brief": "Gets the topmost window on the stack that belongs to the app.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window Stack",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack.md"
    },
    {
      "name": "window_stack_contains_window",
      "kind": "function",
      "signature": "bool window_stack_contains_window(Window * window)",
      "brief": "Checks if the window is on the window stack.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "User Interface / Window Stack",
      "url": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack/",
      "url_md": "https://developer.repebble.com/docs/c/User_Interface/Window_Stack.md"
    },
    {
      "name": "Worker",
      "kind": "group",
      "signature": "Worker",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Worker",
      "url": "https://developer.repebble.com/docs/c/Worker/",
      "url_md": "https://developer.repebble.com/docs/c/Worker.md"
    },
    {
      "name": "worker_event_loop",
      "kind": "function",
      "signature": "void worker_event_loop(void)",
      "brief": "The event loop for workers, to be used in worker's main(). Will block until the worker is ready to exit.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Worker",
      "url": "https://developer.repebble.com/docs/c/Worker/",
      "url_md": "https://developer.repebble.com/docs/c/Worker.md"
    },
    {
      "name": "worker_launch_app",
      "kind": "function",
      "signature": "void worker_launch_app(void)",
      "brief": "Launch the foreground app for this worker.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Worker",
      "url": "https://developer.repebble.com/docs/c/Worker/",
      "url_md": "https://developer.repebble.com/docs/c/Worker.md"
    },
    {
      "name": "Standard C",
      "kind": "group",
      "signature": "Standard C",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C",
      "url": "https://developer.repebble.com/docs/c/Standard_C/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C.md"
    },
    {
      "name": "uint16_t",
      "kind": "typedef",
      "signature": "typedef int uint16_t",
      "brief": "16-bit unsigned integer number",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C",
      "url": "https://developer.repebble.com/docs/c/Standard_C/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C.md"
    },
    {
      "name": "uint32_t",
      "kind": "typedef",
      "signature": "typedef int uint32_t",
      "brief": "32-bit unsigned integer number",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C",
      "url": "https://developer.repebble.com/docs/c/Standard_C/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C.md"
    },
    {
      "name": "Format",
      "kind": "group",
      "signature": "Format",
      "brief": "Standard formatting.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Format",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Format/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Format.md"
    },
    {
      "name": "snprintf",
      "kind": "function",
      "signature": "int snprintf(char * str, size_t n, const * fmt, ...)",
      "brief": "Format a string into a buffer.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Format",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Format/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Format.md"
    },
    {
      "name": "Locale",
      "kind": "group",
      "signature": "Locale",
      "brief": "Standard locale functions.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Locale",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Locale/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Locale.md"
    },
    {
      "name": "setlocale",
      "kind": "function",
      "signature": "char * setlocale(int category, char * locale)",
      "brief": "Set the app's locale for a category of routines.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Locale",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Locale/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Locale.md"
    },
    {
      "name": "Math",
      "kind": "group",
      "signature": "Math",
      "brief": "Standard math functions.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Math",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Math.md"
    },
    {
      "name": "RAND_MAX",
      "kind": "macro",
      "signature": "#define RAND_MAX",
      "brief": "The maximum integer value rand() may return.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Math",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Math.md"
    },
    {
      "name": "rand",
      "kind": "function",
      "signature": "int rand()",
      "brief": "Generate a pseudo-random integer between 0 and RAND_MAX inclusive.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Math",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Math.md"
    },
    {
      "name": "srand",
      "kind": "function",
      "signature": "void srand(unsigned int seed)",
      "brief": "Seed the pseudo-random number generator.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Math",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Math/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Math.md"
    },
    {
      "name": "Memory",
      "kind": "group",
      "signature": "Memory",
      "brief": "Standard memory functions.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Memory",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Memory/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Memory.md"
    },
    {
      "name": "malloc",
      "kind": "function",
      "signature": "void * malloc(size_t size)",
      "brief": "Allocates a requested amount of memory.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Memory",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Memory/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Memory.md"
    },
    {
      "name": "calloc",
      "kind": "function",
      "signature": "void * calloc(size_t count, size_t size)",
      "brief": "Allocates space for count objects that are size bytes and fills the memory with bytes of value 0.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Memory",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Memory/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Memory.md"
    },
    {
      "name": "realloc",
      "kind": "function",
      "signature": "void * realloc(void * ptr, size_t size)",
      "brief": "Takes the memory allocated at ptr and changes the length of its allocation to the size specified.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Memory",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Memory/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Memory.md"
    },
    {
      "name": "free",
      "kind": "function",
      "signature": "void free(void * ptr)",
      "brief": "Frees previously allocated memory.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Memory",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Memory/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Memory.md"
    },
    {
      "name": "size_t",
      "kind": "typedef",
      "signature": "typedef unsigned int size_t",
      "brief": "size as an unsigned integer",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Memory",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Memory/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Memory.md"
    },
    {
      "name": "memcmp",
      "kind": "function",
      "signature": "int memcmp(const void * ptr1, const void * ptr2, size_t n)",
      "brief": "Compares the first n bytes of memory regions ptr1 and ptr2.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Memory",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Memory/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Memory.md"
    },
    {
      "name": "memcpy",
      "kind": "function",
      "signature": "void * memcpy(void * dest, const void * src, size_t n)",
      "brief": "Copies n bytes from src to dest.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Memory",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Memory/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Memory.md"
    },
    {
      "name": "memmove",
      "kind": "function",
      "signature": "void * memmove(void * dest, const void * src, size_t n)",
      "brief": "Copies n bytes from src to dest by first copying to a temporary area first, allowing dest and src to potentially overlap.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Memory",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Memory/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Memory.md"
    },
    {
      "name": "memset",
      "kind": "function",
      "signature": "void * memset(void * dest, int c, size_t n)",
      "brief": "Sets n bytes to c starting at dest.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Memory",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Memory/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Memory.md"
    },
    {
      "name": "String",
      "kind": "group",
      "signature": "String",
      "brief": "Standard C-string manipulation.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / String",
      "url": "https://developer.repebble.com/docs/c/Standard_C/String/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/String.md"
    },
    {
      "name": "strcmp",
      "kind": "function",
      "signature": "int strcmp(const char * str1, const char * str2)",
      "brief": "Compares the null terminated strings str1 and str2 to each other.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / String",
      "url": "https://developer.repebble.com/docs/c/Standard_C/String/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/String.md"
    },
    {
      "name": "strncmp",
      "kind": "function",
      "signature": "int strncmp(const char * str1, const char * str2, size_t n)",
      "brief": "Compares the null terminated strings str1 and str2 to each other for up to n bytes.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / String",
      "url": "https://developer.repebble.com/docs/c/Standard_C/String/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/String.md"
    },
    {
      "name": "strcpy",
      "kind": "function",
      "signature": "char * strcpy(char * dest, const char * src)",
      "brief": "Copies the string in src into dest and null terminates dest.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / String",
      "url": "https://developer.repebble.com/docs/c/Standard_C/String/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/String.md"
    },
    {
      "name": "strncpy",
      "kind": "function",
      "signature": "char * strncpy(char * dest, const char * src, size_t n)",
      "brief": "Copies up to n bytes from the string in src into dest and null terminates dest.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / String",
      "url": "https://developer.repebble.com/docs/c/Standard_C/String/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/String.md"
    },
    {
      "name": "strcat",
      "kind": "function",
      "signature": "char * strcat(char * dest, const char * src)",
      "brief": "Concatenates the string in src to the end of the string pointed by dest and null terminates dest.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / String",
      "url": "https://developer.repebble.com/docs/c/Standard_C/String/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/String.md"
    },
    {
      "name": "strncat",
      "kind": "function",
      "signature": "char * strncat(char * dest, const char * src, size_t n)",
      "brief": "Concatenates up to n bytes from the string in src to the end of the string pointed by dest and null terminates dest.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / String",
      "url": "https://developer.repebble.com/docs/c/Standard_C/String/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/String.md"
    },
    {
      "name": "strlen",
      "kind": "function",
      "signature": "size_t strlen(const char * str)",
      "brief": "Calculates the length of a null terminated string.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / String",
      "url": "https://developer.repebble.com/docs/c/Standard_C/String/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/String.md"
    },
    {
      "name": "Time",
      "kind": "group",
      "signature": "Time",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "time_t",
      "kind": "typedef",
      "signature": "typedef unsigned int time_t",
      "brief": "time in seconds since the epoch, January 1st 1970",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "TZ_LEN",
      "kind": "macro",
      "signature": "#define TZ_LEN 6",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "SECONDS_PER_MINUTE",
      "kind": "macro",
      "signature": "#define SECONDS_PER_MINUTE (60)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "MINUTES_PER_HOUR",
      "kind": "macro",
      "signature": "#define MINUTES_PER_HOUR (60)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "SECONDS_PER_HOUR",
      "kind": "macro",
      "signature": "#define SECONDS_PER_HOUR (SECONDS_PER_MINUTE * MINUTES_PER_HOUR)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "HOURS_PER_DAY",
      "kind": "macro",
      "signature": "#define HOURS_PER_DAY (24)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "MINUTES_PER_DAY",
      "kind": "macro",
      "signature": "#define MINUTES_PER_DAY (HOURS_PER_DAY * MINUTES_PER_HOUR)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "SECONDS_PER_DAY",
      "kind": "macro",
      "signature": "#define SECONDS_PER_DAY (MINUTES_PER_DAY * SECONDS_PER_MINUTE)",
      "brief": "",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "strftime",
      "kind": "function",
      "signature": "size_t strftime(char * s, size_t maxsize, const char * format, const struct tm * tm_p)",
      "brief": "Format the time value at tm according to fmt and place the result in a buffer s of size max.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "localtime",
      "kind": "function",
      "signature": "struct tm * localtime(const time_t * timep)",
      "brief": "convert the time value pointed at by clock to a struct tm which contains the time adjusted for the local timezone",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "gmtime",
      "kind": "function",
      "signature": "struct tm * gmtime(const time_t * timep)",
      "brief": "convert the time value pointed at by clock to a struct tm which contains the time expressed in Coordinated Universal Time (UTC)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "mktime",
      "kind": "function",
      "signature": "time_t mktime(struct tm * tb)",
      "brief": "convert the broken-down time structure to a timestamp expressed in Coordinated Universal Time (UTC)",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "time",
      "kind": "function",
      "signature": "time_t time(time_t * tloc)",
      "brief": "Obtain the number of seconds since epoch. Note that the epoch is not adjusted for Timezones and Daylight Savings.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "difftime",
      "kind": "function",
      "signature": "double difftime(time_t end, time_t beginning)",
      "brief": "Obtain the number of seconds elapsed between beginning and end represented as a double.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "time_ms",
      "kind": "function",
      "signature": "uint16_t time_ms(time_t * tloc, uint16_t * out_ms)",
      "brief": "Obtain the number of seconds and milliseconds part since the epoch. This is a non-standard C function provided for convenience.",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "time_start_of_today",
      "kind": "function",
      "signature": "time_t time_start_of_today(void)",
      "brief": "Return the UTC time that corresponds to the start of today (midnight).",
      "platforms": [
        "aplite",
        "basalt",
        "emery"
      ],
      "group": "Standard C / Time",
      "url": "https://developer.repebble.com/docs/c/Standard_C/Time/",
      "url_md": "https://developer.repebble.com/docs/c/Standard_C/Time.md"
    },
    {
      "name": "Pebble",
      "kind": "namespace",
      "signature": "Pebble",
      "brief": "The Pebble namespace is where all of the Pebble specific methods and properties exist.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md"
    },
    {
      "name": "addEventListener",
      "kind": "function",
      "signature": "Pebble.addEventListener(type, callback)",
      "brief": "Adds a listener for PebbleKit JS events, such as when an AppMessage is received or the configuration view is opened or closed.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#addEventListener",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#addEventListener"
    },
    {
      "name": "removeEventListener",
      "kind": "function",
      "signature": "Pebble.removeEventListener(type, callback)",
      "brief": "Remove an existing event listener previously registered with Pebble.addEventListener().",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#removeEventListener",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#removeEventListener"
    },
    {
      "name": "showSimpleNotificationOnPebble",
      "kind": "function",
      "signature": "Pebble.showSimpleNotificationOnPebble(title, body)",
      "brief": "Show a simple modal notification on the connected watch.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#showSimpleNotificationOnPebble",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#showSimpleNotificationOnPebble"
    },
    {
      "name": "sendAppMessage",
      "kind": "function",
      "signature": "Pebble.sendAppMessage(data, onSuccess, onFailure)",
      "brief": "Send an AppMessage to the app running on the watch.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#sendAppMessage",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#sendAppMessage"
    },
    {
      "name": "getTimelineToken",
      "kind": "function",
      "signature": "Pebble.getTimelineToken(onSuccess, onFailure)",
      "brief": "The Pebble mobile app returns a token only for apps installed from the appstore.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#getTimelineToken",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#getTimelineToken"
    },
    {
      "name": "timelineSubscribe",
      "kind": "function",
      "signature": "Pebble.timelineSubscribe(topic, onSuccess, onFailure)",
      "brief": "Not supported in the Pebble mobile app.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#timelineSubscribe",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#timelineSubscribe"
    },
    {
      "name": "timelineUnsubscribe",
      "kind": "function",
      "signature": "Pebble.timelineUnsubscribe(topic, onSuccess, onFailure)",
      "brief": "Not supported in the Pebble mobile app.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#timelineUnsubscribe",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#timelineUnsubscribe"
    },
    {
      "name": "timelineSubscriptions",
      "kind": "function",
      "signature": "Pebble.timelineSubscriptions(onSuccess, onFailure)",
      "brief": "Not supported in the Pebble mobile app.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#timelineSubscriptions",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#timelineSubscriptions"
    },
    {
      "name": "insertTimelinePin",
      "kind": "function",
      "signature": "Pebble.insertTimelinePin(pin)",
      "brief": "Insert a pin into the user's timeline.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#insertTimelinePin",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#insertTimelinePin"
    },
    {
      "name": "deleteTimelinePin",
      "kind": "function",
      "signature": "Pebble.deleteTimelinePin(id)",
      "brief": "Remove a pin previously added with insertTimelinePin from the user's timeline.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#deleteTimelinePin",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#deleteTimelinePin"
    },
    {
      "name": "getActiveWatchInfo",
      "kind": "function",
      "signature": "Pebble.getActiveWatchInfo()",
      "brief": "Obtain an object containing information on the currently connected Pebble smartwatch.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#getActiveWatchInfo",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#getActiveWatchInfo"
    },
    {
      "name": "getAccountToken",
      "kind": "function",
      "signature": "Pebble.getAccountToken()",
      "brief": "Returns a unique account token that is associated with the Pebble account of the current user.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#getAccountToken",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#getAccountToken"
    },
    {
      "name": "getWatchToken",
      "kind": "function",
      "signature": "Pebble.getWatchToken()",
      "brief": "Returns a a unique token that can be used to identify a Pebble device.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#getWatchToken",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#getWatchToken"
    },
    {
      "name": "appGlanceReload",
      "kind": "function",
      "signature": "Pebble.appGlanceReload(appGlanceSlices, onSuccess, onFailure)",
      "brief": "Not supported in the Pebble mobile app.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#appGlanceReload",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#appGlanceReload"
    },
    {
      "name": "TimelineTopicsCallback",
      "kind": "typedef",
      "signature": "TimelineTopicsCallback: Function",
      "brief": "Called when the user's list of subscriptions is available for processing by the developer.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#TimelineTopicsCallback",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#TimelineTopicsCallback"
    },
    {
      "name": "openURL",
      "kind": "function",
      "signature": "Pebble.openURL(url)",
      "brief": "When an app is marked as configurable, the PebbleKit JS component must implement Pebble.openURL() in the showConfiguration event handler.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#openURL",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#openURL"
    },
    {
      "name": "enumeratePlugins",
      "kind": "function",
      "signature": "Pebble.enumeratePlugins()",
      "brief": "Returns the installed plugins.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#enumeratePlugins",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#enumeratePlugins"
    },
    {
      "name": "subscribeToSource",
      "kind": "function",
      "signature": "Pebble.subscribeToSource(config)",
      "brief": "Subscribes to one item of one category and delivers every update to config.onData as an envelope with pluginUuid, validUntilMs and instances.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#subscribeToSource",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#subscribeToSource"
    },
    {
      "name": "invokeAction",
      "kind": "function",
      "signature": "Pebble.invokeAction(config)",
      "brief": "Invokes one action on one plugin.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#invokeAction",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#invokeAction"
    },
    {
      "name": "sendConfigMessage",
      "kind": "function",
      "signature": "Pebble.sendConfigMessage(message)",
      "brief": "Pushes a message to the app's own settings page while that page is open.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#sendConfigMessage",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#sendConfigMessage"
    },
    {
      "name": "AppGlanceReloadFailureCallback",
      "kind": "typedef",
      "signature": "AppGlanceReloadFailureCallback: Function",
      "brief": "Called when AppGlanceReload has failed.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#AppGlanceReloadFailureCallback",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#AppGlanceReloadFailureCallback"
    },
    {
      "name": "AppMessageAckCallback",
      "kind": "typedef",
      "signature": "AppMessageAckCallback: Function",
      "brief": "Called when an AppMessage is acknowledged by the watch.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#AppMessageAckCallback",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#AppMessageAckCallback"
    },
    {
      "name": "AppMessageNackCallback",
      "kind": "typedef",
      "signature": "AppMessageNackCallback: Function",
      "brief": "Called when an AppMessage is not acknowledged by the watch.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#AppMessageNackCallback",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#AppMessageNackCallback"
    },
    {
      "name": "EventCallback",
      "kind": "typedef",
      "signature": "EventCallback: Function",
      "brief": "Called when an event of any type previously registered occurs.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#EventCallback",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#EventCallback"
    },
    {
      "name": "TimelineTokenCallback",
      "kind": "typedef",
      "signature": "TimelineTokenCallback: Function",
      "brief": "Called when the user's timeline token is available.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#TimelineTokenCallback",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#TimelineTokenCallback"
    },
    {
      "name": "AppGlanceReloadSuccessCallback",
      "kind": "typedef",
      "signature": "AppGlanceReloadSuccessCallback: Function",
      "brief": "Called when AppGlanceReload is successful.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#AppGlanceReloadSuccessCallback",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#AppGlanceReloadSuccessCallback"
    },
    {
      "name": "WatchInfo",
      "kind": "typedef",
      "signature": "WatchInfo: Object",
      "brief": "Provides information about the connected Pebble smartwatch.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#WatchInfo",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#WatchInfo"
    },
    {
      "name": "AppGlanceSlice",
      "kind": "typedef",
      "signature": "AppGlanceSlice: Object",
      "brief": "The structure of an app glance.",
      "platforms": [
        "aplite",
        "basalt",
        "chalk",
        "diorite",
        "emery",
        "flint",
        "gabbro"
      ],
      "group": "Pebble",
      "url": "https://developer.repebble.com/docs/pebblekit-js/Pebble/#AppGlanceSlice",
      "url_md": "https://developer.repebble.com/docs/pebblekit-js/Pebble.md#AppGlanceSlice"
    }
  ]
}