Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals

callerid.c File Reference

#include <time.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
#include <asterisk/ulaw.h>
#include <asterisk/alaw.h>
#include <asterisk/frame.h>
#include <asterisk/callerid.h>
#include <asterisk/logger.h>
#include <asterisk/fskmodem.h>
#include <asterisk/utils.h>

Include dependency graph for callerid.c:

Include dependency graph

Go to the source code of this file.

Data Structures

struct  callerid_state

Defines

#define CALLERID_SPACE   2200.0 /* 2200 hz for "0" */
#define CALLERID_MARK   1200.0 /* 1200 hz for "1" */
#define SAS_FREQ   440.0
#define CAS_FREQ1   2130.0
#define CAS_FREQ2   2750.0

Functions

void callerid_init (void)
 CallerID Initialization.

callerid_statecallerid_new (void)
 Create a callerID state machine.

void callerid_get (struct callerid_state *cid, char **name, char **number, int *flags)
 Extract info out of callerID state machine. Flags are listed above.

int ast_gen_cas (unsigned char *outbuf, int sendsas, int len, int codec)
 Generate a CAS (CPE Alert Signal) tone for 'n' samples.

int callerid_feed (struct callerid_state *cid, unsigned char *ubuf, int len, int codec)
 Read samples into the state machine.

void callerid_free (struct callerid_state *cid)
 Free a callerID state.

int vmwi_generate (unsigned char *buf, int active, int mdmf, int codec)
 Generate message waiting indicator.

int callerid_generate (unsigned char *buf, char *number, char *name, int flags, int callwaiting, int codec)
 Generates a CallerID FSK stream in ulaw format suitable for transmission.

