LCOV - code coverage report
Current view: top level - zephyr/bluetooth/services - cts.h Hit Total Coverage
Test: new.info Lines: 9 20 45.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2024 Croxel Inc.
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_CTS_H_
       8             : #define ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_CTS_H_
       9             : 
      10             : /**
      11             :  * @brief Current Time Service (CTS)
      12             :  * @defgroup bt_cts Current Time Service (CTS)
      13             :  * @ingroup bluetooth
      14             :  * @{
      15             :  *
      16             :  */
      17             : 
      18             : #include <stdint.h>
      19             : 
      20             : #ifdef __cplusplus
      21             : extern "C" {
      22             : #endif
      23             : 
      24             : /**
      25             :  * @brief CTS time update reason bits as defined in the specification
      26             :  */
      27           0 : enum bt_cts_update_reason {
      28             :         /* Unknown reason of update no bit is set */
      29             :         BT_CTS_UPDATE_REASON_UNKNOWN = 0,
      30             :         /* When time is changed manually e.g. through UI */
      31             :         BT_CTS_UPDATE_REASON_MANUAL = BIT(0),
      32             :         /* If time is changed through external reference */
      33             :         BT_CTS_UPDATE_REASON_EXTERNAL_REF = BIT(1),
      34             :         /* time changed due to timezone adjust */
      35             :         BT_CTS_UPDATE_REASON_TIME_ZONE_CHANGE = BIT(2),
      36             :         /* time changed due to dst offset change */
      37             :         BT_CTS_UPDATE_REASON_DAYLIGHT_SAVING = BIT(3),
      38             : };
      39             : 
      40             : /**
      41             :  * @brief Current Time service data format, Please refer to
      42             :  * specifications for more details
      43             :  */
      44           1 : struct bt_cts_time_format {
      45           0 :         uint16_t year;
      46           0 :         uint8_t mon;
      47           0 :         uint8_t mday;
      48           0 :         uint8_t hours;
      49           0 :         uint8_t min;
      50           0 :         uint8_t sec;
      51           0 :         uint8_t wday;
      52           0 :         uint8_t fractions256;
      53           0 :         uint8_t reason;
      54             : } __packed;
      55             : 
      56             : /** @brief Current Time Service callback structure */
      57           1 : struct bt_cts_cb {
      58             :         /** @brief Current Time Service notifications changed
      59             :          *
      60             :          * @param enabled True if notifications are enabled, false if disabled
      61             :          */
      62           1 :         void (*notification_changed)(bool enabled);
      63             : 
      64             :         /**
      65             :          * @brief The Current Time has been updated by a peer.
      66             :          * It is the responsibility of the application to store the new time.
      67             :          *
      68             :          * @param cts_time [IN] updated time
      69             :          *
      70             :          * @return 0 application has decoded it successfully
      71             :          * @return negative error codes on failure
      72             :          *
      73             :          */
      74           1 :         int (*cts_time_write)(struct bt_cts_time_format *cts_time);
      75             : 
      76             :         /**
      77             :          * @brief When current time Read request or notification is triggered, CTS uses
      78             :          * this callback to retrieve current time information from application. Application
      79             :          * must implement it and provide cts formatted current time information
      80             :          *
      81             :          * @note this callback is mandatory
      82             :          *
      83             :          * @param cts_time [IN] updated time
      84             :          *
      85             :          * @return 0 application has encoded it successfully
      86             :          * @return negative error codes on failure
      87             :          */
      88           1 :         int (*fill_current_cts_time)(struct bt_cts_time_format *cts_time);
      89             : };
      90             : 
      91             : /**
      92             :  * @brief This API should be called at application init.
      93             :  * it is safe to call this API before or after bt_enable API
      94             :  *
      95             :  * @param cb pointer to required callback
      96             :  *
      97             :  * @return 0 on success
      98             :  * @return negative error codes on failure
      99             :  */
     100           1 : int bt_cts_init(const struct bt_cts_cb *cb);
     101             : 
     102             : /**
     103             :  * @brief Notify all connected clients that have enabled the
     104             :  * current time update notification
     105             :  *
     106             :  * @param reason update reason to be sent to the clients
     107             :  *
     108             :  * @return 0 on success
     109             :  * @return negative error codes on failure
     110             :  */
     111           1 : int bt_cts_send_notification(enum bt_cts_update_reason reason);
     112             : 
     113             : /**
     114             :  * @brief Helper API to decode CTS formatted time into milliseconds since epoch
     115             :  *
     116             :  * @note @kconfig{CONFIG_BT_CTS_HELPER_API} needs to be enabled to use this API.
     117             :  *
     118             :  * @param ct_time [IN]  cts time formatted time
     119             :  * @param unix_ms [OUT] pointer to store parsed millisecond since epoch
     120             :  *
     121             :  * @return 0 on success
     122             :  * @return negative error codes on failure
     123             :  */
     124           1 : int bt_cts_time_to_unix_ms(const struct bt_cts_time_format *ct_time, int64_t *unix_ms);
     125             : 
     126             : /**
     127             :  * @brief Helper API to encode milliseconds since epoch to CTS formatted time
     128             :  *
     129             :  * @note @kconfig{CONFIG_BT_CTS_HELPER_API} needs to be enabled to use this API.
     130             :  *
     131             :  * @param ct_time [OUT] Pointer to store CTS formatted time
     132             :  * @param unix_ms [IN]  milliseconds since epoch to be converted
     133             :  *
     134             :  * @return 0 on success
     135             :  * @return negative error codes on failure
     136             :  */
     137           1 : int bt_cts_time_from_unix_ms(struct bt_cts_time_format *ct_time, int64_t unix_ms);
     138             : 
     139             : #ifdef __cplusplus
     140             : }
     141             : #endif
     142             : 
     143             : /**
     144             :  * @}
     145             :  */
     146             : 
     147             : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_CTS_H_ */

Generated by: LCOV version 1.14