提交 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 @@ ...@@ -81,10 +81,10 @@
#pragma comment(lib, "Winmm") #pragma comment(lib, "Winmm")
#endif #endif
#define ZAP_ENUM_NAMES(_NAME, _STRINGS) static char * _NAME [] = { _STRINGS , NULL }; #define ZAP_ENUM_NAMES(_NAME, _STRINGS) static const char * _NAME [] = { _STRINGS , NULL };
#define ZAP_STR2ENUM_P(_FUNC1, _FUNC2, _TYPE) _TYPE _FUNC1 (char *name); char * _FUNC2 (_TYPE type); #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) \ #define ZAP_STR2ENUM(_FUNC1, _FUNC2, _TYPE, _STRINGS, _MAX) \
_TYPE _FUNC1 (char *name) \ _TYPE _FUNC1 (const char *name) \
{ \ { \
int i; \ int i; \
_TYPE t = _MAX ; \ _TYPE t = _MAX ; \
...@@ -98,7 +98,7 @@ ...@@ -98,7 +98,7 @@
\ \
return t; \ return t; \
} \ } \
char * _FUNC2 (_TYPE type) \ const char * _FUNC2 (_TYPE type) \
{ \ { \
if (type > _MAX) { \ if (type > _MAX) { \
type = _MAX; \ type = _MAX; \
...@@ -319,7 +319,15 @@ struct zap_caller_data { ...@@ -319,7 +319,15 @@ struct zap_caller_data {
uint32_t raw_data_len; uint32_t raw_data_len;
}; };
typedef enum {
ZAP_TYPE_NONE,
ZAP_TYPE_SPAN = 0xFF,
ZAP_TYPE_CHANNEL
} zap_data_type_t;
struct zap_channel { struct zap_channel {
zap_data_type_t data_type;
uint32_t span_id; uint32_t span_id;
uint32_t chan_id; uint32_t chan_id;
uint32_t physical_span_id; uint32_t physical_span_id;
...@@ -399,6 +407,7 @@ struct zap_analog_data { ...@@ -399,6 +407,7 @@ struct zap_analog_data {
}; };
struct zap_span { struct zap_span {
zap_data_type_t data_type;
uint32_t span_id; uint32_t span_id;
uint32_t chan_count; uint32_t chan_count;
zap_span_flag_t flags; zap_span_flag_t flags;
......
...@@ -35,6 +35,66 @@ ...@@ -35,6 +35,66 @@
#define ZAP_PIKA_H #define ZAP_PIKA_H
#include "openzap.h" #include "openzap.h"
#include "pikahmpapi.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 */ /* Openzap PIKA hardware interface functions */
zap_status_t pika_init(zap_io_interface_t **zint); zap_status_t pika_init(zap_io_interface_t **zint);
zap_status_t pika_destroy(void); zap_status_t pika_destroy(void);
......
...@@ -153,7 +153,10 @@ typedef enum { ...@@ -153,7 +153,10 @@ typedef enum {
ZAP_ALARM_YELLOW = (1 << 3), ZAP_ALARM_YELLOW = (1 << 3),
ZAP_ALARM_RED = (1 << 4), ZAP_ALARM_RED = (1 << 4),
ZAP_ALARM_BLUE = (1 << 5), 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; } zap_alarm_flag_t;
typedef enum { typedef enum {
......
...@@ -316,6 +316,7 @@ zap_status_t zap_span_create(zap_io_interface_t *zio, zap_span_t **span) ...@@ -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_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); 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->trunk_type = ZAP_TRUNK_NONE;
new_span->data_type = ZAP_TYPE_SPAN;
*span = new_span; *span = new_span;
status = ZAP_SUCCESS; status = ZAP_SUCCESS;
} }
...@@ -421,6 +422,7 @@ zap_status_t zap_span_add_channel(zap_span_t *span, zap_socket_t sockfd, zap_cha ...@@ -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->span = span;
new_chan->fds[0] = -1; new_chan->fds[0] = -1;
new_chan->fds[1] = -1; new_chan->fds[1] = -1;
new_chan->data_type = ZAP_TYPE_CHANNEL;
if (!new_chan->dtmf_on) { if (!new_chan->dtmf_on) {
new_chan->dtmf_on = ZAP_DEFAULT_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 ...@@ -605,6 +607,7 @@ zap_status_t zap_channel_set_state(zap_channel_t *zchan, zap_channel_state_t sta
switch(state) { switch(state) {
case ZAP_CHANNEL_STATE_DOWN: case ZAP_CHANNEL_STATE_DOWN:
case ZAP_CHANNEL_STATE_BUSY: case ZAP_CHANNEL_STATE_BUSY:
case ZAP_CHANNEL_STATE_RESTART:
ok = 1; ok = 1;
break; break;
default: default:
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
#endif #endif
#define LINE "--------------------------------------------------------------------------------" #define LINE "--------------------------------------------------------------------------------"
#define IODEBUG //#define IODEBUG
static L2ULONG zap_time_now() static L2ULONG zap_time_now()
{ {
...@@ -141,6 +141,7 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen) ...@@ -141,6 +141,7 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
} }
} }
break; break;
case Q931mes_RELEASE:
case Q931mes_RELEASE_COMPLETE: case Q931mes_RELEASE_COMPLETE:
{ {
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_DOWN); 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) ...@@ -151,6 +152,7 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
Q931ie_Cause *cause = Q931GetIEPtr(gen->Cause, gen->buf); Q931ie_Cause *cause = Q931GetIEPtr(gen->Cause, gen->buf);
zchan->caller_data.hangup_cause = cause->Value; zchan->caller_data.hangup_cause = cause->Value;
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_TERMINATING); zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_TERMINATING);
} }
break; break;
case Q931mes_ALERTING: case Q931mes_ALERTING:
...@@ -196,7 +198,6 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen) ...@@ -196,7 +198,6 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
zchan->caller_data.raw_data_len = cplen; zchan->caller_data.raw_data_len = cplen;
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_RING); zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_RING);
fail = 0; 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) ...@@ -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; zap_isdn_data_t *isdn_data = span->signal_data;
#ifdef IODEBUG #ifdef IODEBUG
//char bb[4096] = ""; char bb[4096] = "";
//print_hex_bytes(msg, len, bb, sizeof(bb)); print_hex_bytes(msg, len, bb, sizeof(bb));
//print_bits(msg, (int)len, bb, sizeof(bb), ZAP_ENDIAN_LITTLE, 0); 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); zap_log(ZAP_LOG_DEBUG, "WRITE %d\n%s\n%s\n\n", (int)len, LINE, bb);
#endif #endif
...@@ -563,11 +564,11 @@ static void *zap_isdn_run(zap_thread_t *me, void *obj) ...@@ -563,11 +564,11 @@ static void *zap_isdn_run(zap_thread_t *me, void *obj)
len = sizeof(buf); len = sizeof(buf);
if (zap_channel_read(isdn_data->dchan, buf, &len) == ZAP_SUCCESS) { if (zap_channel_read(isdn_data->dchan, buf, &len) == ZAP_SUCCESS) {
#ifdef IODEBUG #ifdef IODEBUG
//char bb[4096] = ""; char bb[4096] = "";
//print_hex_bytes(buf, len, bb, sizeof(bb)); print_hex_bytes(buf, len, bb, sizeof(bb));
//print_bits(buf, (int)len, bb, sizeof(bb), ZAP_ENDIAN_LITTLE, 0); 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); zap_log(ZAP_LOG_DEBUG, "READ %d\n%s\n%s\n\n", (int)len, LINE, bb);
#endif #endif
Q921QueueHDLCFrame(&isdn_data->q921, buf, (int)len); Q921QueueHDLCFrame(&isdn_data->q921, buf, (int)len);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论