void ast_shrink_phone_number (char *n)
 Shrink a phone number in place to just digits (more accurately it just removes ()'s, .'s, and -'s...

int ast_isphonenumber (char *n)
 Check if a string consists only of digits. Returns non-zero if so.

int ast_callerid_parse (char *instr, char **name, char **location)
 Destructively parse inbuf into name and location (or number).

int ast_callerid_generate (unsigned char *buf, char *callerid, int codec)
 Generate Caller-ID spill from the "callerid" field of asterisk (in e-mail address like format).

int ast_callerid_callwaiting_generate (unsigned char *buf, char *callerid, int codec)
 Generate Caller-ID spill from the "callerid" field of asterisk (in e-mail address like format) but in a format suitable for Call Waiting(tm)'s Caller*ID(tm).


Variables

float cid_dr [4]
float cid_di [4]
float clidsb = 8000.0 / 1200.0
float sasdr
float sasdi
float casdr1
float casdi1
float casdr2
float casdi2


Define Documentation

#define CALLERID_MARK   1200.0 /* 1200 hz for "1" */
 

Definition at line 53 of file callerid.c.

Referenced by callerid_init().

#define CALLERID_SPACE   2200.0 /* 2200 hz for "0" */
 

Definition at line 52 of file callerid.c.

Referenced by callerid_init().

#define CAS_FREQ1   2130.0
 

Definition at line 55 of file callerid.c.

Referenced by callerid_init().

#define CAS_FREQ2   2750.0
 

Definition at line 56 of file callerid.c.

Referenced by callerid_init().

#define SAS_FREQ   440.0
 

Definition at line 54 of file callerid.c.

Referenced by callerid_init().


Function Documentation

int ast_callerid_callwaiting_generate unsigned char *  buf,
char *  astcid,
int  codec
 

Generate Caller-ID spill from the "callerid" field of asterisk (in e-mail address like format) but in a format suitable for Call Waiting(tm)'s Caller*ID(tm).

See ast_callerid_generate for other details

Definition at line 591 of file callerid.c.

00592 { 00593 return __ast_callerid_generate(buf, callerid, 1, codec); 00594 }

int ast_callerid_generate unsigned char *  buf,
char *  astcid,
int  codec
 

Generate Caller-ID spill from the "callerid" field of asterisk (in e-mail address like format).

Parameters:
buf buffer for output samples. See callerid_generate() for details regarding buffer.
astcid Asterisk format callerid string, taken from the callerid field of asterisk.
codec Asterisk codec (either AST_FORMAT_ALAW or AST_FORMAT_ULAW)
Acts like callerid_generate except uses an asterisk format callerid string.

Definition at line 586 of file callerid.c.

00587 { 00588 return __ast_callerid_generate(buf, callerid, 0, codec); 00589 }

int ast_callerid_parse char *  instr,
char **  name,
char **  location
 

Destructively parse inbuf into name and location (or number).

Parameters:
inbuf buffer of callerid stream (in audio form) to be parsed. Warning, data in buffer is changed.
name address of a pointer-to-char for the name value of the stream.
location address of a pointer-to-char for the phone number value of the stream. Parses callerid stream from inbuf and changes into useable form, outputed in name and location. Returns 0 on success, -1 on failure.

Definition at line 520 of file callerid.c.

References ast_isphonenumber(), and ast_shrink_phone_number().

Referenced by ast_cdr_init(), ast_cdr_setcid(), ast_cdr_update(), ast_privacy_check(), and ast_privacy_set().

00521 { 00522 char *ns, *ne; 00523 char *ls, *le; 00524 char tmp[256]; 00525 /* Try for "name" <location> format or 00526 name <location> format */ 00527 if ((ls = strchr(instr, '<')) && (le = strchr(ls, '>'))) { 00528 /* Found the location */ 00529 *le = '\0'; 00530 *ls = '\0'; 00531 *location = ls + 1; 00532 if ((ns = strchr(instr, '\"')) && (ne = strchr(ns + 1, '\"'))) { 00533 /* Get name out of quotes */ 00534 *ns = '\0'; 00535 *ne = '\0'; 00536 *name = ns + 1; 00537 return 0; 00538 } else { 00539 /* Just trim off any trailing spaces */ 00540 *name = instr; 00541 while(!ast_strlen_zero(instr) && (instr[strlen(instr) - 1] < 33)) 00542 instr[strlen(instr) - 1] = '\0'; 00543 /* And leading spaces */ 00544 while(**name && (**name < 33)) 00545 (*name)++; 00546 return 0; 00547 } 00548 } else { 00549 strncpy(tmp, instr, sizeof(tmp)-1); 00550 ast_shrink_phone_number(tmp); 00551 if (ast_isphonenumber(tmp)) { 00552 /* Assume it's just a location */ 00553 *name = NULL; 00554 *location = instr; 00555 } else { 00556 /* Assume it's just a name. Make sure it's not quoted though */ 00557 *name = instr; 00558 while(*(*name) && ((*(*name) < 33) || (*(*name) == '\"'))) (*name)++; 00559 ne = *name + strlen(*name) - 1; 00560 while((ne > *name) && ((*ne < 33) || (*ne == '\"'))) { *ne = '\0'; ne--; } 00561 *location = NULL; 00562 } 00563 return 0; 00564 } 00565 return -1; 00566 }

int ast_gen_cas unsigned char *  outbuf,
int  sas,
int  len,
int  codec
 

Generate a CAS (CPE Alert Signal) tone for 'n' samples.

Parameters:
outbuf Allocated buffer for data. Must be at least 2400 bytes unless no SAS is desired
sas Non-zero if CAS should be preceeded by SAS
len How many samples to generate.
codec Which codec (AST_FORMAT_ALAW or AST_FORMAT_ULAW) Returns -1 on error (if len is less than 2400), 0 on success.

Definition at line 150 of file callerid.c.

References casdi1, casdi2, casdr1, casdr2, sasdi, and sasdr.

00151 { 00152 int pos = 0; 00153 int saslen=2400; 00154 float cr1 = 1.0; 00155 float ci1 = 0.0; 00156 float cr2 = 1.0; 00157 float ci2 = 0.0; 00158 if (sendsas) { 00159 if (len < saslen) 00160 return -1; 00161 gen_tone(outbuf, saslen, codec, sasdr, sasdi, &cr1, &ci1); 00162 len -= saslen; 00163 pos += saslen; 00164 cr2 = cr1; 00165 ci2 = ci1; 00166 } 00167 gen_tones(outbuf + pos, len, codec, casdr1, casdi1, casdr2, casdi2, &cr1, &ci1, &cr2, &ci2); 00168 return 0; 00169 }

int ast_isphonenumber char *  n  ) 
 

