Beispiel #1
0
/**************************************************************************************************
 * @fn          sblInit
 *
 * @brief       Boot Loader initialization.
 *
 * input parameters
 *
 * None.
 *
 * output parameters
 *
 * None.
 *
 * @return      TRUE if there is a valid RC image; FALSE otherwise.
 */
uint8 sblInit(void)
{
  aesLoadKey();

#if defined AES_TEST_VECS
  uint8 checkSig[KEY_BLENGTH] = {
    0xB9, 0xD7, 0x89, 0x67, 0x04, 0xBC, 0xFA, 0x20, 0xB2, 0x10, 0x36, 0x74, 0x45, 0xF9, 0x83, 0xD6
  };
  imgHdr.len = 1;

  while (1)
  {
    aesSignature(testSig);

    if (memcmp(testSig, checkSig, KEY_BLENGTH))  // If signature generated is not value expected.
    {
      ASM_NOP;
    }
  }
#else
  SBL_READ_IMG_HDR();

  return checkRC();
#endif
}
bool OpenNIWrapper::waitDepthUpdateAll() {
  XnStatus rc = XN_STATUS_OK;

  // Read a new frame
  rc = ni_context_.WaitOneUpdateAll(depth_generator_);
  if (!checkRC(rc, "Wait any update"))
    return false;
  return true;
}
bool OpenNIWrapper::waitAnyUpdateAll() {
  XnStatus rc = XN_STATUS_OK;

  // Read a new frame
  rc = ni_context_.WaitAnyUpdateAll();
  if (!checkRC(rc, "Wait any update"))
    return false;
  return true;
}
bool OpenNIWrapper::initFromXmlFile(const XnChar* config_file) {
  XnStatus rc;

  xn::EnumerationErrors errors;
  rc = ni_context_.InitFromXmlFile(config_file, &errors);
  if (!checkErrors(rc, errors, "InitFromXmlFile"))
    return false;
  if (!checkRC(rc, "InitFromXmlFile"))
    return false;

  rc = ni_context_.FindExistingNode(XN_NODE_TYPE_DEPTH, depth_generator_);
  if (!checkRC(rc, "Find depth generator"))
    return false;
  depth_generator_.GetMetaData(depth_md_);
  depth_height_ = depth_md_.YRes();
  depth_width_ = depth_md_.XRes();
  fflush(stdout);
  return true;
}
Temperature::Temperature(QObject *parent) : QObject(parent)
{
    m_timer = new QTimer(this);
    connect(m_timer, SIGNAL(timeout()), this, SLOT(receiveTemperature()));
    const int mpu6050Address = 0x68; // MPU6050_ADDRESS (0x68)
    const int mpu6050RPM = 0x6b; //MPU6050_REG_DATA_START (0x6b)
    m_fd = wiringPiI2CSetup(mpu6050Address);
    if(checkRC())
    {
        // Perform I2C work
        wiringPiI2CWriteReg8(m_fd, mpu6050RPM, 0);
        //qDebug()<<Q_FUNC_INFO<<m_fd;
        m_interval = 500;
        m_timer->start(m_interval);
    }
}
Beispiel #6
0
/**************************************************************************************************
 * @fn          sblProc
 *
 * @brief       Process the SB command and received buffer.
 *
 * input parameters
 *
 * None.
 *
 * output parameters
 *
 * None.
 *
 * @return      None.
 */
static void sblProc(void)
{
  uint16 t16 = BUILD_UINT16(sbBuf[SBL_REQ_ADDR_LSB], sbBuf[SBL_REQ_ADDR_MSB]) + SBL_ADDR_BEG;
  uint8 len = 1, rsp = SBL_SUCCESS;

  switch (sbBuf[RPC_POS_CMD1])
  {
  case SBL_WRITE_CMD:
    if ((t16 >= SBL_ADDR_BEG) && (t16 <= SBL_ADDR_END))
    {
      if ((t16 % SBL_PAGE_LEN) == 0)
      {
        HalFlashErase(t16 / SBL_PAGE_LEN);
      }

      if (SBL_SECURE)
      {
        if (t16 == SBL_ADDR_IMG_HDR)
        {
          if (!imgHdrCheck(sbBuf + SBL_REQ_DAT0))
          {
            rsp = SBL_FAILURE;
            break;
          }

          aesCrypt(1, sbBuf + SBL_REQ_DAT0);
        }
        else
        {
          aesCrypt(0, sbBuf + SBL_REQ_DAT0);
        }
      }

      SBL_NVM_SET(t16, (sbBuf + SBL_REQ_DAT0), SBL_RW_BUF_LEN);

      // Immediately read back what was written to keep the 'imgHdr' variable in sync with flash.
      if (t16 == SBL_ADDR_IMG_HDR)
      {
        SBL_READ_IMG_HDR();
      }
    }
    else
    {
      rsp = SBL_FAILURE;
    }
    break;

  case SBL_READ_CMD:
    if ((t16 >= SBL_ADDR_BEG) && (t16 <= SBL_ADDR_END))
    {
      len = SBL_RW_BUF_LEN + SBL_READ_HDR_LEN;
      sbBuf[SBL_RSP_ADDR_MSB] = sbBuf[SBL_REQ_ADDR_MSB];
      sbBuf[SBL_RSP_ADDR_LSB] = sbBuf[SBL_REQ_ADDR_LSB];

      SBL_NVM_GET(t16, (sbBuf + SBL_RSP_DAT0), SBL_RW_BUF_LEN);

      if (SBL_SECURE || (SBL_SIGNER && signMode))
      {
        if (t16 == SBL_ADDR_IMG_HDR)
        {
          aesCrypt(1, sbBuf + SBL_RSP_DAT0);
        }
        else
        {
          aesCrypt(0, sbBuf + SBL_RSP_DAT0);
        }
      }
    }
    else
    {
      rsp = SBL_FAILURE;
    }
    break;

  case SBL_ENABLE_CMD:
    if (SBL_SIGNER)  // A Signer must never enable the image for clean read back with crc[1]=0xFFFF.
    {
      signMode = FALSE;  // PC Tool read back must be un-encrypted after downloading a new image.
    }
    else if (!SBL_SECURE)
    {
      imgHdr.crc[1] = imgHdr.crc[0];
      imgHdr.crc[0] = 0xFFFF;
      SBL_NVM_SET(SBL_ADDR_CRC, imgHdr.crc, sizeof(imgHdr.crc));
      SBL_READ_IMG_HDR();
    }
    else if (!checkRC())
    {
      rsp = SBL_VALIDATE_FAILED;
    }
    break;

  case SBL_HANDSHAKE_CMD:
    break;

  case SBL_SIGNATURE_CMD:
    len = ((rsp = procSignatureCmd((sbBuf + RPC_POS_DAT0 + 1))) == SBL_SUCCESS) ? 17 : 1;
    break;

  default:
    rsp = SBL_FAILURE;
    break;
  }

  sbBuf[RPC_POS_LEN] = len;
  sbBuf[RPC_POS_CMD1] |= SBL_RSP_MASK;
  sbBuf[RPC_POS_DAT0] = rsp;
}