00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "asterisk.h"
00029
00030 ASTERISK_FILE_VERSION(__FILE__, "$Revision: 123332 $")
00031
00032 #include "asterisk/lock.h"
00033 #include "asterisk/file.h"
00034 #include "asterisk/channel.h"
00035 #include "asterisk/pbx.h"
00036 #include "asterisk/module.h"
00037 #include "asterisk/adsi.h"
00038
00039 static char *app = "GetCPEID";
00040
00041 static char *synopsis = "Get ADSI CPE ID";
00042
00043 static char *descrip =
00044 " GetCPEID(): Obtains and displays ADSI CPE ID and other information in order\n"
00045 "to properly setup dahdi.conf for on-hook operations.\n";
00046
00047
00048 static int cpeid_setstatus(struct ast_channel *chan, char *stuff[], int voice)
00049 {
00050 int justify[5] = { ADSI_JUST_CENT, ADSI_JUST_LEFT, ADSI_JUST_LEFT, ADSI_JUST_LEFT };
00051 char *tmp[5];
00052 int x;
00053 for (x=0;x<4;x++)
00054 tmp[x] = stuff[x];
00055 tmp[4] = NULL;
00056 return ast_adsi_print(chan, tmp, justify, voice);
00057 }
00058
00059 static int cpeid_exec(struct ast_channel *chan, void *idata)
00060 {
00061 int res=0;
00062 unsigned char cpeid[4];
00063 int gotgeometry = 0;
00064 int gotcpeid = 0;
00065 int width, height, buttons;
00066 char *data[4];
00067 unsigned int x;
00068
00069 for (x = 0; x < 4; x++)
00070 data[x] = alloca(80);
00071
00072 strcpy(data[0], "** CPE Info **");
00073 strcpy(data[1], "Identifying CPE...");
00074 strcpy(data[2], "Please wait...");
00075 res = ast_adsi_load_session(chan, NULL, 0, 1);
00076 if (res > 0) {
00077 cpeid_setstatus(chan, data, 0);
00078 res = ast_adsi_get_cpeid(chan, cpeid, 0);
00079 if (res > 0) {
00080 gotcpeid = 1;
00081 ast_verb(3, "Got CPEID of '%02x:%02x:%02x:%02x' on '%s'\n", cpeid[0], cpeid[1], cpeid[2], cpeid[3], chan->name);
00082 }
00083 if (res > -1) {
00084 strcpy(data[1], "Measuring CPE...");
00085 strcpy(data[2], "Please wait...");
00086 cpeid_setstatus(chan, data, 0);
00087 res = ast_adsi_get_cpeinfo(chan, &width, &height, &buttons, 0);
00088 if (res > -1) {
00089 ast_verb(3, "CPE has %d lines, %d columns, and %d buttons on '%s'\n", height, width, buttons, chan->name);
00090 gotgeometry = 1;
00091 }
00092 }
00093 if (res > -1) {
00094 if (gotcpeid)
00095 snprintf(data[1], 80, "CPEID: %02x:%02x:%02x:%02x", cpeid[0], cpeid[1], cpeid[2], cpeid[3]);
00096 else
00097 strcpy(data[1], "CPEID Unknown");
00098 if (gotgeometry)
00099 snprintf(data[2], 80, "Geom: %dx%d, %d buttons", width, height, buttons);
00100 else
00101 strcpy(data[2], "Geometry unknown");
00102 strcpy(data[3], "Press # to exit");
00103 cpeid_setstatus(chan, data, 1);
00104 for(;;) {
00105 res = ast_waitfordigit(chan, 1000);
00106 if (res < 0)
00107 break;
00108 if (res == '#') {
00109 res = 0;
00110 break;
00111 }
00112 }
00113 ast_adsi_unload_session(chan);
00114 }
00115 }
00116
00117 return res;
00118 }
00119
00120 static int unload_module(void)
00121 {
00122 return ast_unregister_application(app);
00123 }
00124
00125 static int load_module(void)
00126 {
00127 return ast_register_application(app, cpeid_exec, synopsis, descrip);
00128 }
00129
00130 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Get ADSI CPE ID");