Check if a string consists only of digits. Returns non-zero if so.

Parameters:
n number to be checked. Returns 0 if n is a number, 1 if it's not.

Definition at line 509 of file callerid.c.

Referenced by ast_callerid_parse().

00510 { 00511 int x; 00512 if (!n || ast_strlen_zero(n)) 00513 return 0; 00514 for (x=0;n[x];x++) 00515 if (!strchr("0123456789*#+", n[x])) 00516 return 0; 00517 return 1; 00518 }

void ast_shrink_phone_number char *  n  ) 
 

Shrink a phone number in place to just digits (more accurately it just removes ()'s, .'s, and -'s...

Parameters:
n The number to be stripped/shrunk Returns nothing important

Definition at line 500 of file callerid.c.

Referenced by ast_callerid_parse(), ast_cdr_init(), ast_cdr_setcid(), ast_cdr_update(), ast_privacy_check(), and ast_privacy_set().

00501 { 00502 int x,y=0; 00503 for (x=0;n[x];x++) 00504 if (!strchr("( )-.", n[x])) 00505 n[y++] = n[x]; 00506 n[y] = '\0'; 00507 }

int callerid_feed struct callerid_state cid,
unsigned char *  ubuf,
int  samples,
int  codec
 

Read samples into the state machine.

Parameters:
cid Which state machine to act upon
buffer containing your samples
samples number of samples contained within the buffer.
codec which codec (AST_FORMAT_ALAW or AST_FORMAT_ULAW)
Send received audio to the Caller*ID demodulator. Returns -1 on error, 0 for "needs more samples", and 1 if the CallerID spill reception is complete.

Definition at line 171 of file callerid.c.

References ast_log(), AST_XLAW, CID_PRIVATE_NAME, CID_PRIVATE_NUMBER, CID_UNKNOWN_NAME, CID_UNKNOWN_NUMBER, callerid_state::cksum, callerid_state::flags, free, fsk_serie(), callerid_state::fskd, callerid_state::len, LOG_ERROR, LOG_NOTICE, LOG_WARNING, malloc, callerid_state::name, callerid_state::number, callerid_state::oldlen, callerid_state::oldstuff, callerid_state::pos, callerid_state::rawdata, callerid_state::sawflag, and callerid_state::type.

00172 { 00173 int mylen = len; 00174 int olen; 00175 int b = 'X'; 00176 int res; 00177 int x; 00178 short *buf = malloc(2 * len + cid->oldlen); 00179 short *obuf = buf; 00180 if (!buf) { 00181 ast_log(LOG_WARNING, "Out of memory\n"); 00182 return -1; 00183 } 00184 memset(buf, 0, 2 * len + cid->oldlen); 00185 memcpy(buf, cid->oldstuff, cid->oldlen); 00186 mylen += cid->oldlen/2; 00187 for (x=0;x<len;x++) 00188 buf[x+cid->oldlen/2] = AST_XLAW(ubuf[x]); 00189 while(mylen >= 80) { 00190 olen = mylen; 00191 res = fsk_serie(&cid->fskd, buf, &mylen, &b); 00192 if (mylen < 0) { 00193 ast_log(LOG_ERROR, "fsk_serie made mylen < 0 (%d)\n", mylen); 00194 return -1; 00195 } 00196 buf += (olen - mylen); 00197 if (res < 0) { 00198 ast_log(LOG_NOTICE, "fsk_serie failed\n"); 00199 return -1; 00200 } 00201 if (res == 1) { 00202 /* Ignore invalid bytes */ 00203 if (b > 0xff) 00204 continue; 00205 switch(cid->sawflag) { 00206 case 0: /* Look for flag */ 00207 if (b == 'U') 00208 cid->sawflag = 2; 00209 break; 00210 case 2: /* Get lead-in */ 00211 if ((b == 0x04) || (b == 0x80)) { 00212 cid->type = b; 00213 cid->sawflag = 3; 00214 cid->cksum = b; 00215 } 00216 break; 00217 case 3: /* Get length */ 00218 /* Not a lead in. We're ready */ 00219 cid->sawflag = 4; 00220 cid->len = b; 00221 cid->pos = 0; 00222 cid->cksum += b; 00223 break; 00224 case 4: /* Retrieve message */ 00225 if (cid->pos >= 128) { 00226 ast_log(LOG_WARNING, "Caller ID too long???\n"); 00227 return -1; 00228 } 00229 cid->rawdata[cid->pos++] = b; 00230 cid->len--; 00231 cid->cksum += b; 00232 if (!cid->len) { 00233 cid->rawdata[cid->pos] = '\0'; 00234 cid->sawflag = 5; 00235 } 00236 break; 00237 case 5: /* Check checksum */ 00238 if (b != (256 - (cid->cksum & 0xff))) { 00239 ast_log(LOG_NOTICE, "Caller*ID failed checksum\n"); 00240 /* Try again */ 00241 cid->sawflag = 0; 00242 break; 00243 } 00244 00245 strcpy(cid->number, ""); 00246 strcpy(cid->name, ""); 00247 /* If we get this far we're fine. */ 00248 if (cid->type == 0x80) { 00249 /* MDMF */ 00250 /* Go through each element and process */ 00251 for (x=0;x< cid->pos;) { 00252 switch(cid->rawdata[x++]) { 00253 case 1: 00254 /* Date */ 00255 break; 00256 case 2: /* Number */ 00257 case 3: /* Number (for Zebble) */ 00258 case 4: /* Number */ 00259 res = cid->rawdata[x]; 00260 if (res > 32) { 00261 ast_log(LOG_NOTICE, "Truncating long caller ID number from %d bytes to 32\n", cid->rawdata[x]); 00262 res = 32; 00263 } 00264 memcpy(cid->number, cid->rawdata + x + 1, res); 00265 /* Null terminate */ 00266 cid->number[res] = '\0'; 00267 break; 00268 case 7: /* Name */ 00269 case 8: /* Name */ 00270 res = cid->rawdata[x]; 00271 if (res > 32) { 00272 ast_log(LOG_NOTICE, "Truncating long caller ID name from %d bytes to 32\n", cid->rawdata[x]); 00273 res = 32; 00274 } 00275 memcpy(cid->name, cid->rawdata + x + 1, res); 00276 cid->name[res] = '\0'; 00277 break; 00278 case 22: /* Something French */ 00279 break; 00280 default: 00281 ast_log(LOG_NOTICE, "Unknown IE %d\n", cid->rawdata[x-1]); 00282 } 00283 x += cid->rawdata[x]; 00284 x++; 00285 } 00286 } else { 00287 /* SDMF */ 00288 strncpy(cid->number, cid->rawdata + 8, sizeof(cid->number)-1); 00289 } 00290 /* Update flags */ 00291 cid->flags = 0; 00292 if (!strcmp(cid->number, "P")) { 00293 strcpy(cid->number, ""); 00294 cid->flags |= CID_PRIVATE_NUMBER; 00295 } else if (!strcmp(cid->number, "O") || ast_strlen_zero(cid->number)) { 00296 strcpy(cid->number, ""); 00297 cid->flags |= CID_UNKNOWN_NUMBER; 00298 } 00299 if (!strcmp(cid->name, "P")) { 00300 strcpy(cid->name, ""); 00301 cid->flags |= CID_PRIVATE_NAME; 00302 } else if (!strcmp(cid->name, "O") || ast_strlen_zero(cid->name)) { 00303 strcpy(cid->name, ""); 00304 cid->flags |= CID_UNKNOWN_NAME; 00305 } 00306 return 1; 00307 break; 00308 default: 00309 ast_log(LOG_ERROR, "Dunno what to do with a digit in sawflag %d\n", cid->sawflag); 00310 } 00311 } 00312 } 00313 if (mylen) { 00314 memcpy(cid->oldstuff, buf, mylen * 2); 00315 cid->oldlen = mylen * 2; 00316 } else 00317 cid->oldlen = 0; 00318 free(obuf); 00319 return 0; 00320 }

void callerid_free struct callerid_state cid  ) 
 

