Add exitThread() polling the exit button (#888)
* Add exitThread() polling the exit button * Add missing includes * Remove redundant code
This commit is contained in:
		
				
					committed by
					
						
						Peli de Halleux
					
				
			
			
				
	
			
			
			
						parent
						
							e511630c2e
						
					
				
				
					commit
					8b3461bebd
				
			@@ -159,11 +159,6 @@ namespace brick {
 | 
			
		||||
            if (sl[i])
 | 
			
		||||
                ret |= 1 << i
 | 
			
		||||
        }
 | 
			
		||||
        // this needs to be done in query(), which is run without the main JS execution mutex
 | 
			
		||||
        // otherwise, while(true){} will lock the device
 | 
			
		||||
        if (ret & DAL.BUTTON_ID_ESCAPE) {
 | 
			
		||||
            control.reset()
 | 
			
		||||
        }
 | 
			
		||||
        return ret
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,8 @@
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <malloc.h>
 | 
			
		||||
#include <sys/mman.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#include "ev3const.h"
 | 
			
		||||
 | 
			
		||||
#define THREAD_DBG(...)
 | 
			
		||||
@@ -145,6 +147,29 @@ static void startUsb() {
 | 
			
		||||
    pthread_detach(pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void *exitThread(void *) {
 | 
			
		||||
    int fd = open("/dev/lms_ui", O_RDWR, 0666);
 | 
			
		||||
    if (fd < 0)
 | 
			
		||||
        return 0;
 | 
			
		||||
    uint8_t *data =
 | 
			
		||||
        (uint8_t *)mmap(NULL, NUM_BUTTONS, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
 | 
			
		||||
    if (data == MAP_FAILED) {
 | 
			
		||||
        close(fd);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        if (data[5])
 | 
			
		||||
            target_reset();
 | 
			
		||||
        sleep_core_us(50000);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void startExitThread() {
 | 
			
		||||
    pthread_t pid;
 | 
			
		||||
    pthread_create(&pid, NULL, exitThread, NULL);
 | 
			
		||||
    pthread_detach(pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sendUsb(uint16_t code, const char *data, int len) {
 | 
			
		||||
    while (len > 0) {
 | 
			
		||||
        int sz = len;
 | 
			
		||||
@@ -519,6 +544,7 @@ void initRuntime() {
 | 
			
		||||
    DMESG("runtime starting...");
 | 
			
		||||
    stopLMS();
 | 
			
		||||
    startUsb();
 | 
			
		||||
    startExitThread();
 | 
			
		||||
    pthread_t disp;
 | 
			
		||||
    pthread_create(&disp, NULL, evtDispatcher, NULL);
 | 
			
		||||
    pthread_detach(disp);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user