49 for (
int i = 0; i < 768; i++) {
60 for (
int i = 0; i < 768; i++) {
74 uint16_t dataReady = 0;
75 uint16_t statusRegister;
83 while (dataReady == 0) {
84 error = this->
i2cDriver.
read(slaveAddr, 0x8000, 1, &statusRegister);
88 dataReady = statusRegister & 0x0008;
114 error = this->
i2cDriver.
read(slaveAddr, 0x800D, 1, &ctrlReg);
118 if ((ctrlReg & 0x8000) != 0) {
126 uint16_t dataReady = 0;
127 uint16_t controlRegister1;
128 uint16_t statusRegister;
133 while (dataReady == 0) {
134 error = this->
i2cDriver.
read(slaveAddr, 0x8000, 1, &statusRegister);
138 dataReady = statusRegister & 0x0008;
146 error = this->
i2cDriver.
read(slaveAddr, 0x0400, 768, frameData);
156 error = this->
i2cDriver.
read(slaveAddr, 0x800D, 1, &controlRegister1);
157 frameData[832] = controlRegister1;
158 frameData[833] = statusRegister & 0x0001;
165 for (cnt = 0; cnt < 64; cnt++) {
166 frameData[cnt + 768] =
data[cnt];
175 return frameData[833];
201 float resolutionCorrection;
205 vdd = frameData[810];
209 resolutionRAM = (frameData[832] & 0x0C00) >> 10;
210 resolutionCorrection =
211 pow(2, (
double)params->
resolutionEE) / pow(2, (
double)resolutionRAM);
212 vdd = (resolutionCorrection * vdd - params->
vdd25) / params->
kVdd + 3.3;
223 vdd = this->
getVdd(frameData, params);
224 ptat = frameData[800];
229 ptatArt = frameData[768];
230 if (ptatArt > 32767) {
231 ptatArt = ptatArt - 65536;
233 ptatArt = (ptat / (ptat * params->
alphaPTAT + ptatArt)) * pow(2, (
double)18);
235 ta = (ptatArt / (1 + params->
KvPTAT * (vdd - 3.3)) - params->
vPTAT25);
236 ta = ta / params->
KtPTAT + 25;
248 float alphaCompensated;
253 int8_t conversionPattern;
261 subPage = frameData[833];
262 vdd = this->
getVdd(frameData, params);
263 ta = this->
getTa(frameData, params);
265 ktaScale = pow(2, (
double)params->
ktaScale);
266 kvScale = pow(2, (
double)params->
kvScale);
268 gain = frameData[778];
272 gain = params->
gainEE / gain;
274 mode = (frameData[832] & 0x1000) >> 5;
276 irDataCP[0] = frameData[776];
277 irDataCP[1] = frameData[808];
278 for (
int i = 0; i < 2; i++) {
279 if (irDataCP[i] > 32767) {
280 irDataCP[i] = irDataCP[i] - 65536;
282 irDataCP[i] = irDataCP[i] * gain;
284 irDataCP[0] = irDataCP[0] - params->
cpOffset[0] *
285 (1 + params->
cpKta * (ta - 25)) *
286 (1 + params->
cpKv * (vdd - 3.3));
288 irDataCP[1] = irDataCP[1] - params->
cpOffset[1] *
289 (1 + params->
cpKta * (ta - 25)) *
290 (1 + params->
cpKv * (vdd - 3.3));
293 (1 + params->
cpKta * (ta - 25)) *
294 (1 + params->
cpKv * (vdd - 3.3));
297 for (
int pixelNumber = 0; pixelNumber < 768; pixelNumber++) {
298 ilPattern = pixelNumber / 32 - (pixelNumber / 64) * 2;
299 chessPattern = ilPattern ^ (pixelNumber - (pixelNumber / 2) * 2);
300 conversionPattern = ((pixelNumber + 2) / 4 - (pixelNumber + 3) / 4 +
301 (pixelNumber + 1) / 4 - pixelNumber / 4) *
307 pattern = chessPattern;
310 if (pattern == frameData[833]) {
311 irData = frameData[pixelNumber];
312 if (irData > 32767) {
313 irData = irData - 65536;
315 irData = irData * gain;
317 kta = params->
kta[pixelNumber] / ktaScale;
318 kv = params->
kv[pixelNumber] / kvScale;
319 irData = irData - params->
offset[pixelNumber] * (1 + kta * (ta - 25)) *
320 (1 + kv * (vdd - 3.3));
323 irData = irData + params->
ilChessC[2] * (2 * ilPattern - 1) -
324 params->
ilChessC[1] * conversionPattern;
327 irData = irData - params->
tgc * irDataCP[subPage];
329 alphaCompensated = params->
alpha[pixelNumber];
331 image = irData * alphaCompensated;
333 result[pixelNumber] =
image;
339 float emissivity,
float tr,
float *result) {
348 float alphaCompensated;
353 int8_t conversionPattern;
365 subPage = frameData[833];
366 vdd = this->
getVdd(frameData, params);
367 ta = this->
getTa(frameData, params);
377 ktaScale = pow(2, (
double)params->
ktaScale);
378 kvScale = pow(2, (
double)params->
kvScale);
379 alphaScale = pow(2, (
double)params->
alphaScale);
381 alphaCorrR[0] = 1 / (1 + params->
ksTo[0] * 40);
383 alphaCorrR[2] = (1 + params->
ksTo[1] * params->
ct[2]);
385 alphaCorrR[2] * (1 + params->
ksTo[2] * (params->
ct[3] - params->
ct[2]));
387 gain = frameData[778];
391 gain = params->
gainEE / gain;
393 mode = (frameData[832] & 0x1000) >> 5;
395 irDataCP[0] = frameData[776];
396 irDataCP[1] = frameData[808];
397 for (
int i = 0; i < 2; i++) {
398 if (irDataCP[i] > 32767) {
399 irDataCP[i] = irDataCP[i] - 65536;
401 irDataCP[i] = irDataCP[i] * gain;
403 irDataCP[0] = irDataCP[0] - params->
cpOffset[0] *
404 (1 + params->
cpKta * (ta - 25)) *
405 (1 + params->
cpKv * (vdd - 3.3));
407 irDataCP[1] = irDataCP[1] - params->
cpOffset[1] *
408 (1 + params->
cpKta * (ta - 25)) *
409 (1 + params->
cpKv * (vdd - 3.3));
412 (1 + params->
cpKta * (ta - 25)) *
413 (1 + params->
cpKv * (vdd - 3.3));
416 for (
int pixelNumber = 0; pixelNumber < 768; pixelNumber++) {
417 ilPattern = pixelNumber / 32 - (pixelNumber / 64) * 2;
418 chessPattern = ilPattern ^ (pixelNumber - (pixelNumber / 2) * 2);
419 conversionPattern = ((pixelNumber + 2) / 4 - (pixelNumber + 3) / 4 +
420 (pixelNumber + 1) / 4 - pixelNumber / 4) *
426 pattern = chessPattern;
429 if (pattern == frameData[833]) {
430 irData = frameData[pixelNumber];
431 if (irData > 32767) {
432 irData = irData - 65536;
434 irData = irData * gain;
436 kta = params->
kta[pixelNumber] / ktaScale;
437 kv = params->
kv[pixelNumber] / kvScale;
438 irData = irData - params->
offset[pixelNumber] * (1 + kta * (ta - 25)) *
439 (1 + kv * (vdd - 3.3));
442 irData = irData + params->
ilChessC[2] * (2 * ilPattern - 1) -
443 params->
ilChessC[1] * conversionPattern;
446 irData = irData - params->
tgc * irDataCP[subPage];
449 alphaCompensated =
SCALEALPHA * alphaScale / params->
alpha[pixelNumber];
450 alphaCompensated = alphaCompensated * (1 + params->
KsTa * (ta - 25));
452 Sx = alphaCompensated * alphaCompensated * alphaCompensated *
453 (irData + alphaCompensated * taTr);
454 Sx = sqrt(sqrt(Sx)) * params->
ksTo[1];
458 (alphaCompensated * (1 - params->
ksTo[1] * 273.15) + Sx) +
462 if (To < params->ct[1]) {
464 }
else if (To < params->ct[2]) {
466 }
else if (To < params->ct[3]) {
473 irData / (alphaCompensated * alphaCorrR[range] *
474 (1 + params->
ksTo[range] * (To - params->
ct[range]))) +
477 result[pixelNumber] = To;
483 uint16_t controlRegister1;
487 value = (resolution & 0x03) << 10;
488 error = this->
i2cDriver.
read(slaveAddr, 0x800D, 1, &controlRegister1);
490 value = (controlRegister1 & 0xF3FF) | value;
498 uint16_t controlRegister1;
502 error = this->
i2cDriver.
read(slaveAddr, 0x800D, 1, &controlRegister1);
506 resolutionRAM = (controlRegister1 & 0x0C00) >> 10;
508 return resolutionRAM;
512 uint16_t controlRegister1;
516 value = (refreshRate & 0x07) << 7;
518 value = (controlRegister1 & 0xFC7F) | value;
526 uint16_t controlRegister1;
530 error = this->
i2cDriver.
read(slaveAddr, 0x800D, 1, &controlRegister1);
534 refreshRate = (controlRegister1 & 0x0380) >> 7;
542 uint16_t controlRegister1;
546 error = this->
i2cDriver.
read(slaveAddr, 0x800D, 1, &controlRegister1);
550 modeRAM = (controlRegister1 & 0x1000) >> 12;
556 uint16_t controlRegister1;
560 error = this->
i2cDriver.
read(slaveAddr, 0x800D, 1, &controlRegister1);
562 value = (controlRegister1 & 0xEFFF);
570 uint16_t controlRegister1;
574 error = this->
i2cDriver.
read(slaveAddr, 0x800D, 1, &controlRegister1);
576 value = (controlRegister1 | 0x1000);
591 while (
pixels[pix] != 0xFFFF) {
593 column =
pixels[pix] - (line << 5);
599 }
else if (column == 31) {
604 }
else if (line == 23) {
606 to[
pixels[pix]] = to[705];
607 }
else if (column == 31) {
608 to[
pixels[pix]] = to[734];
612 }
else if (column == 0) {
614 }
else if (column == 31) {
617 ap[0] = to[
pixels[pix] - 33];
618 ap[1] = to[
pixels[pix] - 31];
619 ap[2] = to[
pixels[pix] + 31];
620 ap[3] = to[
pixels[pix] + 33];
626 }
else if (column == 1 || column == 30) {
628 }
else if (column == 31) {
631 if (this->
isPixelBad(pixels[pix] - 2, params) == 0 &&
632 this->
isPixelBad(pixels[pix] + 2, params) == 0) {
635 if (fabs(ap[0]) > fabs(ap[1])) {
655 kVdd = (eeData[51] & 0xFF00) >> 8;
660 vdd25 = eeData[51] & 0x00FF;
661 vdd25 = ((vdd25 - 256) << 5) - 8192;
663 mlx90640->
kVdd = kVdd;
664 mlx90640->
vdd25 = vdd25;
674 KvPTAT = (eeData[50] & 0xFC00) >> 10;
676 KvPTAT = KvPTAT - 64;
678 KvPTAT = KvPTAT / 4096;
680 KtPTAT = eeData[50] & 0x03FF;
682 KtPTAT = KtPTAT - 1024;
686 vPTAT25 = eeData[49];
688 alphaPTAT = (eeData[16] & 0xF000) / pow(2, (
double)14) + 8.0
f;
690 mlx90640->
KvPTAT = KvPTAT;
691 mlx90640->
KtPTAT = KtPTAT;
701 if (gainEE > 32767) {
702 gainEE = gainEE - 65536;
705 mlx90640->
gainEE = gainEE;
710 tgc = eeData[60] & 0x00FF;
721 uint8_t resolutionEE;
722 resolutionEE = (eeData[56] & 0x3000) >> 12;
730 KsTa = (eeData[60] & 0xFF00) >> 8;
734 KsTa = KsTa / 8192.0f;
736 mlx90640->
KsTa = KsTa;
744 step = ((eeData[63] & 0x3000) >> 12) * 10;
746 mlx90640->
ct[0] = -40;
748 mlx90640->
ct[2] = (eeData[63] & 0x00F0) >> 4;
749 mlx90640->
ct[3] = (eeData[63] & 0x0F00) >> 8;
751 mlx90640->
ct[2] = mlx90640->
ct[2] * step;
752 mlx90640->
ct[3] = mlx90640->
ct[2] + mlx90640->
ct[3] * step;
753 mlx90640->
ct[4] = 400;
755 KsToScale = (eeData[63] & 0x000F) + 8;
756 KsToScale = 1 << KsToScale;
758 mlx90640->
ksTo[0] = eeData[61] & 0x00FF;
759 mlx90640->
ksTo[1] = (eeData[61] & 0xFF00) >> 8;
760 mlx90640->
ksTo[2] = eeData[62] & 0x00FF;
761 mlx90640->
ksTo[3] = (eeData[62] & 0xFF00) >> 8;
763 for (
int i = 0; i < 4; i++) {
764 if (mlx90640->
ksTo[i] > 127) {
765 mlx90640->
ksTo[i] = mlx90640->
ksTo[i] - 256;
767 mlx90640->
ksTo[i] = mlx90640->
ksTo[i] / KsToScale;
770 mlx90640->
ksTo[4] = -0.0002;
781 uint8_t accColumnScale;
783 float alphaTemp[768];
786 accRemScale = eeData[32] & 0x000F;
787 accColumnScale = (eeData[32] & 0x00F0) >> 4;
788 accRowScale = (eeData[32] & 0x0F00) >> 8;
789 alphaScale = ((eeData[32] & 0xF000) >> 12) + 30;
790 alphaRef = eeData[33];
792 for (
int i = 0; i < 6; i++) {
794 accRow[p + 0] = (eeData[34 + i] & 0x000F);
795 accRow[p + 1] = (eeData[34 + i] & 0x00F0) >> 4;
796 accRow[p + 2] = (eeData[34 + i] & 0x0F00) >> 8;
797 accRow[p + 3] = (eeData[34 + i] & 0xF000) >> 12;
800 for (
int i = 0; i < 24; i++) {
802 accRow[i] = accRow[i] - 16;
806 for (
int i = 0; i < 8; i++) {
808 accColumn[p + 0] = (eeData[40 + i] & 0x000F);
809 accColumn[p + 1] = (eeData[40 + i] & 0x00F0) >> 4;
810 accColumn[p + 2] = (eeData[40 + i] & 0x0F00) >> 8;
811 accColumn[p + 3] = (eeData[40 + i] & 0xF000) >> 12;
814 for (
int i = 0; i < 32; i++) {
815 if (accColumn[i] > 7) {
816 accColumn[i] = accColumn[i] - 16;
820 for (
int i = 0; i < 24; i++) {
821 for (
int j = 0; j < 32; j++) {
823 alphaTemp[p] = (eeData[64 + p] & 0x03F0) >> 4;
824 if (alphaTemp[p] > 31) {
825 alphaTemp[p] = alphaTemp[p] - 64;
827 alphaTemp[p] = alphaTemp[p] * (1 << accRemScale);
828 alphaTemp[p] = (alphaRef + (accRow[i] << accRowScale) +
829 (accColumn[j] << accColumnScale) + alphaTemp[p]);
830 alphaTemp[p] = alphaTemp[p] / pow(2, (
double)alphaScale);
839 for (
int i = 1; i < 768; i++) {
840 if (alphaTemp[i] > temp) {
846 while (temp < 32767.4) {
848 alphaScale = alphaScale + 1;
851 for (
int i = 0; i < 768; i++) {
852 temp = alphaTemp[i] * pow(2, (
double)alphaScale);
853 mlx90640->
alpha[i] = (temp + 0.5);
866 uint8_t occColumnScale;
869 occRemScale = (eeData[16] & 0x000F);
870 occColumnScale = (eeData[16] & 0x00F0) >> 4;
871 occRowScale = (eeData[16] & 0x0F00) >> 8;
872 offsetRef = eeData[17];
873 if (offsetRef > 32767) {
874 offsetRef = offsetRef - 65536;
877 for (
int i = 0; i < 6; i++) {
879 occRow[p + 0] = (eeData[18 + i] & 0x000F);
880 occRow[p + 1] = (eeData[18 + i] & 0x00F0) >> 4;
881 occRow[p + 2] = (eeData[18 + i] & 0x0F00) >> 8;
882 occRow[p + 3] = (eeData[18 + i] & 0xF000) >> 12;
885 for (
int i = 0; i < 24; i++) {
887 occRow[i] = occRow[i] - 16;
891 for (
int i = 0; i < 8; i++) {
893 occColumn[p + 0] = (eeData[24 + i] & 0x000F);
894 occColumn[p + 1] = (eeData[24 + i] & 0x00F0) >> 4;
895 occColumn[p + 2] = (eeData[24 + i] & 0x0F00) >> 8;
896 occColumn[p + 3] = (eeData[24 + i] & 0xF000) >> 12;
899 for (
int i = 0; i < 32; i++) {
900 if (occColumn[i] > 7) {
901 occColumn[i] = occColumn[i] - 16;
905 for (
int i = 0; i < 24; i++) {
906 for (
int j = 0; j < 32; j++) {
908 mlx90640->
offset[p] = (eeData[64 + p] & 0xFC00) >> 10;
909 if (mlx90640->
offset[p] > 31) {
912 mlx90640->
offset[p] = mlx90640->
offset[p] * (1 << occRemScale);
914 (offsetRef + (occRow[i] << occRowScale) +
915 (occColumn[j] << occColumnScale) + mlx90640->
offset[p]);
934 KtaRoCo = (eeData[54] & 0xFF00) >> 8;
936 KtaRoCo = KtaRoCo - 256;
940 KtaReCo = (eeData[54] & 0x00FF);
942 KtaReCo = KtaReCo - 256;
946 KtaRoCe = (eeData[55] & 0xFF00) >> 8;
948 KtaRoCe = KtaRoCe - 256;
952 KtaReCe = (eeData[55] & 0x00FF);
954 KtaReCe = KtaReCe - 256;
958 ktaScale1 = ((eeData[56] & 0x00F0) >> 4) + 8;
959 ktaScale2 = (eeData[56] & 0x000F);
961 for (
int i = 0; i < 24; i++) {
962 for (
int j = 0; j < 32; j++) {
964 split = 2 * (p / 32 - (p / 64) * 2) + p % 2;
965 ktaTemp[p] = (eeData[64 + p] & 0x000E) >> 1;
966 if (ktaTemp[p] > 3) {
967 ktaTemp[p] = ktaTemp[p] - 8;
969 ktaTemp[p] = ktaTemp[p] * (1 << ktaScale2);
970 ktaTemp[p] = KtaRC[split] + ktaTemp[p];
971 ktaTemp[p] = ktaTemp[p] / pow(2, (
double)ktaScale1);
976 temp = fabs(ktaTemp[0]);
977 for (
int i = 1; i < 768; i++) {
978 if (fabs(ktaTemp[i]) > temp) {
979 temp = fabs(ktaTemp[i]);
984 while (temp < 63.4) {
986 ktaScale1 = ktaScale1 + 1;
989 for (
int i = 0; i < 768; i++) {
990 temp = ktaTemp[i] * pow(2, (
double)ktaScale1);
992 mlx90640->
kta[i] = (temp - 0.5);
994 mlx90640->
kta[i] = (temp + 0.5);
1014 KvRoCo = (eeData[52] & 0xF000) >> 12;
1016 KvRoCo = KvRoCo - 16;
1020 KvReCo = (eeData[52] & 0x0F00) >> 8;
1022 KvReCo = KvReCo - 16;
1026 KvRoCe = (eeData[52] & 0x00F0) >> 4;
1028 KvRoCe = KvRoCe - 16;
1032 KvReCe = (eeData[52] & 0x000F);
1034 KvReCe = KvReCe - 16;
1038 kvScale = (eeData[56] & 0x0F00) >> 8;
1040 for (
int i = 0; i < 24; i++) {
1041 for (
int j = 0; j < 32; j++) {
1043 split = 2 * (p / 32 - (p / 64) * 2) + p % 2;
1044 kvTemp[p] = KvT[split];
1045 kvTemp[p] = kvTemp[p] / pow(2, (
double)kvScale);
1050 temp = fabs(kvTemp[0]);
1051 for (
int i = 1; i < 768; i++) {
1052 if (fabs(kvTemp[i]) > temp) {
1053 temp = fabs(kvTemp[i]);
1058 while (temp < 63.4) {
1060 kvScale = kvScale + 1;
1063 for (
int i = 0; i < 768; i++) {
1064 temp = kvTemp[i] * pow(2, (
double)kvScale);
1066 mlx90640->
kv[i] = (temp - 0.5);
1068 mlx90640->
kv[i] = (temp + 0.5);
1077 int16_t offsetSP[2];
1084 alphaScale = ((eeData[32] & 0xF000) >> 12) + 27;
1086 offsetSP[0] = (eeData[58] & 0x03FF);
1087 if (offsetSP[0] > 511) {
1088 offsetSP[0] = offsetSP[0] - 1024;
1091 offsetSP[1] = (eeData[58] & 0xFC00) >> 10;
1092 if (offsetSP[1] > 31) {
1093 offsetSP[1] = offsetSP[1] - 64;
1095 offsetSP[1] = offsetSP[1] + offsetSP[0];
1097 alphaSP[0] = (eeData[57] & 0x03FF);
1098 if (alphaSP[0] > 511) {
1099 alphaSP[0] = alphaSP[0] - 1024;
1101 alphaSP[0] = alphaSP[0] / pow(2, (
double)alphaScale);
1103 alphaSP[1] = (eeData[57] & 0xFC00) >> 10;
1104 if (alphaSP[1] > 31) {
1105 alphaSP[1] = alphaSP[1] - 64;
1107 alphaSP[1] = (1 + alphaSP[1] / 128) * alphaSP[0];
1109 cpKta = (eeData[59] & 0x00FF);
1111 cpKta = cpKta - 256;
1113 ktaScale1 = ((eeData[56] & 0x00F0) >> 4) + 8;
1114 mlx90640->
cpKta = cpKta / pow(2, (
double)ktaScale1);
1116 cpKv = (eeData[59] & 0xFF00) >> 8;
1120 kvScale = (eeData[56] & 0x0F00) >> 8;
1121 mlx90640->
cpKv = cpKv / pow(2, (
double)kvScale);
1123 mlx90640->
cpAlpha[0] = alphaSP[0];
1124 mlx90640->
cpAlpha[1] = alphaSP[1];
1125 mlx90640->
cpOffset[0] = offsetSP[0];
1126 mlx90640->
cpOffset[1] = offsetSP[1];
1132 uint8_t calibrationModeEE;
1134 calibrationModeEE = (eeData[10] & 0x0800) >> 4;
1135 calibrationModeEE = calibrationModeEE ^ 0x80;
1137 ilChessC[0] = (eeData[53] & 0x003F);
1138 if (ilChessC[0] > 31) {
1139 ilChessC[0] = ilChessC[0] - 64;
1141 ilChessC[0] = ilChessC[0] / 16.0f;
1143 ilChessC[1] = (eeData[53] & 0x07C0) >> 6;
1144 if (ilChessC[1] > 15) {
1145 ilChessC[1] = ilChessC[1] - 32;
1147 ilChessC[1] = ilChessC[1] / 2.0f;
1149 ilChessC[2] = (eeData[53] & 0xF800) >> 11;
1150 if (ilChessC[2] > 15) {
1151 ilChessC[2] = ilChessC[2] - 32;
1153 ilChessC[2] = ilChessC[2] / 8.0f;
1156 mlx90640->
ilChessC[0] = ilChessC[0];
1157 mlx90640->
ilChessC[1] = ilChessC[1];
1158 mlx90640->
ilChessC[2] = ilChessC[2];
1163 uint16_t pixCnt = 0;
1164 uint16_t brokenPixCnt = 0;
1165 uint16_t outlierPixCnt = 0;
1169 for (pixCnt = 0; pixCnt < 5; pixCnt++) {
1175 while (pixCnt < 768 && brokenPixCnt < 5 && outlierPixCnt < 5) {
1176 if (eeData[pixCnt + 64] == 0) {
1178 brokenPixCnt = brokenPixCnt + 1;
1179 }
else if ((eeData[pixCnt + 64] & 0x0001) != 0) {
1181 outlierPixCnt = outlierPixCnt + 1;
1184 pixCnt = pixCnt + 1;
1187 if (brokenPixCnt > 4) {
1189 }
else if (outlierPixCnt > 4) {
1191 }
else if ((brokenPixCnt + outlierPixCnt) > 4) {
1194 for (pixCnt = 0; pixCnt < brokenPixCnt; pixCnt++) {
1195 for (i = pixCnt + 1; i < brokenPixCnt; i++) {
1204 for (pixCnt = 0; pixCnt < outlierPixCnt; pixCnt++) {
1205 for (i = pixCnt + 1; i < outlierPixCnt; i++) {
1214 for (pixCnt = 0; pixCnt < brokenPixCnt; pixCnt++) {
1215 for (i = 0; i < outlierPixCnt; i++) {
1231 pixPosDif = pix1 - pix2;
1232 if (pixPosDif > -34 && pixPosDif < -30) {
1235 if (pixPosDif > -2 && pixPosDif < 2) {
1238 if (pixPosDif > 30 && pixPosDif < 34) {
1248 for (
int i = 0; i < n - 1; i++) {
1249 for (
int j = i + 1; j < n; j++) {
1250 if (values[j] < values[i]) {
1252 values[i] = values[j];
1259 return ((values[n / 2] + values[n / 2 - 1]) / 2.0);
1262 return values[n / 2];
1267 for (
int i = 0; i < 5; i++) {
1278 for (
int i = 0; i < 768; i += 32) {
1279 if ((frameData[i] == 0x7FFF) && frameData[833]) {
1289 if (auxData[0] == 0x7FFF)
1292 for (
int i = 8; i < 19; i++) {
1293 if (auxData[i] == 0x7FFF) {
1297 for (
int i = 20; i < 23; i++) {
1298 if (auxData[i] == 0x7FFF) {
1302 for (
int i = 24; i < 33; i++) {
1303 if (auxData[i] == 0x7FFF) {
1307 for (
int i = 40; i < 51; i++) {
1308 if (auxData[i] == 0x7FFF) {
1312 for (
int i = 52; i < 55; i++) {
1313 if (auxData[i] == 0x7FFF) {
1317 for (
int i = 56; i < 64; i++) {
1318 if (auxData[i] == 0x7FFF) {