Free a callerID state.

Parameters:
cid This is the callerid_state state machine to free This function frees callerid_state cid.

Definition at line 322 of file callerid.c.

References free.

00323 { 00324 free(cid); 00325 }

int callerid_generate unsigned char *  buf,
char *  number,
char *  name,
int  flags,
int  callwaiting,
int  codec
 

Generates a CallerID FSK stream in ulaw format suitable for transmission.

Parameters:
buf Buffer to use. If "buf" is supplied, it will use that buffer instead of allocating its own. "buf" must be at least 32000 bytes in size of you want to be sure you don't have an overrun.
number Use NULL for no number or "P" for "private"
name name to be used
callwaiting callwaiting flag
codec -- either AST_FORMAT_ULAW or AST_FORMAT_ALAW This function creates a stream of callerid (a callerid spill) data in ulaw format. It returns the size (in bytes) of the data (if it returns a size of 0, there is probably an error)

Definition at line 458 of file callerid.c.

References PUT_BYTE, PUT_CLID, and PUT_CLID_MARKMS.

00459 { 00460 int bytes=0; 00461 int x, sum; 00462 int len; 00463 /* Initial carriers (real/imaginary) */ 00464 float cr = 1.0; 00465 float ci = 0.0; 00466 float scont = 0.0; 00467 unsigned char msg[256]; 00468 len = callerid_genmsg(msg, sizeof(msg), number, name, flags); 00469 if (!callwaiting) { 00470 /* Wait a half a second */ 00471 for (x=0;x<4000;x++) 00472 PUT_BYTE(0x7f); 00473 /* Transmit 30 0x55's (looks like a square wave) for channel seizure */ 00474 for (x=0;x<30;x++) 00475 PUT_CLID(0x55); 00476 } 00477 /* Send 150ms of callerid marks */ 00478 for (x=0;x<150;x++) 00479 PUT_CLID_MARKMS; 00480 /* Send 0x80 indicating MDMF format */ 00481 PUT_CLID(0x80); 00482 /* Put length of whole message */ 00483 PUT_CLID(len); 00484 sum = 0x80 + strlen(msg); 00485 /* Put each character of message and update checksum */ 00486 for (x=0;x<len; x++) { 00487 PUT_CLID(msg[x]); 00488 sum += msg[x]; 00489 } 00490 /* Send 2's compliment of sum */ 00491 PUT_CLID(256 - (sum & 255)); 00492 00493 /* Send 50 more ms of marks */ 00494 for (x=0;x<50;x++) 00495 PUT_CLID_MARKMS; 00496 00497 return bytes; 00498 }

