#include "sys_api.h" #include "char_encode.h" #include "crc8_16.h" #include "ctype.h" #include "date.h" #include "elf.h" #include "flash_manager.h" #include "math.h" #include "mp3play.h" #include "mywin_inc.h" #include "rthw.h" #include "rtthread.h" #include "stdio.h" #include "string.h" #include "system_file.h" #include "system_updata.h" #include "tools.h" #include "bsp_init.h" // index=333 #define API_TABLE_PTR (*((void ***)0x20000008)) typedef struct { int api_num; void **fun_table; } api_table_struct; // api函数表,这个表在初始化向量中引用 api_table_struct g_api_table; static int api_table_init(void) { extern const unsigned int sys_api_start; extern const unsigned int sys_api_end; api_item_struct *start = (api_item_struct *)&sys_api_start; api_item_struct *end = (api_item_struct *)&sys_api_end; if (g_api_table.fun_table == 0) { g_api_table.api_num = end - start; g_api_table.api_num += 10; g_api_table.fun_table = malloc(sizeof(void *) * g_api_table.api_num); // memset(g_api_table.fun_table,0x55,sizeof(void // *)*g_api_table.api_num); for (; start < end; start++) { if (start->index < g_api_table.api_num - 1) { g_api_table.fun_table[start->index] = start->fun; } else { printf("%s:fun init err item->index=%d\r\n", __func__, start->index); } } } API_TABLE_PTR = g_api_table.fun_table; return 0; } extern_init(sys_api, api_table_init); // 所有可能用到的api都在这里调一遍,防止被优化掉 // 操作系统内核相关api api_item(rt_hw_interrupt_disable, 1); api_item(rt_hw_interrupt_enable, 2); api_item(rt_enter_critical, 3); api_item(rt_exit_critical, 4); api_item(rt_thread_mdelay, 5); api_item(rt_thread_create, 6); api_item(rt_thread_startup, 7); api_item(rt_thread_delete, 8); api_item(rt_timer_create, 9); api_item(rt_timer_delete, 10); api_item(rt_timer_start, 11); api_item(rt_timer_stop, 12); api_item(rt_sem_create, 13); api_item(rt_sem_delete, 14); api_item(rt_sem_take, 15); api_item(rt_sem_release, 16); api_item(rt_mutex_create, 17); api_item(rt_mutex_delete, 18); api_item(rt_mutex_take, 19); api_item(rt_mutex_release, 20); api_item(rt_event_create, 21); api_item(rt_event_delete, 22); api_item(rt_event_send, 23); api_item(rt_event_recv, 24); api_item(rt_mb_create, 25); api_item(rt_mb_delete, 26); api_item(rt_mb_send, 27); api_item(rt_mb_send_wait, 28); api_item(rt_mb_recv, 29); api_item(rt_mq_create, 30); api_item(rt_mq_delete, 31); api_item(rt_mq_send, 32); api_item(rt_mq_urgent, 33); api_item(rt_mq_recv, 34); // c语言库相关api api_item(fputc, 35); api_item(rand, 36); api_item(calloc, 37); api_item(free, 38); api_item(malloc, 39); api_item(realloc, 40); // 工具模块相关api api_item(tools_updata_on, 41); api_item(tools_updata_off, 42); // 设置模块相关api // soft相关api api_item(uni2utf8_str, 43); api_item(utf82uni_str, 44); api_item(gbk2uni_str, 45); api_item(uni2gbk_str, 46); api_item(gbk2utf8_str, 47); api_item(utf82gbk_str, 48); api_item(FLASH_ReadData, 49); api_item(FLASH_WriteData, 50); api_item(FLASH_EraseOneSector, 51); api_item(FLASH_EraseAllSector, 52); api_item(FLASH_GetFlashSize, 53); api_item(FLASH_CheckErase, 54); api_item(FLASH_LoopWrite, 55); api_item(FLASH_AddFile, 56); api_item(FLASH_ReadFile, 57); api_item(FLASH_FindFile, 58); api_item(FLASH_GetUsed, 59); api_item(FLASH_GetFileNum, 60); api_item(FLASH_GetFileInfo, 61); api_item(FLASH_DeleteFile, 62); api_item(FLASH_SaveFile, 63); api_item(SysFile_GetFileByName, 64); api_item(SysFile_Updata, 65); api_item(SysFile_UpdataByIrq, 66); api_item(date_is_leap_year, 67); api_item(date_get_month_day_max, 68); api_item(date_get_week_by_day, 69); api_item(date_get_year_max, 70); api_item(date_get_year_min, 71); api_item(date_get_next_day, 72); api_item(date_get_last_day, 73); api_item(date_get_next_n_day, 74); api_item(date_get_last_n_day, 75); api_item(date_rtc_get_date, 76); api_item(date_rtc_get_time, 77); api_item(date_rtc_set_date, 78); api_item(date_rtc_set_time, 79); api_item(app_run_path, 80); api_item(app_run, 81); api_item(appm_find, 82); api_item(appm_get, 83); api_item(appm_get_running_num, 84); api_item(app_exit, 85); api_item(app_get_name_from_file, 86); api_item(mp3_get_support, 87); api_item(mp3_get_support_name, 88); api_item(mp3_play_song, 89); api_item(mp3_get_name, 90); api_item(mp3_get_artist, 91); api_item(mp3_get_time, 92); api_item(mp3_stop, 93); api_item(mp3_play, 94); api_item(mp3_suspend, 95); api_item(mp3_set_vol, 96); api_item(mp3_add_val, 97); api_item(mp3_sub_val, 98); api_item(mp3_get_vol, 99); // GUI相关api /* 以下函数对同一对象只能在同一线程调用 */ api_item(QUEUE_Init, 100); api_item(QUEUE_Delete, 101); api_item(QUEUE_Out, 102); api_item(QUEUE_In, 103); api_item(QUEUE_CheckStart, 104); api_item(QUEUE_Check, 105); /* 以下函数线程安全 */ api_item(POS_RoundPix, 106); api_item(POS_InRect, 107); api_item(POS_RectIntersection, 108); api_item(POS_RectContain, 109); api_item(POS_RectSub, 110); api_item(POS_RectEqual, 111); /* 以下函数只能在ui线程调用 */ api_item(WIN_CreatThread, 112); api_item(WIN_CreatThreadPro, 113); api_item(WIN_GetExWorkFunStat, 114); api_item(WIN_ExWorkFunClear, 115); api_item(WIN_GetWordData, 116); /* 以下函数线程安全 */ api_item(WIN_DecodeImg, 117); /* 以下函数线程安全 */ api_item(WIN_PlaceExtData, 118); api_item(WIN_RunInWindow, 119); /* 以下函数只能在ui线程调用 */ api_item(WIN_GetWinStruct, 120); api_item(WIN_SetRunCallBack, 121); api_item(WIN_SetBlockWinReturn, 122); api_item(WIN_GetBlockWinReturn, 123); api_item(WIN_GetExtData, 124); api_item(WIN_RunMsgFunction, 125); api_item(WIN_GetBaseWindow, 126); api_item(WIN_GetCurrentWindow, 127); api_item(WIN_CreatWindow, 128); api_item(WIN_CreatWindowExt, 129); api_item(WIN_DeleteWindow, 130); api_item(WIN_SetAsTopWin, 131); api_item(WIN_ResetAsTopWin, 132); api_item(WIN_GetWindowStructById, 133); api_item(WIN_DelFromChidList, 134); api_item(WIN_AddToChidList, 135); api_item(WIN_CheckChidWin, 136); api_item(WIN_FindTopWinByPos, 137); api_item(WIN_FindTopWin, 138); api_item(WIN_SetChidWinTop, 139); api_item(WIN_GetWinPosOnLcd, 140); api_item(WIN_FindPrent, 141); api_item(WIN_SetWinInvalidRect, 142); api_item(WIN_GetWinInvalidRect, 143); api_item(WIN_SetWinTitle, 144); api_item(WIN_GetWinByTitle, 145); api_item(WIN_FindBlock, 146); api_item(WIN_SetChildWinkeyShield, 147); api_item(WIN_PaintBackGround, 148); api_item(WIN_SetBackPic, 149); api_item(WIN_SetBackPicPath, 150); api_item(WIN_SetBackFun, 151); api_item(WIN_SetColor, 152); api_item(WIN_SetBkColor, 153); api_item(WIN_ShowWindow, 154); /* 以下函数只能在非ui线程调用 */ api_item(WIN_StorTouchStruct, 155); api_item(WIN_StorKeyStruct, 156); /* 以下函数只能在ui线程调用 */ api_item(WIN_ClearKeyQueue, 157); api_item(WIN_ClearTouchQueue, 158); api_item(WIN_KeyShieldOn, 159); api_item(WIN_KeyShieldOff, 160); api_item(WIN_DefaultMsgLoop, 161); api_item(WIN_SetMsgLoopCallBack, 162); api_item(WIN_RunBlock, 163); api_item(WIN_SendMsg, 164); api_item(WIN_SendMsgToPrent, 165); api_item(WIN_ClearMsgQueue, 166); api_item(WIN_CheckMsg, 167); api_item(WIN_SendTouchMsg, 168); api_item(WIN_SendTouchMove, 169); api_item(WIN_SendKeyMsg, 170); api_item(WIN_TouchMsgBroad, 171); api_item(WIN_SetInvalid, 172); api_item(WIN_SetInvalidWhenTop, 173); api_item(WIN_SetInvalidRect, 174); api_item(WIN_SetInvalidRectWhenTop, 175); api_item(WIN_Move, 176); api_item(WIN_SetPos, 177); api_item(WIN_SetSize, 178); /* 以下函数只能在ui线程调用 */ api_item(WIN_CreatTimer, 179); api_item(WIN_TimerReload, 180); api_item(WIN_SetTimerCycle, 181); api_item(WIN_DeleteTimer, 182); api_item(WIN_WinDeleteTimer, 183); /* 以下函数对同一对象只能在同一线程调用 */ api_item(WIN_CreatVirtualLcd, 184); api_item(WIN_DeleteVirtualLcd, 185); api_item(WIN_LcdSetScreenDis, 186); api_item(WIN_LcdSetWindow, 187); api_item(WIN_LcdGetWindowSizeX, 188); api_item(WIN_LcdGetWindowSizeY, 189); api_item(WIN_LcdSetLcdColor, 190); api_item(WIN_LcdSetLcdBkColor, 191); api_item(WIN_LcdSetLcdColor16, 192); api_item(WIN_LcdSetLcdBkColor16, 193); api_item(WIN_LcdGetLcdColor, 194); api_item(WIN_LcdGetLcdBkColor, 195); api_item(WIN_LcdGetLcdColor16, 196); api_item(WIN_LcdGetLcdBkColor16, 197); api_item(WIN_LcdSetLcdDrawMode, 198); api_item(WIN_LcdFillRectOff16At, 199); api_item(WIN_LcdDrawPointSafe, 200); api_item(WIN_LcdDrawPointSafeColor, 201); api_item(WIN_LcdDrawPointSafeColorAlpha, 202); api_item(WIN_LcdFillRectByColor, 203); api_item(WIN_LcdFillRectByColorAlpha, 204); api_item(WIN_LcdDrawImag, 205); api_item(WIN_LcdDrawImagButColor, 206); api_item(WIN_LcdDrawImagByColor, 207); api_item(WIN_LcdDrawImagByAlpha, 208); api_item(WIN_LcdClear, 209); api_item(WIN_LcdClearRect, 210); api_item(WIN_LcdGetColors, 211); /* 以下函数只能在ui线程调用 */ api_item(WIN_SetFontSize, 212); api_item(WIN_SetFontType, 213); api_item(WIN_GetFontHight, 214); api_item(WIN_GetFontWidth, 215); api_item(WIN_SetFontMode, 216); /* 以下函数只能在ui线程调用 */ api_item(WIN_DrawPointSafe, 217); api_item(WIN_DrawPointNormal, 218); api_item(WIN_DrawPointColorSafe, 219); api_item(WIN_DrawPointColorNormal, 220); api_item(WIN_DrawPointSafeColorAlpha, 221); api_item(WIN_SetLcdColor, 222); api_item(WIN_SetLcdBkColor, 223); api_item(WIN_GetLcdColor16, 224); api_item(WIN_DrawTxtAt, 225); api_item(WIN_DrawTxtAtRect, 226); api_item(WIN_DrawTxtCenterAtRect, 227); api_item(WIN_DrawTxtHCenterAt, 228); api_item(WIN_DrawHLine, 229); api_item(WIN_DrawHLineAlpha, 230); api_item(WIN_DrawVLine, 231); api_item(WIN_DrawLine, 232); api_item(WIN_DrawLines, 233); api_item(WIN_DrawCircle, 234); api_item(WIN_DrawRect, 235); api_item(WIN_DrawPolygon, 236); api_item(WIN_FillRectByColor, 237); api_item(WIN_FillRectByColorAlpha, 238); api_item(WIN_FillTriangle, 239); api_item(WIN_FillPolygon, 240); api_item(WIN_CreatPlaneAA, 241); api_item(WIN_DeletePlaneAA, 242); api_item(WIN_DrawPointAA, 243); api_item(WIN_DrawPlaneAA, 244); api_item(WIN_DrawLineAA, 245); api_item(WIN_FillRect, 246); api_item(WIN_FillRectAlpha, 247); api_item(WIN_DrawImag, 248); api_item(WIN_DrawImagButColor, 249); api_item(WIN_DrawImagByColor, 250); api_item(WIN_DrawImagByAlpha, 251); api_item(WIN_DrawImagByAlphaAnti, 252); api_item(WIN_Clear, 253); api_item(WIN_GetTxtRectSize, 254); api_item(WIN_GetImageSize, 255); /* 以下函数只能在ui线程调用 */ api_item(WIN_GetPic, 256); api_item(WIN_GetPicNoAlpha, 257); api_item(WIN_PicInsidePic, 258); api_item(WIN_GetPicLive, 259); api_item(WIN_DrawPic, 260); /* 以下函数只能在ui线程调用 */ api_item(MSGBOX_SetTitle, 261); api_item(MSGBOX_SetMsg, 262); api_item(MSGBOX_SetKey, 263); api_item(MSGBOX_SetKey2, 264); api_item(MSGBOX_AddItem, 265); api_item(MSGBOX_Tips, 266); api_item(MSGBOX_TipsTime, 267); api_item(MSGBOX_Inquiry, 268); api_item(MSGBOX_Select, 269); /* 以下函数只能在ui线程调用 */ api_item(WIN_CreatButton, 270); api_item(BUTTON_SetKeyString, 271); /* 以下函数只能在ui线程调用 */ api_item(WIN_CreatInput, 272); api_item(INPUT_KeyBoard, 273); /* 以下函数只能在ui线程调用 */ api_item(WIN_CreatList, 274); api_item(LIST_SetItem, 275); api_item(LIST_SetItemHeight, 276); api_item(LIST_SetYOrigin, 277); api_item(LIST_SetYMove, 278); /* 以下函数只能在ui线程调用 */ api_item(WIN_CreatPage, 279); api_item(PAGE_SetBackPic, 280); api_item(PAGE_SetItem, 281); api_item(PAGE_SetTitleHeight, 282); api_item(PAGE_SetItemHeight, 283); api_item(PAGE_SetItemIndent, 284); api_item(PAGE_IndexAdd, 285); api_item(PAGE_IndexSub, 286); /* 以下函数只能在ui线程调用 */ api_item(POPUP_SelectItem, 287); api_item(POPUP_AddItem, 288); /* 以下函数只能在ui线程调用 */ api_item(WORKING_DoWork, 289); /* 以下函数只能在ui线程调用 */ api_item(SCROLLBAR_SelectItem, 290); api_item(SCROLLBAR_SelectNum, 291); api_item(SCROLLBAR_AddItem, 292); /* 以下函数只能在ui线程调用 */ api_item(INPUTBOX_InputChars, 293); api_item(INPUTBOX_Clear, 294); api_item(INPUTBOX_SetChars, 295); /* 以下函数只能在ui线程调用 */ api_item(RECORD_DrawRecord, 296); api_item(RECORD_AddMsg, 297); /* 以下函数只能在ui线程调用 */ api_item(WIN_CreatTouch, 298); api_item(WIN_CreatTouchEx, 299); api_item(WIN_CreatTouchChild, 300); api_item(WIN_CreatTouchBase, 301); api_item(TOUCHWIN_AddChild, 302); api_item(TOUCHWIN_ClearChild, 303); api_item(TOUCHWIN_SetOutCon, 304); // 一些补充函数 api_item(myfree, 305); api_item(mymalloc, 306); api_item(myrealloc, 307); api_item(mycalloc, 308); api_item(mymalloc_fast, 309); api_item(mymemset, 310); api_item(mymemcpy, 311); api_item(mem_perused, 312); api_item(exmem_perused, 313); // FATFS文件系统 api_item(f_open, 314); api_item(f_close, 315); api_item(f_read, 316); api_item(f_write, 317); api_item(f_lseek, 318); api_item(f_truncate, 319); api_item(f_sync, 320); api_item(f_opendir, 321); api_item(f_closedir, 322); api_item(f_readdir, 323); api_item(f_findfirst, 324); api_item(f_findnext, 325); api_item(f_mkdir, 326); api_item(f_unlink, 327); api_item(f_rename, 328); api_item(f_stat, 329); api_item(f_getfree, 330); api_item(f_mount, 331); api_item(f_mkfs, 332); api_item(strlen, 333); api_item(sprintf, 334); api_item(rt_kputs, 335);