The RawTpx3Pixel structure in memory: Difference between revisions
Jump to navigation
Jump to search
(Created page with "The structure is declared: <syntaxhighlight line lang=C> #pragma pack(push, 1) typedef struct _RawTpx3Pixel { u32 index: 24; u64 toa: 64; byte overflow: 1; byte ftoa: 5; u16 tot: 10; } RawTpx3Pixel; #pragma pack(pop) </syntaxhighlight> But #pragma pack may not be 100% respected by the compiler, for example due to mandatory alignment. = First test = Add testbox, checkbox and test code to the Tpx3-1 example from the AdvacamAp...") |
|||
Line 17: | Line 17: | ||
Add testbox, checkbox and test code to the Tpx3-1 example from the AdvacamApiExamplesPackage | Add testbox, checkbox and test code to the Tpx3-1 example from the AdvacamApiExamplesPackage | ||
Add global declarations: | 1. Add global declarations: | ||
<syntaxhighlight line lang=C> | <syntaxhighlight line lang=C> | ||
RawTpx3Pixel dataDrivenPxRaw[32000000]; | RawTpx3Pixel dataDrivenPxRaw[32000000]; | ||
Line 25: | Line 25: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Add this code to begin of the '''initMeasParams()''' function: | 2. Add this code to begin of the '''initMeasParams()''' function: | ||
showRawPx = checkRawPixels->Checked; | showRawPx = checkRawPixels->Checked; | ||
dataDrivenPxRawLen = -1; | dataDrivenPxRawLen = -1; | ||
txtRawData->Visible = showRawPx; | txtRawData->Visible = showRawPx; | ||
Show the data sample function, add above the '''timer1_Tick''' function: | 3. Show the data sample function, add above the '''timer1_Tick''' function: | ||
<syntaxhighlight line lang=C> | <syntaxhighlight line lang=C> | ||
void showRawPxFn() { | void showRawPxFn() { | ||
Line 52: | Line 52: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Add the line | 4. Add the line | ||
if (showRawPx) showRawPxFn(); | if (showRawPx) showRawPxFn(); | ||
to the | to the | ||
Line 59: | Line 59: | ||
<br> | <br> | ||
Add this section to end of the '''clbDataDriven''' function: | 5. Add this section to end of the '''clbDataDriven''' function: | ||
<syntaxhighlight line lang=C> | <syntaxhighlight line lang=C> | ||
if (showRawPx) { | if (showRawPx) { | ||
Line 82: | Line 82: | ||
== The result == | == The result == | ||
<syntaxhighlight line lang=text> | <syntaxhighlight line lang=text> | ||
start adr: 0, OvrFirst: -1, sizeof: 15 | start adr: 0, OvrFirst: -1, sizeof: 15 | ||
Line 94: | Line 93: | ||
4614 631863 0 15 21 B: 6 18 0 0 55 164 9 0 0 0 0 0 30 21 0 6 | 4614 631863 0 15 21 B: 6 18 0 0 55 164 9 0 0 0 0 0 30 21 0 6 | ||
4614 636812 0 25 27 B: 6 18 0 0 140 183 9 0 0 0 0 0 50 27 0 6 | 4614 636812 0 25 27 B: 6 18 0 0 140 183 9 0 0 0 0 0 50 27 0 6 | ||
</syntaxhighlight> | |||
* Length of the declared structure is: 24+64+1+5+10 = 104 bits = '''13 bytes''' | |||
* Length returned by the sizeof function is: '''15 bytes''' | |||
* The bytes list confirms this, it can be seen that the next record starts from the 16th byte. | |||
* It is unlikely that the lowest byte of the ToA is always zero, so we see that the ToA starts with the 5th byte, so the pixel index is 4 bytes length. | |||
* Assume that the ToA is indeed 8 bytes. So the next entry starts with the 13th byte. | |||
<syntaxhighlight line lang=text> | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<syntaxhighlight line lang=C> | <syntaxhighlight line lang=C> | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 12:39, 18 January 2024
The structure is declared:
#pragma pack(push, 1)
typedef struct _RawTpx3Pixel
{
u32 index: 24;
u64 toa: 64;
byte overflow: 1;
byte ftoa: 5;
u16 tot: 10;
} RawTpx3Pixel;
#pragma pack(pop)
But #pragma pack may not be 100% respected by the compiler, for example due to mandatory alignment.
First test
Add testbox, checkbox and test code to the Tpx3-1 example from the AdvacamApiExamplesPackage
1. Add global declarations:
RawTpx3Pixel dataDrivenPxRaw[32000000];
int dataDrivenPxRawOvrFirst = -1;
int dataDrivenPxRawLen = -1;
bool showRawPx = false;
2. Add this code to begin of the initMeasParams() function:
showRawPx = checkRawPixels->Checked; dataDrivenPxRawLen = -1; txtRawData->Visible = showRawPx;
3. Show the data sample function, add above the timer1_Tick function:
void showRawPxFn() {
if (dataDrivenPxRawLen < 1) return;
int start = (dataDrivenPxRawOvrFirst > 0) ? dataDrivenPxRawOvrFirst : 0;
if (start > 1) start-=2;
String^ s = String::Format("start adr: {0}, OvrFirst: {1}, siz: {2}\r\n", start, dataDrivenPxRawOvrFirst, sizeof(RawTpx3Pixel)) + "index 24 / toa 64 / overflow 1 / ftoa 5 / tot 10\r\n";
for (int n = 0; n < 20; n++) {
int idx = start + n;
s += String::Format("{0}\t{1}\t{2} {3}\t{4}\t", dataDrivenPxRaw[idx].index, dataDrivenPxRaw[idx].toa, dataDrivenPxRaw[idx].overflow, dataDrivenPxRaw[idx].ftoa, dataDrivenPxRaw[idx].tot);
s += "B:";
unsigned char* arr = (unsigned char*)(dataDrivenPxRaw + idx);
for (int i=0; i < 16; i++) {
s += String::Format(" {0}", arr[i]);
}
s += "\r\n";
}
txtRawData->Text = s;
}
4. Add the line
if (showRawPx) showRawPxFn();
to the
if (dataDrivenPixelsCount != 0) {
section in the timer1_Tick function
5. Add this section to end of the clbDataDriven function:
if (showRawPx) {
if (dataDrivenPixelsCount > 1000000) dataDrivenPixelsCount = 1000000;
rc = pxcGetMeasuredRawTpx3Pixels(deviceIndex, dataDrivenPxRaw, dataDrivenPixelsCount);
dataDrivenPxRawOvrFirst = -1;
dataDrivenPxRawLen = 0;
if (rc != 0) {
dataDrivenPxRawLen = 0;
clbError = rc;
return;
}
dataDrivenPxRawLen = dataDrivenPixelsCount;
for (int n = 0; n < dataDrivenPixelsCount; n++) {
if (dataDrivenPxRaw[n].overflow != 0) {
dataDrivenPxRawOvrFirst = n;
break;
}
}
}
The result
start adr: 0, OvrFirst: -1, sizeof: 15
index 24 / toa 64 / overflow 1 / ftoa 5 / tot 10
242 196318 0 20 14 B: 242 0 0 0 222 254 2 0 0 0 0 0 40 14 0 242
242 238506 0 9 3 B: 242 0 0 0 170 163 3 0 0 0 0 0 18 3 0 238
750 386872 0 19 20 B: 238 2 0 0 56 231 5 0 0 0 0 0 38 20 0 238
750 445251 0 17 17 B: 238 2 0 0 67 203 6 0 0 0 0 0 34 17 0 238
750 477832 0 14 8 B: 238 2 0 0 136 74 7 0 0 0 0 0 28 8 0 238
750 572804 0 12 11 B: 238 2 0 0 132 189 8 0 0 0 0 0 24 11 0 6
4614 631863 0 15 21 B: 6 18 0 0 55 164 9 0 0 0 0 0 30 21 0 6
4614 636812 0 25 27 B: 6 18 0 0 140 183 9 0 0 0 0 0 50 27 0 6
- Length of the declared structure is: 24+64+1+5+10 = 104 bits = 13 bytes
- Length returned by the sizeof function is: 15 bytes
- The bytes list confirms this, it can be seen that the next record starts from the 16th byte.
- It is unlikely that the lowest byte of the ToA is always zero, so we see that the ToA starts with the 5th byte, so the pixel index is 4 bytes length.
- Assume that the ToA is indeed 8 bytes. So the next entry starts with the 13th byte.