void callerid_get struct callerid_state cid,
char **  number,
char **  name,
int *  flags
 

Extract info out of callerID state machine. Flags are listed above.

Parameters:
cid Callerid state machine to act upon
number Pass the address of a pointer-to-char (will contain the phone number)
name Pass the address of a pointer-to-char (will contain the name)
flags Pass the address of an int variable(will contain the various callerid flags)
This function extracts a callerid string out of a callerid_state state machine. If no number is found, *number will be set to NULL. Likewise for the name. Flags can contain any of the following:

Returns nothing.

Definition at line 137 of file callerid.c.

References CID_PRIVATE_NUMBER, CID_UNKNOWN_NAME, CID_UNKNOWN_NUMBER, callerid_state::flags, callerid_state::name, and callerid_state::number.

00138 { 00139 *flags = cid->flags; 00140 if (cid->flags & (CID_UNKNOWN_NAME | CID_PRIVATE_NUMBER)) 00141 *name = NULL; 00142 else 00143 *name = cid->name; 00144 if (cid->flags & (CID_UNKNOWN_NUMBER | CID_PRIVATE_NUMBER)) 00145 *number = NULL; 00146 else 00147 *number = cid->number; 00148 }

void callerid_init void   ) 
 

CallerID Initialization.

Initializes the callerid system. Mostly stuff for inverse FFT

