[RFC] HFP support into oFono and BlueZ
by Gustavo F. Padovan
Hi,
These patches implement the new API for the Audio Gateway in BlueZ. It
follows the last version of the HandsfreeGateway and HandsfreeAgent
Intefaces API.
The first two patches is for BlueZ and the other for oFono. You can
test it with using enable-modem and test-voicecall scripts into the
test dir of oFono.
Feel free to test it and send me your comments. We have some bugs yet.
The audio part is not working yet. We are going to work on pulseaudio
this week to get this done soon.
Regards,
--
Gustavo F. Padovan
ProFUSION embedded systems - http://profusion.mobi
8 years, 6 months
CDMA SMS Handling
by Rajesh.Nagaiah@elektrobit.com
Hi,
There was a discussion about the CDMA SMS handling and CDMA PDUs in the
IRC channel couple of days before. I would like to highlight the
differences between CDMA and GSM PDU and how we should proceed with this
from my understanding. Let me know your opinion.
Even though oFono supports +CMT and +CMTI, if we feed the incoming CDMA
PDUs to the SMS core it wont get decoded correctly, as there is
substantial differences between the GSM and CDMA SMS PDUs as described
in 3GPP2 specification C.S0015-B Short Message Service (SMS) for
Wideband Spread Spectrum Systems
For eg, the incoming PDU example that was mentioned in the IRC
discussion
+CMT: , 40,
00000210020207028CE95DCC65800601FC08150003168D30010610241830608003061010
04044847
40 - Length of the PDU in bytes
00 - Message Type ( 00 - SMS Point-to-Point)
00 - TeleService Identifier Tag (SMS Parameter Indentifier)
02 - TeleService Identifier Length (SMS Parameter Length)
10 - TeleService Identifier Value - First 8 bits
02 - TeleService Identifier Value - Second 8 bits
TeleService Identifier - 0x1002 - CDMA Messaging Teleservice
(CMT-95)
02 - Originating Address Tag
07 - Originating Address Length
02 - Originating Address 1st 8 Bits
8C - Originating Address 2nd 8 Bits
E9 - Originating Address 3rd 8 Bits
5D - Originating Address 4th 8 Bits
CC - Originating Address 5th 8 Bits
65 - Originating Address 6th 8 Bits
80 - Originating Address 7th 8 Bits
Digit Mode - 1 Bit
Number Mode - 1 Bit
Number Type - 0 or 3 bits
Number Plan - 0 or 4 bits
Number Fields - 8 Bits
Number Field occurrence of CHARi
CHARi - 4 or 8 bits ( 4 - in case of DTMF encoding, 8 - incase
of ASCII encoding)
Reserved - 0-7 bits
Lets take the 1st and 2nd 8 bits
02 - 0000 0010 ( Digit Mode bit - 0, Number Mode bit - 0)
8C - 1000 1100
As Digit mode bit is set to 0, Number Plan and Number Type is void
(0 bits) in this case.
So the remaining 6 bits of 1st 8bits and the first 2 bits of 2nd
8bit is Number fields
Number fields - 00 0010 10 - 0000 1010 - 0x0A (10 digits)
As Digit mode bit is set to 0, each address digit here is
represented as 4bit DTMF digit
0x8C 0xE9 0x5D 0xCC 0x65 0X80
1000 1100 1110 1001 0101 1101 1100 1100 0110 0101 1000 0000
10 0011 0011 1010 0101 0111 0111 0011 0001 1001 0110 0000 00
3 3 0 5 7 7 3 1 9 6 Last 6 bits
are reserved bits
Originating Address - 3305773196
06 - Bearer Reply Option Tag
01 - Bearer Reply Option Length
FC - First 6 bits Reply Sequence number and last 2 bits reserved set to
0
1111 1100 - 111111 REPLY_SEQ
00 Reserved
08 - Bearer Data Tag
15 - Bearer Data Length
00 - Message Indentifier Tag ( Bearer Data Sub parameter )
03 - Message Indentifier Length
16 - Message Type 4 bits Message Id 4 Bits
8D - Message Id 8 Bits
30 - Message Id 4 Bits, UDH Header indicator 1 Bit, Reserved 3 Bits
How Message Identifier value 16 8D 30 was formed ?
Message type ( 4 bits ) - 1( 0001 - Deliver)
Message Identifier ( 16 bits ) - 26835( 0x68D3)
Header Indicator (1 bit) - 0 (UDH not present in User Data
Subparameter)
Reserved ( 3bits) - 0 (000)
01 - User Data Tag ( Bearer Data Sub parameter )
06 - User Data Length
10 - Message Encoding 5 bits ( 0001 0000 ( 00010 = 2 -> 7-bit ASCII )) &
Number Fields 3 bits ( 000)
24 - Number Fields 5 Bits + User char field 1's 3 bits ( 0010 0100 )
18 - User char field 1's remaining 5 bits + User char field 2's 3 bits
(0001 1000)
30 - User char field 2's remaining 5 bits + User char field 3's 3 bits
(0011 0000)
60 - User char field 3's remaining 5 bits + User char field 4's 3 bits
(0110 0000)
80 - User char field 4's remaining 5 bits + Reserved 3 Bits (1000 0000)
Number Fields: 000 00100 - 04 (4 Character fields)
User Char [1] - 100 00011 - 0x83
User Char [2] - 000 00110 - 0x06
User Char [3] - 000 01100 - 0x0C
User Char [4] - 000 10000 - 0x10
Hex 0x83 0x06 0x0C 0x10
Octets 1000 0011 0000 0110 0000 1100 0001 0000
Septets 1000 001 10000 01 100000 1 1000001
Character A(0x41) A(0x41) A(0x41) A(0x41)
Message content: AAAA
Message Encoding - 2 (00010 - 5 bits)
Number Fields - 4 (0000 0100 - 8 bits)
User characters - 0x83 0x06 0x0C 0x10 ( 8 bits each)
00010 0000 0100 1000 0011 0000 0110 0000 1100 0001 0000
0001 0000 - 0x10
0010 0100 - 0x24
0001 1000 - 0x18
0011 0000 - 0x30
0110 0000 - 0x60
1000 0000 - 0x80 (Last 3 bits set to 0's(reserved bit) to complete
the octets)
03 - Message Center Time Stamp Tag ( Bearer Data Sub parameter )
06 - Message Center Time Stamp Length
all date and time fields contain two 4-bit BCD numbers giving the
decimal value of the field.
10 - Year (2010)
10 - Month (10 - October)
04 - Day
04 - Hour
48 - Minutes
47 - Seconds
Time Stamp 04:48:47 04/10/2010
Decoded Information:
Message Type: Deliver (Incoming Message)
Teleservice: CMT-95
Message Identifier: 26835
Originating Address: 3305773196
Message content: AAAA
Message Center Time Stamp: 04:48:47 04/10/2010
As from the above decoding example we can see there is substantial
differences between the GSM and CDMA SMS specifications and so the SMS
atom needs many additions and needs to be heavily modified to support
also CDMA SMS handling. Currently the oFono sms file unit handles the
common and the GSM technology aspects of the SMS stack along with the
smsutils. The SMS atom has the GSM specific members, segmentation and
queuing logic. The smsutils mainly takes care of encoding/decoding of
the PDUs, which is GSM specific. As the segmentation and queuing logic
and the interface is common for both GSM and CDMA, we could reuse this
common code and add the CDMA handling into it and create a new
cdmasmsutils unit to support the CDMA SMS specifics, much like the
smsutils does already for GSM.
BR,
Rajesh
8 years, 8 months
[PATCH] SIMCOM SIM900 module support
by r.r.zaripov@gmail.com
From: Renat Zaripov <r.r.zaripov(a)gmail.com>
This patch add support for SIM900 GSM module
http://wm.sim.com/Sim/FrontShow_en/wireless/detail.aspx?cid=6&nid=770
---
Makefile.am | 3 +
plugins/sim900.c | 310 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
plugins/udev.c | 15 +++
3 files changed, 328 insertions(+), 0 deletions(-)
create mode 100644 plugins/sim900.c
diff --git a/Makefile.am b/Makefile.am
index 337aeb7..291d5e5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -357,6 +357,9 @@ builtin_sources += plugins/speedupcdma.c
builtin_modules += samsung
builtin_sources += plugins/samsung.c
+builtin_modules += sim900
+builtin_sources += plugins/sim900.c
+
if BLUETOOTH
builtin_modules += bluetooth
builtin_sources += plugins/bluetooth.c plugins/bluetooth.h
diff --git a/plugins/sim900.c b/plugins/sim900.c
new file mode 100644
index 0000000..65b42ee
--- /dev/null
+++ b/plugins/sim900.c
@@ -0,0 +1,310 @@
+/*
+ *
+ * oFono - Open Source Telephony
+ *
+ * Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
+ *
+ * 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
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <errno.h>
+#include <stdlib.h>
+
+#include <glib.h>
+#include <gatchat.h>
+#include <gattty.h>
+
+#define OFONO_API_SUBJECT_TO_CHANGE
+#include <ofono/plugin.h>
+#include <ofono/modem.h>
+#include <ofono/devinfo.h>
+#include <ofono/netreg.h>
+#include <ofono/sim.h>
+#include <ofono/sms.h>
+#include <ofono/ussd.h>
+#include <ofono/gprs.h>
+#include <ofono/gprs-context.h>
+#include <ofono/phonebook.h>
+#include <ofono/history.h>
+#include <ofono/log.h>
+
+#include <drivers/atmodem/vendor.h>
+
+static const char *none_prefix[] = { NULL };
+
+struct sim900_data {
+ GAtChat *modem;
+ GAtChat *aux;
+};
+
+static int sim900_probe(struct ofono_modem *modem)
+{
+ struct sim900_data *data;
+
+ DBG("%p", modem);
+
+ data = g_try_new0(struct sim900_data, 1);
+ if (data == NULL)
+ return -ENOMEM;
+
+ ofono_modem_set_data(modem, data);
+
+ return 0;
+}
+
+static void sim900_remove(struct ofono_modem *modem)
+{
+ struct sim900_data *data = ofono_modem_get_data(modem);
+
+ DBG("%p", modem);
+
+ ofono_modem_set_data(modem, NULL);
+
+ /* Cleanup after hot-unplug */
+ g_at_chat_unref(data->aux);
+
+ g_free(data);
+}
+
+static void sim900_debug(const char *str, void *user_data)
+{
+ const char *prefix = user_data;
+
+ ofono_info("%s%s", prefix, str);
+}
+
+static GAtChat *open_device(struct ofono_modem *modem,
+ const char *key, char *debug)
+{
+ const char *device;
+ GAtSyntax *syntax;
+ GIOChannel *channel;
+ GAtChat *chat;
+ GHashTable *options;
+
+ device = ofono_modem_get_string(modem, key);
+ if (device == NULL)
+ return NULL;
+
+ DBG("%s %s", key, device);
+
+ options = g_hash_table_new(g_str_hash, g_str_equal);
+ if (options == NULL)
+ return NULL;
+
+ g_hash_table_insert(options, "Baud", "115200");
+ g_hash_table_insert(options, "Parity", "none");
+ g_hash_table_insert(options, "StopBits", "1");
+ g_hash_table_insert(options, "DataBits", "8");
+ g_hash_table_insert(options, "XonXoff", "off");
+ g_hash_table_insert(options, "Local", "off");
+ g_hash_table_insert(options, "RtsCts", "off");
+
+ channel = g_at_tty_open(device, options);
+ if (channel == NULL)
+ {
+ DBG("channel == NULL");
+ return NULL;
+ }
+
+ syntax = g_at_syntax_new_gsm_permissive();
+ chat = g_at_chat_new(channel, syntax);
+ g_at_syntax_unref(syntax);
+
+ g_io_channel_unref(channel);
+
+ if (chat == NULL)
+ {
+ DBG("chat == NULL");
+ return NULL;
+ }
+
+ //if (getenv("OFONO_AT_DEBUG"))
+ g_at_chat_set_debug(chat, sim900_debug, debug);
+
+ return chat;
+}
+
+static void cfun_enable(gboolean ok, GAtResult *result, gpointer user_data)
+{
+ struct ofono_modem *modem = user_data;
+ struct sim900_data *data = ofono_modem_get_data(modem);
+
+ DBG("");
+
+ if (!ok) {
+ g_at_chat_unref(data->modem);
+ data->modem = NULL;
+
+ g_at_chat_unref(data->aux);
+ data->aux = NULL;
+ }
+
+ ofono_modem_set_powered(modem, ok);
+}
+
+static int sim900_enable(struct ofono_modem *modem)
+{
+ struct sim900_data *data = ofono_modem_get_data(modem);
+
+ DBG("%p", modem);
+
+ data->modem = open_device(modem, "Device", "Device: ");
+ if (data->modem == NULL)
+ {
+ DBG("return -EINVAL");
+ return -EINVAL;
+ }
+
+// data->aux = open_device(modem, "Aux", "Aux: ");
+// if (data->aux == NULL)
+// {
+// g_at_chat_unref(data->modem);
+// data->modem = NULL;
+// DBG("return -EIO");
+// return -EIO;
+// }
+
+ g_at_chat_send(data->modem, "ATE0", NULL,
+ NULL, NULL, NULL);
+
+ g_at_chat_send(data->modem, "AT+CMGF=0", NULL,
+ NULL, NULL, NULL);
+
+ // for obtain correct sms service number
+ g_at_chat_send(data->modem, "AT+CSCS=\"GSM\"", NULL,
+ NULL, NULL, NULL);
+
+ g_at_chat_send(data->modem, "AT+CNMI=2,2,0,0,0", none_prefix,
+ cfun_enable, modem, NULL);
+
+ DBG("return -EINPROGRESS");
+ return -EINPROGRESS;
+}
+
+//static void cfun_disable(gboolean ok, GAtResult *result, gpointer user_data)
+//{
+// struct ofono_modem *modem = user_data;
+// struct sim900_data *data = ofono_modem_get_data(modem);
+
+// DBG("");
+
+// //g_at_chat_unref(data->aux);
+// data->aux = NULL;
+
+// if (ok)
+// ofono_modem_set_powered(modem, FALSE);
+//}
+
+static int sim900_disable(struct ofono_modem *modem)
+{
+ struct sim900_data *data = ofono_modem_get_data(modem);
+
+ DBG("%p", modem);
+
+ g_at_chat_cancel_all(data->modem);
+ g_at_chat_unregister_all(data->modem);
+
+ g_at_chat_unref(data->modem);
+ data->modem = NULL;
+
+ //g_at_chat_cancel_all(data->aux);
+ //g_at_chat_unregister_all(data->aux);
+
+ //g_at_chat_send(data->aux, "AT+CFUN=4", none_prefix,
+ // cfun_disable, modem, NULL);
+
+ return -EINPROGRESS;
+}
+
+static void sim900_pre_sim(struct ofono_modem *modem)
+{
+ struct sim900_data *data = ofono_modem_get_data(modem);
+ struct ofono_sim *sim;
+
+ DBG("%p", modem);
+
+ ofono_devinfo_create(modem, 0, "atmodem", data->modem);
+ sim = ofono_sim_create(modem, 0, "atmodem", data->modem);
+
+ if (sim)
+ ofono_sim_inserted_notify(sim, TRUE);
+}
+
+static void sim900_post_sim(struct ofono_modem *modem)
+{
+ //struct sim900_data *data = ofono_modem_get_data(modem);
+ struct sim900_data *data = ofono_modem_get_data(modem);
+ //struct ofono_history_driver *hdrv;
+ //struct ofono_gprs *gprs;
+ //struct ofono_gprs_context *gc;
+
+ DBG("%p", modem);
+
+ ofono_phonebook_create(modem, 0, "atmodem", data->modem);
+
+ ofono_sms_create(modem, 0, "atmodem", data->modem);
+
+ ofono_netreg_create(modem, OFONO_VENDOR_NOKIA, "atmodem", data->modem);
+
+ //ofono_h
+
+ //ofono_history_driver_register(hdrv);
+
+ //gprs = ofono_gprs_create(modem, OFONO_VENDOR_NOKIA,
+ // "atmodem", data->aux);
+ //gc = ofono_gprs_context_create(modem, 0, "atmodem", data->modem);
+
+ //if (gprs && gc)
+ // ofono_gprs_add_context(gprs, gc);
+}
+
+static void sim900_post_online(struct ofono_modem *modem)
+{
+
+
+ DBG("%p", modem);
+
+ //ofono_ussd_create(modem, OFONO_VENDOR_QUALCOMM_MSM,
+ // "atmodem", data->aux);
+}
+
+static struct ofono_modem_driver sim900_driver = {
+ .name = "sim900",
+ .probe = sim900_probe,
+ .remove = sim900_remove,
+ .enable = sim900_enable,
+ .disable = sim900_disable,
+ .pre_sim = sim900_pre_sim,
+ .post_sim = sim900_post_sim,
+ .post_online = sim900_post_online,
+};
+
+static int sim900_init(void)
+{
+ return ofono_modem_driver_register(&sim900_driver);
+}
+
+static void sim900_exit(void)
+{
+ ofono_modem_driver_unregister(&sim900_driver);
+}
+
+OFONO_PLUGIN_DEFINE(sim900, "SIM900 driver for i-Tetra", VERSION,
+ OFONO_PLUGIN_PRIORITY_DEFAULT, sim900_init, sim900_exit)
diff --git a/plugins/udev.c b/plugins/udev.c
index d0673f7..f05af48 100644
--- a/plugins/udev.c
+++ b/plugins/udev.c
@@ -193,6 +193,19 @@ static void add_nokiacdma(struct ofono_modem *modem,
ofono_modem_register(modem);
}
+static void add_sim900(struct ofono_modem *modem,
+ struct udev_device *udev_device)
+{
+ const char *devnode;
+
+ DBG("modem %p", modem);
+
+ devnode = udev_device_get_devnode(udev_device);
+ ofono_modem_set_string(modem, "Device", devnode);
+
+ ofono_modem_register(modem);
+}
+
static void add_modem(struct udev_device *udev_device)
{
struct ofono_modem *modem;
@@ -271,6 +284,8 @@ done:
add_tc65(modem, udev_device);
else if (g_strcmp0(driver, "nokiacdma") == 0)
add_nokiacdma(modem, udev_device);
+ else if (g_strcmp0(driver, "sim900") == 0)
+ add_sim900(modem, udev_device);
}
static gboolean devpath_remove(gpointer key, gpointer value, gpointer user_data)
--
1.7.7.3
9 years, 1 month
[PATCH v3 00/10] Provider name and SID
by Philippe Nunes
This version is mainly focused by naming changes for consistency.
Philippe.
Philippe Nunes (10):
cdma-provision: Add driver APIs header
ofono.h: add API to get cdma provider name
cdma-provision: Add driver APIs implementation
cdma-provision: Add cdma provisioning plugin
cdma-netreg: Add provider name and SID support
gatchat: Add g_at_chat_set_slave_qcdm / g_at_chat_get_slave_qcdm
huaweicdma: Open qcdm port to be used for network status and cell
location
huaweicdmamodem: Probe the QCDM port with the version info request
huaweicdmamodem: Add 'serving_system' entry point to get SID
udevng: Add a default assignment for Huawei QCDM port
Makefile.am | 4 +-
drivers/huaweicdmamodem/network-registration.c | 247 ++++++++++++++++++++++-
gatchat/gatchat.c | 26 +++
gatchat/gatchat.h | 4 +
include/cdma-provision.h | 44 +++++
plugins/cdma-provision.c | 79 ++++++++
plugins/huaweicdma.c | 44 +++++
plugins/udevng.c | 30 ++-
src/cdma-netreg.c | 40 ++++
src/cdma-provision.c | 80 ++++++++
src/ofono.h | 4 +
11 files changed, 580 insertions(+), 22 deletions(-)
create mode 100644 include/cdma-provision.h
create mode 100644 plugins/cdma-provision.c
create mode 100644 src/cdma-provision.c
9 years, 1 month
[PATCH] udevng: use huaweicdma driver for olive V-ME101
by Nicolas Bertrand
---
plugins/udevng.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/plugins/udevng.c b/plugins/udevng.c
index be87320..8d478cf 100644
--- a/plugins/udevng.c
+++ b/plugins/udevng.c
@@ -800,11 +800,10 @@ static struct {
{ "hso", "hso" },
{ "gobi", "qcserial" },
{ "sierra", "sierra" },
- { "huawei", "option", "201e", "2009" },
+ { "huaweicdma", "option", "201e", "2009" },
{ "huawei", "cdc_ether", "12d1" },
{ "huawei", "option", "12d1" },
{ "huaweicdma", "option", "12d1", "140b" },
- { "huaweicdma", "option", "201e" },
{ "speedupcdma","option", "1c9e", "9e00" },
{ "speedup", "option", "1c9e" },
{ "speedup", "option", "2020" },
--
1.7.4.1
9 years, 1 month
The way to install proper driver for 3G dongle in oFono
by Deng, Ying An
Hi,
We are facing a problem in oFono when using 3G modems:
A CDMA2000 modem can have same PID with WCDMA modem, or TDS-CDMA modem - 3G modem vendors already confirm they do that.
That's to say, if following current strategy, it will be a problem to install proper driver for this kind of 3G modem.
So, is it feasible to find out a solution such as to probe the modem firstly, find out what kind of network modes it supports, and then install the driver?
The way to probe the modem could be some action as to read the capability or get system mode, or issue some specific AT command that only response to certain network mode?
Best regards,
DengYingAn
9 years, 1 month
[PATCH] atutil: Fix newline before EOF and coding guideline volation
by Syam Sidhardhan
---
drivers/atmodem/atutil.h | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/drivers/atmodem/atutil.h b/drivers/atmodem/atutil.h
index 26817e2..5046547 100644
--- a/drivers/atmodem/atutil.h
+++ b/drivers/atmodem/atutil.h
@@ -131,5 +131,4 @@ static inline int at_util_convert_signal_strength(int strength)
e.type = OFONO_ERROR_TYPE_NO_ERROR; \
e.error = 0; \
f(&e, ##args); \
- } while(0) \
-
+ } while (0)
--
1.7.4.1
9 years, 2 months
[PATCH 0/3] Unify SPN reading logic in src/gprs.c
by Oleg Zhurakivskyy
Hello,
Please find the changes in order not to duplicate SPN reading logic in src/grps.c.
Regards,
Oleg
Oleg Zhurakivskyy (3):
gprs: Minor whitespace and style fixes
network: Add SPN watch capability
gprs: Use netreg SPN watch API
src/gprs.c | 91 +++++++++++++++++++++++++++++-------------------------
src/network.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
src/ofono.h | 7 ++++
3 files changed, 146 insertions(+), 47 deletions(-)
--
1.7.5.4
9 years, 2 months
[PATCH 1/2] hfp_ag: Fix empty parameter list in functions
by Syam Sidhardhan
---
plugins/hfp_ag.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/hfp_ag.c b/plugins/hfp_ag.c
index 4a244d9..c2d1d30 100644
--- a/plugins/hfp_ag.c
+++ b/plugins/hfp_ag.c
@@ -190,7 +190,7 @@ static void call_modemwatch(struct ofono_modem *modem, void *user)
modem_watch(modem, TRUE, user);
}
-static int hfp_ag_init()
+static int hfp_ag_init(void)
{
sim_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
@@ -200,7 +200,7 @@ static int hfp_ag_init()
return 0;
}
-static void hfp_ag_exit()
+static void hfp_ag_exit(void)
{
__ofono_modemwatch_remove(modemwatch_id);
g_list_free(modems);
--
1.7.4.1
9 years, 2 months
[PATCH 0/2] phonesim: Indicate CSP, short-SPN in CPHS info.
by Oleg Zhurakivskyy
Hello,
Please find the changes in order to indicate the presense of EFcphs_csp, EFcphs_spns in EFcphs_info.
Regards,
Oleg
Oleg Zhurakivskyy (2):
simfilesystem: Indicate EFcphs_csp
simfilesystem: Indicate EFcphs_spns
src/default.xml | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
--
1.7.5.4
9 years, 2 months