Example #1
0
/**
* @brief  serial init
* @param	none
* @return	  return 0 : time out\n
*					return -1 : error\n
*					return N: file description
*/
int serial_init(int serial_num)
{
    int fd;
    int ret;
    char buffer[100];
    fd = open_serial_port(0);
	
    if(fd < 0) {
        perror("com opened error\n");
        goto FAILED;
    }
    if((ret = set_serial_port_speed(fd, 115200)) < 0) {
        perror("set speed failed\r\n");
        goto FAILED;
    }
    if((ret = set_serial_port_ctrl_flag(fd,8 ,1 ,'N')) < 0) {
        perror("set priority failed\r\n");
        goto FAILED;
    }
	
	return fd;
FAILED:
	close(fd);
    return -1;
}
Example #2
0
int init()
{
    int result = open_serial_port(port_name);
    pthread_create(&serial_reader, NULL, serial_reader_func, NULL);
    hard_reset_to_user_code();
    return result;
}
Example #3
0
int main(int argc, char **argv)
{
    if (argc < 3) {
        usage();
        exit(1);
    }

    char *port_name = argv[1];
    char *file_name = argv[2];

    if (open_serial_port(port_name) < 0) {
        return (1);
    }

    if (!download_begin(file_name)) {
        return 1;
    }

    while (!programming_done) {
        handle_port_input();
    }

    close_serial_port();

    return 0;
}
Example #4
0
int open_rfcomm(char *mac){
/*
    Bluetooth RFCOMMプロファイル接続を行います。
    macは文字列が入ります。以下のような18バイト17文字の構成としてください。

    char mac[] = "xx:xx:xx:xx:xx:xx";   // xxは2桁の16進数

    ※セキュリティ対策のため、書式が異なると実行されません。
*/
    char s[64];
    int i=0,ret=-1;
    
    if( strlen(mac) == 17){                         // セキュリティチェック
        sprintf(s,"sudo /usr/bin/rfcomm connect /dev/rfcomm %s &",mac);
        for(i=2;i<17;i+=3) mac[i]=':';              // セキュリティ対策
        for(i=0;i<17;i+=3){
            if(isxdigit(mac[i])==0 || isxdigit(mac[i+1])==0 ) break;
        }                                           // セキュリティチェック(16進数)
    }
    if(i==18){
        printf("[%s]\n",s);
        system(s);
        for(i=0;i<15;i++){
            sleep(1);
        //  printf("( %d sec.) \n\x1b\x5b\x41",14-i);
            ret=open_serial_port();
            if(ret >= 0) break;
        }
    }else fprintf(stderr,"Invalid Mac Address ERROR (i=%d,%c%c)\n",i,mac[i],mac[i+1]);
    return ret;
}
int main(){
    char s[32];                                     // 文字データ用
    int len=0;                                      // 文字長
    char c;                                         // 文字入力用の文字変数
    int ctrl=0;                                     // 制御用 0:先頭, -1~-3:「-」入力数
                                                    //        1:コマンド, 2:プログラム
    printf("Ichigo Term for Raspberry Pi\n");
    if(open_serial_port() <= 0){
        printf("UART OPEN ERROR\n");
        return -1;
    }
    printf("CONNECTED\nHit '---' to exit.\nTX-> ");
    write(ComFd, "\x1b\x10 CLS\n", 7);              // IchigoJamの画面制御
    while(1){
        if( kbhit() ){
            c=getchar();                            // キーボードからの文字入力
            s[len]=c;                               // 入力文字を保持
            if(len < 31) len++;                     // 最大長未満のときに文字長に1を加算
            write(ComFd, &c, 1 );                   // IchigoJamへ送信
            if( ctrl<=0 && c =='-' ){               // 先頭かつ入力された文字が「-」の時
                ctrl--;                             // ctrl値を1減算
                if(ctrl <= -3) break;               // 「-」が3回入力された場合に終了
            }else if(ctrl==0){
                if(isdigit(c)) ctrl=2; else ctrl=1; // 先頭に数値でプログラムと判定し、
            }                                       // そうで無い時はコマンド入力と判定
            if(c=='\n'){                            // 入力文字が改行の時
                if(ctrl==2 || len==1) printf("TX-> ");  // 無入力とプログラム入力時
                ctrl=0;                             // 入力文字状態を「先頭」にセット
                len=0;
                usleep(250000);                     // 250msの(IchigoJam処理)待ち時間
            }
            usleep(25000);                          // 25msの(IchigoJam処理)待ち時間
        }
        c=read_serial_port();                       // シリアルからデータを受信
        if(c){
            printf("\nRX<- ");                      // 受信を識別するための表示
            while(c){
                if( isprint(c) ) printf("%c",c);    // 表示可能な文字の時に表示する
                if( c=='\n' ) printf("\n     ");    // 改行時に改行と5文字インデントする
                if( c=='\t' ) printf(", ");         // タブの時にカンマで区切る
                c=read_serial_port();               // シリアルからデータを受信
            }
            s[len]='\0';
            printf("\nTX-> %s",s);                  // キーボードの入力待ち表示
        }
    }
    printf("\nDONE\n");
    close_serial_port();
    return 0;
}
Example #6
0
File: gui.c Project: awe00/boards
gint do_timer(gpointer data)
{
	if (port_timeout && --port_timeout == 0) {
		open_serial_port(gtk_entry_get_text(GTK_ENTRY(port_entry)));
	}
	if (baud_timeout && --baud_timeout == 0) {
		change_baud(gtk_entry_get_text(GTK_ENTRY(
			GTK_COMBO(baud_combo)->entry)));
	}
	if (download_in_progress) {
		download_timer();
	}
	return TRUE;
}
void ZigbeeSerialportService::connecting_serial_port()
{
    if (open_serial_port() == -1)
    {
        if (net_)
        {
            ACE_Time_Value timeout;
            timeout.sec(5);
            net_->schedule_timer(this, 0, timeout);
        }
    }
    else
    {
        notify_serialport_connected();
    }
}
Example #8
0
int init_uart_port(char * port)
{
    if (!port) return FALSE;

    // 打开串口
    g_fd = open_serial_port(port);
    if (g_fd == -1)
    {
        perror("open serial failed!\n");
        return FALSE;
    }

    // 设置串口属性
    set_speed(g_fd, UART_DEFAULT_BAUDRATE);
    if (set_parity(g_fd, 8, 1, 'N') == FALSE)  //8位数据,非两位的停止位,不使用奇偶校验 ,不允许输入奇偶校验
    {
        perror("set parity failed!\n");
        return FALSE;
    }

    return TRUE;
}
Example #9
0
static int connect_device(const char *file)
{
    int result;

    fprintf(stdout, TTY_NONE "Connect \"%s\"...", file);

    if ((result = open_serial_port(file)))
        return result;

    if ((result = reset_device(1)))
        return result;

    if ((result = handshake_device()))
        return result;

    device_buffer[0] = 0x00;
    if ((result = device_request(1)))
        return result;

    if ((result = device_response(13)))
        return result;

    device_version = device_buffer[1];
    device_erase_command = device_buffer[8];
    fprintf(stdout, TTY_NONE "V%1X.%1X...", device_version >> 4, device_version & 0x0F);

    device_buffer[0] = 0x02;
    if ((result = device_request(1)))
        return result;

    if ((result = device_response(3)))
        return result;

    if ((result = select_device(device_buffer[1] << 8 | device_buffer[2])))
        return result;

    return DONE;
}
Example #10
0
int main(void) {
	pthread_t tid[2];
	int t_error;
	struct MHD_Daemon *daemon;

	// Register signal and signal handler
	signal(SIGINT, signal_callback_handler);

	open_serial_port();
	kill_power_led();

	// start serial listener
	t_error = pthread_create(&tid[0], NULL, serial_read, NULL);
	fprintf(stderr, "Starting serial read thread\n");
	if (0 != t_error) 
		fprintf(stderr, "Couldn't run thread number %d, errno %d\n", 0, t_error);

	// start stdin_listener
	t_error = pthread_create(&tid[1], NULL, read_stdin, NULL);
	fprintf(stderr, "Starting stdin read thread\n");
	if (0 != t_error) 
		fprintf(stderr, "Couldn't run thread number %d, errno %d\n", 1, t_error);

	// start http daemon
	fprintf(stderr, "Starting httpd daemon\n");
	//daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, HTTPD_PORT, NULL, NULL, 
	daemon = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION, HTTPD_PORT, NULL, NULL, 
                             &httpd_callback, NULL, MHD_OPTION_END);
	if (NULL == daemon) error("ERROR starting httpd");


	// ..join a thread until backgrounding is implemented

	pthread_join(tid[0], NULL);


	return 0;
}
Example #11
0
int main(int argc, char** argv) {
  #ifdef DEBUG
  printf("Debug mode\n");
  #endif

  printf("Opening port...\n"); 
  SerialPort maestro;
  open_serial_port(&maestro, "/dev/ttyACM0");
  printf("Port open with fd: %d\n", maestro.file_descriptor); 
  unsigned const char data[] =     "012341234";
  printf("Sending %d bytes... ", (int)sizeof(data));
  bool result;
  result = write_bytes(&maestro, data, sizeof(data)); 
  if (result) {
    printf("Success\n");
  } else {
    printf("Failure\n");
  }
  printf("Closing port...\n"); 
  close_serial_port(&maestro);
  printf("Port closed.\n"); 
  return 0;
}
Example #12
0
/**  Main function which starts the service, this will be an blocking function.If any error is there it returns immediately.
 * Returns immediately on error, else will be an blocking function.
 * @param port serial device port name.
 * @return error status of <b>open()</b> or <b>tcsetattr()</b>.
 * @note This is an blocking function, so it should be called from different thread.
 *
 * */
