示例#1
0
/*---------------------------------------------------------------------------*/
#if 1 /* But ok! */
unsigned
sht11_sreg(void)
{
  unsigned sreg, rcrc;

  sstart();			/* Start transmission */
  if(!swrite(STATUS_REG_R)) {
    goto fail;
  }

  sreg = sread(1);
  rcrc = sread(0);

#ifdef CRC_CHECK
  {
    unsigned crc;
    crc = crc8_add(0x0, STATUS_REG_R);
    crc = crc8_add(crc, sreg);
    if (crc != rev8bits(rcrc))
      goto fail;
  }
#endif

  return sreg;

 fail:
  sreset();
  return -1;
}
示例#2
0
/*
 * Only commands MEASURE_HUMI or MEASURE_TEMP!
 */
static unsigned int
scmd(unsigned cmd)
{
  unsigned long n;

  if(cmd != MEASURE_HUMI && cmd != MEASURE_TEMP) {
    return -1;
  }
  MCUCR |= (1<<JTD);
  MCUCR |= (1<<JTD);

  sreset();
  /* Start transmission */
  if(!swrite(cmd)) {
	  //printf("-2");
	  goto fail;
  }

  for(n = 0; n < 250000; n++) {
    if(!SDA_IS_1) {
      unsigned t0, t1, rcrc;
      t0 = sread(1);
      t1 = sread(1);
      rcrc = sread(0);
      //printf("t0:%d",t0);
      //printf("t1:%d",t1);
#ifdef CRC_CHECK
      {
	unsigned crc;
	crc = crc8_add(0x0, cmd);
	crc = crc8_add(crc, t0);
	crc = crc8_add(crc, t1);
	if(crc != rev8bits(rcrc)) {
		// printf("-3");
		goto fail;
	}
      }
#endif
      MCUCR &= (0<<JTD);
      MCUCR &= (0<<JTD);

      return (t0 << 8) | t1;
    }
  }

 fail:
  sreset();
  //printf("-1");
  MCUCR &= (0<<JTD);
  MCUCR &= (0<<JTD);

  return -1;
}
示例#3
0
文件: sht11.c 项目: anhquang/contiki
/*
 * Only commands MEASURE_HUMI or MEASURE_TEMP!
 */
static unsigned int
scmd(unsigned cmd)
{
  unsigned int n;

  if(cmd != MEASURE_HUMI && cmd != MEASURE_TEMP) {
    PRINTF("Illegal command: %d\n", cmd);
    return -1;
  }

  sstart();			/* Start transmission */
  if(!swrite(cmd)) {
    PRINTF("SHT11: scmd - swrite failed\n");
    goto fail;
  }

  for(n = 0; n < 20000; n++) {
    if(!SDA_IS_1) {
      unsigned t0, t1, rcrc;
      t0 = sread(1);
      t1 = sread(1);
      rcrc = sread(0);
      PRINTF("SHT11: scmd - read %d, %d\n", t0, t1);
#ifdef CRC_CHECK
      {
	unsigned crc;
	crc = crc8_add(0x0, cmd);
	crc = crc8_add(crc, t0);
	crc = crc8_add(crc, t1);
	if(crc != rev8bits(rcrc)) {
	  PRINTF("SHT11: scmd - crc check failed %d vs %d\n",
		 crc, rev8bits(rcrc));
	  goto fail;
	}
      }
#endif
      return (t0 << 8) | t1;
    }
    /* short wait before next loop */
    clock_wait(1);
  }
 fail:
  sreset();
  return -1;
}
static void End_Callback(void)
{
    uint8_t i;

    // If there was a communication error, return and don't process packet
    if (CommStatus & COMM_ERROR)
        return; 

    if (SMB_Packet.RxCounter != 0x00)
    {
#ifdef SMB_NACK_WHILE_BUSY
        TI_MSPBoot_CI_PHYDL_disable();       // NACK until we have processed the command
#endif
        #ifdef SMB_PEC_SUPPORTED
        // Packet with PEC should have at least more than 1 byte (CMD + PEC)
        if ((SMB_Packet.RxCounter > 1) && (SMB_Packet.RxPacket[0] & PEC_CMD))
        {
            SMB_Packet.Pec = 0x00;
            crc8_add(&SMB_Packet.Pec, I2C_SLAVE_ADDR_W);
            for (i=0; i < (SMB_Packet.RxCounter-1); i++)
               crc8_add(&SMB_Packet.Pec, SMB_Packet.RxPacket[i]);
            if (SMB_Packet.Pec != SMB_Packet.RxPacket[SMB_Packet.RxCounter -1])
            {
                SMB_Packet.TxByte = RESPONSE_PEC_ERROR;
#ifdef SMB_NACK_WHILE_BUSY
                TI_MSPBoot_CI_PHYDL_reenable();
#endif
                return;
            }
        }
        #endif

        CommStatus |= COMM_PACKET_RX;   // Packet was received
    }

}