osaf/libs/agents/saf/cpa/cpa_init.c | 2 +- osaf/libs/agents/saf/mqa/mqa_init.c | 2 +- osaf/libs/agents/saf/plma/plma_init.c | 2 +- osaf/libs/core/include/ncs_osprm.h | 26 +---- osaf/libs/core/include/ncssysf_def.h | 103 +-------------------- osaf/libs/core/include/os_defs.h | 48 +--------- osaf/libs/core/leap/sysf_def.c | 122 ------------------------ osaf/libs/core/mds/include/mds_dt.h | 1 - osaf/services/infrastructure/dtms/dtm/dtm_intra.c | 1 - osaf/services/infrastructure/dtms/include/dtm.h | 1 - osaf/services/saf/cpsv/cpd/cpd_main.c | 2 +- osaf/services/saf/cpsv/cpnd/cpnd_main.c | 2 +- osaf/services/saf/mqsv/mqd/mqd_main.c | 2 +- osaf/services/saf/mqsv/mqnd/mqnd_main.c | 2 +- 14 files changed, 14 insertions(+), 302 deletions(-)
diff --git a/osaf/libs/agents/saf/cpa/cpa_init.c b/osaf/libs/agents/saf/cpa/cpa_init.c --- a/osaf/libs/agents/saf/cpa/cpa_init.c +++ b/osaf/libs/agents/saf/cpa/cpa_init.c @@ -297,7 +297,7 @@ unsigned int ncs_cpa_startup(void) osaf_mutex_unlock_ordie(&s_agent_startup_mutex); return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); } else { - m_NCS_DBG_PRINTF("\nCPSV:CPA:ON"); + printf("\nCPSV:CPA:ON"); cpa_use_count = 1; } diff --git a/osaf/libs/agents/saf/mqa/mqa_init.c b/osaf/libs/agents/saf/mqa/mqa_init.c --- a/osaf/libs/agents/saf/mqa/mqa_init.c +++ b/osaf/libs/agents/saf/mqa/mqa_init.c @@ -988,7 +988,7 @@ unsigned int ncs_mqa_startup(void) osaf_mutex_unlock_ordie(&s_agent_startup_mutex); return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); } else { - m_NCS_DBG_PRINTF("\nMQSV:MQA:ON"); + printf("\nMQSV:MQA:ON"); mqa_use_count = 1; } diff --git a/osaf/libs/agents/saf/plma/plma_init.c b/osaf/libs/agents/saf/plma/plma_init.c --- a/osaf/libs/agents/saf/plma/plma_init.c +++ b/osaf/libs/agents/saf/plma/plma_init.c @@ -355,7 +355,7 @@ uint32_t ncs_plma_startup() return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); }else{ /** Initialize the library for the first time */ - m_NCS_DBG_PRINTF("\nPLMSV:PLMA:ON"); + printf("\nPLMSV:PLMA:ON"); plma_use_count = 1; } osaf_mutex_unlock_ordie(&s_agent_startup_mutex); diff --git a/osaf/libs/core/include/ncs_osprm.h b/osaf/libs/core/include/ncs_osprm.h --- a/osaf/libs/core/include/ncs_osprm.h +++ b/osaf/libs/core/include/ncs_osprm.h @@ -143,22 +143,15 @@ extern "C" { } NCS_OS_TASK_REQUEST; /**************************************************************************** - **************************************************************************** - **************************************************************************** - **************************************************************************** - ** ** ** ** ** Lock Interface Primitives ** ** ** ** This interface is used by the client to control access to data or ** - ** other shared resources. The interface utilizes the typedef NCS_OS_LOCK ** - ** for processing object access requests. The NCS_OS_LOCK typedef is ** + ** other shared resources. The interface utilizes the typedef NCS_OS_LOCK ** + ** for processing object access requests. The NCS_OS_LOCK typedef is ** ** DEFINED BY THE TARGET SYSTEM in any manner necessary to carry the ** ** information needed to implement the interface. ** ** ** - **************************************************************************** - **************************************************************************** - **************************************************************************** ***************************************************************************/ /**************************************************************************** @@ -805,21 +798,6 @@ uint32_t ncs_os_posix_mq(NCS_OS_POSIX_MQ ****************************************************************************/ #define m_NCS_OS_GET_TIME_STAMP(timestamp) timestamp=time((time_t*)0) -#ifndef m_NCS_OS_GET_ASCII_TIME_STAMP -#define m_NCS_OS_GET_ASCII_TIME_STAMP(timestamp, asc_timestamp) \ -{ \ - (timestamp) = (time_t) (time((time_t *) 0)); \ - strftime((char *)(asc_timestamp), 32, "%X", localtime(×tamp)); \ -} -#endif - -#ifndef m_NCS_OS_GET_ASCII_DATE_TIME_STAMP -#define m_NCS_OS_GET_ASCII_DATE_TIME_STAMP(timestamp, asc_timestamp) \ -{ \ - timestamp=(time_t) (time((time_t *) 0)); \ - strftime((char *)(asc_timestamp), 40, "%d%b%Y_%H.%M.%S", localtime(×tamp)); \ -} -#endif /**************************************************************************** ** ** diff --git a/osaf/libs/core/include/ncssysf_def.h b/osaf/libs/core/include/ncssysf_def.h --- a/osaf/libs/core/include/ncssysf_def.h +++ b/osaf/libs/core/include/ncssysf_def.h @@ -41,44 +41,9 @@ extern "C" { /***************************************************************************** ** ** - ** ** - ** Byte order conversions ** - ** ** + ** Operating System Task Premption Lock macros ** ** ** ****************************************************************************/ -#define sysf_ntohl(x) m_NCS_OS_NTOHL(x) -#define sysf_htonl(x) m_NCS_OS_HTONL(x) -#define sysf_ntohs(s) m_NCS_OS_NTOHS(s) -#define sysf_htons(s) m_NCS_OS_HTONS(s) -/***************************************************************************** - ** ** - ** ** - ** Function Defines for byte order conversions with ** - ** autoincrement of the pointer ** - ** ** - ****************************************************************************/ - - uint32_t decode_32bitOS_inc(uint8_t **stream); - uint32_t encode_32bitOS_inc(uint8_t **stream, uint32_t val); - uint32_t encode_16bitOS_inc(uint8_t **stream, uint32_t val); - uint16_t decode_16bitOS_inc(uint8_t **stream); - -#define m_NCS_OS_HTONL_P_INC(p8,v32) encode_32bitOS_inc(&p8, v32) -#define m_NCS_OS_HTONS_P_INC(p8,v16) encode_16bitOS_inc(&p8, v16) -#define m_NCS_OS_NTOHL_P_INC(p8) decode_32bitOS_inc(&p8) -#define m_NCS_OS_NTOHS_P_INC(p8) decode_16bitOS_inc(&p8) - -// should remove but require changes in a few service -#define m_NCS_DBG_PRINTF printf - -/***************************************************************************** - ** ** - ** ** - ** Operating System Task Premption Lock macros ** - ** ** - ** ** - ****************************************************************************/ - #define m_INIT_CRITICAL m_NCS_OS_INIT_TASK_LOCK #define m_START_CRITICAL m_NCS_OS_START_TASK_LOCK #define m_END_CRITICAL m_NCS_OS_END_TASK_LOCK @@ -113,55 +78,17 @@ void opensaf_reboot(unsigned node_id, co /***************************************************************************** ** ** - ** ** - ** System Timestamp Interface Macros ** - ** ** - ** ncs_os_get_time_stamp: Return the current timestamp as "time_t" in ** + ** ncs_os_get_time_stamp: Return the current timestamp as "time_t" in ** ** the argument tod. ** ** ** - ** ncs_os_get_ascii_time_stamp: Fetch the current timestamp (tod), as an ** - ** ascii string, in asc_tod. Note the size of ** - ** the ASCII string is limited to 32 octets. ** - ** ** ****************************************************************************/ - -#define m_GET_ASCII_TIME_STAMP(timestamp, asc_timestamp) \ - m_NCS_OS_GET_ASCII_TIME_STAMP(timestamp, asc_timestamp) - -#define m_NCS_DATE_TIME_TO_STR(timestamp, asc_timestamp) \ - m_NCS_OS_DATE_TIME_TO_STR(timestamp, asc_timestamp) - -#define m_NCS_TIME_TO_STR(timestamp, asc_timestamp) \ - m_NCS_OS_TIME_TO_STR(timestamp, asc_timestamp) - -#define m_GET_ASCII_DATE_TIME_STAMP(timestamp, asc_timestamp) \ - m_NCS_OS_GET_ASCII_DATE_TIME_STAMP(timestamp, asc_timestamp) - -#define m_GET_ASCII_HDR_DATE_TIME_STAMP(timestamp, asc_timestamp) \ - m_NCS_OS_GET_ASCII_HDR_DATE_TIME_STAMP(timestamp, asc_timestamp) - #define m_GET_TIME_STAMP(timestamp) \ m_NCS_OS_GET_TIME_STAMP(timestamp) -#define m_NCS_GET_TIME_MS \ - m_NCS_OS_GET_TIME_MS - -#define m_NCS_GET_TIME_NS \ - m_NCS_OS_GET_TIME_NS - -#define m_NCS_GET_UPTIME \ - m_NCS_OS_GET_UPTIME - -#define m_GET_TIME_STAMP_STR(timestamp, asc_timestamp) \ - m_NCS_OS_GET_TIME_STAMP_STR(timestamp, asc_timestamp) - - /***************************************************************************** ** ** - ** ** ** LEAP Debug conditional compile stuff ** ** ** - ** ** ****************************************************************************/ #define m_KEY_CHK_FMT(k,f) { if (k.fmat != f) m_LEAP_DBG_SINK(0);} @@ -180,30 +107,6 @@ void opensaf_reboot(unsigned node_id, co /***************************************************************************** ** ** - ** Task Priorities ** - ** ** - ****************************************************************************/ - -#define NCS_TASK_PRIORITY_0 NCS_OS_TASK_PRIORITY_0 -#define NCS_TASK_PRIORITY_1 NCS_OS_TASK_PRIORITY_1 -#define NCS_TASK_PRIORITY_2 NCS_OS_TASK_PRIORITY_2 -#define NCS_TASK_PRIORITY_3 NCS_OS_TASK_PRIORITY_3 -#define NCS_TASK_PRIORITY_4 NCS_OS_TASK_PRIORITY_4 -#define NCS_TASK_PRIORITY_5 NCS_OS_TASK_PRIORITY_5 -#define NCS_TASK_PRIORITY_6 NCS_OS_TASK_PRIORITY_6 -#define NCS_TASK_PRIORITY_7 NCS_OS_TASK_PRIORITY_7 -#define NCS_TASK_PRIORITY_8 NCS_OS_TASK_PRIORITY_8 -#define NCS_TASK_PRIORITY_9 NCS_OS_TASK_PRIORITY_9 -#define NCS_TASK_PRIORITY_10 NCS_OS_TASK_PRIORITY_10 -#define NCS_TASK_PRIORITY_11 NCS_OS_TASK_PRIORITY_11 -#define NCS_TASK_PRIORITY_12 NCS_OS_TASK_PRIORITY_12 -#define NCS_TASK_PRIORITY_13 NCS_OS_TASK_PRIORITY_13 -#define NCS_TASK_PRIORITY_14 NCS_OS_TASK_PRIORITY_14 -#define NCS_TASK_PRIORITY_15 NCS_OS_TASK_PRIORITY_15 -#define NCS_TASK_PRIORITY_16 NCS_OS_TASK_PRIORITY_16 - -/***************************************************************************** - ** ** ** Task Stack Size ** ** ** ****************************************************************************/ @@ -238,7 +141,7 @@ void opensaf_reboot(unsigned node_id, co ** LEAP ENVIRONMENT INITIALIZATION AND CLEAN UP ** ** ** ****************************************************************************/ - uint32_t leap_env_init(void); +uint32_t leap_env_init(void); uint32_t leap_env_destroy(void); #endif diff --git a/osaf/libs/core/include/os_defs.h b/osaf/libs/core/include/os_defs.h --- a/osaf/libs/core/include/os_defs.h +++ b/osaf/libs/core/include/os_defs.h @@ -82,27 +82,22 @@ extern void ncs_os_atomic_inc(uint32_t * extern void ncs_os_atomic_dec(uint32_t *p_uns32); #define m_NCS_OS_ATOMIC_DEC(p_uns32) ncs_os_atomic_dec(p_uns32); -#define m_GET_MSEC_TIME_STAMP(seconds, millisec) get_msec_time(seconds, millisec) - /***************************************************************************** ** ** ** Message queue primitive defintions ** ** ** ****************************************************************************/ - #define NCS_OS_MQ_KEY key_t #define NCS_OS_MQ_HDL int #define NCS_OS_MQ_MSG_LL_HDR long /* The "header" part of <struct msgbuf> */ #define NCS_OS_MQ_MAX_PAYLOAD 4500 /* This is actually dependant on configuration. Usual defaults in LINUX are about 8192. : Phani:28/10/03 */ - /***************************************************************************** ** ** ** POSIX Message queue primitive defintions ** ** ** ****************************************************************************/ - #define NCS_OS_POSIX_MQD uint32_t #define NCS_OS_POSIX_TIMESPEC struct timespec @@ -115,47 +110,11 @@ extern void ncs_os_atomic_dec(uint32_t * ** ** ** ** ****************************************************************************/ - int64_t ncs_os_time_ms(void); -#define m_NCS_OS_GET_TIME_MS ncs_os_time_ms() +#define m_NCS_GET_TIME_MS ncs_os_time_ms() uint64_t ncs_os_time_ns(void); -#define m_NCS_OS_GET_TIME_NS ncs_os_time_ns() - -/* Over riding macros for linux */ - -#define m_NCS_OS_TIME_TO_STR(timestamp, asc_timestamp) \ -{ \ - struct tm IR58027_temp_tm/* special auto var-name to avoid conflict with macro arguments */; \ - strftime((char *)(asc_timestamp), 32, "%X", localtime_r(×tamp, &IR58027_temp_tm)); \ -} - -#define m_NCS_OS_DATE_TIME_TO_STR(timestamp, asc_timestamp) \ -{ \ - struct tm IR58027_temp_tm/* special auto var-name to avoid conflict with macro arguments */; \ - strftime((char *)(asc_timestamp), 40, "%d%b%Y_%H.%M.%S", localtime_r(×tamp, &IR58027_temp_tm)); \ -} - -#define m_NCS_OS_GET_ASCII_TIME_STAMP(timestamp, asc_timestamp) \ -{ \ - struct tm IR58027_temp_tm; \ - (timestamp) = (time_t) (time((time_t *) 0)); \ - strftime((char *)(asc_timestamp), 32, "%X", localtime_r(×tamp, &IR58027_temp_tm)); \ -} - -#define m_NCS_OS_GET_ASCII_DATE_TIME_STAMP(timestamp, asc_timestamp) \ -{ \ - struct tm IR58027_temp_tm; \ - timestamp=(time_t) (time((time_t *) 0)); \ - strftime((char *)(asc_timestamp), 40, "%d%b%Y_%H.%M.%S", localtime_r(×tamp, &IR58027_temp_tm)); \ -} - -#define m_NCS_OS_GET_ASCII_HDR_DATE_TIME_STAMP(timestamp, asc_timestamp) \ -{ \ - struct tm IR58027_temp_tm; \ - timestamp=(time_t) (time((time_t *) 0)); \ - strftime((char *)(asc_timestamp), 40, "%d %B %Y %H:%M:%S", localtime_r(×tamp, &IR58027_temp_tm)); \ -} +#define m_NCS_GET_TIME_NS ncs_os_time_ns() /**************************************************************************** * @@ -191,11 +150,8 @@ extern FILE *ncs_os_fopen(const char *fp /***************************************************************************** ** ** - ** ** ** ncs_sel_obj_* primitive definitions ** ** ** - ** ** - ** ** ****************************************************************************/ typedef struct ncs_sel_obj { int raise_obj; diff --git a/osaf/libs/core/leap/sysf_def.c b/osaf/libs/core/leap/sysf_def.c --- a/osaf/libs/core/leap/sysf_def.c +++ b/osaf/libs/core/leap/sysf_def.c @@ -59,128 +59,6 @@ */ static int sysrq_trigger_fd = -1; -/***************************************************************************** - - PROCEDURE NAME: decode_32bitOS_inc - - DESCRIPTION: - - Decode a 4-octet *NON-0/1-EXT-ENCODED* field. - Using standard operating system defines. - ARGUMENTS: - - stream: Address of a pointer to streamed data. - - RETURNS: - - NOTES: - - "stream" points to the start of 4-octet unsigned short in the network order. - Network-order is the same as "big-endian" order (MSB first). - This function has a built-in network-to-host order effect.It also automatically - increments the pointer to the datastore - -*****************************************************************************/ -uint32_t decode_32bitOS_inc(uint8_t **stream) -{ - - uint32_t val = 0; /* Accumulator */ - val = m_NCS_OS_NTOHL_P(*stream); - *stream += sizeof(uint32_t); - return val; - -} - -/***************************************************************************** - - PROCEDURE NAME: encode_32bitOS_inc - - DESCRIPTION: - - Encode a 4-octet *NON-0/1-EXT-ENCODED* field. - Using standard operating system defines. - ARGUMENTS: - - stream: Address of a pointer to streamed data. - - RETURNS: - - NOTES: - - "stream" points to the start of 4-octet unsigned long in the network order. - Network-order is the same as "big-endian" order (MSB first). - This function has a built-in network-to-host order effect. It also automatically - increments the pointer to the datastore -*****************************************************************************/ - -uint32_t encode_32bitOS_inc(uint8_t **stream, uint32_t val) -{ - m_NCS_OS_HTONL_P(*stream, val); - *stream += sizeof(uint32_t); - return 4; -} - -/***************************************************************************** - - PROCEDURE NAME: encode_16bitOS_inc - - DESCRIPTION: - - Encode a 2-octet *NON-0/1-EXT-ENCODED* field. - Using standard operating system defines. - ARGUMENTS: - - stream: Address of a pointer to streamed data. - - RETURNS: - - NOTES: - - "stream" points to the start of 2-octet unsigned short in the network order. - Network-order is the same as "big-endian" order (MSB first). - This function has a built-in network-to-host order effect.It also automatically - increments the pointer to the datastore - -*****************************************************************************/ - -uint32_t encode_16bitOS_inc(uint8_t **stream, uint32_t val) -{ - m_NCS_OS_HTONS_P(*stream, val); - *stream += sizeof(uint16_t); - return 2; -} - -/***************************************************************************** - - PROCEDURE NAME: decode_16bitOS_inc - - DESCRIPTION: - - Decode a 2-octet *NON-0/1-EXT-ENCODED* field. - Using standard operating system defines. - ARGUMENTS: - - stream: Address of a pointer to streamed data. - - RETURNS: - - NOTES: - - "stream" points to the start of 2-octet unsigned short in the network order. - Network-order is the same as "big-endian" order (MSB first). - This function has a built-in network-to-host order effect.It also automatically - increments the pointer to the datastore - -*****************************************************************************/ -uint16_t decode_16bitOS_inc(uint8_t **stream) -{ - - uint32_t val = 0; /* Accumulator */ - val = m_NCS_OS_NTOHS_P(*stream); - *stream += sizeof(uint16_t); - return (uint16_t)(val & 0x0000FFFF); - -} /***************************************************************************** diff --git a/osaf/libs/core/mds/include/mds_dt.h b/osaf/libs/core/mds/include/mds_dt.h --- a/osaf/libs/core/mds/include/mds_dt.h +++ b/osaf/libs/core/mds/include/mds_dt.h @@ -289,7 +289,6 @@ extern uint32_t mds_adest_info_tbl_query /* DEFINE THESE THINGS*/ #define NCS_MDTM_TASKNAME "MDTM" -#define NCS_MDTM_PRIORITY NCS_TASK_PRIORITY_4 #define NCS_MDTM_STACKSIZE NCS_STACKSIZE_HUGE #define MDTM_TIPC_POLL_TIMEOUT 20000 diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_intra.c b/osaf/services/infrastructure/dtms/dtm/dtm_intra.c --- a/osaf/services/infrastructure/dtms/dtm/dtm_intra.c +++ b/osaf/services/infrastructure/dtms/dtm/dtm_intra.c @@ -44,7 +44,6 @@ DTM_INTRANODE_CB *dtm_intranode_cb = NUL #define DTM_INTRANODE_POLL_TIMEOUT 20000 #define DTM_RECV_BUFFER_SIZE 1500 #define DTM_INTRANODE_TASKNAME "DTM_INTRANODE" -#define DTM_INTRANODE_TASK_PRIORITY NCS_TASK_PRIORITY_4 #define DTM_INTRANODE_STACKSIZE NCS_STACKSIZE_HUGE #ifndef MDS_PORT_NUMBER diff --git a/osaf/services/infrastructure/dtms/include/dtm.h b/osaf/services/infrastructure/dtms/include/dtm.h --- a/osaf/services/infrastructure/dtms/include/dtm.h +++ b/osaf/services/infrastructure/dtms/include/dtm.h @@ -35,7 +35,6 @@ extern uint8_t initial_discovery_phase; #define BMCAST_MSG_LEN ( sizeof(uint16_t) + sizeof(uint32_t) + sizeof(uint32_t) + sizeof(uint16_t) #define m_NODE_DISCOVERY_TASKNAME "NODE_DISCOVERY" -#define m_NODE_DISCOVERY_TASK_PRIORITY NCS_TASK_PRIORITY_4 #define m_NODE_DISCOVERY_STACKSIZE NCS_STACKSIZE_HUGE #define DTM_MAX_TAG_LEN 256 diff --git a/osaf/services/saf/cpsv/cpd/cpd_main.c b/osaf/services/saf/cpsv/cpd/cpd_main.c --- a/osaf/services/saf/cpsv/cpd/cpd_main.c +++ b/osaf/services/saf/cpsv/cpd/cpd_main.c @@ -39,7 +39,7 @@ static int __init_cpd(void) } /* Init CPD */ - m_NCS_DBG_PRINTF("\nCPSV:CPD:ON"); + printf("\nCPSV:CPD:ON"); if (cpd_lib_req(&lib_create) != NCSCC_RC_SUCCESS) { LOG_ER("cpd_lib_req FAILED"); return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_main.c b/osaf/services/saf/cpsv/cpnd/cpnd_main.c --- a/osaf/services/saf/cpsv/cpnd/cpnd_main.c +++ b/osaf/services/saf/cpsv/cpnd/cpnd_main.c @@ -38,7 +38,7 @@ static int __init_cpnd(void) return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); } /* Init CPND */ - m_NCS_DBG_PRINTF("\nCPSV:CPND:ON"); + printf("\nCPSV:CPND:ON"); if (cpnd_lib_req(&lib_create) != NCSCC_RC_SUCCESS) { LOG_ER("cpnd_lib_req FAILED"); return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); diff --git a/osaf/services/saf/mqsv/mqd/mqd_main.c b/osaf/services/saf/mqsv/mqd/mqd_main.c --- a/osaf/services/saf/mqsv/mqd/mqd_main.c +++ b/osaf/services/saf/mqsv/mqd/mqd_main.c @@ -40,7 +40,7 @@ static int __init_mqd(void) } /* Init MQD */ - m_NCS_DBG_PRINTF("\nMQSV:MQD:ON"); + printf("\nMQSV:MQD:ON"); if (mqd_lib_req(&lib_create) != NCSCC_RC_SUCCESS) { fprintf(stderr, "mqd_lib_req FAILED\n"); return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); diff --git a/osaf/services/saf/mqsv/mqnd/mqnd_main.c b/osaf/services/saf/mqsv/mqnd/mqnd_main.c --- a/osaf/services/saf/mqsv/mqnd/mqnd_main.c +++ b/osaf/services/saf/mqsv/mqnd/mqnd_main.c @@ -39,7 +39,7 @@ static int __init_mqnd(void) } /* Init MQND */ - m_NCS_DBG_PRINTF("\nMQSV:MQND:ON"); + printf("\nMQSV:MQND:ON"); if (mqnd_lib_req(&lib_create) != NCSCC_RC_SUCCESS) { fprintf(stderr, "mqnd_lib_req FAILED\n"); return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); ------------------------------------------------------------------------------ Sponsored by Intel(R) XDK Develop, test and display web and hybrid apps with a single code base. Download it for free now! http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel