| 1 | #ifndef LOLEVEL_H |
|---|
| 2 | #define LOLEVEL_H |
|---|
| 3 | |
|---|
| 4 | #ifndef LOW_LEVEL |
|---|
| 5 | #error File can be included when platform is built only! |
|---|
| 6 | #endif |
|---|
| 7 | |
|---|
| 8 | #ifndef __arm__ |
|---|
| 9 | #error File can be included in ARM mode only! |
|---|
| 10 | #endif |
|---|
| 11 | |
|---|
| 12 | /* Canon stuff */ |
|---|
| 13 | extern long *_GetSystemTime(long *t); |
|---|
| 14 | extern long _GetZoomLensCurrentPosition(); |
|---|
| 15 | extern long _GetZoomLensCurrentPoint(); |
|---|
| 16 | extern long _MoveZoomLensWithPoint(short *pos); |
|---|
| 17 | extern long _SetZoomActuatorSpeedPercent(short *perc); |
|---|
| 18 | extern volatile long zoom_busy; |
|---|
| 19 | extern long _GetFocusLensCurrentPosition(); |
|---|
| 20 | extern long _GetFocusLensSubjectDistance(); |
|---|
| 21 | extern long _GetFocusLensSubjectDistanceFromLens(); |
|---|
| 22 | extern void _MoveFocusLensToDistance(short *dist); |
|---|
| 23 | extern void _PutInNdFilter(); |
|---|
| 24 | extern void _PutOutNdFilter(); |
|---|
| 25 | extern volatile long focus_busy; |
|---|
| 26 | extern long _GetCurrentAvValue(); |
|---|
| 27 | extern long _GetCurrentTargetDistance(); |
|---|
| 28 | extern long _GetPropertyCase(long opt_id, void *buf, long bufsize); |
|---|
| 29 | extern long _SetPropertyCase(long opt_id, void *buf, long bufsize); |
|---|
| 30 | extern long _IsStrobeChargeCompleted(); |
|---|
| 31 | extern long _VbattGet(); |
|---|
| 32 | extern int _GetBatteryTemperature(); |
|---|
| 33 | extern int _GetCCDTemperature(); |
|---|
| 34 | extern int _GetOpticalTemperature(); |
|---|
| 35 | extern void _PT_PlaySound(short , void*); |
|---|
| 36 | extern void _RefreshPhysicalScreen(long f); |
|---|
| 37 | extern void _Unmount_FileSystem(); |
|---|
| 38 | extern void _Mount_FileSystem(); |
|---|
| 39 | extern void _SleepTask(long msec); |
|---|
| 40 | extern int _CreateTask (const char *name, int prio, int stack_size /*?*/, |
|---|
| 41 | void *entry, long parm /*?*/); |
|---|
| 42 | extern void _SleepTask(long msec); |
|---|
| 43 | extern void __attribute__((noreturn)) _ExitTask(); |
|---|
| 44 | extern int _taskNameToId(char* taskName); // VxWorks only, task's name first letter must be 't', maximum 10 chars total |
|---|
| 45 | extern const char *_taskName(int taskID); // VxWorks only for now |
|---|
| 46 | extern int _taskIdListGet(int *idlist,int max); // VxWorks only for now |
|---|
| 47 | extern void _taskSuspend(int taskId); |
|---|
| 48 | extern void _taskResume(int taskId); |
|---|
| 49 | extern int _errnoOfTaskGet(int tid); |
|---|
| 50 | extern long _IsStrobeChargeCompleted(); |
|---|
| 51 | |
|---|
| 52 | long _SetEventFlag(void *flag, long what); |
|---|
| 53 | long _CheckAnyEventFlag(void *flag, long mask, long *res); |
|---|
| 54 | long _GetEventFlagValue(void *flag, long *res); |
|---|
| 55 | |
|---|
| 56 | long _ReceiveMessageQueue(void *msgq, long *dst, long unk1 /* maybe size? */); |
|---|
| 57 | |
|---|
| 58 | /* Canon stuff with nonoriginal naming */ |
|---|
| 59 | extern long _GetParameterData(long id, void *buf, long size); |
|---|
| 60 | extern long _SetParameterData(long id, void *buf, long size); |
|---|
| 61 | extern void _UpdateMBROnFlash(int driveno, long offset, char *str); |
|---|
| 62 | |
|---|
| 63 | /* standart C library */ |
|---|
| 64 | //extern int _creat (const char *name, int flags); |
|---|
| 65 | extern int _open (const char *name, int flags, int mode ); |
|---|
| 66 | extern int _close (int fd); |
|---|
| 67 | extern int _write (int fd, void *buffer, long nbytes); |
|---|
| 68 | extern int _read (int fd, void *buffer, long nbytes); |
|---|
| 69 | extern int _lseek (int fd, long offset, int whence); |
|---|
| 70 | extern long _mkdir(const char *dirname); |
|---|
| 71 | |
|---|
| 72 | extern int _Open (const char *name, int flags, int mode ); |
|---|
| 73 | extern int _Close (int fd); |
|---|
| 74 | extern int _Write (int fd, void *buffer, long nbytes); |
|---|
| 75 | extern int _Read (int fd, void *buffer, long nbytes); |
|---|
| 76 | extern int _Lseek (int fd, long offset, int whence); |
|---|
| 77 | extern int _Remove(const char *name); |
|---|
| 78 | |
|---|
| 79 | extern long _Fopen_Fut(const char *filename, const char *mode); |
|---|
| 80 | extern long _Fclose_Fut(long file); |
|---|
| 81 | extern long _Fread_Fut(void *buf, long elsize, long count, long f); |
|---|
| 82 | extern long _Fwrite_Fut(const void *buf, long elsize, long count, long f); |
|---|
| 83 | extern long _Fseek_Fut(long file, long offset, long whence); |
|---|
| 84 | extern long _Fflush_Fut(long file); |
|---|
| 85 | extern long _Feof_Fut(long file); |
|---|
| 86 | extern long _Fflush_Fut(long file); |
|---|
| 87 | extern char *_Fgets_Fut(char *buf, int n, long f); |
|---|
| 88 | extern long _RenameFile_Fut(const char *oldname, const char *newname); |
|---|
| 89 | extern long _DeleteFile_Fut(const char *name); |
|---|
| 90 | extern long _MakeDirectory_Fut(const char *name,int unk); |
|---|
| 91 | |
|---|
| 92 | extern int _rename(const char *oldname, const char *newname); |
|---|
| 93 | |
|---|
| 94 | extern int _isdigit(int c); |
|---|
| 95 | extern int _isspace(int c); |
|---|
| 96 | extern int _isalpha(int c); |
|---|
| 97 | extern int _isupper(int c); |
|---|
| 98 | extern int _islower(int c); |
|---|
| 99 | extern int _ispunct(int c); |
|---|
| 100 | extern int _isxdigit(int c); |
|---|
| 101 | |
|---|
| 102 | extern long _strlen(const char *s); |
|---|
| 103 | extern int _strcmp(const char *s1, const char *s2); |
|---|
| 104 | extern int _strncmp(const char *s1, const char *s2, long n); |
|---|
| 105 | extern char *_strchr(const char *s, int c); |
|---|
| 106 | extern char *_strcpy(char *dest, const char *src); |
|---|
| 107 | extern char *_strncpy(char *dest, const char *src, long n); |
|---|
| 108 | extern char *_strcat(char *dest, const char *app); |
|---|
| 109 | extern char *_strrchr(const char *s, int c); |
|---|
| 110 | extern char *_strpbrk(const char *s, const char *accept); |
|---|
| 111 | |
|---|
| 112 | extern long _strtol(const char *nptr, char **endptr, int base); |
|---|
| 113 | |
|---|
| 114 | extern int _tolower(int c); |
|---|
| 115 | extern int _toupper(int c); |
|---|
| 116 | |
|---|
| 117 | extern int _vsprintf(char *buf, const char *fmt, __builtin_va_list va_list); |
|---|
| 118 | |
|---|
| 119 | extern void *_malloc(long size); |
|---|
| 120 | extern void _free(void *p); |
|---|
| 121 | extern void *_AllocateUncacheableMemory(long size); |
|---|
| 122 | extern void _FreeUncacheableMemory(void *p); |
|---|
| 123 | |
|---|
| 124 | extern void *_memchr(const void *s, int c, int n); |
|---|
| 125 | extern void *_memcpy(void *dest, const void *src, long n); |
|---|
| 126 | extern void *_memset(void *s, int c, int n); |
|---|
| 127 | extern int _memcmp(const void *s1, const void *s2, long n); |
|---|
| 128 | |
|---|
| 129 | extern void _qsort (void *__base, int __nelem, int __size, int (*__cmp)(const void *__e1, const void *__e2)); |
|---|
| 130 | |
|---|
| 131 | /* VxWorks */ |
|---|
| 132 | extern long _taskLock(); |
|---|
| 133 | extern long _taskUnlock(); |
|---|
| 134 | extern int _taskCreateHookAdd (void *createHook); |
|---|
| 135 | extern int _taskDeleteHookAdd (void *deleteHook); |
|---|
| 136 | extern long _iosDevAdd(void*,void*,int); |
|---|
| 137 | extern long _iosDevDelete(void*); |
|---|
| 138 | extern long _iosDrvInstall(void*,void*,void*,void*,void*,void*,void*); |
|---|
| 139 | extern void _GiveSemaphore(int sem); |
|---|
| 140 | |
|---|
| 141 | /* misc */ |
|---|
| 142 | extern const char aPhysw; |
|---|
| 143 | extern long physw_run; |
|---|
| 144 | extern long _kbd_p1_f(); |
|---|
| 145 | extern void _kbd_p2_f(); |
|---|
| 146 | extern void _kbd_pwr_on(); |
|---|
| 147 | extern void _kbd_pwr_off(); |
|---|
| 148 | extern void _kbd_read_keys_r2(void*p); |
|---|
| 149 | extern long physw_status[3], physw_copy[3]; |
|---|
| 150 | |
|---|
| 151 | void __attribute__((naked,noinline)) mykbd_task(); |
|---|
| 152 | extern void capt_seq_task(); |
|---|
| 153 | extern void movie_record_task(); |
|---|
| 154 | extern void init_file_modules_task(); |
|---|
| 155 | extern void exp_drv_task(); |
|---|
| 156 | |
|---|
| 157 | void kbd_fetch_data(long *dst); |
|---|
| 158 | |
|---|
| 159 | /*used to detect play or record mode without relying on physical switch positions |
|---|
| 160 | values on most cameras: |
|---|
| 161 | 0 = startup in play |
|---|
| 162 | 1 = unknown, appears to happen in first play<->rec transition |
|---|
| 163 | 2 = record mode |
|---|
| 164 | 4 = canon menu in record mode |
|---|
| 165 | 3 = play after being in record mode at least once |
|---|
| 166 | 5 = transitioning between some record modes, such as movie |
|---|
| 167 | values on very old vxworks cameras (ixus50_sd400, ixus700_sd500, s2is) |
|---|
| 168 | 0 = startup in play |
|---|
| 169 | 1 = rec |
|---|
| 170 | 2 = play |
|---|
| 171 | 3 = maybe transition ? |
|---|
| 172 | address in all cases can be found with strings "MenuIn", "MenuOut" |
|---|
| 173 | */ |
|---|
| 174 | extern long playrec_mode; |
|---|
| 175 | |
|---|
| 176 | extern void *led_table; |
|---|
| 177 | extern void _UniqueLedOn(void *addr, long brightness); |
|---|
| 178 | extern void _UniqueLedOff(void *addr); |
|---|
| 179 | struct led_control {int led_num; int action; int brightness; int blink_count;}; |
|---|
| 180 | extern int _PostLEDMessage(struct led_control *); |
|---|
| 181 | int _LEDDrive(int led, int action); |
|---|
| 182 | |
|---|
| 183 | |
|---|
| 184 | extern long _LockMainPower(); |
|---|
| 185 | extern long _UnlockMainPower(); |
|---|
| 186 | extern void _SetAutoShutdownTime(int t); |
|---|
| 187 | |
|---|
| 188 | /* |
|---|
| 189 | The following two functions post an event such as button press, switch change, cable connection change. |
|---|
| 190 | event: |
|---|
| 191 | A number identifying the event. This number may vary between camera models. |
|---|
| 192 | See levent.c and levent.h for methods to identify events by name. |
|---|
| 193 | unk: |
|---|
| 194 | Unknown value, usually 0 in canon code. For jogdial messages, this is number of clicks. |
|---|
| 195 | return value: |
|---|
| 196 | Unknown, possibly void. |
|---|
| 197 | */ |
|---|
| 198 | extern int _PostLogicalEventForNotPowerType(int event, int unk); |
|---|
| 199 | extern int _PostLogicalEventToUI(int event, int unk); |
|---|
| 200 | /* |
|---|
| 201 | Used in the canon code to modify the generation or delivery of events. For example, Canon |
|---|
| 202 | mode override code sets 1 on the desired dial position, and zero on all others. |
|---|
| 203 | event: as described above for PostLogicalEvent* |
|---|
| 204 | state: if 1, the event will be generated/delivered as normal. If 0, the event is disabled/blocked. |
|---|
| 205 | */ |
|---|
| 206 | extern void _SetLogicalEventActive(unsigned event, unsigned state); |
|---|
| 207 | /* Somehow related to the above. Normally 0, set to 1 for script mode */ |
|---|
| 208 | extern void _SetScriptMode(unsigned mode); |
|---|
| 209 | |
|---|
| 210 | |
|---|
| 211 | /* math */ |
|---|
| 212 | extern int _rand(void); |
|---|
| 213 | extern void* _srand(unsigned int seed); |
|---|
| 214 | |
|---|
| 215 | extern double __log(double x); |
|---|
| 216 | extern double __log10(double x); |
|---|
| 217 | extern double __pow(double x, double y); |
|---|
| 218 | extern double __sqrt(double x); |
|---|
| 219 | |
|---|
| 220 | /* time */ |
|---|
| 221 | extern int _utime(char *file, void *newTimes); |
|---|
| 222 | extern unsigned long _time(unsigned long *timer); |
|---|
| 223 | extern void *_localtime(const unsigned long *_tod); |
|---|
| 224 | extern void *_LocalTime(const unsigned long *_tod, void * t_m); // DRYOS |
|---|
| 225 | extern long _strftime(char *s, unsigned long maxsize, const char *format, const /*struct tm*/ void *timp); |
|---|
| 226 | extern /*time_t*/ long _mktime(/*struct tm*/ void *timp); // VXWORKS |
|---|
| 227 | extern /*time_t*/ long _mktime_ext(void *tim_extp); // DRYOS, doesn't take a struct tm * |
|---|
| 228 | extern int _SetFileTimeStamp(int fd, int time1, int time2); |
|---|
| 229 | |
|---|
| 230 | /* file */ |
|---|
| 231 | extern void *_opendir(const char* name); |
|---|
| 232 | extern void *_readdir(void *d); |
|---|
| 233 | extern int _ReadFastDir(void *d, void* dd); // DRYOS |
|---|
| 234 | extern int _closedir(void *d); |
|---|
| 235 | extern void _rewinddir(void *d); |
|---|
| 236 | extern int _stat(char *name, void *pStat); |
|---|
| 237 | extern unsigned long _GetDrive_ClusterSize(int drive); |
|---|
| 238 | extern unsigned long _GetDrive_TotalClusters(int drive); |
|---|
| 239 | extern unsigned long _GetDrive_FreeClusters(int drive); |
|---|
| 240 | extern int _WriteSDCard(unsigned int drive, unsigned int start_sect, unsigned int num_sect, void *buf); |
|---|
| 241 | extern void _UnsetZoomForMovie(void); |
|---|
| 242 | void _TurnOffMic(void); |
|---|
| 243 | void _TurnOnMic(void); |
|---|
| 244 | |
|---|
| 245 | extern void _MakeAFScan(int*, int); |
|---|
| 246 | extern void _ExpCtrlTool_StartContiAE(int, int); |
|---|
| 247 | extern void _ExpCtrlTool_StopContiAE(int, int); |
|---|
| 248 | |
|---|
| 249 | extern int some_flag_for_af_scan; |
|---|
| 250 | extern int parameter_for_af_scan; |
|---|
| 251 | extern void _SetAE_ShutterSpeed(short* tv); |
|---|
| 252 | |
|---|
| 253 | extern void _EnterToCompensationEVF(void); |
|---|
| 254 | extern void _ExitFromCompensationEVF(void); |
|---|
| 255 | |
|---|
| 256 | extern void _TurnOnBackLight(void); |
|---|
| 257 | extern void _TurnOffBackLight(void); |
|---|
| 258 | |
|---|
| 259 | // reyalp used to calculate size of loaded CHDK |
|---|
| 260 | // these are linker symbols, with no actual data attached! |
|---|
| 261 | extern const char _start,_end; |
|---|
| 262 | |
|---|
| 263 | extern void _DoAFLock(void); |
|---|
| 264 | extern void _UnlockAF(void); |
|---|
| 265 | |
|---|
| 266 | extern int _apex2us(int); |
|---|
| 267 | |
|---|
| 268 | extern void _ScreenLock(); |
|---|
| 269 | extern void _SetCurrentCaptureModeType(); |
|---|
| 270 | extern unsigned _ExecuteEventProcedure(const char *name,...); |
|---|
| 271 | // known in CHDK as _RefreshPhysicalScreen |
|---|
| 272 | //extern void _ScreenUnLock(); |
|---|
| 273 | #endif |
|---|