Exemplo n.º 1
0
int main() {
	init();
	SerialHandler serialHandler(PORT, BAUD_RATE);
	while(true) {
		updatePixels();
		int sumR = 0, sumG = 0, sumB = 0;
		const int x1 = 0, y1 = 0, x2 = SCR_W, y2 = SCR_H, SAMPLES = 5;
		for(int x = x1; x < x2; x += SAMPLES) {
			for(int y = y1; y < y2; y += SAMPLES) {
				Color color = getPixel(x, y);
				sumR += color.r; sumG += color.g; sumB += color.b;
			}
		}
		int totalPixels = ((x2 - x1) * (y2 - y1)) / (SAMPLES * SAMPLES);
		sumR /= totalPixels; sumG /= totalPixels; sumB /= totalPixels;
		int h = 0, s = 0, v = 0;
		RGBtoHSV(sumR, sumG, sumB, &h, &s, &v);
        v = (v * s) / 255;
		s = 255;
		HSVtoRGB(&sumR, &sumG, &sumB, h, s, v);
		serialHandler.writeSerial(sumR, sumG, sumB);
		delay(10);
	}
	deinit();
	return 0;
}
Exemplo n.º 2
0
void scan_serports(void)
{
  word *port_addr = (word *)0x400;
  int i, io, irq;
  mid_t mbox = __allocMbox( 50 );

  i = 0;
/*
  for(i=0; i < 4; i++, port_addr++)
  {
    if(*port_addr != 0) {
      switch(i) {
        case 0:
          io = SER1_BASE;
          irq = 4;
          break;
        case 1:
          io = SER2_BASE;
          irq = 3;
          break;
        case 2:
          io = SER3_BASE;
          irq = 4;
          break;
        case 3:
          io = SER4_BASE;
          irq = 3;
          break;
        default:
          break;
      }

      print("SER%d: found. Addr: 0x%x IRQ: 0x%02x\n", i + 1, io, irq);
/ *
      if((i == 0) || (i == 2)) {
        register_irq(IRQ4);
        add_ISR(&serial, IRQ4);
      }
      else {
        register_irq(IRQ3);
        add_ISR(&serial, IRQ3);
      }
* /
    }
  }
*/
  __sleep( 1000 );

  __registerInt(mbox, IRQ4);
  __registerInt(mbox, IRQ3);

  set_dlab(1, SER1_BASE);
  set_baudrate(S9600BAUD, SER1_BASE);
  set_line_ctrl(0x03, SER1_BASE);
  ser_fifo_ctrl(0xC7, SER1_BASE);
  set_modem_ctl(0x0B, SER1_BASE);
  ser_enable_int(0x07, SER1_BASE);

  serialHandler();
}
Exemplo n.º 3
0
void pmaxdMessageHandler(xPL_ServicePtr theService, xPL_MessagePtr theMessage, xPL_ObjectPtr userValue) {
  DEBUG(LOG_DEBUG,"Received a pmaxd Message from %s-%s.%s of type %d for %s.%s\n", 
	xPL_getSourceVendor(theMessage), xPL_getSourceDeviceID(theMessage), xPL_getSourceInstanceID(theMessage),
	xPL_getMessageType(theMessage), xPL_getSchemaClass(theMessage), xPL_getSchemaType(theMessage));
	DEBUG(LOG_DEBUG,"xpl message received: %s",xPL_formatMessage(theMessage));    
  DEBUG(LOG_INFO,"command: %s ", xPL_getMessageNamedValue(theMessage, "command"));
        
  if (strcmp("basic",xPL_getSchemaType(theMessage))==0 && xPL_getMessageNamedValue(theMessage, "command")!=NULL )  { 
    if (strcmp("arm-away",xPL_getMessageNamedValue(theMessage, "command"))==0 ) {
      DEBUG(LOG_INFO,"arming away.........");
      sendBuffer(&PowerlinkCommand[Pmax_ARMAWAY]);
    } 
    if (strcmp("arm-home",xPL_getMessageNamedValue(theMessage, "command"))==0 ) {
      DEBUG(LOG_INFO,"arming home........");
      sendBuffer(&PowerlinkCommand[Pmax_ARMHOME]);
    } 
    if (strcmp("disarm",xPL_getMessageNamedValue(theMessage, "command"))==0  )  {
      DEBUG(LOG_INFO,"disarming.....");
      sendBuffer(&PowerlinkCommand[Pmax_DISARM]);
    }
  }
  DEBUG(LOG_INFO,"not a security basic");
  if (strcmp("request",xPL_getSchemaType(theMessage))==0 && xPL_getMessageNamedValue(theMessage, "request")!=NULL )  { 
    DEBUG(LOG_INFO,"a security request");
    if (strcmp("gatestat",xPL_getMessageNamedValue(theMessage, "request"))==0  )  {
      DEBUG(LOG_INFO,"requesting getstat.....");
    
    
      
      sendBuffer(&PowerlinkCommand[Pmax_REQSTATUS]);
      int i;
      for(i=0;i<50;i++) {      
      serialHandler();
      }
      
      if (lastValidSerialIO<(time(NULL)-10))
      { DEBUG(LOG_INFO,"lst serial command too old");}
      else  {
      DEBUG(LOG_INFO,"lst serial recent enough");
      
      /* Create a message to send */
      pmaxdMessage = xPL_createBroadcastMessage(pmaxdService, xPL_MESSAGE_STATUS); 
    
      xPL_setSchema(pmaxdMessage, "security", "gatestat");              // setschema to security.basic
  
      xPL_setMessageNamedValue(pmaxdMessage, "status", gatestat.status);
     /* if (pmaxSystem.xplalarmstatus==AlarmArmed)    
        xPL_setMessageNamedValue(pmaxdMessage, "status", "armed");
      else   
        xPL_setMessageNamedValue(pmaxdMessage, "status", "disarmed"); */
      
      xPL_setMessageNamedValue(pmaxdMessage, "pmaxstatus", gatestat.pmstatus);
      /*if (pmaxSystem.xplpmaxstatus==PmaxArmedAway)
        xPL_setMessageNamedValue(pmaxdMessage, "pmaxstatus", "armed-away");
      if (pmaxSystem.xplpmaxstatus==PmaxArmedHome)  
        xPL_setMessageNamedValue(pmaxdMessage, "pmaxstatus", "armed-home");
      if (pmaxSystem.xplpmaxstatus==PmaxDisarmed)  
        xPL_setMessageNamedValue(pmaxdMessage, "pmaxstatus", "disarmed"); */
      
      /*if (pmaxSystem.readytoarm)        
        xPL_setMessageNamedValue(pmaxdMessage, "readytoarm", "true");
      else
        xPL_setMessageNamedValue(pmaxdMessage, "readytoarm", "false");   
        */
/*           
      
      if (pmaxSystem.status==0 || pmaxSystem.status==1 || pmaxSystem.status==2) {
        xPL_setMessageNamedValue(pmaxdMessage, "status", "disarmed");
        xPL_setMessageNamedValue(pmaxdMessage, "pmaxstatus", "disarmed");
      }      
      if (pmaxSystem.status==4 ||  pmaxSystem.status==10 )  {
        xPL_setMessageNamedValue(pmaxdMessage, "status", "armed");
        xPL_setMessageNamedValue(pmaxdMessage, "pmaxstatus", "armed-home");
      }     
      if (pmaxSystem.status==3 || pmaxSystem.status==5 || pmaxSystem.status==11)  {
        xPL_setMessageNamedValue(pmaxdMessage, "status", "armed");
        xPL_setMessageNamedValue(pmaxdMessage, "pmaxstatus", "armed-away");
      }      
      if ( (pmaxSystem.flags & 0x01)==1 )  {
        xPL_setMessageNamedValue(pmaxdMessage, "readytoarm", "true");
      }
      else  {
        xPL_setMessageNamedValue(pmaxdMessage, "readytoarm", "false");
      } */
      
      /* Broadcast the message */
      DEBUG(LOG_DEBUG,"xpl message sent: %s",xPL_formatMessage(pmaxdMessage));
      xPL_sendMessage(pmaxdMessage);
      }      
    }
    if (strcmp("zonelist",xPL_getMessageNamedValue(theMessage, "request"))==0  )  {
      DEBUG(LOG_INFO,"requesting zonelist.....");
  
      pmaxdMessage = xPL_createBroadcastMessage(pmaxdService, xPL_MESSAGE_STATUS);
      xPL_setSchema(pmaxdMessage, "security", "zonelist");              // setschema to security.basic
      
      char zonelist[256];
      zonelist[0]=0;
      char id[10];
      int i;
      for (i=1;i<=30;i++) {
        if (gatestat.zone[i].enrolled)  {
        //sprintf(id,"%d,",i);
        strcat(zonelist,gatestat.zone[i].info.id);
        strcat(zonelist,","); 
        }
      }
      zonelist[strlen(zonelist)-1]=0;
      DEBUG(LOG_INFO,"zonelist: %s",zonelist);
      xPL_setMessageNamedValue(pmaxdMessage, "zone-list", zonelist);
      DEBUG(LOG_DEBUG,"xpl message sent: %s",xPL_formatMessage(pmaxdMessage)); 
      xPL_sendMessage(pmaxdMessage);   
    }
     
     if (strcmp("zoneinfo",xPL_getMessageNamedValue(theMessage, "request"))==0  )  {
      int zone;
      zone=0;
      char * zonebuffer;
      zonebuffer= xPL_getMessageNamedValue(theMessage, "zone");
  //    sscanf(zonebuffer,"%d",&zone);
     int i; 
      for (i=1;i<=30;i++)
  {
//      pmaxSystem.sensor[i].type=perimeter;
      if (strcmp(gatestat.zone[i].info.id,zonebuffer)==0) break;         
  }
     zone=i; 
      
      
     DEBUG(LOG_INFO,"requesting zoneinfo for zone %s,%d.....",zonebuffer,zone);
          
      pmaxdMessage = xPL_createBroadcastMessage(pmaxdService, xPL_MESSAGE_STATUS);
      xPL_setSchema(pmaxdMessage, "security", "zoneinfo");              // setschema to security.basic
      xPL_setMessageNamedValue(pmaxdMessage, "zone", zonebuffer);
      xPL_setMessageNamedValue(pmaxdMessage, "zone-type", gatestat.zone[zone].info.zonetype);
      
     // if (pmaxSystem.sensor[zone].type==interior  )  xPL_setMessageNamedValue(pmaxdMessage, "zone-type", "interior");
     // if (pmaxSystem.sensor[zone].type==perimeter  )  xPL_setMessageNamedValue(pmaxdMessage, "zone-type", "perimeter");      
      DEBUG(LOG_DEBUG,"xpl message sent: %s",xPL_formatMessage(pmaxdMessage));
      xPL_sendMessage(pmaxdMessage);   
    }
    if (strcmp("zonestat",xPL_getMessageNamedValue(theMessage, "request"))==0  )  {
      int zone;
      zone=0;
      char * zonebuffer;
      zonebuffer=xPL_getMessageNamedValue(theMessage, "zone");
      //sscanf(zonebuffer,"%d",&zone);
       int i; 
      for (i=1;i<=30;i++)
  {
      if (strcmp(gatestat.zone[i].info.id,zonebuffer)==0) break;         
  }
     zone=i; 
      DEBUG(LOG_INFO,"requesting zonestat for zone %s,%d.....",zonebuffer,zone);
          
      pmaxdMessage = xPL_createBroadcastMessage(pmaxdService, xPL_MESSAGE_STATUS);
      xPL_setSchema(pmaxdMessage, "security", "zonestat");              // setschema to security.basic
      xPL_setMessageNamedValue(pmaxdMessage, "zone", zonebuffer);
      
      xPL_setMessageNamedValue(pmaxdMessage, "alert", gatestat.zone[zone].stat.alert); 
      //if (pmaxSystem.sensor[zone].state==SensorClose  )  xPL_setMessageNamedValue(pmaxdMessage, "alert", "false");
      //if (pmaxSystem.sensor[zone].state==SensorOpen  )  xPL_setMessageNamedValue(pmaxdMessage, "alert", "true");

      xPL_setMessageNamedValue(pmaxdMessage, "armed", gatestat.zone[zone].stat.armed);   
      //if (pmaxSystem.sensor[zone].armed  )  xPL_setMessageNamedValue(pmaxdMessage, "armed", "true");
      //else  xPL_setMessageNamedValue(pmaxdMessage, "armed", "false"); 
      
   
     
      xPL_setMessageNamedValue(pmaxdMessage, "alarm", gatestat.zone[zone].stat.alarm);
      xPL_setMessageNamedValue(pmaxdMessage, "state", gatestat.zone[zone].stat.state);
      
      xPL_setMessageNamedValue(pmaxdMessage, "tamper", gatestat.zone[zone].stat.tamper);
      //if (pmaxSystem.sensor[zone].tampered  )  xPL_setMessageNamedValue(pmaxdMessage, "tamper", "true");
      //else  xPL_setMessageNamedValue(pmaxdMessage, "tamper", "false");
      
      xPL_setMessageNamedValue(pmaxdMessage, "low-battery", gatestat.zone[zone].stat.lowbattery); 
      //if (pmaxSystem.sensor[zone].lowbattery  )  xPL_setMessageNamedValue(pmaxdMessage, "low-battery", "true");
      //else  xPL_setMessageNamedValue(pmaxdMessage, "low-battery", "false");  
      DEBUG(LOG_DEBUG,"xpl message sent: %s",xPL_formatMessage(pmaxdMessage));
      xPL_sendMessage(pmaxdMessage);
      
         
    }
  }
  DEBUG(LOG_INFO,"end message handling");
}