Beispiel #1
0
int main(int argc, char* argv[]) {

    struct timeval start;
    struct timeval now;
    dsmesock_connection_t *conn;
    DSM_MSGTYPE_GET_VERSION req_msg = DSME_MSG_INIT(DSM_MSGTYPE_GET_VERSION);

    gettimeofday(&start, NULL);

    printf("%s (pid %i): Wait for DSME socket...\n", argv[0], getpid());
    fflush(stdout);

    while (1) {
        conn = dsmesock_connect();
        if (conn > 0) {
            /* Give DSME time to accept the client socket before closing
               the socket connection */
            if (!send_to_dsme(conn, &req_msg)) {
                dsmesock_close(conn);
                printf("%s: ERROR: send to DSME socket failed\n", argv[0]);
                return EXIT_FAILURE;
            } else {
                dsmesock_close(conn);
                printf("%s: OK: send to DSME socket succeeded\n", argv[0]);
                return EXIT_SUCCESS;
            }
        }

        gettimeofday(&now, NULL);

        if (now.tv_sec >= (start.tv_sec + DSME_START_TIMEOUT)) {
            fprintf(stderr,
                    "%s: ERROR: Timeout waiting for DSME socket\n",
                    argv[0]);
            return EXIT_FAILURE;
        }
        usleep(20000);
    }

    return EXIT_FAILURE;
}
Beispiel #2
0
Datei: mce-dsme.c Projekt: g7/mce
/**
 * Close dsmesock connection
 */
static void mce_dsme_disconnect(void)
{
	if( mce_dsme_iowatch_id ) {
		mce_log(LL_DEBUG, "Removing DSME socket notifier");
		g_source_remove(mce_dsme_iowatch_id);
		mce_dsme_iowatch_id = 0;
	}

	if( mce_dsme_connection ) {
		mce_log(LL_DEBUG, "Closing DSME socket");
		dsmesock_close(mce_dsme_connection);
		mce_dsme_connection = 0;
	}

	// FIXME: should we assume something about the system state?
}
Beispiel #3
0
static void close_client(dsmesock_connection_t* conn)
{
  if (conn) {
      remove_client(conn);

      if (conn->channel) {
          /* the channel does not own the socket fd (dsmesock does),
           * so don't do g_io_channel_shutdown();
           * instead, unset close on unref.
           */
          g_io_channel_set_close_on_unref(conn->channel, FALSE);
          g_io_channel_unref(conn->channel);
          conn->channel = 0;
      }
      dsmesock_close((dsmesock_connection_t*)conn);
  }
}
Beispiel #4
0
/**
 * Close dsmesock connection
 */
static void close_dsmesock(void)
{
	mce_log(LL_DEBUG,
		"Shutting down dsmesock I/O channel");

	if (dsme_iochan != NULL) {
		GError *error = NULL;
		g_source_remove(dsme_data_source_id);
		g_source_remove(dsme_error_source_id);
		g_io_channel_shutdown(dsme_iochan, FALSE, &error);
		g_io_channel_unref(dsme_iochan);
		g_clear_error(&error);
	}

	mce_log(LL_DEBUG,
		"Closing DSME sock");

	dsmesock_close(dsme_conn);
}
Beispiel #5
0
int main(int argc, char *argv[])
{
	const char *program_name = argv[0];
	if (argc > 1) {
		usage(program_name);
		return EXIT_FAILURE;
	}

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

	if (send_kick_wd() <= 0) {
		printf("sending failed!\n");
		return EXIT_FAILURE;
	}

	dsmesock_close(conn);

	return EXIT_SUCCESS;
}
Beispiel #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);
}