Lely core libraries  2.2.5
time.c File Reference
#include "co.h"
#include <lely/co/dev.h>
#include <lely/co/obj.h>
#include <lely/co/sdo.h>
#include <lely/co/time.h>
#include <lely/co/val.h>
#include <lely/util/endian.h>
#include <lely/util/errnum.h>
#include <lely/util/time.h>
#include <assert.h>
#include <stdlib.h>
Include dependency graph for time.c:

Go to the source code of this file.

Data Structures

struct  __co_time
 A CANopen TIME producer/consumer service. More...
 

Functions

static int co_time_update (co_time_t *time)
 Updates and (de)activates a TIME producer/consumer service. More...
 
static co_unsigned32_t co_1012_dn_ind (co_sub_t *sub, struct co_sdo_req *req, void *data)
 The download indication function for (all sub-objects of) CANopen object 1012 (COB-ID time stamp object). More...
 
static int co_time_recv (const struct can_msg *msg, void *data)
 The CAN receive callback function for a TIME consumer service. More...
 
static int co_time_timer (const struct timespec *tp, void *data)
 The CAN timer callback function for a TIME producer service. More...
 
void co_time_of_day_get (const co_time_of_day_t *tod, struct timespec *tp)
 Loads the absolute time from a CANopen TIME_OF_DAY value. More...
 
void co_time_of_day_set (co_time_of_day_t *tod, const struct timespec *tp)
 Stores the absolute time into a CANopen TIME_OF_DAY value. More...
 
void co_time_diff_get (const co_time_diff_t *td, struct timespec *tp)
 Loads a time difference from a CANopen TIME_DIFFERENCE value. More...
 
void co_time_diff_set (co_time_diff_t *td, const struct timespec *tp)
 Stores a time difference into a CANopen TIME_DIFFERENCE value. More...
 
co_time_tco_time_create (can_net_t *net, co_dev_t *dev)
 Creates a new CANopen TIME producer/consumer service. More...
 
void co_time_destroy (co_time_t *time)
 Destroys a CANopen TIME producer/consumer service. More...
 
can_net_tco_time_get_net (const co_time_t *time)
 Returns a pointer to the CAN network of a TIME producer/consumer service.
 
co_dev_tco_time_get_dev (const co_time_t *time)
 Returns a pointer to the CANopen device of a TIME producer/consumer service.
 
void co_time_get_ind (const co_time_t *time, co_time_ind_t **pind, void **pdata)
 Retrieves the indication function invoked when a CANopen time stamp is received. More...
 
void co_time_set_ind (co_time_t *time, co_time_ind_t *ind, void *data)
 Sets the indication function invoked when a CANopen time stamp is received. More...
 
void co_time_start (co_time_t *time, const struct timespec *start, const struct timespec *interval)
 Starts a CANopen TIME producer. More...
 
void co_time_stop (co_time_t *time)
 Stops a CANopen TIME producer. More...
 

Detailed Description

This file is part of the CANopen library; it contains the implementation of the time stamp (TIME) object functions.

See also
lely/co/time.h
Author
J. S. Seldenthuis jseld.nosp@m.enth.nosp@m.uis@l.nosp@m.ely..nosp@m.com

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.

Definition in file time.c.

Function Documentation

◆ co_time_update()

static int co_time_update ( co_time_t time)
static

Updates and (de)activates a TIME producer/consumer service.

This function is invoked by the download indication functions when the TIME COB-ID (object 1012) is updated.

Returns
0 on success, or -1 on error.

Definition at line 315 of file time.c.

◆ co_1012_dn_ind()

static co_unsigned32_t co_1012_dn_ind ( co_sub_t sub,
struct co_sdo_req req,
void *  data 
)
static

The download indication function for (all sub-objects of) CANopen object 1012 (COB-ID time stamp object).

See also
co_sub_dn_ind_t

Definition at line 357 of file time.c.

