Ejemplo n.º 1
0
int main(void) {
  board_init(BOARD_MODE_RUN);
  board_console_init(BOARD_DEBUG_BAUD);

  SysTick_Config(BOARD_SYSTICK_100MS / 10);

  // Initialize modem
  modem_init();

  if (!modem_enable()) error("modem enable");
  if (!modem_register(60000)) error("network register");
  if (!modem_gprs_attach(CELL_APN, CELL_USER, CELL_PWD, 30000)) error("GPRS attach");

  double lat = 0.0, lon = 0.0;
  rtc_datetime_t date;
  modem_location(&lat, &lon, &date, 30000);

  PRINTF("%04hd-%02hd-%02hd %02hd:%02hd:%02hd\r\n",
         date.year, date.month, date.day, date.hour, date.minute, date.second);

  PRINTF("Location: lat=%f, lon=%f\r\n", lat, lon);

  if (!modem_tcp_connect("api.ubirch.com", 80, 5000)) error("TCP connect");

  const char *send_data = "GET / HTTP/1.1\r\n\r\n";
  if (!modem_tcp_send((const uint8_t *) send_data, (uint8_t) strlen(send_data), 30000))
    error("simulated HTTP GET");

  uint8_t buffer[8192];
  size_t received = modem_tcp_receive(buffer, 1500, 10000);
  PRINTF("received %d bytes\r\n", received);

  dbg_dump("RCV", buffer, received);

  modem_tcp_close(1000);

  modem_disable();

  while (true) {
    delay(1000);
  }
}
Ejemplo n.º 2
0
LONG WINAPI bad_exception(struct _EXCEPTION_POINTERS* ExceptionInfo) {
	dbg_dump(ExceptionInfo);
	ExitProcess(0);
}
Ejemplo n.º 3
0
static void atp_complete(struct urb* urb)
{
	int x, y, x_z, y_z, x_f, y_f;
	int retval, i, j;
	int key;
	struct atp *dev = urb->context;

	switch (urb->status) {
	case 0:
		/* success */
		break;
	case -EOVERFLOW:
		if(!dev->overflowwarn) {
			printk(KERN_WARNING "appletouch: OVERFLOW with data "
				"length %d, actual length is %d\n",
				dev->datalen, dev->urb->actual_length);
			dev->overflowwarn = 1;
		}
	case -ECONNRESET:
	case -ENOENT:
	case -ESHUTDOWN:
		/* This urb is terminated, clean up */
		dbg("%s - urb shutting down with status: %d",
		    __FUNCTION__, urb->status);
		return;
	default:
		dbg("%s - nonzero urb status received: %d",
		    __FUNCTION__, urb->status);
		goto exit;
	}

	/* drop incomplete datasets */
	if (dev->urb->actual_length != dev->datalen) {
		dprintk("appletouch: incomplete data package"
			" (first byte: %d, length: %d).\n",
			dev->data[0], dev->urb->actual_length);
		goto exit;
	}

	/* reorder the sensors values */
	if (atp_is_geyser_3(dev)) {
		memset(dev->xy_cur, 0, sizeof(dev->xy_cur));

		/*
		 * The values are laid out like this:
		 * -, Y1, Y2, -, Y3, Y4, -, ..., -, X1, X2, -, X3, X4, ...
		 * '-' is an unused value.
		 */

		/* read X values */
		for (i = 0, j = 19; i < 20; i += 2, j += 3) {
			dev->xy_cur[i] = dev->data[j + 1];
			dev->xy_cur[i + 1] = dev->data[j + 2];
		}
		/* read Y values */
		for (i = 0, j = 1; i < 9; i += 2, j += 3) {
			dev->xy_cur[ATP_XSENSORS + i] = dev->data[j + 1];
			dev->xy_cur[ATP_XSENSORS + i + 1] = dev->data[j + 2];
		}
	} else if (atp_is_geyser_2(dev)) {
		memset(dev->xy_cur, 0, sizeof(dev->xy_cur));

		/*
		 * The values are laid out like this:
		 * Y1, Y2, -, Y3, Y4, -, ..., X1, X2, -, X3, X4, -, ...
		 * '-' is an unused value.
		 */

		/* read X values */
		for (i = 0, j = 19; i < 20; i += 2, j += 3) {
			dev->xy_cur[i] = dev->data[j];
			dev->xy_cur[i + 1] = dev->data[j + 1];
		}

		/* read Y values */
		for (i = 0, j = 1; i < 9; i += 2, j += 3) {
			dev->xy_cur[ATP_XSENSORS + i] = dev->data[j];
			dev->xy_cur[ATP_XSENSORS + i + 1] = dev->data[j + 1];
		}
	} else {
		for (i = 0; i < 8; i++) {
			/* X values */
			dev->xy_cur[i     ] = dev->data[5 * i +  2];
			dev->xy_cur[i +  8] = dev->data[5 * i +  4];
			dev->xy_cur[i + 16] = dev->data[5 * i + 42];
			if (i < 2)
				dev->xy_cur[i + 24] = dev->data[5 * i + 44];

			/* Y values */
			dev->xy_cur[i + 26] = dev->data[5 * i +  1];
			dev->xy_cur[i + 34] = dev->data[5 * i +  3];
		}
	}

	dbg_dump("sample", dev->xy_cur);

	if (!dev->valid) {
		/* first sample */
		dev->valid = 1;
		dev->x_old = dev->y_old = -1;
		memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old));

		if (dev->size_detect_done ||
		    atp_is_geyser_3(dev)) /* No 17" Macbooks (yet) */
			goto exit;

		/* 17" Powerbooks have extra X sensors */
		for (i = (atp_is_geyser_2(dev) ? 15 : 16); i < ATP_XSENSORS; i++) {
			if (!dev->xy_cur[i])
				continue;

			printk(KERN_INFO "appletouch: 17\" model detected.\n");
			if (atp_is_geyser_2(dev))
				input_set_abs_params(dev->input, ABS_X, 0,
						     (20 - 1) *
						     ATP_XFACT - 1,
						     ATP_FUZZ, 0);
			else
				input_set_abs_params(dev->input, ABS_X, 0,
						     (ATP_XSENSORS - 1) *
						     ATP_XFACT - 1,
						     ATP_FUZZ, 0);
			break;
		}

		dev->size_detect_done = 1;
		goto exit;
	}

	for (i = 0; i < ATP_XSENSORS + ATP_YSENSORS; i++) {
		/* accumulate the change */
		signed char change = dev->xy_old[i] - dev->xy_cur[i];
		dev->xy_acc[i] -= change;

		/* prevent down drifting */
		if (dev->xy_acc[i] < 0)
			dev->xy_acc[i] = 0;
	}

	memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old));

	dbg_dump("accumulator", dev->xy_acc);

	x = atp_calculate_abs(dev->xy_acc, ATP_XSENSORS,
			      ATP_XFACT, &x_z, &x_f);
	y = atp_calculate_abs(dev->xy_acc + ATP_XSENSORS, ATP_YSENSORS,
			      ATP_YFACT, &y_z, &y_f);
	key = dev->data[dev->datalen - 1] & 1;

	if (x && y) {
		if (dev->x_old != -1) {
			x = (dev->x_old * 3 + x) >> 2;
			y = (dev->y_old * 3 + y) >> 2;
			dev->x_old = x;
			dev->y_old = y;

			if (debug > 1)
				printk(KERN_DEBUG "appletouch: X: %3d Y: %3d "
				       "Xz: %3d Yz: %3d\n",
				       x, y, x_z, y_z);

			input_report_key(dev->input, BTN_TOUCH, 1);
			input_report_abs(dev->input, ABS_X, x);
			input_report_abs(dev->input, ABS_Y, y);
			input_report_abs(dev->input, ABS_PRESSURE,
					 min(ATP_PRESSURE, x_z + y_z));
			atp_report_fingers(dev->input, max(x_f, y_f));
		}
		dev->x_old = x;
		dev->y_old = y;

	} else if (!x && !y) {
Ejemplo n.º 4
0
int dbg_cmd(int argc, char *argv[])
{
    char* cmd = NULL;
    char* arg1 = NULL;
    char* arg2 = NULL;

    if (argc > 1) {
        cmd = argv[1];
        if ( argc > 2 ) {
            arg1 = argv[2];
            if ( argc > 3 ) {
                arg2 = argv[3];
            }
        }
    }
    else {
        DEBUGF("usage: fat command [options]\n"
               "commands:\n"
               " dir <dir>\n"
               " ds <sector> - display sector\n"
               " type <file>\n"
               " head <file>\n"
               " tail <file>\n"
               " mkfile <file> <size (KB)>\n"
               " chkfile <file>\n"
               " del <file>\n"
               " rmdir <dir>\n"
               " dump <file> <offset>\n"
               " mkdir <dir>\n"
               " trunc <file> <size>\n"
               " wrtest <file>\n"
               " append <file>\n"
               " test <file>\n"
               " ren <file> <newname>\n"
            );
        return -1;
    }

    if (!strcasecmp(cmd, "dir"))
    {
        if ( arg1 )
            dbg_dir(arg1);
        else
            dbg_dir("/");
    }

    if (!strcasecmp(cmd, "ds"))
    {                    
        if ( arg1 ) {
            DEBUGF("secnum: %ld\n", strtol(arg1, NULL, 0));
            dbg_dump_sector(strtol(arg1, NULL, 0));
        }
    }

    if (!strcasecmp(cmd, "type"))
    {
        if (arg1)
            dbg_type(arg1);
    }

    if (!strcasecmp(cmd, "head"))
    {
        if (arg1)
            return dbg_head(arg1);
    }
            
    if (!strcasecmp(cmd, "tail"))
    {
        if (arg1)
            dbg_tail(arg1);
    }

    if (!strcasecmp(cmd, "mkfile"))
    {
        if (arg1) {
            if (arg2)
                return dbg_mkfile(arg1,strtol(arg2, NULL, 0));
            else
                return dbg_mkfile(arg1,1);
        }
    }

    if (!strcasecmp(cmd, "chkfile"))
    {
        if (arg1) {
            if (arg2)
                return dbg_chkfile(arg1, strtol(arg2, NULL, 0));
            else
                return dbg_chkfile(arg1, 0);
        }
    }

    if (!strcasecmp(cmd, "mkdir"))
    {
        if (arg1) {
            return dbg_mkdir(arg1);
        }
    }

    if (!strcasecmp(cmd, "del"))
    {
        if (arg1)
            return remove(arg1);
    }

    if (!strcasecmp(cmd, "rmdir"))
    {
        if (arg1)
            return rmdir(arg1);
    }

    if (!strcasecmp(cmd, "dump"))
    {
        if (arg1) {
            if (arg2)
                return dbg_dump(arg1, strtol(arg2, NULL, 0));
            else
                return dbg_dump(arg1, 0);
        }
    }

    if (!strcasecmp(cmd, "wrtest"))
    {
        if (arg1)
            return dbg_wrtest(arg1);
    }

    if (!strcasecmp(cmd, "append"))
    {
        if (arg1)
            return dbg_append(arg1);
    }

    if (!strcasecmp(cmd, "test"))
    {
        if (arg1)
            return dbg_test(arg1);
    }

    if (!strcasecmp(cmd, "trunc"))
    {
        if (arg1 && arg2)
            return dbg_trunc(arg1, strtol(arg2, NULL, 0));
    }

    if (!strcasecmp(cmd, "ren"))
    {
        if (arg1 && arg2)
            return rename(arg1, arg2);
    }

    return 0;
}
Ejemplo n.º 5
0
LONG WINAPI bad_exception(struct _EXCEPTION_POINTERS* ExceptionInfo) {
	dbg_dump(ExceptionInfo);
	// 不退出
	return true;
	/*ExitProcess(0);*/
}
Ejemplo n.º 6
0
/* return 0: on error, 1: success */
static int dev_command (struct device *dev, SANE_Byte * cmd, size_t reqlen)
{
  SANE_Status status;
  size_t sendlen = cmd[3] + 4;
  SANE_Byte *res = dev->res;


  assert (reqlen <= sizeof (dev->res));	/* requested len */
  dev->reslen = sizeof (dev->res);	/* doing full buffer to flush stalled commands */

  if (cmd[2] == CMD_SET_WINDOW) {
    /* Set Window have wrong packet length, huh. */
    sendlen = 25;
  }

  if (cmd[2] == CMD_READ_IMAGE) {
    /* Read Image is raw data, don't need to read response */
    res = NULL;
  }

  dev->state = 0;
  DBG (4, ":: dev_command(%s[%#x], %lu)\n", str_cmd(cmd[2]), cmd[2],
       (u_long)reqlen);
  status = dev->io->dev_request(dev, cmd, sendlen, res, &dev->reslen);
  if (status != SANE_STATUS_GOOD) {
    DBG (1, "%s: dev_request: %s\n", __FUNCTION__, sane_strstatus (status));
    dev->state = SANE_STATUS_IO_ERROR;
    return 0;
  }

  if (!res) {
    /* if not need response just return success */
    return 1;
  }

  /* normal command reply, some sanity checking */
  if (dev->reslen < reqlen) {
    DBG (1, "%s: illegal response len %lu, need %lu\n",
	 __FUNCTION__, (u_long)dev->reslen, (u_long)reqlen);
    dev->state = SANE_STATUS_IO_ERROR;
    return 0;
  } else {
    size_t pktlen;		/* len specified in packet */

    if (DBG_LEVEL > 3)
      dbg_dump(dev);

    if (dev->res[0] != RES_CODE) {
      DBG (2, "%s: illegal data header %02x\n", __FUNCTION__, dev->res[0]);
      dev->state = SANE_STATUS_IO_ERROR;
      return 0;
    }
    pktlen = dev->res[2] + 3;
    if (dev->reslen != pktlen) {
      DBG (2, "%s: illegal response len %lu, should be %lu\n",
	   __FUNCTION__, (u_long)pktlen, (u_long)dev->reslen);
      dev->state = SANE_STATUS_IO_ERROR;
      return 0;
    }
    if (dev->reslen > reqlen)
      DBG (2, "%s: too big packet len %lu, need %lu\n",
	   __FUNCTION__, (u_long)dev->reslen, (u_long)reqlen);
  }

  dev->state = 0;
  if (cmd[2] == CMD_SET_WINDOW ||
      cmd[2] == CMD_OBJECT_POSITION ||
      cmd[2] == CMD_READ ||
      cmd[2] == CMD_RESERVE_UNIT) {
    if (dev->res[1] == STATUS_BUSY)
      dev->state = SANE_STATUS_DEVICE_BUSY;
    else if (dev->res[1] == STATUS_CANCEL)
      dev->state = SANE_STATUS_CANCELLED;
    else if (dev->res[1] == STATUS_CHECK)
      dev->state = resolv_state((cmd[2] == CMD_READ)?
				(dev->res[12] << 8 | dev->res[13]) :
				(dev->res[4] << 8 | dev->res[5]));

    if (dev->state)
      DBG (3, "%s(%s[%#x]): => %d: %s\n",
	   __FUNCTION__, str_cmd(cmd[2]), cmd[2],
	   dev->state, sane_strstatus(dev->state));
  }

  return 1;
}
Ejemplo n.º 7
0
int main(int argc, char* argv[])
{
    int opt, opt_idx;

    int in_fmt = INPUT_FMT_FASTA;
    int out_fmt = ADJ_GRAPH_FMT_MM;

    /* Size of the graph structure. */
    size_t n = 100000000;

    /* K-mer size. */
    size_t k = 25;

    /* Number of threads. */
    size_t num_threads = 1;

    struct option long_options[] =
    {
        {"fasta",   no_argument,       &in_fmt, INPUT_FMT_FASTA},
        {"fastq",   no_argument,       &in_fmt, INPUT_FMT_FASTQ},
        {"mm",      no_argument,       &out_fmt, ADJ_GRAPH_FMT_MM},
        {"hb",      no_argument,       &out_fmt, ADJ_GRAPH_FMT_HB},
        {"threads", required_argument, NULL, 't'},
        {"verbose", no_argument,       NULL, 'v'},
        {"help",    no_argument,       NULL, 'h'},
        {0, 0, 0, 0}
    };

    while (true) {
        opt = getopt_long(argc, argv, "n:k:t:vh", long_options, &opt_idx);
        if (opt == -1) break;

        switch (opt) {
            case 'n':
                n = strtoul(optarg, NULL, 10);
                break;

            case 'k':
                k = strtoul(optarg, NULL, 10);
                break;

            case 't':
                num_threads = strtoul(optarg, NULL, 10);
                break;

            case 'v':
                pique_verbose = true;
                break;

            case 'h':
                print_help(stdout);
                return EXIT_SUCCESS;

            case '?':
                return 1;

            case 0:
                break;

            default:
                abort();
        }
    }

    kmer_init();
    dbg_t* G = dbg_alloc(n, k);

    pthread_mutex_t f_mutex;
    pthread_mutex_init_or_die(&f_mutex, NULL);

    pthread_t* threads = malloc_or_die(num_threads * sizeof(pthread_t));

    pique_ctx_t ctx;
    ctx.fmt = in_fmt;
    ctx.G = G;
    ctx.f_mutex = &f_mutex;
    size_t i;

    if (optind >= argc) {
        ctx.f = fastq_create(stdin);
        for (i = 0; i < num_threads; ++i) {
            pthread_create(&threads[i], NULL, pique_thread, &ctx);
        }

        for (i = 0; i < num_threads; ++i) {
            pthread_join(threads[i], NULL);
        }

        fastq_free(ctx.f);
    } else {
        FILE* file;
        for (; optind < argc; ++optind) {
            file = fopen(argv[optind], "r");
            if (file == NULL) {
                fprintf(stderr, "Cannot open %s for reading.\n", argv[optind]);
                return EXIT_FAILURE;
            }
            ctx.f = fastq_create(file);

            for (i = 0; i < num_threads; ++i) {
                pthread_create(&threads[i], NULL, pique_thread, &ctx);
            }

            for (i = 0; i < num_threads; ++i) {
                pthread_join(threads[i], NULL);
            }

            fastq_free(ctx.f);
        }
    }

    dbg_dump(G, stdout, num_threads, out_fmt);

    pthread_mutex_destroy(&f_mutex);
    dbg_free(G);
    kmer_free();

    return EXIT_SUCCESS;
}
Ejemplo n.º 8
0
int teleinfo_read_frame_ext(const int fd, char *const buffer,
			    const size_t buflen, int *error_counter)
{
	char *p = buffer;
	size_t s = 0;
	char c;
	enum state { INIT, FRAME_BEGIN, FRAME_END, MSG_BEGIN, MSG_END };
	enum state current_state = INIT;
	int error_count = 0;
	int bytes_in_init_mode = 0;

	do {
		int res = read(fd, &c, 1);
		if (!res) {
			syslog(LOG_ERR, "unable to read from source\n");
			return EIO;
		}
		switch (c) {
		case STX:
			if (current_state != INIT) {
#ifdef DEBUG
				syslog(LOG_INFO,
				       "new STX detected but not expected, resetting frame begin");
				if (s < buflen) {
					*p++ = c;
					s++;
				} else {
					return EMSGSIZE;
				}
				dbg_dump(buffer, s);
#endif
				error_count++;
			}
			current_state = FRAME_BEGIN;
			p = buffer;
			s = 0;
//         if (s<buflen) { *p++ = c; s++; } else { return EMSGSIZE; }
			break;
		case LF:
			if (current_state != INIT) {
				if ((current_state != FRAME_BEGIN)
				    && (current_state != MSG_END)) {
#ifdef DEBUG
					syslog(LOG_INFO,
					       "LF detected but not expected, frame is invalid");
					if (s < buflen) {
						*p++ = c;
						s++;
					} else {
						return EMSGSIZE;
					}
					dbg_dump(buffer, s);
#endif
					error_count++;
					current_state = INIT;
				} else {
					current_state = MSG_BEGIN;
					if (s < buflen) {
						*p++ = c;
						s++;
					} else {
						return EMSGSIZE;
					}
				}
			}	// else do nothing: simply skip the char
			break;
		case CR:
			if (current_state != INIT) {
				if (current_state != MSG_BEGIN) {
#ifdef DEBUG
					syslog(LOG_INFO,
					       "CR detected but not expected, frame is invalid");
					if (s < buflen) {
						*p++ = c;
						s++;
					} else {
						return EMSGSIZE;
					}
					dbg_dump(buffer, s);
#endif
					error_count++;
					current_state = INIT;
				} else {
					current_state = MSG_END;
					if (s < buflen) {
						*p++ = c;
						s++;
					} else {
						return EMSGSIZE;
					}
				}
			}	// else do nothing: simply skip the char
			break;
		case ETX:
			if (current_state != INIT) {
				if (current_state != MSG_END) {
#ifdef DEBUG
					syslog(LOG_INFO,
					       "ETX detected but not expected, frame is invalid");
					if (s < buflen) {
						*p++ = c;
						s++;
					} else {
						return EMSGSIZE;
					}
					dbg_dump(buffer, s);
#endif
					error_count++;
					current_state = INIT;
				} else {
					current_state = FRAME_END;
//             if (s<buflen) { *p++ = c; s++; } else { return EMSGSIZE; }
				}
			}	// else do nothing: simply skip the char
			break;
		case EOT:
			syslog(LOG_INFO,
			       "frame have been interrupted by EOT, resetting frame");
			current_state = INIT;
			break;
		default:
			switch (current_state) {
			case INIT:
				// STX have not been detected yet, so we skip char
				break;
			case FRAME_BEGIN:
#ifdef DEBUG
				syslog(LOG_INFO,
				       "STX should be followed by LF, frame is invalid");
				if (s < buflen) {
					*p++ = c;
					s++;
				} else {
					return EMSGSIZE;
				}
				dbg_dump(buffer, s);
#endif
				current_state = INIT;
				error_count++;
				break;
			case FRAME_END:
				// We should not be here !
				break;
			case MSG_BEGIN:
				// Message content
				if (s < buflen) {
					*p++ = c;
					s++;
				} else {
					return EMSGSIZE;
				}
				break;
			case MSG_END:
#ifdef DEBUG
				syslog(LOG_INFO,
				       "CR should be followed by ETX or LF, frame is invalid");
				if (s < buflen) {
					*p++ = c;
					s++;
				} else {
					return EMSGSIZE;
				}
				dbg_dump(buffer, s);
#endif
				current_state = INIT;
				error_count++;
				break;
			}
		}
		if (current_state == INIT)
			bytes_in_init_mode++;
	} while ((current_state != FRAME_END) && (error_count < 10)
		 && (bytes_in_init_mode < TI_FRAME_LENGTH_MAX * 2));
	if (error_counter != NULL) {
		*error_counter = error_count;
	}
	if (current_state == FRAME_END) {
		return 0;
	} else {
		syslog(LOG_INFO, "too many error while reading, giving up");
		return EBADMSG;
	}
}