mirror of
https://github.com/google/pebble.git
synced 2025-05-04 00:41:40 -04:00
84 lines
3 KiB
C
84 lines
3 KiB
C
/*
|
|
* Copyright 2024 Google LLC
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
typedef enum PlatformType {
|
|
PlatformTypeAplite,
|
|
PlatformTypeBasalt,
|
|
PlatformTypeChalk,
|
|
PlatformTypeDiorite,
|
|
PlatformTypeEmery,
|
|
} PlatformType;
|
|
|
|
// Unit tests and the firmware don't define the SDK platform defines because reasons.
|
|
// Therefore, we need to switch on the platform for the platform type.
|
|
#if !defined(SDK)
|
|
#if PLATFORM_TINTIN
|
|
#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeAplite
|
|
#elif PLATFORM_SNOWY
|
|
#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeBasalt
|
|
#elif PLATFORM_SPALDING
|
|
#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeChalk
|
|
#elif PLATFORM_SILK
|
|
#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeDiorite
|
|
#elif PLATFORM_ROBERT || PLATFORM_CALCULUS
|
|
#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeEmery
|
|
#else
|
|
#error "PBL_PLATFORM_TYPE_CURRENT couldn't be determined: No PLATFORM_* defined!"
|
|
#endif
|
|
#else
|
|
#if PBL_PLATFORM_APLITE
|
|
#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeAplite
|
|
#elif PBL_PLATFORM_BASALT
|
|
#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeBasalt
|
|
#elif PBL_PLATFORM_CHALK
|
|
#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeChalk
|
|
#elif PBL_PLATFORM_DIORITE
|
|
#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeDiorite
|
|
#elif PBL_PLATFORM_EMERY
|
|
#define PBL_PLATFORM_TYPE_CURRENT PlatformTypeEmery
|
|
#else
|
|
#error "PBL_PLATFORM_TYPE_CURRENT couldn't be determined: No PBL_PLATFORM_* defined!"
|
|
#endif
|
|
#endif
|
|
|
|
#define PBL_PLATFORM_SWITCH_DEFAULT(PLAT, DEFAULT, APLITE, BASALT, CHALK, DIORITE, EMERY) (\
|
|
((PLAT) == PlatformTypeEmery) ? (EMERY) : \
|
|
((PLAT) == PlatformTypeDiorite) ? (DIORITE) : \
|
|
((PLAT) == PlatformTypeChalk) ? (CHALK) : \
|
|
((PLAT) == PlatformTypeBasalt) ? (BASALT) : \
|
|
((PLAT) == PlatformTypeBasalt) ? (APLITE) : \
|
|
(DEFAULT) \
|
|
)
|
|
|
|
// We fall back to Aplite because we need to fall back on _one_ of the given arguments.
|
|
// This prevents issues with sometimes using this for pointers/strings, and sometimes for ints.
|
|
//
|
|
// NOTE: Optimal use of this does _not_ call a function for the `PLAT` argument! If you do, it
|
|
// will be _evaluated on every comparison_, which is unlikely to be what you want!
|
|
#define PBL_PLATFORM_SWITCH(PLAT, APLITE, BASALT, CHALK, DIORITE, EMERY) \
|
|
PBL_PLATFORM_SWITCH_DEFAULT(PLAT, APLITE, APLITE, BASALT, CHALK, DIORITE, EMERY)
|
|
|
|
|
|
// INTERNAL
|
|
#define platform_type_get_name(plat) PBL_PLATFORM_SWITCH_DEFAULT(plat, \
|
|
/*default*/ "unknown", \
|
|
/*aplite*/ "aplite", \
|
|
/*basalt*/ "basalt", \
|
|
/*chalk*/ "chalk", \
|
|
/*diorite*/ "diorite", \
|
|
/*emery*/ "emery")
|