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: 153365 $")
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
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 static char *app = "GetCPEID";
00052
00053 static int cpeid_setstatus(struct ast_channel *chan, char *stuff[], int voice)
00054 {
00055 int justify[5] = { ADSI_JUST_CENT, ADSI_JUST_LEFT, ADSI_JUST_LEFT, ADSI_JUST_LEFT };
00056 char *tmp[5];
00057 int x;
00058 for (x=0;x<4;x++)
00059 tmp[x] = stuff[x];
00060 tmp[4] = NULL;
00061 return ast_adsi_print(chan, tmp, justify, voice);
00062 }
00063
00064 static int cpeid_exec(struct ast_channel *chan, void *idata)
00065 {
00066 int res=0;
00067 unsigned char cpeid[4];
00068 int gotgeometry = 0;
00069 int gotcpeid = 0;
00070 int width, height, buttons;
00071 char *data[4];
00072 unsigned int x;
00073
00074 for (x = 0; x < 4; x++)
00075 data[x] = alloca(80);
00076
00077 strcpy(data[0], "** CPE Info **");
00078 strcpy(data[1], "Identifying CPE...");
00079 strcpy(data[2], "Please wait...");
00080 res = ast_adsi_load_session(chan, NULL, 0, 1);
00081 if (res > 0) {
00082 cpeid_setstatus(chan, data, 0);
00083 res = ast_adsi_get_cpeid(chan, cpeid, 0);
00084 if (res > 0) {
00085 gotcpeid = 1;
00086 ast_verb(3, "Got CPEID of '%02x:%02x:%02x:%02x' on '%s'\n", cpeid[0], cpeid[1], cpeid[2], cpeid[3], chan->name);
00087 }
00088 if (res > -1) {
00089 strcpy(data[1], "Measuring CPE...");
00090 strcpy(data[2], "Please wait...");
00091 cpeid_setstatus(chan, data, 0);
00092 res = ast_adsi_get_cpeinfo(chan, &width, &height, &buttons, 0);
00093 if (res > -1) {
00094 ast_verb(3, "CPE has %d lines, %d columns, and %d buttons on '%s'\n", height, width, buttons, chan->name);
00095 gotgeometry = 1;
00096 }
00097 }
00098 if (res > -1) {
00099 if (gotcpeid)
00100 snprintf(data[1], 80, "CPEID: %02x:%02x:%02x:%02x", cpeid[0], cpeid[1], cpeid[2], cpeid[3]);
00101 else
00102 strcpy(data[1], "CPEID Unknown");
00103 if (gotgeometry)
00104 snprintf(data[2], 80, "Geom: %dx%d, %d buttons", width, height, buttons);
00105 else
00106 strcpy(data[2], "Geometry unknown");
00107 strcpy(data[3], "Press # to exit");
00108 cpeid_setstatus(chan, data, 1);
00109 for(;;) {
00110 res = ast_waitfordigit(chan, 1000);
00111 if (res < 0)
00112 break;
00113 if (res == '#') {
00114 res = 0;
00115 break;
00116 }
00117 }
00118 ast_adsi_unload_session(chan);
00119 }
00120 }
00121
00122 return res;
00123 }
00124
00125 static int unload_module(void)
00126 {
00127 return ast_unregister_application(app);
00128 }
00129
00130 static int load_module(void)
00131 {
00132 return ast_register_application_xml(app, cpeid_exec);
00133 }
00134
00135 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Get ADSI CPE ID");