Beispiel #1
0
/*模块初始化*/
static int echodemo_init()
{
    //char com_port[16];
	//long baud=9600;
    //rtdb_get_data_value_by_name("echodemo", "serialname", com_port);
    //rtdb_get_data_value_by_name("echodemo", "baud", &baud);
 
    //serial_id = serial_open(com_port, baud, SERIAL_PARITY_NO, 8, SERIAL_STOPBIT_ONE, 1000);
    //打开串口,COM1,9600,无校验,8位,一个停止位,通讯超时 100
    serial_id = serial_open("COM1", 9600, SERIAL_PARITY_NO, 8, SERIAL_STOPBIT_ONE, 100);
    if (serial_id < 0)
    {
        return 0;
    }


    return 1;
}
Beispiel #2
0
int MOVETO_JOINTS(float j1, float j2, float j3, float j4, float j5, float j6) {
	READ = 0;
	if (!OPEN_COM) {
		serial_close(hComm);
		if ((hComm=serial_open(0, 1, 1)) < 0) {
			cout<<"Error: cannot connect to Puma"<<endl;
			return -1; }
		else OPEN_COM = TRUE; }
	writeBuffer("point #x\n\r");	
	char buffer[200];	
	sprintf(buffer, "%g, %g, %g, %g, %g, %g\n\r\n\r", j1, j2 ,j3, j4, j5, j6);
	writeBuffer(buffer);
	CheckError();
	//Sleep(100);
	READ = 0;
	writeBuffer("do move #x\n\r");
	
	return CheckError(); }
Beispiel #3
0
/*
 * Class:     ch_jodersky_flow_UnsafeSerial__
 * Method:    open
 * Signature: (Ljava/lang/String;IIZI)J
 */
JNIEXPORT jlong JNICALL Java_ch_jodersky_flow_UnsafeSerial_00024_open
(JNIEnv *env, jobject instance, jstring port_name, jint baud, jint char_size, jboolean two_stop_bits, jint parity)
{
	UNUSED_ARG(instance);

	const char *dev = (*env)->GetStringUTFChars(env, port_name, 0);
	struct serial_config* config;
	int r = serial_open(dev, baud, char_size, two_stop_bits, parity, &config);
	(*env)->ReleaseStringUTFChars(env, port_name, dev);

	if (r < 0) {
		check(env, r);
		return -E_IO;
	}

	long jpointer = (long) config;
	return (jlong) jpointer;
}
Beispiel #4
0
struct ols_t *OLS_Init(char *port, unsigned long speed)
{
	int fd;
	int ret;
	struct ols_t *ols;

	fd = serial_open(port);
	if (fd < 0) {
		fprintf(stderr, "Unable to open port '%s' \n", port);
		return NULL;
	}

	ret = serial_setup(fd, speed);
	if (ret) {
		fprintf(stderr, "Unable to set serial port parameters \n");
		return NULL;
	}

	ols = malloc(sizeof(struct ols_t));
	if (ols == NULL) {
		fprintf(stderr, "Error allocating memory \n");
		return NULL;
	}

	ols->fd = fd;
	ols->verbose = 0;
	ols->flash = NULL;

	ret = OLS_GetID(ols);
	if (ret) {
		fprintf(stderr, "Unable to read ID \n");
		free(ols);
		return NULL;
	}

	ret = OLS_GetFlashID(ols);
	if (ret) {
		fprintf(stderr, "Unable to read Flash ID \n");
		free(ols);
		return NULL;
	}

