*
* Moises Silva <moy@sangoma.com>
* W McRoberts <fs@whmcr.com>
+ * Puskás Zsolt <errotan@gmail.com>
*
*/
static FIO_GET_ALARMS_FUNCTION(zt_get_alarms)
{
struct zt_spaninfo info;
+ zt_params_t params;
memset(&info, 0, sizeof(info));
info.span_no = ftdmchan->physical_span_id;
+ memset(¶ms, 0, sizeof(params));
+
if (ioctl(CONTROL_FD, codes.SPANSTAT, &info)) {
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "ioctl failed (%s)", strerror(errno));
snprintf(ftdmchan->span->last_error, sizeof(ftdmchan->span->last_error), "ioctl failed (%s)", strerror(errno));
ftdmchan->alarm_flags = info.alarms;
+ /* get channel alarms if span has no alarms */
+ if (info.alarms == FTDM_ALARM_NONE) {
+ if (ioctl(ftdmchan->sockfd, codes.GET_PARAMS, ¶ms)) {
+ snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "ioctl failed (%s)", strerror(errno));
+ snprintf(ftdmchan->span->last_error, sizeof(ftdmchan->span->last_error), "ioctl failed (%s)", strerror(errno));
+ return FTDM_FAIL;
+ }
+
+ if (params.chan_alarms > 0) {
+ if (params.chan_alarms == DAHDI_ALARM_YELLOW) {
+ ftdmchan->alarm_flags = FTDM_ALARM_YELLOW;
+ }
+ else if (params.chan_alarms == DAHDI_ALARM_BLUE) {
+ ftdmchan->alarm_flags = FTDM_ALARM_BLUE;
+ }
+ else {
+ ftdmchan->alarm_flags = FTDM_ALARM_RED;
+ }
+ }
+ }
+
return FTDM_SUCCESS;
}
#define DAHDI_HDLCRAWMODE _IOW (DAHDI_CODE, 36, int) /* Set a clear channel into HDLC w/out FCS checking/calculation mode */
#define DAHDI_HDLCFCSMODE _IOW (DAHDI_CODE, 37, int) /* Set a clear channel into HDLC w/ FCS mode */
+/* Dahdi channel alarms */
+#define DAHDI_ALARM_YELLOW (1 << 2) /* Yellow Alarm */
+#define DAHDI_ALARM_BLUE (1 << 4) /* Blue Alarm */
+
/* Specify a channel on /dev/dahdi/chan -- must be done before any other ioctl's and is only valid on /dev/dahdi/chan */
#define DAHDI_SPECIFY _IOW (DAHDI_CODE, 38, int)