提交 32e176c5 authored 作者: Anthony Minessale's avatar Anthony Minessale

add pika isdn support

git-svn-id: http://svn.openzap.org/svn/openzap/trunk@345 a93c3328-9c30-0410-af19-c9cd2b2d52af
上级 d0a3cefa
......@@ -81,10 +81,10 @@
#pragma comment(lib, "Winmm")
#endif
#define ZAP_ENUM_NAMES(_NAME, _STRINGS) static char * _NAME [] = { _STRINGS , NULL };
#define ZAP_STR2ENUM_P(_FUNC1, _FUNC2, _TYPE) _TYPE _FUNC1 (char *name); char * _FUNC2 (_TYPE type);
#define ZAP_ENUM_NAMES(_NAME, _STRINGS) static const char * _NAME [] = { _STRINGS , NULL };
#define ZAP_STR2ENUM_P(_FUNC1, _FUNC2, _TYPE) _TYPE _FUNC1 (const char *name); const char * _FUNC2 (_TYPE type);
#define ZAP_STR2ENUM(_FUNC1, _FUNC2, _TYPE, _STRINGS, _MAX) \
_TYPE _FUNC1 (char *name) \
_TYPE _FUNC1 (const char *name) \
{ \
int i; \
_TYPE t = _MAX ; \
......@@ -98,7 +98,7 @@
\
return t; \
} \
char * _FUNC2 (_TYPE type) \
const char * _FUNC2 (_TYPE type) \
{ \
if (type > _MAX) { \
type = _MAX; \
......@@ -319,7 +319,15 @@ struct zap_caller_data {
uint32_t raw_data_len;
};
typedef enum {
ZAP_TYPE_NONE,
ZAP_TYPE_SPAN = 0xFF,
ZAP_TYPE_CHANNEL
} zap_data_type_t;
struct zap_channel {
zap_data_type_t data_type;
uint32_t span_id;
uint32_t chan_id;
uint32_t physical_span_id;
......@@ -399,6 +407,7 @@ struct zap_analog_data {
};
struct zap_span {
zap_data_type_t data_type;
uint32_t span_id;
uint32_t chan_count;
zap_span_flag_t flags;
......
......@@ -35,6 +35,66 @@
#define ZAP_PIKA_H
#include "openzap.h"
#include "pikahmpapi.h"
typedef enum {
PIKA_SPAN_FRAMING_T1_D4,
PIKA_SPAN_FRAMING_T1_ESF,
PIKA_SPAN_FRAMING_E1_BASIC,
PIKA_SPAN_FRAMING_E1_CRC4,
PIKA_SPAN_INVALID
} PIKA_TSpanFraming;
#define PIKA_SPAN_STRINGS "T1_D4", "T1_ESF", "E1_BASIC", "E1_CRC4"
ZAP_STR2ENUM_P(pika_str2span, pika_span2str, PIKA_TSpanFraming)
typedef enum {
PIKA_SPAN_ENCODING_T1_AMI_ZS_NONE,
PIKA_SPAN_ENCODING_T1_AMI_ZS_GTE,
PIKA_SPAN_ENCODING_T1_AMI_ZS_BELL,
PIKA_SPAN_ENCODING_T1_AMI_ZS_JAM8,
PIKA_SPAN_ENCODING_T1_B8ZS,
PIKA_SPAN_ENCODING_E1_AMI,
PIKA_SPAN_ENCODING_E1_HDB3,
PIKA_SPAN_ENCODING_INVALID
} PIKA_TSpanEncoding;
#define PIKA_SPAN_ENCODING_STRINGS "T1_AMI_ZS_NONE", "T1_AMI_ZS_GTE", "T1_AMI_ZS_BELL", "T1_AMI_ZS_JAM8", "T1_B8ZS", "E1_AMI", "E1_HDB3"
ZAP_STR2ENUM_P(pika_str2span_encoding, pika_span_encoding2str, PIKA_TSpanEncoding)
typedef enum {
PIKA_SPAN_LOOP_LENGTH_SHORT_HAUL,
PIKA_SPAN_LOOP_LENGTH_LONG_HAUL,
PIKA_SPAN_LOOP_INVALID
} PIKA_TSpanLoopLength;
#define PIKA_LL_STRINGS "SHORT_HAUL", "LONG_HAUL"
ZAP_STR2ENUM_P(pika_str2loop_length, pika_loop_length2str, PIKA_TSpanLoopLength)
typedef enum {
PIKA_SPAN_LBO_T1_LONG_0_DB,
PIKA_SPAN_LBO_T1_LONG_7_DB,
PIKA_SPAN_LBO_T1_LONG_15_DB,
PIKA_SPAN_LBO_T1_LONG_22_DB,
PIKA_SPAN_LBO_T1_SHORT_133_FT,
PIKA_SPAN_LBO_T1_SHORT_266_FT,
PIKA_SPAN_LBO_T1_SHORT_399_FT,
PIKA_SPAN_LBO_T1_SHORT_533_FT,
PIKA_SPAN_LBO_T1_SHORT_655_FT,
PIKA_SPAN_LBO_E1_WAVEFORM_120_OHM,
PIKA_SPAN_LBO_INVALID
} PIKA_TSpanBuildOut;
#define PIKA_LBO_STRINGS "T1_LONG_0_DB", "T1_LONG_7_DB", "T1_LONG_15_DB", "T1_LONG_22_DB", "T1_SHORT_133_FT", "T1_SHORT_266_FT", "T1_SHORT_399_FT", "T1_SHORT_533_FT", "T1_SHORT_655_FT", "E1_WAVEFORM_120_OHM"
ZAP_STR2ENUM_P(pika_str2lbo, pika_lbo2str, PIKA_TSpanBuildOut)
typedef enum {
PIKA_SPAN_COMMAND_MODE_MU_LAW = 1,
PIKA_SPAN_COMMAND_MODE_A_LAW,
PIKA_SPAN_COMMAND_MODE_INVALID
} PIKA_TSpanCompandMode;
#define PIKA_SPAN_COMMAND_MODE_STRINGS "MU_LAW", "A_LAW"
ZAP_STR2ENUM_P(pika_str2command_mode, pika_command_mode2str, PIKA_TSpanCompandMode)
/* Openzap PIKA hardware interface functions */
zap_status_t pika_init(zap_io_interface_t **zint);
zap_status_t pika_destroy(void);
......
......@@ -153,7 +153,10 @@ typedef enum {
ZAP_ALARM_YELLOW = (1 << 3),
ZAP_ALARM_RED = (1 << 4),
ZAP_ALARM_BLUE = (1 << 5),
ZAP_ALARM_NOTOPEN = ( 1 << 6)
ZAP_ALARM_NOTOPEN = ( 1 << 6),
ZAP_ALARM_AIS = ( 1 << 7),
ZAP_ALARM_RAI = ( 1 << 8),
ZAP_ALARM_GENERAL = ( 1 << 31)
} zap_alarm_flag_t;
typedef enum {
......
......@@ -316,6 +316,7 @@ zap_status_t zap_span_create(zap_io_interface_t *zio, zap_span_t **span)
zap_copy_string(new_span->tone_map[ZAP_TONEMAP_BUSY], "%(500,500,480,620)", ZAP_TONEMAP_LEN);
zap_copy_string(new_span->tone_map[ZAP_TONEMAP_ATTN], "%(100,100,1400,2060,2450,2600)", ZAP_TONEMAP_LEN);
new_span->trunk_type = ZAP_TRUNK_NONE;
new_span->data_type = ZAP_TYPE_SPAN;
*span = new_span;
status = ZAP_SUCCESS;
}
......@@ -421,6 +422,7 @@ zap_status_t zap_span_add_channel(zap_span_t *span, zap_socket_t sockfd, zap_cha
new_chan->span = span;
new_chan->fds[0] = -1;
new_chan->fds[1] = -1;
new_chan->data_type = ZAP_TYPE_CHANNEL;
if (!new_chan->dtmf_on) {
new_chan->dtmf_on = ZAP_DEFAULT_DTMF_ON;
}
......@@ -605,6 +607,7 @@ zap_status_t zap_channel_set_state(zap_channel_t *zchan, zap_channel_state_t sta
switch(state) {
case ZAP_CHANNEL_STATE_DOWN:
case ZAP_CHANNEL_STATE_BUSY:
case ZAP_CHANNEL_STATE_RESTART:
ok = 1;
break;
default:
......
......@@ -42,7 +42,7 @@
#endif
#define LINE "--------------------------------------------------------------------------------"
#define IODEBUG
//#define IODEBUG
static L2ULONG zap_time_now()
{
......@@ -141,6 +141,7 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
}
}
break;
case Q931mes_RELEASE:
case Q931mes_RELEASE_COMPLETE:
{
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_DOWN);
......@@ -151,6 +152,7 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
Q931ie_Cause *cause = Q931GetIEPtr(gen->Cause, gen->buf);
zchan->caller_data.hangup_cause = cause->Value;
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_TERMINATING);
}
break;
case Q931mes_ALERTING:
......@@ -196,7 +198,6 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
zchan->caller_data.raw_data_len = cplen;
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_RING);
fail = 0;
zap_log(ZAP_LOG_CRIT, "hi %s\n", zchan->caller_data.cid_num);
}
}
......@@ -235,10 +236,10 @@ static int zap_isdn_921_21(void *pvt, L2UCHAR *msg, L2INT mlen)
zap_isdn_data_t *isdn_data = span->signal_data;
#ifdef IODEBUG
//char bb[4096] = "";
//print_hex_bytes(msg, len, bb, sizeof(bb));
//print_bits(msg, (int)len, bb, sizeof(bb), ZAP_ENDIAN_LITTLE, 0);
//zap_log(ZAP_LOG_DEBUG, "WRITE %d\n%s\n%s\n\n", (int)len, LINE, bb);
char bb[4096] = "";
print_hex_bytes(msg, len, bb, sizeof(bb));
print_bits(msg, (int)len, bb, sizeof(bb), ZAP_ENDIAN_LITTLE, 0);
zap_log(ZAP_LOG_DEBUG, "WRITE %d\n%s\n%s\n\n", (int)len, LINE, bb);
#endif
......@@ -563,11 +564,11 @@ static void *zap_isdn_run(zap_thread_t *me, void *obj)
len = sizeof(buf);
if (zap_channel_read(isdn_data->dchan, buf, &len) == ZAP_SUCCESS) {
#ifdef IODEBUG
//char bb[4096] = "";
//print_hex_bytes(buf, len, bb, sizeof(bb));
char bb[4096] = "";
print_hex_bytes(buf, len, bb, sizeof(bb));
//print_bits(buf, (int)len, bb, sizeof(bb), ZAP_ENDIAN_LITTLE, 0);
//zap_log(ZAP_LOG_DEBUG, "READ %d\n%s\n%s\n\n", (int)len, LINE, bb);
print_bits(buf, (int)len, bb, sizeof(bb), ZAP_ENDIAN_LITTLE, 0);
zap_log(ZAP_LOG_DEBUG, "READ %d\n%s\n%s\n\n", (int)len, LINE, bb);
#endif
Q921QueueHDLCFrame(&isdn_data->q921, buf, (int)len);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论