예제 #1
0
void sensor_notifier() {
    // Find the sensor server.
    int sensor_server_tid = -2;
    do {
        sensor_server_tid = WhoIs("SensorServer");
        dlog("Sensor Server Tid %d\n", sensor_server_tid);
    } while (sensor_server_tid < 0);

    // Set up sensors.
    enable_sensor_reset();

    // Delay a bit to read old data and then clear it.
    Delay(10);
    ReadClear(COM1);

    // Poll sensor data and forward it.
    SensorServerMessage msg;
    SensorServerMessage rply;
    msg.type = SENSOR_EVENT_REQUEST;

    char old_data[SENSOR_DATA_SIZE] = {0,0,0,0,0,0,0,0,0,0};
    for(;;) {
        dump_sensors();
        
        int i = 0;
        for (; i < SENSOR_DATA_SIZE; ++i) {
            char new_data = (char)Getc(COM1);
            msg.data[i] = new_data & ~old_data[i];
            old_data[i] = new_data;
        }

        Send(sensor_server_tid, (char *)&msg, sizeof(msg), (char *)&rply, sizeof(rply));
        dassert(rply.type == SENSOR_EVENT_RESPONSE, "Invalid Response from SensorServer");
    }
}
예제 #2
0
dev_test_state TDC_C0301::Test(void)
{
	dev_test_state dt = dev_test_to_intermediate( Base::Test() );
	if (dt!=DEV_TEST_OK) return dt;

	__u16 data;
	int rc = 0;
	for ( TDC_ch_t i=0; i<nCh; i++)
		rc |= ReadClear(i, &data);
	if (rc&CAMAC_CC_ERRORS) return dfcamac_rc2test(rc);

	return DEV_TEST_OK;
}
예제 #3
0
byte*  iFrogLabLoRaLibrary::Read16bytesBroadcast(){
  m_Debug=1;
  ReadMode();
  ReadClear();

  //byte t2[16+1+3];
  byte CRC = 0; 
  byte readLen=0;
  // byte len=sizeof(iData) / sizeof(byte);  // sizeof(iData); //(byte)(iStr.length());
  //byte len1=len+1;
  //if(len==0) return;

  
  // 定義碼
  byte t1[] = {0xc1,0x06,0x00,CRC};
  CRC=Fun_CRC(t1,3);  
  t1[3] = CRC;
  

  mySerial->write(t1,4);
  Fun_PrintArray(t1,4);
  if(m_Debug==1) Serial.print("Recive: ");

  /*
  for(int j=0;j<DeTimeout;j++){
    if (mySerial->available()) {
      byte t1=mySerial->read();
      if(m_Debug==1) {
        Serial.print(t1, HEX);
        Serial.print(",");
      }
    }
  }
  */

 
  i=0;
  int k=0;
  for(int j=0;j<DeTimeout;j++){
   if (mySerial->available()) {
    byte t1=mySerial->read();
    if(m_Debug==1) {
      Serial.print(t1, HEX);
      Serial.print(",");
    }
    data[i]=t1;
    i=i+1;
    if(i>=2){

      if(i>=3) {
        if(data[0]==0xc1 && data[1]==0x86){
          int tlen=data[2];
          /*Serial.print("(");
          Serial.print(tlen, HEX);
          Serial.print("-");
          Serial.print(i, HEX);
          Serial.print(")");*/
          if(i>=2+1+tlen+1){
             for(int x=0;x<tlen;x++){
               data2[x]=data[3+x];
             } 
             ReadClear();
             return data2;
          }
        }else{
          Serial.println("");  
          Serial.println("Error!");   
          ReadClear();
          return;
        }
      }
    }
   }
  }
  Serial.println("");  
  Message_error();
  
}