From 787d3a261ee35fd17ff4c196e7ccac67b25c0437 Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Sun, 24 Sep 2023 16:57:31 +0100 Subject: [PATCH] make util code more portable --- firmware.bin | Bin 52932 -> 52932 bytes firmware.packed.bin | Bin 52950 -> 52950 bytes utils/main.cpp | 130 ++++++++++++++++++++----------------- utils/misc.exe | Bin 0 -> 18944 bytes utils/uv-k5_small.bin | Bin 0 -> 760 bytes utils/uv-k5_small_bold.bin | Bin 0 -> 760 bytes win_make.bat | 2 +- 7 files changed, 72 insertions(+), 60 deletions(-) create mode 100644 utils/misc.exe create mode 100644 utils/uv-k5_small.bin create mode 100644 utils/uv-k5_small_bold.bin diff --git a/firmware.bin b/firmware.bin index 87094695d7425116d18f94241a3b7c821cea0135..a9e3b7a8d293b5f38118e1cf10c4490e6c2571f0 100644 GIT binary patch delta 37 ncmX>ym-)zC<_*Rt#gfe}QY=yvdAS(;UERWUq1?@$C#zWj{D};$ delta 37 ncmX>ym-)zC<_*Rt#Y|EYjm<5Mc)1w-UERWUq1?@$C#zWj@jwgX diff --git a/firmware.packed.bin b/firmware.packed.bin index 7ef02200f5176bb7a40131a2602f9a27da9cb2fc..ebced18b44e48c7c524979018c7275c8372eaf05 100644 GIT binary patch delta 53 zcmV-50LuT?odedL1F!}l2P>nA1X#Wfvkf3NsTPHoQq+f|#C - #include #include +#include #include -#pragma hdrstop - // ************************************************************************ // create a front end gain table for the firmware @@ -71,10 +68,8 @@ typedef struct int16_t sum_dB; } t_gain_table; -void __fastcall create_gain_table(String filename) +void __fastcall create_gain_table(const char *filename) { - String s; - std::vector gain_table; // front end register dB values @@ -222,28 +217,27 @@ void __fastcall create_gain_table(String filename) break; } - const int save_handle = FileCreate(filename); - if (save_handle <= 0) + // *************************** + // save the table to a file + + FILE *file = fopen(filename, "w"); + if (file == NULL) return; - s = "\r\n"; - FileWrite(save_handle, s.c_str(), s.Length()); - s = "\tconst t_am_fix_gain_table am_fix_gain_table[] =\r\n"; - FileWrite(save_handle, s.c_str(), s.Length()); - s = "\t{\r\n"; - FileWrite(save_handle, s.c_str(), s.Length()); - s = "\t\t{.lna_short = 3, .lna = 2, .mixer = 3, .pga = 6}, // 0 0dB -14dB 0dB -3dB .. -17dB original\r\n"; - FileWrite(save_handle, s.c_str(), s.Length()); - s = "\r\n"; - FileWrite(save_handle, s.c_str(), s.Length()); + fprintf(file, "\n"); + fprintf(file, "\tconst t_am_fix_gain_table am_fix_gain_table[] =\n"); + fprintf(file, "\t{\n"); + fprintf(file, "\t\t{.lna_short = 3, .lna = 2, .mixer = 3, .pga = 6}, // 0 0dB -14dB 0dB -3dB .. -17dB original\n"); + fprintf(file, "\n"); for (unsigned int i = 0; i < gain_table.size(); i++) { + char s[1024]; const t_gain_table entry = gain_table[i]; // {0, 0, 0, 0}, // 00 -19dB -24dB -8dB -33dB .. -84dB - s.printf("\t\t{%u, %u, %u, %u}, // %3u .. %3ddB %3ddB %2ddB %3ddB .. %3ddB", + sprintf(s, "\t\t{%u, %u, %u, %u}, // %3u .. %3ddB %3ddB %2ddB %3ddB .. %3ddB", entry.lna_short, entry.lna, entry.mixer, @@ -256,53 +250,63 @@ void __fastcall create_gain_table(String filename) entry.sum_dB); if (i == original_index) - s += " original"; + strcat(s, " original"); - s += "\r\n"; + strcat(s, "\n"); - FileWrite(save_handle, s.c_str(), s.Length()); + fprintf(file, "%s", s); } - s = "\t};\r\n"; - FileWrite(save_handle, s.c_str(), s.Length()); + fprintf(file, "\t};\n"); + fprintf(file, "\n\tconst unsigned int original_index = %u;\n", 1 + original_index); - s.printf("\r\n\tconst unsigned int original_index = %u;\r\n", 1 + original_index); - FileWrite(save_handle, s.c_str(), s.Length()); - - FileClose(save_handle); + fclose(file); } // ************************************************************************ // "rotate_font()" has nothing to do with this program at all, I just needed // to write a bit of code to rotate some fonts I've drawn -void __fastcall rotate_font(String filename1, String filename2) +void __fastcall rotate_font(const char *filename1, const char *filename2) { std::vector data; // **************************** // load the file - const int load_handle = FileOpen(filename1, fmOpenRead | fmShareDenyNone); - if (load_handle <= 0) + FILE *file = fopen(filename1, "rb"); + if (file == NULL) return; - const int file_size = FileSeek(load_handle, 0, 2); - FileSeek(load_handle, 0, 0); - + if (fseek(file, 0, SEEK_END) != 0) + { + fclose(file); + return; + } + const size_t file_size = ftell(file); if (file_size <= 0) { - FileClose(load_handle); + fclose(file); + return; + } + if (fseek(file, 0, SEEK_SET) != 0) + { + fclose(file); return; } data.resize(file_size); - const int bytes_loaded = FileRead(load_handle, &data[0], file_size); + const size_t bytes_loaded = fread(&data[0], 1, file_size, file); + if (bytes_loaded != file_size) + { + fclose(file); + return; + } - FileClose(load_handle); + fclose(file); - if (bytes_loaded != (int)data.size()) + if (bytes_loaded != data.size()) return; // *************************** @@ -330,41 +334,49 @@ void __fastcall rotate_font(String filename1, String filename2) // *************************** // save file - String s; - - const int save_handle = FileCreate(filename2); - if (save_handle <= 0) + file = fopen(filename2, "wt"); + if (file == NULL) return; - s.printf("const uint8_t gFontSmall[95][7] =\r\n"); - FileWrite(save_handle, s.c_str(), s.Length()); - s = "{\r\n"; - FileWrite(save_handle, s.c_str(), s.Length()); + fprintf(file, "const uint8_t gFontSmall[95][7] =\n"); +// fprintf(file, "const uint8_t gFontSmall[95][6] =\n"); + fprintf(file, "{\n"); for (unsigned int i = 0; i < data.size(); ) { - s = ""; + char s[1024]; + memset(s, 0, sizeof(s)); + // for (unsigned int k = 0; k < 8 && i < data.size(); k++) for (unsigned int k = 0; k < 7 && i < data.size(); k++) { - String s2; - s2.printf("0x%02X", data[i++]); + char s2[16]; + sprintf(s2, "0x%02X", data[i++]); + if (k == 0) - s += "\t{"; + strcat(s, "\t{"); + // if (k < 7) if (k < 6) - s += s2 + ", "; + { + strcat(s, s2); + strcat(s, ", "); + } else - s += s2 + "},\r\n"; + { + strcat(s, s2); + strcat(s, "},\n"); + } } + i++; - FileWrite(save_handle, s.c_str(), s.Length()); + + fprintf(file, "%s", s); } - s = "};\r\n"; - FileWrite(save_handle, s.c_str(), s.Length()); + fprintf(file, "};\n"); - FileClose(save_handle); + fclose(file); // *************************** } @@ -374,8 +386,8 @@ int main(int argc, char* argv[]) { create_gain_table("gain_table.c"); -// rotate_font("uv-k5_small.bin", "uv-k5_small.c"); -// rotate_font("uv-k5_small_bold.bin", "uv-k5_small_bold.c"); + rotate_font("uv-k5_small.bin", "uv-k5_small.c"); + rotate_font("uv-k5_small_bold.bin", "uv-k5_small_bold.c"); return 0; } diff --git a/utils/misc.exe b/utils/misc.exe new file mode 100644 index 0000000000000000000000000000000000000000..19fb035ef23a5a2126670394f6a16188c6afe2d2 GIT binary patch literal 18944 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 literal 0 HcmV?d00001 diff --git a/utils/uv-k5_small.bin b/utils/uv-k5_small.bin new file mode 100644 index 0000000000000000000000000000000000000000..66bf9adbf434589e45aef07852bf8e79de7fe096 GIT binary patch literal 760 zcmX|9J*yls3>+2{ws?h$SGc&sg^Mk>NMV9Gj4{V?qy`HMw&yN=S?GUz549VEp4%cjmE08HmCpjq*DZZr zs0aAq#uw|Vi1-1G7sOMA5i6DYjpqB$8kOHk1g#X^v~$kHqd{rtIk!w+Q;T>0rMmn% z^E5x(a8(=k9rgb4_g)K#Lg^@fo&rMo`h47|S&uUCi7UKPJ|ELo9`Td<;SeRNLmBl# z2yWQVXP^!)5U3;_BhW`gGei(} zk2xChALUeEX^Ll~n-;6q4Ed%}mJ^yjJ literal 0 HcmV?d00001 diff --git a/utils/uv-k5_small_bold.bin b/utils/uv-k5_small_bold.bin new file mode 100644 index 0000000000000000000000000000000000000000..c845fb4f7dd63645e279dcda3588ee12f647293a GIT binary patch literal 760 zcmXYvJ!>Q}42H!LObT;sk;26mTWoQq%i$11ig3k|B0t~?vmCC5Aw>vN2>teZWUqE- zG?HHH)rUnMQV=O3+cq6Pji1P3ANFF4+Yuk?66g@TwU#VAnQxI>(Q+eD ziu(g2;TKVjcL@Gd0^MFkz4z`aWjW#mcDgKRLnk-M7v0>mxHk)1(Sdg-0eLvDVWZcy z1_RE)8@kH#`TBZ2KZ}^fU-*8)7x*6+`c+Qt^So0Eyq)~Pb8mP2*wkl(zfo7zVXYBw zd+-tr1b(U^zOFfM%&Tw5=dpEZA^0b(ga7s&Jp7|?^83u!`|j)Dx4p~iO{3qDmsUUz z{LngW_ZxmKNqs-6|=q zRJexStubGnul 2>nul del /S /Q *.d >nul 2>nul -del /S /Q *.bin >nul 2>nul +del /Q *.bin >nul 2>nul :: do the compile ! "C:\Program Files (x86)\GnuWin32\bin\make"