/*
 *
 *  oFono - Open Source Telephony
 *
 *  Copyright (C) 2009-2010  Nokia Corporation and/or its subsidiary(-ies).
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

#ifndef __ISIMODEM_NETWORK_H
#define __ISIMODEM_NETWORK_H

#ifdef __cplusplus
extern "C" {
#endif

#define PN_NETWORK					0x0A
#define PN_MODEM_NETWORK				0xC8
#define NETWORK_SCAN_TIMEOUT				180
#define NETWORK_SET_TIMEOUT				240
#define NET_INVALID_TIME				0x64

enum net_message_id {
	NET_MODEM_REG_STATUS_GET_REQ =			0x00,
	NET_MODEM_REG_STATUS_GET_RESP =			0x01,
	NET_MODEM_REG_STATUS_IND =			0x02,
	NET_MODEM_AVAILABLE_GET_REQ =			0x03,
	NET_MODEM_AVAILABLE_GET_RESP =			0x04,
	NET_SET_REQ =					0x07,
	NET_SET_RESP =					0x08,
	NET_RSSI_GET_REQ =				0x0B,
	NET_RSSI_GET_RESP =				0x0C,
	NET_CS_STATE_IND =				0x19,
	NET_RSSI_IND =					0x1E,
	NET_CIPHERING_IND =				0x20,
	NET_TIME_IND =					0x27,
	NET_OLD_OPER_NAME_READ_REQ =			0x28,
	NET_OLD_OPER_NAME_READ_RESP =			0x29,
	NET_CHANNEL_INFO_IND =				0x2C,
	NET_RAT_IND =					0x35,
	NET_RAT_REQ =					0x36,
	NET_RAT_RESP =					0x37,
	NET_CS_STATE_REQ =				0x3A,
	NET_CS_STATE_RESP =				0x3B,
	NET_CELL_INFO_GET_REQ =				0x40,
	NET_CELL_INFO_GET_RESP =			0x41,
	NET_CELL_INFO_IND =				0x42,
	NET_NITZ_NAME_IND =				0x43,
	NET_NW_ACCESS_CONF_REQ =			0x48,
	NET_NW_ACCESS_CONF_RESP =			0x49,
	NET_REG_STATUS_GET_REQ =			0xE0,
	NET_REG_STATUS_GET_RESP =			0xE1,
	NET_REG_STATUS_IND =				0xE2,
	NET_AVAILABLE_GET_REQ =				0xE3,
	NET_AVAILABLE_GET_RESP =			0xE4,
	NET_OPER_NAME_READ_REQ =			0xE5,
	NET_OPER_NAME_READ_RESP =			0xE6,
};

enum net_subblock {
	NET_REG_INFO_COMMON =				0x00,
	NET_MODEM_AVAIL_NETWORK_INFO_COMMON =		0x01,
	NET_OPERATOR_INFO_COMMON =			0x02,
	NET_RSSI_CURRENT =				0x04,
	NET_GSM_REG_INFO =				0x09,
	NET_DETAILED_NETWORK_INFO =			0x0B,
	NET_MODEM_DETAILED_NETWORK_INFO =		0x0B,
	NET_GSM_OPERATOR_INFO =				0x0C,
	NET_TIME_INFO =					0x10,
	NET_GSM_BAND_INFO =				0x11,
	NET_RAT_INFO =					0x2C,
	NET_GSM_CELL_INFO =				0x46,
	NET_WCDMA_CELL_INFO =				0x47,
	NET_FULL_NITZ_NAME =				0x48,
	NET_SHORT_NITZ_NAME =				0x49,
	NET_REGISTRATION_CONF_INFO =			0x55,
	NET_ROAMING_CONF_INFO =				0x56,
	NET_REGISTRATION_CONF1_INFO =			0x59,
	NET_ROAMING_CONF1_INFO =			0x5A,
	NET_AVAIL_NETWORK_INFO_COMMON =			0xE1,
	NET_REG_STATUS_IND_OPER_NAME =                  0xE3,
	NET_OPER_NAME_INFO =				0xE7,
};

enum net_reg_status {
	NET_REG_STATUS_HOME =				0x00,
	NET_REG_STATUS_ROAM =				0x01,
	NET_REG_STATUS_ROAM_BLINK =			0x02,
	NET_REG_STATUS_NOSERV =				0x03,
	NET_REG_STATUS_NOSERV_SEARCHING =		0x04,
	NET_REG_STATUS_NOSERV_NOTSEARCHING =		0x05,
	NET_REG_STATUS_NOSERV_NOSIM =			0x06,
	NET_REG_STATUS_POWER_OFF =			0x08,
	NET_REG_STATUS_NSPS =				0x09,
	NET_REG_STATUS_NSPS_NO_COVERAGE =		0x0A,
	NET_REG_STATUS_NOSERV_SIM_REJECTED_BY_NW =	0x0B,
};

enum net_network_status {
	NET_OPER_STATUS_UNKNOWN =			0x00,
	NET_OPER_STATUS_AVAILABLE =			0x01,
	NET_OPER_STATUS_CURRENT =			0x02,
	NET_OPER_STATUS_FORBIDDEN =			0x03,
};

enum net_network_pref {
	NET_GSM_HOME_PLMN =				0x00,
	NET_GSM_PREFERRED_PLMN =			0x01,
	NET_GSM_FORBIDDEN_PLMN =			0x02,
	NET_GSM_OTHER_PLMN =				0x03,
	NET_GSM_NO_PLMN_AVAIL =				0x04,
};

enum net_umts_available {
	NET_UMTS_NOT_AVAILABLE =			0x00,
	NET_UMTS_AVAILABLE =				0x01,
};

enum net_band_info {
	NET_GSM_BAND_900_1800 =				0x00,
	NET_GSM_BAND_850_1900 =				0x01,
	NET_GSM_BAND_INFO_NOT_AVAIL =			0x02,
	NET_GSM_BAND_ALL_SUPPORTED_BANDS =		0x03,
	NET_GSM_BAND_850_LOCKED =			0xB0,
	NET_GSM_BAND_900_LOCKED =			0xA0,
	NET_GSM_BAND_1800_LOCKED =			0xA1,
	NET_GSM_BAND_1900_LOCKED =			0xB1,
};

enum net_gsm_cause {
	NET_GSM_IMSI_UNKNOWN_IN_HLR =			0x02,
	NET_GSM_ILLEGAL_MS =				0x03,
	NET_GSM_IMSI_UNKNOWN_IN_VLR =			0x04,
	NET_GSM_IMEI_NOT_ACCEPTED =			0x05,
	NET_GSM_ILLEGAL_ME =				0x06,
	NET_GSM_GPRS_SERVICES_NOT_ALLOWED =		0x07,
	NET_GSM_GPRS_AND_NON_GPRS_NA =			0x08,
	NET_GSM_MS_ID_CANNOT_BE_DERIVED =		0x09,
	NET_GSM_IMPLICITLY_DETACHED =			0x0A,
	NET_GSM_PLMN_NOT_ALLOWED =			0x0B,
	NET_GSM_LA_NOT_ALLOWED =			0x0C,
	NET_GSM_ROAMING_NOT_IN_THIS_LA =		0x0D,
	NET_GSM_GPRS_SERV_NA_IN_THIS_PLMN =		0x0E,
	NET_GSM_NO_SUITABLE_CELLS_IN_LA =		0x0F,
	NET_GSM_MSC_TEMP_NOT_REACHABLE =		0x10,
	NET_GSM_NETWORK_FAILURE =			0x11,
	NET_GSM_MAC_FAILURE =				0x14,
	NET_GSM_SYNCH_FAILURE =				0x15,
	NET_GSM_CONGESTION =				0x16,
	NET_GSM_AUTH_UNACCEPTABLE =			0x17,
	NET_GSM_SERV_OPT_NOT_SUPPORTED =		0x20,
	NET_GSM_SERV_OPT_NOT_SUBSCRIBED =		0x21,
	NET_GSM_SERV_TEMP_OUT_OF_ORDER =		0x22,
	NET_GSM_RETRY_ENTRY_NEW_CELL_LOW =		0x30,
	NET_GSM_RETRY_ENTRY_NEW_CELL_HIGH =		0x3F,
	NET_GSM_SEMANTICALLY_INCORRECT =		0x5F,
	NET_GSM_INVALID_MANDATORY_INFO =		0x60,
	NET_GSM_MSG_TYPE_NONEXISTENT =			0x61,
	NET_GSM_CONDITIONAL_IE_ERROR =			0x64,
	NET_GSM_MSG_TYPE_WRONG_STATE =			0x65,
	NET_GSM_PROTOCOL_ERROR_UNSPECIFIED =		0x6F,
};

enum net_cs_type {
	NET_CS_GSM =					0x00,
};

enum net_rat_name {
	NET_GSM_RAT =					0x01,
	NET_UMTS_RAT =					0x02
};

enum net_rat_type {
	NET_CURRENT_RAT =				0x00,
	NET_SUPPORTED_RATS =				0x01,
};

enum net_measurement_type {
	NET_CURRENT_CELL_RSSI =				0x02,
};

enum net_search_mode {
	NET_MANUAL_SEARCH =				0x00,
};

enum net_oper_name_type {
	NET_HARDCODED_LATIN_OPER_NAME =			0x00,
};

enum net_select_mode {
	NET_SELECT_MODE_UNKNOWN =			0x00,
	NET_SELECT_MODE_MANUAL =			0x01,
	NET_SELECT_MODE_AUTOMATIC =			0x02,
	NET_SELECT_MODE_USER_RESELECTION =		0x03,
	NET_SELECT_MODE_NO_SELECTION =			0x04,
};

enum net_cs_states {
	NET_CS_INACTIVE =		0x00,
	NET_CS_ACTIVE =		0x01,
};

enum net_isi_cause {
	NET_CAUSE_OK =					0x00,
	NET_CAUSE_COMMUNICATION_ERROR =			0x01,
	NET_CAUSE_INVALID_PARAMETER =			0x02,
	NET_CAUSE_NO_SIM =				0x03,
	NET_CAUSE_SIM_NOT_YET_READY =			0x04,
	NET_CAUSE_NET_NOT_FOUND =			0x05,
	NET_CAUSE_REQUEST_NOT_ALLOWED =			0x06,
	NET_CAUSE_CALL_ACTIVE =				0x07,
	NET_CAUSE_SERVER_BUSY =				0x08,
	NET_CAUSE_SECURITY_CODE_REQUIRED =		0x09,
	NET_CAUSE_NOTHING_TO_CANCEL =			0x0A,
	NET_CAUSE_UNABLE_TO_CANCEL =			0x0B,
	NET_CAUSE_NETWORK_FORBIDDEN =			0x0C,
	NET_CAUSE_REQUEST_REJECTED =			0x0D,
	NET_CAUSE_CS_NOT_SUPPORTED =			0x0E,
	NET_CAUSE_PAR_INFO_NOT_AVAILABLE =		0x0F,
	NET_CAUSE_NOT_DONE =				0x10,
	NET_CAUSE_NO_SELECTED_NETWORK =			0x11,
	NET_CAUSE_REQUEST_INTERRUPTED =			0x12,
	NET_CAUSE_TOO_BIG_INDEX =			0x14,
	NET_CAUSE_MEMORY_FULL =				0x15,
	NET_CAUSE_SERVICE_NOT_ALLOWED =			0x16,
	NET_CAUSE_NOT_SUPPORTED_IN_TECH =		0x17,
};

#ifdef __cplusplus
};
#endif

#endif /* !__ISIMODEM_NETWORK_H */
