diff --git a/SquareLineProj/ESP32S3_UI.sll b/SquareLineProj/ESP32S3_UI.sll index 940fa56..503ce8e 100644 --- a/SquareLineProj/ESP32S3_UI.sll +++ b/SquareLineProj/ESP32S3_UI.sll @@ -12,7 +12,7 @@ "board": "ESP32-S3-LCD-EV-BOARD", "board_version": "1.0.1", "editor_version": "1.5.1", - "image": "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OBkn3qdWDKGUgqRkEdDQAjosiFWGQayWXa7L/dOK2KyZf9fJ/vH+dADK0rP/AI9U/H+dZtaVn/x6p+P86AJ6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooApX/WL8f6VTq5f9Yvx/pVOgC9H/q1+gp1Nj/1a/QU6gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKMn+sb6mp7H/AI+G/wB3+oqCT/WN9TU9j/x8H/d/rQBoV5Y9hpK33iWPV/CN9qF5cajI9tLHpbsWjKIF2z7cKNwbncMda9TooA88TwbrvlafftMk2ovp0FtepLqNxb/vIwcPvhPzn5iCCOcZBGTma78F6qtlaRW8tveXaWxhlvrm+uoJslmb70bEyIC3CseMdea72igDjbXwxrHh2W2k0GaxuB/Z8FjcR3pePcYQwSRSob+82Vx6c1P8Pknj8PXSXUqy3C6neCWRV2h2898kDsCe1dXRQBweo+D9Q8X+KZpfE7IPD9k2LHT4ZTi4bH+tkIwe5AH9Mlrvg/Q9c8MX11o81wt74ejTfp88j/vosn/UsO4Azz9PXC9fRQAVky/6+T/eP861qyJeZpP940ANrSs/+PVPx/nWbWlZ/wDHqn4/zoAnooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigClf8AWL8f6VTq5f8AWL8f6VToAvR/6tfoKdTY/wDVr9BTqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAoyf6xvqaRWKOGU4IpZP9Y31NNoAvLfpj5kYH25pft8X91/yFZzOiDLsqj3OKb9og/57R/8AfQoA0/t8X91/yFH2+L+6/wCQrM+0Qf8APaP/AL6FH2iD/ntH/wB9CgDT+3xf3X/IUfb4v7r/AJCsz7RB/wA9o/8A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", + "image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAHgAyADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3aiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAIjcIrEENwcUn2lPRqryf6xvqabQBa+0p6NR9pT0aqtFAFr7Sno1H2lPRqq0UAWvtKejUfaU9GqrRQBa+0p6NR9pT0aqtFAFr7Sno1H2lPRqq0UAWvtKejUfaU9GqrRQBa+0p6NR9pT0aqtFAFr7Sno1H2lPRqq0UAWvtKejUfaU9GqrRQBa+0p6NR9pT0aqtFAFr7Sno1H2lPRqq0UAWvtKejUfaU9GqrRQBa+0p6NR9pT0aqtFAFr7Sno1H2lPRqq0UAWvtKejUfaU9GqrRQBa+0p6NR9pT0aqtFAFr7Sno1H2lPRqq0UAWvtKejUfaU9GqrRQBa+0p6NR9pT0aqtFAF8HcoI7jNLTY/wDVr9BTqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAoyf6xvqabTpP9Y31NNoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAL0f+rX6CnU2P8A1a/QU6gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKMn+sb6mm06T/WN9TWVrGs2+kW++U5kb7qjqaqEJTkoxV2yZTjCLlJ2Rp0V51P4z1CSQmNVRfQk/0xUX/CX6p6x/8Aj3/xVegspxLWy+8895rhk939x6VRXmv/AAl+qesf/j3/AMVR/wAJfqnrH/49/wDFU/7JxPZfeH9rYbu/uPSqK81/4S/VPWP/AMe/+Ko/4S/VPWP/AMe/+Ko/snE9l94f2thu7+49KorzX/hL9U9Y/wDx7/4qj/hL9U9Y/wDx7/4qj+ycT2X3h/a2G7v7j0qivNf+Ev1T1j/8e/8AiqP+Ev1T1j/8e/8AiqP7JxPZfeH9rYbu/uPSqK81/wCEv1T1j/8AHv8A4qj/AIS/VPWP/wAe/wDiqP7JxPZfeH9rYbu/uPSqK81/4S/VPWP/AMe/+Ko/4S/VPWP/AMe/+Ko/snE9l94f2thu7+49KorzX/hL9U9Y/wDx7/4qj/hL9U9Y/wDx7/4qj+ycT2X3h/a2G7v7j0qivNf+Ev1T1j/8e/8AiqP+Ev1T1j/8e/8AiqP7JxPZfeH9rYbu/uPSqK81/wCEv1T1j/8AHv8A4qj/AIS/VPWP/wAe/wDiqP7JxPZfeH9rYbu/uPSqK81/4S/VPWP/AMe/+Ko/4S/VPWP/AMe/+Ko/snE9l94f2thu7+49Korz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KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAoyf6xvqabVqK286R2YkIGPTvVj7HB/c/U0AZtFaX2OD+5+po+xwf3P1NAGbRWl9jg/ufqaPscH9z9TQBm0VpfY4P7n6mj7HB/c/U0AZtFaX2OD+5+po+xwf3P1NAGbRWl9jg/ufqaPscH9z9TQBm0VpfY4P7n6mj7HB/c/U0AZtFaX2OD+5+po+xwf3P1NAGbRWl9jg/ufqaPscH9z9TQBm0VpfY4P7n6mj7HB/c/U0AZtFaX2OD+5+po+xwf3P1NAGbRWl9jg/ufqaPscH9z9TQBm0VpfY4P7n6mj7HB/c/U0AZtFaX2OD+5+po+xwf3P1NAGbRWl9jg/ufqaPscH9z9TQBm0VpfY4P7n6mj7HB/c/U0AZtFaX2OD+5+po+xwf3P1NAGbRWl9jg/ufqaPscH9z9TQBm0VpfY4P7n6mj7HB/c/U0AZtFaX2OD+5+pqrc23k4ZSSh9e1AE0f+rX6CnU2P/Vr9BTqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAkg/1X/Am/malqOD/AFX/AAJv5mpKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACoLz/j1f8P51PUF5/x6v+H86AI4/wDVr9BTqbH/AKtfoKdQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAEsH+q/wCBN/M1JUcH+q/4E38zUlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUF5/x6v+H86nqC8/49X/AA/nQBHH/q1+gp1Nj/1a/QU6gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAJYP9V/wJv5mpKjg/1X/Am/makoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgvP+PV/w/nU9QXn/AB6v+H86AI4/9Wv0FOpsf+rX6CnUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBLB/qv+BN/M1JUcH+q/4E38zUlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUF5/x6v8Ah/Op6gvP+PV/w/nQBHH/AKtfoKdTY/8AVr9BTqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAlg/wBV/wACb+ZqSo4P9V/wJv5mpKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACoLz/AI9X/D+dT1Bef8er/h/OgCOP/Vr9BTqbH/q1+gp1ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUASwf6r/gTfzNSVHB/qv8AgTfzNSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFQXn/Hq/4fzqeoLz/j1f8P50ARx/6tfoKdTY/wDVr9BTqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAlg/1X/Am/mar6r/AMgu4/3asQf6r/gTfzNLLEk8TRSLuRhgjOKAK3m3MFxCkzxSJKxXKoVIOCfU5HFUECCxs3lMRQBxsmJCk565wef8a04rKCGTzFQlwMBmYsR9MnipIIVt4FiQkqvTPWgDIhVFgtvtYItT5jYbO3Jb5c/hnGafceTtttiqbLDcSsypuzxk4PHXHatiigDHaVVs7d/K8uJbkbQpLArzyMjOOtSvK1xJeTWjFsQBFZe7ZY8fmKvzQrN5e4kbHDjHqKkoAyoPs32uD7Fndz52M/dwfve+ce9Qw+V9ms/tX/HttfOfu7s8Z/DNbdRwQrbwLEhJVemetAGQp/0W9+y7/L85e5B24XOO+MfpT4mj8m7WCCJY/JJLxSFlzjpyBz1rUjhWOSVwTmRgxz9AP6VJQBTszBd2kB6mIDjkFWxj+tTxW0MBBjTBChOpPA6fzqWigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqC8/49X/D+dT1Bef8AHq/4fzoAjj/1a/QU6mx/6tfoKdQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACW86hmicgEMcZ71arIk/1jfU03AoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2aKxsCjAoA2apXk6lfKUgknnHaqeBRQBej/ANWv0FOpsf8Aq1+gp1ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUZP9Y31NNp0n+sb6mrNjEG3SEZIOB7UAVvKkP/ACzf/vk0vlS/88n/AO+TWtRQBk+VL/zyf/vk0eVL/wA8n/75Na1FAGT5Uv8Azyf/AL5NHlS/88n/AO+TWtRQBk+VL/zyf/vk0eVL/wA8n/75Na1FAGT5Uv8Azyf/AL5NHlS/88n/AO+TWtRQBk+VL/zyf/vk0eVL/wA8n/75Na1FAGMQQcEEH0NFaV1EJIWb+JRkGs2gApVVmPyqW+gzQq7nVf7xxWsiLGgVRgCgDL8qX/nk/wD3yaPKl/55P/3ya1qKAMnypf8Ank//AHyaPKl/55P/AN8mtaigDJ8qX/nk/wD3yaPKl/55P/3ya1qKAMnypf8Ank//AHyaPKl/55P/AN8mtaigDJ8qX/nk/wD3yaPKl/55P/3ya1qKAMnypf8Ank//AHyaPKl/55P/AN8mtaigDJ8qX/nk/wD3yaPKl/55P/3ya1qKAMnypf8Ank//AHyaPKl/55P/AN8mtaigDJ8qX/nk/wD3yaPKl/55P/3ya1qKAMnypf8Ank//AHyaPKl/55P/AN8mtaigDGIIOCCD6GitK6iEkLN/EoyDWbQBej/1a/QU6mx/6tfoKdQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFGT/WN9TV2w/1Df7x/kKpSf6xvqau2H+ob/eP8hQBaooooAKKKKACiiigAooooAKKKKACiiigBk3+ok/3T/KsntWtN/qJP90/yrJ7UAPi/18f+8P51rVkxf6+P/eH861qACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBk3+ok/3T/KsntWtN/qJP8AdP8AKsntQBej/wBWv0FOpsf+rX6CnUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBRk/wBY31NXbD/UN/vH+QqlJ/rG+pq7Yf6hv94/yFAFqiiigAooooAKKKKACiiigAooooAKKKKAGTf6iT/dP8qye1a03+ok/wB0/wAqye1AD4v9fH/vD+da1ZMX+vj/AN4fzrWoAKKKKACsXxB4ls/D0KGYNLPJ9yFDyR6k9hVrWdXg0TTZLyfnbwiZ5duwFeMalqNzqt9JeXT7pXP4KOwHtXp5fgfrEuafwr8Tzcwx31ePLD4n+B6boHji01q8FnLbtazv/qwX3K3tnA5/Cuqrxrwhp81/4ktPKyFgcTSN6BTn9Tx+Ney1OZYelQqqNPtsVl2Iq16TlU77hRRRXnHoBRRRQAUUUUAFFFFABTZJFjQu3QU6q94he3OP4TmgCNb9S2GQhfXOauA5GR0rEq5Z3GCInPH8J/pQOxfooooEMm/1En+6f5Vk9q1pv9RJ/un+VZPagC9H/q1+gp1Nj/1a/QU6gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKMn+sb6mrth/qG/3j/IVSk/1jfU1dsP9Q3+8f5CgC1WDZXE9r4y1LTp5pJIbqCO9tQ7EhMYjlRc9ACI2x0zIa3qwfENvOl9o2q2sMkslndCOVI1LEwS/I/A5wCUc/wC5QBg+H4/E+uaAuqx+KJY7h5ZwlvLZwtD8kroAcKHxhRzuzSt4j1XV9N0S/i+3WFlcRTfbJNPtBdSRzowUJtKv8hIk+YKTwORmrNh4S1/TtN/sy28URw2XmSMDFpwEyh3ZyA7SEA5Y87a1j4R0VtJsdNNvIILJNkBjneN1B6/MhBOcZPPJoA5bTde13VdM0C1/tR4LnUb69ilvFtUVwkJl2gRuCF+6oOQSMevNJ4u1zxBpUevTre6hZm1iDWHk6aJ7eVfLBLSSbDtbduHJUDA4Irdv/Ael3l5o7xNNaW2mB0W3t55YwyspAwUcbTk5LdT0JrQv/Cmi6nf/AG28szLKSpcGZxHIVxtLoG2tjA6g9KANeMsY1LfewM/WnUUUAFFFFABRRRQAyb/USf7p/lWT2rWm/wBRJ/un+VZPagB8X+vj/wB4fzrWrJi/18f+8P51rUAFFFc3431c6XoDpG2J7o+UnqB/Efy4/EVpRpOrNQjuzOrUVKDnLZHBeL9eOtauwicm0gJSIdm9W/H+WKxbKzn1C8itLZN80rbVH+e1QV6Z8PtDFtZNqsy/vpxtiz/Cmev4n9B719XXqQwWH93povX+tT5ajTnjcR73XV+h0Wg6Jb6Fpy20IDSHmWTHLt/h6CtSiivkpzlOTlJ3bPq4QjCKjFWSCiiipKCiiigAooooAKKKKACiiigDPvLfYfMQfKeo9DVStplDKVIyDwayJYzFKyHt0NMaNG1m86Ln7y8Gp6yraXypwex4NatITGTf6iT/AHT/ACrJ7VrTf6iT/dP8qye1AF6P/Vr9BTqbH/q1+gp1ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUZP9Y31NXbD/AFDf7x/kKpSf6xvqau2H+ob/AHj/ACFAFquT1vxLLoniho5XZ7JNKecW6KC0s/nIiKpxnJLbQOmTXWVgX/hW21Hxhp+v3Epb7DA0cVvt4Lk5Dk57c4GOuDnigDEi8W6lLqei2lzELW9W5uINTs48PkpbtIm0kZ2t8rAj6djUVrrGvx6No3iWfV4riDUZ7dZNNWBAiJOyqFjYfOXXcM5JztPArfv/AArb3njHSvEiTGG5sldJEC5E6lGVc88Fd7EHnqRUlt4P0G01Jb+DT1SdHaRB5jmONz1ZYydink8gA80AY/8AwkF//wAIl4xvftY+06bPex2z7V/deWmUGMYOCR1zn3q1Ne6pd+KdK0uK/ezjGnm9uCkSM0zB0XYdwO0cnpg+9WZvA3hy4u5rmXTt0k8xnmHnSbJXznLpu2tz2IIFFx4RtbrxjF4hkuLkPHB5YhSeVQWDKQ3DgbcLgpjBzk5oAybDxZqsV5r4n0fUNRtLPUZIkmtRD+6jCIduwsrsRknoTz36VN/at94n1o2ui6z/AGfYx2EN4s8cCSSXHml9uA4ICgJzxnJxkYp48La3bXWqHT/EcVrbajdNcuo0/fLGWVVIVzJjoo5K1dbwToL6fYWclo7LYwC3hlWZ45NmBwXQqSDjJHTPagDJ0nxJqd9e+G4ppov9IlvoLoxINk5gJVXUnJAJXPB745pkHiLU5fhpY6sLsNqE11DCZQifNuu1jYYxjO3I6frXQnQ4oNR0ZrKztI7TT0lRRllaIMoACAfKc453fhzVez8DeHLC5gnt9O2tBJ5samaRkV/7+wsV3f7WM+9AEcN1qWoeN9RtE1Brey06CA+QkSMJmkDklmIyMbRgKR05rc0+G6t9Pghvbv7XcogWW48sR+Y3dto4H0rGs/CFpa+KdQ103FzI92FxCZ5dqEBg2Rv2sDu4BGFxxWzp+n2ulafBYWUXlW1ugjiTcW2qOgyck0ATTf6iT/dP8qye1a03+ok/3T/KsntQA+L/AF8f+8P51rVkxf6+P/eH861qACvKPiBqBu/EP2ZTmO1QJj/aPJP8h+Fer14NqF0b3Urm6Y8zSs/5nNexk1Lmqub6L8zyM4qctJQXV/kP0uwfU9UtrJMgzSBSR2Hc/gMmvc4okghSGJQscahVUdgOAK8y+HFkJtbnumGRbxYB9GbgfoGr1ClnFbmrKn0X6hk9LlpOp1f6BRRRXkHrhRRRQAUUUUAFFFFABRRRQAUUUUAFU7+PKLIOo4P0q5TJk3wuvqOKAMeta3fzIEY9cYNZNX9PbMbr6HNMbLM3+ok/3T/KsntWtN/qJP8AdP8AKsntSEXo/wDVr9BTqbH/AKtfoKdQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFGT/WN9TV2w/1Df7x/kKpSf6xvqau2H+ob/eP8hQBaooooAKKKKACiiigAooooAKKKKACiiigBk3+ok/3T/KsntWtN/qJP90/yrJ7UAPi/wBfH/vD+da1ZMX+vj/3h/OtagCpqkvk6Reyg4KQO2foprwivcteGfD2pgdfskv/AKAa8Nr6HJF7k35o+fzp+/BeR6T8M4QunX0+OXmVM/QZ/wDZq7muO+GxH/CP3AzyLpjj/gCV2NeVmDviZ+p6mAVsND0Cuc8dane6T4Vnn07eLqSWGBGTG5fMkVCRu4zgnGeM4ro6q6lp1pq+nT2F9CJbaddroSRkexHIIPII6EVxnYefjUtR0aHVtQ0xNefT7TS5pZRrXmH/AElcFNnmfMRjfux8vTvV97S98N3Og3Q1vUr5tRuls7xLibejl0Y7416RlWXOFwMZzXQ6f4dWziuILnVNR1O3ni8pob+RZFCHgjhQTkHBJJNVtM8GWWm3ttcG91G8WzBFnBdz747bIx8gwCTt4BYkgdKAMLWorDT7uLTJ9Y8YXd5DZo0cVg0jvtyyh2MagFiVPLnH0FWhq2oWmi6KL+4f/hIYIonubZVbZMXG0xuQNiu2PlyR84wOCQdrVPDS6jqyanDq2o6fciD7OTaNGA6biwzvRu5NObw1BJcwzyXt45XyTMpZMXLxHKO+FzuBAPylQcDIxxQBk+Gb261HUku0a9eCVbh53m3+SQZR5HlhvlB2Z4Xpzv8Amq5JeSr8SYLT7S4gOkyOYfMO0v5qAHb0zgnnritmy06KwkumgeQJcSmYxEjYjH7xUY4yfmPuSe5rF1Xwda3/AIns9fgWyjvIQFlM9ks3mAMpVgcgq424Dc4B6UAYtt4kuYdB8ata3f2jVNPu7toYJH3tGoAK4U87R2HTgiovDupC11WyhVvEFzdXtrI4N1fwXEMu1d3mFUkYxjIABUAfMBXcxaXp8N2buKxtY7k7szJCoc7jlvmxnkgE+tJZaRpumySyWOnWlq8xzI0EKoXPuQOfxoA848Na3KzaHqOoS+IJr7UJhG+29ga3Z3B3L5AkJVE5JwgYbee4r1OqcOkabb38l/Dp1pHeS/6y4SFRI/1YDJq5QAUUUUAYzja7L6EirNgf3rD/AGarzf6+T/eP86nsP9e3+7/UUxl6b/USf7p/lWT2rWm/1En+6f5Vk9qQi9H/AKtfoKdTY/8AVr9BTqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAoyf6xvqau2H+ob/eP8hVKT/WN9TV2w/wBQ3+8f5CgC1RRRQAUUUUAFFFFABRRRQAUUUUAFFFFADJv9RJ/un+VZPatab/USf7p/lWT2oAfF/r4/94fzrWrJi/18f+8P51rUAQXsJuLC5gHWSJk/MEV4JX0FXhuuWf2DXb22xgJM23/dJyP0Ir3cknrOHozw86hpCfqjtfhnPm21C3zyro4H1BH9BXe15N4Avha+JVhY4W5jaPn1+8P5Y/GvWa481p8mJb72Z15XU58Ml20CiiivOPRCiiigAooooAKKKKACiiigAooooAKKKiuX2W7n2xQBlMdzE+pzVvT1+d29BiqdaNgmIS3940xsnm/1En+6f5Vk9q1pv9RJ/un+VZPakIvR/wCrX6CnU2P/AFa/QU6gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKMn+sb6mrth/qG/3j/IVSk/1jfU1dsP8AUN/vH+QoAtUyZtkEjeYseFJ3sMheOp9qfSEBgQQCDwQe9AHnNlrXiJ7W7v7W+vr3TBp08/228sYrdN4TMTQqAGYHk/MCMY5qzeXeuj+wtQm1+6s9KvrWGOeSC3gPk3DAFWYvGcI5O3sA2Ox43V8IaXY2d6um2gWWe1kt0jmuZjCFYfdC7jsXOPuge1NuPBmlanYW8GpwTNttkgeGC/uEhwoxgKHAI9yMnvQBzt5r+qPq2q2x1nULGDSykCvBozXXnMI1dpJWWMqAd33VK8c8ZFa+v6tqdt4fk1/TdQV7Ke3tymbMkWyM37y4xnc2EbOw9NuT3rSu/B+hX0qyXNiXYRrE37+QCVV4USANiTH+3mm634T07WrW9Qqbe4uoYoWnj5wsb70G0/KQG7Y5BxQBzFv4xfT7q+lg11fEum2umy3dxIscatbuuNi741Cnf8w2kZG3PSr11F4zs9KXWDrAubvdG76XBYq0OGYAopH7w4BPzbu2cVoWvhOWXUbm912/i1F57JrAxRWot4/JYgsCNzEk465GOcDmiz8O69ZGC2j8VStp0BUKj2cbTlB0Qyk4PHGdmT65oAxdW8QGLxnqun3vjD+w7a3ht2t49tv+8Lht5zIhJxhe/eug8Gapeatoss91MLlFuZI7a8EXl/aogflk29BnkccHGR1qK48PasniLUNW0vWbW2F9HDHJFPYmbHlhgCCJF/vHtWl4e0VdA0dLEXDXDeZJK8hQIC7uXbCjhRljgDpQBqUUUUAMm/1En+6f5Vk9q1pv9RJ/un+VZPagB8X+vj/3h/OtasmL/Xx/7w/nWtQAV5n8R9NMOpwagg+SdNjn/aX/AOtj8q9MrJ8SaSNa0Se1A/egb4j6OOn58j8a68DX9hXUntszkx1D21BxW+6PGLa4ktbmK4ibbJE4dT6EHIr3PTr6LUtOt72E/JMgbHoe4/A5FeEMpVirAhgcEHtXcfD/AF8W1w2k3L4jmO6Ak9H7r+P8/rXuZrhva0vaR3j+R4mVYn2VX2ctpfmek0UUV8wfTBRRRQAUUUUAFFFFABRRRQAUUUUAFUL+XLLGO3Jq5LIIoy57dB6mshmLsWY5JOaBoQAk4HU1sRJ5cSp6CqFlFvl3HovP41pUAxk3+ok/3T/KsntWtN/qJP8AdP8AKsntQIvR/wCrX6CnU2P/AFa/QU6gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKMn+sb6mrth/qG/3j/IVSk/1jfU1dsP8AUN/vH+QoAtUUVHcXEFpbvcXM0cMMYy8kjBVUepJ4FAElFUbfW9Ku4nlttTspo0j813juFYKmSNxIPAyrc+x9KWz1jS9RglnsdSs7qGL/AFkkE6uqfUg4FAF2iqdhq2naqjvp2oWt4sZ2ubeZZAp9DtJxUVvr+jXc3k22r2E0vmeVsjuUZt+CduAeuFJx7H0oA0aKiguYLpGe3mjlVXZGaNgwDKcEcdwQQRRBcwXKu0E0cqo7RsY2DBWU4ZTjoQQQR2oAlorPtdd0e+u2tLPVbG4uUzuhhuEdxjrlQc1DceKfD1pdPa3OvaXDcI214pbyNXU+hBOQaANaimo6yIrowZGAKspyCPUU6gBk3+ok/wB0/wAqye1a03+ok/3T/KsntQA+L/Xx/wC8P51rVkxf6+P/AHh/OtagAooooA8z8feHza3Z1a3T9xOf3wA+4/r9D/P61xSsVYMpIYHII6ivfLm2hu7aS3njEkUilWU9xXjviXw5PoF8Vwz2jnMMuOvsfcV9JleNVSPsZ7rbzR85meCdOXtobPfyZ33hDxSmtWy2l0wW/jXn/pqB/EPf1H+R1NeAQzSW8yTQu0ciHcrKcEGvT/DPjeDUQlpqLLBd9BIeElP9D7f/AKq5Mwy1wbqUlp27f8A68BmKmlTqvXv3/wCCdhRRRXjHsBRRRQAUUUUAFFFFABSMwVSzHAHemySLEu5zgVnXFy05x0QdBQAlzOZ344UdBUSqXYKoyTSdTgVpWtt5Q3t98/pTGSwxCGMIPxPqakoopCGTf6iT/dP8qye1a03+ok/3T/KsntQBej/1a/QU6mx/6tfoKdQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFGT/WN9TV2w/1Df7x/kKpSf6xvqau2H+ob/eP8hQBarnPF1lJfrosC27zw/wBqwvcIE3LsUMcsP7oYL146V0dFAHDX2kz2ev8Aim503RYbg3OlQNHFLD+5uJw0vynsxxsyM+nTOawrjQbnV9H1S6gTUZ9QZbVJY7jS/skUkKS72jSL5S/G7OW5yFDc16tRQB5xHba9rOn67b2llbQJPpjQRXH9lPp8ry87UAeRiUALckAAsME81FPc2Vzr/g5bXw1d6abe8MRkuLXyREPIk/dKT9/pnK5Hy9ea9Mqtdafa3strLcRb3tJvPhO4jY+1lzweeGYYPHNAHHa39tSzj1LS21LSNNtrmZdQtbe2ijlddxzcIGRtwz8x7spJ68HOutDvdG8B6tI2rXV/aXl79plMLK3+hvPukdSiKdzRsS2MjrjFel1FbWtvZW6W9rBFBAnCRRIFVe/AHAoA5Wex8LXraF/Zt5pFs0F2k1qIBGTKFU/ImCDyD2z06Vh2Nzqdvc+LXtLHRLiBdUmZjqF2Ymz5UfGPLI29OSw79Otd5a6FpFjdvd2mlWNvcv8Aemht0R2+rAZNQXHhfw9dXT3VxoWmTXDtueWS0jZ2PqSRkmgCn4Dijh8C6MIXZ45LcSgsmzG/L7QMnAG7AGTwBXRUiqFUKoAUDAA6CloAZN/qJP8AdP8AKsntWtN/qJP90/yrJ7UAPi/18f8AvD+da1ZMX+vj/wB4fzrWoAKKKKACq1/YW2pWclrdRiSJxgg9vcehqzRTTcXdCaTVmePeJPCl3oMrSqGmsiflmA+77N6H36H9K56voB0SRGR1VkYYZWGQR6GuH134exTFp9IcROeTA5+U/wC6e30/lX0GDzaMlyV9H3/zPAxeVSi+ehqu3+RzeieNdS0hVhkP2q1HAjkPKj/Zbt+orvNM8a6NqICtcfZZT/BP8o/766V5TfadeaZOYby3khftuHB+h6H8Kq111svw+I99aN9UctHMMRh/deqXRn0AjpIgeNldDyGU5BrC17xdp+hSeRJunusZ8qPHy+m49v515HbXt1ZtutrmaBvWNyv8qjllkmleWV2eRzuZmOST6k1yU8mip3nK6+46qmcycLQjZ/eehQ/E2FpQJ9LkSPuyTBj+RA/nXZadqVrqtmt1ZyiSJuPdT6EdjXhFdJ4KvprfWvsquwiuFIZQeMgEg/ofzoxuWUo0nOlo1qGCzOrKqoVXdPQ9beVI/vOB+NVZb8DiJc+5qjRXz59DYc7tI252JNIqliAoyT2FTRWkkvJG1fU1oRQJCMKOe5PWgLkVtaiLDvy/8qs0UUhBRRRQAyb/AFEn+6f5Vk9q1pv9RJ/un+VZPagC9H/q1+gp1Nj/ANWv0FOoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCjJ/rG+pq7Yf6hv8AeP8AIVSk/wBY31NXbD/UN/vH+QoAtUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAyb/AFEn+6f5Vk9q1pv9RJ/un+VZPagB8X+vj/3h/OtasmL/AF8f+8P51rUAFFFFABRRRQAUUUUARXFtBdQmK4hjljPVHUMD+Brmb/4f6Pdkvb+baOf+ebZX8j/QiurorWlXq0nenKxlVoU6qtONzzO5+Gt+hP2W9t5V7eYCh/rXIXtncafeSWt1GY5ozhlP+ele91matoGm62q/bYNzqMLIp2so+v8AQ16mGzecZWrar8TzMRlEJRvR0f4HiFdb4E0a4vNSa/C7YIAVDt0LkYwPwJ/Suph+HeiRSh3a7lA/geQY/QA/rXT29vDaW6QW8SxRIMKijAFa4zNYTpunS6mWDyucKiqVehXTTx/G5PsBVmOCKL7qjPqetSUV4J7oUUUUAFFFFABRRRQAyb/USf7p/lWT2rWm/wBRJ/un+VZPagC9H/q1+gp1Nj/1a/QU6gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKMn+sb6mprW4ELFW+4e/oahk4lcf7RptAGr58X/AD0T/vql86L/AJ6p/wB9CsmigDW86L/nqn/fQo86L/nqn/fQrJooA1vOi/56p/30KPOi/wCeqf8AfQrJooA1vOi/56p/30KPOi/56p/30KyaKANbzov+eqf99Cjzov8Anqn/AH0KyaKANbzov+eqf99Cjzov+eqf99CsmigC7dXSlDHGck9SOlUqKKAAEggjqORWlFdRyL8zBW7g8Vm0UAa3nRf89U/76FHnRf8APVP++hWTRQBredF/z1T/AL6FHnRf89U/76FZNFAGt50X/PVP++hR50X/AD1T/voVk0UAa3nRf89U/wC+hR50X/PVP++hWTRQBredF/z1T/voUedF/wA9U/76FZNFAGt50X/PVP8AvoUedF/z1T/voVk0UAa3nRf89U/76FHnRf8APVP++hWTRQBredF/z1T/AL6FHnRf89U/76FZNFAGt50X/PVP++hR50X/AD1T/voVk0UAa3nRf89U/wC+hR50X/PVP++hWTRQBdurpShjjOSepHSqVFFAF6P/AFa/QU6mx/6tfoKdQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACtZxsxYs2Sc9aT7DF/ef8xVmigCt9hi/vP8AmKPsMX95/wAxVmigCt9hi/vP+Yo+wxf3n/MVZooArfYYv7z/AJij7DF/ef8AMVZooArfYYv7z/mKPsMX95/zFWaKAK32GL+8/wCYo+wxf3n/ADFWaKAK32GL+8/5ij7DF/ef8xVmigCt9hi/vP8AmKPsMX95/wAxVmoLy9tdOtXur25htrdMb5p5AiLk4GSeByQPxoAb9hi/vP8AmKPsMX95/wAxVePxBosumy6jHq9g9jE2yS5W5QxI3HBbOAfmXjPcetGn+INF1adoNO1ewvJlXeY7e5SRguQM4Uk4yRz70AWPsMX95/zFH2GL+8/5irNZ0viDRbfUhp02r2Ed8WVBbPcoJSzY2jaTnJyMDHORQBY+wxf3n/MUfYYv7z/mKiuta0qxuha3ep2dvcGIzCGadUfywCS+Cc7QFYk9PlPpUkOp6fczxwQX1tLNLALmOOOVWZ4icCQAHJUn+LpQAv2GL+8/5ij7DF/ef8xUV1rWlWN0LW71Ozt7gxGYQzTqj+WASXwTnaArEnp8p9KtwzRXMEc8EqSwyqHjkjYMrqRkEEcEEd6AIfsMX95/zFH2GL+8/wCYqzRQBW+wxf3n/MUfYYv7z/mKs0UAVvsMX95/zFH2GL+8/wCYqzRQBW+wxf3n/MUfYYv7z/mKs0UAVvsMX95/zFH2GL+8/wCYqzRQBW+wxf3n/MUfYYv7z/mKs0UAVvsMX95/zFH2GL+8/wCYqzRQBW+wxf3n/MUfYYv7z/mKs0UAVQNqgDsMUtFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAWaKKKACsBPFCX2pSWOj2M9+1vceRdz5EUNuwOGBZuWYeig/UVv1mXXh/TLvUYtRe2Ed9GQRcwsYpCAfusykFl4+6cj2oA06KKKACiiigAooooAKKKKACiiigArlfGGraVpl1pMdxof8AbGszyuNLt1gVnEigMWDtxGoITLdR1wQpx1VZWtaBa639lkkkmtryzl821vLZgssLfxAEggqw4ZSCCOo4GADyjx1pGvTeG/E/ijV7W20lbqztrb+zYJvNZmW5TEkzjCswAIUjPysBxg57T4q/6F4Ll122/dappcsUtldLw8TNIiMB6qykgqcg9wcCrd/8PtP1ay1ODUdT1a6m1FY45rl51DBI2VkVUVRGACpOdmfnfn5jV5fCsc2pWd7qmqX+qmzYyW8N35Iijk7SbY40DMBnBbO3JIweaALXie8n07wnrN7ayeXcW9jPNE+AdrqhIODweQOtZ3grTbIeAtNRrdJBqFmlxe+b+8NzJKgMjSFslixJznPHHQAV01c5beD4bDzodO1bU7HTpZWkOn27xiJN33lQlC8ak5OEZcFiV20AcJ4+07S/Dj+IJE1e2s4tW0pV/su500yRStEBHH5DgqFZcphfm253kYAw/QbyDQfHWg/2tJ9hCeDLeGVrgFFicSjhyeE5GPmxyQOpAPrEMS28EcKFysahAZHLsQBjlmJJPuSSafQB5Ddy2Wn6L8RtP14INXvJ7m4t4p08yWe38v8A0dk4JdUKseM+XtJO3Br0LwX/AMiL4e/7Blt/6KWtLU9Pi1bSbzTp2dYbuB4JGjIDBXUqSMgjOD6UaZp8Wk6TZ6dAztDaQJBG0hBYqihQTgAZwPSgC1RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVqKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAs0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFaiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/Z", "export_temp_image": false, "force_export_images": false, "flat_export": false, @@ -25,7 +25,7 @@ "uiExportFolderPath": "D:\\yuwell_workspace\\FluxDC\\SquareLineProj\\Export", "projectExportFolderPath": "D:\\yuwell_workspace\\FluxDC\\SquareLineProj\\Export", "custom_variable_prefix": "uic", - "backup_cnt": 658, + "backup_cnt": 672, "autosave_cnt": 0, "group_color_cnt": 0, "lvgl_version": "8.3.6", @@ -42,5 +42,5 @@ "drive_fatfs_path": "", "naming": "_Screen_Name", "naming_force_lowercase": false, - "nidcnt": 1000323 + "nidcnt": 1000333 } \ No newline at end of file diff --git a/SquareLineProj/ESP32S3_UI.spj b/SquareLineProj/ESP32S3_UI.spj index 255a1cc..3c9a545 100644 --- a/SquareLineProj/ESP32S3_UI.spj +++ b/SquareLineProj/ESP32S3_UI.spj @@ -21597,436 +21597,6 @@ "guid": "GUID54981273-416665S4525470", "deepid": -272247948, "children": [ - { - "guid": "GUID27659208-416643S4516470", - "deepid": -405853522, - "children": [ - { - "guid": "GUID37214586-416641S4516470", - "deepid": -1036970608, - "dont_export": false, - "locked": false, - "properties": [ - { - "nid": -2115434375, - "strtype": "OBJECT/Name", - "strval": "labelReadSDCard", - "InheritedType": 10 - }, - { - "nid": 78222931, - "strtype": "OBJECT/Layout", - "InheritedType": 1 - }, - { - "Flow": 0, - "Wrap": false, - "Reversed": false, - "MainAlignment": 0, - "CrossAlignment": 0, - "TrackAlignment": 0, - "LayoutType": 0, - "nid": -24032721, - "strtype": "OBJECT/Layout_type", - "strval": "No_layout", - "InheritedType": 13 - }, - { - "nid": -991820165, - "strtype": "OBJECT/Transform", - "InheritedType": 1 - }, - { - "nid": -1412771030, - "flags": 17, - "strtype": "OBJECT/Position", - "intarray": [ - 6, - 0 - ], - "InheritedType": 7 - }, - { - "nid": 1117825647, - "flags": 51, - "strtype": "OBJECT/Size", - "intarray": [ - 1, - 1 - ], - "InheritedType": 7 - }, - { - "nid": 264469869, - "strtype": "OBJECT/Align", - "strval": "LEFT_MID", - "InheritedType": 3 - }, - { - "nid": -1121968139, - "flags": 1048576, - "strtype": "OBJECT/Flags", - "InheritedType": 1 - }, - { - "nid": 27949949, - "strtype": "OBJECT/Clickable", - "strval": "False", - "InheritedType": 2 - }, - { - "nid": 225, - "flags": 1048576, - "strtype": "OBJECT/Scrolling", - "InheritedType": 1 - }, - { - "nid": -352989475, - "strtype": "OBJECT/Scrollbar_mode", - "strval": "AUTO", - "InheritedType": 3 - }, - { - "nid": 1998480301, - "strtype": "OBJECT/Scroll_direction", - "strval": "ALL", - "InheritedType": 3 - }, - { - "nid": 314, - "strtype": "OBJECT/Scroll_snap_x", - "strval": "NONE", - "InheritedType": 3 - }, - { - "nid": 315, - "strtype": "OBJECT/Scroll_snap_y", - "strval": "NONE", - "InheritedType": 3 - }, - { - "nid": 1183940027, - "flags": 1048576, - "strtype": "OBJECT/States", - "InheritedType": 1 - }, - { - "nid": -2082824226, - "strtype": "LABEL/Label", - "InheritedType": 1 - }, - { - "nid": -823186472, - "strtype": "LABEL/Long_mode", - "strval": "WRAP", - "InheritedType": 3 - }, - { - "nid": -1016692578, - "strtype": "LABEL/Text", - "strval": "< < > >", - "InheritedType": 10 - }, - { - "part": "lv.PART.MAIN", - "childs": [ - { - "nid": -1517026208, - "strtype": "_style/StyleState", - "strval": "DEFAULT", - "childs": [ - { - "nid": -1215236551, - "strtype": "_style/Text_Font", - "strval": "MiSansM", - "InheritedType": 3 - } - ], - "InheritedType": 1 - } - ], - "nid": 1519611281, - "strtype": "LABEL/Style_main", - "strval": "lv.PART.MAIN, Text, Rectangle, Pad, Transform", - "InheritedType": 11 - }, - { - "nid": -405618431, - "strtype": "LABEL/Recolor", - "strval": "False", - "InheritedType": 2 - } - ], - "saved_objtypeKey": "LABEL" - } - ], - "dont_export": false, - "locked": false, - "properties": [ - { - "nid": -681132463, - "strtype": "OBJECT/Name", - "strval": "panelReadSDCard", - "InheritedType": 10 - }, - { - "nid": -213406922, - "strtype": "OBJECT/Layout", - "InheritedType": 1 - }, - { - "Flow": 0, - "Wrap": false, - "Reversed": false, - "MainAlignment": 0, - "CrossAlignment": 0, - "TrackAlignment": 0, - "LayoutType": 0, - "nid": 226946871, - "strtype": "OBJECT/Layout_type", - "strval": "No_layout", - "InheritedType": 13 - }, - { - "nid": 1924889041, - "strtype": "OBJECT/Transform", - "InheritedType": 1 - }, - { - "nid": 1022385359, - "flags": 17, - "strtype": "OBJECT/Position", - "intarray": [ - 0, - -192 - ], - "InheritedType": 7 - }, - { - "nid": -1902044296, - "flags": 17, - "strtype": "OBJECT/Size", - "intarray": [ - 320, - 40 - ], - "InheritedType": 7 - }, - { - "nid": -1867879252, - "strtype": "OBJECT/Align", - "strval": "CENTER", - "InheritedType": 3 - }, - { - "nid": 182248937, - "strtype": "OBJECT/Flags", - "InheritedType": 1 - }, - { - "nid": 1986213011, - "strtype": "OBJECT/Press_lock", - "strval": "False", - "InheritedType": 2 - }, - { - "nid": 1140440416, - "strtype": "OBJECT/Click_focusable", - "strval": "False", - "InheritedType": 2 - }, - { - "nid": 225, - "flags": 1048576, - "strtype": "OBJECT/Scrolling", - "InheritedType": 1 - }, - { - "nid": 258676648, - "strtype": "OBJECT/Scrollable", - "strval": "False", - "InheritedType": 2 - }, - { - "nid": 879869614, - "strtype": "OBJECT/Scroll_elastic", - "strval": "False", - "InheritedType": 2 - }, - { - "nid": -1864463964, - "strtype": "OBJECT/Scroll_momentum", - "strval": "False", - "InheritedType": 2 - }, - { - "nid": -1668155878, - "strtype": "OBJECT/Scroll_chain", - "strval": "False", - "InheritedType": 2 - }, - { - "nid": -990896041, - "strtype": "OBJECT/Scrollbar_mode", - "strval": "AUTO", - "InheritedType": 3 - }, - { - "nid": -107218965, - "strtype": "OBJECT/Scroll_direction", - "strval": "ALL", - "InheritedType": 3 - }, - { - "nid": 314, - "strtype": "OBJECT/Scroll_snap_x", - "strval": "NONE", - "InheritedType": 3 - }, - { - "nid": 315, - "strtype": "OBJECT/Scroll_snap_y", - "strval": "NONE", - "InheritedType": 3 - }, - { - "nid": -1232892943, - "flags": 1048576, - "strtype": "OBJECT/States", - "InheritedType": 1 - }, - { - "part": "lv.PART.MAIN", - "childs": [ - { - "nid": 39589672, - "strtype": "_style/StyleState", - "strval": "DEFAULT", - "childs": [ - { - "nid": -572322502, - "strtype": "_style/Bg_Radius", - "InheritedType": 6 - }, - { - "nid": 354027873, - "strtype": "_style/Bg_Color", - "intarray": [ - 255, - 255, - 255, - 255 - ], - "InheritedType": 7 - }, - { - "nid": -641560474, - "strtype": "_style/Border_Color", - "intarray": [ - 180, - 180, - 180, - 255 - ], - "InheritedType": 7 - }, - { - "nid": -471990370, - "strtype": "_style/Border width", - "integer": 1, - "InheritedType": 6 - }, - { - "nid": -875694179, - "strtype": "_style/Border side", - "strval": "BOTTOM", - "InheritedType": 3 - } - ], - "InheritedType": 1 - } - ], - "nid": -1103671070, - "strtype": "PANEL/Style_main", - "strval": "lv.PART.MAIN, Rectangle, Pad, Text, Transform", - "InheritedType": 11 - }, - { - "part": "lv.PART.SCROLLBAR", - "childs": [], - "nid": 203295555, - "strtype": "PANEL/Style_scrollbar", - "strval": "lv.PART.SCROLLBAR, Rectangle, Pad", - "InheritedType": 11 - }, - { - "disabled": false, - "nid": 1000293, - "strtype": "_event/EventHandler", - "strval": "CLICKED", - "childs": [ - { - "nid": 1000294, - "strtype": "_event/name", - "strval": "Event19", - "InheritedType": 10 - }, - { - "nid": 1000295, - "strtype": "_event/condition_C", - "strval": "", - "InheritedType": 10 - }, - { - "nid": 1000296, - "strtype": "_event/condition_P", - "strval": "", - "InheritedType": 10 - }, - { - "nid": 1000297, - "strtype": "_event/action", - "strval": "CALL FUNCTION", - "childs": [ - { - "nid": 1000298, - "strtype": "CALL FUNCTION/Name", - "strval": "CALL FUNCTION", - "InheritedType": 10 - }, - { - "nid": 1000299, - "strtype": "CALL FUNCTION/Call", - "strval": "<{Function_name}>( event_struct )", - "InheritedType": 10 - }, - { - "nid": 1000300, - "strtype": "CALL FUNCTION/CallC", - "strval": "<{Function_name}>( e );", - "InheritedType": 10 - }, - { - "nid": 1000301, - "strtype": "CALL FUNCTION/Function_name", - "strval": "on_panelReadSDCard_clicked", - "InheritedType": 10 - }, - { - "nid": 1000302, - "strtype": "CALL FUNCTION/Dont_export_function", - "strval": "False", - "InheritedType": 2 - } - ], - "InheritedType": 10 - } - ], - "InheritedType": 4 - } - ], - "saved_objtypeKey": "PANEL" - }, { "guid": "GUID17247824-416674S31629470", "deepid": 1778734548, @@ -22094,10 +21664,15 @@ }, { "nid": 90, - "flags": 1048576, "strtype": "OBJECT/Flags", "InheritedType": 1 }, + { + "nid": 110, + "strtype": "OBJECT/Clickable", + "strval": "False", + "InheritedType": 2 + }, { "nid": 225, "flags": 1048576, @@ -22391,7 +21966,7 @@ "strtype": "OBJECT/Position", "intarray": [ 62, - -72 + -130 ], "InheritedType": 7 }, @@ -22476,8 +22051,7 @@ "InheritedType": 11 } ], - "saved_objtypeKey": "PANEL", - "tree_closed": true + "saved_objtypeKey": "PANEL" }, { "guid": "GUID52991056-416682S30629470", @@ -22952,7 +22526,7 @@ "strtype": "OBJECT/Position", "intarray": [ -96, - -72 + -130 ], "InheritedType": 7 }, @@ -22962,7 +22536,7 @@ "strtype": "OBJECT/Size", "intarray": [ 112, - 173 + 180 ], "InheritedType": 7 }, @@ -23079,8 +22653,8 @@ "flags": 17, "strtype": "OBJECT/Position", "intarray": [ - 0, - 89 + -1, + 36 ], "InheritedType": 7 }, @@ -23223,6 +22797,346 @@ } ], "saved_objtypeKey": "TEXTAREA" + }, + { + "guid": "GUID87854016-304018S714472", + "deepid": -1364038747, + "children": [ + { + "guid": "GUID37214586-416641S4516470", + "deepid": -1036970608, + "dont_export": false, + "locked": false, + "properties": [ + { + "nid": -2115434375, + "strtype": "OBJECT/Name", + "strval": "labelReadSDCard", + "InheritedType": 10 + }, + { + "nid": 78222931, + "strtype": "OBJECT/Layout", + "InheritedType": 1 + }, + { + "Flow": 0, + "Wrap": false, + "Reversed": false, + "MainAlignment": 0, + "CrossAlignment": 0, + "TrackAlignment": 0, + "LayoutType": 0, + "nid": -24032721, + "strtype": "OBJECT/Layout_type", + "strval": "No_layout", + "InheritedType": 13 + }, + { + "nid": -991820165, + "strtype": "OBJECT/Transform", + "InheritedType": 1 + }, + { + "nid": -1412771030, + "flags": 17, + "strtype": "OBJECT/Position", + "intarray": [ + -5, + -1 + ], + "InheritedType": 7 + }, + { + "nid": 1117825647, + "flags": 51, + "strtype": "OBJECT/Size", + "intarray": [ + 1, + 1 + ], + "InheritedType": 7 + }, + { + "nid": 264469869, + "strtype": "OBJECT/Align", + "strval": "LEFT_MID", + "InheritedType": 3 + }, + { + "nid": -1121968139, + "flags": 1048576, + "strtype": "OBJECT/Flags", + "InheritedType": 1 + }, + { + "nid": 27949949, + "strtype": "OBJECT/Clickable", + "strval": "False", + "InheritedType": 2 + }, + { + "nid": 225, + "flags": 1048576, + "strtype": "OBJECT/Scrolling", + "InheritedType": 1 + }, + { + "nid": -352989475, + "strtype": "OBJECT/Scrollbar_mode", + "strval": "AUTO", + "InheritedType": 3 + }, + { + "nid": 1998480301, + "strtype": "OBJECT/Scroll_direction", + "strval": "ALL", + "InheritedType": 3 + }, + { + "nid": 314, + "strtype": "OBJECT/Scroll_snap_x", + "strval": "NONE", + "InheritedType": 3 + }, + { + "nid": 315, + "strtype": "OBJECT/Scroll_snap_y", + "strval": "NONE", + "InheritedType": 3 + }, + { + "nid": 1183940027, + "flags": 1048576, + "strtype": "OBJECT/States", + "InheritedType": 1 + }, + { + "nid": -2082824226, + "strtype": "LABEL/Label", + "InheritedType": 1 + }, + { + "nid": -823186472, + "strtype": "LABEL/Long_mode", + "strval": "WRAP", + "InheritedType": 3 + }, + { + "nid": -1016692578, + "strtype": "LABEL/Text", + "strval": "< < > >", + "InheritedType": 10 + }, + { + "part": "lv.PART.MAIN", + "childs": [ + { + "nid": -1517026208, + "strtype": "_style/StyleState", + "strval": "DEFAULT", + "childs": [ + { + "nid": -1215236551, + "strtype": "_style/Text_Font", + "strval": "MiSansM", + "InheritedType": 3 + } + ], + "InheritedType": 1 + } + ], + "nid": 1519611281, + "strtype": "LABEL/Style_main", + "strval": "lv.PART.MAIN, Text, Rectangle, Pad, Transform", + "InheritedType": 11 + }, + { + "nid": -405618431, + "strtype": "LABEL/Recolor", + "strval": "False", + "InheritedType": 2 + } + ], + "saved_objtypeKey": "LABEL" + } + ], + "dont_export": false, + "locked": false, + "properties": [ + { + "nid": 10, + "strtype": "OBJECT/Name", + "strval": "buttonReadSDCard", + "InheritedType": 10 + }, + { + "nid": 20, + "strtype": "OBJECT/Layout", + "InheritedType": 1 + }, + { + "Flow": 0, + "Wrap": false, + "Reversed": false, + "MainAlignment": 0, + "CrossAlignment": 0, + "TrackAlignment": 0, + "LayoutType": 0, + "nid": 30, + "strtype": "OBJECT/Layout_type", + "strval": "No_layout", + "InheritedType": 13 + }, + { + "nid": 40, + "strtype": "OBJECT/Transform", + "InheritedType": 1 + }, + { + "nid": 50, + "flags": 17, + "strtype": "OBJECT/Position", + "intarray": [ + -2, + 137 + ], + "InheritedType": 7 + }, + { + "nid": 60, + "flags": 17, + "strtype": "OBJECT/Size", + "intarray": [ + 300, + 50 + ], + "InheritedType": 7 + }, + { + "nid": 70, + "strtype": "OBJECT/Align", + "strval": "CENTER", + "InheritedType": 3 + }, + { + "nid": 90, + "flags": 1048576, + "strtype": "OBJECT/Flags", + "InheritedType": 1 + }, + { + "nid": 225, + "flags": 1048576, + "strtype": "OBJECT/Scrolling", + "InheritedType": 1 + }, + { + "nid": 300, + "strtype": "OBJECT/Scrollbar_mode", + "strval": "AUTO", + "InheritedType": 3 + }, + { + "nid": 310, + "strtype": "OBJECT/Scroll_direction", + "strval": "ALL", + "InheritedType": 3 + }, + { + "nid": 314, + "strtype": "OBJECT/Scroll_snap_x", + "strval": "NONE", + "InheritedType": 3 + }, + { + "nid": 315, + "strtype": "OBJECT/Scroll_snap_y", + "strval": "NONE", + "InheritedType": 3 + }, + { + "nid": 320, + "flags": 1048576, + "strtype": "OBJECT/States", + "InheritedType": 1 + }, + { + "part": "lv.PART.MAIN", + "childs": [], + "nid": 1010, + "strtype": "BUTTON/Style_main", + "strval": "lv.PART.MAIN, Rectangle, Pad, Text, Transform", + "InheritedType": 11 + }, + { + "disabled": false, + "nid": 1000323, + "strtype": "_event/EventHandler", + "strval": "CLICKED", + "childs": [ + { + "nid": 1000324, + "strtype": "_event/name", + "strval": "Event22", + "InheritedType": 10 + }, + { + "nid": 1000325, + "strtype": "_event/condition_C", + "strval": "", + "InheritedType": 10 + }, + { + "nid": 1000326, + "strtype": "_event/condition_P", + "strval": "", + "InheritedType": 10 + }, + { + "nid": 1000327, + "strtype": "_event/action", + "strval": "CALL FUNCTION", + "childs": [ + { + "nid": 1000328, + "strtype": "CALL FUNCTION/Name", + "strval": "CALL FUNCTION", + "InheritedType": 10 + }, + { + "nid": 1000329, + "strtype": "CALL FUNCTION/Call", + "strval": "<{Function_name}>( event_struct )", + "InheritedType": 10 + }, + { + "nid": 1000330, + "strtype": "CALL FUNCTION/CallC", + "strval": "<{Function_name}>( e );", + "InheritedType": 10 + }, + { + "nid": 1000331, + "strtype": "CALL FUNCTION/Function_name", + "strval": "on_buttonReadSDCard_clicked", + "InheritedType": 10 + }, + { + "nid": 1000332, + "strtype": "CALL FUNCTION/Dont_export_function", + "strval": "False", + "InheritedType": 2 + } + ], + "InheritedType": 10 + } + ], + "InheritedType": 4 + } + ], + "saved_objtypeKey": "BUTTON", + "tree_closed": true } ], "dont_export": false, @@ -23622,7 +23536,7 @@ "uiExportFolderPath": "D:\\yuwell_workspace\\FluxDC\\SquareLineProj\\Export", "projectExportFolderPath": "D:\\yuwell_workspace\\FluxDC\\SquareLineProj\\Export", "custom_variable_prefix": "uic", - "backup_cnt": 657, + "backup_cnt": 671, "autosave_cnt": 0, "group_color_cnt": 0, "lvgl_version": "8.3.6", @@ -23639,7 +23553,7 @@ "drive_fatfs_path": "", "naming": "_Screen_Name", "naming_force_lowercase": false, - "nidcnt": 1000323, + "nidcnt": 1000333, "BitDepth": 16, "Name": "ESP32S3_UI" } diff --git a/SquareLineProj/ESP32S3_UI_events.py b/SquareLineProj/ESP32S3_UI_events.py index 7411e5e..6422b2c 100644 --- a/SquareLineProj/ESP32S3_UI_events.py +++ b/SquareLineProj/ESP32S3_UI_events.py @@ -94,3 +94,7 @@ def on_buttonFluxRead_clicked(event_struct): def on_buttonClearTextarea_clicked(event_struct): return + +def on_buttonReadSDCard_clicked(event_struct): + return + diff --git a/SquareLineProj/Export/screens/ui_pageSDCard.c b/SquareLineProj/Export/screens/ui_pageSDCard.c index 6b76ae1..b2fde73 100644 --- a/SquareLineProj/Export/screens/ui_pageSDCard.c +++ b/SquareLineProj/Export/screens/ui_pageSDCard.c @@ -53,37 +53,11 @@ void ui_pageSDCard_screen_init(void) lv_obj_set_style_pad_top(ui_pageSDCard_panelBody, 30, LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_pad_bottom(ui_pageSDCard_panelBody, 0, LV_PART_MAIN | LV_STATE_DEFAULT); - ui_pageSDCard_panelReadSDCard = lv_obj_create(ui_pageSDCard_panelBody); - lv_obj_set_width(ui_pageSDCard_panelReadSDCard, 320); - lv_obj_set_height(ui_pageSDCard_panelReadSDCard, 40); - lv_obj_set_x(ui_pageSDCard_panelReadSDCard, 0); - lv_obj_set_y(ui_pageSDCard_panelReadSDCard, -192); - lv_obj_set_align(ui_pageSDCard_panelReadSDCard, LV_ALIGN_CENTER); - lv_obj_clear_flag(ui_pageSDCard_panelReadSDCard, - LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | - LV_OBJ_FLAG_SCROLL_MOMENTUM | LV_OBJ_FLAG_SCROLL_CHAIN); /// Flags - lv_obj_set_style_radius(ui_pageSDCard_panelReadSDCard, 0, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_bg_color(ui_pageSDCard_panelReadSDCard, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_bg_opa(ui_pageSDCard_panelReadSDCard, 255, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_border_color(ui_pageSDCard_panelReadSDCard, lv_color_hex(0xB4B4B4), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_border_opa(ui_pageSDCard_panelReadSDCard, 255, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_border_width(ui_pageSDCard_panelReadSDCard, 1, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_border_side(ui_pageSDCard_panelReadSDCard, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN | LV_STATE_DEFAULT); - - ui_pageSDCard_labelReadSDCard = lv_label_create(ui_pageSDCard_panelReadSDCard); - lv_obj_set_width(ui_pageSDCard_labelReadSDCard, LV_SIZE_CONTENT); /// 1 - lv_obj_set_height(ui_pageSDCard_labelReadSDCard, LV_SIZE_CONTENT); /// 1 - lv_obj_set_x(ui_pageSDCard_labelReadSDCard, 6); - lv_obj_set_y(ui_pageSDCard_labelReadSDCard, 0); - lv_obj_set_align(ui_pageSDCard_labelReadSDCard, LV_ALIGN_LEFT_MID); - lv_label_set_text(ui_pageSDCard_labelReadSDCard, "< < > >"); - lv_obj_set_style_text_font(ui_pageSDCard_labelReadSDCard, &ui_font_MiSansM, LV_PART_MAIN | LV_STATE_DEFAULT); - ui_pageSDCard_panelSDCardFree = lv_obj_create(ui_pageSDCard_panelBody); lv_obj_set_width(ui_pageSDCard_panelSDCardFree, 180); lv_obj_set_height(ui_pageSDCard_panelSDCardFree, 180); lv_obj_set_x(ui_pageSDCard_panelSDCardFree, 62); - lv_obj_set_y(ui_pageSDCard_panelSDCardFree, -72); + lv_obj_set_y(ui_pageSDCard_panelSDCardFree, -130); lv_obj_set_align(ui_pageSDCard_panelSDCardFree, LV_ALIGN_CENTER); lv_obj_clear_flag(ui_pageSDCard_panelSDCardFree, LV_OBJ_FLAG_SCROLLABLE); /// Flags @@ -93,6 +67,7 @@ void ui_pageSDCard_screen_init(void) lv_obj_set_x(ui_pageSDCard_arcSDCardFree, 3); lv_obj_set_y(ui_pageSDCard_arcSDCardFree, 4); lv_obj_set_align(ui_pageSDCard_arcSDCardFree, LV_ALIGN_CENTER); + lv_obj_clear_flag(ui_pageSDCard_arcSDCardFree, LV_OBJ_FLAG_CLICKABLE); /// Flags lv_arc_set_value(ui_pageSDCard_arcSDCardFree, 50); ui_pageSDCard_labelSDCardFree = lv_label_create(ui_pageSDCard_panelSDCardFree); @@ -105,9 +80,9 @@ void ui_pageSDCard_screen_init(void) ui_pageSDCard_panelSDCardUse = lv_obj_create(ui_pageSDCard_panelBody); lv_obj_set_width(ui_pageSDCard_panelSDCardUse, 112); - lv_obj_set_height(ui_pageSDCard_panelSDCardUse, 173); + lv_obj_set_height(ui_pageSDCard_panelSDCardUse, 180); lv_obj_set_x(ui_pageSDCard_panelSDCardUse, -96); - lv_obj_set_y(ui_pageSDCard_panelSDCardUse, -72); + lv_obj_set_y(ui_pageSDCard_panelSDCardUse, -130); lv_obj_set_align(ui_pageSDCard_panelSDCardUse, LV_ALIGN_CENTER); lv_obj_clear_flag(ui_pageSDCard_panelSDCardUse, LV_OBJ_FLAG_SCROLLABLE); /// Flags @@ -138,13 +113,29 @@ void ui_pageSDCard_screen_init(void) ui_pageSDCard_textAreaSDCard = lv_textarea_create(ui_pageSDCard_panelBody); lv_obj_set_width(ui_pageSDCard_textAreaSDCard, 320); lv_obj_set_height(ui_pageSDCard_textAreaSDCard, 130); - lv_obj_set_x(ui_pageSDCard_textAreaSDCard, 0); - lv_obj_set_y(ui_pageSDCard_textAreaSDCard, 89); + lv_obj_set_x(ui_pageSDCard_textAreaSDCard, -1); + lv_obj_set_y(ui_pageSDCard_textAreaSDCard, 36); lv_obj_set_align(ui_pageSDCard_textAreaSDCard, LV_ALIGN_CENTER); lv_textarea_set_placeholder_text(ui_pageSDCard_textAreaSDCard, "Placeholder..."); + ui_pageSDCard_buttonReadSDCard = lv_btn_create(ui_pageSDCard_panelBody); + lv_obj_set_width(ui_pageSDCard_buttonReadSDCard, 300); + lv_obj_set_height(ui_pageSDCard_buttonReadSDCard, 50); + lv_obj_set_x(ui_pageSDCard_buttonReadSDCard, -2); + lv_obj_set_y(ui_pageSDCard_buttonReadSDCard, 137); + lv_obj_set_align(ui_pageSDCard_buttonReadSDCard, LV_ALIGN_CENTER); + + ui_pageSDCard_labelReadSDCard = lv_label_create(ui_pageSDCard_buttonReadSDCard); + lv_obj_set_width(ui_pageSDCard_labelReadSDCard, LV_SIZE_CONTENT); /// 1 + lv_obj_set_height(ui_pageSDCard_labelReadSDCard, LV_SIZE_CONTENT); /// 1 + lv_obj_set_x(ui_pageSDCard_labelReadSDCard, -5); + lv_obj_set_y(ui_pageSDCard_labelReadSDCard, -1); + lv_obj_set_align(ui_pageSDCard_labelReadSDCard, LV_ALIGN_LEFT_MID); + lv_label_set_text(ui_pageSDCard_labelReadSDCard, "< < > >"); + lv_obj_set_style_text_font(ui_pageSDCard_labelReadSDCard, &ui_font_MiSansM, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_add_event_cb(ui_pageSDCard_panelHeader, ui_event_pageSDCard_panelHeader, LV_EVENT_ALL, NULL); - lv_obj_add_event_cb(ui_pageSDCard_panelReadSDCard, ui_event_pageSDCard_panelReadSDCard, LV_EVENT_ALL, NULL); + lv_obj_add_event_cb(ui_pageSDCard_buttonReadSDCard, ui_event_pageSDCard_buttonReadSDCard, LV_EVENT_ALL, NULL); uic_pageSDCard_panelSDCardFree = ui_pageSDCard_panelSDCardFree; } diff --git a/SquareLineProj/Export/ui.c b/SquareLineProj/Export/ui.c index 807ea5a..a37fade 100644 --- a/SquareLineProj/Export/ui.c +++ b/SquareLineProj/Export/ui.c @@ -200,9 +200,6 @@ lv_obj_t * ui_pageSDCard_panelHeader; lv_obj_t * ui_pageSDCard_labelHeaderTitle; lv_obj_t * ui_pageSDCard_labelBack; lv_obj_t * ui_pageSDCard_panelBody; -void ui_event_pageSDCard_panelReadSDCard(lv_event_t * e); -lv_obj_t * ui_pageSDCard_panelReadSDCard; -lv_obj_t * ui_pageSDCard_labelReadSDCard; lv_obj_t * ui_pageSDCard_panelSDCardFree; lv_obj_t * ui_pageSDCard_arcSDCardFree; lv_obj_t * ui_pageSDCard_labelSDCardFree; @@ -211,6 +208,9 @@ lv_obj_t * ui_pageSDCard_labelSDCardUsed; lv_obj_t * ui_pageSDCard_labelSDCardSize; lv_obj_t * ui_pageSDCard_lableSDCardMountPoint; lv_obj_t * ui_pageSDCard_textAreaSDCard; +void ui_event_pageSDCard_buttonReadSDCard(lv_event_t * e); +lv_obj_t * ui_pageSDCard_buttonReadSDCard; +lv_obj_t * ui_pageSDCard_labelReadSDCard; // CUSTOM VARIABLES lv_obj_t * uic_pageSDCard_panelSDCardFree; @@ -519,12 +519,12 @@ void ui_event_pageSDCard_panelHeader(lv_event_t * e) } } -void ui_event_pageSDCard_panelReadSDCard(lv_event_t * e) +void ui_event_pageSDCard_buttonReadSDCard(lv_event_t * e) { lv_event_code_t event_code = lv_event_get_code(e); if(event_code == LV_EVENT_CLICKED) { - on_panelReadSDCard_clicked(e); + on_buttonReadSDCard_clicked(e); } } diff --git a/SquareLineProj/Export/ui.h b/SquareLineProj/Export/ui.h index 17a16c6..13829ae 100644 --- a/SquareLineProj/Export/ui.h +++ b/SquareLineProj/Export/ui.h @@ -208,9 +208,6 @@ extern lv_obj_t * ui_pageSDCard_panelHeader; extern lv_obj_t * ui_pageSDCard_labelHeaderTitle; extern lv_obj_t * ui_pageSDCard_labelBack; extern lv_obj_t * ui_pageSDCard_panelBody; -void ui_event_pageSDCard_panelReadSDCard(lv_event_t * e); -extern lv_obj_t * ui_pageSDCard_panelReadSDCard; -extern lv_obj_t * ui_pageSDCard_labelReadSDCard; extern lv_obj_t * ui_pageSDCard_panelSDCardFree; extern lv_obj_t * ui_pageSDCard_arcSDCardFree; extern lv_obj_t * ui_pageSDCard_labelSDCardFree; @@ -219,6 +216,9 @@ extern lv_obj_t * ui_pageSDCard_labelSDCardUsed; extern lv_obj_t * ui_pageSDCard_labelSDCardSize; extern lv_obj_t * ui_pageSDCard_lableSDCardMountPoint; extern lv_obj_t * ui_pageSDCard_textAreaSDCard; +void ui_event_pageSDCard_buttonReadSDCard(lv_event_t * e); +extern lv_obj_t * ui_pageSDCard_buttonReadSDCard; +extern lv_obj_t * ui_pageSDCard_labelReadSDCard; // CUSTOM VARIABLES extern lv_obj_t * uic_pageSDCard_panelSDCardFree; diff --git a/SquareLineProj/Export/ui_events.c b/SquareLineProj/Export/ui_events.c index db9ccf3..ccb0de5 100644 --- a/SquareLineProj/Export/ui_events.c +++ b/SquareLineProj/Export/ui_events.c @@ -119,3 +119,8 @@ void on_buttonClearTextarea_clicked(lv_event_t * e) { // Your code here } + +void on_buttonReadSDCard_clicked(lv_event_t * e) +{ + // Your code here +} diff --git a/SquareLineProj/Export/ui_events.h b/SquareLineProj/Export/ui_events.h index 0fa376e..eb9fda3 100644 --- a/SquareLineProj/Export/ui_events.h +++ b/SquareLineProj/Export/ui_events.h @@ -19,7 +19,7 @@ void on_dropDownWifiName_valueChanged(lv_event_t * e); void on_buttonClearPassword_clicked(lv_event_t * e); void on_buttonSearchWifi_clicked(lv_event_t * e); void on_buttonConnectWifi_clicked(lv_event_t * e); -void on_panelReadSDCard_clicked(lv_event_t * e); +void on_buttonReadSDCard_clicked(lv_event_t * e); #ifdef __cplusplus } /*extern "C"*/ diff --git a/SquareLineProj/backup/ESP32S3_UI_backup00.zip b/SquareLineProj/backup/ESP32S3_UI_backup00.zip index f80e8bd..6198edc 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup00.zip and b/SquareLineProj/backup/ESP32S3_UI_backup00.zip differ diff --git a/SquareLineProj/backup/ESP32S3_UI_backup01.zip b/SquareLineProj/backup/ESP32S3_UI_backup01.zip index bfcf00f..3cc15cd 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup01.zip and b/SquareLineProj/backup/ESP32S3_UI_backup01.zip differ diff --git a/SquareLineProj/backup/ESP32S3_UI_backup02.zip b/SquareLineProj/backup/ESP32S3_UI_backup02.zip index d8b49f2..dc8b4bd 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup02.zip and b/SquareLineProj/backup/ESP32S3_UI_backup02.zip differ diff --git a/SquareLineProj/backup/ESP32S3_UI_backup03.zip b/SquareLineProj/backup/ESP32S3_UI_backup03.zip index 1a9e1b0..587ffca 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup03.zip and b/SquareLineProj/backup/ESP32S3_UI_backup03.zip differ diff --git a/SquareLineProj/backup/ESP32S3_UI_backup04.zip b/SquareLineProj/backup/ESP32S3_UI_backup04.zip index bb632e5..a3509b3 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup04.zip and b/SquareLineProj/backup/ESP32S3_UI_backup04.zip differ diff --git a/SquareLineProj/backup/ESP32S3_UI_backup05.zip b/SquareLineProj/backup/ESP32S3_UI_backup05.zip index 8520738..e154bd4 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup05.zip and b/SquareLineProj/backup/ESP32S3_UI_backup05.zip differ diff --git a/SquareLineProj/backup/ESP32S3_UI_backup06.zip b/SquareLineProj/backup/ESP32S3_UI_backup06.zip index 62761bb..15432e5 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup06.zip and b/SquareLineProj/backup/ESP32S3_UI_backup06.zip differ diff --git a/SquareLineProj/backup/ESP32S3_UI_backup07.zip b/SquareLineProj/backup/ESP32S3_UI_backup07.zip index 5c94f83..87ce6ac 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup07.zip and b/SquareLineProj/backup/ESP32S3_UI_backup07.zip differ diff --git a/SquareLineProj/backup/ESP32S3_UI_backup08.zip b/SquareLineProj/backup/ESP32S3_UI_backup08.zip index 28fe460..379375f 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup08.zip and b/SquareLineProj/backup/ESP32S3_UI_backup08.zip differ diff --git a/SquareLineProj/backup/ESP32S3_UI_backup09.zip b/SquareLineProj/backup/ESP32S3_UI_backup09.zip index 0c58837..edc2acf 100644 Binary files a/SquareLineProj/backup/ESP32S3_UI_backup09.zip and b/SquareLineProj/backup/ESP32S3_UI_backup09.zip differ diff --git a/components/FluxSD/FluxSD.c b/components/FluxSD/FluxSD.c index 2208dde..879944a 100644 --- a/components/FluxSD/FluxSD.c +++ b/components/FluxSD/FluxSD.c @@ -131,9 +131,9 @@ static esp_err_t s_example_read_file(const char *path) return ESP_OK; } - uint64_t total_bytes = 0; - uint64_t free_bytes = 0; - float free_percent = 0; +uint64_t total_bytes = 0; +uint64_t free_bytes = 0; +float free_percent = 0; void flux_sd_init(void) { @@ -184,13 +184,15 @@ void flux_sd_init(void) const char *file_hello = MOUNT_POINT"/hello.txt"; char data[EXAMPLE_MAX_CHAR_SIZE]; + snprintf(data, EXAMPLE_MAX_CHAR_SIZE, "%s %s!\n", "Hello how are you", card->cid.name); + ret = s_example_write_file(file_hello, data); if (ret != ESP_OK) { return; } - +#if 0 esp_vfs_fat_info(MOUNT_POINT,&total_bytes,&free_bytes); free_percent = (float)free_bytes / (float)total_bytes * 100; @@ -198,6 +200,7 @@ void flux_sd_init(void) printf("Total space: %llu\n", total_bytes); printf("Free space: %llu\n", free_bytes); printf("Free percent: %.3f\n", free_percent); +#endif } diff --git a/components/FluxSD/FluxSD.h b/components/FluxSD/FluxSD.h index 9c8ce79..38bc2f7 100644 --- a/components/FluxSD/FluxSD.h +++ b/components/FluxSD/FluxSD.h @@ -15,6 +15,10 @@ extern "C" { #define EXAMPLE_MAX_CHAR_SIZE 64 #define MOUNT_POINT "/sdcard" +extern uint64_t total_bytes; +extern uint64_t free_bytes; +extern float free_percent; + typedef struct { const char** names; diff --git a/components/FluxUI/CMakeLists.txt b/components/FluxUI/CMakeLists.txt index 1105251..cb488c2 100644 --- a/components/FluxUI/CMakeLists.txt +++ b/components/FluxUI/CMakeLists.txt @@ -29,5 +29,5 @@ fonts/ui_font_symbolsalibaba.c ) idf_component_register(SRCS ${SOURCES} - PRIV_REQUIRES driver lvgl FluxMod FluxWifi FluxUart + PRIV_REQUIRES driver lvgl FluxMod FluxWifi FluxUart FluxSD INCLUDE_DIRS "." ) diff --git a/components/FluxUI/screens/ui_pageSDCard.c b/components/FluxUI/screens/ui_pageSDCard.c index 6b76ae1..b2fde73 100644 --- a/components/FluxUI/screens/ui_pageSDCard.c +++ b/components/FluxUI/screens/ui_pageSDCard.c @@ -53,37 +53,11 @@ void ui_pageSDCard_screen_init(void) lv_obj_set_style_pad_top(ui_pageSDCard_panelBody, 30, LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_pad_bottom(ui_pageSDCard_panelBody, 0, LV_PART_MAIN | LV_STATE_DEFAULT); - ui_pageSDCard_panelReadSDCard = lv_obj_create(ui_pageSDCard_panelBody); - lv_obj_set_width(ui_pageSDCard_panelReadSDCard, 320); - lv_obj_set_height(ui_pageSDCard_panelReadSDCard, 40); - lv_obj_set_x(ui_pageSDCard_panelReadSDCard, 0); - lv_obj_set_y(ui_pageSDCard_panelReadSDCard, -192); - lv_obj_set_align(ui_pageSDCard_panelReadSDCard, LV_ALIGN_CENTER); - lv_obj_clear_flag(ui_pageSDCard_panelReadSDCard, - LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | - LV_OBJ_FLAG_SCROLL_MOMENTUM | LV_OBJ_FLAG_SCROLL_CHAIN); /// Flags - lv_obj_set_style_radius(ui_pageSDCard_panelReadSDCard, 0, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_bg_color(ui_pageSDCard_panelReadSDCard, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_bg_opa(ui_pageSDCard_panelReadSDCard, 255, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_border_color(ui_pageSDCard_panelReadSDCard, lv_color_hex(0xB4B4B4), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_border_opa(ui_pageSDCard_panelReadSDCard, 255, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_border_width(ui_pageSDCard_panelReadSDCard, 1, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_border_side(ui_pageSDCard_panelReadSDCard, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN | LV_STATE_DEFAULT); - - ui_pageSDCard_labelReadSDCard = lv_label_create(ui_pageSDCard_panelReadSDCard); - lv_obj_set_width(ui_pageSDCard_labelReadSDCard, LV_SIZE_CONTENT); /// 1 - lv_obj_set_height(ui_pageSDCard_labelReadSDCard, LV_SIZE_CONTENT); /// 1 - lv_obj_set_x(ui_pageSDCard_labelReadSDCard, 6); - lv_obj_set_y(ui_pageSDCard_labelReadSDCard, 0); - lv_obj_set_align(ui_pageSDCard_labelReadSDCard, LV_ALIGN_LEFT_MID); - lv_label_set_text(ui_pageSDCard_labelReadSDCard, "< < > >"); - lv_obj_set_style_text_font(ui_pageSDCard_labelReadSDCard, &ui_font_MiSansM, LV_PART_MAIN | LV_STATE_DEFAULT); - ui_pageSDCard_panelSDCardFree = lv_obj_create(ui_pageSDCard_panelBody); lv_obj_set_width(ui_pageSDCard_panelSDCardFree, 180); lv_obj_set_height(ui_pageSDCard_panelSDCardFree, 180); lv_obj_set_x(ui_pageSDCard_panelSDCardFree, 62); - lv_obj_set_y(ui_pageSDCard_panelSDCardFree, -72); + lv_obj_set_y(ui_pageSDCard_panelSDCardFree, -130); lv_obj_set_align(ui_pageSDCard_panelSDCardFree, LV_ALIGN_CENTER); lv_obj_clear_flag(ui_pageSDCard_panelSDCardFree, LV_OBJ_FLAG_SCROLLABLE); /// Flags @@ -93,6 +67,7 @@ void ui_pageSDCard_screen_init(void) lv_obj_set_x(ui_pageSDCard_arcSDCardFree, 3); lv_obj_set_y(ui_pageSDCard_arcSDCardFree, 4); lv_obj_set_align(ui_pageSDCard_arcSDCardFree, LV_ALIGN_CENTER); + lv_obj_clear_flag(ui_pageSDCard_arcSDCardFree, LV_OBJ_FLAG_CLICKABLE); /// Flags lv_arc_set_value(ui_pageSDCard_arcSDCardFree, 50); ui_pageSDCard_labelSDCardFree = lv_label_create(ui_pageSDCard_panelSDCardFree); @@ -105,9 +80,9 @@ void ui_pageSDCard_screen_init(void) ui_pageSDCard_panelSDCardUse = lv_obj_create(ui_pageSDCard_panelBody); lv_obj_set_width(ui_pageSDCard_panelSDCardUse, 112); - lv_obj_set_height(ui_pageSDCard_panelSDCardUse, 173); + lv_obj_set_height(ui_pageSDCard_panelSDCardUse, 180); lv_obj_set_x(ui_pageSDCard_panelSDCardUse, -96); - lv_obj_set_y(ui_pageSDCard_panelSDCardUse, -72); + lv_obj_set_y(ui_pageSDCard_panelSDCardUse, -130); lv_obj_set_align(ui_pageSDCard_panelSDCardUse, LV_ALIGN_CENTER); lv_obj_clear_flag(ui_pageSDCard_panelSDCardUse, LV_OBJ_FLAG_SCROLLABLE); /// Flags @@ -138,13 +113,29 @@ void ui_pageSDCard_screen_init(void) ui_pageSDCard_textAreaSDCard = lv_textarea_create(ui_pageSDCard_panelBody); lv_obj_set_width(ui_pageSDCard_textAreaSDCard, 320); lv_obj_set_height(ui_pageSDCard_textAreaSDCard, 130); - lv_obj_set_x(ui_pageSDCard_textAreaSDCard, 0); - lv_obj_set_y(ui_pageSDCard_textAreaSDCard, 89); + lv_obj_set_x(ui_pageSDCard_textAreaSDCard, -1); + lv_obj_set_y(ui_pageSDCard_textAreaSDCard, 36); lv_obj_set_align(ui_pageSDCard_textAreaSDCard, LV_ALIGN_CENTER); lv_textarea_set_placeholder_text(ui_pageSDCard_textAreaSDCard, "Placeholder..."); + ui_pageSDCard_buttonReadSDCard = lv_btn_create(ui_pageSDCard_panelBody); + lv_obj_set_width(ui_pageSDCard_buttonReadSDCard, 300); + lv_obj_set_height(ui_pageSDCard_buttonReadSDCard, 50); + lv_obj_set_x(ui_pageSDCard_buttonReadSDCard, -2); + lv_obj_set_y(ui_pageSDCard_buttonReadSDCard, 137); + lv_obj_set_align(ui_pageSDCard_buttonReadSDCard, LV_ALIGN_CENTER); + + ui_pageSDCard_labelReadSDCard = lv_label_create(ui_pageSDCard_buttonReadSDCard); + lv_obj_set_width(ui_pageSDCard_labelReadSDCard, LV_SIZE_CONTENT); /// 1 + lv_obj_set_height(ui_pageSDCard_labelReadSDCard, LV_SIZE_CONTENT); /// 1 + lv_obj_set_x(ui_pageSDCard_labelReadSDCard, -5); + lv_obj_set_y(ui_pageSDCard_labelReadSDCard, -1); + lv_obj_set_align(ui_pageSDCard_labelReadSDCard, LV_ALIGN_LEFT_MID); + lv_label_set_text(ui_pageSDCard_labelReadSDCard, "< < > >"); + lv_obj_set_style_text_font(ui_pageSDCard_labelReadSDCard, &ui_font_MiSansM, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_add_event_cb(ui_pageSDCard_panelHeader, ui_event_pageSDCard_panelHeader, LV_EVENT_ALL, NULL); - lv_obj_add_event_cb(ui_pageSDCard_panelReadSDCard, ui_event_pageSDCard_panelReadSDCard, LV_EVENT_ALL, NULL); + lv_obj_add_event_cb(ui_pageSDCard_buttonReadSDCard, ui_event_pageSDCard_buttonReadSDCard, LV_EVENT_ALL, NULL); uic_pageSDCard_panelSDCardFree = ui_pageSDCard_panelSDCardFree; } diff --git a/components/FluxUI/ui.c b/components/FluxUI/ui.c index 807ea5a..a37fade 100644 --- a/components/FluxUI/ui.c +++ b/components/FluxUI/ui.c @@ -200,9 +200,6 @@ lv_obj_t * ui_pageSDCard_panelHeader; lv_obj_t * ui_pageSDCard_labelHeaderTitle; lv_obj_t * ui_pageSDCard_labelBack; lv_obj_t * ui_pageSDCard_panelBody; -void ui_event_pageSDCard_panelReadSDCard(lv_event_t * e); -lv_obj_t * ui_pageSDCard_panelReadSDCard; -lv_obj_t * ui_pageSDCard_labelReadSDCard; lv_obj_t * ui_pageSDCard_panelSDCardFree; lv_obj_t * ui_pageSDCard_arcSDCardFree; lv_obj_t * ui_pageSDCard_labelSDCardFree; @@ -211,6 +208,9 @@ lv_obj_t * ui_pageSDCard_labelSDCardUsed; lv_obj_t * ui_pageSDCard_labelSDCardSize; lv_obj_t * ui_pageSDCard_lableSDCardMountPoint; lv_obj_t * ui_pageSDCard_textAreaSDCard; +void ui_event_pageSDCard_buttonReadSDCard(lv_event_t * e); +lv_obj_t * ui_pageSDCard_buttonReadSDCard; +lv_obj_t * ui_pageSDCard_labelReadSDCard; // CUSTOM VARIABLES lv_obj_t * uic_pageSDCard_panelSDCardFree; @@ -519,12 +519,12 @@ void ui_event_pageSDCard_panelHeader(lv_event_t * e) } } -void ui_event_pageSDCard_panelReadSDCard(lv_event_t * e) +void ui_event_pageSDCard_buttonReadSDCard(lv_event_t * e) { lv_event_code_t event_code = lv_event_get_code(e); if(event_code == LV_EVENT_CLICKED) { - on_panelReadSDCard_clicked(e); + on_buttonReadSDCard_clicked(e); } } diff --git a/components/FluxUI/ui.h b/components/FluxUI/ui.h index 17a16c6..13829ae 100644 --- a/components/FluxUI/ui.h +++ b/components/FluxUI/ui.h @@ -208,9 +208,6 @@ extern lv_obj_t * ui_pageSDCard_panelHeader; extern lv_obj_t * ui_pageSDCard_labelHeaderTitle; extern lv_obj_t * ui_pageSDCard_labelBack; extern lv_obj_t * ui_pageSDCard_panelBody; -void ui_event_pageSDCard_panelReadSDCard(lv_event_t * e); -extern lv_obj_t * ui_pageSDCard_panelReadSDCard; -extern lv_obj_t * ui_pageSDCard_labelReadSDCard; extern lv_obj_t * ui_pageSDCard_panelSDCardFree; extern lv_obj_t * ui_pageSDCard_arcSDCardFree; extern lv_obj_t * ui_pageSDCard_labelSDCardFree; @@ -219,6 +216,9 @@ extern lv_obj_t * ui_pageSDCard_labelSDCardUsed; extern lv_obj_t * ui_pageSDCard_labelSDCardSize; extern lv_obj_t * ui_pageSDCard_lableSDCardMountPoint; extern lv_obj_t * ui_pageSDCard_textAreaSDCard; +void ui_event_pageSDCard_buttonReadSDCard(lv_event_t * e); +extern lv_obj_t * ui_pageSDCard_buttonReadSDCard; +extern lv_obj_t * ui_pageSDCard_labelReadSDCard; // CUSTOM VARIABLES extern lv_obj_t * uic_pageSDCard_panelSDCardFree; diff --git a/components/FluxUI/ui_events.c b/components/FluxUI/ui_events.c index 81a7741..7a4e8e6 100644 --- a/components/FluxUI/ui_events.c +++ b/components/FluxUI/ui_events.c @@ -11,6 +11,11 @@ #include "FluxMod.h" #include "FluxWifi.h" #include "FluxUart.h" +#include "FluxSD.h" + +#include "esp_vfs_fat.h" +#include "sdmmc_cmd.h" +#include "driver/sdmmc_host.h" #define LOWERST_LIGHT_LEVEL (7222) @@ -134,4 +139,22 @@ void on_buttonFluxRead_clicked(lv_event_t * e) void on_buttonClearTextarea_clicked(lv_event_t * e) { lv_textarea_set_text(ui_pageDebug_textAreaContent, ""); -} \ No newline at end of file +} + +void on_buttonReadSDCard_clicked(lv_event_t * e) +{ + /*首先清空显示页面*/ + lv_textarea_set_text(ui_pageSDCard_textAreaSDCard,""); + esp_vfs_fat_info(MOUNT_POINT,&total_bytes,&free_bytes); + free_percent = (float)free_bytes / (float)total_bytes * 100; + + printf("total:%llu free:%llu\n",total_bytes,free_bytes); + + lv_label_set_text_fmt(ui_pageSDCard_labelSDCardFree,"%.2f free",free_percent); + lv_label_set_text_fmt(ui_pageSDCard_labelSDCardUsed,"used: %.2f GB",(double)(total_bytes-free_bytes)/(1024*1024*1024.0)); + lv_label_set_text_fmt(ui_pageSDCard_labelSDCardSize,"size: %.2f GB",(double)total_bytes/(1024*1024*1024.0)); + + lv_arc_set_value(ui_pageSDCard_arcSDCardFree,free_percent); + +} + diff --git a/components/FluxUI/ui_events.h b/components/FluxUI/ui_events.h index 0fa376e..eb9fda3 100644 --- a/components/FluxUI/ui_events.h +++ b/components/FluxUI/ui_events.h @@ -19,7 +19,7 @@ void on_dropDownWifiName_valueChanged(lv_event_t * e); void on_buttonClearPassword_clicked(lv_event_t * e); void on_buttonSearchWifi_clicked(lv_event_t * e); void on_buttonConnectWifi_clicked(lv_event_t * e); -void on_panelReadSDCard_clicked(lv_event_t * e); +void on_buttonReadSDCard_clicked(lv_event_t * e); #ifdef __cplusplus } /*extern "C"*/ diff --git a/components/FluxUart/FluxUart.c b/components/FluxUart/FluxUart.c index 4144ebb..e17d5d3 100644 --- a/components/FluxUart/FluxUart.c +++ b/components/FluxUart/FluxUart.c @@ -153,6 +153,7 @@ void uart2_echoTask(void) uint8_t *data = (uint8_t *) malloc(BUF_SIZE); unsigned short crc; + char text[64]; while (1) { @@ -161,11 +162,14 @@ void uart2_echoTask(void) // Write data back to the UART uart_write_bytes(ECHO_UART_PORT_NUM2, (const char *) data, len); + if (len) { - lv_textarea_add_text(ui_pageDebug_textAreaContent,(char *) data); - lv_textarea_add_text(ui_pageDebug_textAreaContent,"\n"); - + lv_textarea_add_char(ui_pageDebug_textAreaContent,'\n'); + // sprintf(text,"%s",(char *) data); + // lv_textarea_add_text(ui_pageDebug_textAreaContent,(char *) text); + lv_textarea_add_text(ui_pageDebug_textAreaContent, (char *) data); + data[len] = '\0'; ESP_LOGI(TAG, "Recv str: %s", (char *) data); ESP_LOGI(TAG, "CRC16: %04X", CRC16(data, len)); @@ -179,24 +183,26 @@ void uart2_echoTask(void) esp_err_t ModbusRTU_Send(uart_port_t uart_num, struct ModbusRTU_Frame *frame) { unsigned short crc; - - - crc = CRC16((unsigned char *)frame, sizeof(frame->ADDR) + sizeof(frame->FUNC) + sizeof(frame->DATA)); - frame->CRC[1] = (crc & 0xFF); - frame->CRC[0] = (crc >> 8); - + char text[64]; + /*设置功能码*/ if (lv_dropdown_get_selected(ui_pageDebug_dropdownFunctionCode) == 0) { frame->FUNC = 0x03; }else{ frame->FUNC = 0x16; } + + crc = CRC16((unsigned char *)frame, sizeof(frame->ADDR) + sizeof(frame->FUNC) + sizeof(frame->DATA)); + frame->CRC[1] = (crc & 0xFF); + frame->CRC[0] = (crc >> 8); uart_write_bytes(uart_num, (const char *)frame, sizeof(struct ModbusRTU_Frame)/sizeof(unsigned char)); + sprintf(text,"addr:%02X, func:%02X, data:%02X %02X %02X %02X ,crc:%02X %02X",frame->ADDR,frame->FUNC,frame->DATA[0],frame->DATA[1],frame->DATA[2],frame->DATA[3],frame->CRC[0],frame->CRC[1]); + lv_textarea_add_char(ui_pageDebug_textAreaContent,'\n'); - lv_textarea_add_text(ui_pageDebug_textAreaContent,"Send: "); - lv_textarea_add_text(ui_pageDebug_textAreaContent,(char *)frame); + lv_textarea_add_text(ui_pageDebug_textAreaContent,"Send:"); + lv_textarea_add_text(ui_pageDebug_textAreaContent,(char*)text); return ESP_OK; diff --git a/main/i80_controller_example_main.c b/main/i80_controller_example_main.c index 78ddec5..f96369c 100644 --- a/main/i80_controller_example_main.c +++ b/main/i80_controller_example_main.c @@ -483,6 +483,16 @@ void app_main(void) /*鍒濆鍖杦ifi鎵弿鐜*/ wifi_scanInit(); + // Lock the mutex due to the LVGL APIs are not thread-safe + if (example_lvgl_lock(-1)) { + + //example_lvgl_demo_ui(disp); + ui_init(); + + /*闅愯棌椤堕儴鍔犺浇鍦堝湀*/ + lv_obj_add_flag(ui_pageHome_spinnerStateBusy, LV_OBJ_FLAG_HIDDEN); + lv_event_send(ui_pageSDCard_buttonReadSDCard, LV_EVENT_CLICKED, NULL); + #if USE_MODBUS_OFFICIAL /*鍒濆鍖朚odbus*/ ESP_ERROR_CHECK(modbus_master_init()); @@ -496,17 +506,6 @@ void app_main(void) xTaskCreate(uart2_echoTask, "uart2_echo_task", ECHO_TASK_STACK_SIZE, NULL, 10, NULL); #endif - - - // Lock the mutex due to the LVGL APIs are not thread-safe - if (example_lvgl_lock(-1)) { - - //example_lvgl_demo_ui(disp); - ui_init(); - - /*闅愯棌椤堕儴鍔犺浇鍦堝湀*/ - lv_obj_add_flag(ui_pageHome_spinnerStateBusy, LV_OBJ_FLAG_HIDDEN); - // Release the mutex example_lvgl_unlock(); }