| /* |
| * |
| * Copyright (c) 2017 Nest Labs, Inc. |
| * All rights reserved. |
| * |
| * 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. |
| */ |
| |
| /** |
| * @file |
| * This file defines objects and functions to register and |
| * deregister support callbacks, particularly those for returning |
| * human-readable strings, for Weave profiles. |
| * |
| */ |
| |
| #ifndef PROFILESUPPORT_HPP |
| #define PROFILESUPPORT_HPP |
| |
| #include <stdint.h> |
| |
| #include <Weave/Core/WeaveError.h> |
| #include <Weave/Support/NLDLLUtil.h> |
| |
| namespace nl { |
| |
| namespace Weave { |
| |
| namespace Support { |
| |
| /** |
| * @brief |
| * Typedef for a callback function that returns a human-readable |
| * NULL-terminated C string describing the message type associated |
| * with the specified profile identifier. |
| * |
| * This callback, when registered, is invoked when a human-readable |
| * NULL-terminated C string is needed to describe the message type |
| * associated with the specified profile identifier. |
| * |
| * @param[in] inProfileId The profile identifier associated with the |
| * specified message type. |
| * |
| * @param[in] inMsgType The message type for which a human-readable |
| * descriptive string is sought. |
| * |
| * @return a pointer to the NULL-terminated C string if a match is |
| * found; otherwise, NULL. |
| * |
| */ |
| typedef const char * (*MessageNameFunct)(uint32_t inProfileId, uint8_t inMsgType); |
| |
| /** |
| * @brief |
| * Typedef for a callback function that returns a human-readable |
| * NULL-terminated C string describing the profile with the |
| * specified profile identifier. |
| * |
| * This callback, when registered, is invoked when a human-readable |
| * NULL-terminated C string is needed to describe the profile with |
| * the specified profile identifier. |
| * |
| * @param[in] inProfileId The profile identifier for which a human-readable |
| * descriptive string is sought. |
| * |
| * @return a pointer to the NULL-terminated C string if a match is |
| * found; otherwise, NULL. |
| * |
| */ |
| typedef const char * (*ProfileNameFunct)(uint32_t inProfileId); |
| |
| |
| /** |
| * @brief |
| * Typedef for a callback function that returns a human-readable |
| * NULL-terminated C string describing the status code associated |
| * with the specified profile identifier. |
| * |
| * This callback, when registered, is invoked when a human-readable |
| * NULL-terminated C string is needed to describe the status code |
| * associated with the specified profile identifier. |
| * |
| * @param[in] inProfileId The profile identifier associated with the |
| * specified status code. |
| * |
| * @param[in] inStatusCode The status code for which a human-readable |
| * descriptive string is sought. |
| * |
| * @return a pointer to the NULL-terminated C string if a match is |
| * found; otherwise, NULL. |
| * |
| */ |
| typedef const char * (*StatusReportFormatStringFunct)(uint32_t inProfileId, uint16_t inStatusCode); |
| |
| /** |
| * @brief |
| * Callbacks associated with the specified profile identifier for |
| * returning human-readable support strings associated with the |
| * profile. |
| * |
| * This structure provides storage for callbacks associated with the |
| * specified profile identifier for returning human-readable support |
| * strings associated with the profile. |
| * |
| * The structure may be registered (along with a companion context |
| * structure), looked up once registered, and deregistered (along |
| * with a companion context structure). |
| * |
| * To optimize space in constrained applications, this structure |
| * should typically be allocated with constant, static storage |
| * qualifiers (i.e. static const). |
| * |
| */ |
| struct ProfileStringInfo |
| { |
| uint32_t mProfileId; ///< The profile identifier under which to register string callbacks. |
| |
| MessageNameFunct mMessageNameFunct; ///< An optional pointer to a callback to return descriptive names associated with profile message types. |
| ProfileNameFunct mProfileNameFunct; ///< An optional pointer to a callback to return a descriptive name associated with the profile. |
| StatusReportFormatStringFunct mStatusReportFormatStringFunct; ///< An optional pointer to a callback to return a descriptive string for profile status codes. |
| }; |
| |
| /** |
| * @brief |
| * Context for registering and deregistering callbacks associated |
| * with the specified profile identifier for returning |
| * human-readable support strings associated with the profile. |
| * |
| * This context will be modified, via mNext, within a registry and, |
| * consequently, must be allocated with read-write storage |
| * qualifiers. |
| * |
| */ |
| struct ProfileStringContext |
| { |
| ProfileStringContext * mNext; ///< A pointer to the next |
| ///< context in the registry. |
| |
| const ProfileStringInfo & mStringInfo; ///< A read-only reference to |
| ///< the profile string |
| ///< support callbacks |
| ///< associated with this |
| ///< context. |
| }; |
| |
| extern WEAVE_ERROR RegisterProfileStringInfo(ProfileStringContext &inOutContext); |
| extern WEAVE_ERROR UnregisterProfileStringInfo(ProfileStringContext &inOutContext); |
| extern const ProfileStringInfo *FindProfileStringInfo(uint32_t inProfileId); |
| |
| }; // namespace Support |
| |
| }; // namespace Weave |
| |
| }; // namespace nl |
| |
| #endif // PROFILESUPPORT_HPP |