◆ co_time_recv()

static int co_time_recv ( const struct can_msg msg,
void *  data 
)
static

The CAN receive callback function for a TIME consumer service.

See also
can_recv_func_t

Definition at line 417 of file time.c.

◆ co_time_timer()

static int co_time_timer ( const struct timespec *  tp,
void *  data 
)
static

The CAN timer callback function for a TIME producer service.

See also
can_timer_func_t

Definition at line 450 of file time.c.

◆ co_time_of_day_get()

void co_time_of_day_get ( const co_time_of_day_t *  tod,
struct timespec *  tp 
)

Loads the absolute time from a CANopen TIME_OF_DAY value.

See also
co_time_of_day_set()

Definition at line 95 of file time.c.

◆ co_time_of_day_set()

void co_time_of_day_set ( co_time_of_day_t *  tod,
const struct timespec *  tp 
)

Stores the absolute time into a CANopen TIME_OF_DAY value.

See also
co_time_of_day_get()

Definition at line 108 of file time.c.

◆ co_time_diff_get()

void co_time_diff_get ( const co_time_diff_t *  td,
struct timespec *  tp 
)

Loads a time difference from a CANopen TIME_DIFFERENCE value.

See also
co_time_diff_set()

Definition at line 124 of file time.c.

◆ co_time_diff_set()

void co_time_diff_set ( co_time_diff_t *  td,
const struct timespec *  tp 
)

Stores a time difference into a CANopen TIME_DIFFERENCE value.

See also
co_time_diff_get()

Definition at line 134 of file time.c.

◆ co_time_create()

co_time_t* co_time_create ( can_net_t net,
co_dev_t dev 
)

Creates a new CANopen TIME producer/consumer service.

Parameters
neta pointer to a CAN network.
deva pointer to a CANopen device.
Returns
a pointer to a new TIME service, or NULL on error. In the latter case, the error number can be obtained with get_errc().
See also
co_time_destroy()

Definition at line 223 of file time.c.

◆ co_time_destroy()

void co_time_destroy ( co_time_t time)

Destroys a CANopen TIME producer/consumer service.

See also
co_time_create()

Definition at line 250 of file time.c.

◆ co_time_get_ind()

void co_time_get_ind ( const co_time_t time,
co_time_ind_t **  pind,
void **  pdata 
)

Retrieves the indication function invoked when a CANopen time stamp is received.

Parameters
timea pointer to a TIME consumer service.
pindthe address at which to store a pointer to the indication function (can be NULL).
pdatathe address at which to store a pointer to user-specified data (can be NULL).
See also
co_time_set_ind()

Definition at line 276 of file time.c.

◆ co_time_set_ind()

void co_time_set_ind ( co_time_t time,
co_time_ind_t ind,
void *  data 
)

Sets the indication function invoked when a CANopen time stamp is received.

Parameters
timea pointer to a TIME consumer service.
inda pointer to the function to be invoked.
dataa pointer to user-specified data (can be NULL). data is passed as the last parameter to ind.
See also
co_time_get_ind()

Definition at line 287 of file time.c.

◆ co_time_start()

void co_time_start ( co_time_t time,
const struct timespec *  start,
const struct timespec *  interval 
)

Starts a CANopen TIME producer.

This function has no effect if the TIME service is not a producer.

Parameters
timea pointer to a TIME producer service.
starta pointer to the absolute time when the next time stamp is to be sent. If start is NULL, this time is given by interval with respect to the current time as obtained with can_net_get_time(). If interval is also NULL, the producer is stopped.
intervala pointer to the interval between successive time stamps. If interval is NULL, only a single time stamp is sent, at the time given by start.
See also
co_time_stop()

Definition at line 296 of file time.c.

◆ co_time_stop()

void co_time_stop ( co_time_t time)

Stops a CANopen TIME producer.

See also
co_time_start()

Definition at line 306 of file time.c.