initial release
[apps/tidep0074.git] / ipu2 / MainIpu2.c
1 /*
2  * Copyright (c) 2013, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
33 /*
34  *  ======== main_Ipu2.c ========
35  *
36  */
38 /* xdctools header files */
39 #include <xdc/std.h>
40 #include <xdc/runtime/Diags.h>
41 #include <xdc/runtime/Error.h>
42 #include <xdc/runtime/Log.h>
43 #include <xdc/runtime/System.h>
45 /* package header files */
46 #include <ti/ipc/Ipc.h>
47 #include <ti/sysbios/BIOS.h>
48 #include <ti/sysbios/knl/Task.h>
50 /* local header files */
51 #include "Server.h"
53 /* private functions */
54 static Void smain(UArg arg0, UArg arg1);
57 /*
58  *  ======== main ========
59  */
60 Int main(Int argc, Char* argv[])
61 {
62     Error_Block     eb;
63     Task_Params     taskParams;
65     Log_print0(Diags_ENTRY, "--> main:");
67     /* must initialize the error block before using it */
68     Error_init(&eb);
70     /* create main thread (interrupts not enabled in main on BIOS) */
71     Task_Params_init(&taskParams);
72     taskParams.instance->name = "smain";
73     taskParams.arg0 = (UArg)argc;
74     taskParams.arg1 = (UArg)argv;
75     taskParams.stackSize = 0x1000;
76     Task_create(smain, &taskParams, &eb);
78     if (Error_check(&eb)) {
79         System_abort("main: failed to create application startup thread");
80     }
82     /* start scheduler, this never returns */
83     BIOS_start();
85     /* should never get here */
86     Log_print0(Diags_EXIT, "<-- main:");
87     return (0);
88 }
91 /*
92  *  ======== smain ========
93  */
94 Void smain(UArg arg0, UArg arg1)
95 {
96     Int                 status = 0;
97     Error_Block         eb;
98     Bool                running = TRUE;
100     Log_print0(Diags_ENTRY | Diags_INFO, "--> smain:");
102     Error_init(&eb);
104     /* initialize modules */
105     Server_init();
107     /* turn on Diags_INFO trace */
108     Diags_setMask("Server+F");
110     /* loop forever */
111     while (running) {
113         /* BEGIN server phase */
115         /* server setup phase */
116         status = Server_create();
118         if (status < 0) {
119             goto leave;
120         }
122         /* server execute phase */
123         status = Server_exec();
125         if (status < 0) {
126             goto leave;
127         }
129         /* server shutdown phase */
130         status = Server_delete();
132         if (status < 0) {
133             goto leave;
134         }
136         /* END server phase */
138     } /* while (running) */
140     /* finalize modules */
141     Server_exit();
143 leave:
144     Log_print1(Diags_EXIT, "<-- smain: %d", (IArg)status);
145     return;