aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/ipc-modem.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/tools/ipc-modem.c b/tools/ipc-modem.c
index 2b19f57..cc53749 100644
--- a/tools/ipc-modem.c
+++ b/tools/ipc-modem.c
@@ -40,14 +40,13 @@
#define MODEM_STATE_NORMAL 2
#define MODEM_STATE_SIM_OK 4
-#define DEF_CALL_NUMBER "950"
-
int state = MODEM_STATE_LPM;
int seq;
int in_call;
int out_call;
int call_done;
+char call_number[14];
char sim_pin[8];
int seq_get(void)
@@ -93,6 +92,7 @@ void modem_snd_audio_path_ctrl(struct ipc_client *client)
}
+
void modem_exec_call_out(struct ipc_client *client, char *num)
{
struct ipc_call_outgoing_data call_out;
@@ -104,6 +104,7 @@ void modem_exec_call_out(struct ipc_client *client, char *num)
call_out.type = IPC_CALL_TYPE_VOICE;
call_out.identity = IPC_CALL_IDENTITY_DEFAULT;
call_out.number_length = strlen(num);
+ /* TODO: Add support for prefixes */
/* 0x21 = +33 */
call_out.prefix = IPC_CALL_PREFIX_NONE; //0x21;//IPC_CALL_PREFIX_NONE;
memcpy(call_out.number, num, call_out.number_length);
@@ -339,14 +340,12 @@ void modem_response_net(__attribute__((unused)) struct ipc_client *client,
printf("[6] Registered with network! "
"Got PLMN (Mobile Network Code): '%s'\n",
mnc);
- /*
- * if (call_done == 0)
- * {
- * printf("Requesting outgoing call to %s!\n", DEF_CALL_NUMBER);
- * modem_exec_call_out(client, DEF_CALL_NUMBER);
- * }
- * call_done = 1;
- */
+ if (call_done == 0) {
+ printf("Requesting outgoing call to %s!\n",
+ call_number);
+ modem_exec_call_out(client, call_number);
+ }
+ call_done = 1;
break;
}
}
@@ -477,6 +476,7 @@ void print_help(void)
printf("arguments:\n");
printf("\t--debug enable debug messages\n");
printf("\t--pin=[PIN] provide SIM card PIN\n");
+ printf("\t--call=[NUMBER] call NUMBER\n");
}
int main(int argc, char *argv[])
@@ -491,6 +491,7 @@ int main(int argc, char *argv[])
{"help", no_argument, 0, 0 },
{"debug", no_argument, 0, 0 },
{"pin", required_argument, 0, 0 },
+ {"call", required_argument, 0, 0 },
{0, 0, 0, 0 }
};
@@ -524,7 +525,23 @@ int main(int argc, char *argv[])
printf("[E] SIM PIN is too long!\n");
return 1;
}
+ } else if (strcmp(opt_l[opt_i].name, "call") == 0) {
+ if (optarg) {
+ if (strlen(optarg) < 14) {
+ assert(strlen(optarg) <
+ sizeof(call_number));
+ printf("[I] "
+ "Got call number!\n");
+ strcpy(call_number, optarg);
+ } else {
+ printf("[E] "
+ "Call number is too long!"
+ "\n");
+ return 1;
+ }
+ }
}
+
break;
}
}