[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/cp/ps/modem/psbase/inc/ms_os.h b/cp/ps/modem/psbase/inc/ms_os.h
new file mode 100644
index 0000000..9a37a13
--- /dev/null
+++ b/cp/ps/modem/psbase/inc/ms_os.h
@@ -0,0 +1,1147 @@
+/************************************************************************
+* °æÈ¨ËùÓÐ (C)2007,ÖÐÐËͨѶ¹É·ÝÓÐÏÞ¹«Ë¾¡£
+*
+* ÎļþÃû³Æ£º ms_os.h
+* Îļþ±êʶ£º
+* ÄÚÈÝÕªÒª£º External declarations of interface routines to the operation system.
+*
+* ÐÞ¸ÄÈÕÆÚ °æ±¾ºÅ Ð޸ıê¼Ç ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ
+* -----------------------------------------------------------------------
+* 2008/06/27 V0.5 ¹¨Òí ´´½¨
+************************************************************************/
+
+#ifndef _MS_OS_H_
+#define _MS_OS_H_
+
+#include <stddef.h>
+#include "base_api.h"
+/*#include "ms_hwtrc.h"*/ /* Trace interface as standard out, hwtrc_print(). */
+
+#if MS_OS_CRITICAL_SECTION_SUPPORT > 0
+#include "ms_crit.h"
+#endif
+
+
+/*===========================================================================
+Exported Type Declarations
+===========================================================================*/
+
+/**B*************************************************************************
+ * Macro: OS_pid_t
+ *---------------------------------------------------------------------------
+ * Purpose: PID of an operation system process.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define OS_pid_t SDL_PId
+#define OS_SDL_NULL SDL_NULL
+
+
+/**B*************************************************************************
+ * Macro: OS_no_sig_params_t
+ *---------------------------------------------------------------------------
+ * Purpose: Used to allocate a signal without parameters.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define OS_no_sig_params_t XSIGNALHEADERTYPE
+
+
+/*===========================================================================
+Exported Macro Declarations
+===========================================================================*/
+
+/**B*************************************************************************
+ * Macro: os_mem_xalloc
+ *----------------------------------------------------------------------------
+ * Purpose: mallocs dynamic memory
+ *
+ * Parameters: size: number of bytes to be malloced
+ *
+ * Returns: pointer to first byte of memory
+ *
+ * Remarks:
+ ***E************************************************************************/
+/**B*************************************************************************
+ * Macro: os_mem_xfree
+ *----------------------------------------------------------------------------
+ * Purpose: frees dynamic memory
+ *
+ * Parameters: ptr: pointer to memory to be returned
+ *
+ * Returns: nothing
+ *
+ * Remarks:
+ ***E************************************************************************/
+
+#define os_mem_xalloc(ptr_, size_) (ptr_) = ps_malloc(size_);
+#define os_mem_xfree(ptr_) {ps_free( *((void **)&(ptr_))); *((void **)&(ptr_)) = NULL;}
+
+
+/**B*************************************************************************
+ * Macro: os_msleep
+ *---------------------------------------------------------------------------
+ * Purpose: see below os_sleep_ms
+ *
+ * Parameters: see below.
+ *
+ * Returns: see below.
+ ***E************************************************************************/
+
+#define os_msleep(millisec_) os_sleep_ms(millisec_)
+
+
+/**B*************************************************************************
+ * Macro: os_next_state
+ *---------------------------------------------------------------------------
+ * Purpose: Go back to the read entry point of the process.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_next_state(p_var_, state_) goto os_process_loop_l
+
+
+/**B*************************************************************************
+ * Macro: os_now
+ *---------------------------------------------------------------------------
+ * Purpose: Return the number of ticks since system start.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_now(sample_id) RetrieveClock(sample_id)
+
+
+
+/**B*************************************************************************
+ * Macro: os_outsig_declare
+ *---------------------------------------------------------------------------
+ * Purpose: Declaration of an output signal.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_outsig_declare xSignalHeaderRec *yOutputSignalPtr;
+
+
+/**B*************************************************************************
+ * Macro: os_outsig_get
+ *---------------------------------------------------------------------------
+ * Purpose: Get the pointer to the output signal.
+ *
+ * Parameters: None.
+ *
+ * Returns: Pointer to the output signal.
+ ***E************************************************************************/
+
+#define os_outsig_get() (void *)(yOutputSignalPtr)
+
+
+/**B*************************************************************************
+ * Macro: OS_PROCESS
+ *---------------------------------------------------------------------------
+ * Purpose: Declaration of an operating system task.
+ *
+ * Parameters: x: task name.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+#ifdef OS_PROCESS
+#undef OS_PROCESS
+#endif
+#define OS_PROCESS(x) void x(UNSIGNED argc, VOID *argv)
+#define OS_PROCESS_RETURN(value_) return;
+
+
+/**B*************************************************************************
+ * Macro: os_process_begin
+ *---------------------------------------------------------------------------
+ * Purpose: Define the startup of an operting system process with
+ * input queue.
+ *
+ * Parameters: Process variables with the generic header os_process_var.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+/*
+// P98C-YXS #if 0
+// P98C-YXS //#ifdef _OS_WIN
+// P98C-YXS #if defined UNITEST
+// P98C-YXS #define os_process_begin(var_, self_id_) \
+// P98C-YXS unsigned char SelfId = self_id_; \
+// P98C-YXS memset ( (void *) yVarP, 0, sizeof ( var_ ) ); \
+// P98C-YXS yVarP->Self = ( (struct args *) argv ) -> self; \
+// P98C-YXS yVarP->SelfId = (unsigned char)( ( (struct args *) argv ) -> self_id ); \
+// P98C-YXS yVarP->Offspring = SDL_NULL; \
+// P98C-YXS yVarP->SaveQ.succ = &(yVarP->SaveQ); \
+// P98C-YXS yVarP->SaveQ.pred = &(yVarP->SaveQ); \
+// P98C-YXS yVarP->CurrentInSaveQ = &(yVarP->SaveQ); \
+// P98C-YXS yVarP->yInSignalPtr = 0;
+// P98C-YXS #else
+// P98C-YXS #define os_process_begin(var_, self_id_) \
+// P98C-YXS unsigned char SelfId = self_id_; \
+// P98C-YXS (void) argc; \
+// P98C-YXS memset ( (void *) yVarP, 0, sizeof ( var_ ) ); \
+// P98C-YXS yVarP->Self = ( (struct args *) argv ) -> self; \
+// P98C-YXS yVarP->SelfId = (unsigned char)( ( (struct args *) argv ) -> self_id ); \
+// P98C-YXS yVarP->Offspring = SDL_NULL; \
+// P98C-YXS yVarP->SaveQ.succ = &(yVarP->SaveQ); \
+// P98C-YXS yVarP->SaveQ.pred = &(yVarP->SaveQ); \
+// P98C-YXS yVarP->CurrentInSaveQ = &(yVarP->SaveQ); \
+// P98C-YXS yVarP->yInSignalPtr = 0;
+// P98C-YXS #endif
+// P98C-YXS //#endif
+// P98C-YXS //#else
+// P98C-YXS #endif
+*/
+
+#if defined UNITEST
+#define os_process_begin(var_) \
+ TID SelfId; \
+ memset ( (void *) yVarP, 0, sizeof ( var_ ) ); \
+ yVarP->Self = ( (struct args *) argv ) -> self; \
+ yVarP->SelfId = (unsigned char)( ( (struct args *) argv ) -> self_id ); \
+ yVarP->Offspring = SDL_NULL; \
+ yVarP->SaveQ.succ = &(yVarP->SaveQ); \
+ yVarP->SaveQ.pred = &(yVarP->SaveQ); \
+ yVarP->CurrentInSaveQ = &(yVarP->SaveQ); \
+ yVarP->yInSignalPtr = 0;
+#else
+#define os_process_begin(var_) \
+ TID SelfId; \
+ (void) argc; \
+ memset ( (void *) yVarP, 0, sizeof ( var_ ) ); \
+ yVarP->Self = ( (struct args *) argv ) -> self; \
+ yVarP->SelfId = (unsigned char)( ( (struct args *) argv ) -> self_id ); \
+ yVarP->Offspring = SDL_NULL; \
+ yVarP->SaveQ.succ = &(yVarP->SaveQ); \
+ yVarP->SaveQ.pred = &(yVarP->SaveQ); \
+ yVarP->CurrentInSaveQ = &(yVarP->SaveQ); \
+ yVarP->yInSignalPtr = 0;
+#endif
+//#endif
+
+/**B*************************************************************************
+ * Macro: os_process_loop
+ *---------------------------------------------------------------------------
+ * Purpose: Free the consumed signal and wait for the next signal on the
+ * input queue with the blocked method.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_process_loop(var_) \
+ os_process_loop_l: \
+ os_signal_free (var_##.yInSignalPtr); \
+ var_##.yInSignalPtr = os_signal_receive (var_##.Self);
+
+
+/**B*************************************************************************
+ * Macro: os_process_vars
+ *---------------------------------------------------------------------------
+ * Purpose: Generic header of the process variables.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_process_vars PROCESS_VARS
+
+
+/**B*************************************************************************
+ * Macro: OS_PROCESS_ID
+ *---------------------------------------------------------------------------
+ * Purpose: Process Id of the current process
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_current_process() (yVarP->Self)
+
+
+/**B*************************************************************************
+ * Macro: os_is_booting
+ *---------------------------------------------------------------------------
+ * Purpose: Return 1 if the OS executes the boot procedure otherwise 0.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+extern SINT32 nu_is_booting(VOID);
+#define os_is_booting() nu_is_booting()
+
+
+/**B*************************************************************************
+ * Macro: os_sem_t
+ *---------------------------------------------------------------------------
+ * Purpose: Semaphore data type
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+typedef NU_SEMAPHORE os_sem_t;
+
+
+/**B*************************************************************************
+ * Macro: os_sem_p
+ *---------------------------------------------------------------------------
+ * Purpose: Semaphore pointer declaration
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+typedef NU_SEMAPHORE *os_sem_p;
+
+
+/**B*************************************************************************
+ * Macro: os_protect_t
+ *---------------------------------------------------------------------------
+ * Purpose: Semaphore data type
+ * This can oly be used in HISR context for Tasks use
+ * os_sem_t
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+typedef NU_PROTECT os_protect_t;
+
+
+/**B*************************************************************************
+ * Macro: os_sem_addr
+ *---------------------------------------------------------------------------
+ * Purpose: Address of a semaphore
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_sem_addr(sem_) &sem_
+
+
+/**B*************************************************************************
+ * Macros: OS_SEM_[TYPE]
+ *---------------------------------------------------------------------------
+ * Purpose: Define several styles of semaphores
+ * order of pending task execution.
+ * semaphore obtainer task acceleration
+ * task preemption deactivation
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define OS_SEM_FIFO 1
+#define OS_SEM_PRIORITY 2
+#define OS_SEM_CUSTOM_TYPES 3
+#define OS_SEM_CRIT_SECT OS_SEM_CUSTOM_TYPES
+#define OS_SEM_NO_PREEMPT (OS_SEM_CUSTOM_TYPES+1)
+#define OS_SEM_IRQ_LOCK (OS_SEM_CUSTOM_TYPES+2)
+#define OS_SEM_CRIT_SECT_SIMPLE (OS_SEM_CUSTOM_TYPES+3)
+#define OS_SEM_CS_DEFAULT OS_SEM_CRIT_SECT
+
+
+/**B*************************************************************************
+ * Macro: os_sem_create, os_ssem_create, os_protect_create
+ *---------------------------------------------------------------------------
+ * Purpose: Create a (static) semaphore and define the initial state. 1 means
+ * do not block after the first call, otherwise use 0.
+ *
+ * Parameters: sem_: Pointer to the semaphore.
+ * name_pref_: Prefix of the semaphore's name.
+ * name_no_: Postfix of the name to make the name unique.
+ * initial_count_: Initial semaphore count.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_ssem_create os_sem_create
+#define os_protect_create(sem_, name_pref_, name_no_, initial_count_)
+
+#if MS_OS_CRITICAL_SECTION_SUPPORT > 0
+extern VOID os_sem_create_t_func(NU_SEMAPHORE *sem_p, CHAR const*name_pref,
+ SINT32 name_no, SINT32 initial_count_, SINT32 sema_style);
+
+#define os_sem_create_t(sem_, name_pref_, name_no_, initial_count_, sema_style) \
+os_sem_create_t_func(&(sem_), name_pref_, name_no_, initial_count_, sema_style)
+
+#define os_sem_create(sem_, name_pref_, name_no_, initial_count_) \
+ os_sem_create_t(sem_, name_pref_, name_no_, initial_count_, OS_SEM_FIFO)
+
+#else
+
+#define os_sem_create(sem_, name_pref_, name_no_, initial_count_) \
+do { \
+ UINT32 status; \
+ status = NU_Create_Semaphore( &(sem_), name_pref_, (initial_count_), NU_FIFO); \
+ if (status != ZOSS_SUCCESS) \
+ zOss_ASSERT(0); \
+} while (0)
+
+
+#endif
+
+
+/**B*************************************************************************
+ * Macro: os_sem_reset
+ *---------------------------------------------------------------------------
+ * Purpose: Set the semaphore counter to the initial value.
+ *
+ * Parameters: sem_: Pointer to the semaphore.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_sem_reset(sem_) \
+do { \
+ STATUS status = NU_Reset_Semaphore ( &(sem_), 0 ); \
+ if (status != NU_SUCCESS) \
+ zOss_ASSERT(0); \
+} while (0)
+
+
+/**B*************************************************************************
+ * Macro: os_sem_signal, os_protect
+ *---------------------------------------------------------------------------
+ * Purpose: Releases a previously obtained semaphore. If one or
+ * more tasks are waiting, the first task is given the released
+ * instance of the semaphore. Otherwise, the semaphore instance
+ * counter is simply incremented.
+ *
+ * Parameters: sem_: Pointer to the semaphore.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_protect(sem_)
+
+#if MS_OS_CRITICAL_SECTION_SUPPORT > 0
+
+extern VOID os_sem_signal_func(NU_SEMAPHORE *sem_p);
+#define os_sem_signal(sem_) \
+os_sem_signal_func(&(sem_))
+
+#else
+
+#define os_sem_signal(sem_) \
+do { \
+ UINT32 status = NU_Release_Semaphore(&(sem_)); \
+ if (status != ZOSS_SUCCESS) \
+ zOss_ASSERT(0); \
+} while (0)
+
+#endif
+
+
+/**B*************************************************************************
+ * Macro: os_sem_wait, os_unprotect
+ *---------------------------------------------------------------------------
+ * Purpose: Decrement the semphore counter by 1. If the counter is
+ * greater than zero at the time of this call, this function can
+ * be completed immediately, otherwise suspension.
+ *
+ * Parameters: sem_: Pointer to the semaphore.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+
+#define os_unprotect(sem_)
+
+#if MS_OS_CRITICAL_SECTION_SUPPORT > 0
+
+extern VOID os_sem_wait_func (NU_SEMAPHORE *sem_p);
+#define os_sem_wait(sem_) os_sem_wait_func(&(sem_))
+
+#else
+#define os_sem_wait(sem_) \
+do { \
+ UINT32 status = NU_Obtain_Semaphore ( &(sem_), NU_SUSPEND ); \
+ if (status != ZOSS_SUCCESS) \
+ zOss_ASSERT(0); \
+} while (0)
+#endif
+
+
+/**B*************************************************************************
+ * Macro: os_sem_kill, os_ssem_kill, os_protect_kill
+
+ *---------------------------------------------------------------------------
+ * Purpose: Destroy a (static) semphore.
+ *
+ * Parameters: sem_: Pointer to the semaphore.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_protect_kill
+#define os_ssem_kill os_sem_kill
+
+
+#if MS_OS_CRITICAL_SECTION_SUPPORT > 0
+
+extern VOID os_sem_kill_func(NU_SEMAPHORE *sem_p);
+
+#define os_sem_kill(sem_) \
+os_sem_kill_func(&(sem_))
+
+#else
+#define os_sem_kill(sem_) \
+do { \
+ STATUS status = NU_Delete_Semaphore ( &(sem_) ); \
+ if (status != NU_SUCCESS) \
+ zOss_ASSERT(0); \
+} while (0)
+#endif
+
+
+
+/**B*************************************************************************
+ * Macro: os_signal_t
+ *---------------------------------------------------------------------------
+ * Purpose: Generic part of an I/O signal.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+typedef xSignalHeaderRec os_signal_t;
+
+
+/**B*************************************************************************
+ * Macro: os_print
+ *---------------------------------------------------------------------------
+ * Purpose: Prints strings to the trace output.
+ *
+ * Parameters: str_: String to be printed.
+ *
+ * Returns: None
+ ***E************************************************************************/
+#if 0
+#define os_print(str_) hwtrc_print (str_)
+#define os_task_info(state_, self_id_, sig_cod_, msg_, len_) \
+ hwtrc_task_info(state_, self_id_, sig_cod_, msg_, len_)
+
+
+/**B*************************************************************************
+ * Macro: os_nprint
+ *---------------------------------------------------------------------------
+ * Purpose: Prints the first n chars of a string to the trace output.
+ *
+ * Parameters: str_: string
+ * n_: number of chars in str_
+ *
+ * Returns: None
+ ***E************************************************************************/
+
+#define os_nprint(str_, n_) hwtrc_write (str_, n_)
+
+
+/**B*************************************************************************
+ * Macro: os_write
+ *---------------------------------------------------------------------------
+ * Purpose: Send n bytes to the trace output.
+ *
+ * Parameters: buf_: char sequence
+ * n_: number of chars in buf_
+ *
+ * Returns: None
+ ***E************************************************************************/
+
+#define os_write(buf_, n_) hwtrc_write (buf_, n_)
+#endif
+
+/**B*************************************************************************
+ * Macro: os_signal_alloc
+ *---------------------------------------------------------------------------
+ * Purpose: Allocation of a message buffer for a signal from the
+ * specified partition pool.
+ *
+ * Parameters: signal_id_: Corresponding ID (process index + message id)
+ * to the message type.
+ * signal_type_: Message type used to allocate a message buffer.
+ *
+ * Returns: Pointer to the allocated message buffer.
+ ***E************************************************************************/
+
+#define os_signal_alloc(signal_id_, signal_type_) \
+ { xSignalHeader yOutputSignalPtr = \
+ alloc_sig( sizeof (signal_type_) ); \
+ yOutputSignalPtr->Sender = 0; \
+ yOutputSignalPtr->SignalCode = (signal_id_);
+
+
+/**B*************************************************************************
+ * Macro: os_signal_alloc_from
+ *---------------------------------------------------------------------------
+ * Purpose: Allocation of a message buffer for a signal from the
+ * specified partition pool.
+ *
+ * Parameters: sender_pid_: Used to send back signals.
+ * signal_id_: Corresponding ID (process index + message id)
+ * to the message type.
+ * signal_type_: Message type used to allocate a message buffer.
+ *
+ * Returns: Pointer to the allocated message buffer.
+ ***E************************************************************************/
+
+#define os_signal_alloc_from(sender_pid_, signal_id_, signal_type_) \
+ { xSignalHeader yOutputSignalPtr = \
+ alloc_sig( sizeof (signal_type_) ); \
+ yOutputSignalPtr->Sender = (sender_pid_); \
+ yOutputSignalPtr->SignalCode = (signal_id_);
+
+
+/**B*************************************************************************
+ * Macro: os_signal_alloc_from_to
+ *---------------------------------------------------------------------------
+ * Purpose: Allocation of a message buffer for a signal from the
+ * specified partition pool with generic receiver.
+ *
+ * Parameters: signal_id_: Corresponding ID (process index + message id)
+ * to the message type.
+ * signal_type_: Message type used to allocate a message buffer.
+ * receiver_: PID of the receiver process.*
+ *
+ * Returns: Pointer to the allocated message buffer.
+ ***E************************************************************************/
+
+#define os_signal_alloc_from_to(sender_pid_, receiver_, signal_id_, signal_type_) \
+ yOutputSignalPtr = \
+ alloc_sig(sizeof(signal_type_)); \
+ yOutputSignalPtr->Sender = (sender_pid_); \
+ yOutputSignalPtr->SignalCode = (signal_id_);
+
+
+/**B*************************************************************************
+ * Macro: os_signal_alloc_to
+ *---------------------------------------------------------------------------
+ * Purpose: Allocation of a message buffer for a signal from the
+ * specified partition pool with generic receiver.
+ *
+ * Parameters: signal_id_: Corresponding ID (process index + message id)
+ * to the message type.
+ * signal_type_: Message type used to allocate a message buffer.
+ * receiver_: PID of the receiver process.*
+ *
+ * Returns: Pointer to the allocated message buffer.
+ ***E************************************************************************/
+
+#define os_signal_alloc_to(receiver_, signal_id_, signal_type_) \
+ yOutputSignalPtr = \
+ alloc_sig(sizeof(signal_type_)); \
+ yOutputSignalPtr->SignalCode = (signal_id_);
+
+
+/**B*************************************************************************
+ * Macro: os_signal_paramassign
+ *---------------------------------------------------------------------------
+ * Purpose: Set a scalar paramter value.
+ *
+ * Parameters: sig_: Pointer to the signal header.
+ *
+ * param_no_: Number of the parameter to be set.
+ *
+ * value_: Source value.
+ *
+ * Returns: None
+ ***E************************************************************************/
+
+#define os_signal_paramassign(sig_, param_no_, value_) \
+ ((yPDef_##sig_ *) OUTSIGNAL_DATA_PTR)->Param##param_no_ = (value_)
+
+
+/**B*************************************************************************
+ * Macro: os_signal_paramcopy
+ *---------------------------------------------------------------------------
+ * Purpose: Copies parameter values into a signal message buffer.
+ *
+ * Parameters: sig_: Pointer to the signal header.
+ *
+ * param_no_: Number of the parameter to be set
+ *
+ * src_adr_: Source address
+ *
+ * size_t: Parameter size
+ *
+ * Returns: None
+ ***E************************************************************************/
+
+#define os_signal_paramcopy(sig_, param_no_, src_adr_, size_) \
+ memcpy( (void *) &(((yPDP_##sig_)(OUTSIGNAL_DATA_PTR))->Param##param_no_), \
+ (void *)(src_adr_), \
+ (size_) );
+
+
+/**B*************************************************************************
+ * Macro: os_signal_paramreset
+ *---------------------------------------------------------------------------
+ * Purpose: Resets parameter values of a signal message buffer.
+ *
+ * Parameters: sig_: Pointer to the signal header.
+ *
+ * param_no_: Number of the parameter to be reset
+ *
+ * size_t: Parameter size
+ *
+ * Returns: None
+ ***E************************************************************************/
+
+#define os_signal_paramreset(sig_, param_no_, size_)
+
+
+/**B*************************************************************************
+ * Macro: os_signal_free
+ *---------------------------------------------------------------------------
+ * Purpose: Deallocation of a message buffer for a signal.
+ *
+ * Parameters: signal_ptr: pointer to the signal allocated with
+ * os_signal_alloc().
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_signal_free free_sig
+
+
+/**B*************************************************************************
+ * Macro: os_signal_id
+ *---------------------------------------------------------------------------
+ * Purpose: Extract the signal id from the received input signal
+ *
+ * Parameters: signal_ptr:: pointer to the received signal.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_signal_id(signal_ptr_) SIGNAL_NAME (signal_ptr_->SignalCode, 0)
+
+
+/**B*************************************************************************
+ * Macro: os_signal_receive
+ *---------------------------------------------------------------------------
+ * Purpose: Wait for a signal to arrive. After having performed a
+ * transition,
+ * each process waits here for the next signal to arrive. Once
+ * a signal is available, it is taken out of the queue and the
+ * next transition takes place.
+ *
+ * Parameters: None.
+ *
+ * Returns: Pointer to message buffer.
+ ***E************************************************************************/
+
+#define os_signal_receive(self_) receive_sig(self_)
+
+
+/**B*************************************************************************
+ * Macro: os_signal_route
+ *---------------------------------------------------------------------------
+ * Purpose: Route and send signal according to signal code.
+ * The signal code is an element of the generic signal header.
+ * This element is set in os_signal_alloc().
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_signal_route(signal_id_, signal_name_) \
+ send_sig_no_to (yOutputSignalPtr, signal_id_, signal_name_); }
+
+
+/**B*************************************************************************
+ * Macro: os_signal_send
+ *---------------------------------------------------------------------------
+ * Purpose: The given signal is send to the specified task queue.
+ *
+ * Parameters: receiver_: PID of the receiver process.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_signal_send(receiver_, signal_name_) \
+ SEND_SIG (yOutputSignalPtr, receiver_, signal_name_ );
+
+
+/**B*************************************************************************
+ * Macro: os_signal_vars
+ *---------------------------------------------------------------------------
+ * Purpose: Generic signal header.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_signal_vars SIGNAL_VARS
+
+
+/**B*************************************************************************
+ * Macro: os_timer_t
+ *---------------------------------------------------------------------------
+ * Purpose: Type definition of a timer mapped to an input signal.
+ *
+ * Parameters: None.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+typedef char os_timer_t; /* It is a dummy type. */
+
+
+/**B*************************************************************************
+ * Macro: os_timer_start
+ *---------------------------------------------------------------------------
+ * Purpose: A timer is started with an expiry time relative to the
+ * current system time. The call of os_timer_start()
+ * causes an implicit stop of the timer.
+ * The timer queue, the processes' save and input queues are
+ * searched for the timer signal.
+ * If the timer signal can be found there, it is taken from the
+ * queue and the timer is started anew. If the timer is neither
+ * running nor can the timer signal be found in the process
+ * queues, a message buffer for the timer signal is allocated.
+ * This block (re-used or newly allocated) is
+ * then enqueued at the proper place in the timer queue.
+ *
+ * Parameters: Import of the process variables as yVarP with the generic
+ * header (os_process_var).
+ * t_name_: name of the timer variable, must be an element of
+ * the process variables.
+ * t_id_: timer id, used as input signal.
+ * secs_: number of seconds (long).
+ * nano_secs_: nano seconds (long).
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_timer_start(t_name_, t_id_, tick_expr_,sample_id) \
+do { \
+ SDL_SET_DUR (0, tick_expr_, t_id_, 0, t_name_, "",sample_id); \
+} while (0)
+
+
+/**B*************************************************************************
+ * Macro: os_timer_stop
+ *---------------------------------------------------------------------------
+ * Purpose: A timer is stopped.
+ * The timer queue, the processes' save and input queues are
+ * searched for the timer signal.
+ * If the timer signal can be found there, it is removed from
+ * the queue, and the timer signal (i. e. the message buffer)
+ * is freed.
+ *
+ * Parameters: Import of the process variables as yVarP with the generic
+ * header (os_process_var).
+ * t_name_: name of the timer variable,
+ * must be an element of the process variables.
+ * t_id_: timer id, used as input signal.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_timer_stop(t_name_, t_id_) \
+do { \
+ SDL_RESET (t_id_, 0, t_name_, ""); \
+} while (0)
+
+
+/**B*************************************************************************
+ * Macro: os_timer_stop_with_para
+ *---------------------------------------------------------------------------
+ * Purpose: A timer is stopped.
+ * The timer queue, the processes' save and input queues are
+ * searched for the timer signal.
+ * If the timer signal can be found there, it is removed from
+ * the queue, and the timer signal (i. e. the message buffer)
+ * is freed.
+ *
+ * Parameters: Import of the process variables as yVarP with the generic
+ * header (os_process_var).
+ * t_name_: name of the timer variable,
+ * must be an element of the process variables.
+ * t_id_: timer id, used as input signal.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#define os_timer_stop_with_para(t_name_, t_id_, t_param,sample_id) \
+do { \
+ SDL_Reset (t_id_, t_param, (t_process_vars *) yVarP,sample_id); \
+} while (0)
+
+
+/**B*************************************************************************
+ * Macro: os_timer_start_with_para
+ *---------------------------------------------------------------------------
+ * Purpose: A timer is started with an expiry time relative to the
+ * current system time. The call of os_timer_start()
+ * causes an implicit stop of the timer.
+ * The timer queue, the processes' save and input queues are
+ * searched for the timer signal.
+ * If the timer signal can be found there, it is taken from the
+ * queue and the timer is started anew. If the timer is neither
+ * running nor can the timer signal be found in the process
+ * queues, a message buffer for the timer signal is allocated.
+ * This block (re-used or newly allocated) is
+ * then enqueued at the proper place in the timer queue.
+ *
+ * Parameters: Import of the process variables as yVarP with the generic
+ * header (os_process_var).
+ * t_name_: name of the timer variable, must be an element of
+ * the process variables.
+ * t_id_: timer id, used as input signal.
+ * secs_: number of seconds (long).
+ * nano_secs_: nano seconds (long).
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+#if defined (SDL_SET_DUR_EX)
+
+#define os_timer_soft_start_with_para(t_name_, t_id_, t_param, earliest_tick_expr_, latest_tick_expr_,sample_id) \
+do { \
+ SDL_Set_Dur_Ex (earliest_tick_expr_, latest_tick_expr_, t_id_, t_param, (t_process_vars *) yVarP,sample_id); \
+} while (0)
+
+#define os_timer_start_with_para(t_name_, t_id_, t_param, tick_expr_,sample_id) \
+do { \
+ SDL_Set_Dur (tick_expr_, t_id_, t_param, (t_process_vars *) yVarP,sample_id); \
+} while (0)
+
+#else
+
+#define os_timer_start_with_para(t_name_, t_id_, t_param, tick_expr_,sample_id) \
+do { \
+ SDL_Set_Dur (tick_expr_, t_id_, t_param, (t_process_vars *) yVarP,sample_id); \
+} while (0)
+
+#define os_timer_soft_start_with_para(t_name_, t_id_, t_param, earliest_tick_expr_, latest_tick_expr_,sample_id) \
+do { \
+ SDL_Set_Dur (earliest_tick_expr_, t_id_, t_param, (t_process_vars *) yVarP,sample_id); \
+} while (0)
+
+#endif
+
+
+/**B*************************************************************************
+ * Macro: os_is_task_call
+ *---------------------------------------------------------------------------
+ * Purpose: Nucleus often crashes if a TASK functions are called
+ * from HISR and LISR context
+ *
+ *
+ * Parameters: NONE
+ *
+ * Returns: 0 if it is a HISR or LISR context
+ * 1 if it is a TASK context
+ ***E************************************************************************/
+
+#define os_is_task_call() (NU_Current_Task_Pointer() != NULL)
+
+
+/*===========================================================================
+EXPORTED TYPE DECLARATIONS
+===========================================================================*/
+
+typedef void (* os_timeout_handler) (void *arg);
+
+
+/*============================================================================
+EXPORTED FUNCTIONS
+============================================================================*/
+
+/**B************************************************************************
+ * Function: os_init
+ *--------------------------------------------------------------------------
+ * Purpose: Module initialization for MS OS abstraction layer.
+ *
+ * Parameters: None
+ *
+ * Returns: None
+ ***E***********************************************************************/
+
+extern VOID os_init(VOID);
+
+
+/**B*************************************************************************
+ * Function: os_sdlpid_current
+ *---------------------------------------------------------------------------
+ * Purpose: Return the SDL pid of the current task.
+ *
+ * Parameters: None
+ *
+ * Returns: SDL pid.
+ ***E************************************************************************/
+
+extern OS_pid_t os_sdlpid_current(VOID);
+
+
+/**B*************************************************************************
+ * Function: os_sdlpid_deregister
+ *---------------------------------------------------------------------------
+ * Purpose: Remove the pid of an SDL process.
+ *
+ * Parameters: None
+ *
+ * Returns: None
+ ***E************************************************************************/
+
+extern VOID os_sdlpid_deregister(VOID);
+
+
+/**B*************************************************************************
+ * Function: os_sdlpid_register
+ *---------------------------------------------------------------------------
+ * Purpose: os_sdlpid_current
+ *---------------------------------------------------------------------------
+ * Purpose: Return the SDL pid of the current task.
+ *
+ * Parameters: None
+ *
+ * Returns: SDL pid.
+ ***E************************************************************************/
+
+extern OS_pid_t os_sdlpid_current(VOID);
+
+
+/**B*************************************************************************
+ * Function: os_sdlpid_deregister
+ *---------------------------------------------------------------------------
+ * Purpose: Save the pid of an SDL process.
+ *
+ * Parameters: SDL pid
+ *
+ * Returns: None
+ ***E************************************************************************/
+
+// P98C-YXS extern VOID os_sdlpid_register(OS_pid_t sdl_pid);
+
+
+/**B*************************************************************************
+ * Macro: os_sleep_ms
+ *---------------------------------------------------------------------------
+ * Purpose: os_sleep_ms() makes the current process sleep until ms
+ * milliseconds have elapsed.
+ *
+ * Parameters: unsigned long ms: # of milliseconds
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+extern VOID os_sleep_ms(UNSIGNED ms);
+
+
+/**B*************************************************************************
+ * Macro: os_task_create
+ *---------------------------------------------------------------------------
+ * Purpose: This procedure creates an application task.
+ *
+ * Parameters:
+ * task Pointer to th user-supplied task control block.
+ * name Pointer to an 8 character name for the task.
+ * entry Specifies the entry function of the task.
+ * stack Designates the starting memory location of the tasks
+ * stack area.
+ * stack_size Specifies the number of bytes in the stack.
+ * priority Specifies a priority value between 0 and 255. The lower
+ * numeric value, the higher the tasks priority.
+ *
+ * Returns: 1 indicates successful completion of the service,
+ * otherwise 0 or soft crash..
+ ***E************************************************************************/
+typedef NU_TASK *os_task_id_t;
+typedef VOID *os_task_stack_t;
+typedef VOID (*os_task_func_t)(SINT32);
+typedef OPTION os_task_prio_t;
+
+// P98C-YXS extern SINT32 os_task_create (os_task_id_t *id,
+// P98C-YXS CHAR *name,
+// P98C-YXS os_task_func_t entry,
+// P98C-YXS os_task_stack_t *stack,
+// P98C-YXS UNSIGNED stack_size,
+// P98C-YXS os_task_prio_t priority);
+
+/**B*************************************************************************
+ * Macro: os_timeout
+ *---------------------------------------------------------------------------
+ * Purpose: Schedule a timeout a specified amount of seconds in the
+ * future. When the timeout occurs, the specified timeout
+ * handler will be called. The handler will be passed the
+ * "arg" argument when called.
+ *
+ * Parameters: unsigned char secs: # of seconds
+ * os_timeout_handler h: timer handler.
+ * void *arg: argument of the timer handler.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+// P98C-YXS extern VOID os_timeout(UINT8 secs, os_timeout_handler h, VOID *arg);
+
+
+/**B*************************************************************************
+ * Macro: os_timeout_ms
+ *---------------------------------------------------------------------------
+ * Purpose: Schedule a timeout a specified amount of milliseconds in the
+ * future. When the timeout occurs, the specified timeout
+ * handler will be called. The handler will be passed the
+ * "arg" argument when called.
+ *
+ * Parameters: unsigned long ms: # of seconds
+ * os_timeout_handler h: timer handler.
+ * void *arg: argument of the timer handler.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+// P98C-YXS extern VOID os_timeout_ms(UNSIGNED ms, os_timeout_handler h, VOID *arg);
+
+
+/**B*************************************************************************
+ * Macro: os_untimeout
+ *---------------------------------------------------------------------------
+ * Purpose: Deinstall the timeout handler activated about os_timeout or
+ * about os_timeout_ms.
+ *
+ * Parameters: os_timeout_handler h: timer handler.
+ * void *arg: argument of the timer handler.
+ *
+ * Returns: None.
+ ***E************************************************************************/
+
+// P98C-YXS extern VOID os_untimeout(os_timeout_handler h, VOID *arg);
+
+#endif
+
+/* ms_os.h ends here. */
+