#include "communication_cmd_handle.h"
#include "hal_chipid.h"
#include "hal_dma.h"
#include "hal_trace.h"
#include "plat_types.h"
#include "stdbool.h"
#include "stdint.h"
#include "string.h"

static bool communication_cmd_inited = false;
static int (*send_reply_cb)(const unsigned char *, unsigned int);

extern "C" int extend_cmd_pmu_open(void);

int communication_cmd_init(int (*cb)(const unsigned char *, unsigned int)) {
  if (!communication_cmd_inited) {
    send_reply_cb = cb;
    communication_cmd_inited = true;
  }
  return 0;
}

int communication_cmd_send_reply(const unsigned char *payload,
                                 unsigned int len) {
  return send_reply_cb(payload, len);
}

enum ERR_CODE communication_cmd_check_msg_hdr(struct message_t *msg) {
  return ERR_NONE;
}

void FloatToByte(float floatNum, unsigned char *byteArry) {
  char *pchar = (char *)&floatNum;
  for (u32 i = 0; i < sizeof(float); i++) {
    *byteArry = *pchar;
    pchar++;
    byteArry++;
  }
}

enum ERR_CODE communication_cmd_handle_cmd(enum COMMUNICATION_CMD_TYPE cmd,
                                           unsigned char *param,
                                           unsigned int len) {
  enum ERR_CODE nRet = ERR_NONE;
  // uint8_t cret[5]={0x01,0x02,0x03,0x04,0x05};

  // cret[0] = ERR_NONE;

  TRACE(1, "###communication_cmd_handle_cmd,len=%d", len);
  switch (cmd) {
  case COMMUNICATION_CMD_EQ_OP: {
#ifdef __PC_CMD_UART__
    // DUMP8("%02x ",param,len);
    communication_cmd_send_reply(param, len);
#endif
  } break;
  case COMMUNICATION_CMD_DRC_OP: {

  } break;
  case COMMUNICATION_CMD_HF_OP: {
  } break;
  default: {
    TRACE(1, "Invalid command: 0x%x", cmd);
    nRet = ERR_INTERNAL;
  }
  }
  // communication_cmd_send_reply(cret,10);
  return nRet;
}
