aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/ipc-modem.c801
1 files changed, 408 insertions, 393 deletions
diff --git a/tools/ipc-modem.c b/tools/ipc-modem.c
index ce03d31..6b4e0fa 100644
--- a/tools/ipc-modem.c
+++ b/tools/ipc-modem.c
@@ -42,533 +42,548 @@
#define DEF_SIM_PIN "1234"
int state = MODEM_STATE_LPM;
-int seq = 0;
-int in_call = 0;
-int out_call = 0;
-int call_done = 0;
+int seq;
+int in_call;
+int out_call;
+int call_done;
char sim_pin[8];
int seq_get(void)
{
- if(seq == 0xff)
- seq = 0x00;
+ if (seq == 0xff)
+ seq = 0x00;
- seq++;
+ seq++;
- return seq;
+ return seq;
}
void modem_snd_no_mic_mute(struct ipc_client *client)
{
- uint8_t data = 0;
- ipc_client_send(client, seq_get(), IPC_SND_MIC_MUTE_CTRL, IPC_TYPE_SET, (void *) &data, 1);
+ uint8_t data = 0;
+
+ ipc_client_send(client, seq_get(), IPC_SND_MIC_MUTE_CTRL, IPC_TYPE_SET,
+ (void *) &data, 1);
}
void modem_snd_clock_ctrl(struct ipc_client *client)
{
- uint8_t data = 0x01;
- ipc_client_send(client, seq_get(), IPC_SND_CLOCK_CTRL, IPC_TYPE_EXEC, (void *) &data, 1);
+ uint8_t data = 0x01;
+
+ ipc_client_send(client, seq_get(), IPC_SND_CLOCK_CTRL, IPC_TYPE_EXEC,
+ (void *) &data, 1);
}
void modem_snd_spkr_volume_ctrl(struct ipc_client *client)
{
- uint16_t data = 0x0411;
- ipc_client_send(client, seq_get(), IPC_SND_SPKR_VOLUME_CTRL, IPC_TYPE_SET, (void *) &data, 2);
+ uint16_t data = 0x0411;
+
+ ipc_client_send(client, seq_get(), IPC_SND_SPKR_VOLUME_CTRL,
+ IPC_TYPE_SET, (void *) &data, 2);
}
void modem_snd_audio_path_ctrl(struct ipc_client *client)
{
- uint8_t data = 0x01;
- ipc_client_send(client, seq_get(), IPC_SND_AUDIO_PATH_CTRL, IPC_TYPE_SET, (void *) &data, 1);
+ uint8_t data = 0x01;
+
+ ipc_client_send(client, seq_get(), IPC_SND_AUDIO_PATH_CTRL,
+ IPC_TYPE_SET, (void *) &data, 1);
}
void modem_exec_call_out(struct ipc_client *client, char *num)
{
- struct ipc_call_outgoing_data call_out;
+ struct ipc_call_outgoing_data call_out;
- modem_snd_no_mic_mute(client);
+ modem_snd_no_mic_mute(client);
- memset(&call_out, 0, sizeof(struct ipc_call_outgoing_data));
+ memset(&call_out, 0, sizeof(struct ipc_call_outgoing_data));
- call_out.type = IPC_CALL_TYPE_VOICE;
- call_out.identity = IPC_CALL_IDENTITY_DEFAULT;
- call_out.number_length=strlen(num);
- /* 0x21 = +33 */
- call_out.prefix=IPC_CALL_PREFIX_NONE; //0x21;//IPC_CALL_PREFIX_NONE;
- memcpy(call_out.number, num, call_out.number_length);
+ call_out.type = IPC_CALL_TYPE_VOICE;
+ call_out.identity = IPC_CALL_IDENTITY_DEFAULT;
+ call_out.number_length = strlen(num);
+ /* 0x21 = +33 */
+ call_out.prefix = IPC_CALL_PREFIX_NONE; //0x21;//IPC_CALL_PREFIX_NONE;
+ memcpy(call_out.number, num, call_out.number_length);
- ipc_client_send(client, seq_get(), IPC_CALL_OUTGOING, IPC_TYPE_EXEC, (void *) &call_out, sizeof(struct ipc_call_outgoing_data));
+ ipc_client_send(client, seq_get(), IPC_CALL_OUTGOING, IPC_TYPE_EXEC,
+ (void *) &call_out,
+ sizeof(struct ipc_call_outgoing_data));
- out_call = 1;
+ out_call = 1;
- modem_snd_no_mic_mute(client);
- modem_snd_spkr_volume_ctrl(client);
- modem_snd_audio_path_ctrl(client);
+ modem_snd_no_mic_mute(client);
+ modem_snd_spkr_volume_ctrl(client);
+ modem_snd_audio_path_ctrl(client);
}
void modem_exec_call_answer(struct ipc_client *client)
{
- modem_snd_clock_ctrl(client);
+ modem_snd_clock_ctrl(client);
- ipc_client_send(client, seq_get(), IPC_CALL_ANSWER, IPC_TYPE_EXEC, NULL, 0);
+ ipc_client_send(client, seq_get(), IPC_CALL_ANSWER, IPC_TYPE_EXEC, NULL,
+ 0);
- modem_snd_no_mic_mute(client);
+ modem_snd_no_mic_mute(client);
}
void modem_get_call_list(struct ipc_client *client)
{
- ipc_client_send(client, seq_get(), IPC_CALL_LIST, IPC_TYPE_GET, NULL, 0);
+ ipc_client_send(client, seq_get(), IPC_CALL_LIST, IPC_TYPE_GET, NULL,
+ 0);
- modem_snd_no_mic_mute(client);
+ modem_snd_no_mic_mute(client);
}
void modem_exec_power_normal(struct ipc_client *client)
{
- uint16_t data = 0x0202;
- ipc_client_send(client, seq_get(), IPC_PWR_PHONE_STATE, IPC_TYPE_EXEC, (void *) &data, sizeof(data));
+ uint16_t data = 0x0202;
+
+ ipc_client_send(client, seq_get(), IPC_PWR_PHONE_STATE, IPC_TYPE_EXEC,
+ (void *) &data, sizeof(data));
}
void modem_set_sms_device_ready(struct ipc_client *client)
{
- ipc_client_send(client, seq_get(), IPC_SMS_DEVICE_READY, IPC_TYPE_SET, NULL, 0);
+ ipc_client_send(client, seq_get(), IPC_SMS_DEVICE_READY, IPC_TYPE_SET,
+ NULL, 0);
}
void modem_set_sec_pin_status(struct ipc_client *client, char *pin1, char *pin2)
{
- struct ipc_sec_pin_status_request_data pin_status;
+ struct ipc_sec_pin_status_request_data pin_status;
+
+ printf("[I] Sending PIN1 unlock request\n");
- printf("[I] Sending PIN1 unlock request\n");
+ ipc_sec_pin_status_setup(&pin_status, IPC_SEC_PIN_TYPE_PIN1, pin1,
+ pin2);
- ipc_sec_pin_status_setup(&pin_status, IPC_SEC_PIN_TYPE_PIN1, pin1, pin2);
- ipc_client_send(client, seq_get(), IPC_SEC_PIN_STATUS, IPC_TYPE_SET, (void *) &pin_status, sizeof(pin_status));
+ ipc_client_send(client, seq_get(), IPC_SEC_PIN_STATUS, IPC_TYPE_SET,
+ (void *) &pin_status, sizeof(pin_status));
}
void modem_response_sec(struct ipc_client *client, struct ipc_message *resp)
{
- struct ipc_sec_pin_status_response_data *sim_status;
- unsigned char type;
-
- switch(resp->command)
- {
- case IPC_SEC_PIN_STATUS :
- sim_status = (struct ipc_sec_pin_status_response_data *)resp->data;
-
- switch(sim_status->status)
- {
- case IPC_SEC_PIN_STATUS_CARD_NOT_PRESENT:
- printf("[I] SIM card is definitely absent\n");
- break;
- case IPC_SEC_PIN_STATUS_LOCK_SC:
- switch(sim_status->facility_lock)
- {
- case IPC_SEC_FACILITY_LOCK_TYPE_SC_PIN1_REQ:
- printf("[I] We need the PIN1 to unlock the card!\n");
- if(strlen(sim_pin) > 0) {
- modem_set_sec_pin_status(client, sim_pin, NULL);
- } else {
- printf("[E] No SIM Pin, use --pin\n");
- }
- break;
- case IPC_SEC_FACILITY_LOCK_TYPE_SC_PUK_REQ:
- printf("[I] Please provide the SIM card PUK!\n");
- break;
- case IPC_SEC_FACILITY_LOCK_TYPE_SC_CARD_BLOCKED:
- printf("[I] Ouch, the SIM Card is blocked.\n");
- break;
- }
- break;
- case IPC_SEC_PIN_STATUS_INIT_COMPLETE:
- printf("[3] SIM init complete\n");
- if(state == MODEM_STATE_NORMAL)
- state = MODEM_STATE_SIM_OK;
-
- break;
- case IPC_SEC_PIN_STATUS_PB_INIT_COMPLETE:
- printf("[I] SIM Phone Book init complete\n");
- break;
- }
- break;
- case IPC_SEC_SIM_ICC_TYPE:
- type = *((char *) resp->data);
- switch(type)
- {
- case IPC_SEC_SIM_CARD_TYPE_UNKNOWN:
- printf("[I] No SIM card type: unknown (absent?)\n");
- break;
- case IPC_SEC_SIM_CARD_TYPE_SIM:
- case IPC_SEC_SIM_CARD_TYPE_USIM:
- printf("[I] SIM card found\n");
- break;
- }
- break;
- }
+ struct ipc_sec_pin_status_response_data *sim_status;
+ unsigned char type;
+
+ switch (resp->command) {
+ case IPC_SEC_PIN_STATUS:
+ sim_status =
+ (struct ipc_sec_pin_status_response_data *)resp->data;
+
+ switch (sim_status->status) {
+ case IPC_SEC_PIN_STATUS_CARD_NOT_PRESENT:
+ printf("[I] SIM card is definitely absent\n");
+ break;
+ case IPC_SEC_PIN_STATUS_LOCK_SC:
+ switch (sim_status->facility_lock) {
+ case IPC_SEC_FACILITY_LOCK_TYPE_SC_PIN1_REQ:
+ printf("[I] "
+ "We need the PIN1 to unlock the card!"
+ "\n");
+ if (strlen(sim_pin) > 0) {
+ modem_set_sec_pin_status(client,
+ sim_pin, NULL);
+ } else {
+ printf("[E] No SIM Pin, use --pin\n");
+ }
+ break;
+ case IPC_SEC_FACILITY_LOCK_TYPE_SC_PUK_REQ:
+ printf("[I] Please provide the SIM card PUK!"
+ "\n");
+ break;
+ case IPC_SEC_FACILITY_LOCK_TYPE_SC_CARD_BLOCKED:
+ printf("[I] Ouch, the SIM Card is blocked.\n");
+ break;
+ }
+ break;
+ case IPC_SEC_PIN_STATUS_INIT_COMPLETE:
+ printf("[3] SIM init complete\n");
+ if (state == MODEM_STATE_NORMAL)
+ state = MODEM_STATE_SIM_OK;
+ break;
+ case IPC_SEC_PIN_STATUS_PB_INIT_COMPLETE:
+ printf("[I] SIM Phone Book init complete\n");
+ break;
+ }
+ break;
+ case IPC_SEC_SIM_ICC_TYPE:
+ type = *((char *) resp->data);
+ switch (type) {
+ case IPC_SEC_SIM_CARD_TYPE_UNKNOWN:
+ printf("[I] No SIM card type: unknown (absent?)\n");
+ break;
+ case IPC_SEC_SIM_CARD_TYPE_SIM:
+ case IPC_SEC_SIM_CARD_TYPE_USIM:
+ printf("[I] SIM card found\n");
+ break;
+ }
+ break;
+ }
}
void modem_response_sms(struct ipc_client *client, struct ipc_message *resp)
{
- switch(resp->command)
- {
- case IPC_SMS_DEVICE_READY:
- if(state == MODEM_STATE_LPM)
- {
- printf("[4] Modem is ready, requesting normal power mode\n");
- modem_exec_power_normal(client);
- }
- else if(state == MODEM_STATE_SIM_OK)
- {
- printf("[5] Modem is fully ready\n");
- modem_set_sms_device_ready(client);
- }
- break;
- }
+ switch (resp->command) {
+ case IPC_SMS_DEVICE_READY:
+ if (state == MODEM_STATE_LPM) {
+ printf("[4] "
+ "Modem is ready, requesting normal power mode"
+ "\n");
+ modem_exec_power_normal(client);
+ } else if (state == MODEM_STATE_SIM_OK) {
+ printf("[5] Modem is fully ready\n");
+ modem_set_sms_device_ready(client);
+ }
+ break;
+ }
}
void modem_response_call(struct ipc_client *client, struct ipc_message *resp)
{
- struct ipc_call_status_data *stat;
-
- switch(resp->command)
- {
- case IPC_CALL_LIST:
-/*
- if(in_call)
- modem_exec_call_answer(client);
- if(out_call)
- modem_snd_no_mic_mute(client);
-*/
- break;
- case IPC_CALL_INCOMING:
- printf("[I] Got an incoming call!\n");
- in_call = 1;
- modem_get_call_list(client);
- break;
- case IPC_CALL_STATUS:
- stat = (struct ipc_call_status_data *)resp->data;
-
- if(stat->status == IPC_CALL_STATUS_DIALING)
- {
- printf("[I] Sending clock ctrl and restore alsa\n");
- modem_snd_clock_ctrl(client);
-// system("alsa_ctl -f /data/alsa_state_modem restore");
-
- printf("[I] CALL STATUS DIALING!!!\n");
-
- modem_snd_spkr_volume_ctrl(client);
- modem_snd_audio_path_ctrl(client);
-
- modem_get_call_list(client);
- }
- if(stat->status == IPC_CALL_STATUS_CONNECTED)
- {
- printf("[I] CALL STATUS CONNECTED!!!\n");
- modem_snd_no_mic_mute(client);
- }
- if(stat->status == IPC_CALL_STATUS_RELEASED)
- {
- printf("[I] CALL STATUS RELEASED!!!\n");
- modem_snd_no_mic_mute(client);
- }
- break;
- }
+ struct ipc_call_status_data *stat;
+
+ switch (resp->command) {
+ case IPC_CALL_LIST:
+ /*
+ * if (in_call)
+ * modem_exec_call_answer(client);
+ * if (out_call)
+ * modem_snd_no_mic_mute(client);
+ */
+ break;
+ case IPC_CALL_INCOMING:
+ printf("[I] Got an incoming call!\n");
+ in_call = 1;
+ modem_get_call_list(client);
+ break;
+ case IPC_CALL_STATUS:
+ stat = (struct ipc_call_status_data *)resp->data;
+
+ if (stat->status == IPC_CALL_STATUS_DIALING) {
+ printf("[I] Sending clock ctrl and restore alsa\n");
+ modem_snd_clock_ctrl(client);
+ /*
+ * system("alsa_ctl -f /data/alsa_state_modem restore");
+ */
+
+ printf("[I] CALL STATUS DIALING!!!\n");
+
+ modem_snd_spkr_volume_ctrl(client);
+ modem_snd_audio_path_ctrl(client);
+
+ modem_get_call_list(client);
+ }
+
+ if (stat->status == IPC_CALL_STATUS_CONNECTED) {
+ printf("[I] CALL STATUS CONNECTED!!!\n");
+ modem_snd_no_mic_mute(client);
+ }
+
+ if (stat->status == IPC_CALL_STATUS_RELEASED) {
+ printf("[I] CALL STATUS RELEASED!!!\n");
+ modem_snd_no_mic_mute(client);
+ }
+ break;
+ }
}
void modem_response_pwr(__attribute__((unused)) struct ipc_client *client,
struct ipc_message *resp)
{
- int state_n;
+ int state_n;
- switch(resp->command)
- {
- case IPC_PWR_PHONE_PWR_UP:
- printf("[2] Phone is powered up (LPM)!\n");
- state = MODEM_STATE_LPM;
- break;
+ switch (resp->command) {
+ case IPC_PWR_PHONE_PWR_UP:
+ printf("[2] Phone is powered up (LPM)!\n");
+ state = MODEM_STATE_LPM;
+ break;
- case IPC_PWR_PHONE_STATE:
- state_n = *((int *)resp->data);
+ case IPC_PWR_PHONE_STATE:
+ state_n = *((int *)resp->data);
#if 0
- switch(state_n)
- {
- /* FIXME: Broken */
- case IPC_PWR_PHONE_STATE_NORMAL:
- printf("Power state is now: NORMAL\n");
- break;
- case IPC_PWR_PHONE_STATE_LPM:
- printf("Power state is now: LPM (Low Power Mode)?\n");
- break;
- }
+ switch (state_n) {
+ /* FIXME: Broken */
+ case IPC_PWR_PHONE_STATE_NORMAL:
+ printf("Power state is now: NORMAL\n");
+ break;
+ case IPC_PWR_PHONE_STATE_LPM:
+ printf("Power state is now: LPM (Low Power Mode)?\n");
+ break;
+ }
#endif
- state = state_n;
- break;
+ state = state_n;
+ break;
- }
+ }
}
void modem_response_net(__attribute__((unused)) struct ipc_client *client,
struct ipc_message *resp)
{
- struct ipc_net_regist_response_data *regi;
- char mnc[6];
-
- switch(resp->command)
- {
- case IPC_NET_REGIST:
- regi = (struct ipc_net_regist_response_data *) resp->data;
- if(regi->status == IPC_NET_REGISTRATION_STATUS_HOME)
- {
- printf("[I] Registered with network successfully!\n");
-
- }
- break;
- case IPC_NET_SERVING_NETWORK:
-
- memcpy(mnc, (char *)((char *) resp->data + 3), 5);
- mnc[5]=0;
- 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;
-*/
- break;
- }
+ struct ipc_net_regist_response_data *regi;
+ char mnc[6];
+
+ switch (resp->command) {
+ case IPC_NET_REGIST:
+ regi = (struct ipc_net_regist_response_data *) resp->data;
+ if (regi->status == IPC_NET_REGISTRATION_STATUS_HOME)
+ printf("[I] Registered with network successfully!\n");
+ break;
+ case IPC_NET_SERVING_NETWORK:
+ memcpy(mnc, (char *)((char *) resp->data + 3), 5);
+ mnc[5] = 0;
+ 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;
+ */
+ break;
+ }
}
void modem_response_handle(struct ipc_client *client, struct ipc_message *resp)
{
- switch(IPC_GROUP(resp->command))
- {
- case IPC_GROUP_NET:
- modem_response_net(client, resp);
- break;
- case IPC_GROUP_PWR:
- modem_response_pwr(client, resp);
- break;
- case IPC_GROUP_SEC:
- modem_response_sec(client, resp);
- break;
- case IPC_GROUP_SMS:
- modem_response_sms(client, resp);
- break;
- case IPC_GROUP_CALL:
- modem_response_call(client, resp);
- break;
- case IPC_GROUP_DISP:
- if(in_call)
- modem_snd_no_mic_mute(client);
- break;
- }
+ switch (IPC_GROUP(resp->command)) {
+ case IPC_GROUP_NET:
+ modem_response_net(client, resp);
+ break;
+ case IPC_GROUP_PWR:
+ modem_response_pwr(client, resp);
+ break;
+ case IPC_GROUP_SEC:
+ modem_response_sec(client, resp);
+ break;
+ case IPC_GROUP_SMS:
+ modem_response_sms(client, resp);
+ break;
+ case IPC_GROUP_CALL:
+ modem_response_call(client, resp);
+ break;
+ case IPC_GROUP_DISP:
+ if (in_call)
+ modem_snd_no_mic_mute(client);
+ break;
+ }
}
int modem_read_loop(struct ipc_client *client)
{
- struct ipc_message resp;
- int rc;
+ struct ipc_message resp;
+ int rc;
- memset(&resp, 0, sizeof(resp));
+ memset(&resp, 0, sizeof(resp));
- while(1) {
- usleep(3000);
+ while (1) {
+ usleep(3000);
- rc = ipc_client_poll(client, NULL, NULL);
- if (rc < 0) {
- continue;
- }
+ rc = ipc_client_poll(client, NULL, NULL);
+ if (rc < 0)
+ continue;
- rc = ipc_client_recv(client, &resp);
- if(rc < 0) {
- printf("[E] Can't RECV from modem: please run this again\n");
- break;
- }
+ rc = ipc_client_recv(client, &resp);
+ if (rc < 0) {
+ printf("[E] "
+ "Can't RECV from modem: please run this again"
+ "\n");
+ break;
+ }
- modem_response_handle(client, &resp);
+ modem_response_handle(client, &resp);
- if(resp.data != NULL)
- free(resp.data);
- }
+ if (resp.data != NULL)
+ free(resp.data);
+ }
- return 0;
+ return 0;
}
void modem_log_handler(__attribute__((unused)) void *user_data,
const char *msg)
{
- int i, l;
- char *message;
-
- message = strdup(msg);
- l = strlen(message);
-
- if(l > 1) {
- for(i=l ; i > 0 ; i--)
- {
- if(message[i] == '\n') {
- message[i] = 0;
- } else if(message[i] != 0) {
- break;
- }
- }
-
- printf("[D] %s\n", message);
- }
-
- free(message);
+ int i, l;
+ char *message;
+
+ message = strdup(msg);
+ l = strlen(message);
+
+ if (l > 1) {
+ for (i = l ; i > 0 ; i--) {
+ if (message[i] == '\n')
+ message[i] = 0;
+ else if (message[i] != 0)
+ break;
+ }
+
+ printf("[D] %s\n", message);
+ }
+
+ free(message);
}
void modem_log_handler_quiet(__attribute__((unused)) void *user_data,
__attribute__((unused)) const char *msg)
{
- return;
}
int modem_start(struct ipc_client *client)
{
- int rc = -1;
+ int rc = -1;
- ipc_client_data_create(client);
- rc = ipc_client_boot(client);
- if(rc < 0)
- return -1;
+ ipc_client_data_create(client);
+ rc = ipc_client_boot(client);
+ if (rc < 0)
+ return -1;
- usleep(300);
+ usleep(300);
- rc = ipc_client_open(client);
- if(rc < 0)
- return -1;
+ rc = ipc_client_open(client);
+ if (rc < 0)
+ return -1;
- rc = ipc_client_power_on(client);
- if(rc < 0)
- return -1;
+ rc = ipc_client_power_on(client);
+ if (rc < 0)
+ return -1;
- return 0;
+ return 0;
}
int modem_stop(struct ipc_client *client)
{
- ipc_client_power_off(client);
- ipc_client_close(client);
+ ipc_client_power_off(client);
+ ipc_client_close(client);
- return 0;
+ return 0;
}
-void print_help()
+void print_help(void)
{
- printf("usage: ipc-modem <command>\n");
- printf("commands:\n");
- printf("\tstart boot modem and start read loop\n");
- printf("\tboot boot modem only\n");
- printf("\tpower-on power on the modem\n");
- printf("\tpower-off power off the modem\n");
- printf("arguments:\n");
- printf("\t--debug enable debug messages\n");
- printf("\t--pin=[PIN] provide SIM card PIN\n");
+ printf("usage: ipc-modem <command>\n");
+ printf("commands:\n");
+ printf("\tstart boot modem and start read loop\n");
+ printf("\tboot boot modem only\n");
+ printf("\tpower-on power on the modem\n");
+ printf("\tpower-off power off the modem\n");
+ printf("arguments:\n");
+ printf("\t--debug enable debug messages\n");
+ printf("\t--pin=[PIN] provide SIM card PIN\n");
}
int main(int argc, char *argv[])
{
- struct ipc_client *client_fmt;
- int c = 0;
- int opt_i = 0;
- int rc = -1;
- int debug = 0;
-
- struct option opt_l[] = {
- {"help", no_argument, 0, 0 },
- {"debug", no_argument, 0, 0 },
- {"pin", required_argument, 0, 0 },
- {0, 0, 0, 0 }
- };
-
- if (argc < 2) {
- print_help();
- exit(1);
- }
-
- while(c >= 0) {
- c = getopt_long(argc, argv, "", opt_l, &opt_i);
- if(c < 0)
- break;
-
- switch(c) {
- case 0:
- if (strncmp(opt_l[opt_i].name, "help", 4) == 0) {
- print_help();
- exit(1);
- } else if(strcmp(opt_l[opt_i].name, "debug") == 0) {
- debug = 1;
- printf("[I] Debug enabled\n");
- } else if(strcmp(opt_l[opt_i].name, "pin") == 0) {
- if(optarg) {
- if(strlen(optarg) < 8) {
- printf("[I] Got SIM PIN!\n");
- memcpy(sim_pin, optarg, 8);
- } else {
- printf("[E] SIM PIN is too long!\n");
- return 1;
- }
- }
- }
- break;
- }
- }
-
- client_fmt = ipc_client_create(IPC_CLIENT_TYPE_FMT);
-
- if (client_fmt == 0) {
- printf("[E] Could not create IPC client; aborting ...\n");
- goto modem_quit;
- }
-
- if (debug == 0)
- ipc_client_log_callback_register(client_fmt, modem_log_handler_quiet, NULL);
- else ipc_client_log_callback_register(client_fmt, modem_log_handler, NULL);
-
- while(optind < argc) {
- if(strncmp(argv[optind], "power-on", 8) == 0) {
- if (ipc_client_power_on(client_fmt) < 0)
- printf("[E] Something went wrong while powering modem on\n");
- goto modem_quit;
- } else if(strncmp(argv[optind], "power-off", 9) == 0) {
- if (ipc_client_power_off(client_fmt) < 0)
- printf("[E] Something went wrong while powering modem off\n");
- goto modem_quit;
- } else if (strncmp(argv[optind], "boot", 9) == 0) {
- rc = ipc_client_boot(client_fmt);
- if (rc < 0)
- printf("[E] Something went wrong while bootstrapping modem\n");
- } else if(strncmp(argv[optind], "start", 5) == 0) {
- printf("[0] Starting modem on FMT client\n");
- rc = modem_start(client_fmt);
- if(rc < 0) {
- printf("[E] Something went wrong\n");
- modem_stop(client_fmt);
- return 1;
- }
-
- printf("[1] Starting modem_read_loop on FMT client\n");
- modem_read_loop(client_fmt);
-
- modem_stop(client_fmt);
- } else {
- printf("[E] Unknown argument: '%s'\n", argv[optind]);
- print_help();
- return 1;
- }
-
- optind++;
- }
+ struct ipc_client *client_fmt;
+ int c = 0;
+ int opt_i = 0;
+ int rc = -1;
+ int debug = 0;
+
+ struct option opt_l[] = {
+ {"help", no_argument, 0, 0 },
+ {"debug", no_argument, 0, 0 },
+ {"pin", required_argument, 0, 0 },
+ {0, 0, 0, 0 }
+ };
+
+ if (argc < 2) {
+ print_help();
+ exit(1);
+ }
+
+ while (c >= 0) {
+ c = getopt_long(argc, argv, "", opt_l, &opt_i);
+ if (c < 0)
+ break;
+
+ switch (c) {
+ case 0:
+ if (strncmp(opt_l[opt_i].name, "help", 4) == 0) {
+ print_help();
+ exit(1);
+ } else if (strcmp(opt_l[opt_i].name, "debug") == 0) {
+ debug = 1;
+ printf("[I] Debug enabled\n");
+ } else if (strcmp(opt_l[opt_i].name, "pin") == 0) {
+ if (optarg) {
+ if (strlen(optarg) < 8) {
+ printf("[I] Got SIM PIN!\n");
+ memcpy(sim_pin, optarg, 8);
+ } else {
+ printf("[E] "
+ "SIM PIN is too long!"
+ "\n");
+ return 1;
+ }
+ }
+ }
+ break;
+ }
+ }
+
+ client_fmt = ipc_client_create(IPC_CLIENT_TYPE_FMT);
+
+ if (client_fmt == 0) {
+ printf("[E] Could not create IPC client; aborting ...\n");
+ goto modem_quit;
+ }
+
+ if (debug == 0) {
+ ipc_client_log_callback_register(client_fmt,
+ modem_log_handler_quiet, NULL);
+ } else {
+ ipc_client_log_callback_register(client_fmt, modem_log_handler,
+ NULL);
+ }
+
+ while (optind < argc) {
+ if (strncmp(argv[optind], "power-on", 8) == 0) {
+ if (ipc_client_power_on(client_fmt) < 0)
+ printf("[E] Something went wrong "
+ "while powering modem on\n");
+ goto modem_quit;
+ } else if (strncmp(argv[optind], "power-off", 9) == 0) {
+ if (ipc_client_power_off(client_fmt) < 0)
+ printf("[E] Something went wrong "
+ "while powering modem off\n");
+ goto modem_quit;
+ } else if (strncmp(argv[optind], "boot", 9) == 0) {
+ rc = ipc_client_boot(client_fmt);
+ if (rc < 0)
+ printf("[E] Something went wrong "
+ "while bootstrapping modem\n");
+ } else if (strncmp(argv[optind], "start", 5) == 0) {
+ printf("[0] Starting modem on FMT client\n");
+ rc = modem_start(client_fmt);
+ if (rc < 0) {
+ printf("[E] Something went wrong\n");
+ modem_stop(client_fmt);
+ return 1;
+ }
+
+ printf("[1] Starting modem_read_loop on FMT client\n");
+ modem_read_loop(client_fmt);
+
+ modem_stop(client_fmt);
+ } else {
+ printf("[E] Unknown argument: '%s'\n", argv[optind]);
+ print_help();
+ return 1;
+ }
+
+ optind++;
+ }
modem_quit:
- if (client_fmt != 0)
- ipc_client_destroy(client_fmt);
+ if (client_fmt != 0)
+ ipc_client_destroy(client_fmt);
- return 0;
+ return 0;
}
-
-// vim:ts=4:sw=4:expandtab