	return ols;
}
int main(void)
{
	serial_open(19200, SERIAL_8N1);
	ADMUX |= (1<<REFS0);
	ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
	
	pinMode(53, OUTPUT);
	pinMode(13, OUTPUT);
	
	x_init();
	x_new(1, dimmer, 1);
	x_new(2, setDelay, 1);
	x_new(3, blinker, 1);
	
	while (1)
	{
		x_delay(500);
	}
}
Beispiel #6
0
// usage: serial <dev>
int
main(int argc, char *argv[])
{
	struct sigaction act;
	int r;
	char buf[BUFSIZ];

	if (argc < 2) {
		fprintf(stderr, "usage: %s <device>\n", argv[0]);
		return EXIT_FAILURE;
	}

	fd = serial_open(argv[1]);

	act.sa_sigaction = sigint_action;
	act.sa_flags = SA_SIGINFO;

	if (sigaction(SIGINT, &act, NULL) < 0) {
		perror("sigaction");
		return EXIT_FAILURE;
	}

	static const char *msg = "SKINFO\r\n";
	r = serial_write(fd, msg, strlen(msg));

	r = serial_read(fd, buf, BUFSIZ);
	printf("%s", buf);

	memset(buf, 0, BUFSIZ);
	static const char *msg2 = "SKTABLE 6\r\n";
	r = serial_write(fd, msg2, strlen(msg2));

	do {
		memset(buf, 0, BUFSIZ);
		r = serial_read(fd, buf, BUFSIZ);
		printf("%s", buf);
	} while (r > 0);

exit:
	serial_close(fd);

	return EXIT_SUCCESS;
}
Beispiel #7
0
int serialMonitor()
{
	serial *s;
	while(serial_open(&s, serialPort, 9600)){	//打开串口出错,2秒后重试
		debug("open serial port error!\n");
		sleep(2);
	}

	struct HCSR501 hcsr501;
	while(1){
		while(get_hcsr501(s,&hcsr501)){	//读取串口数据出错,1秒后重试
			debug("hcsr501 error\n");
			sleep(1);
		}

		if(0 == hcsr501.state){	//HCSR501 :没反应
			usleep(500000);
			continue;
		}
		else if(1 == hcsr501.state){	//HCSR501:有反应
			debug("检测到异常!\n");
			while(get_switch(deviceId,sensorId,API_KEY,&sw)){
				debug("获取开关状态出错\n");
			}
			if(sw.state){
				debug("监控开关状态:开!\n");
				//feixin_count+=MSGRepeat;
				sign=1;
				debug("sign=%d\n",sign);
				sleep(30);	//检测到异常后标记发送飞信,然后30内不再检测
			}
			else{
				debug("监控开关状态:关!\n");
				sleep(3);
			}


		}

	}
	return 0;
}
static bool serial_fpga_prepare(__maybe_unused struct thr_info *thr)
{
	struct cgpu_info *serial_fpga = thr->cgpu;
	struct FPGA_INFO *info = serial_fpga->device_data;

	applog(LOG_DEBUG, "serial_fpga_prepare...");

	if (info->device_fd == -1) {
		
		applog(LOG_INFO, "Open Serial FPGA on %s", serial_fpga->device_path);
		info->device_fd = serial_open(serial_fpga->device_path, SERIAL_IO_SPEED, SERIAL_READ_TIMEOUT, false);
		if (unlikely(info->device_fd == -1)) {
			applog(LOG_ERR, "Failed to open Serial FPGA on %s",
				   serial_fpga->device_path);
			return false;
		}
	}
	
	return true;
}
Beispiel #9
0
int main(int argc, char *argv[])
{
	int serverfd = -1;
	serial_control_t ttyctl;

	printf("\n");
	program_printf("version %s\n", VERSION);

	parse_command_line(argc, argv);

	forward_test_case(0);

	ttyfd = serial_open(tty_name);
	memset(&ttyctl, 0, sizeof(serial_control_t));
	ttyctl.fd = ttyfd;

	if (access(DEFAULT_TTY_CONFIG, F_OK) != 0) {
		/* config file not exsit, just create it */		
		create_config_file(DEFAULT_TTY_CONFIG);
	}

	read_config_file(&ttyctl);
	if (serial_setup(&ttyctl) != EXIT_SUCCESS) {
		error_printf("serial_control error\n");
		return EXIT_FAILURE;
	}

	forward_test_case(1);

	if (forward_create_server(&serverfd) != 0) {
		error_printf("forward_create_server error\n");
		return EXIT_FAILURE;
	}

	if (forward_accept_client(serverfd, ttyfd) != 0) {
		error_printf("forward_accept_client error\n");
		return EXIT_FAILURE;
	}

	return EXIT_SUCCESS;
}
Beispiel #10
0
int main(void)
{
    pinMode(LEDPIN,OUTPUT);
    pinMode(LEDPIN2,OUTPUT);
    cli();
    timer1_init();
	serial_open(19200, SERIAL_8N1);
    init_yield_array();
    //int t1 = kn_create_thread(tempHumidity);
    int t2 = kn_create_thread(blink);
    int t3 = kn_create_thread(blink_faster);

    while(1)
    {
        //kn_run_thread(t1);
        kn_run_thread(t2);
        kn_run_thread(t3);
        //init_yield_array();
        // if (tot_overflow >= 10) {
        //     blink();
        //     tot_overflow = 0;
        // }
        // if (tot_overflow2 >= 15) {
        //     blink_faster();
        //     tot_overflow2 = 0;
        // }
        //kn_run_thread(t1);
        //kn_run_thread(t2);
        //kn_run_thread(t3);
        //prints(" $$$$$$$$ ");
        //_delay_ms(800);
        //getTempHumidity();
        //prints((uint8_t*)TOTAL_RAM_SIZE);        
        // char buffer[16];
        // sprintf(buffer,"%d",(int)TOTAL_RAM_SIZE);
        // prints(buffer);
        //kn_create_thread(THREAD1, &threadB, false, NULL);
        // get_temp();
        // _delay_ms(800);
    }
}
Beispiel #11
0
int serial_stdio(char *name)
{
  unsigned int subdevice;

  if (serial_open(name, &subdevice))
    return -1;

  // Nuke existing stdin, stdout, stderr

  device_unregister(0);
  device_unregister(1);
  device_unregister(2);

  // Register new stdin, stdout, stderr

  device_register_char_fd(0, subdevice, NULL, serial_read, NULL, serial_rxready);
  device_register_char_fd(1, subdevice, serial_write, NULL, serial_txready, NULL);
  device_register_char_fd(2, subdevice, serial_write, NULL, serial_txready, NULL);

  return 0;
}
Beispiel #12
0
static GSList *center_scan(const char *conn, const char *serialcomm, int idx)
{
	int i;
	struct sr_dev_inst *sdi;
	struct drv_context *drvc;
	struct dev_context *devc;
	struct sr_serial_dev_inst *serial;
	GSList *devices;

	serial = sr_serial_dev_inst_new(conn, serialcomm);

	if (serial_open(serial, SERIAL_RDWR) != SR_OK)
		return NULL;

	drvc = center_devs[idx].di->priv;
	devices = NULL;
	serial_flush(serial);

	sr_info("Found device on port %s.", conn);

	sdi = g_malloc0(sizeof(struct sr_dev_inst));
	sdi->status = SR_ST_INACTIVE;
	sdi->vendor = g_strdup(center_devs[idx].vendor);
	sdi->model = g_strdup(center_devs[idx].device);
	devc = g_malloc0(sizeof(struct dev_context));
	sdi->inst_type = SR_INST_SERIAL;
	sdi->conn = serial;
	sdi->priv = devc;
	sdi->driver = center_devs[idx].di;

	for (i = 0; i < center_devs[idx].num_channels; i++)
		sr_channel_new(sdi, i, SR_CHANNEL_ANALOG, TRUE, channel_names[i]);

	drvc->instances = g_slist_append(drvc->instances, sdi);
	devices = g_slist_append(devices, sdi);

	serial_close(serial);

	return devices;
}
Beispiel #13
0
int main(int argc, char * argv[])
{
	int fd = -1;
	int serial;
	int ret;

	/* Default device selection per platform */
#ifdef __linux__
	char *device = "/dev/ttyUSB0";
#else
	char *device = "/dev/cuaU0";
#endif

	if (argv[1] != NULL)
		device = argv[1];
	else
		printf ("no device specified, defaulting to %s\n", device);

	serial = serial_open (device, &fd, MAK_BLOCKING, MAK_BAUD);

	if (serial == -1) {
		err(1, "Serial open of %s failed", device);
		exit(1);
	}
	printf("Ready to populate MAKStripe buffer...\n");
	ret = mak_successful_read(fd, MAKSTRIPE_TK_ALL);
	if (ret != 0) {
		printf("Unable to populate MAKStripe buffer!\n");
		exit(ret);
	}
	printf("Ready to clone buffer onto blank card...\n");
	ret = mak_successful_clone(fd);
	if (ret != 0) {
		printf("Unable to clone buffer onto blank card!\n");
		exit(ret);
	}
	serial_close (fd);
	exit(ret);
}
Beispiel #14
0
static GSList *scan(struct sr_dev_driver *di, GSList *options)
{
	struct dev_context *devc;
	struct sr_config *src;
	struct sr_serial_dev_inst *serial;
	struct sr_dev_inst *sdi;
	GSList *l;
	const char *conn;

	conn = NULL;
	for (l = options; l; l = l->next) {
		src = l->data;
		if (src->key == SR_CONF_CONN)
			conn = g_variant_get_string(src->data, NULL);
	}
	if (!conn)
		return NULL;

	serial = sr_serial_dev_inst_new(conn, SERIALCOMM);

	if (serial_open(serial, SERIAL_RDONLY) != SR_OK)
		return NULL;

	sdi = g_malloc0(sizeof(struct sr_dev_inst));
	sdi->status = SR_ST_INACTIVE;
	sdi->vendor = g_strdup("PCE");
	sdi->model = g_strdup("PCE-322A");
	devc = g_malloc0(sizeof(struct dev_context));
	devc->cur_mqflags = SR_MQFLAG_SPL_TIME_WEIGHT_F | SR_MQFLAG_SPL_FREQ_WEIGHT_A;
	sdi->conn = sr_serial_dev_inst_new(conn, SERIALCOMM);
	sdi->inst_type = SR_INST_SERIAL;
	sdi->priv = devc;
	sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "SPL");

	serial_close(serial);

	return std_scan_complete(di, g_slist_append(NULL, sdi));
}
Beispiel #15
0
int
serial_posix_setup(const char *device, int baud, serial **serialobj)
{

    /* open serial */
    *serialobj = serial_create();
    if (*serialobj == NULL) {
        printf("Unable to instantiate object: serial\n");
        goto fail;
    }

    if (serial_open(*serialobj, device) < 0) {
        printf("Unable to open serial devicer\n");
        goto fail;
    }

    if (serial_set_speed(*serialobj, baud) < 0) {
        printf("Unable to set serial speedr\n");
        goto fail;
    }

    if (serial_set_timeout(*serialobj, 10000) < 0) {
        printf("Unable to set timeoutr\n");
        goto fail;
    }

    if (serial_set_cts_flow(*serialobj, 1) < 0) {
        printf("Unable to set flow controlr\n");
        goto fail;
    }
    printf("%s is opened\n", device);
    return (0);

fail:
    serial_close(*serialobj);
    serial_destroy(*serialobj);
    return (1);
}
Beispiel #16
0
static int hw_dev_open(int dev_index)
{
	struct sr_dev_inst *sdi;
	struct context *ctx;

	if (!(sdi = sr_dev_inst_get(genericdmm_dev_insts, dev_index))) {
		sr_err("genericdmm: sdi was NULL.");
		return SR_ERR_BUG;
	}

	if (!(ctx = sdi->priv)) {
		sr_err("genericdmm: sdi->priv was NULL.");
		return SR_ERR_BUG;
	}

	sr_dbg("genericdmm: Opening serial port '%s'.", ctx->serial->port);

	switch (ctx->profile->transport) {
	case DMM_TRANSPORT_USBHID:
		/* TODO */
		break;
	case DMM_TRANSPORT_SERIAL:
		/* TODO: O_NONBLOCK? */
		ctx->serial->fd = serial_open(ctx->serial->port, O_RDWR | O_NONBLOCK);
		if (ctx->serial->fd == -1) {
			sr_err("genericdmm: Couldn't open serial port '%s'.",
			       ctx->serial->port);
			return SR_ERR;
		}
		//	serial_set_params(ctx->serial->fd, 2400, 8, 0, 1, 2);
		break;
	default:
		sr_err("No transport set.");
	}

	return SR_OK;
}
int main(int argc, char **argv)
{
	int rc;
	int max_fd;
	fd_set rfds;
	int port;

	if (argc != 3) {
		printf("usage: %s <uart_dev> <uart_index>\n", argv[0]);
		printf("exampel:\n");
		printf("	uart_tgt_cfg /dev/ttyCm1Serial 2\n");
		exit(0);
	}
	port = rmm_cfg_get_port(IPMIUARTTGTCFG_PORT);
	if (libipmi_init(port) < 0)
		return -1;

	serial_index = atoi(argv[2]);

	serial_open(argv[1]);

	for (;;) {
		max_fd = -1;
		FD_ZERO(&rfds);

		libipmi_callback_selectfds(&rfds, &max_fd);

		rc = select(max_fd + 1, &rfds, NULL, NULL, NULL);
		if (rc <= 0)
			continue;

		libipmi_callback_processfds(&rfds);
	}

	return 0;
}
Beispiel #18
0
void test_interactive(void) {
    serial_t serial;
    uint8_t buf[] = "Hello World";

    ptest();

    passert(serial_open(&serial, device, 4800) == 0);

    printf("Starting interactive test. Get out your logic analyzer, buddy!\n");
    printf("Press enter to continue...\n");
    getc(stdin);

    printf("Press enter to start transfer...");
    getc(stdin);
    passert(serial_write(&serial, buf, sizeof(buf)) == sizeof(buf));
    printf("Serial transfer baudrate 4800, 8n1 occurred? y/n\n");
    passert(getc_yes());

    passert(serial_set_baudrate(&serial, 9600) == 0);

    printf("Press enter to start transfer...");
    getc(stdin);
    passert(serial_write(&serial, buf, sizeof(buf)) == sizeof(buf));
    printf("Serial transfer baudrate 9600, 8n1 occurred? y/n\n");
    passert(getc_yes());

    passert(serial_set_baudrate(&serial, 115200) == 0);

    printf("Press enter to start transfer...");
    getc(stdin);
    passert(serial_write(&serial, buf, sizeof(buf)) == sizeof(buf));
    printf("Serial transfer baudrate 115200, 8n1 occurred? y/n\n");
    passert(getc_yes());

    passert(serial_close(&serial) == 0);
}
Beispiel #19
0
static struct serial *
open_tty (char *name)
{
  struct serial *desc;

  desc = serial_open (name);
  if (!desc)
    perror_with_name (name);

  if (baud_rate != -1)
    {
      if (serial_setbaudrate (desc, baud_rate))
	{
	  serial_close (desc);
	  perror_with_name (name);
	}
    }

  serial_raw (desc);

  serial_flush_input (desc);

  return desc;
}
Beispiel #20
0
int main(int argc, char **argv)
{
	serial_handle_t handle = INVALID_HANDLE_VALUE;
	SerialOption opt;
	opt.port = COMPORT;
	opt.speed = 115200;
	if (serial_open(&opt, &handle)) {
		esp_run_command(handle, "AT+GMR", true);

		mac_address_t stmac;
		esp_get_st_mac_address(handle, &stmac);

		mac_address_t apmac;
		esp_get_ap_mac_address(handle, &apmac);

		puts("---");
		puts(("ST " + to_s(stmac)).c_str());
		puts(("AP " + to_s(apmac)).c_str());

		serial_close(handle, &opt);
	}

	return 0;
}
Beispiel #21
0
int main(int argc, char** argv)
{
  int opt;
  char buffer[256] = {0}, i;
  int fd;
  int res,c;
  int flag=0,firsttime=0;
  char *param_port = NULL;
  char *param_speed = NULL;
  char param_test=1;

//  int clock_edge;
// int polarity;
 //default speed
 // param_port=strdup("COM3");    //default for debugging


    printf("-------------------------------------------------------\n");
    printf("\n");
    printf(" Bus Pirate binary mode SELF TEST utility v0.1 (CC-0)\n");
    printf(" http://dangerousprototypes.com\n");
    printf("\n");
    printf("-------------------------------------------------------\n");
    // printf("\n");

//p == port
// p=polarity
// e=clock edge

if (argc <= 1)  {

	    printf(" Help Menu\n");
		print_usage(argv[0]);
		exit(-1);
	}

while ((opt = getopt(argc, argv, "mRs:d:")) != -1) {
       // printf("%c  \n",opt);
		switch (opt) {

			case 'd':  // device   eg. com1 com12 etc
				if ( param_port != NULL){
					printf(" Device/PORT error!\n");
					exit(-1);
				}
				param_port = strdup(optarg);
				break;
            case 's':
				if (param_speed != NULL) {
					printf(" Speed should be set: eg  115200 \n");
					exit(-1);
				}
				param_speed = strdup(optarg);

				break;
            case 'R': //do short self test
				param_test = 0;
				break;
			case 'm':    //modem debugging for testing
                   modem =TRUE;   // enable modem mode
				break;

			default:
				printf(" Invalid argument %c", opt);
				print_usage(argv[0]);
				//exit(-1);
				break;
		}
	}
   // printf(" Press escape to exit \n");
  //  printf("\n");



    //param_port=strdup("COM3");
    //Set default if NULL
    if (param_port==NULL){
        printf(" No serial port set\n");
		print_usage(argv[0]);
		exit(-1);
    }

    if (param_speed==NULL)
          param_speed=strdup("115200");


    printf("\n Parameters used: Device = %s,  Speed = %s\n\n",param_port,param_speed);

    if(param_test==1){//full self-test
        printf(" Full self-test, attach jumpers (+5V to VPU) and (+3.3V to ADC)\n");
    }else{//short test
        printf(" !!!Warning, short self-test only!!!\n Many things will NOT be tested!!!\n");
    }

    flag=0;
    //
    // Loop and repeat test as needed for manufacturing
    //
    //TO DO: add loop here
     printf(" Press Esc to exit, any other key to start the self-test \n\n");
    while(1){

     //pause for space, or ESC to exit

     if (flag==1)
     {
     printf("\n--------------------- Starting a new Test-------------------------\n");

     }
	 while(1){
        Sleep(1);
        if (flag==1){
            flag=0;   //has flag been set to just go testing?
            break;    // proceed with test
         }
        if(kbhit()){
           c = getch();
           if(c == 27){
                printf("\n Esc key hit, stopping...\n");
                printf(" (Bye for now!)\n");
                exit(-1);
            }else {//make space only
                printf("\n Starting test! \n");
                break;
            }
        }
    }



    //
    // Open serial port
    //

	printf(" Opening Bus Pirate on %s at %sbps...\n", param_port, param_speed);
	fd = serial_open(param_port);
	if (fd < 0) {
		fprintf(stderr, " Error opening serial port\n");
		return -1;
	}

    //
	// Enter binary mode, then enter a protocol mode
	//
	serial_setup(fd,(speed_t) param_speed);

	if (modem==TRUE){    // connected to modem for testing response	{

              serial_write( fd, "ATI3\x0D\0",5 );
	          Sleep(1);
	          res= serial_read(fd, buffer, sizeof(buffer));
	          printf("\n %s\n",buffer);

              serial_write( fd, "ATI4\x0D\0",5 );
	          Sleep(1);
	          res= serial_read(fd, buffer, sizeof(buffer));
	          printf("\n %s\n",buffer);
              serial_write( fd, "ATI7\x0D\0",5 );
	          Sleep(1);
	          res= serial_read(fd, buffer, sizeof(buffer));
	          printf("\n %s\n",buffer);


	}
	else
	{


          fprintf(stderr, " Configuring Bus Pirate...\n");
   	      //BP_EnableMode(fd, SPI); //enter BBIO then SPI
   	      if(BP_EnableBinary(fd)!=BBIO){
                fprintf(stderr, " Buspirate cannot switch to binary mode :( \n");
                return -1;
   	 }
    //
	//Start self-test
	//
            printf(" Starting self-test...\n");

            if(param_test==1){//full self-test
                serial_write( fd, "\x11", 1);
            }else{//short test
                serial_write( fd, "\x10", 1);
            }

    //
    // Done with setup
    //
	}

        printf(" Getting self-test result...\n");
        Sleep(1000);  // how long to wait to get response?

        res = serial_read(fd, &i, 1); //get number of errors...

        if(i>0){
            printf("\n %u ERRORS!!! WARNING!!! :(\n\n", (uint8_t)i);
            printf(" MODE LED should be on!!!\n ");
        }else{
            printf("\n Self-test passed :)\n\n");
            printf(" MODE LED should blink!!!\n");

        }
        //  pause after the result

       if (firsttime==0){    // run here once and don't say again the next time
        printf(" Press any key to continue...\n");
        firsttime=1;
        while(1){
            Sleep(1);
            if(kbhit()){
               c = getch();
                break;
            }
        }
       }

        buffer[0]=0xFF;//exit self-test
        buffer[1]=0x0f;//exit BBIO
        res = serial_write( fd, buffer, 2);

        //close port so they can attach the next Bus Pirate
        serial_close(fd);


        //TODO: Loop back to pause after this
        printf("\n Connect another Bus Pirate  and press any key to start the self-test again \n");
        printf(" Or hit ESC key to stop and end the test.\n");

        while(1){
        Sleep(1);
        if(kbhit()){
           c = getch();
           if(c == 27){
                printf("\n Esc key hit, stopping...\n");
                printf(" (Bye for now!)\n");
                exit(-1);
            }else {//make space only
                flag=1;  //flag to tell the other loop to bypass another keypress

                break;
            }
        }
    }
	}

#define FREE(x) if(x) free(x);
	FREE(param_port);
	FREE(param_speed);
    return 0;
}
Beispiel #22
0
int main (int argc, char* argv[])
{
  int i;
  int k;
  int discover_iter;
  int play_iter;
  int num_ports = argc - 1;
  int serial_fd[num_ports];
  beacons_table_t beacons_table;   
  beacons_table = create_beacons_table();
  packet_t packet_to_send;
  enum state_t {DISCOVER, PLAY} state;
  //-- Check if the serial device name is given
  if (argc<2) {
    printf ("No serial device name is given\n");
    exit(0);
  }

  for(i = 0; i < num_ports; i++ )
  {
     //-- Open the serial port
     serial_fd[i]=serial_open(argv[i+1],B9600);
  
     //-- Error checking
     if (serial_fd[i]==-1) {
       printf ("Error opening the serial device: %s\n",argv[i+1]);
       perror("OPEN");
       exit(0);
     }
   }

/* --------------------------------------------------------------------  */
  //-- Execute the main loop  
   state = DISCOVER;
   while(1)
   {
      switch(state)
      {
         case DISCOVER:
              //Build the NEW_GAME_REQUEST packet
              packet_to_send.packet_id = PCK_HEADER;
              packet_to_send.destination = AllNodesID;
              packet_to_send.source = NodoCentralID;
              packet_to_send.number = 0x001; //No necessary in this implementation
              packet_to_send.length = 0x0000;
              packet_to_send.packet_type = NEW_GAME_REQUEST;
              packet_to_send.reserved = 0x0000;
              //It's no necessary to define "data", it'll be ignored
              
              for(k = 0; k < num_ports; k++ ) //Send a packet for each port
              {
                 send_packet(serial_fd[k], packet_to_send);
              }

              /*
              It's necessary to wait for the response and parse it. 
              In each "parse" command waits for receive one character during
              TIMEOUT us (in this case 1ms). Thus, in order to wait 2 sec. aprox
              for a response, the number of iterations are 2000ms/ (1ms X num_ports)
              */
              for(i = 0; i <= (2000 / num_ports); i++) 
              {
                 for(k = 0; k < num_ports; k++ )
                 {
                    parse_received(serial_fd[k],&beacons_table);
                 }
              }


              ////SEND PACKET AGAIN
               for(k = 0; k < num_ports; k++ ) //Send a packet for each port
              {
                 send_packet(serial_fd[k], packet_to_send);
              }

              /*
              It's necessary to wait for the response and parse it. 
              In each "parse" command waits for receive one character during
              TIMEOUT us (in this case 1ms). Thus, in order to wait 2 sec. aprox
              for a response, the number of iterations are 2000ms/ (1ms X num_ports)
              */
              for(i = 0; i <= (2000 / num_ports); i++) 
              {
                 for(k = 0; k < num_ports; k++ )
                 {
                    parse_received(serial_fd[k],&beacons_table);
                 }
              }


              print_beacon_table(beacons_table);
              state = PLAY;
            break;
         case PLAY:
              /*
              It's necessary to wait for the response and parse it. The table with
              the beacons and drones is being printed every 1 sec. In the same way,
              in each "parse" command waits for receive one character during
              TIMEOUT us (in this case 1ms). Thus, in order to wait 1 sec. aprox,
              the number of iterations are 1000ms/ (1ms X num_ports)
              */
              for(i = 0; i <= (1000 / num_ports); i++) 
              {
                 for(k = 0; k < num_ports; k++ )
                 {
                    parse_received(serial_fd[k],&beacons_table);
                 }
              }
              print_beacon_table(beacons_table);
            state = PLAY;
            break;
         default:
            state = DISCOVER;
            break;
      }
   }

/* --------------------------------------------------------------------  */

  for(i = 0; i < num_ports; i++ )
  {
     //-- Close the serial port
     serial_close(serial_fd[i]);
  }
   return 0;
}
Beispiel #23
0
int main(int argc, char** argv)
{
int opt;
  char buffer[256] = {0}, i;
  int fd;
  int res,c;
  int new_state,state=0;

  char *param_port = NULL;
  char *param_speed = NULL;
  char *param_polarity=NULL;
  char *param_clockedge=NULL;
  char *param_rawdata=NULL;

//  int clock_edge;
// int polarity;
 //default speed
 // param_port=strdup("COM3");    //default for debugging


    printf("-------------------------------------------------------\n");
    printf("\n");
    printf(" Bus Pirate binary mode SPI SNIFFER utility v0.2 (CC-0)\n");
    printf(" http://dangerousprototypes.com\n");
    printf("\n");
    printf("-------------------------------------------------------\n");
   printf("\n\n\n");

//p == port
// p=polarity
// e=clock edge

if (argc <= 1)  {
	    printf("ERROR: Invalid argument(s).\n\n");
	    printf("Help Menu\n");
		print_usage(argv[0]);
		exit(-1);
	}

while ((opt = getopt(argc, argv, "ms:p:e:d:r:")) != -1) {
       // printf("%c  \n",opt);
		switch (opt) {

			case 'd':  // device   eg. com1 com12 etc
				if ( param_port != NULL){
					printf("Device/PORT error!\n");
					exit(-1);
				}
				param_port = strdup(optarg);
				break;
			case 'e':      // clock edge
 				if (param_clockedge != NULL) {
					printf("Clock Edge should be 0 or 1\n");
					exit(-1);
				}
				param_clockedge = strdup(optarg);

				break;
			case 'p':
				if (param_polarity != NULL) {
					printf("Polarity must be 0 or 1\n");
					exit(-1);
				}
				param_polarity = strdup(optarg);

				break;
			case 's':
				if (param_speed != NULL) {
					printf("Speed should be set: eg  115200 \n");
					exit(-1);
				}
				param_speed = strdup(optarg);

				break;
			case 'r':      // raw data
 				if (param_rawdata != NULL) {
					printf("Raw Data should be 0 or 1\n");
					exit(-1);
				}
				param_rawdata = strdup(optarg);

				break;
			case 'm':    //modem debugging for testing
                   modem =TRUE;   // enable modem mode
				break;

			default:
				printf("Invalid argument %c", opt);
				print_usage(argv[0]);
				//exit(-1);
				break;
		}
	}
    printf(" Press escape to exit \n");
    printf("\n");



    //param_port=strdup("COM3");
    //Set default if NULL
    if (param_port==NULL){
        printf("No serial port set\n");
		print_usage(argv[0]);
		exit(-1);
    }

    if (param_clockedge==NULL)
          param_clockedge=strdup("1");

    if (param_polarity==NULL)
          param_polarity=strdup("0");

    if (param_speed==NULL)
          param_speed=strdup("115200");

    if (param_rawdata==NULL)
          param_rawdata=strdup("0");


    printf("\n  Parameters used: Device = %s,  Speed = %s, Clock Edge= %s, Polarity= %s\n\n",param_port,param_speed,param_clockedge,param_polarity);


    //
    // Open serial port
    //

	printf(" Opening Bus Pirate on %s at %sbps...\n", param_port, param_speed);
	fd = serial_open(param_port);
	if (fd < 0) {
		fprintf(stderr, "Error opening serial port\n");
		return -1;
	}

    //
	// Enter binary mode, then enter a protocol mode
	//
	serial_setup(fd,(speed_t) atoi(param_speed));

	printf(" Starting SPI sniffer...\n");


	if (modem==TRUE){    // connected to modem for testing response	{

              serial_write( fd, "ATI3\x0D\0",5 );
	          usleep(1);
	          res= serial_read(fd, buffer, sizeof(buffer));
	          printf("\n %s\n",buffer);

              serial_write( fd, "ATI4\x0D\0",5 );
	          usleep(1);
	          res= serial_read(fd, buffer, sizeof(buffer));
	          printf("\n %s\n",buffer);
              serial_write( fd, "ATI7\x0D\0",5 );
	          usleep(1);
	          res= serial_read(fd, buffer, sizeof(buffer));
	          printf("\n %s\n",buffer);


	}
	else
	{


          fprintf(stderr, " Configuring Bus Pirate...\n");
   	      BP_EnableMode(fd, SPI); //enter BBIO then SPI
    //
	//Start sniffer
	//

    //configure according to user settings
    //1000wxyz - SPI config, w=HiZ/3.3v, x=CKP idle, y=CKE edge, z=SMP sample
            i=0x80;
            if(strncmp(param_clockedge, "1", 1)==0)
                i|=0x02;
            if(strncmp(param_polarity, "1", 1)==0)
                i|=0x04;

            BP_WriteToPirate(fd, &i);

    //start the sniffer
             serial_write( fd, "\x0E", 1);

    //
    // Done with setup
    //
	}


	printf(" (OK) Happy sniffing! Press ESC to stop.\n");

    //
    // Loop and print input from the serial port
    //
	 while(1){

        usleep(1);
        res= serial_read(fd, buffer, 100);

        if(res>0){
            for(c=0; c<res; c++){
            if(strncmp(param_rawdata, "1", 1)==0) printf("%02X ", (uint8_t)buffer[c]);
	    else {
		switch(state) {
			default:
			case 0:	// waiting CS active
				if (buffer[c]==0x5B) {
					printf("[");
					new_state=1;
		  		} else {
					printf("Sync\n");
					new_state=0;
				}
				break;
			case 1:	// check for data or CS inactive
				if (buffer[c]==0x5C) {
					new_state=2;
				} else if (buffer[c]==0x5D) {
					printf("]\n");
					new_state=0;
				} else {
					printf("Sync\n");
					new_state=0;
				}
				break;
			case 2:	// MPI
				printf("0x%02X(", (uint8_t) buffer[c]);
				new_state=3;
				break;
			case 3:	// MPO
				printf("0x%02X)", (uint8_t) buffer[c]);
				new_state=1;
				break;
		}
		state=new_state;
	    }
            }
        }

#ifdef WIN32
        if(kbhit()){
           c = getch();

           if(c == 27){
                printf("\n Esc key hit, stopping...\n");
                printf(" Clean up Bus Pirate...\n");
                buffer[0]=0x00;//exit sniffer
                buffer[1]=0x00;//exit spi
                buffer[2]=0x0f;//exit BBIO
                res = serial_write( fd, buffer, 3);
                printf(" (Bye for now!)\n");
                break;
            }
        }
#endif

    }    //hit enter to stop

#define FREE(x) if(x) free(x);

	FREE(param_port);
	FREE(param_speed);
    return 0;
}
Beispiel #24
0
int do_serial_comms(const char *ttyfile, const char *baudrate, struct record *root)
{
	int fd;
	int len;
	speed_t speed;
	uint8_t *ptr;
	struct record *rec;
	const uint8_t BACKSPACE[] = {0x08};
	const uint8_t ERASE_ALL[] = {0x00};
	const uint8_t ACK = 0x06;
	ptr = io_buffer;

	if (baudrate_to_speed_t(baudrate, &speed)) {
		fprintf(stderr, "unsupported baudrate, %s\n", baudrate);
		return -1;
	}

	fd = serial_open(ttyfile, speed);
	if (fd < 0) {
		fprintf(stderr, "error opening serial port\n");
		return -1;
	}

	fprintf(stdout, "Putting card into download mode.\n");
	//Set PROG and reset
	set_dtr(fd, true);
	set_rts(fd, true);

	sleep(1);
	

	fprintf(stdout, "Trying to synchronize with ADuC70xx: ");
	fflush(stdout);
	
	while (serial_read_fully(fd, ptr, 1, 100));
	
	set_rts(fd, false);
	

	do {
		len = serial_write_fully(fd, BACKSPACE, sizeof(BACKSPACE), 1000);
		len = serial_read_fully(fd, ptr, 24, 100);
		
	} while (!((len > 6) && (memcmp(ptr, "ADuC70", 6) == 0)));

	//Disable PROG
	set_dtr(fd, false);
	
	while (serial_read_fully(fd, ptr, 1, 100));

	if ((len > 6) && (memcmp(ptr, "ADuC70", 6) == 0)) {
		int product_len = (memchr(ptr, ' ', 24) - (void *)ptr);
		fprintf(stdout, "Found %.*s\n", product_len, ptr);

		fprintf(stdout, "Erasing: ");
		fflush(stdout);

		len = fill_packet(ptr, 'E', 0x00000000, ERASE_ALL, sizeof(ERASE_ALL));
		len = serial_write_fully(fd, ptr, len, 1000);
		len = serial_read_fully(fd, ptr, 1, 10000);

		if ((len <= 0) || (ptr[0] != ACK)) {
			fprintf(stdout, "FAILED\n");
			goto error;
		}

		fprintf(stdout, "OK\n");

		rec = root;
		while (rec != NULL) {
			int count = 0;
			uint32_t address = rec->address;
			uint8_t *data = data_buffer;
			struct record *drec;

			for (drec = rec; ((drec != NULL) && ((address + count) == drec->address) && ((count + drec->count) < DATA_BUFFER_SIZE)); drec = drec->next) {
				memcpy(data, drec->data, drec->count);
				data += drec->count;
				count += drec->count;
			}
			rec = drec;

			fprintf(stdout, "Writting (%#x): ", address);
			fflush(stdout);

			len = fill_packet(ptr, 'W', address, data_buffer, count);
			len = serial_write_fully(fd, ptr, len, 1000);
			len = serial_read_fully(fd, ptr, 1, 10000);

			if ((len <= 0) || (ptr[0] != ACK)) {
				fprintf(stdout, "FAILED\n");
				goto error;
			}

			fprintf(stdout, "OK\n");
		}

		if (reset) {
			fprintf(stdout, "Resetting: ");
			fflush(stdout);

			len = fill_packet(ptr, 'R', 0x00000001, NULL, 0);
			len = serial_write_fully(fd, ptr, len, 1000);
			len = serial_read_fully(fd, ptr, 1, 10000);

			if ((len <= 0) || (ptr[0] != ACK)) {
				fprintf(stdout, "FAILED\n");
				goto error;
			}

			fprintf(stdout, "OK\n");
		}
	} else {
		fprintf(stdout, "FAILED\n");
		goto error;
	}

	if (follow) {
		int count = 600;
		while (count--) {
			len = serial_read(fd, ptr, 16, 1000);
			if (len > 0) {
				dump_text(stdout, ptr, len);
			}
		}
	}

error:
	if (serial_close(fd) < 0) {
		fprintf(stderr, "error closing serial port\n");
		return -1;
	}

	return 0;
}
Beispiel #25
0
int main(int argc, char *argv[])
{
	struct server *server1;
	struct server *server2;
	struct server *server3;
	struct server *server4;
	struct server *server5;
	bool server_enabled = false;
	bool serial_enabled = false;
	int letest_count = 0;
	int amptest_count = 0;
	int vhci_count = 0;
	enum vhci_type vhci_type = VHCI_TYPE_BREDRLE;
	sigset_t mask;
	int i;

	mainloop_init();

	for (;;) {
		int opt;

		opt = getopt_long(argc, argv, "Ssl::LBAUTvh",
						main_options, NULL);
		if (opt < 0)
			break;

		switch (opt) {
		case 'S':
			serial_enabled = true;
			break;
		case 's':
			server_enabled = true;
			break;
		case 'l':
			if (optarg)
				vhci_count = atoi(optarg);
			else
				vhci_count = 1;
			break;
		case 'L':
			vhci_type = VHCI_TYPE_LE;
			break;
		case 'B':
			vhci_type = VHCI_TYPE_BREDR;
			break;
		case 'A':
			vhci_type = VHCI_TYPE_AMP;
			break;
		case 'U':
			if (optarg)
				letest_count = atoi(optarg);
			else
				letest_count = 1;
			break;
		case 'T':
			if (optarg)
				amptest_count = atoi(optarg);
			else
				amptest_count = 1;
			break;
		case 'v':
			printf("%s\n", VERSION);
			return EXIT_SUCCESS;
		case 'h':
			usage();
			return EXIT_SUCCESS;
		default:
			return EXIT_FAILURE;
		}
	}

	if (letest_count < 1 && amptest_count < 1 &&
			vhci_count < 1 && !server_enabled && !serial_enabled) {
		fprintf(stderr, "No emulator specified\n");
		return EXIT_FAILURE;
	}

	sigemptyset(&mask);
	sigaddset(&mask, SIGINT);
	sigaddset(&mask, SIGTERM);

	mainloop_set_signal(&mask, signal_callback, NULL, NULL);

	printf("Bluetooth emulator ver %s\n", VERSION);

	for (i = 0; i < letest_count; i++) {
		struct bt_le *le;

		le = bt_le_new();
		if (!le) {
			fprintf(stderr, "Failed to create LE controller\n");
			return EXIT_FAILURE;
		}
	}

	for (i = 0; i < amptest_count; i++) {
		struct bt_amp *amp;

		amp = bt_amp_new();
		if (!amp) {
			fprintf(stderr, "Failed to create AMP controller\n");
			return EXIT_FAILURE;
		}
	}

	for (i = 0; i < vhci_count; i++) {
		struct vhci *vhci;

		vhci = vhci_open(vhci_type);
		if (!vhci) {
			fprintf(stderr, "Failed to open Virtual HCI device\n");
			return EXIT_FAILURE;
		}
	}

	if (serial_enabled) {
		struct serial *serial;

		serial = serial_open(SERIAL_TYPE_BREDRLE);
		if (!serial)
			fprintf(stderr, "Failed to open serial emulation\n");
	}

	if (server_enabled) {
		server1 = server_open_unix(SERVER_TYPE_BREDRLE,
						"/tmp/bt-server-bredrle");
		if (!server1)
			fprintf(stderr, "Failed to open BR/EDR/LE server\n");

		server2 = server_open_unix(SERVER_TYPE_BREDR,
						"/tmp/bt-server-bredr");
		if (!server2)
			fprintf(stderr, "Failed to open BR/EDR server\n");

		server3 = server_open_unix(SERVER_TYPE_AMP,
						"/tmp/bt-server-amp");
		if (!server3)
			fprintf(stderr, "Failed to open AMP server\n");

		server4 = server_open_unix(SERVER_TYPE_LE,
						"/tmp/bt-server-le");
		if (!server4)
			fprintf(stderr, "Failed to open LE server\n");

		server5 = server_open_unix(SERVER_TYPE_MONITOR,
						"/tmp/bt-server-mon");
		if (!server5)
			fprintf(stderr, "Failed to open monitor server\n");
	}

	return mainloop_run();
}
Beispiel #26
0
static GSList *scan(struct sr_dev_driver *di, GSList *options)
{
	struct sr_dev_inst *sdi;
	struct dev_context *devc;
	struct sr_config *src;
	struct sr_serial_dev_inst *serial;
	struct sr_channel_group *cg;
	struct sr_channel *ch;
	GSList *l;
	int ret, len;
	const char *conn, *serialcomm;
	char buf[100];
	char *bufptr;
	double version;

	conn = serialcomm = NULL;
	for (l = options; l; l = l->next) {
		src = l->data;
		switch (src->key) {
		case SR_CONF_CONN:
			conn = g_variant_get_string(src->data, NULL);
			break;
		case SR_CONF_SERIALCOMM:
			serialcomm = g_variant_get_string(src->data, NULL);
			break;
		}
	}
	if (!conn)
		return NULL;
	if (!serialcomm)
		serialcomm = SERIALCOMM;

	serial = sr_serial_dev_inst_new(conn, serialcomm);

	if (serial_open(serial, SERIAL_RDWR) != SR_OK)
		return NULL;

	serial_flush(serial);

	if (serial_write_blocking(serial, CMD_VERSION,
			strlen(CMD_VERSION), serial_timeout(serial,
			strlen(CMD_VERSION))) < (int)strlen(CMD_VERSION)) {
		sr_dbg("Unable to write while probing for hardware.");
		serial_close(serial);
		return NULL;
	}

	memset(buf, 0, sizeof(buf));
	bufptr = buf;
	len = sizeof(buf);
	ret = serial_readline(serial, &bufptr, &len, 3000);

	if (ret < 0 || len < 9 || strncmp((const char *)&buf, "version ", 8)) {
		sr_dbg("Unable to probe version number.");
		serial_close(serial);
		return NULL;
	}

	version = g_ascii_strtod(buf + 8, NULL);
	if (version < 1.10) {
		sr_info("Firmware >= 1.10 required (got %1.2f).", version);
		serial_close(serial);
		return NULL;
	}

	sdi = g_malloc0(sizeof(struct sr_dev_inst));
	sdi->status = SR_ST_INACTIVE;
	sdi->vendor = g_strdup("Arachnid Labs");
	sdi->model = g_strdup("Re:load Pro");
	sdi->version = g_strdup(buf + 8);
	sdi->inst_type = SR_INST_SERIAL;
	sdi->conn = serial;

	cg = g_malloc0(sizeof(struct sr_channel_group));
	cg->name = g_strdup("1");
	sdi->channel_groups = g_slist_append(sdi->channel_groups, cg);

	ch = sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "V");
	cg->channels = g_slist_append(cg->channels, ch);

	ch = sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "I");
	cg->channels = g_slist_append(cg->channels, ch);

	devc = g_malloc0(sizeof(struct dev_context));
	sr_sw_limits_init(&devc->limits);
	sdi->priv = devc;

	serial_close(serial);

	return std_scan_complete(di, g_slist_append(NULL, sdi));
}
Beispiel #27
0
static GSList *scan(GSList *options)
{
	struct drv_context *drvc;
	struct dev_context *devc;
	struct sr_config *src;
	struct sr_serial_dev_inst *serial;
	struct sr_dev_inst *sdi;
	struct sr_channel *ch;
	GSList *l, *devices;
	gint64 start;
	const char *conn;
	unsigned char c;

	conn = NULL;
	for (l = options; l; l = l->next) {
		src = l->data;
		if (src->key == SR_CONF_CONN)
			conn = g_variant_get_string(src->data, NULL);
	}
	if (!conn)
		return NULL;

	if (!(serial = sr_serial_dev_inst_new(conn, SERIALCOMM)))
		return NULL;

	if (serial_open(serial, SERIAL_RDONLY | SERIAL_NONBLOCK) != SR_OK)
		return NULL;

	devices = NULL;
	drvc = di->priv;
	start = g_get_monotonic_time();
	while (g_get_monotonic_time() - start < MAX_SCAN_TIME) {
		if (serial_read(serial, &c, 1) == 1 && c == 0xa5) {
			/* Found one. */
			if (!(sdi = sr_dev_inst_new(0, SR_ST_INACTIVE, "CEM",
					"DT-885x", NULL)))
				return NULL;

			if (!(devc = g_try_malloc0(sizeof(struct dev_context)))) {
				sr_dbg("Device context malloc failed.");
				return NULL;
			}
			devc->cur_mqflags = 0;
			devc->recording = -1;
			devc->cur_meas_range = 0;
			devc->cur_data_source = DATA_SOURCE_LIVE;
			devc->enable_data_source_memory = FALSE;

			if (!(sdi->conn = sr_serial_dev_inst_new(conn, SERIALCOMM)))
				return NULL;

			sdi->inst_type = SR_INST_SERIAL;
			sdi->priv = devc;
			sdi->driver = di;
			if (!(ch = sr_channel_new(0, SR_CHANNEL_ANALOG, TRUE, "SPL")))
				return NULL;
			sdi->channels = g_slist_append(sdi->channels, ch);
			drvc->instances = g_slist_append(drvc->instances, sdi);
			devices = g_slist_append(devices, sdi);
			break;
		}
		/* It takes about 1ms for a byte to come in. */
		g_usleep(1000);
	}

	serial_close(serial);

	return devices;
}
Beispiel #28
0
struct Image*
jd11_get_picture(int picnum,int thumbnail) {
        struct Image	*image;
	int		nrofpics;
	int		h,fd;
	unsigned char	*indexbuf,*uncomp[3],**imagebufs;
	int		sizes[3];
	char		*s;

	if (picnum==0) {
	    fprintf(stderr,"jd11_get_picture: picnum 0???\n");
	    assert(picnum);
	}
	picnum--;
	fd=serial_open(serial_port);
	if (fd==-1) {
	    return NULL;
	}
	nrofpics = serial_index_reader(fd,&indexbuf);
	if (!nrofpics || (picnum>nrofpics)) {
	    return NULL;
	}

	image = (struct Image*)malloc(sizeof(struct Image));
	memset(image,0,sizeof(*image));

	if (thumbnail) {
	    	int ind;

		image->image = malloc(1*64*48*5+200); /* guessing imagesize */
		strcpy(image->image,"P2\n64 48\n255\n");
		s=image->image+strlen(image->image);
		ind = picnum*64*48;
		for (h=48;h--;) { /* upside down */
		    int w;
		    for (w=64;w--;) { /* and right to left */
			sprintf(s,"%d ",indexbuf[ind+(h*64)+w]);s+=strlen(s);
			if ((w&0xf)==0xf)
			    	*s++='\n';
		    }
		}
		*s++='\0';
		image->image_size = strlen(image->image);
		strcpy(image->image_type,"ppm");
		free(indexbuf);
		return image;
	}
	free(indexbuf);
	serial_image_reader(fd,picnum,&imagebufs,sizes);
	uncomp[0] = malloc(320*480);
	uncomp[1] = malloc(320*480/2);
	uncomp[2] = malloc(320*480/2);
	if (sizes[0]!=115200) {
		picture_decomp_v1(imagebufs[0],uncomp[0],320,480);
		picture_decomp_v1(imagebufs[1],uncomp[1],320,480/2);
		picture_decomp_v1(imagebufs[2],uncomp[2],320,480/2);
	} else {
		picture_decomp_v2(imagebufs[0],uncomp[0],320,480);
		picture_decomp_v2(imagebufs[1],uncomp[1],320,480/2);
		picture_decomp_v2(imagebufs[2],uncomp[2],320,480/2);
	}

	image->image = malloc(1*640*480*3+200); /* guessing imagesize */
	strcpy(image->image,"P6\n640 480\n255\n");
	s=image->image+strlen(image->image);
	image->image_size = strlen(image->image)+640*480*3;
	for (h=480;h--;) { /* upside down */
	    int w;
	    for (w=640;w--;) { /* right to left */
		/* and images are in green red blue */
		*s++=uncomp[1][(h/2)*320+(w/2)];
		*s++=uncomp[0][h*320+(w/2)];
		*s++=uncomp[2][(h/2)*320+(w/2)];
	    }
	}
	free(uncomp[0]);free(uncomp[1]);free(uncomp[2]);
	free(imagebufs[0]);free(imagebufs[1]);free(imagebufs[2]);free(imagebufs);
	strcpy(image->image_type,"ppm");
	serial_close(fd);
	return image;
}
Beispiel #29
0
static GSList *scan(GSList *options, int modelid)
{
	struct sr_dev_inst *sdi;
	struct drv_context *drvc;
	struct dev_context *devc;
	struct sr_config *src;
	struct sr_channel *ch;
	struct sr_channel_group *cg;
	struct sr_serial_dev_inst *serial;
	GSList *l, *devices;
	struct pps_model *model;
	uint8_t packet[PACKET_SIZE];
	unsigned int i;
	int ret;
	const char *conn, *serialcomm;
	char channel[10];

	devices = NULL;
	drvc = di->priv;
	drvc->instances = NULL;

	conn = serialcomm = NULL;
	for (l = options; l; l = l->next) {
		src = l->data;
		switch (src->key) {
		case SR_CONF_CONN:
			conn = g_variant_get_string(src->data, NULL);
			break;
		case SR_CONF_SERIALCOMM:
			serialcomm = g_variant_get_string(src->data, NULL);
			break;
		}
	}
	if (!conn)
		return NULL;
	if (!serialcomm)
		serialcomm = SERIALCOMM;

	if (!(serial = sr_serial_dev_inst_new(conn, serialcomm)))
		return NULL;

	if (serial_open(serial, SERIAL_RDWR | SERIAL_NONBLOCK) != SR_OK)
		return NULL;
	serial_flush(serial);

	/* This is how the vendor software channels for hardware. */
	memset(packet, 0, PACKET_SIZE);
	packet[0] = 0xaa;
	packet[1] = 0xaa;
	if (serial_write(serial, packet, PACKET_SIZE) == -1) {
		sr_err("Unable to write while probing for hardware: %s",
				strerror(errno));
		return NULL;
	}
	/* The device responds with a 24-byte packet when it receives a packet.
	 * At 9600 baud, 300ms is long enough for it to have arrived. */
	g_usleep(300 * 1000);
	memset(packet, 0, PACKET_SIZE);
	if ((ret = serial_read_nonblocking(serial, packet, PACKET_SIZE)) < 0) {
		sr_err("Unable to read while probing for hardware: %s",
				strerror(errno));
		return NULL;
	}
	if (ret != PACKET_SIZE || packet[0] != 0xaa || packet[1] != 0xaa) {
		/* Doesn't look like an Atten PPS. */
		return NULL;
	}

	model = NULL;
	for (i = 0; i < ARRAY_SIZE(models); i++) {
		if (models[i].modelid == modelid) {
			model = &models[i];
			break;
		}
	}
	if (!model) {
		sr_err("Unknown modelid %d", modelid);
		return NULL;
	}

	sdi = sr_dev_inst_new(0, SR_ST_INACTIVE, "Atten", model->name, NULL);
	sdi->driver = di;
	sdi->inst_type = SR_INST_SERIAL;
	sdi->conn = serial;
	for (i = 0; i < MAX_CHANNELS; i++) {
		snprintf(channel, 10, "CH%d", i + 1);
		ch = sr_channel_new(i, SR_CHANNEL_ANALOG, TRUE, channel);
		sdi->channels = g_slist_append(sdi->channels, ch);
		cg = g_malloc(sizeof(struct sr_channel_group));
		cg->name = g_strdup(channel);
		cg->channels = g_slist_append(NULL, ch);
		cg->priv = NULL;
		sdi->channel_groups = g_slist_append(sdi->channel_groups, cg);
	}

	devc = g_malloc0(sizeof(struct dev_context));
	devc->model = model;
	devc->config = g_malloc0(sizeof(struct per_channel_config) * model->num_channels);
	sdi->priv = devc;
	drvc->instances = g_slist_append(drvc->instances, sdi);
	devices = g_slist_append(devices, sdi);

	serial_close(serial);
	if (!devices)
		sr_serial_dev_inst_free(serial);

	return devices;
}
Beispiel #30
0
int _main(void)
{
   THROW_BEGIN()

   /* init scl and get sockets:: */
   THROW_ON_ERR(scl_init("arduino"));
   void *rc_socket = scl_get_socket("rc_raw");
   THROW_IF(rc_socket == NULL, -ENODEV);
   void *power_socket = scl_get_socket("power");
   THROW_IF(power_socket == NULL, -ENODEV);

   /* allocate msgpack buffers: */
   msgpack_sbuffer *msgpack_buf = msgpack_sbuffer_new();
   THROW_IF(msgpack_buf == NULL, -ENOMEM);
   msgpack_packer *pk = msgpack_packer_new(msgpack_buf, msgpack_sbuffer_write);
   THROW_IF(pk == NULL, -ENOMEM);
 
   /* fetch parameters: */
   char *dev_path;
   tsint_t dev_speed;
   opcd_params_init("exynos_quad.arduino_serial.", 0);
   opcd_param_t params[] =
   {
      {"path", &dev_path},
      {"speed", &dev_speed},
      OPCD_PARAMS_END
   };
   opcd_params_apply("", params);
   
   /* opern serial port: */
   serialport_t port;
   THROW_ON_ERR(serial_open(&port, dev_path, tsint_get(&dev_speed), O_RDONLY));

   uint16_t channels_raw[PPM_CHAN_MAX];
   uint32_t voltage_raw, current_raw;
   float channels[PPM_CHAN_MAX];

   while (running)
   {
      int c = serial_read_char(&port);
      if (c < 0)
         msleep(1);
      
      /* parse channels: */
      int status = ppm_parse_frame(channels_raw, (uint8_t)(c));
      if (status)
      {
         int sig_valid = 0;
         int invalid_count = 0;
         FOR_N(i, PPM_CHAN_MAX)
         {
            uint16_t chan_in = channels_raw[i];
            if (chan_in >= PPM_VALUE_INVALID)
               invalid_count++;
            if (chan_in > PPM_VALUE_MAX)
               chan_in = PPM_VALUE_MAX;
            if (chan_in < PPM_VALUE_MIN)
               chan_in = PPM_VALUE_MIN;
            channels[i] = (float)(chan_in - PPM_VALUE_MIN) / (PPM_VALUE_MAX - PPM_VALUE_MIN) * 2.f - 1.f;
         }
         sig_valid = (invalid_count < (PPM_CHAN_MAX / 3));
         
         /* send channels: */
         msgpack_sbuffer_clear(msgpack_buf);
         msgpack_pack_array(pk, 1 + PPM_CHAN_MAX);
         PACKI(sig_valid);               /* index 0: valid */
         PACKFV(channels, PPM_CHAN_MAX); /* index 1, .. : channels */
         scl_copy_send_dynamic(rc_socket, msgpack_buf->data, msgpack_buf->size);
      }

      /* parse adc voltage/current: */
      status = power_parse_frame(&voltage_raw, &current_raw, (uint8_t)(c));
      if (status)
      {
         float voltage = (float)(voltage_raw) / 1000.0;
         float current = (float)(current_raw) / 1000.0;
         
         /* send voltage / current: */
         msgpack_sbuffer_clear(msgpack_buf);
         msgpack_pack_array(pk, 2);
         PACKF(voltage); /* index 0 */
         PACKF(current); /* index 1 */
	      scl_copy_send_dynamic(power_socket, msgpack_buf->data, msgpack_buf->size);
      }
   }