]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
mod_gsmopen: get device manufacturer, model and firmware version info.
authorDušan Dragić <dragic.dusan@gmail.com>
Thu, 11 Sep 2014 21:14:09 +0000 (23:14 +0200)
committerDušan Dragić <dragic.dusan@gmail.com>
Sun, 21 Sep 2014 18:14:05 +0000 (20:14 +0200)
src/mod/endpoints/mod_gsmopen/gsmopen.h
src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp
src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp

index 97731c676d661b8da202c520758b40be933b4d07..9b632f9654448d533c69875caed8d31d6daa8b8f 100644 (file)
@@ -453,6 +453,12 @@ struct private_object {
        int requesting_operator_name;
        char subscriber_number[128];
        int requesting_subscriber_number;
+       char device_mfg[128];
+       int requesting_device_mfg;
+       char device_model[128];
+       int requesting_device_model;
+       char device_firmware[128];
+       int requesting_device_firmware;
        int network_creg_not_supported;
        char creg[128];
 
index 5f0efb912118f6dac5aafb62973e796e7001c871..0880c6485435221c7225624309d3799a589c074c 100644 (file)
@@ -330,17 +330,29 @@ int gsmopen_serial_config_AT(private_t *tech_pvt)
        }
 
        /* phone manufacturer */
+       tech_pvt->requesting_device_mfg = 1;
        res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CGMI");
+       tech_pvt->requesting_device_mfg = 0;
        if (res) {
                DEBUGA_GSMOPEN("AT+CGMI failed\n", GSMOPEN_P_LOG);
        }
 
        /* phone model */
+       tech_pvt->requesting_device_model = 1;
        res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CGMM");
+       tech_pvt->requesting_device_model = 0;
        if (res) {
                DEBUGA_GSMOPEN("AT+CGMM failed\n", GSMOPEN_P_LOG);
        }
 
+       /* phone firmware */
+       tech_pvt->requesting_device_firmware = 1;
+       res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CGMR");
+       tech_pvt->requesting_device_firmware = 0;
+       if (res) {
+               DEBUGA_GSMOPEN("AT+CGMR failed\n", GSMOPEN_P_LOG);
+       }
+
        /* signal network registration with a +CREG unsolicited msg */
        res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CREG=1");
        if (res) {
@@ -1682,13 +1694,33 @@ int gsmopen_serial_read_AT(private_t *tech_pvt, int look_for_ack, int timeout_us
                                }
                        }
 
-                       /* if we are requesting IMSI, put the line into the imei buffer if the line is not "OK" or "ERROR" */
+                       /* if we are requesting IMSI, put the line into the imsi buffer if the line is not "OK" or "ERROR" */
                        if (tech_pvt->requesting_imsi && at_ack == -1) {
                                if (strlen(tech_pvt->line_array.result[i])) {   /* we are reading the IMSI */
                                        strncpy(tech_pvt->imsi, tech_pvt->line_array.result[i], sizeof(tech_pvt->imsi));
                                }
                        }
 
+                       /* if we are requesting device manufacturer, model or firmware version,
+                        * put the line into the buffer if the line is not "OK" or "ERROR" */
+                       if (tech_pvt->requesting_device_mfg && at_ack == -1) {
+                               if (strlen(tech_pvt->line_array.result[i])) {
+                                       strncpy(tech_pvt->device_mfg, tech_pvt->line_array.result[i], sizeof(tech_pvt->device_mfg));
+                               }
+                       }
+
+                       if (tech_pvt->requesting_device_model && at_ack == -1) {
+                               if (strlen(tech_pvt->line_array.result[i])) {
+                                       strncpy(tech_pvt->device_model, tech_pvt->line_array.result[i], sizeof(tech_pvt->device_model));
+                               }
+                       }
+
+                       if (tech_pvt->requesting_device_firmware && at_ack == -1) {
+                               if (strlen(tech_pvt->line_array.result[i])) {
+                                       strncpy(tech_pvt->device_firmware, tech_pvt->line_array.result[i], sizeof(tech_pvt->device_firmware));
+                               }
+                       }
+
 
                        /* if we are reading an sms message from memory, put the line into the sms buffer if the line is not "OK" or "ERROR" */
                        if (tech_pvt->reading_sms_msg > 1 && at_ack == -1) {
index c9af03e3b12b7fb7b89403d147daeb9ebc06c229..4a8ed76c4f29413f0248c79eabdd5ac522829f0b 100644 (file)
@@ -2423,6 +2423,9 @@ SWITCH_STANDARD_API(gsmopen_dump_function)
                                        snprintf(value, sizeof(value) - 1, "%d", tech_pvt->running);
                                        stream->write_function(stream, "running = %s\n", value);
                                        stream->write_function(stream, "subscriber_number = %s\n", tech_pvt->subscriber_number);
+                                       stream->write_function(stream, "device_manufacturer = %s\n", tech_pvt->device_mfg);
+                                       stream->write_function(stream, "device_model = %s\n", tech_pvt->device_model);
+                                       stream->write_function(stream, "device_firmware = %s\n", tech_pvt->device_firmware);
                                        stream->write_function(stream, "operator = %s\n", tech_pvt->operator_name);
                                        stream->write_function(stream, "imei = %s\n", tech_pvt->imei);
                                        stream->write_function(stream, "imsi = %s\n", tech_pvt->imsi);
@@ -2483,6 +2486,9 @@ SWITCH_STANDARD_API(gsmopen_dump_function)
                        snprintf(value, sizeof(value) - 1, "%d", tech_pvt->running);
                        stream->write_function(stream, "running = %s\n", value);
                        stream->write_function(stream, "subscriber_number = %s\n", tech_pvt->subscriber_number);
+                       stream->write_function(stream, "device_manufacturer = %s\n", tech_pvt->device_mfg);
+                       stream->write_function(stream, "device_model = %s\n", tech_pvt->device_model);
+                       stream->write_function(stream, "device_firmware = %s\n", tech_pvt->device_firmware);
                        stream->write_function(stream, "operator = %s\n", tech_pvt->operator_name);
                        stream->write_function(stream, "imei = %s\n", tech_pvt->imei);
                        stream->write_function(stream, "imsi = %s\n", tech_pvt->imsi);
@@ -2814,6 +2820,9 @@ int dump_event_full(private_t *tech_pvt, int is_alarm, int alarm_code, const cha
                snprintf(value, sizeof(value) - 1, "%d", tech_pvt->running);
                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "running", value);
                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "subscriber_number", tech_pvt->subscriber_number);
+               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "device_manufacturer", tech_pvt->device_mfg);
+               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "device_model", tech_pvt->device_model);
+               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "device_firmware", tech_pvt->device_firmware);
                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "operator", tech_pvt->operator_name);
                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "imei", tech_pvt->imei);
                switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "imsi", tech_pvt->imsi);