Example: External Alarm Timestamps
By default, newly generated CIMPLICITY alarms are assigned a timestamp indicating the alarm generation time and duration. The Alarm Management API lets you provide your own timestamp, so that external alarms can be synchronized to a more accurate clock. The following example shows how to generate an alarm with an external timestamp:
COR_STAMP stamp;
int yyyy, mm, dd, hh, min, sec, tt100Nano;
;
get parameters (load msg_fields)
/* Setup time for the alarm */
yyyy = 1995;
mm = 01; /* month = January */
dd = 10; /* day of the month */
hh = 13; /* hours - 24 hour clock */
min = 30; /* minutes after 1pm */
sec = 12; /* seconds after 1:30 */
tt100Nano = 5000000; /* subseconds in 100 Nano second units*/
int ret; /* return code */
/* Convert time into a CIMPLICITY timestamp */
cor_stamp_calcHR( &stamp, yyyy, mm, dd, yy, min,sec, tt100Nano);
/* set up to generate the alarm */
/* the alarm is fixed as shown */
amaru_add_gen_stamp(
alarm_write_body, /* data pointer of write buffer */
alarm_write_len - IPC_HEAD_LEN, /* data length avail */
TRUE, /* TRUE if first message in buffer */
/* FALSE if not first message */
"$RTR_LINK_DOWN", /* ID of alarm */
"$SYSTEM", /* ID of resource */
object_name, /* identifier of who sent the alarm */
NULL, /* reference ID or NULL goes here */
AM_CAPTURED_RESP, /* AMRP sends response immediately */
0, /* key */
msg_field, /* the message struct array */
i, /* the number of fields in message */
FALSE, /* no reset follows */
stamp,
&ret_stat );
if (ret_stat.status != COR_SUCCESS)
{
printf("%s\n",ret_stat.err_msg);
goto end_of_program_am;
}
/* send message to AMRP as before */
There is also a corresponding function amaru_add_update_stamp() in the API which can be used to specify an external reset time for an outstanding alarm.