DVBCore
1.0
Open source DVB engine
|
00001 /******************************************************************************* 00002 * Copyright © 2014 The DTVKit Open Software Foundation Ltd (www.dtvkit.org) 00003 * Copyright © 2004 Ocean Blue Software Ltd 00004 * 00005 * This file is part of a DTVKit Software Component 00006 * You are permitted to copy, modify or distribute this file subject to the terms 00007 * of the DTVKit 1.0 Licence which can be found in licence.txt or at www.dtvkit.org 00008 * 00009 * THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, 00010 * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES 00011 * OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. 00012 * 00013 * If you or your organisation is not a member of DTVKit then you have access 00014 * to this source code outside of the terms of the licence agreement 00015 * and you are expected to delete this and any associated files immediately. 00016 * Further information on DTVKit, membership and terms can be found at www.dtvkit.org 00017 *******************************************************************************/ 00025 // pre-processor mechanism so multiple inclusions don't cause compilation error 00026 00027 #ifndef _STBERC_H 00028 00029 #define _STBERC_H 00030 00031 //---Constant and macro definitions for public use----------------------------- 00032 00033 // Event classses 00034 // This is an 8-bit number arranges as follows: 00035 // 00036 // bit bit 00037 // 7 0 00038 // xiiiiiii 00039 // 00040 // where: 00041 // x is set only if the class of event originates from hardware operated by the user 00042 // such peripherals have a meaningful ability to be auto-repeated. 00043 // iiiiiii is the unique class number, offering up a range from (0x01 to 0x7f inclusive) 00044 00045 #define EV_CLASS_MASK 0x007f 00046 #define EV_CLASS_CAN_REPEAT_FLAG 0x0080 00047 00048 #define HARDWARE_EVENT(id) (id & EV_CLASS_MASK) 00049 #define USER_EVENT(id) ((id & EV_CLASS_MASK) | EV_CLASS_CAN_REPEAT_FLAG) 00050 00051 /* Event codes used within the DVB stack are 32-bit values derived from the 00052 * event's class and event type. */ 00053 #define EVENT_CODE(class, type) (((class) << 16) | (type)) 00054 00055 /* Macros to extract each part of the info stored in an event code */ 00056 #define EVENT_CLASS(code) ((code >> 16) & 0xff) 00057 #define EVENT_TYPE(code) (code & 0xffff) 00058 00059 00060 #define EV_CLASS_HSET USER_EVENT(0x01) 00061 #define EV_CLASS_KEYP USER_EVENT(0x02) 00062 #define EV_CLASS_TUNE HARDWARE_EVENT(0x03) 00063 #define EV_CLASS_DECODE HARDWARE_EVENT(0x04) 00064 #define EV_CLASS_SEARCH HARDWARE_EVENT(0x05) 00065 #define EV_CLASS_LNB HARDWARE_EVENT(0x06) 00066 #define EV_CLASS_DISH HARDWARE_EVENT(0x07) 00067 #define EV_CLASS_SKEW HARDWARE_EVENT(0x08) 00068 #define EV_CLASS_SCART HARDWARE_EVENT(0x09) 00069 #define EV_CLASS_UI HARDWARE_EVENT(0x0a) 00070 #define EV_CLASS_OTA_SW_UPGRADE HARDWARE_EVENT(0x0b) 00071 00072 #define EV_CLASS_MHEG HARDWARE_EVENT(0xc) 00073 #define EV_CLASS_MHEG_TUNE_REQUEST HARDWARE_EVENT(0xd) 00074 #define EV_CLASS_PVR HARDWARE_EVENT(0xe) 00075 #define EV_CLASS_TIMER HARDWARE_EVENT(0xf) 00076 #define EV_CLASS_APPLICATION HARDWARE_EVENT(0x10) 00077 #define EV_CLASS_DVD HARDWARE_EVENT(0x12) 00078 #define EV_CLASS_MHEG_DISPLAY_INFO HARDWARE_EVENT(0x13) 00079 00080 #define EV_CLASS_CI HARDWARE_EVENT(0x14) 00081 #define EV_CLASS_DISK HARDWARE_EVENT(0x15) 00082 #define EV_CLASS_HDMI HARDWARE_EVENT(0x16) 00083 #define EV_CLASS_MHEG_STREAMING_REQUEST HARDWARE_EVENT(0x17) 00084 #define EV_CLASS_MHEG_ACTION_REQUEST HARDWARE_EVENT(0x18) 00085 00086 #define EV_CLASS_PRIVATE HARDWARE_EVENT(0xFF) 00087 00088 // Event types 00089 #define EV_TYPE_FAIL 0x0000 00090 #define EV_TYPE_SUCCESS 0x0001 00091 #define EV_TYPE_FORCE 0x0002 00092 #define EV_TYPE_LOCKED 0x0003 00093 #define EV_TYPE_NOTLOCKED 0x0004 00094 #define EV_TYPE_STARTED 0x0005 00095 #define EV_TYPE_STOPPED 0x0006 00096 #define EV_TYPE_AUDIO_STARTED 0x0007 00097 #define EV_TYPE_AUDIO_STOPPED 0x0008 00098 #define EV_TYPE_VIDEO_STARTED 0x0009 00099 #define EV_TYPE_VIDEO_STOPPED 0x000a 00100 #define EV_TYPE_PAUSED 0x000b 00101 #define EV_TYPE_16_9 0x000c 00102 #define EV_TYPE_4_3 0x000d 00103 #define EV_TYPE_SIGNAL_DATA_BAD 0x000e 00104 #define EV_TYPE_SIGNAL_DATA_OK 0x000f 00105 #define EV_TYPE_DISCONNECTED 0x0010 00106 #define EV_TYPE_SAMPLE_STARTED 0x0011 00107 #define EV_TYPE_SAMPLE_STOPPED 0x0012 00108 #define EV_TYPE_AD_STARTED 0x0013 00109 #define EV_TYPE_AD_STOPPED 0x0014 00110 #define EV_TYPE_CONNECTED 0x0015 00111 #define EV_TYPE_AUDIO_UNDERFLOW 0x0016 00112 #define EV_TYPE_VIDEO_UNDERFLOW 0x0017 00113 #define EV_TYPE_UPDATE 0x0018 00114 #define EV_TYPE_FORCED_SERVICE_CHANGE 0x0019 00115 00116 // Over the air s/w upgrade related events 00117 #define EV_TYPE_OTA_SW_UPGRADE_FOUND 0x3000 00118 #define EV_TYPE_OTA_SW_UPGRADE_NOTFOUND 0x3001 00119 00120 #define EV_TYPE_OTA_SW_UPGRADE_DOWNLOADING 0x3002 00121 #define EV_TYPE_OTA_SW_UPGRADE_ERROR 0x3003 00122 #define EV_TYPE_OTA_SW_UPGRADE_BURNING 0x3004 00123 #define EV_TYPE_OTA_SW_UPGRADE_COMPLETED 0x3005 00124 00125 /* Mheg event types */ 00126 #define EV_TYPE_START_SUBTITLES 0x4001 00127 #define EV_TYPE_STOP_SUBTITLES 0x4002 00128 #define EV_TYPE_MHEG_TUNE_INDEX 0x4003 00129 #define EV_TYPE_MHEG_TUNE_DSD 0x4004 00130 #define EV_TYPE_MHEG_TUNE_TRIPLET 0x4005 00131 00132 // special terrestrial search event type 00133 #define EV_TYPE_TERR_NETWORK_CHANGED 0x5000 00134 00135 // PVR related events 00136 #define EV_TYPE_PVR_REC_START 0x6000 00137 #define EV_TYPE_PVR_REC_STOP 0x6001 00138 #define EV_TYPE_PVR_PLAY_START 0x6002 00139 #define EV_TYPE_PVR_PLAY_STOP 0x6003 00140 #define EV_TYPE_PVR_PLAY_BOF 0x6004 00141 #define EV_TYPE_PVR_PLAY_EOF 0x6005 00142 00143 //DVD related events 00144 #define EV_TYPE_DVD_DISK_INSERTED 0x7000 00145 #define EV_TYPE_DVD_DISK_REMOVED 0x7001 00146 00147 // MHEG event types 00148 #define EV_TYPE_MHEG_TUNE_NORMALLY 0x8000 00149 #define EV_TYPE_MHEG_TUNE_QUIETLY 0x8001 00150 #define EV_TYPE_MHEG_PROMO_LINK_CHANGE 0x8002 00151 00152 /* CI event types */ 00153 #define EV_TYPE_CI_INSERT 0x9001 00154 #define EV_TYPE_CI_REMOVE 0x9002 00155 #define EV_TYPE_CI_CAM_UPGRADE_PROGRESS 0x9003 00156 #define EV_TYPE_CI_CAM_UPGRADE_COMPLETE 0x9004 00157 #define EV_TYPE_CI_CAM_UPGRADE_FAILED 0x9005 00158 #define EV_TYPE_CI_SLOT_STATUS_UPDATED 0x9006 00159 #define EV_TYPE_CI_URI_UPDATED 0x9007 00160 #define EV_TYPE_CI_KEYS_UPDATED 0x9008 00161 #define EV_TYPE_CI_OPEN 0x9009 00162 #define EV_TYPE_CI_CLOSE 0x900A 00163 #define EV_TYPE_CI_TUNE 0x900B 00164 #define EV_TYPE_CI_RELEASE_REPLY 0x900C 00165 #define EV_TYPE_CI_REQUEST_OPERATOR_SEARCH 0x900D 00166 #define EV_TYPE_CI_OPERATOR_SEARCH_FINISHED 0x900E 00167 #define EV_TYPE_CI_RECORD_START 0x900F 00168 #define EV_TYPE_CI_RECORD_START_FAILED 0x9010 00169 #define EV_TYPE_CI_RECORD_LICENCE_UPDATED 0x9011 00170 #define EV_TYPE_CI_PLAYBACK_LICENCE_UPDATED 0x9012 00171 #define EV_TYPE_CI_PLAYBACK_LICENCE_STATUS 0x9013 00172 #define EV_TYPE_CI_PIN_STATUS 0x9014 00173 #define EV_TYPE_CI_RECORD_PIN 0x9015 00174 #define EV_TYPE_CI_PLAYBACK_BLANK_VIDEO 0x9016 00175 #define EV_TYPE_CI_PLAYBACK_PIN_STATUS 0x9017 00176 00177 /* Disk related events */ 00178 #define EV_TYPE_DISK_CONNECTED 0xA000 00179 #define EV_TYPE_DISK_REMOVED 0xA001 00180 #define EV_TYPE_DISK_FULL 0xA002 00181 00182 /* MHEG streaming event types */ 00183 #define EV_TYPE_MHEG_STREAMING_SETUP 0xB001 00184 #define EV_TYPE_MHEG_STREAMING_STOP 0xB002 00185 #define EV_TYPE_MHEG_STREAMING_PAUSE 0xB003 00186 #define EV_TYPE_MHEG_PIN_REQUEST 0xB004 00187 00188 /* MHEG action requests */ 00189 #define EV_TYPE_MHEG_REQUEST_VIDEO 0xC001 00190 #define EV_TYPE_MHEG_REQUEST_AUDIO 0xC002 00191 #define EV_TYPE_MHEG_REQUEST_RESTORE_VIDEO 0xc003 00192 #define EV_TYPE_MHEG_REQUEST_RESTORE_AUDIO 0xC004 00193 00194 /* Tuner events */ 00195 #define STB_EVENT_TUNE_LOCKED EVENT_CODE(EV_CLASS_TUNE, EV_TYPE_LOCKED) 00196 #define STB_EVENT_TUNE_NOTLOCKED EVENT_CODE(EV_CLASS_TUNE, EV_TYPE_NOTLOCKED) 00197 #define STB_EVENT_TUNE_STOPPED EVENT_CODE(EV_CLASS_TUNE, EV_TYPE_STOPPED) 00198 #define STB_EVENT_TUNE_SIGNAL_DATA_BAD EVENT_CODE(EV_CLASS_TUNE, EV_TYPE_SIGNAL_DATA_BAD) 00199 #define STB_EVENT_TUNE_SIGNAL_DATA_OK EVENT_CODE(EV_CLASS_TUNE, EV_TYPE_SIGNAL_DATA_OK) 00200 00201 /* SI engine events */ 00202 #define STB_EVENT_SEARCH_FAIL EVENT_CODE(EV_CLASS_SEARCH, EV_TYPE_FAIL) 00203 #define STB_EVENT_SEARCH_SUCCESS EVENT_CODE(EV_CLASS_SEARCH, EV_TYPE_SUCCESS) 00204 00205 /* MPEG decoder events */ 00206 #define STB_EVENT_AD_DECODE_STARTED EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_AD_STARTED) 00207 #define STB_EVENT_AD_DECODE_STOPPED EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_AD_STOPPED) 00208 #define STB_EVENT_AUDIO_DECODE_STARTED EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_AUDIO_STARTED) 00209 #define STB_EVENT_AUDIO_DECODE_STOPPED EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_AUDIO_STOPPED) 00210 #define STB_EVENT_AUDIO_DECODE_UNDERFLOW EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_AUDIO_UNDERFLOW) 00211 #define STB_EVENT_VIDEO_DECODE_STARTED EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_VIDEO_STARTED) 00212 #define STB_EVENT_VIDEO_DECODE_STOPPED EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_VIDEO_STOPPED) 00213 #define STB_EVENT_VIDEO_DECODE_UNDERFLOW EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_VIDEO_UNDERFLOW) 00214 #define STB_EVENT_SAMPLE_DECODE_STARTED EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_SAMPLE_STARTED) 00215 #define STB_EVENT_SAMPLE_DECODE_STOPPED EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_SAMPLE_STOPPED) 00216 #define STB_EVENT_DECODE_LOCKED EVENT_CODE(EV_CLASS_DECODE, EV_TYPE_LOCKED) 00217 00218 #define STB_EVENT_FORCED_SERVICE_CHANGE EVENT_CODE(EV_CLASS_APPLICATION, EV_TYPE_FORCED_SERVICE_CHANGE) 00219 00220 /* Timer events */ 00221 #define STB_EVENT_TIMER_NOTIFY EVENT_CODE(EV_CLASS_TIMER, EV_TYPE_FAIL) 00222 #define STB_EVENT_TIMER_EXPIRE EVENT_CODE(EV_CLASS_TIMER, EV_TYPE_SUCCESS) 00223 00224 /* HDMI events */ 00225 #define STB_EVENT_HDMI_CONNECTED EVENT_CODE(EV_CLASS_HDMI, EV_TYPE_CONNECTED) 00226 #define STB_EVENT_HDMI_DISCONNECTED EVENT_CODE(EV_CLASS_HDMI, EV_TYPE_DISCONNECTED) 00227 00228 /* Over the air software upgrade search events */ 00229 #define STB_EVENT_OTA_SW_UPGRADE_FOUND EVENT_CODE(EV_CLASS_OTA_SW_UPGRADE, EV_TYPE_OTA_SW_UPGRADE_FOUND) 00230 #define STB_EVENT_OTA_SW_UPGRADE_NOTFOUND EVENT_CODE(EV_CLASS_OTA_SW_UPGRADE, EV_TYPE_OTA_SW_UPGRADE_NOTFOUND) 00231 #define STB_EVENT_OTA_SW_UPGRADE_DOWNLOADING EVENT_CODE(EV_CLASS_OTA_SW_UPGRADE, EV_TYPE_OTA_SW_UPGRADE_DOWNLOADING) 00232 #define STB_EVENT_OTA_SW_UPGRADE_BURNING EVENT_CODE(EV_CLASS_OTA_SW_UPGRADE, EV_TYPE_OTA_SW_UPGRADE_BURNING) 00233 #define STB_EVENT_OTA_SW_UPGRADE_RESET_REQD EVENT_CODE(EV_CLASS_OTA_SW_UPGRADE, EV_TYPE_OTA_SW_UPGRADE_RESET_REQD) 00234 #define STB_EVENT_OTA_SW_UPGRADE_ERROR EVENT_CODE(EV_CLASS_OTA_SW_UPGRADE, EV_TYPE_OTA_SW_UPGRADE_ERROR) 00235 #define STB_EVENT_OTA_SW_UPGRADE_COMPLETED EVENT_CODE(EV_CLASS_OTA_SW_UPGRADE, EV_TYPE_OTA_SW_UPGRADE_COMPLETED) 00236 00237 /* CI events */ 00238 #define STB_EVENT_CI_OPEN_MODULE EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_OPEN) 00239 #define STB_EVENT_CI_CLOSE_MODULE EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_CLOSE) 00240 #define STB_EVENT_CI_REMOVE EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_REMOVE) 00241 #define STB_EVENT_CI_INSERT EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_INSERT) 00242 #define STB_EVENT_CI_CAM_UPGRADE_PROGRESS EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_CAM_UPGRADE_PROGRESS) 00243 #define STB_EVENT_CI_CAM_UPGRADE_FAILED EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_CAM_UPGRADE_FAILED) 00244 #define STB_EVENT_CI_CAM_UPGRADE_COMPLETE EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_CAM_UPGRADE_COMPLETE) 00245 #define STB_EVENT_CI_SLOT_STATUS_CHANGED EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_SLOT_STATUS_UPDATED) 00246 #define STB_EVENT_CI_URI_CHANGED EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_URI_UPDATED) 00247 #define STB_EVENT_CI_KEYS_CHANGED EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_KEYS_UPDATED) 00248 #define STB_EVENT_CI_TUNE_REQUEST EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_TUNE) 00249 #define STB_EVENT_CI_RELEASE_REPLY EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_RELEASE_REPLY) 00250 #define STB_EVENT_CI_REQUEST_OPERATOR_SEARCH EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_REQUEST_OPERATOR_SEARCH) 00251 #define STB_EVENT_CI_OPERATOR_SEARCH_FINISHED EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_OPERATOR_SEARCH_FINISHED) 00252 #define STB_EVENT_CI_RECORD_START EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_RECORD_START) 00253 #define STB_EVENT_CI_RECORD_START_FAILED EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_RECORD_START_FAILED) 00254 #define STB_EVENT_CI_RECORD_LICENCE_CHANGED EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_RECORD_LICENCE_UPDATED) 00255 #define STB_EVENT_CI_PLAYBACK_LICENCE_CHANGED EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_PLAYBACK_LICENCE_UPDATED) 00256 #define STB_EVENT_CI_PLAYBACK_LICENCE_STATUS EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_PLAYBACK_LICENCE_STATUS) 00257 #define STB_EVENT_CI_PIN_STATUS EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_PIN_STATUS) 00258 #define STB_EVENT_CI_RECORD_PIN EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_RECORD_PIN) 00259 #define STB_EVENT_CI_PLAYBACK_BLANK_VIDEO EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_PLAYBACK_BLANK_VIDEO) 00260 #define STB_EVENT_CI_PLAYBACK_PIN_STATUS EVENT_CODE(EV_CLASS_CI, EV_TYPE_CI_PLAYBACK_PIN_STATUS) 00261 00262 /* PVR events */ 00263 #define STB_EVENT_PVR_REC_START EVENT_CODE(EV_CLASS_PVR, EV_TYPE_PVR_REC_START) 00264 #define STB_EVENT_PVR_REC_STOP EVENT_CODE(EV_CLASS_PVR, EV_TYPE_PVR_REC_STOP) 00265 #define STB_EVENT_PVR_PLAY_START EVENT_CODE(EV_CLASS_PVR, EV_TYPE_PVR_PLAY_START) 00266 #define STB_EVENT_PVR_PLAY_STOP EVENT_CODE(EV_CLASS_PVR, EV_TYPE_PVR_PLAY_STOP) 00267 #define STB_EVENT_PVR_PLAY_BOF EVENT_CODE(EV_CLASS_PVR, EV_TYPE_PVR_PLAY_BOF) 00268 #define STB_EVENT_PVR_PLAY_EOF EVENT_CODE(EV_CLASS_PVR, EV_TYPE_PVR_PLAY_EOF) 00269 00270 /* Disk events */ 00271 #define STB_EVENT_DISK_CONNECTED EVENT_CODE(EV_CLASS_DISK, EV_TYPE_DISK_CONNECTED) 00272 #define STB_EVENT_DISK_REMOVED EVENT_CODE(EV_CLASS_DISK, EV_TYPE_DISK_REMOVED) 00273 #define STB_EVENT_DISK_FULL EVENT_CODE(EV_CLASS_DISK, EV_TYPE_DISK_FULL) 00274 00275 /* UI events */ 00276 #define UI_EVENT_UPDATE EVENT_CODE(EV_CLASS_UI, EV_TYPE_UPDATE) 00277 00278 /* MHEG events */ 00279 #define STB_EVENT_MHEG_PIN_REQUEST EVENT_CODE(EV_CLASS_MHEG, EV_TYPE_MHEG_PIN_REQUEST) 00280 #define STB_EVENT_MHEG_START_SUBTITLES EVENT_CODE(EV_CLASS_MHEG, EV_TYPE_START_SUBTITLES) 00281 #define STB_EVENT_MHEG_STOP_SUBTITLES EVENT_CODE(EV_CLASS_MHEG, EV_TYPE_STOP_SUBTITLES) 00282 #define STB_EVENT_MHEG_LIFE_CYCLE EVENT_CODE(EV_CLASS_MHEG, EV_TYPE_MHEG_LIFE_CYCLE) 00283 #define STB_EVENT_MHEG_TUNE_DSD EVENT_CODE(EV_CLASS_MHEG, EV_TYPE_MHEG_TUNE_DSD) 00284 #define STB_EVENT_MHEG_TUNE_TRIPLET EVENT_CODE(EV_CLASS_MHEG, EV_TYPE_MHEG_TUNE_TRIPLET) 00285 00286 00287 //---Enumerations for public use----------------------------------------------- 00288 00289 //---Global type defs for public use------------------------------------------- 00290 00291 //---Global Function prototypes for public use--------------------------------- 00292 00293 void STB_ERInitialise(void); 00294 void STB_ERRegisterHandler(BOOLEAN (*func)(BOOLEAN latched, BOOLEAN repeat, U16BIT event_class, U16BIT event_type, void *data, U32BIT data_size)); 00295 void STB_ERNotifyEvent(U8BIT event_class, U16BIT event_type); 00296 void STB_ERSendEvent(BOOLEAN latched, BOOLEAN repeat, U16BIT path_class, U16BIT type, void *data, U32BIT data_size); 00297 00298 #endif // _STBERC_H 00299 00300 //***************************************************************************** 00301 // End of file 00302 //***************************************************************************** 00303