diff --git a/openhantek/res/firmware/mdso-firmware.hex b/openhantek/res/firmware/mdso-firmware.hex
new file mode 100644
index 00000000..489c0003
--- /dev/null
+++ b/openhantek/res/firmware/mdso-firmware.hex
@@ -0,0 +1,209 @@
+:203D000012010002FFFFFF40501D8E600400010203010A0600020000004001000902890004
+:203D200001010080370904000001FF000000070586020002000904000101FF00010007050C
+:203D400082010014010904000201FF00010007058201000C010904000301FF000100070502
+:203D600082010004010904000401FF000100070582010004020904000501FF0001000705F5
+:203D800082010004030904000601FF000100070582010004040904000701FF0001000705CD
+:053DA000820100020495
+:203DA6000902390002010080370904000001FF000000070586024000000904000101FF0010
+:193DC600010007058201FF03010904000201FF00010007058201000201AF
+:203DE000040309040E0373006900670072006F006B0010036600780032006C0061006600B9
+:203E00007700240359006900580069006E0067004400690061006E005A00690020004D0000
+:083E2000440053004F000000B4
+:040000000201B9320E
+:01000B0032C2
+:0100130032BA
+:01001B0032B2
+:0100230032AA
+:03002B000203527B
+:030033000202893D
+:01003B003292
+:01004300328A
+:01004B003282
+:01005300327A
+:01005B003272
+:01006300326A
+:03006B0002028C02
+:03007300020BD0AD
+:03007B000207E198
+:0300830002033A3B
+:03008B000202A4CA
+:030093000202EF77
+:03009B000207DE7B
+:0300A300020BFA53
+:0300AB00020BFB4A
+:0300B300020BFC41
+:0300BB00020BFF36
+:0300C300020BCF5E
+:0300CB00020BEC39
+:0300D300020BED30
+:0300DB00020BEF26
+:0300E3000207E32E
+:0300EB00020C7391
+:0300F3000207DF22
+:0300FB000207E019
+:030103000207E20E
+:03010B000207E404
+:030113000207E5FB
+:03011B00020C567D
+:03012300020BF8D4
+:03012B00020BFDC7
+:03013300020C00BB
+:03013B00020C02B1
+:03014300020BF9B3
+:03014B00020BFEA6
+:03015300020C019A
+:03015B00020C0390
+:03016300020C5536
+:03016B00020BF094
+:03017300020BF28A
+:03017B00020BF480
+:03018300020BF676
+:03018B00020BF173
+:03019300020BF369
+:03019B00020BF55F
+:0301A300020BF755
+:0301AB00020BEE56
+:0301B300020BCE6E
+:0C021200750800E4F509F50AC200C201FD
+:030230000201B612
+:0301B6000206EA54
+:20023300AF827401B51302801C7402B5130280197405B513028016740AB51302801374108E
+:20025300B51312800C7E2480107E12800C7E0080087E36800475820022EF60067D707F00BF
+:2002730080047D0E7F00EDF4FFE5805207ED5E4FF58075820122C2DC32C0E0C082C083D24F
+:20029300005391EF90E65D7401F0D083D082D0E032C021C0E0C0F0C082C083C007C006C0B6
+:2002B30005C004C003C002C001C000C0D075D000758200120ACC5391EF90E65D7410F0D0BE
+:2002D300D0D000D001D002D003D004D005D006D007D083D082D0F0D0E0D02132C021C0E0E6
+:2002F300C0F0C082C083C007C006C005C004C003C002C001C000C0D075D000758201120AB1
+:20031300CC5391EF90E65D7420F0D0D0D000D001D002D003D004D005D006D007D083D082F3
+:20033300D0F0D0E0D02132C0E0C082C083D2015391EF90E65D7408F0D083D082D0E032C0C6
+:20035300E0C007C006C0D075D000E509450A6013E50924FFFEE50A34FFFF8E098F0AEE4FFB
+:20037300700100C2CFD0D0D006D007D0E032E582FF30E00543B108800353B1F7EF30E4043D
+:2003930043B1012253B1FE22AF82BF01028003BF021174072FFF90E618F090E61AEFF075BC
+:2003B3008201227582002290E6F574FFF000000090E6047480F000000090E6047482F000E0
+:2003D300000090E6047486F000000090E604E4F02290E6F574FFF0000000E50870057E0682
+:2003F300FF80047E027F0090E648EEF0221203BA7EE87F031EBEFF011FEE4F70F7E5BB3084
+:20041300E7FB00000090E6D07428F000000090E6D1E4F0E50870057E06FF80047E047F0090
+:200433008EBB00E4F509F50A22AF8290E680E030E7067D1C7E3D80047DA67E3D8F03E4CB42
+:20045300C4CB6BCB54F0CB6BFC74162BFBE43CFCEB2DFDEC3EFC7E80EFF508703590E61230
+:20047300E4F090E61474E0F090E6E27401F08D828C838EF0120C5790E625F074012DFAE4EE
+:200493003CFB8E078A828B838FF0120C5790E624F02290E61274D8F090E614E4F090E6D259
+:2004B30004F08D828C838EF0120C5790E621F00DBD00010C8D828C838EF0120C57FF90E640
+:2004D3002074075FF08D828C838EF0120C57C423541F90E64004F022AF827E00EE75F007DF
+:2004F300A4FCADF02478F582ED340CF583E493FBB5070280080EBE0CE375820022EC2478E0
+:20051300FCED340CFD74062CF582E43DF583E49390E601F075AF07759DE4759E008C828D3F
+:2005330083A3E49390E67CF08C828D83A3A3E49390E67CF07401F0E4F0F0F0F0F08C828DD8
+:2005530083A3A3A39390E67CF08C828D83A3A3A3A3E49390E67CF07401F0E4F0F0F0F0F0AB
+:200573008C828D83A3A3A3A3A39390E67CF07411F0F0E4F0F0F0F0F0F0F0F0F0F0F0F0F02D
+:200593007F0090E67CE4F00FBF600040F575820122AF82BF0002800FBF01028014BF0A02E4
+:2005B3008019BF322A801E75CAF075CBD87582012275CA1875CBFC7582012275CA9C75CBAD
+:2005D300FF7582012275CAEC75CBFF7582012275820022AD13AE14AF158D828E838FF0E588
+:2005F30008120BD175820122E5827006850B8212043C758201227582002275820122AF8219
+:20061300C0071203E4D007007509E8750A03BFE0004015EF2419401090E68AE4F090E68B03
+:20063300F090E6A0E020E1F9BFE00050030206A3EF2419405BEF2420FE2E90065173800C1E
+:20065300800A801B80268033803E8040EF2420FF90E740E0F5138F821202337582012290B8
+:20067300E740E0F5821204EB7582012290E740E0FFBF01031204007582012290E740E0F5B9
+:200693008212039B7582012275820122758201227582002290E613E4F090E615F090E6C29E
+:2006B300F090E6C37480F090E6C0E4F090E6F4F01203E475130175820012023375130175F8
+:2006D30082011202337582011204EB75820212039B75820002043C90E600E053E0E7F012F0
+:2006F30006A7E500D2E890E668E043E008F090E65CE043E001F090E65CE043E010F090E6B1
+:200713005CE043E020F090E65CE043E008F0D2DDD2AF75CA0C75CBFE75C800D2ADD2CA90E9
+:20073300E680E043E00AF09005DC120C0490E680E053E0F7F090E672E4F090E671F090E6B7
+:2007530070F075B6FF75B4FF75B2FF10000280031207E610010280F390E682E043E0C0F0E9
+:2007730090E6817401F043870100000000000000E50E701C90E682E030E60790E682E020D3
+:20079300E0D690E682E030E70790E682E020E1C890E682E030E60790E682E020E00E90E6A8
+:2007B30082E030E7A690E682E030E19F900005120C0490E680E043E001F090000F120C041D
+:0B07D30090E680E053E0FEF002075EBD
+:200C7800308000030000EA1E8000030000AA180100020110CA100101020010CA0C0201027F
+:200C98000010CA080302020010CA040605020010CA020C0B020010CA011817020010CA325B
+:140CB800302F020010CA147877020010CA0AF0EF020010CA49
+:0107DE0032E8
+:0107DF0032E7
+:0107E00032E6
+:0107E10032E5
+:0107E20032E4
+:0107E30032E3
+:0107E40032E2
+:0107E50032E1
+:0601E800E478FFF6D8FDEB
+:12021E00750D00750E00750FA675103D75111C75123D77
+:2007E60090E6B9E0FF24F450030208DCEF240A83F582EF241083F583E473182DDC42DCDCED
+:2008060057DC5D748BBE080808080808080808080808120952E58260030208F190E6A0E0FD
+:2008260043E001F00208F11209E6E58260030208F190E6A0E043E001F00208F1120A34E5A3
+:200846008260030208F190E6A0E043E001F00208F1120AF70208F1120609AF8290E740EFA7
+:20086600F090E68AE4F090E68B04F00208F190E6BAE0F58212060DE582707090E6A0E04392
+:20088600E001F0806690E6BCE0FF75130C7514007515408F821205E6E582700A90E6A0E0BE
+:2008A60043E001F0804590E740E50CF090E68AE4F090E68B04F0803390E6BCE0FF90E6BA04
+:2008C600E0F50B8F821205FBE582701F90E6A0E043E001F0801590E6B9E0F582120611E5E6
+:2008E60082700890E6A0E043E001F090E6A0E043E080F022AF82747F5FFE24F75003020949
+:200906004EEE240A83F582EE240D83F583E473272B3E4E424E464E4A090909090909090968
+:200926000990E6A022EF30E7067EA27FE680047EA17FE68E828F832290E6A32290E6A4221C
+:2009460090E6A52290E6A6229000002290E6B8E0FFBF80028022BF81028008BF82028037B0
+:200966000209DE90E740E4F090E741F090E68AF090E68B7402F08064E50E25E0FFE50D42EF
+:200986000790E740EFF090E741E4F090E68AF090E68B7402F0804590E6BCE0F5821208FA6F
+:2009A600AE82AF838E048F05EE4F7003F582228C828D83E0FC30E0067E017F0080047E0050
+:2009C6007F0090E740EEF090E741E4F090E68AF090E68B7402F08004758200227582012263
+:2009E60090E6B8E0FF6005BF0237801190E6BAE0FFBF0105750E0080317582002290E6BAA5
+:200A0600E0701A90E6BCE0F5821208FAAE82AF83E0FD5305FE8E828F83EDF0800D758200B1
+:200A26002290E6B9E0F5820206117582012290E6B8E0FF6008BF02028020020ABF90E6BA02
+:200A4600E0FFBF0203020AC890E6BAE0FFBF0106750E01020AC87582002290E6BAE07055FE
+:200A660090E6BCE0F5821208FAAE82AF83EE4F7003F582228E828F83E0FD4305018E828F41
+:200A860083EDF090E6BCE0FF53070F90E6BCE0FE530680E4C423CEC423541F6ECE541FCE1D
+:200AA6006ECE30E40244E0FD90E683EE2FF0E043E020F0800D7582002290E6B9E0F5820276
+:200AC600061175820122AF82D20210AF02C202EF600E750F1C75103D7511A675123D800C1A
+:200AE600750FA675103D75111C75123DA20292AF2290E6BBE0FFBF01028019BF02028024C5
+:200B0600BF0302802CBF0603020BA8BF0703020BB8020BC57E007F3D90E6B3EFF090E6B416
+:200B26007400F02290E6B3E510F090E6B4E50FF0227DE07E3D7F8090E6BAE0F5137B00EB56
+:200B4600B5130280430B8D008E018F028D828E838FF0120C5728F8E439F9880589068A0753
+:200B660074012DF9E43EFA8F0489828A838CF0120C57F9B9030280067D007E007F00ED4E2A
+:200B86006006C3E5139B50B7ED4E600D8E0490E6B3ECF090E6B4EDF02290E6A0E043E0010A
+:200BA600F0227E127F3D90E6B3EFF090E6B47412F02290E6B3E512F090E6B4E511F0229035
+:080BC600E6A0E043E001F0228B
+:2001C6007900E94400601B7A00900CCC780075923CE493F2A308B800020592D9F4DAF275E8
+:0201E60092FF86
+:010BCE0032F4
+:010BCF0032F3
+:010BD00032F2
+:1B0BD10020F71130F6138883A88220F509F6A8837583002280FEF280F5F02223
+:010BEC0032D6
+:010BED0032D5
+:010BEE0032D4
+:010BEF0032D3
+:03004300023F0079
+:203F000002028C00020BD0000207E10002033A000202A4000202EF000207DE00020BF90083
+:203F2000020BFA00020BFB00020BFC00020BFF00020BCF00020BEC00020BED00020BEF0092
+:203F40000207E300020BF900020C73000207DF000207E0000207E2000207E4000207E50057
+:203F6000020C5600020BF900020BF900020BF900020BF800020BFD00020C0000020C02009E
+:203F8000020BFE00020C0100020C0300020C5500020BF000020BF200020BF400020BF60093
+:183FA000020BF100020BF300020BF500020BF700020BEE00020BCE002F
+:010BF00032D2
+:010BF10032D1
+:2001EE007800E84400600A790075923CE4F309D8FC7800E84400600C7900903C00E4F0A3A7
+:04020E00D8FCD9FA45
+:010BF20032D0
+:010BF30032CF
+:010BF40032CE
+:010BF50032CD
+:010BF60032CC
+:010BF70032CB
+:010BF80032CA
+:010BF90032C9
+:010BFA0032C8
+:010BFB0032C7
+:010BFC0032C6
+:010BFD0032C5
+:010BFE0032C4
+:010BFF0032C3
+:010C000032C1
+:010C010032C0
+:010C020032BF
+:010C030032BE
+:200C0400AE82AF8390E600E05418C423541F70057CB1FD801C90E600E05418C423541FFB00
+:200C2400BB01067A617B0180047AC27B028A048B058C138D14E51324FFFAE51434FFFB8A36
+:110C4400138B14EA4B70EE1EBEFF011FEE4F70E122AF
+:010C5500326C
+:010C5600326B
+:0D01B900758121120C74E58260030201B60D
+:1C0C570020F71430F6148883A88220F507E6A88375830022E280F7E49322E022AC
+:010C7300324E
+:040C74007582002263
+:00000001FF
diff --git a/openhantek/res/firmwares.qrc b/openhantek/res/firmwares.qrc
index dbd6e190..91a97b45 100644
--- a/openhantek/res/firmwares.qrc
+++ b/openhantek/res/firmwares.qrc
@@ -4,5 +4,6 @@
firmware/dso6022be-firmware.hex
firmware/dso6022bl-firmware.hex
firmware/dds120-firmware.hex
+ firmware/mdso-firmware.hex
diff --git a/openhantek/src/hantekdso/models/modelMDSO.cpp b/openhantek/src/hantekdso/models/modelMDSO.cpp
new file mode 100644
index 00000000..782ba815
--- /dev/null
+++ b/openhantek/src/hantekdso/models/modelMDSO.cpp
@@ -0,0 +1,101 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "modelMDSO.h"
+#include "hantekdsocontrol.h"
+#include "hantekprotocol/controlStructs.h"
+#include "usb/scopedevice.h"
+#include
+#include
+#include
+
+#define VERBOSE 0
+
+using namespace Hantek;
+
+static ModelMDSO modelInstance_1D50;
+
+static void initSpecifications( Dso::ControlSpecification &specification ) {
+ // we drop 2K + 480 sample values due to unreliable start of stream
+ // 20000 samples at 100kS/s = 200 ms gives enough to fill
+ // the screen two times (for pre/post trigger) at 10ms/div = 100ms/screen
+ // SAMPLESIZE defined in hantekdsocontrol.h
+ // adapt accordingly in HantekDsoControl::convertRawDataToSamples()
+
+ // HW gain, voltage steps in V/div (ranges 20,50,100,200,500,1000,2000,5000 mV)
+ specification.gain = { { 10, 20e-3 }, { 10, 50e-3 }, { 10, 100e-3 }, { 5, 200e-3 },
+ { 2, 500e-3 }, { 1, 1.00 }, { 1, 2.00 }, { 1, 5.00 } };
+
+
+ // Define the scaling between ADC sample values and real input voltage
+ // Everything is scaled on the full screen height (8 divs)
+ // The voltage/div setting: 20m 50m 100m 200m 500m 1V 2V 5V
+ // Equivalent input voltage: 0.16V 0.4V 0.8V 1.6V 4V 8V 16V 40V
+ // Theoretical gain setting: x10 x10 x10 x5 x2 x1 x1 x1
+ // mV / digit: 4 4 4 8 20 40 40 40
+ specification.voltageScale[ 0 ] = { 250, 250, 250, 126.25, 49.50, 24.75, 24.75, 24.75 };
+ specification.voltageScale[ 1 ] = { 250, 250, 250, 126.25, 49.50, 24.75, 24.75, 24.75 };
+ // Gain and offset can be corrected by individual config values from file (device has no calibration EEPROM)
+
+
+
+ specification.samplerate.single.base = 1e6;
+ specification.samplerate.single.max = 30e6;
+ specification.samplerate.single.recordLengths = { UINT_MAX };
+ specification.samplerate.multi.base = 1e6;
+ specification.samplerate.multi.max = 15e6;
+ specification.samplerate.multi.recordLengths = { UINT_MAX };
+
+ // This model uses the sigrok firmware that has a slightly different coding for the sample rate than my Hantek6022API version.
+ // 10=100k, 20=200k, 50=500k, 11=10M (Hantek: 110=100k, 120=200k, 150=500k, 10=10M)
+
+ specification.fixedSampleRates = {
+ // samplerate, sampleId, downsampling
+ { 10e3, 1, 100 }, // 100x downsampling from 1 MS/s!
+ { 20e3, 2, 100 }, // 100x downsampling from 2 MS/s!
+ { 50e3, 5, 100 }, // 100x downsampling from 5 MS/s!
+ { 100e3, 8, 80 }, // 80x downsampling from 8 MS/s
+ { 200e3, 8, 40 }, // 40x downsampling from 8 MS/s
+ { 500e3, 8, 16 }, // 16x downsampling from 8 MS/s
+ { 1e6, 8, 8 }, // 8x downsampling from 8 MS/s
+ { 2e6, 8, 4 }, // 4x downsampling from 8 MS/s
+ { 5e6, 15, 3 }, // 3x downsampling from 15 MS/s
+ { 10e6, 11, 1 }, // no downsampling, 11 means 10 MS/s
+ { 15e6, 15, 1 }, // no downsampling
+ { 24e6, 24, 1 }, // no downsampling
+ { 30e6, 30, 1 }, // no downsampling
+ { 48e6, 48, 1 } // no downsampling
+ };
+
+
+ specification.couplings = { Dso::Coupling::DC, Dso::Coupling::AC };
+ specification.hasACcoupling = false; // MDSO has AC coupling
+ specification.triggerModes = {
+ Dso::TriggerMode::AUTO,
+ Dso::TriggerMode::NORMAL,
+ Dso::TriggerMode::SINGLE,
+ Dso::TriggerMode::ROLL,
+ };
+ specification.fixedUSBinLength = 0;
+ // use calibration frequency steps of modified sigrok FW (<= 20 kHz)
+ specification.calfreqSteps = { 50, 60, 100, 200, 500, 1000, 2000, 5000, 10000, 20000 };
+ specification.hasCalibrationEEPROM = false;
+}
+
+static void applyRequirements_( HantekDsoControl *dsoControl ) {
+ dsoControl->addCommand( new ControlSetGain_CH1() ); // 0xE0
+ dsoControl->addCommand( new ControlSetGain_CH2() ); // 0xE1
+ dsoControl->addCommand( new ControlSetSamplerate() ); // 0xE2
+ dsoControl->addCommand( new ControlStartSampling() ); // 0xE3
+ dsoControl->addCommand( new ControlSetNumChannels() ); // 0xE4
+ dsoControl->addCommand( new ControlSetCoupling() ); // 0xE5
+ dsoControl->addCommand( new ControlSetCalFreq() ); // 0xE6
+}
+
+// VID/PID active VID/PID no FW FW ver FW name Scope name
+// |------------| |------------| |----| |------| |------|
+ModelMDSO::ModelMDSO()
+ : DSOModel( ID, 0x1d50, 0x608e, 0xd4a2, 0x5660, 0x0001, "mdso", "MDSO", Dso::ControlSpecification( 2 ) ) {
+ initSpecifications( specification );
+}
+
+void ModelMDSO::applyRequirements( HantekDsoControl *dsoControl ) const { applyRequirements_( dsoControl ); }
diff --git a/openhantek/src/hantekdso/models/modelMDSO.h b/openhantek/src/hantekdso/models/modelMDSO.h
new file mode 100644
index 00000000..cc704e57
--- /dev/null
+++ b/openhantek/src/hantekdso/models/modelMDSO.h
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "dsomodel.h"
+
+class HantekDsoControl;
+using namespace Hantek;
+
+
+struct ModelMDSO : public DSOModel {
+ static const int ID = 0x1D50;
+ ModelMDSO();
+ void applyRequirements( HantekDsoControl *dsoControl ) const override;
+};
diff --git a/openhantek/src/hantekdso/models/modelMDSO.ini b/openhantek/src/hantekdso/models/modelMDSO.ini
new file mode 100644
index 00000000..35b66f8c
--- /dev/null
+++ b/openhantek/src/hantekdso/models/modelMDSO.ini
@@ -0,0 +1,38 @@
+[eeprom]
+replace_eeprom=true
+
+[gain]
+ch0\1000mV=1
+ch0\100mV=1
+ch0\2000mV=1
+ch0\200mV=1
+ch0\20mV=1
+ch0\5000mV=1
+ch0\500mV=1
+ch0\50mV=1
+ch1\1000mV=1
+ch1\100mV=1
+ch1\2000mV=1
+ch1\200mV=1
+ch1\20mV=1
+ch1\5000mV=1
+ch1\500mV=1
+ch1\50mV=1
+
+[offset]
+ch0\1000mV=4.82
+ch0\100mV=0
+ch0\2000mV=4.84
+ch0\200mV=5.11
+ch0\20mV=7.64
+ch0\5000mV=4.81
+ch0\500mV=4.95
+ch0\50mV=7.58
+ch1\1000mV=4.05
+ch1\100mV=1.09
+ch1\2000mV=4.04
+ch1\200mV=3.66
+ch1\20mV=1.09
+ch1\5000mV=4.05
+ch1\500mV=4.01
+ch1\50mV=1.1
diff --git a/utils/udev_rules/60-openhantek.rules b/utils/udev_rules/60-openhantek.rules
index 4754dddf..7ae06a50 100644
--- a/utils/udev_rules/60-openhantek.rules
+++ b/utils/udev_rules/60-openhantek.rules
@@ -23,4 +23,8 @@ ATTRS{idVendor}=="04b5", ATTRS{idProduct}=="0120", TAG+="uaccess", TAG+="udev-ac
ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="6021", TAG+="uaccess", TAG+="udev-acl", MODE="660", GROUP="plugdev"
ATTRS{idVendor}=="04b5", ATTRS{idProduct}=="6021", TAG+="uaccess", TAG+="udev-acl", MODE="660", GROUP="plugdev"
+# YiXingDianZiKeJi MDSO, without FW, with FW
+ATTRS{idVendor}=="d4a2", ATTRS{idProduct}=="5660", TAG+="uaccess", TAG+="udev-acl", MODE="660", GROUP="plugdev"
+ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="608e", TAG+="uaccess", TAG+="udev-acl", MODE="660", GROUP="plugdev"
+
LABEL="openhantek_rules_end"