/* Helper for host command to dump controller registers */
void lb_hc_cmd_dump(struct ec_response_lightbar *out)
{
	int i;
	uint8_t reg;

	BUILD_ASSERT(ARRAY_SIZE(dump_reglist) ==
		     ARRAY_SIZE(out->dump.vals));

	for (i = 0; i < ARRAY_SIZE(dump_reglist); i++) {
		reg = dump_reglist[i];
		out->dump.vals[i].reg = reg;
		out->dump.vals[i].ic0 = controller_read(0, reg);
		out->dump.vals[i].ic1 = controller_read(1, reg);
	}
}
Exemple #2
0
void *do_chld(void *arg)
{
  int 	client_socket = (int) arg;
  // the socket to the server if we are the controller
  int backend_socket = -1;
  int len = 0;
  int flag = 1;

  printf("Child thread: Socket number = %d\n", client_socket);

  while (flag) {
    struct op_hdr get_hdr;

    /* Read the header*/
    printf("\t\t\tfirst read\n");
    READ_SOC(len, client_socket, &get_hdr, HDR_SIZE);
    printf("***HDR***: op: %d, p1: %d, p2: %d, p3: %d\n",
	   get_hdr.op, get_hdr.p1, get_hdr.p2, get_hdr.p3);

    /* ACT */
    switch (get_hdr.op) {

    case OP_OPEN:
      controller_open(&backend_socket, client_socket, get_hdr);
      break;

    case OP_READ:
      controller_read(&backend_socket, client_socket, get_hdr);
      break;

    case OP_WRITE:
      controller_write(&backend_socket, client_socket, get_hdr);
      break;

    case OP_SEEK:
      controller_seek(&backend_socket, client_socket, get_hdr);
      break;

    case OP_SCANDIR:
      controller_scandir(&backend_socket, client_socket, get_hdr);
      break;

    case OP_CLOSE:
      controller_close(&backend_socket, client_socket, get_hdr);
      break;

    case OP_END:
      flag = 0;
      WRITE_SOC(len, backend_socket, &get_hdr, HDR_SIZE);
      break;

    default:

      /* ERROR! */
      /* Since we are the server, we dont know how to handle
	 errors on the client */
      get_hdr.op = -1;
      WRITE_SOC(len, client_socket, &get_hdr, HDR_SIZE);
      printf("Bad opcode: %d\n", get_hdr.op);
      break;

    }

  }
  printf("Child: Done Processing...\n"); 
  
  /* close the socket and exit this thread */
  close(client_socket);
  pthread_exit((void *)NULL);

  /* never reached */
  return(NULL);
}