1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16/**
17 ************************************************************************
18 * @file         M4OSA_Error.h
19 * @ingroup      OSAL
20 * @brief        Definition of common error types
21 * @note         This file contains macros to generate and analyze error codes.
22 ************************************************************************
23*/
24
25
26#ifndef M4OSA_ERROR_H
27#define M4OSA_ERROR_H
28
29#include "M4OSA_Types.h"
30
31/** M4OSA_ERR is a 32 bits unsigned integer.
32 * To sort returned code, a specific naming convention must be followed:
33 * - Severity (2 bits): It may br either 0b00 (no error), 0b01 (warning) or
34 *                      0b01 (fatal error)
35 * - Core ID (14 bits): It is a unique ID for each core component
36 * - ErrorID (16 bits): It is the specific error code
37
38 * EACH CORE COMPONENT FUNCTION SHOULD RETURN AN M4OSA_ERR
39*/
40typedef M4OSA_UInt32   M4OSA_ERR;
41
42#define M4_OK     0
43#define M4_WAR    1
44#define M4_ERR    2
45
46
47/* Macro to process M4OSA_ERR */
48
49/** This macro tests if the provided M4OSA_ERR is a warning or not*/
50#define M4OSA_ERR_IS_WARNING(error)   ((((error)>>30) == M4_WAR) ? 1:0)
51
52/** This macro tests if the provided M4OSA_ERR is a fatal error or not*/
53#define M4OSA_ERR_IS_ERROR(error)   ((((error)>>30) == M4_ERR) ? 1:0)
54
55/** This macro returns an error code accroding to the 3 provided fields:
56  * @arg severity: (IN) [M4OSA_UInt32] Severity to put in the error code
57  * @arg coreID: (IN) [M4OSA_UInt32] CoreID to put in the error code
58  * @arg errorID: (IN) [M4OSA_UInt32] ErrorID to put in the error code*/
59#define M4OSA_ERR_CREATE(severity, coreID, errorID)\
60   (M4OSA_Int32)((((M4OSA_UInt32)severity)<<30)+((((M4OSA_UInt32)coreID)&0x003FFF)<<16)+(((M4OSA_UInt32)errorID)&0x00FFFF))
61
62/** This macro extracts the 3 fields from the error:
63  * @arg error: (IN) [M4OSA_ERR] Error code
64  * @arg severity: (OUT) [M4OSA_UInt32] Severity to put in the error code
65  * @arg coreID: (OUT) [M4OSA_UInt32] CoreID to put in the error code
66  * @arg errorID: (OUT) [M4OSA_UInt32] ErrorID to put in the error code*/
67#define M4OSA_ERR_SPLIT(error, severity, coreID, errorID)\
68   { severity=(M4OSA_UInt32)((error)>>30);\
69     coreID=(M4OSA_UInt32)(((error)>>16)&0x003FFF);\
70     (M4OSA_UInt32)(errorID=(error)&0x00FFFF); }
71
72
73/* "fake" CoreID, is used to report an unknown CoreID. Used by the trace system
74when the core ID macro isn't defined. Defined here instead of CoreID.h to avoid
75introducing dependencies to common/inc. */
76
77#define M4UNKNOWN_COREID    0x3FFF /* max possible CoreID */
78
79#define M4_COMMON           0x00  /**<Common*/
80#define M4MP4_COMMON        0x01  /**<Core MP4 (common)*/
81#define M4MP4_WRITER        0x02  /**<Core MP4 writer*/
82#define M4MP4_READER        0x03  /**<Core MP4 reader*/
83#define M4RTSP_COMMON       0x11  /**<Core RTSP common*/
84#define M4RTSP_WRITER       0x12  /**<Core RTSP transmitter*/
85#define M4RTSP_READER       0x13  /**<Core RTSP receiver*/
86#define M4RTP_WRITER        0x14  /**<Core RTP/RTCP receiver*/
87#define M4RTP_READER        0x15  /**<Core RTP/RTCP transmitter*/
88#define M4SAP_WRITER        0x16  /**<Core SAP transmitter*/
89#define M4SAP_READER        0x17  /**<Core SAP receiver*/
90#define M4DVBH_READER        0x18  /**<Core DVBH receiver*/
91#define M4SDP_WRITER        0x22  /**<Core SDP writer*/
92#define M4SDP_READER        0x31  /**<Core SDP reader*/
93#define M4PAK_AMR           0x32  /**<Core packetizer AMR (RFC3267)*/
94#define M4DEPAK_AMR         0x33  /**<Core de-packetizer AMR (RFC3267)*/
95#define M4PAK_H263          0x34  /**<Core packetizer H263 (RFC2429)*/
96#define M4DEPAK_H263        0x35  /**<Core de-packetizer H263(RFC2429)*/
97#define M4PAK_SIMPLE        0x36  /**<Core packetizer SimpleDraft (RFC xxxx)*/
98#define M4DEPAK_SIMPLE      0x37  /**<Core de-packetizer SimpleDraft (RFC xxxx)*/
99#define M4PAK_3016_VIDEO    0x38  /**<Core packetizer RFC3016 video*/
100#define M4DEPAK_3016_VIDEO  0x39  /**<Core de-packetizer RFC3016 video*/
101#define M4PAK_3016_AUDIO    0x3A  /**<Core packetizer RFC3016 audio (LATM)*/
102#define M4DEPAK_3016_AUDIO  0x3B  /**<Core de-packetizer RFC3016 audio (LATM)*/
103#define M4DEPAK_H264        0x3C  /**<Core de-packetizer H264*/
104#define M4DEPAK_REALV        0x3D  /**<Core de-packetizer Real Video */
105#define M4DEPAK_REALA        0x3E  /**<Core de-packetizer Real Audio */
106#define M4RDT_READER        0x3F  /**<Core RDT receiver*/
107#define M4TCP_DMUX          0x50  /**<Core TCP demux*/
108#define M4IOD_PARSER        0x51  /**<Core IOD parser*/
109#define M4OSA_FILE_COMMON   0x61  /**<OSAL file common*/
110#define M4OSA_FILE_WRITER   0x62  /**<OSAL file writer*/
111#define M4OSA_FILE_READER   0x63  /**<OSAL file reader*/
112#define M4OSA_FILE_EXTRA    0x64  /**<OSAL file extra*/
113#define M4OSA_DIRECTORY     0x65  /**<OSAL directory*/
114#define M4OSA_SOCKET        0x71  /**<OSAL socket (both reader and writer)*/
115#define M4OSA_THREAD        0x81  /**<OSAL thread*/
116#define M4OSA_MUTEX         0x82  /**<OSAL mutex*/
117#define M4OSA_SEMAPHORE     0x83  /**<OSAL semaphore*/
118#define M4OSA_CLOCK         0x84  /**<OSAL clock*/
119#define M4OSA_MEMORY        0x91  /**<OSAL memory*/
120#define M4CALL_BACK         0xA1  /**<Call Back error*/
121#define M4OSA_URI           0xB1  /**<OSAL URI handler*/
122#define M4OSA_STRING        0xB2  /**<OSAL string*/
123#define M4SYS_CMAPI         0xB3  /**<SYSTEM Common Medi API*/
124#define M4OSA_CHARSTAR      0xB4  /**<OSAL CharStar*/
125#define M4REACTOR           0xC1  /**<Core reactor*/
126#define M4TEST              0xD1  /**<Test component*/
127#define M4STACK                0xE1  /**< Core ID of the integrated stack*/
128#define M4STACK_REAL        0xE2  /**<Core ID of the Real integrated stack */
129#define M4TOOL_LBVT_PARAM   0xF1  /**<LB_VT config file manager*/
130#define M4TOOL_LINK_LIST    0xF2  /**<Tool linked list*/
131#define M4TOOL_BASE64       0xF3  /**<Core base64 encoder/decoder*/
132
133
134
135/* Definition of common error codes */
136/** there is no error*/
137#define M4NO_ERROR            0x00000000
138
139/** At least one parameter is NULL*/
140#define M4ERR_PARAMETER            M4OSA_ERR_CREATE(M4_ERR,M4_COMMON,0x000001)
141/** This function cannot be called now*/
142#define M4ERR_STATE                M4OSA_ERR_CREATE(M4_ERR,M4_COMMON,0x000002)
143/** There is no more memory available*/
144#define M4ERR_ALLOC                M4OSA_ERR_CREATE(M4_ERR,M4_COMMON,0x000003)
145/** Provided context is not a valid one*/
146#define M4ERR_BAD_CONTEXT          M4OSA_ERR_CREATE(M4_ERR,M4_COMMON,0x000004)
147#define M4ERR_CONTEXT_FAILED       M4OSA_ERR_CREATE(M4_ERR,M4_COMMON,0x000005)
148#define M4ERR_BAD_STREAM_ID        M4OSA_ERR_CREATE(M4_ERR,M4_COMMON,0x000006)
149/** The optionID is not a valid one*/
150#define M4ERR_BAD_OPTION_ID        M4OSA_ERR_CREATE(M4_ERR,M4_COMMON,0x000007)
151/** This option is a write only one*/
152#define M4ERR_WRITE_ONLY           M4OSA_ERR_CREATE(M4_ERR,M4_COMMON,0x000008)
153/** This option is a read only one*/
154#define M4ERR_READ_ONLY            M4OSA_ERR_CREATE(M4_ERR,M4_COMMON,0x000009)
155/** This function is not supported yet*/
156#define M4ERR_NOT_IMPLEMENTED      M4OSA_ERR_CREATE(M4_ERR,M4_COMMON,0x00000A)
157
158#define    M4ERR_UNSUPPORTED_MEDIA_TYPE  M4OSA_ERR_CREATE(M4_ERR, M4_COMMON, 0x00000B)
159
160#define M4WAR_NO_DATA_YET          M4OSA_ERR_CREATE(M4_WAR,M4_COMMON,0x000001)
161#define M4WAR_NO_MORE_STREAM       M4OSA_ERR_CREATE(M4_WAR,M4_COMMON,0x000002)
162#define M4WAR_INVALID_TIME         M4OSA_ERR_CREATE(M4_WAR,M4_COMMON,0x000003)
163#define M4WAR_NO_MORE_AU           M4OSA_ERR_CREATE(M4_WAR,M4_COMMON,0x000004)
164#define M4WAR_TIME_OUT             M4OSA_ERR_CREATE(M4_WAR,M4_COMMON,0x000005)
165/** The buffer is full*/
166#define M4WAR_BUFFER_FULL          M4OSA_ERR_CREATE(M4_WAR,M4_COMMON,0x000006)
167/* The server asks for a redirection */
168#define M4WAR_REDIRECT               M4OSA_ERR_CREATE(M4_WAR,M4_COMMON,0x000007)
169#define M4WAR_TOO_MUCH_STREAMS     M4OSA_ERR_CREATE(M4_WAR,M4_COMMON,0x000008)
170/* SF Codec detected INFO_FORMAT_CHANGE during decode */
171#define M4WAR_INFO_FORMAT_CHANGE M4OSA_ERR_CREATE(M4_WAR, M4_COMMON, 0x000009)
172
173#endif /*M4OSA_ERROR_H*/
174
175