Definition at line 95 of file callerid.c.

References CALLERID_MARK, CALLERID_SPACE, CAS_FREQ1, CAS_FREQ2, casdi1, casdi2, casdr1, casdr2, cid_di, cid_dr, SAS_FREQ, sasdi, and sasdr.

Referenced by main().

00096 { 00097 /* Initialize stuff for inverse FFT */ 00098 cid_dr[0] = cos(CALLERID_SPACE * 2.0 * M_PI / 8000.0); 00099 cid_di[0] = sin(CALLERID_SPACE * 2.0 * M_PI / 8000.0); 00100 cid_dr[1] = cos(CALLERID_MARK * 2.0 * M_PI / 8000.0); 00101 cid_di[1] = sin(CALLERID_MARK * 2.0 * M_PI / 8000.0); 00102 sasdr = cos(SAS_FREQ * 2.0 * M_PI / 8000.0); 00103 sasdi = sin(SAS_FREQ * 2.0 * M_PI / 8000.0); 00104 casdr1 = cos(CAS_FREQ1 * 2.0 * M_PI / 8000.0); 00105 casdi1 = sin(CAS_FREQ1 * 2.0 * M_PI / 8000.0); 00106 casdr2 = cos(CAS_FREQ2 * 2.0 * M_PI / 8000.0); 00107 casdi2 = sin(CAS_FREQ2 * 2.0 * M_PI / 8000.0); 00108 }

struct callerid_state* callerid_new void   ) 
 

Create a callerID state machine.

This function returns a malloc'd instance of the callerid_state data structure. Returns a pointer to a malloc'd callerid_state structure, or NULL on error.

Definition at line 110 of file callerid.c.

References ast_log(), CID_UNKNOWN_NAME, CID_UNKNOWN_NUMBER, LOG_WARNING, and malloc.

00111 { 00112 struct callerid_state *cid; 00113 cid = malloc(sizeof(struct callerid_state)); 00114 if (cid) { 00115 memset(cid, 0, sizeof(struct callerid_state)); 00116 cid->fskd.spb = 7; /* 1200 baud */ 00117 cid->fskd.hdlc = 0; /* Async */ 00118 cid->fskd.nbit = 8; /* 8 bits */ 00119 cid->fskd.nstop = 1; /* 1 stop bit */ 00120 cid->fskd.paridad = 0; /* No parity */ 00121 cid->fskd.bw=1; /* Filter 800 Hz */ 00122 cid->fskd.f_mark_idx = 2; /* 1200 Hz */ 00123 cid->fskd.f_space_idx = 3; /* 2200 Hz */ 00124 cid->fskd.pcola = 0; /* No clue */ 00125 cid->fskd.cont = 0; /* Digital PLL reset */ 00126 cid->fskd.x0 = 0.0; 00127 cid->fskd.state = 0; 00128 memset(cid->name, 0, sizeof(cid->name)); 00129 memset(cid->number, 0, sizeof(cid->number)); 00130 cid->flags = CID_UNKNOWN_NAME | CID_UNKNOWN_NUMBER; 00131 cid->pos = 0; 00132 } else 00133 ast_log(LOG_WARNING, "Out of memory\n"); 00134 return cid; 00135 }

