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.