Ejemplo n.º 1
0
Archivo: mce-dsme.c Proyecto: g7/mce
/**
 * Generic send function for dsmesock messages
 *
 * @param msg A pointer to the message to send
 */
static bool mce_dsme_send(gpointer msg, const char *request_name)
{
	bool res = false;

	if( !mce_dsme_connection ) {
		mce_log(LL_WARN, "failed to send %s to dsme; %s",
			request_name, "not connected");
		goto EXIT;
	}

	if( dsmesock_send(mce_dsme_connection, msg) == -1) {
		mce_log(LL_ERR, "failed to send %s to dsme; %m",
			request_name);

		/* close and try to re-connect */
		mce_dsme_reconnect();
		goto EXIT;
	}

	mce_log(LL_DEBUG, "%s sent to DSME", request_name);

	res = true;

EXIT:
	return res;
}
Ejemplo n.º 2
0
/**
 * Generic send function for dsmesock messages
 * XXX: How should we handle sending failures?
 *
 * @param msg A pointer to the message to send
 */
static void mce_dsme_send(gpointer msg)
{
	if (dsme_disabled == TRUE)
		goto EXIT;

	if (dsme_conn == NULL) {
		mce_log(LL_CRIT,
			"Attempt to use dsme_conn uninitialised; aborting!");
		// FIXME: this is not how one should exit from mainloop
		mce_quit_mainloop();
		exit(EXIT_FAILURE);
	}

	if ((dsmesock_send(dsme_conn, msg)) == -1) {
		mce_log(LL_CRIT,
			"dsmesock_send error: %s",
			g_strerror(errno));
#ifdef MCE_DSME_ERROR_POLICY
		// FIXME: this is not how one should exit from mainloop
		mce_quit_mainloop();
		exit(EXIT_FAILURE);
#endif /* MCE_DSME_ERROR_POLICY */
	}

EXIT:
	return;
}
Ejemplo n.º 3
0
static bool send_to_dsme(dsmesock_connection_t* conn, const void* msg)
{
    bool success = true;
    if (dsmesock_send(conn, msg) == -1) {
        success = false;
    }
    return success;
}
Ejemplo n.º 4
0
static gboolean send_dsme_empty(gpointer data G_GNUC_UNUSED)
{
  DSM_MSGTYPE_SET_BATTERY_STATE msg =
    DSME_MSG_INIT(DSM_MSGTYPE_SET_BATTERY_STATE);
  msg.empty = 1;
  if (!global_is_charging)
    dsmesock_send(dsme_conn, &msg);
  return FALSE;
}
Ejemplo n.º 5
0
int send_kick_wd(void) {

	int ret = 0;
	DSM_MSGTYPE_HWWD_KICK msg =
          DSME_MSG_INIT(DSM_MSGTYPE_HWWD_KICK);

	ret = dsmesock_send(conn, &msg);
	printf("Message sent to DSME!");

	return ret;
}
Ejemplo n.º 6
0
int main(int argc, char *argv[])
{
  dsmesock_connection_t * conn;

  int next_option;
  const char* program_name = argv[0];

  int batt_status = -1;
  int charger_status = -1;

  const char* short_options = "hb:c:";
  const struct option long_options[] = {
    { "battery",     0, NULL, 'b' },
    { "charger",     0, NULL, 'c' },
    { "help",        0, NULL, 'h' }
  };

  do {
    next_option = getopt_long(argc, argv, short_options, long_options, NULL);
    switch (next_option) {
    case 'b':
      batt_status = atoi(optarg);
      break;
    case 'c':
      charger_status = atoi(optarg);
      break;
    case 'h':
      usage(program_name);
      return EXIT_SUCCESS;
      break;
    case '?':
      usage(program_name);
      return EXIT_FAILURE;
      break;
    }
  } while (next_option != -1);

  if (batt_status == -1 && charger_status == -1) {
    usage(program_name);
    return EXIT_FAILURE;
  }

  conn = dsmesock_connect();
  if (conn == 0) {
    perror("dsmesock_connect");
    return 2;
  }

  if (batt_status != -1) {
      DSM_MSGTYPE_SET_BATTERY_STATE msg =
          DSME_MSG_INIT(DSM_MSGTYPE_SET_BATTERY_STATE);

      msg.empty = !batt_status;

      dsmesock_send(conn, &msg);
  }

  if (charger_status != -1) {
      DSM_MSGTYPE_SET_CHARGER_STATE msg =
          DSME_MSG_INIT(DSM_MSGTYPE_SET_CHARGER_STATE);

      msg.connected = !!charger_status;

      dsmesock_send(conn, &msg);
  }

  dsmesock_close(conn);

  exit(0);
}
Ejemplo n.º 7
0
int main(void)
{
  dsmesock_connection_t*        dsme_conn;
  fd_set                        rfds;
  DSM_MSGTYPE_STATE_QUERY       req_msg =
    DSME_MSG_INIT(DSM_MSGTYPE_STATE_QUERY);
  dsmemsg_generic_t*            msg;
  DSM_MSGTYPE_STATE_CHANGE_IND* msg2;
  int ret;

  dsme_conn = dsmesock_connect();
  if (dsme_conn == 0) {
      fprintf(stderr, "dsmesock_connect\n");
      return state;
  }

  /* Sending a query if the original message has already gone by */
  dsmesock_send(dsme_conn, &req_msg);

  while (1) {
      struct timeval tv;
      tv.tv_sec = DSME_STATE_TIMEOUT;
      tv.tv_usec = 0;
      FD_ZERO(&rfds);
      FD_SET(dsme_conn->fd, &rfds);

      ret = select(dsme_conn->fd + 1, &rfds, NULL, NULL, &tv); 
      if (ret == -1) {
          fprintf(stderr, "error in select()\n");
          printf("MALF");
          return EXIT_FAILURE;
      } 
      if (ret == 0) {
          fprintf(stderr, "Timeout!\n");
          printf("MALF");
          return EXIT_FAILURE;
      }

      msg = (dsmemsg_generic_t*)dsmesock_receive(dsme_conn);
      if ((msg2 = DSMEMSG_CAST(DSM_MSGTYPE_STATE_CHANGE_IND, msg)) != 0) {
          fprintf(stderr, "received state:%i\n", msg2->state);
          switch (msg2->state) {
            case DSME_STATE_ACTDEAD:
              printf("ACTDEAD");
              return EXIT_SUCCESS;
            case DSME_STATE_USER:
              printf("USER");
              return EXIT_SUCCESS;
            case DSME_STATE_TEST:
              printf("TEST");
              return EXIT_SUCCESS;
            case DSME_STATE_LOCAL:
              printf("LOCAL");
              return EXIT_SUCCESS;
            case DSME_STATE_MALF:
              printf("MALF");
              return EXIT_SUCCESS;
            case DSME_STATE_SHUTDOWN:
              printf("SHUTDOWN");
              return EXIT_SUCCESS;
            case DSME_STATE_BOOT:
              printf("BOOT");
              return EXIT_SUCCESS;
            default:
              fprintf(stderr, "unknown state: %d\n", msg2->state);
              break;
          }
        } else {
            fprintf(stderr, "The received message wasn't state change indication\n");
        }
      free(msg);
  }

  return EXIT_FAILURE;
}