diff --git a/sbs.conf b/sbs.conf
index c82700d1fb766c43188022943d66d85bd8f185b3..ac0a64604418413bea0d86a2a94d1923f7f34ee8 100644
--- a/sbs.conf
+++ b/sbs.conf
@@ -97,9 +97,9 @@ Type:       srcfiles
 Files:      src/shared/boards/AnakinBoard.cpp
             src/shared/drivers/Leds.cpp
 
-[dsgamma-serial]
+[dsgamma]
 Type:       srcfiles
-Files:      src/shared/drivers/dsgamma-serial/dsgamma-serial.cpp
+Files:      src/shared/drivers/dsgamma/dsgamma-serial.cpp
 
 
 # Boards 
@@ -199,10 +199,10 @@ Include:    %piksi
 Defines:   
 Main:       test-piksi
 
-[test-dsgamma-serial]
+[dsgamma-config]
 Type:       board
-BoardId:    stm32f407vg_stm32f4discovery
-BinName:    test-dsgamma
-Include:    %dsgamma-serial
+BoardId:    stm32f429zi_stm32f4discovery
+BinName:    dsgamma-config
+Include:    %dsgamma
 Defines:   
-Main:       test-dsgamma-serial
\ No newline at end of file
+Main:       dsgamma-config
\ No newline at end of file
diff --git a/src/entrypoints/dsgamma-config.cpp b/src/entrypoints/dsgamma-config.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..635935f47a3c2682a62732d3552c7ae647b7ed6b
--- /dev/null
+++ b/src/entrypoints/dsgamma-config.cpp
@@ -0,0 +1,297 @@
+/*
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * !! NEEDS AN OPEN auxtty@9600       !!
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * 
+ * 1. Connect the device's RX and TX to the auxtty usart pins (USART3: PB9 tx, PB10 rx)
+ * 2. Connect device's LRN SW pin to learnSwitch and LRN LED to learnAck (default PB2, PB0)
+ * 3. Connect to the default serial port to read/write (PA10 tx, PA11 rx)
+ */
+
+#include <cstdio>
+#include "miosix.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+
+using namespace std;
+using namespace miosix;
+
+struct config{
+    int local_addr[3] = {127, 127, 127};
+    int dest_addr[3] = {127, 127, 127};
+    int lora_mode = 6;
+    int lora_pow = 15;
+    int handshake = 0;
+    int baudrate = 4;
+};
+
+//STM32F429 specific
+typedef Gpio<GPIOG_BASE,13> greenLed;
+typedef Gpio<GPIOG_BASE,14> redLed;
+typedef Gpio<GPIOB_BASE,2> learnSwitch;
+typedef Gpio<GPIOB_BASE,0> learnAck;
+typedef Gpio<GPIOA_BASE,0> button;
+
+//Needed to check if learn mode is really active.
+FastMutex learnMutex;          
+ConditionVariable learnCond;    
+int learnMode=0;   
+
+//Serial port
+int fd = -1;
+
+int initialize();
+int enterLearnMode();
+void confirmLearnMode(void *arg);
+void timer(void *arg);
+void printConfig();
+int writeConfig(config conf);
+
+void waitForButton();
+void waitForOk();
+
+int main(){
+    
+    printf("\n----- GAMMA868 CONFIGURATOR -----\n");
+    int init = initialize();                          //Initialize
+    if(init < 0){
+        printf("Exiting program.");
+        return -1;
+    }
+    
+    while(1){
+        printf("Press button to start dsgamma configuration.\n");
+        waitForButton();
+        int lrn = enterLearnMode();             //Learn Mode
+        
+        if(lrn < 0){
+            printf("Check that the device is correctly connected and retry.\n");
+        }else{
+            //Get current configuration
+            Thread::sleep(100);
+            printConfig();
+            
+            //Write new configuration
+            //TODO check values before saving them
+            struct config newConf;
+            
+            printf("LOCAL ADDRESS (3 bytes, 0-127 each):\n");
+            scanf("%d %d %d", &newConf.local_addr[0], &newConf.local_addr[1], &newConf.local_addr[2]);
+            printf("DESTINATION ADDRESS (3 bytes, 0-127 each):\n");
+            scanf("%d %d %d", &newConf.dest_addr[0], &newConf.dest_addr[1], &newConf.dest_addr[2]); 
+            printf("LORA MODE (1-6):\n");
+            scanf("%d", &newConf.lora_mode);
+            printf("LORA POWER (0-15):\n");
+            scanf("%d", &newConf.lora_pow);
+            printf("HANDSHAKE (0-1):\n");
+            scanf("%d", &newConf.handshake);
+            printf("BAUDRATE (0-4):\n");
+            scanf("%d", &newConf.baudrate);
+
+            writeConfig(newConf);       //TODO catch error
+
+            //Get current configuration
+            Thread::sleep(100);
+            printConfig();
+
+            //Wait for button to close learn mode
+            printf("Press button to end configuration.\n");
+            waitForButton();
+            write(fd,"#Q", 2);
+            printf("Configuration ended.\n\n");
+        }
+        
+        //Clean up
+        learnMode=0;
+        greenLed::low();
+        Thread::sleep(500);
+    }
+
+}
+
+/*
+ * Configures discovery gpio and serial port to communicate with the gamma868 module.
+ */
+int initialize(){
+    //Discovery gpio setup
+    {
+        FastInterruptDisableLock dLock;
+        greenLed::mode(Mode::OUTPUT);
+        redLed::mode(Mode::OUTPUT);
+        button::mode(Mode::INPUT);
+        learnSwitch::mode(Mode::OUTPUT);
+        learnAck::mode(Mode::INPUT);
+    }
+    learnSwitch::high();                            //Learn switch is active low
+     
+    //Serial port setup
+    printf("Opening serial port /dev/auxtty on discovery board ... ");
+    fd = open("/dev/auxtty",O_RDWR);
+    if(fd<0){
+        printf("Failed!\n");
+        return -1;
+    }
+    else{
+        printf("Ok\n");
+        return 0;
+    }
+    
+}
+
+/*
+ * Puts the gamma868 in "learn mode" (configuration mode).
+ */
+int enterLearnMode(){
+    //Enter learn mode
+    printf("Entering learn mode ... ");
+    fflush(stdout);
+    learnSwitch::low();
+
+    //Create learn mode confirmation and timeout thread
+    Thread *checkLearnModeThread, *timeoutThread;
+    checkLearnModeThread = Thread::create(confirmLearnMode,STACK_MIN);
+    timeoutThread = Thread::create(timer,STACK_MIN);
+    if(checkLearnModeThread == NULL || timeoutThread == NULL){
+        printf("Failed: learn mode control threads not created.\n");
+        return -1;
+    }
+
+    //Wait for confirm (or timeout)
+    {
+        Lock<FastMutex> l(learnMutex);
+        while(learnMode==0) learnCond.wait(l);
+    }
+    
+    learnSwitch::high();            //Stop "pushing" the button
+    
+    if(learnMode==-1){
+        printf("Failed!\n");
+        return -2;
+    }
+    else{
+        printf("Ok\n");
+        greenLed::high();
+        return 0;
+    }
+}
+
+/*
+ * Prints gamma868 configuration.
+ */
+void printConfig(){
+    //TODO timeout
+    char config[15];
+    write(fd,"#?", 2);
+    read(fd, config, 15);
+    printf("Current configuration: \n");
+    for (int i = 2; i < 13; i++){
+        printf("%02X ", config[i]);             //Prints hex values
+    }
+    printf("\n");
+    
+}
+
+/*
+ * Sends new configuration to the gamma868 module.
+ */
+int writeConfig(struct config conf){
+    //TODO check values before writing 
+    
+    char conf_addr[8] = "#A";
+    for(int i = 0; i < 3; i++){
+        conf_addr[2+i] = (char)conf.local_addr[i];
+        conf_addr[5+i] = (char)conf.dest_addr[i];
+    }
+    write(fd, conf_addr, 8);
+    waitForOk(); 
+    
+    char conf_baud[3] = "#B";
+    conf_baud[2] = (char)conf.baudrate;
+    write(fd, conf_baud, 3);
+    waitForOk(); 
+    
+    char conf_handshake[3] = "#H";
+    conf_handshake[2] = (char)conf.handshake;
+    write(fd, conf_handshake, 3);
+    waitForOk(); 
+    
+    char conf_lora[4] = "#C";
+    conf_lora[2] = (char)conf.lora_mode;
+    conf_lora[3] = (char)conf.lora_pow;
+    write(fd, conf_lora, 4);
+    waitForOk(); 
+    
+    return 0;
+}
+
+/*
+ * Checks how many times the gamma868 LRN LED flashes: 2 flashes confirm 
+ * that the device has entered learn mode.
+ * Runs in a separate Thread.
+ */
+void confirmLearnMode(void *arg){
+    int times = 0;
+    int learn = learnAck::value();
+    
+    while(1){
+        Thread::sleep(100);
+        if (learnMode!=0 ) break;           //Breaks if timer has set learnMode to -1
+        
+        int curState = learnAck::value();
+        if(curState != learn){              //Count how many times the led changes state
+            learn = curState;
+            times++;
+        }
+        
+        if (times == 5){                    //Set learnMode flag to 1 (with mutex).
+            {
+                Lock<FastMutex> l(learnMutex);
+                learnMode=1;
+                learnCond.signal();
+            }
+            break;
+        }
+    }
+    
+}
+
+/*
+ * Waits for 5 seconds : if learn mode wasn't confirmed  after this time,
+ * signal an error.
+ * Runs in a separate Thread.
+ */
+void timer(void *arg){
+    for(int i = 0; i < 50; i++){
+        if (learnMode > 0) break;                //If the learnMode confirm arrives, stop the timer.
+        
+        if(i == 49){
+            {
+                Lock<FastMutex> l(learnMutex);
+                learnMode=-1;
+                learnCond.signal();
+            }
+        }
+        Thread::sleep(100);                     //100ms x 50 cycles = 5 sec
+    }
+}
+
+/*
+ * Waits for the discovery user button to be pressed (blocking).
+ */
+void waitForButton(){
+    while(1){
+        if(button::value()==1) break;       //Wait for button
+    }
+}
+
+/*
+ * Waits until an "OK" is received on the serial port (blocking).
+ */
+void waitForOk(){
+    char reply[3];
+    read(fd, reply, 3);
+    printf("%s\n", reply);
+    Thread::sleep(100);
+}
\ No newline at end of file
diff --git a/src/entrypoints/dsgamma-test.cpp b/src/entrypoints/dsgamma-test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..55192919a98d6517238ed04890c50b63fbfc5cf8
--- /dev/null
+++ b/src/entrypoints/dsgamma-test.cpp
@@ -0,0 +1,19 @@
+/*
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * !! NEEDS AN OPEN auxtty@57600      !!
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ */
+
+#include <cstdio>
+#include "miosix.h"
+#include <string.h>
+
+using namespace std;
+using namespace miosix;
+
+int main() {
+
+    
+    return 0;
+}
+
diff --git a/src/shared/drivers/dsgamma-serial/dsgamma-serial.cpp b/src/shared/drivers/gamma868/dsgamma-serial.cpp
similarity index 100%
rename from src/shared/drivers/dsgamma-serial/dsgamma-serial.cpp
rename to src/shared/drivers/gamma868/dsgamma-serial.cpp
diff --git a/src/shared/drivers/dsgamma-serial/dsgamma-serial.h b/src/shared/drivers/gamma868/dsgamma-serial.h
similarity index 100%
rename from src/shared/drivers/dsgamma-serial/dsgamma-serial.h
rename to src/shared/drivers/gamma868/dsgamma-serial.h