int gecko_start_serial_service(char * port)
{

	init_serial_lock();
	struct sigaction saio;
	saio.sa_handler = signal_callback_handler;
	sigemptyset(&saio.sa_mask);
	saio.sa_flags = 0;
	saio.sa_restorer = NULL;
	sigaction(SIGINT, &saio, NULL);

	//char * port = "/dev/ttyUSB0";

	LOGGER(LOG_DEBUG,"Using port %s", port);
	int fd = open_serial_port(port);
	if (fd == -1)
	{
		LOGGER(LOG_ERR,"error in open device %s",port);
		return EXIT_FAILURE;
	}
	if (configure_serial_port(fd) != -1)
	{
		if(LOG_LEVEL==LOG_DEBUG)
		read_display_current_configuration(fd);

		serial_write(fd, START_SCAN);
		LOGGER(LOG_DEBUG,"send start scan command to serial device\n");
		start_serial_reader_thread(fd);
	}
	else
	{
		LOGGER(LOG_CRIT,"Error in opening serial port\n");
		perror("error in configuring port");
	}

	return EXIT_SUCCESS;
}
Example #13
0
File: gui.c Project: awe00/boards
void create_window(int *argc, char ***argv)
{
	GList *gtk_baud_list=NULL;
	int i;

	gtk_init(argc, argv);

	firmware_label = gtk_label_new("Firmware:");
	gtk_label_set_justify(GTK_LABEL(firmware_label), GTK_JUSTIFY_RIGHT);
	gtk_widget_show(firmware_label);

	firmware_entry = gtk_entry_new();
	gtk_widget_set_usize(firmware_entry, 110, 0);
	gtk_entry_set_text(GTK_ENTRY(firmware_entry), file_setting());
	gtk_widget_show(firmware_entry);

	program_button = gtk_button_new_with_label("Program Now");
	if (file_exists(file_setting())) {
		gtk_widget_set_sensitive(program_button, TRUE);
	} else {
		gtk_widget_set_sensitive(program_button, FALSE);
	}
	gtk_widget_show(program_button);

	line1_hbox = gtk_hbox_new(FALSE, 2);
	gtk_box_pack_start(GTK_BOX(line1_hbox), firmware_label, FALSE, FALSE, 2);
	gtk_box_pack_start(GTK_BOX(line1_hbox), firmware_entry, TRUE, TRUE, 2);
	gtk_box_pack_start(GTK_BOX(line1_hbox), program_button, FALSE, FALSE, 2);
	gtk_widget_show(line1_hbox);


	port_label = gtk_label_new("Port:");
	gtk_label_set_justify(GTK_LABEL(port_label), GTK_JUSTIFY_RIGHT);
	gtk_widget_show(port_label);

	port_entry = gtk_entry_new();
	gtk_widget_set_usize(port_entry, 80, 0);
	gtk_entry_set_text(GTK_ENTRY(port_entry), port_setting());
	open_serial_port(port_setting());
	gtk_widget_show(port_entry);

	baud_label = gtk_label_new("Baud:");
	gtk_label_set_justify(GTK_LABEL(baud_label), GTK_JUSTIFY_RIGHT);
	gtk_widget_show(baud_label);
	
	baud_combo = gtk_combo_new();
	for (i=0; baud_list[i] != NULL; i++) {
		gtk_baud_list = g_list_append(gtk_baud_list, baud_list[i]);
	}
	gtk_combo_set_popdown_strings(GTK_COMBO(baud_combo), gtk_baud_list);
	gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(baud_combo)->entry), FALSE);
	gtk_widget_set_usize(baud_combo, 75, 0);
	for (i=0; baud_list[i] != NULL; i++) {
		if (strcmp(baud_list[i], baud_setting()) == 0) {
			gtk_list_select_item(GTK_LIST(GTK_COMBO(baud_combo)->list), i);
			break;
		}
	}
	gtk_widget_show(baud_combo);

	line2_hbox = gtk_hbox_new(FALSE, 2);
	gtk_box_pack_start(GTK_BOX(line2_hbox), port_label, FALSE, FALSE, 2);
	gtk_box_pack_start(GTK_BOX(line2_hbox), port_entry, TRUE, TRUE, 2);
	gtk_box_pack_start(GTK_BOX(line2_hbox), baud_label, FALSE, FALSE, 2);
	gtk_box_pack_start(GTK_BOX(line2_hbox), baud_combo, FALSE, FALSE, 2);
	gtk_widget_show(line2_hbox);


	crystal_label = gtk_label_new("Crystal:");
	gtk_label_set_justify(GTK_LABEL(crystal_label), GTK_JUSTIFY_RIGHT);
	gtk_widget_show(crystal_label);

	crystal_entry = gtk_entry_new();
	gtk_widget_set_usize(crystal_entry, 80, 0);
	gtk_entry_set_text(GTK_ENTRY(crystal_entry), crystal_setting());
	gtk_widget_show(crystal_entry);

	mhz_label = gtk_label_new("(MHz)");
	gtk_label_set_justify(GTK_LABEL(mhz_label), GTK_JUSTIFY_LEFT);
	gtk_widget_show(mhz_label);

	line3_hbox = gtk_hbox_new(FALSE, 2);
	gtk_box_pack_start(GTK_BOX(line3_hbox), crystal_label, FALSE, FALSE, 2);
	gtk_box_pack_start(GTK_BOX(line3_hbox), crystal_entry, TRUE, TRUE, 2);
	gtk_box_pack_start(GTK_BOX(line3_hbox), mhz_label, FALSE, FALSE, 2);
	gtk_widget_show(line3_hbox);


	reboot_button = gtk_button_new_with_label("Reboot");
	gtk_widget_set_sensitive(reboot_button, TRUE);
	gtk_widget_show(reboot_button);

	bootloader_button = gtk_button_new_with_label("Booloader");
	gtk_widget_show(bootloader_button);

	quit_button = gtk_button_new_with_label("Quit");
	gtk_widget_show(quit_button);

	line4_hbox = gtk_hbox_new(TRUE, 2);
	gtk_box_pack_start(GTK_BOX(line4_hbox), reboot_button, TRUE, TRUE, 2);
	gtk_box_pack_start(GTK_BOX(line4_hbox), bootloader_button, TRUE, TRUE, 2);
	gtk_box_pack_start(GTK_BOX(line4_hbox), quit_button, TRUE, TRUE, 2);
	gtk_widget_show(line4_hbox);

	main_vbox = gtk_vbox_new(FALSE, 2);
	gtk_box_pack_start(GTK_BOX(main_vbox), line1_hbox, TRUE, TRUE, 2);
	gtk_box_pack_start(GTK_BOX(main_vbox), line2_hbox, TRUE, TRUE, 2);
	gtk_box_pack_start(GTK_BOX(main_vbox), line3_hbox, TRUE, TRUE, 2);
	gtk_box_pack_start(GTK_BOX(main_vbox), line4_hbox, TRUE, TRUE, 2);
	gtk_widget_show(main_vbox);

	main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_container_add(GTK_CONTAINER(main_window), main_vbox);
	gtk_widget_show(main_window);
}
Example #14
0
int main(int argc, char *argv[]) {
  int tty_handle;
  unsigned char ch;
  int n;
  fd_set readfds;
  struct timeval to;
  int select_status;
  int char_delay = DEFAULT_CHAR_DELAY_uS;

  //   struct termios old_tio, new_tio;

  const char port_str[]="-p";
  const char baud_str[]="-b";
  const char help_str[]="-h";
  const char buffer_str[]="-n";
  const char file_str[] = "-f";
  const char delay_str[] = "-d";

  unsigned int baudrate = DEFAULT_BAUD;
  char serialport[80] = DEFAULT_SERIAL_PORT;

  FILE *sf = NULL;
  char sendfile[80] = "";

  int i;
  int status;

  signal(SIGINT, CtrlC_Handler);

  tcgetattr(STDIN_FILENO,&old_tio);
  new_tio=old_tio;
  new_tio.c_lflag &= ~(ECHO|ICANON);


  // Argument Parsing
  for (i=1;i<argc;i++) {
    if (!strcmp(argv[i],help_str)) {
      print_help();
      exit(0);
    }
    else if (!strcmp(argv[i],port_str)) {
      sprintf(serialport,"%s",argv[i+1]);
      i++;
    }
    else if (!strcmp(argv[i],baud_str)) {
      baudrate = atoi(argv[i+1]);
      i++;
    }
    else if (!strcmp(argv[i],buffer_str)) {
      new_tio.c_lflag |= ICANON;
    }
    else if (!strcmp(argv[i],file_str)) {
      sprintf(sendfile,"%s",argv[i+1]);
      sf = fopen(sendfile,"r");
      i++;
    }
    else if (!strcmp(argv[i],delay_str)) {
      char_delay = atoi(argv[i+1]);
      i++;
      if (!((char_delay>0)&&(char_delay<1000000))) {
        printf("Error: Invalid delay value - %s\n",delay_str);
        exit(1);
      }
    }

    else {
      printf("Error: bad option %s\n",argv[i]);
      printf("\"SerialT -h\" for list of options\n");
      exit(0);
    }
  }
  if ((tty_handle = open_serial_port(serialport,baudrate)) == -1) {
    printf ("Error -> Could not open %s\n",serialport);
    exit(1);
  }
  tcsetattr(STDIN_FILENO,TCSANOW,&new_tio);

  while (1) {
    // Select Command Preparation
    FD_ZERO(&readfds);                       // clear the read file descriptor set g
    FD_SET(STDIN_FILENO,&readfds);           // listen for stdin in the read desciptor set
    FD_SET(tty_handle,&readfds);             // listen for stdin in the read desciptor set
    to.tv_sec = SELECT_TIMEOUT/1000000;      // timeout seconds  = 1s (total timeout = 1.5uS)
    to.tv_usec = SELECT_TIMEOUT%1000000;     // timeout usec = .5s

    if (sf) {
      if (fread(&ch,1,1,sf)) {
        status=write(tty_handle,&ch,1);     // send the character out the tty port
        if (status!=1) {
          printf("Error: Failed to write %c\n",ch);
        }
        tcdrain(tty_handle);                // wait for the character to go
        usleep(char_delay);              // delay between characters, give goofy some time to process chars
      }
    }

    // wait here until one of the selectors becomes active
    select_status=select(tty_handle+1,&readfds,(fd_set *)0,(fd_set *)0,&to);
    if (select_status==-1);                  // Select Error
    else if (select_status==0);              // Select Timeout
    else {                                   // Descriptor is ready for one of the members
       // Check to see which descriptor is active
      // STDIN Handler
      if (FD_ISSET(STDIN_FILENO,&readfds)) {
        if ((n=read(STDIN_FILENO,&ch,1))!=0) {
          status=write(tty_handle,&ch,1);     // send the character out the tty port
          if (status!=1) {
        	  printf("Error: Failed to write %c\n",ch);
        	}
          tcdrain(tty_handle);             // wait for the character to go
          usleep(char_delay);              // delay between characters, give goofy some time to process chars
        }
      }
      // Serial Port Handler
      if (FD_ISSET(tty_handle,&readfds)) {
        if ((n=read(tty_handle,&ch,1))!=0) {  // grab the data from the tty
          if ((ch>=' ')&&(ch<='~')){
            printf("%c",ch);
          }
          else if ((ch==0x0d)||(ch==0x0a)) {
            printf("\n");
          }
          else {
            printf("\\x%02x",ch);
          }
          fflush(stdout);
        }
      }
    }
  }
  // Restore Terminal Parameters
  tcsetattr(STDIN_FILENO,TCSANOW,&old_tio);
}
Example #15
0
int main(int argc, const char* argv[])
{
    pid_t server_child = 0;
    int fd;
    int res = 0, status;
    struct sigaction sigchildAction;

    tio_param sParam [] = {
       {"D:", "DURATION", "Duration"},
       { "m:", "PORTSPEED", "Prot speed"},
       { "s:", "SENDPACKSLENGTH", "Send pack length"},
       { "d", "SERVERMODE", "Server mode" },
       { "l", "CLIENTMODE", "Client mode" },
       { "L", "CLIENTSERVERMODE", "Client/Server mode" }, 
       {NULL, NULL, NULL}
    };

    sigchildAction.sa_handler = termination_signal;
    sigchildAction.sa_flags    = SA_NOCLDSTOP;
    sigemptyset(&(sigchildAction.sa_mask));
    sigaddset(&(sigchildAction.sa_mask),SIGTERM);

    if (sigaction(SIGTERM, &sigchildAction, NULL))
    {
        perror("Signal SIGTERM registration failed");
        return -1;
    }
    if (sigaction(SIGINT, &sigchildAction, NULL))
    {
        perror("Signal SIGINT registration failed");
        return -1;
    }

    // Инициализация tio и разбор входных параметров командной строки  
    tioInit( "alpha", "RS232 test", sParam, argc, argv); 
    
    if (write_configuration(&config))
    {
        fputs("Congiguration read error\n", stderr);
        return -1;
    }
    
    fd = open_serial_port( tio_argv[0], tioGetDefL( "PORTSPEED", 115200 ));
    if (fd < 0)
    {
        return -1;
    }
    config.outputDevice = fd;
    
    if ( tioGetL( "CLIENTSERVERMODE" ) > 0 )
    {
        server_child = fork();
    }
    if ((server_child == 0) && (tioGetL( "CLIENTSERVERMODE" ) || tioGetL( "SERVERMODE" ) ) )
    {
        if (server_process(&config))
        {
            return -1;
        }
    }
    else if ( tioGetL( "CLIENTSERVERMODE" ) || tioGetL( "CLIENTMODE" ))
        res = client_process(&config);
    else 
    {
        DEBUGMSG("Undefined target action");
        return -1;
    }

    if (server_child != 0)
        waitpid(server_child, &status, WNOHANG);

    // Завершение работы библиотеки tio  
    tioFinish(0);

    return (int)(res || status);
    /*return 0;*/
}
int
main (int argc, char *argv[])
{
  int x, y;
  struct input_event ev[2];
  struct input_event ev_button[2];
  struct input_event ev_sync;

  if (argc < 2)
  {
	printf("Usage: %s serial-device [uinput-device]\n",argv[0]);
	exit(-1);
  }

  open_serial_port (argv[1]);		// Open serial port
  set_serial_ops ();	//configure serial port optionS


// configure uinput
if (argc > 3)
  setup_uinput_dev(argv[2]);
else
  setup_uinput();


// Try 5 times to initialize screen:
  int n = 1;
  printf ("Attempting to initialize screen...\n");
  while (initialize_panel ())
    {
      n++;
      if (n > 5)
	{
	  printf ("Too many failures, exiting\n");
	  exit (1);
	}
    }

// input sync signal:
  memset (&ev_sync, 0, sizeof (struct input_event));
  ev_sync.type = EV_SYN;
  ev_sync.code = 0;
  ev_sync.value = 0;

// button press signals:
  memset (&ev_button, 0, sizeof (ev_button));
  ev_button[0].type = EV_KEY;
  ev_button[0].code = BTN_LEFT;
  ev_button[0].value = 0;
  ev_button[1].type = EV_KEY;
  ev_button[1].code = BTN_LEFT;
  ev_button[1].value = 1;


  struct timeval tv_start_click;
  struct timeval tv_current;

  char click_state = 0;
  char first_click = 0;
  unsigned char buffer[4];
  while (1)
    {
	// Should have select timeout, because finger down garantees many results..

  struct timeval tv;
  tv.tv_sec = 1;
  tv.tv_usec = 0;

  fd_set serial;
  FD_ZERO (&serial);
  FD_SET (fd_serial, &serial);

	// Use select to use timeout...
	if (select(fd_serial+1,&serial,NULL,NULL,&tv) < 1)
	{
	first_click=0;
	click_state =0;

	  if (write(fd_uinput, &ev_button[click_state],sizeof (struct input_event)) < 0)
	      die ("error: write");
	// Sync
      if (write (fd_uinput, &ev_sync, sizeof (struct input_event)) < 0)
	      die ("error state");
		

continue;
	}
      read (fd_serial, &buffer, sizeof (buffer));
      if ((buffer[0] < 0xFD) || (buffer[3] != 0xFF))
      {
	// Correct missed packets...
	if ((buffer[1] >= 0xFD) && (buffer[1] < 0xFF))
		read(fd_serial, &buffer,3);
	if ((buffer[2] >= 0xFD) && (buffer[2] < 0xFF))
		read(fd_serial, &buffer,2);
	if ((buffer[3] >= 0xFD) && (buffer[3] < 0xFF))
		read(fd_serial, &buffer,1);
	   
	continue;		// make sure its a valid position command.
      }
      x = (int) ((buffer[1]) * 1024.0 / 0x5F);	// max is 5F
      y = (int) ((buffer[2]) * 1024.0 / 0x48);	// max is 48
      int old_click_state = click_state;
      if (buffer[0] == 0xFD)
	click_state = 0;
      else
	click_state = 1;

// If this is the first panel event, track time for no-drag timer
if (click_state != old_click_state && click_state == 1)
{
	first_click = 1;
	gettimeofday(&tv_start_click,NULL);
}
else
	first_click=0;


// load X,Y into input_events
      memset (ev, 0, sizeof (ev));	//resets object
      ev[0].type = EV_ABS;
      ev[0].code = ABS_X;
      ev[0].value = x;
      ev[1].type = EV_ABS;
      ev[1].code = ABS_Y;
      ev[1].value = y;

// send X,Y
gettimeofday(&tv_current,NULL); // Only move to posision of click for first while - prevents accidental dragging.
if (time_elapsed_ms(&tv_start_click,&tv_current,500) || first_click)
{
      if (write (fd_uinput, &ev[0], sizeof (struct input_event)) < 0)
	die ("error: write");
      if (write (fd_uinput, &ev[1], sizeof (struct input_event)) < 0)
	die ("error: write");
}

// clicking
      if (click_state != old_click_state)
      {
	  if (write(fd_uinput, &ev_button[click_state],sizeof (struct input_event)) < 0)
	      die ("error: write");
      }
// Sync
      if (write (fd_uinput, &ev_sync, sizeof (struct input_event)) < 0)
	die ("error: write");
   }				// while 1

  if (ioctl (fd_uinput, UI_DEV_DESTROY) < 0)
    die ("error: ioctl");

  close (fd_uinput);

  return 0;
}
Example #17
0
int init_multiplex(const char *tty_dev)
{
    return open_serial_port(tty_dev);
}
Example #18
0
int main(int argc, char **argv)
{
    close_fds();
    daemon(0, 0);

    open_log_file(); 
    get_lock();

    create_pipe();

    int serial_fd = open_serial_port(); 

    write (serial_fd, "$$$ALL,OFF\r", 11);  
    usleep(200000);
    write (serial_fd, "$$$SPEED80\r", 11);  

    //printf("STARTED - awaiting connections\n");
    int listen_fd = listen_network();

    char msg[256];
    int msg_len;

    while (1) 
    {
        msg_len = get_msg(listen_fd, msg, sizeof(msg) - 1); 
        msg[msg_len] = '\0'; 

        //printf("Msg:|%s|\n", msg);

        int batch; 
        char *ptr = msg;

        while(msg_len) 
        { 
           batch = (msg_len > MAX_BATCH_SIZE ? MAX_BATCH_SIZE : msg_len);

           char c; 
           int i, led_width = 0;

           for (i = 0; i < batch; i++)
           {
               c = *(ptr + i); 

               if (c == 10) { 
                   led_width += 4;  
                   *(ptr + i) = ' ';
               }
               else if (c < 32)
                   led_width += 0;  
               else if (c > 128)
                   led_width += 0;  
               else if (c == 128)       // Big empty square.
                   led_width += 8;  
               else if (c == 176)       // temp symbol.
                   led_width += 2;  
               else if (strchr("ABCDEFGHKLMNOPQRSTUVWXYZmvwxz", c))
                   led_width += 6;  
               else if (strchr("abcdefghknopqrsuyJ<>", c))
                   led_width += 5;  
               else if (strchr(" 1I\"()jt[]`", c))
                   led_width += 4;  
               else if (strchr(",.:;", c))
                   led_width += 3;  
               else if (strchr("!il'", c))
                   led_width += 2;  
               else { 
                   led_width += 6;  
               }
           }

           write(serial_fd, ptr, batch);  
           msg_len -= batch;
           ptr     += batch; 

           assert(msg_len >= 0);
           assert(ptr <= msg + sizeof(msg));

           usleep(LED_HOLD_TIME * led_width);
        }
    } 

    // Pause the scroll.
    //write(serial_fd, "$$$", 3);  
    //write(serial_fd, "\r\r", 2);

    exit(0);
}