CCCPaste
//ESand somewhere between working and having features
#include 
#include 
#include 
#include 
#include   //tcgetattr and sleep
#include 
#include 
#include 
#include 

//g++ -g -Wall -o "ppplotKinect" "ppplotKinect.cpp"  -lSDL -lSDL_ttf -lSDL_mixer -lSDL_image   -lfreenect -lfreenect_sync 
SDL_Surface* Backbuffer = NULL;
 /*
  * Config file: all integers for now, file: pplot.conf
  * initX,Y: relate to bounding area of the sensor. if we dont need to read more data points, dont.
  * pixelation reffers to limiting resolution by skipping pixels, which results in pixelation. 
  * pixelation, brightness, minDepth, maxDepth, depthScalling. 
  * pxX,pxY,brightness,minD, maxD, DScale, initX1,initX2, initY1, initY2
  * */
freenect_context *f_ctx;
freenect_device *f_dev;
#define WIDTH 640
#define HEIGHT 480

    //sysConfig vars
    int pxX=0;
    int pxY=0;
    int brightness=30;
    int minD=0;
    int maxD=2047;
    int DScale=1;
    int initX1=0;
    int initY1=0;
    int initX2=640;
    int initY2=480;
    int accelThreshX=0;
    int accelThreshY=0;
    int accelThreshZ=0;
    

using namespace std;
     int die = 0;

int kInit();                 //initiallize / test kinect library and device connection
void kClose();         //close the kinect device
void depth_cb(freenect_device *dev, void *depth, uint32_t timestamp);
void no_kinect_quit(void);     
bool ProgramIsRunning();
void DrawPixel(SDL_Surface *surface, int x, int y , unsigned int depth_value);
void IR(freenect_device *dev, uint16_t brightness);
int getCFG(string configFile);

int main(int argc, char* args[]){
	//read config file, and assign variables, unless the config file isnt pressent. 
	    string configFile="pplot.cfg";
getCFG(configFile);     //get or reset config variables from file or use system

    if(SDL_Init(SDL_INIT_EVERYTHING) < 0){
        printf("Failed to initialize SDL!\n");
        return 0;
    }
    kInit();  //init kinect lib, and device
    	int ire = freenect_get_ir_brightness(f_dev);
		printf("%d brightness\n", ire);
    //freenect_start_ir(f_dev);
    IR(f_dev,30);  //brightness 1 to 50 may effect resolution depending on conditions.

    freenect_set_depth_callback(f_dev, depth_cb);
    // Start the depth stream
    freenect_start_depth(f_dev);
    Backbuffer = SDL_SetVideoMode(640 ,480, 32, SDL_SWSURFACE);
    SDL_WM_SetCaption("Ghost Data", NULL);
    while(ProgramIsRunning())    {
		        if (freenect_process_events(f_ctx) < 0){
            break;
		}
    }
   SDL_Quit();
    kClose();
    return 0;
}

void depth_cb(freenect_device *dev, void *depth, uint32_t timestamp){
    // Cast the depth data to unsigned short (16-bit) xbox uses 11 bits of depth
    uint16_t *depth_data = (uint16_t *)depth;

unsigned int depth_value =0;
    int x = 0;
    int y = 0;
    int index = 0; //index 0 to 307840 

for (x=0; x<=WIDTH; x+=pxX){   //pxX cant B 3 I guess
     index = y*WIDTH+x;  
	depth_value = depth_data[index];  
    DrawPixel(Backbuffer, x,y, depth_value);

	if(x>=WIDTH){
		if(y>=HEIGHT){
	    x=0;
	    //y+=pxY;
	    y=0;
	    SDL_Flip(Backbuffer);	
	    return;
		}
		y+=pxY;  //goto next line: pxY
		x=0;
		}     
	}
}
bool ProgramIsRunning(){
    SDL_Event event;
	int brightness = freenect_get_ir_brightness(f_dev);

    bool running = true;
    while(SDL_PollEvent(&event))   {
        if(event.type == SDL_QUIT)
            running = false;
    }
    if(event.type==SDL_KEYDOWN){
		switch(event.key.keysym.sym){
			case SDLK_ESCAPE :
					running=false;
					break;
					
			case SDLK_a : 
			//get brightness add 1
			brightness = freenect_get_ir_brightness(f_dev);
		    freenect_set_ir_brightness(f_dev, brightness+1);
		    printf("brightness: %d \n", brightness);
		    if (brightness >=50){
				brightness=50;
				break;
				}
			break;
			case SDLK_d :
			//get brightness sub 1
			brightness = freenect_get_ir_brightness(f_dev);
		    freenect_set_ir_brightness(f_dev, brightness-1);
		    printf("brightness: %d \n", brightness);
		    if (brightness <=1){
				brightness=1;
				break;
				}
			break; 
				
             default : 
                    break;			
			}
		}

    return running;
}

void DrawPixel(SDL_Surface *surface,int x , int y , unsigned  int depth_value){
    if(SDL_MUSTLOCK(surface)){
        if(SDL_LockSurface(surface) < 0)
            return;
    }
    Uint32 *buffer;
    Uint32 color;

    color = SDL_MapRGB(surface->format, 0, 0, 0);
    if(x >= surface->w || x < 0 || y >= surface->h || y < 0)
        return;
//write a switch to convert depth to rgb values.
switch (depth_value) {
    //depth value fckery
    case 0 ... 400:
    color = SDL_MapRGB(surface->format, depth_value+100,0,0);  //red
    break;
    
    case 401 ... 624:
  color = SDL_MapRGB(surface->format, 255,depth_value/3,0); //orange scale
    break;
    
    case 625 ... 824:
    color = SDL_MapRGB(surface->format, depth_value-300,depth_value-300,0);  //yello
    break;
    
    case  825 ... 925:
    color = SDL_MapRGB(surface->format, 0,depth_value/5,0); //green scale
    break;
      
    case 926 ... 1480:
    color = SDL_MapRGB(surface->format, depth_value/20,0,depth_value/7); //indiogo
    break;
    
    case 1481 ... 1999:
    color = SDL_MapRGB(surface->format, 0,255, 255);
    break;

   case 2000 ... 2047:
        color = SDL_MapRGB(surface->format, depth_value,depth_value,depth_value); 
     break;
    default:
color = SDL_MapRGB(surface->format, 0,0,0);
    break;
        }

    buffer = (Uint32*)surface->pixels  + y*surface->pitch/4+x;
    (*buffer) = color;

    if(SDL_MUSTLOCK(surface))
        SDL_UnlockSurface(surface);
}
//Kinect Stuff
int kInit(){
   // Initialize libfreenect
    if (freenect_init(&f_ctx, NULL) < 0)    {
        printf("Failed to initialize libfreenect!\n");
        exit(1);
    }

    // Set the log level (optional)
   //  freenect_set_log_level(f_ctx, FREENECT_LOG_DEBUG);
   // Open the Kinect device
    if (freenect_open_device(f_ctx, &f_dev, 0) < 0)    {
       printf("Failed to open Kinect device!\n");
       exit(1);
    }
    return 0;
	}

void IR(freenect_device *dev, uint16_t brightness){
		int ire = freenect_get_ir_brightness(f_dev);
		freenect_set_ir_brightness(f_dev, brightness);
		printf("%d brightness\n", ire);
		cout << "pxX: " << pxX << " pxY:"<