Example #1
0
void sap_disconnect_req(void *sap_device, uint8_t linkloss)
{
    DBG("sap_device %p linkloss %u", sap_device, linkloss);

    sap_info("disconnect request %s", linkloss ? "by link loss" : "");

    if (u8500.state == STE_DISABLED) {
        sap_disconnect_rsp(sap_device);
        simd_close();
        return;
    }

    if (linkloss) {
        simd_close();
        return;
    }

    if (send_request(u8500.io, STE_END_SAP_REQ, NULL) < 0) {
        sap_disconnect_rsp(sap_device);
        return;
    }
}
void sap_disconnect_req(void *sap_device, uint8_t linkloss)
{
	sim_card_conn_status = SIM_DISCONNECTED;
	sap_data = NULL;
	ongoing_call_status = FALSE;

	DBG("status: %d", sim_card_conn_status);

	if (linkloss)
		return;

	sap_disconnect_rsp(sap_device);
}
Example #3
0
static void recv_response(struct ste_message *msg)
{
    uint32_t status;
    uint8_t *param;

    DBG_VERBOSE("msg_id 0x%x", msg->id);

    if (msg->id == STE_END_SAP_RSP) {
        sap_disconnect_rsp(u8500.sap_data);
        simd_close();
        return;
    }

    param = msg->payload;
    status = *(uint32_t *)param;
    param += sizeof(status);

    DBG_VERBOSE("status 0x%x", status);

    switch (msg->id) {
    case STE_START_SAP_RSP:
        if (status == STE_STATUS_OK) {
            sap_connect_rsp(u8500.sap_data, SAP_STATUS_OK, 0);
        } else {
            sap_connect_rsp(u8500.sap_data,
                            SAP_STATUS_CONNECTION_FAILED, 0);
            simd_close();
        }
        break;

    case STE_SEND_APDU_RSP:
        recv_pdu(STE_SEND_APDU_MSG, msg, status, param,
                 sap_transfer_apdu_rsp);
        break;

    case STE_GET_ATR_RSP:
        recv_pdu(STE_GET_ATR_MSG, msg, status, param,
                 sap_transfer_atr_rsp);
        break;

    case STE_POWER_OFF_RSP:
        recv_state_change(STE_POWER_OFF_MSG, status, STE_POWERED_OFF,
                          sap_power_sim_off_rsp);
        break;

    case STE_POWER_ON_RSP:
        recv_state_change(STE_POWER_ON_MSG, status, STE_ENABLED,
                          sap_power_sim_on_rsp);
        break;

    case STE_RESET_RSP:
        recv_state_change(STE_RESET_MSG, status, STE_ENABLED,
                          sap_reset_sim_rsp);
        break;

    case STE_GET_STATUS_RSP:
        recv_card_status(status, param);
        break;

    case STE_STATUS_IND:
        recv_status(status);
        break;

    default:
        sap_error("unsupported message received (id 0x%x)", msg->id);
    }
}