freebipman ad003776ae ADD: Экспериментальная поддержка прямого доступа к видеопамяти
CHG: Исправлены настройки конфигурации RELEASE
2020-08-01 20:20:45 +10:00

339 lines
13 KiB
C

#pragma once
#define LIBBIP_VERSION "1.3"
#define VIDEO_X 176
#define VIDEO_Y 176
#ifndef min
#define min(x,y) ((x) < (y) ? (x) : (y))
#endif
#ifndef max
#define max(x,y) ((x) > (y) ? (x) : (y))
#endif
#ifndef abssub
#define abssub(x,y) ((x) > (y) ? (x)-(y) : (y)-(x))
#endif
#define VIDEO_MEMORY_SIZE 15488
#define NULL ((void*)0)
// öâĺňŕ
#define COLOR_BLACK 0x000000 // ÷ĺđíűé
#define COLOR_RED 0x0000FF // ęđŕńíűé
#define COLOR_GREEN 0x00FF00 // çĺëĺíűé
#define COLOR_BLUE 0xFF0000 // ńčíčé
#define COLOR_YELLOW 0x00FFFF // ćĺëňűé
#define COLOR_AQUA 0xFFFF00 // öâĺň ěîđńęîé âîëíű
#define COLOR_PURPLE 0xFF00FF // ńčđĺíĺâűé
#define COLOR_WHITE 0xFFFFFF // áĺëűé
#define COLOR_MASK 0xFFFFFF // ěŕńęŕ öâĺňŕ
// öâĺňŕ â ęîđîňęîě ôîđěŕňĺ
#define COLOR_SH_BLACK 0b0000 // ÷ĺđíűé
#define COLOR_SH_RED 0b0001 // ęđŕńíűé
#define COLOR_SH_GREEN 0b0010 // çĺëĺíűé
#define COLOR_SH_BLUE 0b0100 // ńčíčé
#define COLOR_SH_YELLOW 0b0011 // ćĺëňűé
#define COLOR_SH_AQUA 0b0110 // öâĺň ěîđńęîé âîëíű
#define COLOR_SH_PURPLE 0b0101 // ńčđĺíĺâűé
#define COLOR_SH_WHITE 0b0111 // áĺëűé
#define COLOR_SH_MASK 0b1111 // ěŕńęŕ öâĺňŕ
// ˙çűęč ňĺęńňŕ (ëîęŕëč)
#define locale_ru_RU 1049 // đóńńęčé
#define locale_en_US 1033 // ŕíăëčéńęčé
#define locale_it_IT 1040 // čňŕëü˙íńęčé
#define locale_es_ES 3082 // čńďŕíńęčé
#define locale_fr_FR 1036 // ôđŕíöóçńęčé
#define locale_de_DE 1031 // íĺěĺöęčé
#define locale_el_GR 1032 // ăđĺ÷ĺńęčé
// ńňđóęňóđŕ ćĺńňŕ ďđč îáđŕáîňęĺ íŕćŕňčé íŕ ýęđŕí č áîęîâóţ ęíîďęó
struct gesture_ {
char gesture; // ňčď ćĺńňŕ
int touch_pos_x, // ęîîđäčíŕňű íŕćŕňč˙ X
touch_pos_y; // Y
};
// ňčď ćĺńňŕ
#define GESTURE_CLICK 1 // ďđîńňîĺ íŕćŕňčĺ íŕ ýęđŕí, ęîîđäčíŕňű íŕćŕňč˙ â ďĺđĺěĺííűő touch_pos_x touch_pos_y
#define GESTURE_SWIPE_UP 2 // ńâŕéď ńíčçó ââĺđő
#define GESTURE_SWIPE_DOWN 3 // ńâŕéď ńâĺđőó âíčç
#define GESTURE_SWIPE_LEFT 4 // ńâŕéď ńďđŕâŕ íŕëĺâî
#define GESTURE_SWIPE_RIGHT 5 // ńâŕéď ńëĺâŕ íŕďđŕâî
// âčä ŕíčěŕöčč äë˙ ôóíęöčč show_menu_animate
#define ANIMATE_LEFT 0 // ŕíčěŕöč˙ ďĺđĺőîäŕ ýęđŕíŕ ńďđŕâŕ íŕëĺâî
#define ANIMATE_RIGHT 1 // ŕíčěŕöč˙ ďĺđĺőîäŕ ýęđŕíŕ ńëĺâŕ íŕďđŕâî
#define ANIMATE_UP 2 // ŕíčěŕöč˙ ďĺđĺőîäŕ ýęđŕíŕ ńíčçó ââĺđő
#define ANIMATE_DOWN 3 // ŕíčěŕöč˙ ďĺđĺőîäŕ ýęđŕíŕ ńâĺđőó âíčç
// âĺđńčč ďđîřčâîę
#define LATIN_1_1_5_12 11512
#define LATIN_1_1_5_16 11516
#define LATIN_1_1_5_36 11536
#define LATIN_1_1_5_56 11556
#define NOT_LATIN_1_1_2_05 11205
#define UNI_LATIN 55555
typedef struct { // ńňđóęňóđŕ çŕďóůĺííîăî ďđîöĺńńŕ
unsigned int process_id; // čäĺíňčôčęŕňîđ ďđîöĺńńŕ, ďđčńâŕčâŕĺňń˙ çŕăđóç÷čęîě
int index_listed; // číäĺęń ýëüôŕ â ńďčńęĺ çŕăđóç÷čęŕ
void* base; // óęŕçŕňĺëü íŕ âűäĺëĺííóţ ďîä ďđîöĺńń ďŕě˙ňü
unsigned int size; // ęîëč÷ĺńňâî âűäĺëĺííîé ďîä ďđîöĺńń ďŕě˙ňč
void* ret_f; // ňî÷ęŕ âîçâđŕňŕ ďđîöĺńńŕ
unsigned int ret_param0; // ďŕđŕěĺňđ ôóíęöčč âîçâđŕňŕ
void(*elf_finish)(void* param0); // óęŕçŕňĺëü íŕ ďđîöĺäóđó çŕâĺđřĺíč˙ ýëüôŕ, ńţäŕ íŕäî ďĺđĺäŕňü
void(*entry_point)(void* param0); // óęŕçŕňĺëü íŕ ďđîöĺäóđó çŕďóńęŕ ýëüôŕ, ňî÷ęŕ âőîäŕ. Param0 = óęŕçŕňĺëü íŕ ńňđóęňóđó proc çŕďóůĺííîăî ďđîöĺńńŕ
void* param; // ďîëüçîâŕňĺëüńęčé ďŕđŕěĺňđ, ěîćíî őđŕíčňü ÷ňî óăîäíî, íŕďđčěĺđ óęŕçŕňĺëč âěĺńňî temp_buf_2 äë˙ ôîíîâűő ďđîöĺńńîâ
int argc; // ęîëč÷ĺńňâî ďŕđŕěĺňđîâ ďđč çŕďóńęĺ ýëüôŕ
void** argv; // ďŕđŕěĺňđű ďđč çŕďóńęĺ ýëüôŕ
} Elf_proc_;
// ńňđóęňóđŕ ýęđŕíŕ
struct regmenu_ {
unsigned char curr_scr; // íîěĺđ ýęđŕíŕ
unsigned char swipe_scr; // äîďîëíčĺňëüíűé íîěĺđ ýęđŕíŕ
unsigned char overlay; // ďđčçíŕę îâĺđëĺéíîăî ýęđŕíŕ
void* dispatch_func, // ôóíęöč˙ îáđŕáîňęč ćĺńňîâ ýęđŕíŕ
* key_press, // ôóíęöč˙ îáđŕáîňęč íŕćŕňč˙ íŕ áîęîâóţ ęíîďęó
* scr_job_func, // ęîëáýę ôóíęöč˙ ňŕéěĺđŕ îáíîâëĺíč˙ ýęđŕíŕ
* scr_job_buff, // ďĺđĺěĺííŕ˙ äë˙ ęîëáýęŕ îáíîâëĺíč˙ ýęđŕíŕ
* show_menu_func, // ôóíęöč˙ ôîđěčđîâŕíč˙ ýęđŕíŕ
* show_menu_buff, // ďĺđĺěĺííŕ˙ äë˙ ôóíęöčč ôîđěčđîâŕíč˙ ýęđŕíŕ
* long_key_press; // ôóíęöč˙ îáđŕáîňęč äîëăîăî íŕćŕňč˙ íŕ áîęîâóţ ęíîďęó
};
// ńňđóęňóđŕ äŕňű âđĺěĺíč
struct datetime_ {
unsigned short year;
unsigned char month,
day,
hour,
min,
sec,
weekday;
unsigned char h24;
};
// ďŕđŕěĺňđű ăđŕôč÷ĺńęčő đĺńóđńîâ
struct res_params_ {
short width; // řčđčíŕ â đő
short height; // âűńîňŕ â đő
};
// ńňđóęňóđű äŕííűő äŕň÷čęŕ ńĺđäöŕ
// 1.1.5.12, 1.1.5.36
typedef struct {
int t_start;
short last_hr;
unsigned char field_2;
unsigned char field_3;
unsigned char field_4;
unsigned char heart_rate; // ÷ŕńňîňŕ, óäŕđîâ/ěčí; >200 - çíŕ÷ĺíčĺ íĺ äîńňóďíî
unsigned char ret_code; // ńňŕňóń čçěĺđĺíč˙ 0-çŕęîí÷ĺíî, >0 čçěĺđĺíčĺ íĺ çŕęîí÷ĺíî
unsigned char field_5;
} hrm_data_struct;
// 1.1.2.05
typedef struct {
int t_start;
short last_hr;
unsigned char heart_rate; // ÷ŕńňîňŕ, óäŕđîâ/ěčí; >200 - çíŕ÷ĺíčĺ íĺ äîńňóďíî
unsigned char ret_code; // ńňŕňóń čçěĺđĺíč˙ 0-çŕęîí÷ĺíî, >0 čçěĺđĺíčĺ íĺ çŕęîí÷ĺíî
} hrm_data_struct_legacy;
// íŕâăŕöčîííűĺ äŕííűĺ (äë˙ ôóíęöčč get_navi_data)
typedef struct {
int ready; // Ăîňîâíîńňü äŕííűő: bit 0: äŕâëĺíčĺ ; bit 1: âűńîňŕ ; bit 2: řčđîňŕ ; bit 3: äîëăîňŕ
unsigned int pressure; // çíŕ÷ĺíčĺ äŕâëĺíč˙ â Ďŕńęŕë˙ő
float altitude; // çíŕ÷ĺíčĺ âűńîňű â ěĺňđŕő
signed int latitude; // ěîäóëü çíŕ÷ĺíč˙ äîëăîňű â ăđŕäóńŕő, óěíîćĺííîĺ íŕ 3000000
int ns; // ns: 0-ńĺâĺđíîĺ ďîëóřŕđčĺ; 1-ţćíîĺ
signed int longitude; // ěîäóëü çíŕĺíč˙ äîëăîňű â ăđŕäóńŕő, óěíîćĺííîĺ íŕ 3000000
int ew; // ew: 2-çŕďŕäíîĺ ďîëóřŕđčĺ; 3-âîńňî÷íîĺ;
} navi_struct_;
// ďîëóřŕđč˙
#define NAVI_NORTH_HEMISPHERE 0 // ńĺâĺđíîĺ ďîëóřŕđčĺ
#define NAVI_SOUTH_HEMISPHERE 1 // ţćíîĺ ďîëóřŕđčĺ
#define NAVI_WEST_HEMISPHERE 2 // çŕďŕäíîĺ ďîëóřŕđčĺ
#define NAVI_EAST_HEMISPHERE 3 // âîňî÷íîĺ ďîëóřŕđčĺ
// ěŕęđîńű äë˙ ďđîâĺđęč çíŕ÷ĺíč˙ ăîňîâíîńňč
#define IS_NAVI_PRESS_READY(navi) (navi & 0x01) // ăîňîâíîńňü äŕííűő ŕňěîńôĺđíîăî äŕâëĺíč˙: 0 - íĺ ăîňîâ, 1 - ăîňîâ
#define IS_NAVI_GPS_READY(navi) (navi & 0x0E) // ăîňîâíîńňü ęîîđäčíŕň: 0 - íĺ ăîňîâ, 1 - ăîňîâ
#define IS_NAVI_GPS_ALT_READY(navi) (navi & 0x02) // ăîňîâíîńňü äŕííűő âűńîňű (GPS): 0 - íĺ ăîňîâ, 1 - ăîňîâ
#define IS_NAVI_GPS_LAT_READY(navi) (navi & 0x04) // ăîňîâíîńňü äŕííűő řčđîňű (GPS): 0 - íĺ ăîňîâ, 1 - ăîňîâ
#define IS_NAVI_GPS_LONG_READY(navi) (navi & 0x08) // ăîňîâíîńňü äŕííűő äîëăîňű (GPS): 0 - íĺ ăîňîâ, 1 - ăîňîâ
// ęŕę ďđŕâčëî äŕííűĺ âűńîňű, řčđîňű č äîëăîňű ăîňîâű ďđč ôčęńŕöčč GPS ďđčĺěíčęŕ, ňŕę ÷ňî äîńňŕňî÷íî ďđîâĺđ˙ňü
// ńňŕňóń ăîňîâíîńňč GPS - IS_NAVI_GPS_READY(navi)
// Ňčďű óâĺäîěëĺíčé
#define NOTIFY_TYPE_NONE 0
#define NOTIFY_TYPE_SMS 5
#define NOTIFY_TYPE_EMAIL 6
#define NOTIFY_TYPE_MICHAT 7
#define NOTIFY_TYPE_FACEBOOK 8
#define NOTIFY_TYPE_TWITTER 9
#define NOTIFY_TYPE_MI 10
#define NOTIFY_TYPE_WHATSAPP 12
#define NOTIFY_TYPE_ALARM 16
#define NOTIFY_TYPE_INSTAGRAM 18
#define NOTIFY_TYPE_ALIPAY 22
#define NOTIFY_TYPE_CALENDAR 27
#define NOTIFY_TYPE_VIBER 29
#define NOTIFY_TYPE_TELEGRAM 31
#define NOTIFY_TYPE_SKYPE 33
#define NOTIFY_TYPE_VK 34
#define NOTIFY_TYPE_CALL 39
#define NOTIFY_TYPE_LOW_BAT 42
// óęŕçŕňĺëü íŕ ďŕě˙ňü ýęđŕíŕ
void* get_ptr_screen_memory();
unsigned char get_var_menu_overlay();
int vibrate(int count, int on_ms, int off_ms);
// ďîäăđóçęŕ řđčôňŕ
void load_font();
// đĺăčńňđŕöč˙ ńîçäŕâŕĺěîăî ýęđŕíŕ â îďĺđŕöčîííîé ńčńňĺěĺ
void reg_menu(void* regmenu_, int param);
void* pvPortMalloc(int size);
int _memclr(void* buf, int len);
// âńňđîĺííŕ˙ â ďđîřčâęó ôóíęöč˙ memcpy
int _memcpy(void* dest, const void* srcptr, int num);
// âńňđîĺííŕ˙ â ďđîřčâęó ôóíęöč˙ memset
int _memset(void* buf, int len, int val);
int show_watchface();
void* get_ptr_temp_buf_2();
// çŕďóńę ňŕéěĺđŕ ňĺęóůĺăî ýęđŕíŕ. ęîëáýę ňŕéěĺđŕ screen_job_func; cmd=0 îńňŕíîâčňü ňŕéěĺđ, cmd=1 âçâîä ňŕéěĺđŕ íŕ ęîëč÷ĺńňâî ěń đŕâíîĺ period
int set_update_period(int cmd, int period);
// âűáîđ ôîíîâîăî öâĺňŕ äë˙ ďîńëĺäóţůčő ăđŕôč÷ĺńęčő îďđĺŕöčé
void set_bg_color(long color);
// čńďîëüçîâŕíčĺ äŕííîé ôóíęöčč íĺîáőîäčěî ďđîčçâîäčňü â ńîîňâĺňńňâčč ń ďđčěĺđîě (ęëŕńńíîĺ îďčńŕíčĺ)
int set_graph_callback_to_ram_1();
// âűáîđ öâĺňŕ äë˙ ďîńëĺäóţůčő ăđŕôč÷ĺńęčő îďđĺŕöčé
void set_fg_color(long color);
// çŕëčâęŕ ýęđŕíŕ öâĺňîě ôîíŕ
void fill_screen_bg();
// âűâîä ňĺęńňŕ ďî ęîîđäčíŕňŕě, pos_x, pos_y ęîîđäčíŕňű ńĺđĺäčíű âĺđőíĺăî ęđŕ˙ íŕäďčńč
void text_out_center(const char* text, int pos_center_x, int pos_y);
// âűâîä ňĺęńňŕ ďî ęîîđäčíŕňŕě, pos_x, pos_y ęîîđäčíŕňű âĺđőíĺăî ëĺâîăî óăëŕ íŕäďčńč
void text_out(const char* text, int pos_x, int pos_y);
// îáíîâčňü íŕ ýęđŕíĺ ńňđîęč (ęîďčđîâŕíčĺ čç âčäĺîďŕě˙ňč â äčńďëĺé)
void repaint_screen_lines(int from, int to);
// îňîáđŕćĺíčĺ ěĺíţ ń ŕíčěŕöčĺé ńäâčăŕ ýęđŕíŕ, param - ďŕđŕěĺňđ ďĺđĺäŕâŕĺěűé ôóíęöčč show_menu_function
int show_menu_animate(void* show_menu_function, int param, int animate);
// îňđčńîâęŕ ăîđčçîíňŕëüíîé ëčíčč
void draw_horizontal_line(int pos_y, int from_x, int to_x);
// îňđčńîâęŕ âĺđčňęŕëüíîé ëčíčč
void draw_vertical_line(int pos_x, int from_y, int to_y);
// âîçâđŕůŕĺň ęîëč÷ĺńňâî ňčęîâ ńčńňĺěíîăî ňŕéěĺđŕ ń ěîěĺíňŕ ďĺđĺçŕăđóçęč (ďđčěĺđíî 510 ňčęîâ â ńĺęóíäó)
int get_tick_count();
// âńňđîĺííŕ˙ â ďđîřčâęó ôóíęöč˙ sprintf
int _sprintf(char* buf, const char* format, ...);
// óńňŕíîâęŕ ďŕđŕěĺňđîâ ýęđŕíŕ
int set_display_state_value(int state_1, int state);
// îňđčńîâęŕ çŕęđŕřĺííîăî öâĺňîě ôîíŕ ďđ˙ěîóăîëüíčęŕ
void draw_filled_rect_bg(int from_x, int from_y, int to_x, int to_y);
// ÷ňĺíčĺ ńĺęöčč íŕńňđîĺę ęîíęđĺňíîăî ýëüôŕ
int ElfReadSettings(int index_listed, void* buffer, int offset, int len);
// çŕďčńü ńĺęöčč íŕńňđîĺę ęîíęđĺňíîăî ýëüôŕ
int ElfWriteSettings(int index_listed, void* buffer, int offset, int len);
// îňîáđŕćĺíčĺ ăđŕôč÷ĺńęîăî đĺńóđńŕ ďî ĺăî íîěĺđó
void show_res_by_id(int res_ID, int pos_x, int pos_y);
// îňîáđŕćŕĺň íŕ ýęđŕíĺ ăđŕôč÷ĺńęčé đĺńóđń ęîíęđĺňíîăî ýëüôŕ, ńîäĺđćŕůčéń˙ â ńĺęöčč .elf.resources
// íóěĺđŕöč˙ đĺńóđńîâ íŕ÷číŕĺňń˙ ń 0 äë˙ ęŕćäîăî ýëüôŕ
int show_elf_res_by_id(int index_listed, int res_id, int pos_x, int pos_y);
// číčöčŕëčçŕöč˙ ăĺíĺđŕňîđŕ ńëó÷ŕéíűő ÷čńĺë
extern void _srand(unsigned int seed);
// çŕďčńü â ëîă óńňđîéńňâŕ, debug_level=5
int log_printf(int debug_level, const char* format, ...);
// îňđčńîâęŕ ďđ˙ěîóăîëüíčęŕ
void draw_rect(int from_x, int from_y, int to_x, int to_y);
// âîçâđŕůŕĺň äŕííűĺ î ňĺęóůĺé äŕňĺ/âđĺěĺíč
int get_current_date_time(struct datetime_* datetime);
// ďđîöĺäóđŕ đŕçáîđŕ ńâŕéďîâ áűńňđîăî ěĺíţ
int dispatch_left_side_menu(struct gesture_* gest);
// ďîëó÷ĺíčĺ ëîęŕëč íŕ îńíîâĺ âűáđŕííîăî ˙çűęŕ ěĺíţ ěîäŕ
int get_selected_locale();
// âîçâđŕůŕĺň řčđčíó ňĺęńňŕ, ęîňîđűé áóäĺň âűâĺäĺí ňĺęóůčě řđčôňîě
int text_width(const char* text);
// âîçâđŕůŕĺň âűńîňó ňĺęńňŕ, ňĺęóůĺăî řđčôňŕ
int get_text_height();
// âîçâđŕůŕĺň ďĺđĺěĺííóţ left_side_menu_active
int get_left_side_menu_active();
// óęŕçŕňĺëü íŕ ôóíęöčţ ńîçäŕíč˙ ňĺęóůĺăî ýęđŕíŕ
void* get_ptr_show_menu_func();
// âîçâđŕůŕĺň óęŕçŕňĺëü íŕ ńňđóęňóđó çŕďóůĺííîăî ďđîöĺńńŕ âű÷čńë˙˙ ďî ŕäđĺńó ńčěâîëŕ
Elf_proc_* get_proc_by_addr(void* addr);
// ôóíęöč˙ çŕâĺđřĺíč˙ ďđčëîćĺíč˙, â ęŕ÷ĺńňâĺ ďŕđŕěĺňđŕ íĺîáőîäčěî ďĺđĺäŕňü ŕäđĺń îńíîâíîé ôóíęöčč îňîáđŕćĺíč˙ ýęđŕíŕ ďđčëîćĺíč˙
void elf_finish(void* addr);
// îňđčńîâęŕ ďđ˙ěîóăîëüíčęŕ
void draw_rect(int from_x, int from_y, int to_x, int to_y);
// îňđčńîâęŕ çŕęđŕřĺííîăî ďđ˙ěîóăîëüíčęŕ
void draw_filled_rect(int from_x, int from_y, int to_x, int to_y);
// âńňđîĺííŕ˙ â ďđîřčâęó ôóíęöč˙ strlen
int _strlen(const char* str);
// âîçâđŕůŕĺň âĺđńčţ ďđîřčâęč
int get_fw_version();
// îňîáđŕćĺíčĺ öčôđ áîëüřčě řđčôňîě
void show_big_digit(int symbolSet, const char* digits, int pos_x, unsigned int pos_y, int space);
// âîçâđŕůŕĺň ńňđóęňóđó res_params_ ń đŕçěĺđŕěč ăđŕôč÷ĺńęîăî đĺńóđńŕ
int get_res_params(int index_listed, int res_id, struct res_params_* res_params);
// ďđčîńňŕíîâčňü ňĺęóůčé ďđîöĺńń íŕ âđĺě˙ ěń
void vTaskDelay(int delay_ms);
// ďîëó÷ĺíčĺ čçěĺđĺííîăî ďîńëĺäíĺăî çíŕ÷ĺíč˙ ń äŕň÷čęŕ ńĺđäöĺáčĺíč˙
unsigned char get_last_heartrate();
// ńňŕíîâęŕ đĺćčěŕ čçěĺđĺíč˙ ďóëüńŕ 0x20 - îäíîęđŕňíűé
int set_hrm_mode(int hrm_mode);
// ďîëó÷ĺíčĺ óęŕçŕňĺë˙ íŕ äŕííűĺ äŕň÷čęŕ ńĺđäöŕ
void* get_hrm_struct();
// Ôóíęöčč íŕâčăŕöčč
// âęëţ÷ĺíčĺ/îňęëţ÷ĺíčĺ ńĺíńîđîâ GPS č áŕđîěĺňđŕ
void switch_gps_pressure_sensors(int mode);
// ďîëó÷ĺíčĺ äŕííűő GPS č áŕđîěĺňđŕ
void get_navi_data(navi_struct_* navi_data);
// ďđîâĺđęŕ ăîňîâíîńňč GPS
int is_gps_fixed();
// internal
struct global_app_data_t
{
// ŕäđĺń ôóíęöčč âîçâđŕňŕ
void* ret_f;
};
int main(int param0, char** argv);
int main_proxy();
void regmenu_show_screen(void* param);
void regmenu_screen_job();
void regmenu_long_keypress();
void regmenu_keypress();
int regmenu_dispatch_func(void* param);