#include <unistd.h>
#include <stdlib.h>
#include <time.h>
+#include <fcntl.h>
#include <glib.h>
#include <tcore.h>
#include <plugin.h>
-
-#include <tcore.h>
#include <server.h>
-#include <plugin.h>
#include <user_request.h>
#include <hal.h>
+#include <core_object.h>
#include "vdpram.h"
+#define SERVER_INIT_WAIT_TIMEOUT 500
+
+#define DEVICE_NAME_LEN_MAX 16
+#define DEVICE_NAME_PREFIX "pdp"
+
+#define BUF_LEN_MAX 512
+
+#define CORE_OBJECT_NAME_MAX 16
+
+#define MODEM_PLUGIN_NAME "atmodem-plugin.so"
+
struct custom_data {
int vdpram_fd;
guint watch_id_vdpram;
};
-static TReturn hal_power(TcoreHal *hal, gboolean flag)
+struct v_modules {
+ unsigned int co_type;
+ char co_name[CORE_OBJECT_NAME_MAX];
+};
+
+/* Supported Modules */
+static struct v_modules supported_modules[] = {
+ {CORE_OBJECT_TYPE_MODEM, "Modem"},
+ {CORE_OBJECT_TYPE_CALL, "Call"},
+ {CORE_OBJECT_TYPE_SS, "SS"},
+ {CORE_OBJECT_TYPE_NETWORK, "Network"},
+ {CORE_OBJECT_TYPE_PS, "PS"},
+ {CORE_OBJECT_TYPE_SIM, "SIM"},
+ {CORE_OBJECT_TYPE_SMS, "SMS"},
+ {0, ""}
+};
+
+static void _assign_objects_to_hal(TcoreHal *hal)
+{
+ TcorePlugin *plugin;
+ int i;
+ gboolean ret;
+
+ plugin = tcore_hal_ref_plugin(hal);
+
+ /* Add Core Object type for specific 'hal' */
+ for (i = 0 ; supported_modules[i].co_type != 0 ; i++) {
+ ret = tcore_server_add_cp_mapping_tbl_entry(plugin,
+ supported_modules[i].co_type, hal);
+ if (ret == TRUE) {
+ dbg("[VMODEM] Core Object: [%s] - [Success]",
+ supported_modules[i].co_name);
+ } else {
+ err("[VMODEM] Core Object: [%s] - [Fail]",
+ supported_modules[i].co_name);
+ }
+ }
+}
+
+static void _deassign_objects_from_hal(TcoreHal *hal)
+{
+ TcorePlugin *plugin;
+
+ plugin = tcore_hal_ref_plugin(hal);
+
+ /* Remove mapping table entry */
+ tcore_server_remove_cp_mapping_tbl_entry(plugin, hal);
+}
+
+static guint _register_gio_watch(TcoreHal *h, int fd, void *callback)
+{
+ GIOChannel *channel = NULL;
+ guint source;
+
+ dbg("[VMODEM] Register to Watch list - fd: [%d]", fd);
+
+ if ((fd < 0) || (callback == NULL))
+ return 0;
+
+ channel = g_io_channel_unix_new(fd);
+ source = g_io_add_watch(channel, G_IO_IN, (GIOFunc) callback, h);
+ g_io_channel_unref(channel);
+ channel = NULL;
+
+ return source;
+}
+
+static void _deregister_gio_watch(guint watch_id)
+{
+ dbg("[VMODEM] Deregister Watch ID: [%d]", watch_id);
+
+ /* Remove source */
+ g_source_remove(watch_id);
+}
+
+static gboolean _load_modem_plugin(gpointer data)
+{
+ TcoreHal *hal;
+ TcorePlugin *plugin;
+ struct custom_data *user_data;
+
+ dbg("[VMMODEM] Entry");
+
+ if (data == NULL) {
+ err("[VMMODEM] data is NULL");
+ return FALSE;
+ }
+
+ hal = data;
+ plugin = tcore_hal_ref_plugin(hal);
+
+ /* Load Modem Plug-in */
+ if (tcore_server_load_modem_plugin(tcore_plugin_ref_server(plugin),
+ plugin, MODEM_PLUGIN_NAME) == TCORE_RETURN_FAILURE) {
+ err("[VMMODEM] Load Modem Plug-in - [FAIL]");
+
+ /* Clean-up */
+ _deassign_objects_from_hal(hal);
+
+ goto EXIT;
+ } else {
+ dbg("[VMMODEM] Load Modem Plug-in - [SUCCESS]");
+ }
+
+ /* To stop the cycle need to return FALSE */
+ return FALSE;
+
+EXIT:
+ user_data = tcore_hal_ref_user_data(hal);
+ if (user_data == NULL)
+ return FALSE;
+
+ /* Deregister from Watch list */
+ _deregister_gio_watch(user_data->watch_id_vdpram);
+
+ /* Free HAL */
+ tcore_hal_free(hal);
+
+ /* Close VDPRAM device */
+ vdpram_close(user_data->vdpram_fd);
+
+ /* Free custom data */
+ g_free(user_data);
+
+ return FALSE;
+}
+
+static TReturn _modem_power(TcoreHal *hal, gboolean enable)
{
struct custom_data *user_data;
user_data = tcore_hal_ref_user_data(hal);
- if (!user_data)
+ if (user_data == NULL) {
+ err("[VMODEM] User data is NULL");
return TCORE_RETURN_FAILURE;
+ }
- /* power on */
- if (flag == TRUE) {
+ if (enable == TRUE) { /* POWER ON */
if (FALSE == vdpram_poweron(user_data->vdpram_fd)) {
- err("vdpram_poweron failed");
+ err("[VMODEM] Power ON - [FAIL]");
return TCORE_RETURN_FAILURE;
}
+
+ /* Set Power State - ON */
tcore_hal_set_power_state(hal, TRUE);
- }
- /* power off */
- else {
- if (FALSE == vdpram_poweroff(user_data->vdpram_fd)) {
- err("vdpram_poweroff failed");
+ } else { /* POWER OFF */
+ if (vdpram_poweroff(user_data->vdpram_fd) == FALSE) {
+ err("[VMODEM] Power OFF - [FAIL]");
return TCORE_RETURN_FAILURE;
}
+
+ /* Set Power state - OFF */
tcore_hal_set_power_state(hal, FALSE);
}
return TCORE_RETURN_SUCCESS;
}
+static gboolean on_recv_vdpram_message(GIOChannel *channel,
+ GIOCondition condition, gpointer data)
+{
+ TcoreHal *hal = data;
+ struct custom_data *custom;
+ char buf[BUF_LEN_MAX];
+ int n = 0;
+
+ custom = tcore_hal_ref_user_data(hal);
+ memset(buf, 0x0, BUF_LEN_MAX);
+
+ /* Read from Device */
+ n = vdpram_tty_read(custom->vdpram_fd, buf, BUF_LEN_MAX);
+ if (n < 0) {
+ err("[VMODEM] Read error - Data received: [%d]", n);
+ return TRUE;
+ }
+ dbg("[VMODEM] DPRAM Receive - Data length: [%d]", n);
+
+ /* Emit receive callback */
+ tcore_hal_emit_recv_callback(hal, n, buf);
+
+ return TRUE;
+}
+
+static TReturn hal_power(TcoreHal *hal, gboolean flag)
+{
+ return _modem_power(hal, flag);
+}
static TReturn hal_send(TcoreHal *hal, unsigned int data_len, void *data)
{
int ret;
struct custom_data *user_data;
- if (tcore_hal_get_power_state(hal) == FALSE)
+ if (tcore_hal_get_power_state(hal) == FALSE) {
+ err("[VMODEM] HAL Power state - OFF");
return TCORE_RETURN_FAILURE;
+ }
user_data = tcore_hal_ref_user_data(hal);
- if (!user_data)
+ if (user_data == NULL) {
+ err("[VMODEM] User data is NULL");
return TCORE_RETURN_FAILURE;
+ }
ret = vdpram_tty_write(user_data->vdpram_fd, data, data_len);
if(ret < 0) {
- err("vdpram_tty_write failed");
+ err("[VMODEM] Write failed");
return TCORE_RETURN_FAILURE;
}
else {
}
}
-
-static struct tcore_hal_operations hops =
+static TReturn hal_setup_netif(CoreObject *co,
+ TcoreHalSetupNetifCallback func,
+ void *user_data, unsigned int cid,
+ gboolean enable)
{
- .power = hal_power,
- .send = hal_send,
-};
+ char ifname[DEVICE_NAME_LEN_MAX];
+ int size = 0;
+ int fd = 0;
+ char buf[32];
+ char *control = NULL;
+
+ if (cid > 3) {
+ err("[VMODEM] Context ID: [%d]", cid);
+ return TCORE_RETURN_EINVAL;
+ }
-static gboolean on_recv_vdpram_message(GIOChannel *channel, GIOCondition condition, gpointer data)
-{
- TcoreHal *hal = data;
- struct custom_data *custom;
+ if (enable == TRUE) {
+ dbg("[VMODEM] ACTIVATE - Context ID: [%d]", cid)
+ control = "/sys/class/net/svnet0/pdp/activate";
+ } else {
+ dbg("[VMODEM] DEACTIVATE - Context ID: [%d]", cid)
+ control = "/sys/class/net/svnet0/pdp/deactivate";
+ }
- #define BUF_LEN_MAX 512
- char buf[BUF_LEN_MAX];
- int n = 0;
+ fd = open(control, O_WRONLY);
+ if (fd < 0) {
+ err("[VMODEM] Failed to Open interface: [%s]", control);
- custom = tcore_hal_ref_user_data(hal);
- memset(buf, 0, BUF_LEN_MAX);
- n = vdpram_tty_read(custom->vdpram_fd, buf, BUF_LEN_MAX);
- if (n < 0) {
- err("tty_read error. return_valute = %d", n);
- return TRUE;
+ /* Invoke callback function */
+ if (func)
+ func(co, -1, NULL, user_data);
+
+ return TCORE_RETURN_FAILURE;
}
- dbg("vdpram recv (ret = %d)", n);
- tcore_hal_emit_recv_callback(hal, n, buf);
+ /* Context ID needs to be written to the Device */
+ snprintf(buf, sizeof(buf), "%d", cid);
+ size = write(fd, buf, strlen(buf));
- return TRUE;
-}
+ /* Close 'fd' */
+ close(fd);
-static guint register_gio_watch(TcoreHal *h, int fd, void *callback)
-{
- GIOChannel *channel = NULL;
- guint source;
+ /* Device name */
+ snprintf(ifname, DEVICE_NAME_LEN_MAX, "%s%d", DEVICE_NAME_PREFIX, (cid - 1));
+ dbg("[VMODEM] Interface Name: [%s]", ifname);
- if (fd < 0 || !callback)
- return 0;
-
- channel = g_io_channel_unix_new(fd);
- source = g_io_add_watch(channel, G_IO_IN, (GIOFunc) callback, h);
- g_io_channel_unref(channel);
- channel = NULL;
+ /* Invoke callback function */
+ if (func)
+ func(co, 0, ifname, user_data);
- return source;
+ return TCORE_RETURN_SUCCESS;
}
-
-/*static int power_tx_pwr_on_exec(int nFd)
-{
- Not implement yet
- return 0;
-}*/
+/* HAL Operations */
+static struct tcore_hal_operations hal_ops = {
+ .power = hal_power,
+ .send = hal_send,
+ .setup_netif = hal_setup_netif,
+};
static gboolean on_load()
{
- dbg("i'm load!");
+ dbg("[VMODEM] Load!!!");
return TRUE;
}
TcoreHal *hal;
struct custom_data *data;
- if (!plugin)
+ dbg("[VMODEM] Init!!!");
+
+ if (plugin == NULL) {
+ err("[VMODEM] PLug-in is NULL");
return FALSE;
+ }
- dbg("i'm init!");
+ /* Register Modem Interface Plug-in */
+ if (tcore_server_register_modem(tcore_plugin_ref_server(plugin), plugin)
+ == FALSE) {
+ err("[VMODEM] Registration Failed");
+ return FALSE;
+ }
+ dbg("[VMODEM] Registered from Server");
+
+ data = g_try_new0(struct custom_data, 1);
+ if (data == NULL) {
+ err("[VMODEM] Failed to allocate memory for Custom data");
+
+ /* Unregister from Server */
+ tcore_server_unregister_modem(tcore_plugin_ref_server(plugin), plugin);
+ return FALSE;
+ }
/*
- * Phonet init
+ * Open DPRAM device
*/
- data = calloc(sizeof(struct custom_data), 1);
- memset(data, 0, sizeof(struct custom_data));
-
data->vdpram_fd = vdpram_open();
/*
- * HAL init
+ * Create and initialize HAL
*/
- hal = tcore_hal_new(plugin, "vmodem", &hops, TCORE_HAL_MODE_CUSTOM);
- tcore_hal_link_user_data(hal, data);
+ hal = tcore_hal_new(plugin, "vmodem", &hal_ops, TCORE_HAL_MODE_CUSTOM);
+ if (hal == NULL) {
+ /* Close VDPRAM device */
+ vdpram_close(data->vdpram_fd);
+
+ /* Fre custom data */
+ g_free(data);
+
+ /* Unregister from Server */
+ tcore_server_unregister_modem(tcore_plugin_ref_server(plugin), plugin);
+
+ return FALSE;
+ }
- data->watch_id_vdpram= register_gio_watch(hal, data->vdpram_fd, on_recv_vdpram_message);
+ /* Set HAL as Modem Interface Plug-in's User data */
+ tcore_plugin_link_user_data(plugin, hal);
- dbg("vdpram_fd = %d, watch_id_vdpram=%d ", data->vdpram_fd, data->watch_id_vdpram);
+ /* Link custom data to HAL user data */
+ tcore_hal_link_user_data(hal, data);
+
+ /* Register to Watch llist */
+ data->watch_id_vdpram = _register_gio_watch(hal,
+ data->vdpram_fd, on_recv_vdpram_message);
+ dbg("[VMODEM] fd: [%d] Watch ID: [%d]",
+ data->vdpram_fd, data->watch_id_vdpram);
+
+ /* Power ON VDPRAM device */
+ if (_modem_power(hal, TRUE) == TCORE_RETURN_SUCCESS) {
+ dbg("[VMODEM] Power ON - [SUCCESS]");
+ } else {
+ err("[VMODEM] Power ON - [FAIL]");
+ goto EXIT;
+ }
- if (!vdpram_poweron(data->vdpram_fd))
- err("vdpram_poweron Failed");
+ /* Add Core Objects list to HAL */
+ _assign_objects_to_hal(hal);
-// power_tx_pwr_on_exec(data->vdpram_fd);
+ /* Check CP Power ON */
+ g_timeout_add_full(G_PRIORITY_HIGH, SERVER_INIT_WAIT_TIMEOUT, _load_modem_plugin, hal, 0);
+ dbg("[VMMODEM] Exit");
return TRUE;
+
+EXIT:
+ /* Deregister from Watch list */
+ _deregister_gio_watch(data->watch_id_vdpram);
+
+ /* Free HAL */
+ tcore_hal_free(hal);
+
+ /* Close VDPRAM device */
+ vdpram_close(data->vdpram_fd);
+
+ /* Free custom data */
+ g_free(data);
+
+ /* Unregister from Server */
+ tcore_server_unregister_modem(tcore_plugin_ref_server(plugin), plugin);
+
+ return FALSE;
}
static void on_unload(TcorePlugin *plugin)
{
- if (!plugin)
+ TcoreHal *hal;
+ struct custom_data *user_data;
+
+ dbg("[VMODEM] Unload!!!");
+
+ if (plugin == NULL)
return;
- dbg("i'm unload");
+ hal = tcore_plugin_ref_user_data(plugin);
+ if (hal == NULL)
+ return;
+
+ /* Unload Modem Plug-in */
+#if 0 /* TODO - Open the code below */
+ tcore_server_unload_modem_plugin(tcore_plugin_ref_server(plugin), plugin);
+#endif
+ user_data = tcore_hal_ref_user_data(hal);
+ if (user_data == NULL)
+ return;
+
+ /* Deregister from Watch list */
+ _deregister_gio_watch(user_data->watch_id_vdpram);
+ dbg("[VMODEM] Deregistered Watch ID");
+
+ /* Free HAL */
+ tcore_hal_free(hal);
+ dbg("[VMODEM] Freed HAL");
+
+ /* Close VDPRAM device */
+ vdpram_close(user_data->vdpram_fd);
+ dbg("[VMODEM] Closed VDPRAM device");
+
+ /* Free custom data */
+ g_free(user_data);
+
+ tcore_server_unregister_modem(tcore_plugin_ref_server(plugin), plugin);
+ dbg("[VMODEM] Unregistered from Server");
+
+ dbg("[VMODEM] Unloaded MODEM");
}
-struct tcore_plugin_define_desc plugin_define_desc =
-{
+/* VMODEM Descriptor Structure */
+struct tcore_plugin_define_desc plugin_define_desc = {
.name = "VMODEM",
.priority = TCORE_PLUGIN_PRIORITY_HIGH,
.version = 1,
#include <fcntl.h>\r
#include <sys/ioctl.h>\r
\r
+#include <glib.h>
+
#include <log.h>\r
#include "legacy/TelUtility.h"\r
#include "vdpram.h"\r
# endif\r
#endif\r
\r
-typedef struct _tty_old_setting_t{\r
+/* Retry parameters */
+#define SLEEP_TIME_IN_SEC 0
+#define SLEEP_TIME_IN_MSEC 50
+
+#define MAX_RETRY_COUNT 10
+
+typedef struct _tty_old_setting_t {
int fd;\r
struct termios termiosVal;\r
struct _tty_old_setting_t *next;\r
\r
static tty_old_setting_t *ttyold_head = NULL;\r
\r
-/* static functions */\r
+/*
+ * Insert TTY old settings.
+ */
static void __insert_tty_oldsetting(tty_old_setting_t *me)\r
{\r
- dbg("Function Enterence.");\r
+ dbg("Function Entrance");
\r
if (me == NULL)\r
return;\r
\r
if (ttyold_head)\r
- ttyold_head->prev = me;\r
+ ttyold_head->prev = me;
\r
me->next = ttyold_head;\r
me->prev = 0;\r
ttyold_head = me;\r
}\r
\r
+/*
+ * Search TTY old settings.
+ */
static tty_old_setting_t *__search_tty_oldsetting(int fd)\r
{\r
tty_old_setting_t *tty = NULL;\r
\r
- dbg("Function Enterence.");\r
+ dbg("Function Entrance");
\r
if (ttyold_head == NULL)\r
return NULL;\r
\r
tty = ttyold_head;\r
\r
- do{\r
+ do {
if (tty->fd == fd) {\r
- dbg("oldsetting for inputted fd is found");\r
+ dbg("oldsetting for inputted fd [%d] is found", fd);
break;\r
- }\r
- else {\r
+ } else {
if (tty->next == NULL) {\r
- dbg("No oldsetting is found");\r
+ err("No oldsetting found!!!");
tty = NULL;\r
break;\r
}\r
tty = tty->next;\r
}\r
- }while(1);\r
+ } while (1);
\r
return tty;\r
}\r
\r
+/*
+ * Remove TTY old settings.
+ */
static void __remove_tty_oldsetting(tty_old_setting_t *me)\r
{\r
dbg( "Function Enterence.");\r
return;\r
\r
if (me->prev)\r
- me->prev->next = me->next;\r
+ me->prev->next = me->next;
else\r
- ttyold_head = me->next;\r
+ ttyold_head = me->next;
\r
if (me->next)\r
- me->next->prev = me->prev;\r
+ me->next->prev = me->prev;
}\r
\r
-/* Set hardware flow control.\r
-*/\r
+/*
+ * Set hardware flow control.
+ */
static void __tty_sethwf(int fd, int on)\r
{\r
struct termios tty;\r
\r
- dbg("Function Enterence.");\r
+ dbg("Function Entrance");
\r
if (tcgetattr(fd, &tty))\r
err("__tty_sethwf: tcgetattr:");\r
\r
if (on)\r
- tty.c_cflag |= CRTSCTS;\r
+ tty.c_cflag |= CRTSCTS;
else\r
- tty.c_cflag &= ~CRTSCTS;\r
+ tty.c_cflag &= ~CRTSCTS;
\r
if (tcsetattr(fd, TCSANOW, &tty))\r
err("__tty_sethwf: tcsetattr:");\r
}\r
\r
/*\r
-* Set RTS line. Sometimes dropped. Linux specific?\r
-*/\r
+ * Set RTS line. Sometimes dropped. Linux specific?
+ */
static int __tty_setrts(int fd)\r
{\r
int mcs;\r
\r
- dbg("Function Enterence.");\r
+ dbg("Function Entrance");
\r
if (-1 == ioctl(fd, TIOCMODG, &mcs))\r
err("icotl: TIOCMODG");\r
}\r
\r
/*\r
- * Set baudrate, parity and number of bits.\r
+ * Set baudrate, parity and number of bits.
*/\r
static int __tty_setparms(int fd, char* baudr, char* par, char* bits, char* stop, int hwf, int swf)\r
{\r
struct termios tty;\r
tty_old_setting_t *old_setting = NULL;\r
\r
- dbg("Function Enterence.");\r
+ dbg("Function Entrance");
\r
- old_setting = calloc(sizeof(tty_old_setting_t), 1);\r
+ old_setting = g_try_new0(tty_old_setting_t, 1);
\r
if (old_setting == NULL)\r
return TAPI_API_SYSTEM_OUT_OF_MEM;\r
old_setting->fd = fd;\r
\r
if (tcgetattr(fd, &tty) < 0) {\r
- free(old_setting);\r
+ g_free(old_setting);
return TAPI_API_TRANSPORT_LAYER_FAILURE;\r
}\r
\r
if (tcgetattr(fd, &old_setting->termiosVal) < 0) {\r
- free(old_setting);\r
+ g_free(old_setting);
return TAPI_API_TRANSPORT_LAYER_FAILURE;\r
}\r
\r
if ((newbaud = (atol(baudr) / 100)) == 0 && baudr[0] != '0')\r
newbaud = -1;\r
\r
- switch(newbaud)\r
- {\r
+ switch(newbaud) {
case 0:\r
spd = 0;\r
- break;\r
+ break;
\r
case 3:\r
spd = B300;\r
- break;\r
+ break;
\r
case 6:\r
spd = B600;\r
- break;\r
+ break;
\r
case 12:\r
spd = B1200;\r
- break;\r
+ break;
\r
case 24:\r
spd = B2400;\r
- break;\r
+ break;
\r
case 48:\r
spd = B4800;\r
- break;\r
+ break;
\r
case 96:\r
spd = B9600;\r
- break;\r
+ break;
\r
case 192:\r
spd = B19200;\r
- break;\r
+ break;
\r
case 384:\r
spd = B38400;\r
- break;\r
+ break;
\r
case 576:\r
spd = B57600;\r
- break;\r
+ break;
\r
case 1152:\r
spd = B115200;\r
- break;\r
+ break;
\r
default:\r
err("invaid baud rate");\r
- break;\r
+ break;
}\r
\r
if (spd != -1) {\r
- cfsetospeed(&tty, (speed_t) spd);\r
- cfsetispeed(&tty, (speed_t) spd);\r
+ cfsetospeed(&tty, (speed_t) spd);
+ cfsetispeed(&tty, (speed_t) spd);
}\r
\r
- switch(bit)\r
- {\r
- case '5':\r
- tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS5;\r
- break;\r
+ switch(bit) {
+ case '5':
+ tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS5;
+ break;
\r
- case '6':\r
- tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS6;\r
- break;\r
+ case '6':
+ tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS6;
+ break;
\r
- case '7':\r
- tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS7;\r
- break;\r
+ case '7':
+ tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS7;
+ break;
\r
- case '8':\r
- default:\r
- tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;\r
- break;\r
+ case '8':
+ default:
+ tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;
+ break;
}\r
\r
- switch(stop_bit)\r
- {\r
- case '1':\r
- tty.c_cflag &= ~CSTOPB;\r
- break;\r
+ switch(stop_bit) {
+ case '1':
+ tty.c_cflag &= ~CSTOPB;
+ break;
\r
- case '2':\r
- default:\r
- tty.c_cflag |= CSTOPB;\r
- break;\r
+ case '2':
+ default:
+ tty.c_cflag |= CSTOPB;
+ break;
}\r
\r
/* Set into raw, no echo mode */\r
tty.c_cc[VTIME] = 1;\r
\r
if (swf)\r
- tty.c_iflag |= IXON | IXOFF;\r
+ tty.c_iflag |= IXON | IXOFF;
else\r
- tty.c_iflag &= ~(IXON | IXOFF | IXANY);\r
+ tty.c_iflag &= ~(IXON | IXOFF | IXANY);
\r
tty.c_cflag &= ~(PARENB | PARODD);\r
\r
if (par[0] == 'E')\r
- tty.c_cflag |= PARENB;\r
+ tty.c_cflag |= PARENB;
else if (par[0] == 'O')\r
- tty.c_cflag |= (PARENB | PARODD);\r
+ tty.c_cflag |= (PARENB | PARODD);
\r
if (tcsetattr(fd, TCSANOW, &tty) < 0) {\r
- free(old_setting);\r
- return TAPI_API_TRANSPORT_LAYER_FAILURE;\r
+ g_free(old_setting);
+ return TAPI_API_TRANSPORT_LAYER_FAILURE;
}\r
\r
__tty_setrts(fd);\r
__tty_sethwf(fd, hwf);\r
\r
return TAPI_API_SUCCESS;\r
-\r
}\r
\r
+/*
+ * Close TTY Device.
+ */
static int __tty_close(int fd)\r
{\r
tty_old_setting_t *old_setting = NULL;\r
\r
- dbg("Function Enterence.");\r
+ dbg("Function Entrance");
\r
+ /* Get previous settings */
old_setting = __search_tty_oldsetting(fd);\r
- if (old_setting == NULL)\r
+ if (old_setting == NULL) {
+ dbg("[VDPRAM] No previous settings found!!!");
return TAPI_API_SUCCESS;\r
+ }
\r
if (tcsetattr(fd, TCSAFLUSH, &old_setting->termiosVal) < 0) {\r
- err("close failed");\r
+ err("[VDPRAM] Close failed");
return TAPI_API_TRANSPORT_LAYER_FAILURE;\r
}\r
\r
+ /* Remove the previous setting configured */
__remove_tty_oldsetting(old_setting);\r
\r
- free(old_setting);\r
+ /* Free memory */
+ g_free(old_setting);
\r
+ /* Close fd */
close(fd);\r
\r
return TAPI_API_SUCCESS;\r
}\r
\r
/*\r
-* restore the old settings before close.\r
-*/\r
+ * Wait on select.
+ */
+static void __sleep(int sec, int msec)
+{
+ struct timeval tv;
+
+ tv.tv_sec = sec;
+ tv.tv_usec = msec;
+
+ select(0, NULL, NULL, NULL, &tv);
+}
+
+/*
+ * Close the VDPRAM device
+ */
int vdpram_close(int fd)\r
{\r
int ret = TAPI_API_SUCCESS;\r
\r
- dbg("Function Enterence.");\r
+ dbg("Function Entrance");
\r
+ /* Close VDPRAM Device */
ret = __tty_close(fd);\r
\r
return ret;\r
}\r
\r
/*\r
-* Open the vdpram fd.\r
-*/\r
+ * Open the VDPRAM device
+ */
int vdpram_open (void)\r
{\r
int rv = -1;\r
int val = 0;\r
unsigned int cmd =0;\r
\r
+ dbg("Function Enterence.");
+
+ /* Open DPRAM device */
fd = open(VDPRAM_OPEN_PATH, O_RDWR);\r
-\r
if (fd < 0) {\r
- err("#### Failed to open vdpram file: error no hex %x", errno);\r
+ err("[VDPRAM] Open VDPRAM file - [FAIL] Error: [%s]", strerror(errno));
return rv;\r
+ } else {
+ dbg("[VDPRAM] Open VDPRAM file - [SUCCESS] fd: [%d] path: [%s]",
+ fd, VDPRAM_OPEN_PATH);
}\r
- else\r
- dbg("#### Success to open vdpram file. fd:%d, path:%s", fd, VDPRAM_OPEN_PATH);\r
\r
+ /* Set device parameters */
+ if (__tty_setparms(fd, "115200", "N", "8", "1", 0, 0) != TAPI_API_SUCCESS) {
+ err("[VDPRAM] Set TTY device parameters - [FAIL]");
\r
- if (__tty_setparms(fd, "115200", "N", "8", "1", 0, 0) != TAPI_API_SUCCESS) {\r
+ /* Close VDPRAM Device */
vdpram_close(fd);\r
return rv;\r
}\r
- else\r
- dbg("#### Success set tty vdpram params. fd:%d", fd);\r
+ else {
+ dbg("[VDPRAM] Set TTY device parameters - [SUCCESS]");
+ }
\r
- /*TODO: No need to check Status. Delete*/\r
+ /* TODO: No need to check Status. Delete */
cmd = HN_DPRAM_PHONE_GETSTATUS;\r
+ if (ioctl(fd, cmd, &val) < 0) {
+ err("[VDPRAM] Get Phone status - [FAIL] fd: [d] cmd: [%d] val: [%d]",
+ fd, cmd, val);
\r
- if (ioctl(fd, cmd, &val) < 0) {\r
- err("#### ioctl failed fd:%d, cmd:%lu, val:%d", fd,cmd,val);\r
+ /* Close Device */
vdpram_close(fd);\r
+
return rv;\r
+ } else {
+ dbg("[VDPRAM] Get Phone status - [SUCCESS]");
}\r
- else\r
- dbg("#### ioctl Success fd:%d, cmd:%lu, val:%d", fd,cmd,val);\r
\r
return fd;\r
-\r
}\r
\r
/*\r
-* power on the phone.\r
-*/\r
-int vdpram_poweron(int fd)\r
+ * Power ON the Phone.
+ */
+gboolean vdpram_poweron(int fd)
{\r
- int rv = -1;\r
-\r
if (ioctl(fd, HN_DPRAM_PHONE_ON, NULL) < 0) {\r
- err("Phone Power On failed (fd:%d)", fd);\r
- rv = 0;\r
+ err("[VDPRAM] Phone Power ON [FAIL] - fd: [%d] Error: [%s]", fd, strerror(errno));
+ return FALSE;
}\r
else {\r
- dbg("Phone Power On success (fd:%d)", fd);\r
- rv = 1;\r
+ dbg("[VDPRAM] Phone Power ON [SUCCESS] - fd: [%d]", fd);
+ return TRUE;
}\r
- return rv;\r
}\r
\r
- /*\r
- * Power Off the Phone.\r
+/*
+ * Power OFF the Phone.
*/\r
-int vdpram_poweroff(int fd)\r
+gboolean vdpram_poweroff(int fd)
{\r
- int rv;\r
-\r
if (ioctl(fd, HN_DPRAM_PHONE_OFF, NULL) < 0) {\r
- err("Phone Power Off failed.");\r
- rv = -1;\r
+ err("[VDPRAM] Phone Power OFF [FAIL] - fd: [%d] Error: [%s]", fd, strerror(errno));
+ return FALSE;
}\r
else {\r
- dbg("Phone Power Off success.");\r
- rv = 1;\r
+ dbg("[VDPRAM] Phone Power OFF [SUCCESS] - fd: [%d]", fd);
+ return TRUE;
}\r
-\r
- return rv;\r
}\r
\r
/*\r
-* Read data from vdpram.\r
-*/\r
-\r
+ * Read data from VDPRAM.
+ */
int vdpram_tty_read(int nFd, void* buf, size_t nbytes)\r
{\r
int actual = 0;\r
\r
if ((actual = read(nFd, buf, nbytes)) < 0) {\r
- dbg("[TRANSPORT DPRAM]read failed.");\r
+ err("[VDPRAM] Read [FAIL] - fd: [%d] Error: [%s]", nFd, strerror(errno));
}\r
- vdpram_hex_dump(IPC_RX, actual, buf);\r
+
+ /* Dumping Read data */
+ vdpram_hex_dump(RX, actual, buf);
\r
return actual;\r
}\r
\r
-static void __selectsleep(int sec,int msec)\r
-{\r
- struct timeval tv;\r
- tv.tv_sec=sec;\r
- tv.tv_usec=msec;\r
- select(0,NULL,NULL,NULL,&tv);\r
- return;\r
-}\r
-\r
/*\r
-* Write data to vdpram.\r
-*/\r
+ * Write data to VDPRAM.
+ */
int vdpram_tty_write(int nFd, void* buf, size_t nbytes)\r
{\r
int ret;\r
int retry = 0;\r
\r
do {\r
- vdpram_hex_dump(IPC_TX, nbytes, buf);\r
+ vdpram_hex_dump(TX, nbytes, buf);
+
+ /* Write to Device */
ret = write(nFd, (unsigned char* )buf, nbytes - actual);\r
+ if (ret < 0) {
+ err("[VDPRAM] Write [FAIL] - fd: [%d] Error: [%s]",
+ nFd, strerror(errno));
\r
- if ((ret < 0 && errno == EAGAIN) || (ret < 0 && errno == EBUSY)) {\r
- err("write failed. retry.. ret[%d] with errno[%d] ",ret, errno);\r
- __selectsleep(0,50);\r
+ if ((errno == EAGAIN) || (errno == EBUSY)) {
+ /* Sleep for 50 msecs */
+ __sleep(SLEEP_TIME_IN_SEC, SLEEP_TIME_IN_MSEC);
\r
- if (retry == 10)\r
- return 0;\r
+ if (retry == MAX_RETRY_COUNT) {
+ err("[VDPRAM] Maximum retries completed!!!");
+ return 0;
+ }
\r
- retry = retry + 1;\r
- continue;\r
- }\r
+ retry = retry + 1;
+ continue;
+ }
\r
- if (ret < 0) {\r
- if (actual != nbytes)\r
- err("write failed.ret[%d]",ret);\r
+ if (actual != nbytes)
+ err("[VDPRAM] Write [FAIL] - fd: [%d]", nFd);
\r
- err("errno [%d]",errno);\r
+ err("[VDPRAM] Write [FAIL] - Error: [%s]", strerror(errno));
return actual;\r
}\r
\r
actual += ret;\r
buf += ret;\r
-\r
+ dbg("[VDPRAM] Write Actual bytes: [%d] Written bytes: [%d]", actual, ret);
} while(actual < nbytes);\r
\r
return actual;\r
}\r
-/* EOF */\r