<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.recessim.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gamerpaddy</id>
	<title>RECESSIM - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.recessim.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gamerpaddy"/>
	<link rel="alternate" type="text/html" href="https://wiki.recessim.com/view/Special:Contributions/Gamerpaddy"/>
	<updated>2026-05-01T11:07:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3215</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3215"/>
		<updated>2025-09-14T18:17:16Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: added professional pcb adapter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below).                                                                                &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
Create the files and the code inside.&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/raw.html'''      https://pastebin.com/kaiXwAgD&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/cgi-bin/proxy.cgi'''      https://pastebin.com/vii1HXcU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then run &lt;br /&gt;
 chmod +x /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
'''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click Start Stream&lt;br /&gt;
&lt;br /&gt;
'''NOTE''': ''&amp;lt;u&amp;gt;If it does not work&amp;lt;/u&amp;gt;'', check the contents of both files. FTP sometimes messes them up.&lt;br /&gt;
&lt;br /&gt;
also run &lt;br /&gt;
 dos2unix /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
because linux &amp;lt;&amp;gt; windows difficulties that couldnt be resolved in over 30 years.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
''See &amp;quot;Automatic Dead Pixels and Flatmap Correction&amp;quot; below how to create new dead pixel and flatmaps using the system menu.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Area - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Breakoutboard d8x3c dali v1.1.png|alt=|thumb|Breakout board for D8X3C]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to have a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
A open source project can be found here, it includes pin access to:&lt;br /&gt;
&lt;br /&gt;
*FPGA JTAG&lt;br /&gt;
*UART 3.3V with pin compatible FT232 socket&lt;br /&gt;
*Power 5V over USB-C&lt;br /&gt;
*5 Button inputs&lt;br /&gt;
*Buffered video output and socket for USB Videograbber&lt;br /&gt;
*Digital 14 bit video out header with hsync vsync and clk.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
the pcb layout has been tested and seems to work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Very basic fanout of pins to 2.54mm headers with a socket for a Video grabber and FT232 adapter and buttons. by gamerpaddy&lt;br /&gt;
https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;Professional adapter with integrated Video grabber and USB/UART bridge built in including a FFC connector for pin fanout and buttons. by TOA-HI / Killy.THI&lt;br /&gt;
&lt;br /&gt;
https://github.com/TOA-HI/Dali-Tech-D8X3C-Thermal-Camera-Backpack&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sending Serial Commands directly over UART==&lt;br /&gt;
&lt;br /&gt;
Sending Serial commands directly over UART to the core requires some additional bytes.&lt;br /&gt;
&lt;br /&gt;
The packet structure is as follows (Strip spaces, commands are allways uppercase and 3 chars)&lt;br /&gt;
 &amp;lt;STX&amp;gt; &amp;lt;LENGTH1&amp;gt; &amp;lt;LENGTH2&amp;gt; Command, Value, Checksum &amp;lt;ETX&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pseudocode to craft a command packet may look like this&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//cmd is allways 3 byte uppercase chars&lt;br /&gt;
//values can be multiple comma seperated like 320,240&lt;br /&gt;
function make_packet(cmd, values):&lt;br /&gt;
    payload = cmd + &amp;quot;,&amp;quot; + join(values, &amp;quot;,&amp;quot;) + &amp;quot;,&amp;quot;&lt;br /&gt;
    bytes = ascii(payload)&lt;br /&gt;
    length = len(bytes)&lt;br /&gt;
    checksum = sum(bytes) mod 256&lt;br /&gt;
    return [0x02, length&amp;amp;0xFF, length&amp;gt;&amp;gt;8] + bytes + [checksum, 0x03]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3206</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3206"/>
		<updated>2025-08-29T13:08:46Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Using the Thermal module without Webserver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below).                                                                                &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
Create the files and the code inside.&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/raw.html'''      https://pastebin.com/kaiXwAgD&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/cgi-bin/proxy.cgi'''      https://pastebin.com/vii1HXcU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then run &lt;br /&gt;
 chmod +x /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
'''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click Start Stream&lt;br /&gt;
&lt;br /&gt;
'''NOTE''': ''&amp;lt;u&amp;gt;If it does not work&amp;lt;/u&amp;gt;'', check the contents of both files. FTP sometimes messes them up.&lt;br /&gt;
&lt;br /&gt;
also run &lt;br /&gt;
 dos2unix /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
because linux &amp;lt;&amp;gt; windows difficulties that couldnt be resolved in over 30 years.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
''See &amp;quot;Automatic Dead Pixels and Flatmap Correction&amp;quot; below how to create new dead pixel and flatmaps using the system menu.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Area - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Breakoutboard d8x3c dali v1.1.png|alt=|thumb|Breakout board for D8X3C]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to have a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
A open source project can be found here, it includes pin access to:&lt;br /&gt;
&lt;br /&gt;
* FPGA JTAG&lt;br /&gt;
* UART 3.3V with pin compatible FT232 socket&lt;br /&gt;
* Power 5V over USB-C&lt;br /&gt;
* 5 Button inputs&lt;br /&gt;
* Buffered video output and socket for USB Videograbber&lt;br /&gt;
* Digital 14 bit video out header with hsync vsync and clk.&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
the pcb layout has been tested and seems to work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sending Serial Commands directly over UART ==&lt;br /&gt;
&lt;br /&gt;
Sending Serial commands directly over UART to the core requires some additional bytes.&lt;br /&gt;
&lt;br /&gt;
The packet structure is as follows (Strip spaces, commands are allways uppercase and 3 chars)&lt;br /&gt;
 &amp;lt;STX&amp;gt; &amp;lt;LENGTH1&amp;gt; &amp;lt;LENGTH2&amp;gt; Command, Value, Checksum &amp;lt;ETX&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pseudocode to craft a command packet may look like this&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//cmd is allways 3 byte uppercase chars&lt;br /&gt;
//values can be multiple comma seperated like 320,240&lt;br /&gt;
function make_packet(cmd, values):&lt;br /&gt;
    payload = cmd + &amp;quot;,&amp;quot; + join(values, &amp;quot;,&amp;quot;) + &amp;quot;,&amp;quot;&lt;br /&gt;
    bytes = ascii(payload)&lt;br /&gt;
    length = len(bytes)&lt;br /&gt;
    checksum = sum(bytes) mod 256&lt;br /&gt;
    return [0x02, length&amp;amp;0xFF, length&amp;gt;&amp;gt;8] + bytes + [checksum, 0x03]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3205</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3205"/>
		<updated>2025-08-29T13:03:50Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Using the Thermal module without Webserver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below).                                                                                &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
Create the files and the code inside.&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/raw.html'''      https://pastebin.com/kaiXwAgD&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/cgi-bin/proxy.cgi'''      https://pastebin.com/vii1HXcU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then run &lt;br /&gt;
 chmod +x /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
'''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click Start Stream&lt;br /&gt;
&lt;br /&gt;
'''NOTE''': ''&amp;lt;u&amp;gt;If it does not work&amp;lt;/u&amp;gt;'', check the contents of both files. FTP sometimes messes them up.&lt;br /&gt;
&lt;br /&gt;
also run &lt;br /&gt;
 dos2unix /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
because linux &amp;lt;&amp;gt; windows difficulties that couldnt be resolved in over 30 years.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
''See &amp;quot;Automatic Dead Pixels and Flatmap Correction&amp;quot; below how to create new dead pixel and flatmaps using the system menu.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Area - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Breakoutboard d8x3c dali v1.1.png|alt=|thumb|Breakout board for D8X3C]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to have a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
A open source project can be found here, it includes pin access to:&lt;br /&gt;
&lt;br /&gt;
FPGA JTAG&lt;br /&gt;
&lt;br /&gt;
UART 3.3V with pin compatible FT232 socket&lt;br /&gt;
&lt;br /&gt;
Power 5V over USB-C&lt;br /&gt;
&lt;br /&gt;
5 Button inputs&lt;br /&gt;
&lt;br /&gt;
Buffered video output and socket for USB Videograbber&lt;br /&gt;
&lt;br /&gt;
Digital 14 bit video out header with hsync vsync and clk.&lt;br /&gt;
&lt;br /&gt;
the pcb has been tested and seems to work.https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Breakoutboard_d8x3c_dali_v1.1.png&amp;diff=3204</id>
		<title>File:Breakoutboard d8x3c dali v1.1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Breakoutboard_d8x3c_dali_v1.1.png&amp;diff=3204"/>
		<updated>2025-08-29T13:01:29Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;fixed version&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3198</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3198"/>
		<updated>2025-08-15T17:14:50Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below).                                                                                &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
Create the files and the code inside.&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/raw.html'''      https://pastebin.com/kaiXwAgD&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/cgi-bin/proxy.cgi'''      https://pastebin.com/vii1HXcU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then run &lt;br /&gt;
 chmod +x /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
'''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click Start Stream&lt;br /&gt;
&lt;br /&gt;
'''NOTE''': ''&amp;lt;u&amp;gt;If it does not work&amp;lt;/u&amp;gt;'', check the contents of both files. FTP sometimes messes them up.&lt;br /&gt;
&lt;br /&gt;
also run &lt;br /&gt;
 dos2unix /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
because linux &amp;lt;&amp;gt; windows difficulties that couldnt be resolved in over 30 years.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
''See &amp;quot;Automatic Dead Pixels and Flatmap Correction&amp;quot; below how to create new dead pixel and flatmaps using the system menu.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Area - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A breakout board is still a work in progress&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3196</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3196"/>
		<updated>2025-08-06T00:26:32Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: breakout board setback&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below).                                                                                &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
Create the files and the code inside.&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/raw.html'''      https://pastebin.com/kaiXwAgD&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/cgi-bin/proxy.cgi'''      https://pastebin.com/vii1HXcU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then run &lt;br /&gt;
 chmod +x /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
