diff --git a/Software/ADC/m4iset_extrig_rms.c b/Software/ADC/m4iset_extrig_rms.c
new file mode 100644
index 0000000000000000000000000000000000000000..93559b0c097f028b61fb0c99027ee7f8b9e93bb0
--- /dev/null
+++ b/Software/ADC/m4iset_extrig_rms.c
@@ -0,0 +1,76 @@
+#include "../../c_header/dlltyp.h"
+#include "../../c_header/regs.h"
+#include "../../c_header/spcm_drv.h"
+#include "../../c_header/spcerr.h"
+
+#include <stdio.h>
+
+
+void m4iset_(int16 *pvData, int32 *lMemsize, int32 *posttr)
+    {
+    drv_handle hDrv;
+    char szErrorText[ERRORTEXTLEN];
+    int32 lCardType;
+    int32 allchan;
+    int32 ausgabe;
+
+    hDrv = spcm_hOpen ("/dev/spcm0");
+        if (!hDrv)
+        {
+	printf("Error M4i-driver\n");
+        spcm_vClose (hDrv);
+	}
+
+
+    spcm_dwGetParam_i32 (hDrv, SPC_PCITYP, &lCardType);
+
+    spcm_dwSetParam_i32 (hDrv, SPC_CHENABLE, CHANNEL0); //Enable the channels that is going to be used. Channels can be added such as CHANNEL0 | CHANNEL1 etc.
+
+    //ADC Specific Settings. Perform this for every channel that is used 
+    spcm_dwSetParam_i32 (hDrv, SPC_PATH0, 0); 
+    spcm_dwSetParam_i32 (hDrv, SPC_AMP0, 500); // ADC dynamic range is adjusted to 500mV. Max is 1000
+    spcm_dwSetParam_i32 (hDrv, SPC_50OHM0, 1);
+    spcm_dwSetParam_i32 (hDrv, SPC_ACDC0, 0);
+    spcm_dwSetParam_i32 (hDrv, SPC_FILTER0, 1);
+
+
+    spcm_dwSetParam_i32 (hDrv, SPC_CARDMODE, SPC_REC_STD_SINGLE); //One time acquisition 
+    spcm_dwSetParam_i32 (hDrv, SPC_MEMSIZE, *lMemsize);           //Memory settings
+    spcm_dwSetParam_i32 (hDrv, SPC_POSTTRIGGER, *posttr);         //See documentation for post trigger settings
+
+    spcm_dwSetParam_i32 (hDrv, SPC_CLOCKMODE, SPC_CM_INTPLL);
+    spcm_dwSetParam_i32 (hDrv, SPC_SAMPLERATE, 500000000);        //ADC sampling rate is adjusted to 500 MHz 
+    spcm_dwSetParam_i32 (hDrv, SPC_CLOCKOUT, 1);
+
+    // Device accpets tirgger from EXT1 input. Please see documentation for more details.
+    spcm_dwSetParam_i32 (hDrv, SPC_TRIG_ORMASK, SPC_TMASK_EXT1); 
+    spcm_dwSetParam_i32 (hDrv, SPC_TRIG_EXT1_LEVEL0, 1000);
+    spcm_dwSetParam_i32 (hDrv, SPC_TRIG_EXT1_MODE, SPC_TM_POS);
+    
+    //Transfer the settings to the card
+    spcm_dwSetParam_i32 (hDrv, SPC_M2CMD, M2CMD_CARD_WRITESETUP);
+
+    //Start cards and wait for the trigger
+    spcm_dwSetParam_i32 (hDrv, SPC_M2CMD, M2CMD_CARD_START | M2CMD_CARD_ENABLETRIGGER);
+    //There is a 10 second timeout. If no trigger is detected card will start automatically
+    spcm_dwSetParam_i32 (hDrv, SPC_TIMEOUT, 10000);
+
+    if (spcm_dwSetParam_i32 (hDrv, SPC_M2CMD, M2CMD_CARD_WAITTRIGGER) == ERR_TIMEOUT)
+       {
+       printf ("trigger forced !\n");
+       spcm_dwSetParam_i32 (hDrv, SPC_M2CMD, M2CMD_CARD_FORCETRIGGER);
+       }
+    spcm_dwSetParam_i32 (hDrv, SPC_TIMEOUT, 0);
+    spcm_dwSetParam_i32 (hDrv, SPC_M2CMD, M2CMD_CARD_WAITREADY);
+    //Wait for the card to complete its operation. Then, Transfer the data to the PC
+
+    spcm_dwDefTransfer_i64 (hDrv, SPCM_BUF_DATA, SPCM_DIR_CARDTOPC, 0, pvData, 0, 2* *lMemsize);
+    spcm_dwSetParam_i32 (hDrv, SPC_M2CMD, M2CMD_DATA_STARTDMA | M2CMD_DATA_WAITDMA);
+    //Transfer is finished! Close the cards and release the driver
+    if (spcm_dwGetErrorInfo_i32(hDrv,NULL,NULL,szErrorText) != ERR_OK)
+       {printf(szErrorText);
+        spcm_vClose (hDrv);
+	}
+    spcm_vClose (hDrv);
+    }
+