Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

/*
 * 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