'''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click Start Stream&lt;br /&gt;
&lt;br /&gt;
'''NOTE''': ''&amp;lt;u&amp;gt;If it does not work&amp;lt;/u&amp;gt;'', check the contents of both files. FTP sometimes messes them up.&lt;br /&gt;
&lt;br /&gt;
also run &lt;br /&gt;
 dos2unix /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
because linux &amp;lt;&amp;gt; windows difficulties that couldnt be resolved in over 30 years.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Area - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A breakout board is still a work in progress&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3193</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3193"/>
		<updated>2025-08-04T18:00:06Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Raw Viewer for the internal Webserver (recommended) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below).                                                                                &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
Create the files and the code inside.&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/raw.html'''      https://pastebin.com/kaiXwAgD&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/cgi-bin/proxy.cgi'''      https://pastebin.com/vii1HXcU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then run &lt;br /&gt;
 chmod +x /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
'''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click Start Stream&lt;br /&gt;
&lt;br /&gt;
'''NOTE''': ''&amp;lt;u&amp;gt;If it does not work&amp;lt;/u&amp;gt;'', check the contents of both files. FTP sometimes messes them up.&lt;br /&gt;
&lt;br /&gt;
also run &lt;br /&gt;
 dos2unix /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
because linux &amp;lt;&amp;gt; windows difficulties that couldnt be resolved in over 30 years.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Area - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3192</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3192"/>
		<updated>2025-08-04T17:49:54Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Automatic Dead Pixels and Flatmap Correction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below).                &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
Create the files and the code inside.&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/raw.html'''      https://pastebin.com/kaiXwAgD&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/cgi-bin/proxy.cgi'''      https://pastebin.com/vii1HXcU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then run &lt;br /&gt;
 chmod +x /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
'''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click Start Stream&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Area - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3191</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3191"/>
		<updated>2025-08-04T16:27:04Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Raw Viewer for the internal Webserver (recommended) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below).                &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
Create the files and the code inside.&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/raw.html'''      https://pastebin.com/kaiXwAgD&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
'''/app/web/webpages/cgi-bin/proxy.cgi'''      https://pastebin.com/vii1HXcU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then run &lt;br /&gt;
 chmod +x /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
'''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click Start Stream&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3190</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3190"/>
		<updated>2025-08-04T16:20:49Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Raw Viewer for the internal Webserver (recommended) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below).    &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
Download both files:&lt;br /&gt;
(Rev3, with histogram):&lt;br /&gt;
&lt;br /&gt;
raw.html https://pastebin.com/kaiXwAgD&lt;br /&gt;
&lt;br /&gt;
proxy.cgi https://pastebin.com/vii1HXcU&lt;br /&gt;
&lt;br /&gt;
then copy the '''raw.html''' into '''/app/web/webpages/'''&lt;br /&gt;
&lt;br /&gt;
the '''proxy.cgi''' into '''/app/web/webpages/cgi-bin'''&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
 chmod +x /app/web/webpages/cgi-bin/proxy.cgi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then '''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click '''Start Stream'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3189</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3189"/>
		<updated>2025-08-04T15:56:49Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Raw Viewer for the internal Webserver (recommended) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below). &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then download the '''rawviewer.zip''' from [https://archive.org/details/rawviewer_202508 here]  (rev3 with histogram, javascript)&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unpack the web folder into '''/app''' and run&lt;br /&gt;
 chmod +x /app/web/webpages/proxy.cgi&lt;br /&gt;
then edit the '''dali.cfg''' and change '''WEB_SERVER''' to '''lighttpd'''&lt;br /&gt;
&lt;br /&gt;
and then '''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click '''Start Stream'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3188</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3188"/>
		<updated>2025-08-04T15:43:01Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: chmod x forgot..&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below). &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then download the '''rawviewer.zip''' from [https://archive.org/details/rawviewer_202508 here]  (rev3 with histogram, javascript)&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unpack the web folder into '''/app''' and run&lt;br /&gt;
 chmod +x /app/web/webpages/proxy.cgi&lt;br /&gt;
and then '''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click '''Start Stream'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3187</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3187"/>
		<updated>2025-08-04T01:31:45Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below). &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then download the '''rawviewer.zip''' from [https://archive.org/details/rawviewer_202508 here]  (rev3 with histogram, javascript)&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unpack the web folder into '''/app''' and '''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click '''Start Stream'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000====&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3186</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3186"/>
		<updated>2025-08-04T01:31:07Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below). &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then download the '''rawviewer.zip''' from [https://archive.org/details/rawviewer_202508 here]  (rev3 with histogram, javascript)&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unpack the web folder into '''/app''' and '''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click '''Start Stream'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3185</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3185"/>
		<updated>2025-08-04T01:30:21Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: heading pagetitle im confused&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Dali D8X3N Thermal Camera Reverse Engineering=&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing the Video Stream==&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below). &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then download the '''rawviewer.zip''' from [https://archive.org/details/rawviewer_202508 here]  (rev3 with histogram, javascript)&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unpack the web folder into '''/app''' and '''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click '''Start Stream'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
====to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware Hacking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Thermal module without Webserver==&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sensor Pinout==&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3184</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3184"/>
		<updated>2025-08-04T01:29:02Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dali D8X3N Thermal Camera Reverse Engineering==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Viewing the Video Stream=&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for PC (Python)====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below). &lt;br /&gt;
&lt;br /&gt;
====Raw Viewer for the internal Webserver (recommended)====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then download the '''rawviewer.zip''' from [https://archive.org/details/rawviewer_202508 here]  (rev3 with histogram, javascript)&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unpack the web folder into '''/app''' and '''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click '''Start Stream'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Patching Device===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet and ftpd permanently====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
====to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hardware Hacking =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dali Commands==&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Secret Menu Overview==&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Using the Thermal module without Webserver=&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Sensor Pinout=&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3183</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3183"/>
		<updated>2025-08-04T01:27:49Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: Added web raw viewer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dali D8X3N Thermal Camera Reverse Engineering==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D8X3N Module closer look==&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Viewing the Video Stream=&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viewing Raw Thermal Data from the Web API==&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
==== Raw Viewer for PC (Python) ====&lt;br /&gt;
[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
rev3 and onward will only be available directly as a Webpage on the Device (see below). &lt;br /&gt;
&lt;br /&gt;
==== Raw Viewer for the internal Webserver (recommended) ====&lt;br /&gt;
It is also possible to use the Raw viewer directly in the browser.&lt;br /&gt;
&lt;br /&gt;
To achieve this, the stream had to be proxied from port 5000 to 80 due to CORS.&lt;br /&gt;
&lt;br /&gt;
luckily the internal lighttpd had the CGI module enabled, so piping it troug (using wget ... i know) worked with very low overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install, you need '''Terminal access''' to the Camera. see below.&lt;br /&gt;
&lt;br /&gt;
optional for simplicity: '''ftp''' access&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then download the '''rawviewer.zip''' from [https://archive.org/details/rawviewer_202508 here]  (rev3 with histogram, javascript)&lt;br /&gt;
[[File:Dali D8X3N Webviewer.png|thumb|Web Raw Viewer with histogram (rev3)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unpack the web folder into '''/app''' and '''restart''' your camera.&lt;br /&gt;
&lt;br /&gt;
It should be accessible now trough '''http://&amp;lt;camera ip&amp;gt;/raw.html''' in the browser and click '''Start Stream'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;performance may need improvement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting Root Terminal Access==&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Enabling Telnet access to make patching easier====&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Patching Device ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Telnet and ftpd permanently ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
====to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Patching the Thermal Camera module====&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dali Commands===&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Secret Menu Overview===&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Thermal module without Webserver===&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sensor Pinout===&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Webviewer.png&amp;diff=3182</id>
		<title>File:Dali D8X3N Webviewer.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Webviewer.png&amp;diff=3182"/>
		<updated>2025-08-04T01:20:15Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;web page to view raw video stream&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Raw_webviewer.zip&amp;diff=3181</id>
		<title>File:Dali D8X3N Raw webviewer.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Raw_webviewer.zip&amp;diff=3181"/>
		<updated>2025-08-04T01:10:38Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;files to patch the web server for raw viewer&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3180</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3180"/>
		<updated>2025-08-03T19:49:29Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Viewing Raw Thermal Data from the Web API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dali D8X3N Thermal Camera Reverse Engineering==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===D8X3N Module closer look===&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing the Video Stream===&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing Raw Thermal Data from the Web API===&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
rev1 first working version  https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
rev2 with temperature readout  https://pastebin.com/u107Q85w&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Getting Root Terminal Access===&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===(optional) Enabling Telnet access to make patching easier===&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
====to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
===Patching the Thermal Camera module===&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dali Commands===&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Secret Menu Overview===&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Thermal module without Webserver===&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sensor Pinout===&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3179</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3179"/>
		<updated>2025-08-03T19:34:22Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Viewing Raw Thermal Data from the Web API */ formatting fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dali D8X3N Thermal Camera Reverse Engineering==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===D8X3N Module closer look===&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing the Video Stream===&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing Raw Thermal Data from the Web API===&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
