From 8c1400a53c3f240428437efe026214a2726c5d2a Mon Sep 17 00:00:00 2001 From: kerem yollu Date: Fri, 24 Feb 2023 15:24:51 +0100 Subject: [PATCH] PLaying around with function pointers --- env/parser/config.json | 95 ++++++++++++++++++++++++++ env/parser/parser.py | 9 +++ libraries/function_pointer/graphics.c | 15 ++-- libraries/function_pointer/graphics.h | 48 ++++++++++++- libraries/function_pointer/main.c | 19 +++--- libraries/function_pointer/oled.c | 10 +-- libraries/function_pointer/oled.h | 7 +- libraries/function_pointer/test | Bin 16944 -> 17000 bytes libraries/function_pointer/ui.c | 7 ++ libraries/function_pointer/ui.h | 9 +++ 10 files changed, 188 insertions(+), 31 deletions(-) create mode 100644 env/parser/config.json create mode 100644 env/parser/parser.py create mode 100644 libraries/function_pointer/ui.c create mode 100644 libraries/function_pointer/ui.h diff --git a/env/parser/config.json b/env/parser/config.json new file mode 100644 index 0000000..50b039a --- /dev/null +++ b/env/parser/config.json @@ -0,0 +1,95 @@ +{ + "organization": "freeCodeCamp", + "website": "https://www.freecodecamp.org/", + "formed": 2014, + "founder": "Quincy Larson", + "certifications": [ + + { + "name": "Responsive Web Design", + "courses": [ + "HTML", + "CSS" + ] + }, + { + "name": "JavaScript Algorithms and Data Structures", + "courses": [ + "JavaScript" + ] + }, + { + "name": "Front End Development Libraries", + "courses": [ + "Bootstrap", + "jQuery", + "Sass", + "React", + "Redux" + ] + }, + { + "name": "Data Visualization", + "courses": [ + "D3" + ] + }, + { + "name": "Relational Database Course", + "courses": [ + "Linux", + "SQL", + "PostgreSQL", + "Bash Scripting", + "Git and GitHub", + "Nano" + ] + }, + { + "name": "Back End Development and APIs", + "courses": [ + "MongoDB", + "Express", + "Node", + "NPM" + ] + }, + { + "name": "Quality Assurance", + "courses": [ + "Testing with Chai", + "Express", + "Node" + ] + }, + + { + "name": "Scientific Computing with Python", + "courses": [ + "Python" + ] + }, + { + "name": "Data Analysis with Python", + "courses": [ + "Numpy", + "Pandas", + "Matplotlib", + "Seaborn" + ] + }, + { + "name": "Information Security", + "courses": [ + "HelmetJS" + ] + }, + { + "name": "Machine Learning with Python", + "courses": [ + "Machine Learning", + "TensorFlow" + ] + } + ] +} diff --git a/env/parser/parser.py b/env/parser/parser.py new file mode 100644 index 0000000..01d7d6e --- /dev/null +++ b/env/parser/parser.py @@ -0,0 +1,9 @@ +import json + + +with open('config.json', 'r') as config_file: + config_data = json.load(config_file) + # print(config_data) + # print(json.dumps(config_data, indent=4)) + print(json.dumps(config_data, indent=4, sort_keys=True)) + diff --git a/libraries/function_pointer/graphics.c b/libraries/function_pointer/graphics.c index 32ab8bf..cc78ccb 100644 --- a/libraries/function_pointer/graphics.c +++ b/libraries/function_pointer/graphics.c @@ -1,17 +1,14 @@ -#include -#include -#include - #include "graphics.h" -display_s *display; +display_s *lcd; -void init_lcd(display_s *d) +void display_init(display_s *d) { - display = d; + lcd = d; + printf("LCD : Init Ok\n"); } -void print_lcd( int val) +void display_print(int val) { - display->print(val); + lcd->print(val); } diff --git a/libraries/function_pointer/graphics.h b/libraries/function_pointer/graphics.h index eb4dd7b..54e2304 100644 --- a/libraries/function_pointer/graphics.h +++ b/libraries/function_pointer/graphics.h @@ -1,8 +1,52 @@ +#include +#include +#include +#include + typedef struct display { int size_x,size_y; + void (*enable)(); + void (*disable)(); + + void (*reset_hard)(); + void (*reset_soft)(); + + uint8_t (*is_ready)(); + + void (*sleep)(); + void (*wake)(); + + void (*draw_pixel)(uint16_t, uint16_t, uint8_t); + void (*draw_line)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t); + void (*draw_rectangle)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t, uint8_t); + void (*draw_circle)(uint16_t, uint16_t, uint16_t, uint8_t, uint8_t); + + void (*scroll_right)(uint16_t, uint16_t); + void (*scroll_left)(uint16_t, uint16_t); + + void (*scroll_up)(uint16_t, uint16_t); + void (*scroll_down)(uint16_t, uint16_t); + + void (*set_font)(uint8_t*, uint8_t, uint8_t spacing); + void (*print_char)(uint16_t, uint16_t, uint8_t, uint8_t); + void (*print_text)(uint16_t, uint16_t, uint8_t, uint16_t, uint8_t); + void (*print_cursor)(uint8_t); + + void (*goto_pos)(uint16_t, uint16_t); + + uint8_t (*display)(); + uint8_t (*clear)(); + + void (*change_brightness)(uint8_t); + void (*change_contrast)(uint8_t); + + void (*rotate)(uint8_t); + void (*inverse)(uint8_t); + void (*invert)(uint8_t); void (*print)(int); } display_s; -void init_lcd(display_s *d); -void print_lcd(int val); +void display_init(display_s *d); +void display_print(int val); + diff --git a/libraries/function_pointer/main.c b/libraries/function_pointer/main.c index 35134cc..94f3fde 100644 --- a/libraries/function_pointer/main.c +++ b/libraries/function_pointer/main.c @@ -1,19 +1,16 @@ #include #include #include +#include "ui.h" -#include "oled.h" + +display_s display; int main() { - - display_s display = oled_init(); - init_lcd(&display); - - void (*print_ptr)(int) = &oled_print; - - (*print_ptr)(20); - display.print(40); - print_lcd(10); - return 0; + oled_init(&display); + display_init(&display); + ui_print_number(50); + display_print(10); + return 0; } diff --git a/libraries/function_pointer/oled.c b/libraries/function_pointer/oled.c index 17b8703..a8d04c4 100644 --- a/libraries/function_pointer/oled.c +++ b/libraries/function_pointer/oled.c @@ -1,22 +1,18 @@ #include #include #include - #include "oled.h" - void oled_print(int a) { - printf("Value of a is %d\n", a); + printf("oled_print(int a) : %d\n", a); } -display_s oled_init() +void oled_init(display_s *lcd) { - display_s *lcd = malloc(sizeof(display_s)); lcd->size_x = 10; lcd->size_y = 20; lcd->print = &oled_print; - printf("LCD_OLED : Init Ok\n"); - return *lcd; + printf("LCD_OLED_REG : Init Ok\n"); } diff --git a/libraries/function_pointer/oled.h b/libraries/function_pointer/oled.h index 0b4a413..167d4b1 100644 --- a/libraries/function_pointer/oled.h +++ b/libraries/function_pointer/oled.h @@ -1,6 +1,9 @@ - +#include +#include +#include +#include #include "graphics.h" -display_s oled_init(); +void oled_init(display_s *lcd); void oled_print(int a); diff --git a/libraries/function_pointer/test b/libraries/function_pointer/test index 08a85ce78ca41452d700c3707453181ecb185785..9d4ab339ed2223d8c8e2906018e6446e7c549b51 100755 GIT binary patch delta 2533 zcmZuye@t6d6u!4V24!q}k3mXj6IwO}!k{g%6}A=n280qZlqs8u+uA}gs{&(Cj4mT( zZZ1|*S2&3#CQF$9;fyhioYRCYYMN*Um@N`zd!GB=eT)%r^WJyQ zcfNb>x%b_BnmSF>r)e@@3<^YPUKL1swB$q6xKXvnM{hbzmvpLe2}J5J1-TVOYcm|A z)+|3~j_BcaddBXzsq(cLR%sH365YqS8L|Cc-~U^A;+^?_dZrI;dG(8`ig8Hmw&i7@ zjN-FSk)KrF8DQ5JL29=F7G0Ympm$L#g!E=zkifhvPfw022-A8a+|%2^Y8Y-HI_1ZP z^Ykz(CFN-I1(U%o5fk%PD{~N%_NbjqZhPUj!E7O-YC64-dz~N}U!d!t$7qIbV>Tp> zPMDE0C+2dV&l(f<(f6TKsBGNtAmrYrf(Al-3D0>nd2IqSbM6E(?m zn+k^63|Ba!{+OcQ@ekfi zT_($N`Ut+R8b#PG7Q_-Bf$>i>VZvizeYVTf75GZeuwEAH0lud2A&0KCV?f`jKZW?v z@<`)y{3=UrBlo61cqq%s>nj>xd}zrx(ztYuuqaB;YslqYUm`CR!&H3n}Ypa zIMCN0>5UfSV+)nocG+xChO~T=&S2-?iq8pra-qgv z5X;9L_M)|-8hWIKegH)dgT8Zc`y36uJ#{(^|v7tl$tmj~<%dKOZvB!oD*%?>7OaX4RIN1brH zyg=;Z1&>u9)>0rk>Sz+$90l|^9CLhzl|pS!sBvDS3oz@<(`S(5K(PR2k|elXW|~s0 zEYb%dR}=NaDEc;%AY4Y@B;0g4kXuA9hfIOJ;w&wOPb&gAi&$y4%xGna&tpf_5j?vf zRW?yC#4C@2P-TE$E4P~_&__uQIS7`jB6=C5DzoK=!sU@AUd4DAatn@CnPYbqQzTkZ z*1QxqjuJC|B8^e86nPyxmus>zBcFp=rE*jqno29;{5bzE%4tE53wax^p=hUQ`BLfU zlVYzjWaae?EbcJJ4)X}5JhE~gP}7UNK=MiTno)zui^M{LoKN$3b{0psiA?f1oF+p& z{vDp7a$eE-mckSGdxvN_$2BLoM$6#>%g}Nay)2Wp`F{uYoo34&^oqKC;^g^g^Ug!t zPIK%bkDSS~Qf>oEvUTcy`Z<4y5BnNXz}5LBEsly`@i;;LU9e6m&5CiDe(f$5tMT`e zM!qEFvg434bg=F7@d>m)Js0C~8EXT1Ky;gp2hdvxk}ek{_b0l+2>jtb34_&TrGpW* zCI)&3dpf%MNuVnniiSuyGSJr@dQHPX1dAf1s&nC+>QDuDssl+N&>iXM40H|*Dk`)) z1_lBH(NKSs^n@b4q`Nab(NXg@ow&QJkkT0t_c%oDifb5$He`<*)J@S)fYCh;Qd#qLff34G`ovulU*EZ2sn5}h) zew#Y2hG7uv9O4vbHM}sW_LIChaH{!*y?+rP`?m5bz_fZZ@z>MYI~4rMkQz d*JScaWksPA&Pk=FBmC3$!>r_{KY?j)(SLo=CKCVv delta 2408 zcmZ8ieM}Tr5P$DJ}b-2X#Ad_bpo9X7{%< zznS;u&AypU9j3#FX@8E;X(Q?gYCwjM7k+7-G;7l2@mn72gh3M~K%gG0jY~F^7C|%3 zP2b2h?FRUO9&xRdH1oOGtf@&e6dF!v4V`)X+b0u^j`?xlTO(DQz7q!yWJAi3pKU=i ziuXL#yhnXnz-26;FT;7G2wRL^x)h>Dk-m-cVrVmF(LIbYXQ6E#gbZ2s&aOn9bncGr zNNgk9qa7VPTVcl7Q)3|PBC|J}o8nc9$g@DYo{d?VMSzhwQhp6tSZvh8d6Vd{37S+M z)KF*3;l61TO@mj=BDKI)^O}t1+#(GP=Zy@RedzbW1rH zhbzmysOu%%H@RO8M^2gr++_der&q;H&aA@7(SZeUNx6Y5YH13+QP=11#tnrwgp)Tz zP2uFD(CeY(Oq1NVsuR_Xb(X?^F?dTVKC;igCu2Y|b#I7vbZwP(Zj+)?EG{i;ODA+tam_|VmXC*b73CCS$vs86idc=9KrFnkD1RgNAeyiW zK1a+)oJOoh%zU6IZHOg^hY?RaP>jk|3g1h4^fKI%JZ2eZ4nl@&Dcu4^F45)3nc1o& zlxaI+sLGgUXk3tn$2AvK@8jJCF_$yC7p)rqXZ7l=)j8CEgZwj3^9?Gk&hjVfKSN%6 zn%|`Hc$CQu-d}+=ugc7JFgDVV_tAV9HrG4qc@gQwgseJBfx4Y^99-^*%VN@WS~noX zYt&?xL^k?i$Q__E{N;8E{k&4z>4J8w2booSTg9=|Qt%n}pPV8kSxKo@3_k1QZC3dm^3QG#;IcO*m9TVt9 zNj9104Ty(KZbDCq*nL|S1)?`uon^_UL?k4rYczZwlWQRJpY%CS+fi@F*v9OdLjMMN zTz{Q^BlU2g$x2OcC;8k#Jrzilf>0_teneU#Im8>(rqiDd5GobJEy&uC4bEX>s27NX z$Xu^?(_GZs4VZAgmOk4qHd_%p|19*?oRv6zjO)+v(DS+eB=d5dMV7@dH^Ol>{@;-m z3^_#a>-vgQ5Pd;(+~qTG;VW+Dw8CcYzKoI$cTpeIy)^uZd+9$~Y$NKhWB+INbF;Ao z^=w~FJbtx$(PJs3k$9`xqE`pEO<_d$nigmQZm9-uy_uIhY_gb%U z7AwwQHe1DdHOr9ncUyvL%5az8`b8+H6yUu|8_1PjtDeL+C!&R5pbLa+ur zf?gszHbWS-M=@n=%;HEg5TIDaSArg^emJ~9LjfAZX92W_a`3Gu6v%G(YOa&KDdnQ* Xfj>ektidvkX#?xJGI|O^>k9q@Q}zej diff --git a/libraries/function_pointer/ui.c b/libraries/function_pointer/ui.c new file mode 100644 index 0000000..ec6a934 --- /dev/null +++ b/libraries/function_pointer/ui.c @@ -0,0 +1,7 @@ +#include "ui.h" + +void ui_print_number(int num) +{ + printf("UI : Init Ok\n"); + display_print(33); +} diff --git a/libraries/function_pointer/ui.h b/libraries/function_pointer/ui.h new file mode 100644 index 0000000..436d3e3 --- /dev/null +++ b/libraries/function_pointer/ui.h @@ -0,0 +1,9 @@ +#include +#include +#include +#include +#include "oled.h" + +void ui_print_number(int num); +void ui_init(); +