mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-23 00:38:33 +03:00
QMOD: Add code to determine SIM Card presence
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#include "wwan_led.h"
|
||||
#include "wwan_perst.h"
|
||||
#include "boardver_adc.h"
|
||||
#include "card_pres.h"
|
||||
#include "osmocom/core/timer.h"
|
||||
|
||||
static const Pin pin_hubpwr_override = PIN_PRTPWR_OVERRIDE;
|
||||
@@ -257,4 +258,6 @@ void board_main_top(void)
|
||||
|
||||
/* Obtain the circuit board version (currently just prints voltage */
|
||||
get_board_version_adc();
|
||||
/* Initialize checking for card insert/remove events */
|
||||
card_present_init();
|
||||
}
|
||||
|
||||
58
firmware/libboard/qmod/source/card_pres.c
Normal file
58
firmware/libboard/qmod/source/card_pres.c
Normal file
@@ -0,0 +1,58 @@
|
||||
#include <osmocom/core/timer.h>
|
||||
#include "board.h"
|
||||
#include "utils.h"
|
||||
#include "card_pres.h"
|
||||
|
||||
#define NUM_CARDPRES 2
|
||||
|
||||
#define TIMER_INTERVAL_MS 500
|
||||
|
||||
static const Pin pin_cardpres[NUM_CARDPRES] = { PIN_DET_USIM1_PRES, PIN_DET_USIM2_PRES };
|
||||
static int last_state[NUM_CARDPRES] = { -1, -1 };
|
||||
static struct osmo_timer_list cardpres_timer;
|
||||
|
||||
/* Determine if a SIM card is present in the given slot */
|
||||
int is_card_present(int port)
|
||||
{
|
||||
const Pin *pin;
|
||||
int present;
|
||||
|
||||
if (port < 1 || port > NUM_CARDPRES)
|
||||
return -1;
|
||||
pin = &pin_cardpres[port-1];
|
||||
|
||||
/* Card present signals are low-active, as we have a switch
|
||||
* against GND and an internal-pull-up in the SAM3 */
|
||||
present = PIO_Get(pin) ? 0 : 1;
|
||||
|
||||
return present;
|
||||
}
|
||||
|
||||
static void cardpres_tmr_cb(void *data)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 1; i <= ARRAY_SIZE(pin_cardpres); i++) {
|
||||
int state = is_card_present(i);
|
||||
if (state != last_state[i-1]) {
|
||||
TRACE_INFO("Card Detect %d Status %d -> %d\r\n", i, last_state[i], state);
|
||||
/* FIXME: report to USB host */
|
||||
last_state[i-1] = state;
|
||||
}
|
||||
}
|
||||
|
||||
osmo_timer_schedule(&cardpres_timer, 0, TIMER_INTERVAL_MS*1000);
|
||||
}
|
||||
|
||||
int card_present_init(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
PIO_Configure(pin_cardpres, ARRAY_SIZE(pin_cardpres));
|
||||
|
||||
/* start timer */
|
||||
cardpres_timer.cb = cardpres_tmr_cb;
|
||||
osmo_timer_schedule(&cardpres_timer, 0, TIMER_INTERVAL_MS*1000);
|
||||
|
||||
return 2;
|
||||
}
|
||||
Reference in New Issue
Block a user