====Source (Stream Type)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
====Type (Data Format)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
====Mode (Transport Protocol)====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
====Quality Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
====Network Parameters====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
====Snapshot Parameters====&lt;br /&gt;
&lt;br /&gt;
*[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Getting Root Terminal Access===&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===(optional) Enabling Telnet access to make patching easier===&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
====to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
=====(optional) patching app.sh to prevent it from rebooting=====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
===Patching the Thermal Camera module===&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dali Commands===&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Secret Menu Overview===&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Dead Pixels and Flatmap Correction===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dead pixels:=====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Flatfield:=====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Thermal module without Webserver===&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sensor Pinout===&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3178</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3178"/>
		<updated>2025-08-03T19:33:11Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: added secret menu tree&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dali D8X3N Thermal Camera Reverse Engineering==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===D8X3N Module closer look===&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing the Video Stream===&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing Raw Thermal Data from the Web API===&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
======'''Source''' (Stream Type)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
======'''Type''' (Data Format)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
======'''Mode''' (Transport Protocol)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
======'''Quality Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
======'''Network Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
======'''Snapshot Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Getting Root Terminal Access===&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) '''RX TX GND 3.3V Baud 115200 3.3V!''' &lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot; commands.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===(optional) Enabling Telnet access to make patching easier===&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the '''upgrade_ici.exe''' form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet.&lt;br /&gt;
&lt;br /&gt;
The Login credentials are '''User: roo'''t  '''Password: DLroot'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
====to permanently enable Telnet, go to '''/etc/init.d''' and edit '''S90app'''====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the '''#''' at '''#telnetd''' and press x&amp;lt;blockquote&amp;gt;optional: enable ftp by removing the '''#''' at '''ftpd''' and adjust the path to /  &amp;lt;/blockquote&amp;gt;now press ''':''' and type '''wq''' and hit '''enter'''. this should be it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
===== (optional) patching app.sh to prevent it from rebooting =====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
===Patching the Thermal Camera module===&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Settings offset 0x200000====&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dali Commands===&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Secret Menu Overview ===&lt;br /&gt;
The secret menus Main and System can be openend with the password '''+-MC+-'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its structured like this, not all variables have been figured out yet.&lt;br /&gt;
&lt;br /&gt;
The format is Menu: submenu: submenu:&lt;br /&gt;
&lt;br /&gt;
and for menu entries: Name, default value, command, description or messages that pop up.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
MAIN &amp;amp; SYSTEM PASS: +-MC+-&lt;br /&gt;
&lt;br /&gt;
entries are NAME VALUE COMMAND DESC or if its a folder its just &amp;quot;:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
System:&lt;br /&gt;
	System:&lt;br /&gt;
        Gain    255 SCO&lt;br /&gt;
        Bright  102 IBR&lt;br /&gt;
        BenDi   100 ?&lt;br /&gt;
        BenDiContrase   80  ?&lt;br /&gt;
        DisMode 0   ?&lt;br /&gt;
        Frequency   48hz (24,25,48,50)&lt;br /&gt;
        DigitalOut  8-14bit  14bit, BT656(_P), ?, BT601&lt;br /&gt;
        AutoFocus   N   ?&lt;br /&gt;
        Line    1   ?&lt;br /&gt;
        Ltemp0  11800   ?&lt;br /&gt;
        LTemp1  11000   ?&lt;br /&gt;
        HTemp0 9500     ?&lt;br /&gt;
        HTemp1 8700 ?&lt;br /&gt;
        DelayTime   0   ?&lt;br /&gt;
        Enhance   0-1 ?&lt;br /&gt;
        Enhanced E1  230 ?&lt;br /&gt;
        FPA_Gain 12pF   ? between 4 and 18 at random.&lt;br /&gt;
        NUCEn   N   ?&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
	Area:&lt;br /&gt;
        SE  2  ASN 0-4 &amp;quot;Partition&amp;quot;&lt;br /&gt;
        INT 200 INT &amp;quot;Points time&amp;quot;&lt;br /&gt;
        VS  3161    SVS&lt;br /&gt;
        VF  2800    SVF&lt;br /&gt;
        Vtemp 1401  VTP&lt;br /&gt;
        VtempArea   Low ?&lt;br /&gt;
        VtempBase   13500  ?&lt;br /&gt;
        VtempStep   -1  ?&lt;br /&gt;
        VsStep  8   ?&lt;br /&gt;
        DeadPixelModel  preset / calculate&lt;br /&gt;
        DP: Cursor to select dead pixels&lt;br /&gt;
            X 360 position&lt;br /&gt;
            Y 288 position&lt;br /&gt;
            AutoBP: 50  Press C to start automatic dotting&lt;br /&gt;
            Quit?   Number of bad pixels 961&amp;amp; &amp;quot;Blind element replacement in progress&amp;quot; &lt;br /&gt;
            Undo&lt;br /&gt;
        R2: Save data? blind pixel replacement in progress&lt;br /&gt;
        Replace Y   N = DPI, Y = API&lt;br /&gt;
        L:  Reading parameters&lt;br /&gt;
        S:  Saving parameters&lt;br /&gt;
&lt;br /&gt;
	Debug:&lt;br /&gt;
		Rectify N&lt;br /&gt;
        DisplayGary N&lt;br /&gt;
        TE  N   SDT&lt;br /&gt;
        AutoE  ?    ?&lt;br /&gt;
        AutoVS  Y   ?&lt;br /&gt;
        VSGrayH 8000    ?&lt;br /&gt;
        VSGrayL 7000    ?&lt;br /&gt;
        Trends  1   ?&lt;br /&gt;
        Shelter N   ?&lt;br /&gt;
        MotorCon    3   ?&lt;br /&gt;
        SaveFactoryPara:&lt;br /&gt;
        LanTyp  EN  ?   LANGUAGE&lt;br /&gt;
        DisplayMT   N   ?&lt;br /&gt;
        Version:&lt;br /&gt;
            PRJ D843 DLD640 ImLib, MTlib, Soft, Logic&lt;br /&gt;
&lt;br /&gt;
    BackDispose:&lt;br /&gt;
        GammaEN 1   ?&lt;br /&gt;
        Gain    1   ?&lt;br /&gt;
        EnhanceEN   0   ?&lt;br /&gt;
        Hpf_shift   5   ?&lt;br /&gt;
        Hpf_thrd    5   ?&lt;br /&gt;
        Enhance 150 ? &lt;br /&gt;
        Lthrd   50  ?&lt;br /&gt;
&lt;br /&gt;
    Monitor: &lt;br /&gt;
        Opens normal OSD&lt;br /&gt;
&lt;br /&gt;
    Alarm Set:&lt;br /&gt;
        Alarm Switch    Y   ?&lt;br /&gt;
        Alarm Mode  No  ?&lt;br /&gt;
        Alarm Temperature   -1°C  ?&lt;br /&gt;
        Reference Gray  Y   ?&lt;br /&gt;
        Alarm Level 1L  ?&lt;br /&gt;
        Alarm Gray  65535   ?&lt;br /&gt;
        Alarm PointNum  0   ?&lt;br /&gt;
        Correct Gray    0   ?&lt;br /&gt;
&lt;br /&gt;
    Thermometry:&lt;br /&gt;
        Data Collection 0   SMS&lt;br /&gt;
        Interval    60  SCP&lt;br /&gt;
        Ammount     90  SCT&lt;br /&gt;
        Environment normal  ?&lt;br /&gt;
        Export:&lt;br /&gt;
            Displays: Exportin normal temperature MTC data&lt;br /&gt;
        Correction  -1  ?&lt;br /&gt;
        Emissivity  100 SEM&lt;br /&gt;
        Calibration:&lt;br /&gt;
            BlackbodyTemp -10   grabs a val from GAB&lt;br /&gt;
            Save    CBS&lt;br /&gt;
            Cancel  CBD&lt;br /&gt;
        Correction:&lt;br /&gt;
            BlackbodyTemp   -10 Picks from the list GAR&lt;br /&gt;
            Grayscale   0   SLG&lt;br /&gt;
            Confirm LRE&lt;br /&gt;
            Save    LRS&lt;br /&gt;
            Cancel  LRD&lt;br /&gt;
        Ninepoint measurement   SMV&lt;br /&gt;
&lt;br /&gt;
    Cursor:&lt;br /&gt;
        Cur N   DRC enable cursor&lt;br /&gt;
        X   320 SRP set cursor position&lt;br /&gt;
        Y   240 SRP set cursor position&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
    Auto    2   SAG Auto gain&lt;br /&gt;
    G   211 SVC &lt;br /&gt;
    B   10002   SVB &lt;br /&gt;
    P   1   SWP polarity&lt;br /&gt;
    Z   X   ?&lt;br /&gt;
    Settings:&lt;br /&gt;
        Image:&lt;br /&gt;
            FI  Y  ? &lt;br /&gt;
            FIValue 0 ? 0-31&lt;br /&gt;
            Freeze  N   Freeze image&lt;br /&gt;
            VE  N   SMR Vertical flip&lt;br /&gt;
            HO  N   SMR Horizontal flip&lt;br /&gt;
            AutoCali    L   same as rectify?&lt;br /&gt;
            O   IN  internal or external&lt;br /&gt;
        COM:&lt;br /&gt;
            Opens UART menu&lt;br /&gt;
        AvoidburnSwitch OFF enable anti burn in&lt;br /&gt;
        ProtectedTime   10S duration&lt;br /&gt;
        AvoidBurn   16383   threshold to trigger antiburn&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automatic Dead Pixels and Flatmap Correction ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It it possible to generate a new flat and dead pixel map automatically within the camera after flashing the cleared-map binary.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Dead pixels: =====&lt;br /&gt;
In the secret menu &amp;quot;System&amp;quot;, navigate to Debug - DeadPixelModel and set the AutoBP (sensitivity for auto bad pixel finding) to 50 or so. Then press C Button &lt;br /&gt;
&lt;br /&gt;
This can take a while. &lt;br /&gt;
[[File:High emissivity peltier black body.jpg|thumb|A Peltier / TEC coated in Candle sood to give it a high emissivity surface. It can be cooled or heated by swapping the polarity. ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards, navigate to S: and press + to save it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Flatfield: =====&lt;br /&gt;
In the Debug menu navigate to R2 and press +&lt;br /&gt;
&lt;br /&gt;
now place something '''Cold''' infront of the Camera with a high emissivity. (it needs to fill the whole image)&lt;br /&gt;
&lt;br /&gt;
Press '''+''', wait for it to says High temperature.&lt;br /&gt;
&lt;br /&gt;
Place something '''Hot''' infront and press '''+''' again.  &lt;br /&gt;
&lt;br /&gt;
Afterwards, save with '''S:''' again. &lt;br /&gt;
&lt;br /&gt;
Flatfield should now be calibrated&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;blockquote&amp;gt;Note: Not all dead pixels are auto detected or get removed. you can manually select them in the Dead pixel editor but its not known yet how to select and correct them.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Thermal module without Webserver===&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sensor Pinout===&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:High_emissivity_peltier_black_body.jpg&amp;diff=3177</id>
		<title>File:High emissivity peltier black body.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:High_emissivity_peltier_black_body.jpg&amp;diff=3177"/>
		<updated>2025-08-03T19:22:27Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Peltier with high emissivity coating for thermal calibration&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3176</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3176"/>
		<updated>2025-08-03T16:56:49Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Patching the Thermal Camera module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dali D8X3N Thermal Camera Reverse Engineering==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===D8X3N Module closer look===&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing the Video Stream===&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing Raw Thermal Data from the Web API===&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
======'''Source''' (Stream Type)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
======'''Type''' (Data Format)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
======'''Mode''' (Transport Protocol)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
======'''Quality Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
======'''Network Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
======'''Snapshot Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Getting Root Terminal Access===&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) RX TX GND 3.3V &lt;br /&gt;
&lt;br /&gt;
Baud 115200&lt;br /&gt;
&lt;br /&gt;
3.3V&lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===(optional) Enabling Telnet access to make patching easier===&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the upgrade_ici.exe form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet. the Login credentials are User: root  Password: DLroot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
====to permanently enable Telnet, go to /etc/init.d and edit S90app====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the # at #telnetd and press x&lt;br /&gt;
&lt;br /&gt;
now press : and type wq, enter. this should be it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====(optional) patching app.sh to prevent it from rebooting====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Thermal Camera module===&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.    &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download the Binary &amp;quot;Dali 640x480 '''actual''' cleared pixelmap.bin&amp;quot;  from #3 below and load it into NeoProgrammer,   &lt;br /&gt;
&lt;br /&gt;
Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
On archive, click on show all files to download them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;1 a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;2 a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;3 a modified Flash dump of a 640x480 with cleared dead pixel map, flat map etc. can be found [https://archive.org/details/d-843-n-640x-480-cleared-pixelmap here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Settings offset 0x200000======&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dali Commands===&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Thermal module without Webserver===&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sensor Pinout===&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3175</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3175"/>
		<updated>2025-08-03T16:51:19Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* Flash Contents */ added actual cleared pixelmap bin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dali D8X3N Thermal Camera Reverse Engineering==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===D8X3N Module closer look===&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing the Video Stream===&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing Raw Thermal Data from the Web API===&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
======'''Source''' (Stream Type)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
======'''Type''' (Data Format)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
======'''Mode''' (Transport Protocol)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
======'''Quality Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
======'''Network Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
======'''Snapshot Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Getting Root Terminal Access===&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) RX TX GND 3.3V &lt;br /&gt;
&lt;br /&gt;
Baud 115200&lt;br /&gt;
&lt;br /&gt;
3.3V&lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===(optional) Enabling Telnet access to make patching easier===&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the upgrade_ici.exe form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet. the Login credentials are User: root  Password: DLroot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
====to permanently enable Telnet, go to /etc/init.d and edit S90app====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the # at #telnetd and press x&lt;br /&gt;
&lt;br /&gt;
now press : and type wq, enter. this should be it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====(optional) patching app.sh to prevent it from rebooting====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Thermal Camera module===&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.  &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
Download the Binary 640x480 cleared pixelmap from below and load it into NeoProgrammer,  Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
(use the actual cleared pixelmap for a clean BPRP, Flat and Offsetmap.)&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Settings offset 0x200000======&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dali Commands===&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Thermal module without Webserver===&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sensor Pinout===&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3174</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3174"/>
		<updated>2025-08-03T15:42:38Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: add secret keycombination&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dali D8X3N Thermal Camera Reverse Engineering==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===D8X3N Module closer look===&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing the Video Stream===&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The password for the locked System and Main menu is&lt;br /&gt;
 +-MC+-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing Raw Thermal Data from the Web API===&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
======'''Source''' (Stream Type)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
======'''Type''' (Data Format)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
======'''Mode''' (Transport Protocol)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
======'''Quality Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
======'''Network Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
======'''Snapshot Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Getting Root Terminal Access===&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) RX TX GND 3.3V &lt;br /&gt;
&lt;br /&gt;
Baud 115200&lt;br /&gt;
&lt;br /&gt;
3.3V&lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===(optional) Enabling Telnet access to make patching easier===&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the upgrade_ici.exe form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet. the Login credentials are User: root  Password: DLroot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
====to permanently enable Telnet, go to /etc/init.d and edit S90app====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the # at #telnetd and press x&lt;br /&gt;
&lt;br /&gt;
now press : and type wq, enter. this should be it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====(optional) patching app.sh to prevent it from rebooting====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Thermal Camera module===&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.  &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
Download the Binary 640x480 cleared pixelmap from below and load it into NeoProgrammer,  Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Settings offset 0x200000======&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dali Commands===&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Thermal module without Webserver===&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sensor Pinout===&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3170</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3170"/>
		<updated>2025-07-29T14:56:43Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: /* change heading format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dali D8X3N Thermal Camera Reverse Engineering==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===D8X3N Module closer look===&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===User Manual===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing the Video Stream===&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web Interface===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OSD====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
The Password for System and Main menu are not known yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Viewing Raw Thermal Data from the Web API===&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
======'''Source''' (Stream Type)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
*&amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
*&amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
*&amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
*&amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
======'''Type''' (Data Format)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
*&amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
*&amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
*&amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
*&amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
======'''Mode''' (Transport Protocol)======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
*&amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
*&amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
======'''Quality Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
*&amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
*&amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
======'''Network Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
*&amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
======'''Snapshot Parameters'''======&lt;br /&gt;
&lt;br /&gt;
*[[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Getting Root Terminal Access===&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) RX TX GND 3.3V &lt;br /&gt;
&lt;br /&gt;
Baud 115200&lt;br /&gt;
&lt;br /&gt;
3.3V&lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===(optional) Enabling Telnet access to make patching easier===&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the upgrade_ici.exe form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet. the Login credentials are User: root  Password: DLroot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Web Server===&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
====to permanently enable Telnet, go to /etc/init.d and edit S90app====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the # at #telnetd and press x&lt;br /&gt;
&lt;br /&gt;
now press : and type wq, enter. this should be it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====patching the decoder and streamer to 640x480:====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====(optional) patching app.sh to prevent it from rebooting====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching the Thermal Camera module===&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.  &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
Download the Binary 640x480 cleared pixelmap from below and load it into NeoProgrammer,  Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Contents===&lt;br /&gt;
a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Flash Binary Analysis===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Settings offset 0x200000======&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dali Commands===&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Thermal module without Webserver===&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sensor Pinout===&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3169</id>
		<title>Dali D8X3N Thermal Camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=Dali_D8X3N_Thermal_Camera&amp;diff=3169"/>
		<updated>2025-07-29T14:55:57Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: Refinement milestone&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dali D8X3N Thermal Camera Reverse Engineering==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
The [https://www.dali-irtech.com/productinfo/741567.html Dali D8X3N] Thermal Camera module comes in two versions, a 384x288 and 640x480 resolution, utilizing the [http://www.dali-tech.us/products/dld64017m-uncooled-infrared-fpa-detector-86.html DLD Series] of amorphous-Silicon Microbolometers.&lt;br /&gt;
&lt;br /&gt;
They were mainly used in [http://www.dali-tech.us/products/dm60-w--online-body-temperature-thermal-imaging-camera-55.html Dali DM60-W] or WS-1 Body Temperature screening cameras in conjunction with a Black Body radiator set to 37°C to detect infected individuals at the start of the 2020 Covid Pandemic.&lt;br /&gt;
[[File:ICI FM320P Innerts.jpg|thumb|Internals. A TP-Link Switch, HikVision Visible Camera and the D8x3N Network thermal camera module]]&lt;br /&gt;
[https://infraredcameras.com/ ICI] rebranded these models as FM 320 P and FM 640 P, and distributed them on the local US market, but as the need for such Cameras exploded, those models were built with what was in stock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So happens, that some of the FM 320 P Models had a DLD640 640x480 instead of a DLD384 384x288 Microbolometer in them, and just got their Firmware modified.&lt;br /&gt;
&lt;br /&gt;
It also could be, because they have excessive amounts of bad pixels outside the 384x288 area, that they were binned to a lower grade. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Discussions about these Cameras started around 2022 in the [https://www.eevblog.com/forum/thermal-imaging/ici-and-dali-thermal-camera-software/ EEVBlog Forums.] when they started to appear secondhand and affordable. &lt;br /&gt;
&lt;br /&gt;
Originally they were priced around US$ 20... 30.000 by ICI, and a unknown amount by Dali Tech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Modules specs according to the manufacturer are:&lt;br /&gt;
&lt;br /&gt;
≤50..60mK@F1，300K，50Hz&lt;br /&gt;
&lt;br /&gt;
17 or 25µm pixel pitch&lt;br /&gt;
&lt;br /&gt;
Hisilicon SoC running Linux to provide Onvif and RTSP streams, analysis and a Web UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Module.jpg|thumb|A real 384x288 model with a DLD384 sensor. notice the Productnumber ]]&lt;br /&gt;
ICI FM Cameras are found all over Online secondhand marketplaces for scrap Prices, as they are no longer needed.&lt;br /&gt;
&lt;br /&gt;
But you never know, what are you getting. It could be a real DLD384 or the better DLD640 inside. Its a gamble.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======640x480 Imagers======&lt;br /&gt;
are labeled 22D843 Nxxxx and have a DLD640 sensor in it, they can be upgraded if they run the 384x288 firmware.&lt;br /&gt;
&lt;br /&gt;
======384x288 Imagers======&lt;br /&gt;
are labeled 22D883Nxxxx and have a DLD384 sensor in it, they cannot be upgraded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===D8X3N Module closer look===&lt;br /&gt;
From now on, i will refer to the Thermal Imaging Module as TIM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the front there is a 2 Element Germanium Lens of a unknown focal length and aperture.&lt;br /&gt;
&lt;br /&gt;
It can be focus-adjusted when unscrewing the clamp around the housing. It can be focussed from infinity down to 10..20cm with some quality loss.&lt;br /&gt;
&amp;lt;br /&amp;gt;The outter diameter of the Lens is 42mm with a 1 1/3 inch thread diameter of undetermined pitch. &lt;br /&gt;
&lt;br /&gt;
Dimensions of the germanium elements are 21mm to 3 and 6mm and 14grams in weight.&lt;br /&gt;
[[File:Disassembled Thermal Camera Lens.jpg|thumb|Two element Germanium Lens of unknown focal length and aperture]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The TIM is composed of 6 Stacked PCB modules, 3 of which are for the Web Server functionality.  taking them off will give you the basic configuration of a [https://www.dalithermal.com/productinfo/741568.html Dali D8X3C] TIM&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Dali DLD640 Thermal Image Sensor.jpeg|DLD640 Sensor&lt;br /&gt;
File:Dali DLD384 Thermal Imaging Sensor.jpeg|DLD384 Sensor&lt;br /&gt;
File:Dali D8X3N Board1 Back.jpeg|Network &amp;amp; GPIO Board Back&lt;br /&gt;
File:Dali D8X3N Board1 Front.jpeg|Network &amp;amp; GPIO Board Front&lt;br /&gt;
File:Dali D8X3N Glue Board Back.jpeg|Board between Logic and IO Back&lt;br /&gt;
File:Dali D8X3N Glue Board Front.jpeg|Board between Logic and IO Front&lt;br /&gt;
File:Dali D8X3N SoC Board Back.jpeg|SoC Board back&lt;br /&gt;
File:Dali D8X3N SoC Board front.jpeg|SoC board front&lt;br /&gt;
File:Dali D8X3N FPGA Board Back.jpeg|FPGA Board of the D8X3C Thermal Imager including a PMIC&lt;br /&gt;
File:Dali D8X3N FPGA Board Front.jpeg|FPGA Board Front with Video DAC and SPI Flash&lt;br /&gt;
File:Dali D8X3N Sensor Power and ADC Board.jpeg|Sensor control and ADC board&lt;br /&gt;
File:Dali D8X3N Thermal Core Debug wiring.jpeg|Debug wiring for sniffing SPI and UART&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Manual ===&lt;br /&gt;
including pinout diagram and important data&lt;br /&gt;
&lt;br /&gt;
can be found here https://archive.org/details/dali-d-8-x-3-cuser-manualen-v-1.0-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Viewing the Video Stream ===&lt;br /&gt;
[[File:Onvif Device Manager ODM.png|thumb|ODM streaming the Thermal view]]&lt;br /&gt;
when first connecting it to power and Ethernet, the camera will have 192.168.1.102 as a Static ip.&lt;br /&gt;
&lt;br /&gt;
If you are running a 192.168.0.x or .178.x net, you need to change it or add a subnet under windows ipv4 settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to view it, you can use VLC and the stream URL &lt;br /&gt;
 rtsp://admin@admin:&amp;lt;camera ip&amp;gt;/ONVIFMedia&lt;br /&gt;
there is /ONVIFMedia /ONVIFMediaM and /ONVIFMediaS for different stream Profiles.&lt;br /&gt;
&lt;br /&gt;
VLC is quite slow and delayed, rather use Onvif Device Manager ODM,&lt;br /&gt;
&lt;br /&gt;
it has no delay and auto-detects cameras in the network. &lt;br /&gt;
&lt;br /&gt;
Be sure to log in as user: admin  pass: admin in ODM.&lt;br /&gt;
&lt;br /&gt;
in there, you can also set you camera to DHCP under Network settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Web Interface ===&lt;br /&gt;
[[File:Dali D8X3N web interface.png|thumb|Since browsers cant display RTSP anymore, open in Edge and select IE Compatibility Mode.]]&lt;br /&gt;
the web interface can be accessed by opening the camera IP in a browser&lt;br /&gt;
&lt;br /&gt;
login is:&lt;br /&gt;
 user: admin pass: admin&lt;br /&gt;
You can set Temperature markers and areas, but without using the Black Body calibration source, your readings may be way off or not working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OSD ====&lt;br /&gt;
there is a debug-login with &lt;br /&gt;
 user: super  pass: 871897 &lt;br /&gt;
that lets you send Key commands to the Imager to navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
Setting the OSD to english is accomplished with option #11&lt;br /&gt;
[[File:Dali D8X3C OSD.png|thumb|OSD in english, if yours is Chinese. go to option #11 and click + or -]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To acces some locked menus, press &lt;br /&gt;
 + - + - + -&lt;br /&gt;
The Password for System and Main menu are not known yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful in the UART menu to not change the BAUD rate or Protocol, as your ability to control it via the Web API gets lost.&lt;br /&gt;
&lt;br /&gt;
You need to reflash or solder buttons on the thermal core then.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Viewing Raw Thermal Data from the Web API ===&lt;br /&gt;
there is a hidden endpoint in the stream.so file that could be found while decompiling&lt;br /&gt;
&lt;br /&gt;
accessing&lt;br /&gt;
[[File:Arduino Nano blink sketch thermal gif.gif|thumb|Arduino Nano running blink sketch while thermally recording it, notice the led and resistor on the right]]&lt;br /&gt;
 &amp;lt;ip of camera&amp;gt;:5000/stream?Type=JPEG&amp;amp;Source=Jpeg&amp;amp;Mode=TCP&lt;br /&gt;
lets you download a JPEG. but there are more options available (not all have been tested)&lt;br /&gt;
&lt;br /&gt;
we are mainly interessted in Raw thermal data.&lt;br /&gt;
&lt;br /&gt;
=== '''Source''' (Stream Type) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Major&amp;lt;/code&amp;gt; - Main video stream (channel 0)&lt;br /&gt;
* &amp;lt;code&amp;gt;Minor&amp;lt;/code&amp;gt; - Sub video stream (channel 1)&lt;br /&gt;
* &amp;lt;code&amp;gt;MinorAV&amp;lt;/code&amp;gt; - Sub video + audio stream&lt;br /&gt;
* &amp;lt;code&amp;gt;MajorAV&amp;lt;/code&amp;gt; - Main video + audio stream&lt;br /&gt;
* &amp;lt;code&amp;gt;Jpeg&amp;lt;/code&amp;gt; - JPEG snapshot stream&lt;br /&gt;
* &amp;lt;code&amp;gt;Raw&amp;lt;/code&amp;gt; - Raw thermal data stream&lt;br /&gt;
* &amp;lt;code&amp;gt;YUV&amp;lt;/code&amp;gt; - YUV raw video stream&lt;br /&gt;
&lt;br /&gt;
=== '''Type''' (Data Format) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;H264&amp;lt;/code&amp;gt; - H.264 video encoding&lt;br /&gt;
* &amp;lt;code&amp;gt;JPEG&amp;lt;/code&amp;gt; - JPEG image format&lt;br /&gt;
* &amp;lt;code&amp;gt;RAW&amp;lt;/code&amp;gt; - Raw sensor data&lt;br /&gt;
* &amp;lt;code&amp;gt;QBOX&amp;lt;/code&amp;gt; - Custom protocol format&lt;br /&gt;
* &amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; - Frame-based format&lt;br /&gt;
&lt;br /&gt;
=== '''Mode''' (Transport Protocol) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;TCP&amp;lt;/code&amp;gt; - TCP streaming (default)&lt;br /&gt;
* &amp;lt;code&amp;gt;UDP&amp;lt;/code&amp;gt; - UDP streaming&lt;br /&gt;
* &amp;lt;code&amp;gt;MUL&amp;lt;/code&amp;gt; - Multicast streaming&lt;br /&gt;
&lt;br /&gt;
=== '''Quality Parameters''' ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Quality=[1-100]&amp;lt;/code&amp;gt; - Video quality level&lt;br /&gt;
* &amp;lt;code&amp;gt;Frames=[number]&amp;lt;/code&amp;gt; - Number of frames to send&lt;br /&gt;
* &amp;lt;code&amp;gt;Interval=[ms]&amp;lt;/code&amp;gt; - Frame interval in milliseconds&lt;br /&gt;
&lt;br /&gt;
=== '''Network Parameters''' ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;IPAddr=[ip]&amp;lt;/code&amp;gt; - Client IP address for UDP/multicast&lt;br /&gt;
* &amp;lt;code&amp;gt;Port=[port]&amp;lt;/code&amp;gt; - Client port for UDP/multicast&lt;br /&gt;
* &amp;lt;code&amp;gt;Heart-beat=[Yes/No]&amp;lt;/code&amp;gt; - Enable/disable heartbeat&lt;br /&gt;
&lt;br /&gt;
=== '''Snapshot Parameters''' ===&lt;br /&gt;
&lt;br /&gt;
* [[File:Dali D8X3N Raw Thermal viewer.png|thumb|Raw Data Viewer in python]]&amp;lt;code&amp;gt;Snap=[Yes/No]&amp;lt;/code&amp;gt; - Enable snapshot mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To view the raw stream, i made a python program that converts the 14bit thermal data to a visible image.&lt;br /&gt;
&lt;br /&gt;
it is low fps tho, due  to bad optimizations. &lt;br /&gt;
&lt;br /&gt;
https://pastebin.com/dyNWDPT3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting Root Terminal Access ===&lt;br /&gt;
To access the Terminal you need to solder or plug in a UART connection to Connector J7 on the &amp;quot;Glue&amp;quot; board. &lt;br /&gt;
&lt;br /&gt;
Pinout is (left to right) RX TX GND 3.3V &lt;br /&gt;
&lt;br /&gt;
Baud 115200&lt;br /&gt;
&lt;br /&gt;
3.3V&lt;br /&gt;
&lt;br /&gt;
But the system will spam with debug messages, making patching the files a hard job unless you use &amp;quot;tftp&amp;quot; or &amp;quot;sed&amp;quot;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== (optional) Enabling Telnet access to make patching easier ===&lt;br /&gt;
[[File:Upgrade ici dali firmware updater.png|thumb|ICI Firmware updater software with modified firmware loaded]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
there is a easier way using a modified Firmware updater to enable Telnet temporarily to patch the Files.&lt;br /&gt;
&lt;br /&gt;
Download the upgrade_ici.exe form [https://archive.org/details/fwupdate here] and run it. &lt;br /&gt;
&lt;br /&gt;
Then you should be able to connect to it via Telnet. the Login credentials are User: root  Password: DLroot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Patching the Web Server ===&lt;br /&gt;
This only works if you also patch the Thermal Camera module flash! &lt;br /&gt;
&lt;br /&gt;
==== to permanently enable Telnet, go to /etc/init.d and edit S90app ====&lt;br /&gt;
 vi S90app&lt;br /&gt;
in vi, move your cursor to the # at #telnetd and press x&lt;br /&gt;
&lt;br /&gt;
now press : and type wq, enter. this should be it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== patching the decoder and streamer to 640x480: ====&lt;br /&gt;
go to /app and edit the mach.cfg&lt;br /&gt;
&lt;br /&gt;
replace DL384 with D640 and edit the resolution to 640 480 &lt;br /&gt;
&lt;br /&gt;
(press i in vi to enter edit mode, press ESC to exit edit mode.   :wq  to write and quit.)&lt;br /&gt;
&lt;br /&gt;
repeat that procedure for the dali.cfg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== (optional) patching app.sh to prevent it from rebooting ====&lt;br /&gt;
edit the app.sh in /app and remove all &amp;quot;reboot&amp;quot; occasions to prevent the camera from rebooting if onvifserver, httpd or daliServer arent running for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Patching the Thermal Camera module ===&lt;br /&gt;
To patch it, you need to disassemble everything down to the FPGA Board,&lt;br /&gt;
&lt;br /&gt;
on the bottom there is a SPI SOIC8 Flash.  &lt;br /&gt;
&lt;br /&gt;
Use a CH341 EEPROM programmer (be sure to have a fixed or modified version to not put out 5V!, set it to 3.3V) and SOIC8 clamp.&lt;br /&gt;
&lt;br /&gt;
Use NeoProgrammer (i used 2.2.0.10 but there are newer available, use the latest) and click Detect. It should find W25Q128 chips, select the FV one.&lt;br /&gt;
&lt;br /&gt;
Dont forget to download a backup of your flash and save it !&lt;br /&gt;
&lt;br /&gt;
Download the Binary 640x480 cleared pixelmap from below and load it into NeoProgrammer,  Click Erase, Program and Verify. &lt;br /&gt;
&lt;br /&gt;
This can take a while.&lt;br /&gt;
&lt;br /&gt;
Your imager should start up right after assembly by hearing the shutter click.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flash Contents ===&lt;br /&gt;
a Flash dump of the original downgraded D8X3N can be found [https://archive.org/details/dali-d-843n-flash-dump here]&lt;br /&gt;
&lt;br /&gt;
a Flash dump of a original 640x480 model can be found [https://archive.org/details/d-843-n-640x-480 here]&lt;br /&gt;
&lt;br /&gt;
a Flash dump of the web server SPI flash W25Q256JV can be found [https://archive.org/details/dm-60-webserver-flash-dump here] in case a bad firmware update caused a bootloop.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flash Binary Analysis ===&lt;br /&gt;
The Flash IC is a Winbond 25Q128JV SPI Flash that contains the FPGA Bitstream, Deadpixel and Flatmap, aswell as the Device Settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a copy of the SPI Logic Capture at startup can be found [https://archive.org/details/dali-eeprom-capture here], the free software [https://www.dreamsourcelab.com/download/ DSView from DreamSourceLab] is required to view it.&lt;br /&gt;
[[File:Dali Thermal Imager SPI Flash capture.png|thumb|SPI Flash access while booting the Thermal Module]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a approximation of the offsets resulted in this list:&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
0x000000	-	altera cyclone iv stuff&lt;br /&gt;
0x200000	-	settings&lt;br /&gt;
0x280000	-	Flat field correction map&lt;br /&gt;
0x4C0000	-	Bad Pixel correctio nmap&lt;br /&gt;
0x580000	-	image aswell? 36010 bytes&lt;br /&gt;
0x740000	-	GUIX?&lt;br /&gt;
0x7C0000	-	Strings for Gui?&lt;br /&gt;
0x800000	-	another shorter GUIX&lt;br /&gt;
0x880000	-	Strings for second gui?&lt;br /&gt;
0x8C0000	-	GUIX&lt;br /&gt;
0x940000	-	Strings for gui&lt;br /&gt;
0xE00000	-	?&lt;br /&gt;
0xE80000	-	dzxg? short&lt;br /&gt;
0xEC0000	- 	crosshair.bmp&lt;br /&gt;
0xF40000	-	3DTM?&lt;br /&gt;
0xF80000	-	fake? Bad pixel map BPRP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== Settings offset 0x200000 ======&lt;br /&gt;
The settings are read and written every startup, aswell when you close the OSD, sporadically and when executing the command MSV&lt;br /&gt;
&lt;br /&gt;
these are some of the settings i could figure out by changing and watching the logic capture what changed.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
offset size Cmd &lt;br /&gt;
0x0		1	SAG  	(0-2) auto gain&lt;br /&gt;
0x2		2	SVB	 	(0-16383) saved value is 16383 - SVB &lt;br /&gt;
0x4		2	SVC		(0-1023) set exposure or gain&lt;br /&gt;
0x6		1	SSM		image filtering&lt;br /&gt;
0x8		1	SEH		image enhancement&lt;br /&gt;
0xA		1	SWP		invert b/w polarity&lt;br /&gt;
0x14	1	SMR		Flip&lt;br /&gt;
0x16	1	SMR		Mirror&lt;br /&gt;
0x20	1	MENU	Cal source 0 IN, 1 OUT&lt;br /&gt;
0x3A	1	MENU	Enhance value 0-100&lt;br /&gt;
0x40	1	MENU	Rectify (shutter 0 OFF, 1 L, 2 H)&lt;br /&gt;
0x50	1	MENU	Language 0 english, 1 chinese, 2 russian&lt;br /&gt;
0xA2	-	SCO		set contrast gain&lt;br /&gt;
0xA4	-	IBR 	set brightness&lt;br /&gt;
0xAE	2	MENU	Fire Threshold&lt;br /&gt;
0xAC	1	SPA		set color palette&lt;br /&gt;
0xE2	1	SMS		display &amp;quot;collected 0/80&amp;quot; enabled&lt;br /&gt;
0xF8	1	SEM		set emissivity&lt;br /&gt;
0x110	1	SRT		set revise temp&lt;br /&gt;
0x116	1	SHD		set humidity&lt;br /&gt;
0x118	1	SET 	set ambient temp&lt;br /&gt;
0x11A	1	STD		set temp range&lt;br /&gt;
0x120	2	SLG		-500 to 500?&lt;br /&gt;
0x124	2	SRD		set distance&lt;br /&gt;
0x12C	1	SCP		???&lt;br /&gt;
0x130	2	SCT		???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Dali D8X3N Bad Pixel Map Viewer.png|thumb|Bad pixel map of a 640x512 sensor, about 0.56% of dead pixels in this map]]&lt;br /&gt;
So i let the AI create a [https://2476424.playcode.io/ Configurator page] that lets you change the Settings in your Flashdump to your liking &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== Bad Pixel and Flatframe Maps 0x280000 and 0x4C0000 ======&lt;br /&gt;
Thermal cameras require a bad pixel and flat frame map to compensate for manufacturing inconsistencies.&lt;br /&gt;
&lt;br /&gt;
unfourtainly, the maps of the downgraded cameras only contain enough data for a 384 model, not the full 640. &lt;br /&gt;
&lt;br /&gt;
at offset 0xF80000 there is a BPRP which was mistaken at first as the Bad pixel map, it could just be a mask to where to apply the offset maps, as its either 0x0 or 0x1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [https://2477569.playcode.io/ Viewer Page] is written in JS and does not require any special dependencies, it can run as a plain html file offline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There still needs to be work done to create own maps and flatfields but the cameras are still very capable and useable with fully cleared maps.&lt;br /&gt;
&lt;br /&gt;
To clear the maps, just go to these offsets and fill with values around 0x3F or 0x0 for total length of   X Resolution x Y Resolution x 2 bytes (0x96000 for 640x480)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dali D8X3N Flat Field Map Viewer.png|thumb|Flat Field viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dali Commands ===&lt;br /&gt;
To control the TIM you can either use Pelco or Dali command set. By default the Dali commandset is used at 38400 BAUD.&lt;br /&gt;
&lt;br /&gt;
Those commands consist of a 0x02 start byte followed by two length Bytes, then the actual command which is allways 3 uppercase Letters in ASCII (eg. KBD for keyboard) followed by a comma and the values.&lt;br /&gt;
&lt;br /&gt;
Some commands take multiple values, some dont. But you allways have to send the comma after the Command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The camera will answer with the Command and 0, 1 or 2.  Sending no value counts as zero.  &lt;br /&gt;
 0 is invalid parameters, too few or out of range&lt;br /&gt;
&lt;br /&gt;
 1 is OK, valid command&lt;br /&gt;
&lt;br /&gt;
 2 is Invalid command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands can be sent trough the Web server using the URL Api endpoint or directly trough the UART port. &lt;br /&gt;
&lt;br /&gt;
(keyboard, C button, causes the shutter to do a calibration)   &lt;br /&gt;
 &amp;lt;camera ip&amp;gt;/cgi-bin/dmcmd?Command=KBD,C    &lt;br /&gt;
Listening to the answer can be done while being in the Linux shell and typing   &lt;br /&gt;
 cat /dev/ttyAMA2 | strings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By bruteforcing the UART with AAA to ZZZ a list of Commands could be obtained, but some with unknown Parameters or functionality yet. including some from a decompiled DM60comm.so module found in /app/modules folder.&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
KBD		KEY			Keyboard (F S M C + -)&lt;br /&gt;
SSM		0-1			Image Filtering Off/On&lt;br /&gt;
GSM		0			Image filter status&lt;br /&gt;
SEH		0-1			Image Enhancement Off/On&lt;br /&gt;
GEH		0-1			Image enhancer status&lt;br /&gt;
SCO		0-255		Set Gain (locked when SAG auto gain is on)&lt;br /&gt;
GCO		0-255		Get gain&lt;br /&gt;
INT		15-320		set actual gain? not just contrast sometimes disabled?&lt;br /&gt;
IBR		0-255		Set brightness&lt;br /&gt;
GBR		0-255		Get brightness&lt;br /&gt;
SMR		0-3			Mirror mode bit0=horizontal, bit1=vertical&lt;br /&gt;
GMR		0			Get rotation/flip&lt;br /&gt;
SDT		0-1			displays temp=44.65°C osd, but webserver sends date/time to the cam there....&lt;br /&gt;
GDT		0-1			Get temp display active?&lt;br /&gt;
GPT					Display temp oft SDT&lt;br /&gt;
GNU		0-1			Get Shutter closed/open&lt;br /&gt;
SNU		0-1 		Shutter close / open&lt;br /&gt;
STD		0-1			Set Range 0: -20-180°C 1: 100-600°C&lt;br /&gt;
GTD		0-1			Get Range&lt;br /&gt;
SET		°C			Set Ambient temperature&lt;br /&gt;
GET		°C			Get Ambient temperature&lt;br /&gt;
SEM		0-100		0-1 set emissivity x100&lt;br /&gt;
GEM		0-100		Get Emissivity&lt;br /&gt;
SRT		°C			Set revise temperature -100-100 -10-10°&lt;br /&gt;
GRT		°C			Get revise temperature&lt;br /&gt;
SRD		100			Set Distance 4.4m x100&lt;br /&gt;
GRD		100			Get Distance&lt;br /&gt;
SHD		0-100		Set Humidity&lt;br /&gt;
GHD		55			Get Humidity&lt;br /&gt;
SWP		0-1			invert s/w polarity image&lt;br /&gt;
GWP		1			is inverted?&lt;br /&gt;
SPA		0-10?		Set color palette&lt;br /&gt;
GPA		3			white hot&lt;br /&gt;
SMV		0-1			Show temperature 3x3 grid?? in combination with GTV maybe&lt;br /&gt;
GMV		0&lt;br /&gt;
SMS		0-1			displays &amp;quot;collected 0/&amp;lt;number set by SCT&amp;gt;&amp;quot; by SCP delay &amp;quot;saves the daily number of highest temperatures?&amp;quot;&lt;br /&gt;
GMS		0&lt;br /&gt;
SCT		1-500		sets the amount of &amp;quot;collected&amp;quot; points for SMS&lt;br /&gt;
GCT		80	&lt;br /&gt;
SCP		5-60		&amp;quot;collected&amp;quot; delay in seconds for SMS&lt;br /&gt;
GCP		60			&lt;br /&gt;
SAG		0-2			Auto brightness / gain&lt;br /&gt;
GAG		0			&lt;br /&gt;
SLR		0-9			???&lt;br /&gt;
GLR		0&lt;br /&gt;
SRP		0,0 - 639,479		set crosshair position&lt;br /&gt;
GRP		320,240		get crosshair position	&lt;br /&gt;
DRC		0-1			Show crosshair&lt;br /&gt;
SLG		-500-500	??&lt;br /&gt;
GLG					&lt;br /&gt;
SCE 	text		??&lt;br /&gt;
GCE		0	&lt;br /&gt;
SCB 	text		??&lt;br /&gt;
GCB		0	&lt;br /&gt;
SVB		0-16383		adc offset, exposure? good at 9650&lt;br /&gt;
GVB		6733		value is 16383 minus SVB&lt;br /&gt;
SVC		1-1023		set contrast but better&lt;br /&gt;
GVC		260&lt;br /&gt;
SVF		100-?		?? video freaks out 3400 seems good&lt;br /&gt;
SVS		100-?		?? video freaks out 3300 seems good&lt;br /&gt;
SOT		0-1			?? sensor supply, looks weird when off.&lt;br /&gt;
SZM		1-4			?&lt;br /&gt;
GZM		1&lt;br /&gt;
MSV					save settings too eeprom&lt;br /&gt;
ASV					Saves something aswell?&lt;br /&gt;
GCS		0			Get Core status &amp;amp; faults&lt;br /&gt;
ALD		0,2?		video blanks lots of eeprom activity. reload pixel map??&lt;br /&gt;
SAV		0-9999		set Fire threshold&lt;br /&gt;
GAV		2100		get Fire Threshold&lt;br /&gt;
BAC					change uart protocol? careful&lt;br /&gt;
CBD					Displays Recovery successful?&lt;br /&gt;
CBS					Displays Saved successfully&lt;br /&gt;
LRD					Displays Recovery successful?&lt;br /&gt;
LRS					Displays Saved successfully?&lt;br /&gt;
LRE					Displays Temperature Repair successful?&lt;br /&gt;
CBT					Displays Calibration successful?&lt;br /&gt;
DBP					??? shutter clicks&lt;br /&gt;
DPI					Show weird pixels&lt;br /&gt;
API					Hide weird pixels&lt;br /&gt;
CCM					??&lt;br /&gt;
ASN		0-4			??&lt;br /&gt;
GAB		4 vals		?? 3,-10,50,150&lt;br /&gt;
GAN		1			?? &lt;br /&gt;
GAR		11 vals		??  10,10,5,20,35,50,70,90,120,150,180,,&lt;br /&gt;
GCM		6 values	??&lt;br /&gt;
GFV					prints screen gray value?&lt;br /&gt;
GIT		200			??&lt;br /&gt;
GTV					Get the collected temp values?&lt;br /&gt;
PTS					echoes but with extra stuff??&lt;br /&gt;
QYA		7170		Query Gray Info (information mode)&lt;br /&gt;
QYI		7124		Query Gray Average mode&lt;br /&gt;
QYM		7512		Query Gray Minimum mode&lt;br /&gt;
VTP		400-4000	?? &lt;br /&gt;
MTD		U/S,0,0		?? S answers with bytes, U upload bytes?&lt;br /&gt;
MTC		U/S?		?? S answers with U,0,0, S doesnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0 invalid params:&lt;br /&gt;
STS					??&lt;br /&gt;
STT					??&lt;br /&gt;
SAC					??&lt;br /&gt;
SAH					??&lt;br /&gt;
SAS					??&lt;br /&gt;
SAT					??&lt;br /&gt;
SCX					?? displays crosshair but invalid params&lt;br /&gt;
SCY					?? displays crosshair but invalid params&lt;br /&gt;
GAC					??&lt;br /&gt;
GAH					??&lt;br /&gt;
GAS					??&lt;br /&gt;
GAT					??&lt;br /&gt;
GME					??&lt;br /&gt;
GPC					??&lt;br /&gt;
GPI					??&lt;br /&gt;
GPM					??&lt;br /&gt;
GTA					??&lt;br /&gt;
GTC					??&lt;br /&gt;
GTI					??&lt;br /&gt;
GTM					??&lt;br /&gt;
GTS					??&lt;br /&gt;
GTT					??&lt;br /&gt;
&lt;br /&gt;
answer only:&lt;br /&gt;
&lt;br /&gt;
BPM		0-1			stream ready? answers with 0 stop, 1 go, 2 when prompted&lt;br /&gt;
AVS		0,1&lt;br /&gt;
MEH&lt;br /&gt;
PWI		0-1			changing palette from wh to fire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unconfirmed (from dm60comm.so):&lt;br /&gt;
SDT		2024,03,15,14,30,25		Set Date Time with year,month,day,hour,minute,second&lt;br /&gt;
STS		1		Set Temperature Show display (0=off, 1=on)&lt;br /&gt;
SVA		2		Set Video Auto mode (0=manual, 2=auto)&lt;br /&gt;
SMP		0,1,1,0,100,150,200,250,300,350,90,25		Set Measurement Point (type,index,enable,mode,startX,startY,endX,endY,anchorX,anchorY,threshold,color)&lt;br /&gt;
STV		Stop Temperature View measurements&lt;br /&gt;
SPF		5		Set Profile parameter&lt;br /&gt;
SVL		-10		Set Video Left pan movement (signed value)&lt;br /&gt;
SVU		-5		Set Video Up tilt movement (signed value)&lt;br /&gt;
SVD		5		Set Video Down tilt movement (signed value)&lt;br /&gt;
SSP		17,1,0	Set System Parameter (param_id,value,index) #46 	temperature format 0 °C, 1 °F, 2 K&lt;br /&gt;
SCP		Set Current Preset (save current position)&lt;br /&gt;
GCP		Get Current Preset&lt;br /&gt;
STT		300,350	Set Temperature Threshold (low,high values *10)&lt;br /&gt;
SDC		1		Set Display Configuration parameter&lt;br /&gt;
GCS		Get Current Status&lt;br /&gt;
GMM		Get Memory Map information&lt;br /&gt;
GFV		Get Frame Value (grayscale data)&lt;br /&gt;
GFZ		Get Freeze Status&lt;br /&gt;
GSI		1		Get System Information (parameter=1)&lt;br /&gt;
GSS		Get System Status&lt;br /&gt;
GSP		21,0	Get System Parameter (param_21=surround temp, value=0)&lt;br /&gt;
GTT		Get Temperature Threshold range&lt;br /&gt;
GTV		1,3,10	Get Temperature Values (enable,type,count)&lt;br /&gt;
GNU		Get Network Update status (response command)&lt;br /&gt;
FRZ		Freeze current display frame&lt;br /&gt;
LIV		Live mode (unfreeze display)&lt;br /&gt;
CAL		Calibrate system&lt;br /&gt;
CCP		3		Call Current Preset (preset number 0-9)&lt;br /&gt;
APF		100	Auto Profile setting&lt;br /&gt;
MEH		Measure Enhancement&lt;br /&gt;
BPT		Built-in Test&lt;br /&gt;
MTC		S,0		Measure Temperature Capture (S=start, 0=sequence)&lt;br /&gt;
MTG		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Gray data transfer&lt;br /&gt;
MTD		U,0,1024,&amp;lt;data&amp;gt;	Measure Temperature Data transfer&lt;br /&gt;
UFP		S,0,2048		Update Firmware Prepare (S=start, 0=offset, 2048=size)&lt;br /&gt;
UFD		S,0,1024		Update Firmware Data transfer&lt;br /&gt;
BAB		U		Buffer operation (U=update)&lt;br /&gt;
TTH		S,0		Temperature Threshold operation&lt;br /&gt;
IPP		192.168.001.102,255.255.255.000,192.168.001.001,192.168.000.001,9989,9998	IP Parameters (IP,netmask,gateway,DNS,port1,port2)&lt;br /&gt;
MAC		00:60:A9:10:00:01	MAC Address setting&lt;br /&gt;
SNP		Set Network Parameters (response command)&lt;br /&gt;
QYI		Query Gray Info (information mode)&lt;br /&gt;
QYA		Query Gray Average mode&lt;br /&gt;
QYM		Query Gray Minimum mode&lt;br /&gt;
GAI		Get Alarm Info (response command)&lt;br /&gt;
YTC		&amp;lt;data&amp;gt;	Unknown command with data parameter&lt;br /&gt;
HTH&lt;br /&gt;
LRS&lt;br /&gt;
LRD&lt;br /&gt;
GAR&lt;br /&gt;
DRC&lt;br /&gt;
PTS&lt;br /&gt;
SCX&lt;br /&gt;
SCY&lt;br /&gt;
CBT&lt;br /&gt;
LRE&lt;br /&gt;
CBD&lt;br /&gt;
CBS&lt;br /&gt;
XXX&lt;br /&gt;
GSP&lt;br /&gt;
GTT&lt;br /&gt;
QYI&lt;br /&gt;
QYA&lt;br /&gt;
QYM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using the Thermal module without Webserver ===&lt;br /&gt;
[[File:Dali D8X3C Breakout board.png|thumb|Breakout board for D8X3C ]]&lt;br /&gt;
to use it, you need to interface it directly.&lt;br /&gt;
&lt;br /&gt;
The module will put out a Analog video signal (High-Z, need to buffer when connecting it to 75Ohm Video input)&lt;br /&gt;
&lt;br /&gt;
Also a  8 or 14bit or  8-bit BT656 output.&lt;br /&gt;
&lt;br /&gt;
the header exposes the FPGA JTAG and UART aswell as 6 Hardware Keys to Navigate the OSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To interface, you need to make a adapter board with a DF12-50DS-0.5V(86) Docking socket.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The breakout board files can be found [https://oshwlab.com/gamerpaddy/d8x3c-backpack-usb here] but may be still work in progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sensor Pinout ===&lt;br /&gt;
[[File:Dali DLD384 Sensor pinout basic.png|thumb|basic pinout of a DLD384]]&lt;br /&gt;
the pinout of the thermal sensor havent been analyzes much.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
besides some supply and Control voltages, 3 clocks and a analog output have been found.  &lt;br /&gt;
&lt;br /&gt;
17.5MHz&lt;br /&gt;
&lt;br /&gt;
14.705KHz&lt;br /&gt;
&lt;br /&gt;
50Hz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3C_Breakout_board.png&amp;diff=3168</id>
		<title>File:Dali D8X3C Breakout board.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3C_Breakout_board.png&amp;diff=3168"/>
		<updated>2025-07-29T14:51:35Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;breakout board for thermal camera module to acces io&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_DLD384_Sensor_pinout_basic.png&amp;diff=3167</id>
		<title>File:Dali DLD384 Sensor pinout basic.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_DLD384_Sensor_pinout_basic.png&amp;diff=3167"/>
		<updated>2025-07-29T14:42:38Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;still needs work to find out the pinout of a DLD384 Thermal sensor&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Arduino_Nano_blink_sketch_thermal_gif.gif&amp;diff=3166</id>
		<title>File:Arduino Nano blink sketch thermal gif.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Arduino_Nano_blink_sketch_thermal_gif.gif&amp;diff=3166"/>
		<updated>2025-07-29T14:39:02Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GIF of a arduino nano running blink sketch and components heating up&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Raw_Thermal_viewer.png&amp;diff=3165</id>
		<title>File:Dali D8X3N Raw Thermal viewer.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Raw_Thermal_viewer.png&amp;diff=3165"/>
		<updated>2025-07-29T14:38:08Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;python program to view raw thermal data stream&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_web_interface.png&amp;diff=3164</id>
		<title>File:Dali D8X3N web interface.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_web_interface.png&amp;diff=3164"/>
		<updated>2025-07-29T14:27:28Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;to view the stream, open in Edge and select IE compatibility mode&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3C_OSD.png&amp;diff=3163</id>
		<title>File:Dali D8X3C OSD.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3C_OSD.png&amp;diff=3163"/>
		<updated>2025-07-29T14:26:08Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OSD of a thermal camera&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Onvif_Device_Manager_ODM.png&amp;diff=3162</id>
		<title>File:Onvif Device Manager ODM.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Onvif_Device_Manager_ODM.png&amp;diff=3162"/>
		<updated>2025-07-29T14:23:19Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;for viewing ip camera streams&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Upgrade_ici_dali_firmware_updater.png&amp;diff=3161</id>
		<title>File:Upgrade ici dali firmware updater.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Upgrade_ici_dali_firmware_updater.png&amp;diff=3161"/>
		<updated>2025-07-29T14:03:59Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;software to upgrade webserver firmware&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Flat_Field_Map_Viewer.png&amp;diff=3160</id>
		<title>File:Dali D8X3N Flat Field Map Viewer.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Flat_Field_Map_Viewer.png&amp;diff=3160"/>
		<updated>2025-07-29T13:48:59Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;software to view flatfield correction maps for dali d8x3n camera&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Bad_Pixel_Map_Viewer.png&amp;diff=3159</id>
		<title>File:Dali D8X3N Bad Pixel Map Viewer.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Bad_Pixel_Map_Viewer.png&amp;diff=3159"/>
		<updated>2025-07-29T13:47:23Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bad pixel map viewer software&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_Thermal_Imager_SPI_Flash_capture.png&amp;diff=3158</id>
		<title>File:Dali Thermal Imager SPI Flash capture.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_Thermal_Imager_SPI_Flash_capture.png&amp;diff=3158"/>
		<updated>2025-07-29T13:37:51Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;logic capture of the SPI bus while booting up&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Thermal_Core_Debug_wiring.jpeg&amp;diff=3157</id>
		<title>File:Dali D8X3N Thermal Core Debug wiring.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Thermal_Core_Debug_wiring.jpeg&amp;diff=3157"/>
		<updated>2025-07-29T13:25:21Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: For sniffing SPI and UART&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
For sniffing SPI and UART&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Sensor_Power_and_ADC_Board.jpeg&amp;diff=3156</id>
		<title>File:Dali D8X3N Sensor Power and ADC Board.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Sensor_Power_and_ADC_Board.jpeg&amp;diff=3156"/>
		<updated>2025-07-29T13:24:02Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: Power and ADC board for control and pixel data acquisition&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Power and ADC board for control and pixel data acquisition&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_FPGA_Board_Front.jpeg&amp;diff=3155</id>
		<title>File:Dali D8X3N FPGA Board Front.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_FPGA_Board_Front.jpeg&amp;diff=3155"/>
		<updated>2025-07-29T13:22:26Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: the Front of the FPGA board including RAM, Video DAC and SPI Flash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
the Front of the FPGA board including RAM, Video DAC and SPI Flash&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_FPGA_Board_Back.jpeg&amp;diff=3154</id>
		<title>File:Dali D8X3N FPGA Board Back.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_FPGA_Board_Back.jpeg&amp;diff=3154"/>
		<updated>2025-07-29T13:20:57Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: the part where Dali D8X3N  becomes D8X3C&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
the part where Dali D8X3N  becomes D8X3C&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_SoC_Board_front.jpeg&amp;diff=3153</id>
		<title>File:Dali D8X3N SoC Board front.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_SoC_Board_front.jpeg&amp;diff=3153"/>
		<updated>2025-07-29T13:20:02Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: front SoC board with RAM and PMIC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
front SoC board with RAM and PMIC&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_SoC_Board_Back.jpeg&amp;diff=3152</id>
		<title>File:Dali D8X3N SoC Board Back.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_SoC_Board_Back.jpeg&amp;diff=3152"/>
		<updated>2025-07-29T13:18:59Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: SoC board with SPI Flash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
SoC board with SPI Flash&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Glue_Board_Front.jpeg&amp;diff=3151</id>
		<title>File:Dali D8X3N Glue Board Front.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Glue_Board_Front.jpeg&amp;diff=3151"/>
		<updated>2025-07-29T13:17:30Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: Front Glue Board (between Logic and IO)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Front Glue Board (between Logic and IO)&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Glue_Board_Back.jpeg&amp;diff=3150</id>
		<title>File:Dali D8X3N Glue Board Back.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Glue_Board_Back.jpeg&amp;diff=3150"/>
		<updated>2025-07-29T13:16:03Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: Dali D8X3N Glue (Board inbetween Logic and IO) Board back side&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Dali D8X3N Glue (Board inbetween Logic and IO) Board back side&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Board1_Front.jpeg&amp;diff=3149</id>
		<title>File:Dali D8X3N Board1 Front.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Board1_Front.jpeg&amp;diff=3149"/>
		<updated>2025-07-29T13:14:40Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: Dali D8X3N Network &amp;amp; GPIO Board Front&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Dali D8X3N Network &amp;amp; GPIO Board Front&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Board1_Back.jpeg&amp;diff=3148</id>
		<title>File:Dali D8X3N Board1 Back.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_D8X3N_Board1_Back.jpeg&amp;diff=3148"/>
		<updated>2025-07-29T13:13:38Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: Network Port &amp;amp; GPIO Board of a Dali D8X3N&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Network Port &amp;amp; GPIO Board of a Dali D8X3N&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.recessim.com/w/index.php?title=File:Dali_DLD384_Thermal_Imaging_Sensor.jpeg&amp;diff=3147</id>
		<title>File:Dali DLD384 Thermal Imaging Sensor.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.recessim.com/w/index.php?title=File:Dali_DLD384_Thermal_Imaging_Sensor.jpeg&amp;diff=3147"/>
		<updated>2025-07-29T13:12:24Z</updated>

		<summary type="html">&lt;p&gt;Gamerpaddy: 384x288 60mK amorphous-Silicon 50Hz thermal image sensor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
384x288 60mK amorphous-Silicon 50Hz thermal image sensor&lt;/div&gt;</summary>
		<author><name>Gamerpaddy</name></author>
		
	</entry>
</feed>