annotate ostc45_icon.cpp @ 12:ac837fe1d590 default tip

Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
author Ideenmodellierer
date Mon, 12 Jan 2026 13:58:41 +0000
parents 6fba58c4964b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
1 #include "ostc45_icon.h"
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
2
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
3 //OSTC45_Icon::OSTC45_Icon() {}
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
4
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
5 #pragma pack(push, 1)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
6 struct BMPFileHeader
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
7 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
8 uint16_t bfType;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
9 uint32_t bfSize;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
10 uint16_t bfReserved1;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
11 uint16_t bfReserved2;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
12 uint32_t bfOffBits;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
13 };
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
14
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
15 struct BMPInfoHeader
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
16 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
17 uint32_t biSize;
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
18 int32_t biWidth;
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
19 int32_t biHeight;
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
20 uint16_t biPlanes;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
21 uint16_t biBitCount;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
22 uint32_t biCompression;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
23 uint32_t biSizeImage;
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
24 int32_t biXPelsPerMeter;
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
25 int32_t biYPelsPerMeter;
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
26 uint32_t biClrUsed;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
27 uint32_t biClrImportant;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
28 };
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
29 #pragma pack(pop)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
30
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
31 BmpToArray::BmpToArray(const QString &filename)
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
32 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
33 loadBMP(filename);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
34 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
35
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
36 void BmpToArray::loadBMP(const QString &filename)
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
37 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
38 QFile file(filename);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
39 int dstY;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
40 QByteArray rowBuffer;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
41 bool topDown = false;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
42 BMPFileHeader fileHeader;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
43 BMPInfoHeader infoHeader;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
44
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
45 if (!file.open(QIODevice::ReadOnly))
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
46 throw std::runtime_error("Cannot open BMP file");
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
47
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
48 if (file.read(reinterpret_cast<char *>(&fileHeader), sizeof(BMPFileHeader))
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
49 != sizeof(BMPFileHeader))
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
50 throw std::runtime_error("Failed to read BMP file header");
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
51
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
52 if (file.read(reinterpret_cast<char *>(&infoHeader), sizeof(BMPInfoHeader))
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
53 != sizeof(BMPInfoHeader))
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
54 throw std::runtime_error("Failed to read BMP info header");
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
55
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
56 if (fileHeader.bfType != 0x4D42)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
57 throw std::runtime_error("Not a valid BMP file");
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
58
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
59 if (infoHeader.biBitCount != 8)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
60 throw std::runtime_error("Only 8-bit BMP supported");
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
61 if (infoHeader.biCompression != 0)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
62 throw std::runtime_error("Compressed BMP not supported");
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
63
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
64 if (infoHeader.biWidth > 800)
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
65 throw std::runtime_error("Only BMP with 800 or less horizontal pixels supported");
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
66
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
67 if (infoHeader.biHeight > 480)
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
68 throw std::runtime_error("Only BMP with 480 or less vertical pixels supported");
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
69
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
70 // Width / Height
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
71 width = infoHeader.biWidth;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
72 height = infoHeader.biHeight;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
73
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
74 if ((int32_t) height < 0) {
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
75 height = -((int32_t) height);
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
76 topDown = true;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
77 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
78
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
79 // Palette
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
80 uint32_t colorCount = infoHeader.biClrUsed;
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
81 if (colorCount == 0)
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
82 colorCount = 256;
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
83 if (colorCount > 256)
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
84 colorCount = 256;
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
85
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
86 clut.resize(colorCount);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
87
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
88 for (uint32_t i = 0; i < colorCount; ++i)
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
89 file.read(reinterpret_cast<char *>(&clut[i]), 4);
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
90
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
91 // CLUT in 32-Bit transform 0x00RRGGBB
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
92 clut32.resize(255, 0);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
93
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
94 for (uint32_t i = 0; i < colorCount && i < 255; ++i) {
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
95 clut32[i] = (clut[i].r << 16) | (clut[i].g << 8) | (clut[i].b);
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
96 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
97
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
98 // Pixel-Data
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
99 if (!file.seek(fileHeader.bfOffBits))
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
100 throw std::runtime_error("Failed to seek to pixel data");
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
101
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
102 pixelData.resize(width * height);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
103
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
104 size_t rowSize = (width + 3) & ~3; // 4-Byte alignment
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
105
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
106 rowBuffer.resize(rowSize);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
107
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
108 for (int y = 0; y < height; ++y) {
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
109 if (file.read(rowBuffer.data(), rowSize) != rowSize)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
110 throw std::runtime_error("Failed to read BMP pixel row");
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
111
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
112 if (topDown) {
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
113 dstY = height - 1 - y;
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
114 } else {
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
115 dstY = y;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
116 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
117
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
118 for (int x = 0; x < width; ++x) {
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
119 pixelData[x * height + dstY] = static_cast<uint8_t>(rowBuffer[x]);
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
120 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
121 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
122 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
123 QByteArray BmpToArray::getTransferBytes() const
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
124 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
125 QByteArray out;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
126
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
127 out.reserve(clut32.size() * 4 + pixelData.size());
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
128
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
129 // CLUT (32 Bit, Little Endian)
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
130 for (uint32_t color : clut32) {
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
131 out.append(static_cast<char>(color & 0xFF));
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
132 out.append(static_cast<char>((color >> 8) & 0xFF));
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
133 out.append(static_cast<char>((color >> 16) & 0xFF));
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
134 out.append(static_cast<char>((color >> 24) & 0xFF));
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
135 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
136
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
137 // Pixel (8 Bit)
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
138 out.append(reinterpret_cast<const char *>(pixelData.data()), pixelData.size());
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
139
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
140 return out;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
141 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
142
11
6fba58c4964b Minor changes done by automatic style checker
Ideenmodellierer
parents: 5
diff changeset
143 void BmpToArray::getImageXY(uint32_t *x, uint32_t *y)
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
144 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
145 *x = width;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
146 *y = height;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
147 }