blob: c2ca5031ac016806d7d865b9caaac1251ee0a5bd [file] [log] [blame]
/*
* Copyright (c) 2017 Linaro Limited
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef __SNTP_H
#define __SNTP_H
#include <net/net_app.h>
struct sntp_ctx;
/**
* @typedef sntp_resp_cb_t
* @brief SNTP response callback.
*
* @details The callback is called after a sntp response is received
*
* @param ctx Address of sntp context.
* @param status Error code of sntp response.
* @param epoch_time Seconds since 1 January 1970.
* @param user_data The user data given in sntp_request().
*/
typedef void (*sntp_resp_cb_t)(struct sntp_ctx *ctx,
int status,
u64_t epoch_time,
void *user_data);
/** SNTP context */
struct sntp_ctx {
/** Network application context */
struct net_app_ctx net_app_ctx;
/** Timestamp when the request is departed the client for the server.
* This is used to check if the originated timestamp in the server
* reply matches the one in client request.
*/
u32_t expected_orig_ts;
/** SNTP response callback */
sntp_resp_cb_t cb;
/** The user data of SNTP response callback */
void *user_data;
/** Is this context setup or not */
bool is_init;
};
/**
* @brief Initialize SNTP context
*
* @param ctx Address of sntp context.
* @param srv_addr IP address of NTP/SNTP server.
* @param srv_port Port number of NTP/SNTP server.
* @param timeout Timeout of sntp context initialization (in milliseconds).
*
* @return 0 if ok, <0 if error.
*/
int sntp_init(struct sntp_ctx *ctx,
const char *srv_addr,
u16_t srv_port,
u32_t timeout);
/**
* @brief Send SNTP request
*
* @param ctx Address of sntp context.
* @param timeout Timeout of sending sntp request (in milliseconds).
* @param callback Callback function of sntp response.
* @param user_data User data that will be passed to callback function.
*
* @return 0 if ok, <0 if error.
*/
int sntp_request(struct sntp_ctx *ctx,
u32_t timeout,
sntp_resp_cb_t callback,
void *user_data);
/**
* @brief Release SNTP context
*
* @param ctx Address of sntp context.
*/
void sntp_close(struct sntp_ctx *ctx);
#endif