/*
* clock - clock resource for zavai
*
- * Copyright (C) 2009 Enrico Zini <enrico@enricozini.org>
+ * Copyright (C) 2009--2010 Enrico Zini <enrico@enricozini.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
public class AlarmTriggerInfo
{
- public uint id;
+ public zavai.log.Log log;
public string label;
public bool acked;
public bool canceled;
public AlarmTriggerInfo(string label)
{
- id = 0;
this.label = label;
acked = false;
canceled = false;
public class AlarmTriggerQueue : zavai.Service
{
protected List<AlarmTriggerInfo> queue;
- protected int seq;
public signal void triggered(AlarmTriggerInfo info);
public signal void acked(AlarmTriggerInfo info);
public AlarmTriggerQueue()
{
queue = new List<AlarmTriggerInfo>();
- seq = 0;
}
- public uint enqueue_trigger(AlarmTriggerInfo info)
+ public void enqueue_trigger(AlarmTriggerInfo info)
{
- // Generate a new sequence number
- if (++seq == 0) ++seq;
- info.id = seq;
+ // Reuse IDs from the associated logger object
+ info.log = zavai.log.log.start("alarm", "Alarm " + info.label);
queue.append(info);
- if (queue.data.id == info.id)
+ if (queue.data == info)
triggered(queue.data);
- return info.id;
}
protected void done_with_first()
public void ack(AlarmTriggerInfo info)
{
- if (queue == null || info.id != queue.data.id) return;
+ if (queue == null || info != queue.data) return;
if (!info.acked && !info.canceled)
{
info.acked = true;
acked(info);
+ info.log.add("alarm acknowledged");
+ info.log.acked = true;
+ zavai.log.log.end(info.log);
}
done_with_first();
}
public void cancel(AlarmTriggerInfo info)
{
- if (queue == null || info.id != queue.data.id) return;
+ if (queue == null || info != queue.data) return;
if (!info.acked && !info.canceled)
{
info.canceled = true;
canceled(info);
+ info.log.add("alarm canceled");
+ zavai.log.log.end(info.log);
}
done_with_first();
}