voipblaster.h
上传用户:weyjxb
上传日期:2020-05-18
资源大小:52k
文件大小:11k
源码类别:

多显示器编程

开发平台:

Unix_Linux

  1. /*
  2.  * voipblaster.c
  3.  * (C) Copyright 2001, 2002 by Thomas Davis (tdavis@beeble.homelinux.net)
  4.  * (C) Copyright 2001 by Michael Bosland <mike@ring.org>
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify it
  7.  * under the terms of the GNU General Public License as published by the
  8.  * Free Software Foundation; either version 2 of the License, or (at your
  9.  * option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful, but
  12.  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  13.  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14.  * for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software Foundation,
  18.  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  *
  20.  */
  21. #ifndef _VOIP_BLASTER_H
  22. #define _VOIP_BLASTER_H
  23. /* Buffer up to 300ms in and 3sec out */
  24. #define VB_R_BUFF_LENGTH 240
  25. #define VB_W_BUFF_LENGTH 2400
  26. #define VB_CMD_BUFF_LENGTH 20
  27. #define VB_EVENT_BUFF_LENGTH 20
  28. #define VB_DTMF_BUFF_LENGTH 80
  29. #define DRIVER_DESC "USB VOIPblaster driver"
  30. #if !defined(VOIP_MAX)
  31. #define VOIP_MAX 4
  32. #endif
  33. typedef struct {
  34.         unsigned char low;
  35.         unsigned char high;
  36. } BYTES;
  37. typedef union {
  38.         BYTES bytes;
  39.         short word;
  40. } IXJ_WORD;
  41. typedef struct{
  42.         unsigned int b0:1;
  43.         unsigned int b1:1;
  44.         unsigned int b2:1;
  45.         unsigned int b3:1;
  46.         unsigned int b4:1;
  47.         unsigned int b5:1;
  48.         unsigned int b6:1;
  49.         unsigned int b7:1;
  50. } IXJ_CBITS;
  51. typedef union{
  52.         IXJ_CBITS cbits;
  53.           char  cbyte;
  54. } IXJ_CBYTE;
  55. typedef struct {
  56. unsigned int busytone:1;
  57. unsigned int dialtone:1;
  58. unsigned int ringback:1;
  59. unsigned int ringing:1;
  60. unsigned int playing:1;
  61. unsigned int recording:1;
  62. unsigned int cringing:1;
  63. unsigned int play_first_frame:1;
  64. unsigned int pstn_present:1;
  65. unsigned int pstn_ringing:1;
  66. unsigned int pots_correct:1;
  67. unsigned int pots_pstn:1;
  68. unsigned int dtmf_oob:1; /* DTMF Out-Of-Band */
  69. unsigned int pcmciascp:1; /* SmartCABLE Present */
  70. unsigned int pcmciasct:2; /* SmartCABLE Type */
  71. unsigned int pcmciastate:3; /* SmartCABLE Init State */
  72. unsigned int inwrite:1; /* Currently writing */
  73. unsigned int inread:1; /* Currently reading */
  74. unsigned int incheck:1; /* Currently checking the SmartCABLE */
  75. unsigned int cidplay:1; /* Currently playing Caller ID */
  76. unsigned int cidring:1; /* This is the ring for Caller ID */
  77. unsigned int cidsent:1; /* Caller ID has been sent */
  78. unsigned int cidcw_ack:1; /* Caller ID CW ACK (from CPE) */
  79. unsigned int firstring:1; /* First ring cadence is complete */
  80. unsigned int pstncheck:1; /* Currently checking the PSTN Line */
  81. unsigned int pstn_rmr:1;
  82. unsigned int x:3; /* unsed bits */
  83. } VOIP_FLAGS;
  84. typedef struct {
  85. char enable;
  86. char en_filter;
  87. unsigned int filter;
  88. unsigned int state; /* State 0 when cadence has not started. */
  89. unsigned int on1; /* State 1 */
  90. unsigned long on1min; /* State 1 - 10% + jiffies */
  91.   unsigned long on1dot; /* State 1 + jiffies */
  92. unsigned long on1max; /* State 1 + 10% + jiffies */
  93. unsigned int off1; /* State 2 */
  94. unsigned long off1min;
  95.   unsigned long off1dot; /* State 2 + jiffies */
  96. unsigned long off1max;
  97. unsigned int on2; /* State 3 */
  98. unsigned long on2min;
  99. unsigned long on2dot;
  100. unsigned long on2max;
  101. unsigned int off2; /* State 4 */
  102. unsigned long off2min;
  103.   unsigned long off2dot; /* State 4 + jiffies */
  104. unsigned long off2max;
  105. unsigned int on3; /* State 5 */
  106. unsigned long on3min;
  107. unsigned long on3dot;
  108. unsigned long on3max;
  109. unsigned int off3; /* State 6 */
  110. unsigned long off3min;
  111.   unsigned long off3dot; /* State 6 + jiffies */
  112. unsigned long off3max;
  113. } VOIP_CADENCE_F;
  114. struct queue {
  115. char *buffer;
  116. long head;
  117. long tail;
  118. long count;
  119. long size;
  120. };
  121. struct pipe {
  122. wait_queue_head_t q;
  123. urb_t *urb;
  124. char *buffer;
  125. long head;
  126. long length;
  127. long size;
  128. };
  129. struct usb_voipblaster {
  130. struct usb_device *udev;
  131. struct usb_interface * interface; /* the interface for this device */
  132. unsigned char minor; /* the minor number for this device */
  133. struct semaphore sem;
  134. int open_count;
  135. int ispresent;
  136. char *obuf, ibuf;
  137. struct phone_capability caplist[15];
  138. struct phone_device phone;
  139. struct timer_list timer;
  140. struct fasync_struct *async_queue;
  141. struct proc_dir_entry *dir;
  142. unsigned int DSPbase;
  143. unsigned int board;
  144. unsigned int caps;
  145. unsigned int cardtype;
  146. unsigned int maxrings;
  147. unsigned int ringcnt;
  148. unsigned int ringing;
  149. unsigned int play_codec;
  150. unsigned int rec_codec;
  151. int readers, writers;
  152. int aec_level;
  153. char hookstate;
  154. char tonestate;
  155. char port;
  156. unsigned char dsp_serial[10];
  157. unsigned char dsp_version[10];
  158. char serialnum[30];
  159. char revision[30];
  160. unsigned int serial, winktime;
  161. unsigned int daa_country;
  162. PHONE_CID cid;
  163. PHONE_CID cid_send;
  164. BYTES baseframe;
  165. union telephony_exception ex;
  166. union telephony_exception ex_sig;
  167. int signals[35];
  168. IXJ_SIGDEF sigdef;
  169. VOIP_CADENCE_F cadence_f[6];
  170. VOIP_FLAGS flags;
  171. int ring_cadence;
  172. unsigned long framesread, frameswritten;
  173. unsigned long read_wait, write_wait;
  174. unsigned long drybuffer;
  175. spinlock_t io_lock;
  176. wait_queue_head_t poll_q;
  177. wait_queue_head_t read_q;
  178. wait_queue_head_t write_q;
  179. wait_queue_head_t cmd_q;
  180. wait_queue_head_t event_q;
  181. urb_t *read_urb;
  182. urb_t *write_urb;
  183. urb_t *cmd_urb;
  184. urb_t *event_urb;
  185. char read_buffer[VB_R_BUFF_LENGTH];
  186. char read_buffer_urb[20];
  187. unsigned int read_buffer_ready;
  188. unsigned int read_buffer_in;
  189. unsigned int read_buffer_len;
  190. char write_buffer[VB_W_BUFF_LENGTH];
  191. unsigned int write_buffer_in;
  192. unsigned int write_buffer_len;
  193. char cmd_data[1];
  194. char cmd_buffer[VB_CMD_BUFF_LENGTH];
  195. unsigned int cmd_buffer_in;
  196. unsigned int cmd_buffer_len;
  197. char event_data[1];
  198. char event_buffer[VB_EVENT_BUFF_LENGTH];
  199. unsigned int event_buffer_in;
  200. unsigned int event_buffer_out;
  201. unsigned int event_buffer_len;
  202. char dtmf_buffer[VB_DTMF_BUFF_LENGTH];
  203. unsigned int dtmf_buffer_in;
  204. unsigned int dtmf_buffer_out;
  205. unsigned int dtmf_buffer_len;
  206. struct queue wq, rq, cq, eq;
  207. };
  208. /*
  209.  * These are hex commands that are sent to the Voipblaster
  210.  */
  211. /* ----------------------------------------------------------------------------
  212.  *  various commands that can send to the VOIP Blaster device
  213.  * ----------------------------------------------------------------------------*/
  214. #define VB_CMD_NONE       0x00 /* (NONE) */
  215. #define VB_CMD_PHONE_OFF  0x01 /* (SWITCHRELAYPSTN) drop loop current */
  216. #define VB_CMD_PHONE_ON   0x02 /* (SWITCHRELAYIGSP) used on startup */
  217. #define VB_CMD_RING_ON    0x03 /* (STARTFING) start ringing */
  218. #define VB_CMD_RING_OFF   0x04 /* (STOPRING) used on startup & to stop ringing */
  219. #define VB_CMD_VOUT_START 0x05 /* (PLAYBACKSTART ) start voice out */
  220. #define VB_CMD_VOUT_STOP  0x06 /* (PLAYBACKSTOP  ) */
  221. #define VB_CMD_VINP_START 0x07 /* (RECORDINGSTART) */
  222. #define VB_CMD_VINP_STOP  0x08 /* (RECORDINGSTOP ) */
  223. #define VB_CMD_UNKNOWN_1  0x09 /* (TESTSTART     ) don't know what this does */
  224. #define VB_CMD_UNKNOWN_2  0x0a /* (TESTSTOP      ) don't know what this does */
  225. #define VB_CMD_UNKNOWN_3  0x0b /* (SENDFAXTONE   ) doesn't seem to do anything */
  226. /* ---------------------------------------------------------------------------- */
  227. #define VB_CMD_ON_HOOK    0x0c /* (APPONHOOK     ) go offhook for headset */
  228. #define VB_CMD_OFF_HOOK   0x0d /* (APPOFFHOOK    ) go  onhook for headset */
  229. #define VB_CMD_SETUP_MODE 0x0e /* goto setup mode? */
  230. #define VB_CMD_VOUT_DONE  0x0f /* voice in/out off, report output drained */
  231. /* ---------------------------------------------------------------------------- */
  232. #define VB_CMD_0x10       0x10 /* used in file output, seems ok without */
  233. #define VB_CMD_0x11       0x11 /* used in file output, seems ok without */
  234. #define VB_CMD_MUTE_ON    0x12 /* audio mute on */
  235. #define VB_CMD_MUTE_OFF   0x13 /* audio mute off */
  236. /* ---------------------------------------------------------------------------- */
  237. #define VB_CMD_VOL_0      0x34 /* set volume (min) */
  238. #define VB_CMD_VOL_1      0x35 /* set volume */
  239. #define VB_CMD_VOL_2      0x36 /* set volume */
  240. #define VB_CMD_VOL_3      0x37 /* set volume (default) */
  241. #define VB_CMD_VOL_4      0x38 /* set volume */
  242. #define VB_CMD_VOL_5      0x39 /* set volume */
  243. #define VB_CMD_VOL_6      0x3a /* set volume (max) */
  244. #if 0
  245. #define VB_CMD_PSTN 0x01 /* Switch Relay pstn(?) - Happens when shutting down. Turn off dialtone? */
  246. #define VB_CMD_IGSP 0x02 /* Switch Relay igsp(?) - Happens when starting up. Turn on dialtone? */
  247. #define VB_CMD_RINGSTART 0x03 /* Ring the phone. */
  248. #define VB_CMD_RINGSTOP 0x04 /* Stop ringing the phone. */
  249. #define VB_CMD_AUDIOENABLE 0x05 /* Play Audio? - Happens just before 11. Could be close audio or reset... */
  250. #define VB_CMD_UNKN1 0x07 /* ? - Only happens when someone on other end... - Lots of these happen.. */
  251. #define VB_CMD_UNKN2 0x0c /* ? - Can happen when no one on other end of the line... */
  252. #define VB_CMD_UNKN3 0x0f /* ? - Can happen when no one on other end of the line... - Last command transmitted? */
  253. #endif
  254. /* These are events that return from the Voipblaster */
  255. #define VB_EVENT_NULL 0x00 /* Empty event occurred. */
  256. #define VB_EVENT_OFFHOOK 0x01 /* Off Hook */
  257. #define VB_EVENT_ONHOOK 0x02 /* On Hook */
  258. #define VB_EVENT_RINGING_ON 0x05 /* is ringing */
  259. #define VB_EVENT_RINGING_OFF  0x06 /* Stop Ringing Executed. */
  260. #define VB_EVENT_HEADSET_IN 0x08 /* headset plugged in */
  261. #define VB_EVENT_HEADSET_OUT 0x09 /* headset removed */
  262. #define VB_EVENT_VOUT_DONE 0x0c /* voice output done */
  263. #define VB_EVENT_DTMFSTAR 0x2a /* DTMF * */
  264. #define VB_EVENT_DTMFPND  0x23 /* DTMF # */
  265. #define VB_EVENT_DTMF0  0x30 /* DTMF 0 */
  266. #define VB_EVENT_DTMF1  0x31 /* DTMF 1 */
  267. #define VB_EVENT_DTMF2  0x32 /* DTMF 2 */
  268. #define VB_EVENT_DTMF3  0x33 /* DTMF 3 */
  269. #define VB_EVENT_DTMF4  0x34 /* DTMF 4 */
  270. #define VB_EVENT_DTMF5  0x35 /* DTMF 5 */
  271. #define VB_EVENT_DTMF6  0x36 /* DTMF 6 */
  272. #define VB_EVENT_DTMF7  0x37 /* DTMF 7 */
  273. #define VB_EVENT_DTMF8  0x38 /* DTMF 8 */
  274. #define VB_EVENT_DTMF9  0x39 /* DTMF 9 */
  275. #if 0
  276. /* ----------------------------------------------------------------------------
  277.    various status that can be returned by the VOIP Blaster device
  278.    ---------------------------------------------------------------------------- */
  279. #define STATUS_NONE        0x00  /* (NONE         ) */
  280. #define STATUS_OFF_HOOK    0x01  /* (OFFHOOK      ) */
  281. #define STATUS_ON_HOOK     0x02  /* (ONHOOK       ) */
  282. #define STATUS_DEBUG       0x00  /* (DEBUG        ) ?? not used ?? */
  283. #define STATUS_RINGDETECT  0x00  /* (RINGDETECT   ) ?? not used ?? */
  284. #define STATUS_RINGING_ON  0x05  /* (STARTRINGEXEC) is  ringing */
  285. #define STATUS_RINGING_OFF 0x06  /* (STOPRINGEXEC ) not ringing */
  286. #define STATUS_HEADSET_IN  0x08  /* 0000-1000       headset plugged in */
  287. #define STATUS_HEADSET_OUT 0x09  /* 0000-1001       headset un-plugged */
  288. #define STATUS_0x0a        0x0a  /* 0000-1010       setup accepted? */
  289. #define STATUS_VOUT_DONE   0x0c  /* 0000-1100       voice output done */
  290. #endif
  291. #endif
  292. /*
  293.  * Local variables:
  294.  *  c-indent-level: 8
  295.  *  c-basic-offset: 8
  296.  *  tab-width: 8
  297.  * End:
  298.  */