Fix ril close for v2.
Change-Id: Id05e6dfd73d6486ec0c762f2c734a9ba2dd3dc7d
diff --git a/mbtk/libmbtk_lib/ril/v2/mbtk_ril_api.c b/mbtk/libmbtk_lib/ril/v2/mbtk_ril_api.c
index ec0a7cc..9c14459 100755
--- a/mbtk/libmbtk_lib/ril/v2/mbtk_ril_api.c
+++ b/mbtk/libmbtk_lib/ril/v2/mbtk_ril_api.c
@@ -20,6 +20,7 @@
typedef struct {
ATPortType_enum port;
bool enable;
+ int open_count;
} ril_at_port_info_t;
typedef struct {
@@ -457,10 +458,12 @@
{
if(at_port_check(port)) {
LOGD("Port(%d) is opened.", port);
+ ril_cli.ports[port].open_count++;
return &(ril_cli.ports[port]);
} else {
ril_cli.ports[port].port = port;
ril_cli.ports[port].enable = TRUE;
+ ril_cli.ports[port].open_count++;
return &(ril_cli.ports[port]);
}
}
@@ -550,10 +553,12 @@
// Auto open default port.
ril_cli.ports[MBTK_AT_PORT_DEF].port = MBTK_AT_PORT_DEF;
ril_cli.ports[MBTK_AT_PORT_DEF].enable = TRUE;
+ ril_cli.ports[MBTK_AT_PORT_DEF].open_count++;
if(port != MBTK_AT_PORT_DEF) {
ril_cli.ports[port].port = port;
ril_cli.ports[port].enable = TRUE;
+ ril_cli.ports[port].open_count++;
return &(ril_cli.ports[port]);
} else {
return &(ril_cli.ports[MBTK_AT_PORT_DEF]);
@@ -584,8 +589,17 @@
return MBTK_RIL_ERR_PORT;
}
+ ril_cli.ports[port].open_count--;
+
+ if(ril_cli.ports[port].open_count > 0) {
+ LOGD("Port(%d) open_count is %d, no close port.", ril_cli.ports[port].open_count);
+ return MBTK_RIL_ERR_SUCCESS;
+ }
+
+ LOGD("Will close port %d", port);
ril_cli.ports[port].enable = FALSE;
ril_cli.ports[port].port = ATPORTTYPE_NON;
+ ril_cli.ports[port].open_count = 0;
// All port is close ???
int i = ATPORTTYPE_0;