Generalize SIM switching code and allow local/remote switching via USB
diff --git a/firmware/libboard/qmod/source/board_qmod.c b/firmware/libboard/qmod/source/board_qmod.c
index 889d31e..54983d7 100644
--- a/firmware/libboard/qmod/source/board_qmod.c
+++ b/firmware/libboard/qmod/source/board_qmod.c
@@ -6,6 +6,7 @@
#include "utils.h"
#include "wwan_led.h"
#include "wwan_perst.h"
+#include "sim_switch.h"
#include "boardver_adc.h"
#include "card_pres.h"
#include "osmocom/core/timer.h"
@@ -17,37 +18,9 @@
static const Pin pin_peer_rst = {PIO_PA0, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT};
static const Pin pin_peer_erase = {PIO_PA11, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT};
-static const Pin pin_conn_usim1 = {PIO_PA20, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT};
-static const Pin pin_conn_usim2 = {PIO_PA28, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT};
-
/* array of generated USB Strings */
extern unsigned char *usb_strings[];
-static void qmod_use_physical_sim(unsigned int nr, int physical)
-{
- const Pin *pin;
-
- TRACE_INFO("Modem %d: %s SIM\n\r", nr,
- physical ? "physical" : "virtual");
-
- switch (nr) {
- case 1:
- pin = &pin_conn_usim1;
- break;
- case 2:
- pin = &pin_conn_usim2;
- break;
- default:
- TRACE_ERROR("Invalid SIM%u\n\r", nr);
- return;
- }
-
- if (physical)
- PIO_Clear(pin);
- else
- PIO_Set(pin);
-}
-
static int qmod_sam3_is_12(void)
{
if (PIO_Get(&pin_1234_detect) == 0)
@@ -218,10 +191,10 @@
wwan_perst_do_reset_pulse(2, 300);
break;
case '!':
- qmod_use_physical_sim(1, 0);
+ sim_switch_use_physical(1, 0);
break;
case '@':
- qmod_use_physical_sim(2, 0);
+ sim_switch_use_physical(2, 0);
break;
default:
if (!qmod_sam3_is_12())
@@ -238,6 +211,7 @@
wwan_led_init();
wwan_perst_init();
+ sim_switch_init();
/* make sure we can detect whether running in ST12 or ST34 */
PIO_Configure(&pin_1234_detect, 1);
@@ -250,8 +224,6 @@
}
PIO_Configure(&pin_peer_rst, 1);
PIO_Configure(&pin_peer_erase, 1);
- PIO_Configure(&pin_conn_usim1, 1);
- PIO_Configure(&pin_conn_usim2, 1);
i2c_pin_init();
if (qmod_sam3_is_12()) {