int vmwi_generate unsigned char *  buf,
int  active,
int  mdmf,
int  codec
 

Generate message waiting indicator.

Definition at line 396 of file callerid.c.

References PUT_BYTE, PUT_CLID, and PUT_CLID_MARKMS.

00397 { 00398 unsigned char msg[256]; 00399 int len=0; 00400 int sum; 00401 int x; 00402 int bytes = 0; 00403 float cr = 1.0; 00404 float ci = 0.0; 00405 float scont = 0.0; 00406 if (mdmf) { 00407 /* MDMF Message waiting */ 00408 msg[len++] = 0x82; 00409 /* Length is 3 */ 00410 msg[len++] = 3; 00411 /* IE is "Message Waiting Parameter" */ 00412 msg[len++] = 0xb; 00413 /* Length of IE is one */ 00414 msg[len++] = 1; 00415 /* Active or not */ 00416 if (active) 00417 msg[len++] = 0xff; 00418 else 00419 msg[len++] = 0x00; 00420 } else { 00421 /* SDMF Message waiting */ 00422 msg[len++] = 0x6; 00423 /* Length is 3 */ 00424 msg[len++] = 3; 00425 if (active) { 00426 msg[len++] = 0x42; 00427 msg[len++] = 0x42; 00428 msg[len++] = 0x42; 00429 } else { 00430 msg[len++] = 0x6f; 00431 msg[len++] = 0x6f; 00432 msg[len++] = 0x6f; 00433 } 00434 } 00435 sum = 0; 00436 for (x=0;x<len;x++) 00437 sum += msg[x]; 00438 sum = (256 - (sum & 255)); 00439 msg[len++] = sum; 00440 /* Wait a half a second */ 00441 for (x=0;x<4000;x++) 00442 PUT_BYTE(0x7f); 00443 /* Transmit 30 0x55's (looks like a square wave) for channel seizure */ 00444 for (x=0;x<30;x++) 00445 PUT_CLID(0x55); 00446 /* Send 170ms of callerid marks */ 00447 for (x=0;x<170;x++) 00448 PUT_CLID_MARKMS; 00449 for (x=0;x<len;x++) { 00450 PUT_CLID(msg[x]); 00451 } 00452 /* Send 50 more ms of marks */ 00453 for (x=0;x<50;x++) 00454 PUT_CLID_MARKMS; 00455 return bytes; 00456 }


Variable Documentation

float casdi1
 

Definition at line 50 of file callerid.c.

Referenced by ast_gen_cas(), and callerid_init().

float casdi2
 

Definition at line 50 of file callerid.c.

Referenced by ast_gen_cas(), and callerid_init().

float casdr1
 

Definition at line 50 of file callerid.c.

Referenced by ast_gen_cas(), and callerid_init().

float casdr2
 

Definition at line 50 of file callerid.c.

Referenced by ast_gen_cas(), and callerid_init().

float cid_di[4]
 

Definition at line 47 of file callerid.c.

Referenced by callerid_init().

float cid_dr[4]
 

Definition at line 47 of file callerid.c.

Referenced by callerid_init().

float clidsb = 8000.0 / 1200.0
 

Definition at line 48 of file callerid.c.

float sasdi
 

Definition at line 49 of file callerid.c.

Referenced by ast_gen_cas(), and callerid_init().

float sasdr
 

Definition at line 49 of file callerid.c.

Referenced by ast_gen_cas(), and callerid_init().


Generated on Sat Jun 12 16:41:05 2004 for Asterisk by doxygen 1.3.7