示例#1
0
/*---------------------------------------------------------------------------*/
uint8_t
rf_core_stop_rat(void)
{
  rfc_CMD_SYNC_STOP_RAT_t cmd_stop;
  uint32_t cmd_status;

  rf_core_init_radio_op((rfc_radioOp_t *)&cmd_stop, sizeof(cmd_stop), CMD_SYNC_STOP_RAT);

  int ret = rf_core_send_cmd((uint32_t)&cmd_stop, &cmd_status);
  if(ret != RF_CORE_CMD_OK) {
    PRINTF("rf_core_get_rat_rtc_offset: SYNC_STOP_RAT fail, ret %d CMDSTA=0x%08lx\n",
           ret, cmd_status);
    return ret;
  }

  /* Wait until done */
  ret = rf_core_wait_cmd_done(&cmd_stop);
  if(ret != RF_CORE_CMD_OK) {
    PRINTF("rf_core_cmd_ok: SYNC_STOP_RAT wait, CMDSTA=0x%08lx, status=0x%04x\n",
        cmd_status, cmd_stop.status);
    return ret;
  }

  if(!rat_offset_known) {
    /* save the offset, but only if this is the first time */
    rat_offset_known = true;
    rat_offset = cmd_stop.rat0;
  }

  return RF_CORE_CMD_OK;
}
示例#2
0
/*---------------------------------------------------------------------------*/
uint8_t
rf_core_start_rat(void)
{
  uint32_t cmd_status;
  rfc_CMD_SYNC_START_RAT_t cmd_start;

  /* Start radio timer (RAT) */
  rf_core_init_radio_op((rfc_radioOp_t *)&cmd_start, sizeof(cmd_start), CMD_SYNC_START_RAT);

  /* copy the value and send back */
  cmd_start.rat0 = rat_offset;

  if(rf_core_send_cmd((uint32_t)&cmd_start, &cmd_status) != RF_CORE_CMD_OK) {
    PRINTF("rf_core_get_rat_rtc_offset: SYNC_START_RAT fail, CMDSTA=0x%08lx\n",
           cmd_status);
    return RF_CORE_CMD_ERROR;
  }

  /* Wait until done (?) */
  if(rf_core_wait_cmd_done(&cmd_start) != RF_CORE_CMD_OK) {
    PRINTF("rf_core_cmd_ok: SYNC_START_RAT wait, CMDSTA=0x%08lx, status=0x%04x\n",
           cmd_status, cmd_start.status);
    return RF_CORE_CMD_ERROR;
  }

  return RF_CORE_CMD_OK;
}
示例#3
0
/*---------------------------------------------------------------------------*/
static int
fs_powerdown(void)
{
  rfc_CMD_FS_POWERDOWN_t cmd;
  uint32_t cmd_status;

  rf_core_init_radio_op((rfc_radioOp_t *)&cmd, sizeof(cmd), CMD_FS_POWERDOWN);

  if(rf_core_send_cmd((uint32_t)&cmd, &cmd_status) != RF_CORE_CMD_OK) {
    PRINTF("fs_powerdown: CMDSTA=0x%08lx\n", cmd_status);
    return RF_CORE_CMD_ERROR;
  }

  if(rf_core_wait_cmd_done(&cmd) != RF_CORE_CMD_OK) {
    PRINTF("fs_powerdown: CMDSTA=0x%08lx, status=0x%04x\n",
           cmd_status, cmd.status);
    return RF_CORE_CMD_ERROR;
  }

  return RF_CORE_CMD_OK;
}