Пример #1
0
int main(int argc, char **argv)
{
	int ret, r2;

	runcmd_init();
	t_set_colors(0);
	t_start("exec output comparison");
	{
		int i;
		char *out = calloc(1, BUF_SIZE);
		for (i = 0; cases[i].input != NULL; i++) {
			memset(out, 0, BUF_SIZE);
			int pfd[2] = {-1, -1}, pfderr[2] = {-1, -1};
			int fd;
			char *cmd;
			asprintf(&cmd, "/bin/echo -n %s", cases[i].input);
			fd = runcmd_open(cmd, pfd, pfderr, NULL);
			read(pfd[0], out, BUF_SIZE);
			ok_str(cases[i].output, out, "Echoing a command should give expected output");
			close(pfd[0]);
			close(pfderr[0]);
			close(fd);
		}
	}
	ret = t_end();
	t_reset();
	t_start("anomaly detection");
	{
		int i;
		for (i = 0; anomaly[i].cmd; i++) {
			int out_argc;
			char *out_argv[256];
			int result = runcmd_cmd2strv(anomaly[i].cmd, &out_argc, out_argv);
			ok_int(result, anomaly[i].ret, anomaly[i].cmd);
		}
	}
	r2 = t_end();
	ret = r2 ? r2 : ret;
	t_reset();
	t_start("argument splitting");
	{
		int i;
		for (i = 0; parse_case[i].cmd; i++) {
			int x, out_argc;
			char *out_argv[256];
			int result = runcmd_cmd2strv(parse_case[i].cmd, &out_argc, out_argv);
			out_argv[out_argc] = NULL;
			ok_int(result, 0, parse_case[i].cmd);
			ok_int(out_argc, parse_case[i].argc_exp, parse_case[i].cmd);
			for (x = 0; x < parse_case[x].argc_exp && out_argv[x]; x++) {
				ok_str(parse_case[i].argv_exp[x], out_argv[x], "argv comparison test");
			}
		}
	}

	r2 = t_end();
	return r2 ? r2 : ret;
}
Пример #2
0
void meas_t(void) {
/* Measures the temperature and updates t_meas */
	wr_tsens(0xCC);				// Skip ROM
	wr_tsens(0x44);				// Convert T
	if(rd_tsens()) {				// If coversion is complete
		t_err=t_reset();
		wr_tsens(0xCC);			// Skip ROM
		wr_tsens(0xBE);			// Read scratchpad
		t_meas=rd_tsens();
		t_err=t_reset();
	}
}
Пример #3
0
void
serialize_test (char *buf, int len)
{
	unsigned long time;
	iks *x;
	iksparser *prs;
	char *xml;
	int err;

	prs = iks_dom_new (&x);
	err = iks_parse (prs, buf, len, 1);
	switch (err) {
		case IKS_OK:
			break;
		case IKS_NOMEM:
			exit (2);
		case IKS_BADXML:
			fprintf (stderr, "Invalid xml at byte %ld, line %ld\n",
				iks_nr_bytes (prs), iks_nr_lines (prs));
			exit (1);
		case IKS_HOOK:
			exit (1);
	}
	iks_parser_delete (prs);

	t_reset ();

	xml = iks_string (iks_stack (x), x);

	time = t_elapsed ();

	printf ("Serialize: serializing the tree took %ld milliseconds.\n", time);

	iks_delete (x);
}
Пример #4
0
void dom_test (char *buf, int len)
{
	int bs, i, err;
	iksparser *prs;
	unsigned long time;
	iks *x;
	size_t allocated, used;

	bs = block_size;
	if (0 == bs) bs = len;

	t_reset ();

	prs = iks_dom_new (&x);
	iks_set_size_hint (prs, len);
	i = 0;
	while (i < len) {
		if (i + bs > len) bs = len - i;
		err = iks_parse (prs, buf + i, bs, 0);
		switch (err) {
			case IKS_OK:
				break;
			case IKS_NOMEM:
				exit (2);
			case IKS_BADXML:
				fprintf (stderr, "Invalid xml at byte %ld, line %ld\n",
					iks_nr_bytes (prs), iks_nr_lines (prs));
				exit (1);
			case IKS_HOOK:
				exit (1);
		}
		i += bs;
	}

	time = t_elapsed ();
	iks_stack_stat (iks_stack (x), &allocated, &used);

	printf ("DOM: parsing and building the tree took %ld milliseconds.\n", time);
	printf ("DOM: ikstack: %d bytes allocated, %d bytes used.\n", allocated, used);

	t_reset ();
	iks_delete (x);
	time = t_elapsed ();
	printf ("DOM: deleting the tree took %ld milliseconds.\n", time);

	iks_parser_delete (prs);
}
Пример #5
0
void
devcntrl(FILE *fp)	/* interpret device control functions */
{
	char str[4096];
	int n;

	sget(str, sizeof str, fp);
	switch (str[0]) {	/* crude for now */
	case 'i':	/* initialize */
		fileinit();
		t_init(0);
		break;
	case 'T':	/* device name */
		sget(devname, sizeof devname, fp);
		break;
	case 't':	/* trailer */
		t_trailer();
		break;
	case 'p':	/* pause -- can restart */
		t_reset('p');
		break;
	case 's':	/* stop */
		t_reset('s');
		break;
	case 'r':	/* resolution assumed when prepared */
		fscanf(fp, "%d", &res);
		break;
	case 'f':	/* font used */
		fscanf(fp, "%d", &n);
		sget(str, sizeof str, fp);
		loadfont(n, str);
		break;
	}
	while (getc(fp) != '\n')	/* skip rest of input line */
		;
}
Пример #6
0
void
sha_test (char *buf, int len)
{
	unsigned long time;
	iksha *s;
	char out[41];

	t_reset ();

	s = iks_sha_new ();
	iks_sha_hash (s, buf, len, 1);
	iks_sha_print (s, out);
	out[40] = '\0';
	iks_sha_delete (s);

	time = t_elapsed ();

	printf ("SHA: hashing took %ld milliseconds.\n", time);
	printf ("SHA: hash [%s]\n", out);
}
Пример #7
0
void
sax_test (char *buf, int len)
{
	unsigned long time;
	iksparser *prs;
	int bs, i, err;

	bs = block_size;
	if (0 == bs) bs = len;
	sax_tag = 0;
	sax_cdata = 0;

	t_reset ();

	prs = iks_sax_new (NULL, tagHook, cdataHook);
	i = 0;
	while (i < len) {
		if (i + bs > len) bs = len - i;
		err = iks_parse (prs, buf + i, bs, 0);
		switch (err) {
			case IKS_OK:
				break;
			case IKS_NOMEM:
				exit (2);
			case IKS_BADXML:
				fprintf (stderr, "Invalid xml at byte %ld, line %ld\n",
					iks_nr_bytes (prs), iks_nr_lines (prs));
				exit (1);
			case IKS_HOOK:
				exit (1);
		}
		i += bs;
	}

	time = t_elapsed ();

	printf ("SAX: parsing took %ld milliseconds.\n", time);
	printf ("SAX: tag hook called %d, cdata hook called %d times.\n", sax_tag, sax_cdata);

	iks_parser_delete (prs);
}
Пример #8
0
int main(int argc, char **argv)
{
	int ret, r2;

	runcmd_init();
	t_set_colors(0);
	t_start("exec output comparison");
	{
		int i;
		char *out = calloc(1, BUF_SIZE);
		for (i = 0; cases[i].input != NULL; i++) {
			memset(out, 0, BUF_SIZE);
			int pfd[2] = {-1, -1}, pfderr[2] = {-1, -1};
			/* We need a stub iobregarg since runcmd_open()'s prototype
			 * declares it attribute non-null. */
			int stub_iobregarg = 0;
			int fd;
			char *cmd;
			asprintf(&cmd, ECHO_COMMAND " -n %s", cases[i].input);
			fd = runcmd_open(cmd, pfd, pfderr, NULL, stub_iobreg, &stub_iobregarg);
			free(cmd);
			read(pfd[0], out, BUF_SIZE);
			ok_str(cases[i].output, out, "Echoing a command should give expected output");
			close(pfd[0]);
			close(pfderr[0]);
			close(fd);
		}
		free(out);
	}
	ret = t_end();
	t_reset();
	t_start("anomaly detection");
	{
		int i;
		for (i = 0; anomaly[i].cmd; i++) {
			int out_argc;
			char *out_argv[256];
			int result = runcmd_cmd2strv(anomaly[i].cmd, &out_argc, out_argv);
			ok_int(result, anomaly[i].ret, anomaly[i].cmd);
			if (out_argv[0]) free(out_argv[0]);
		}
	}
	r2 = t_end();
	ret = r2 ? r2 : ret;
	t_reset();
	t_start("argument splitting");
	{
		int i;
		for (i = 0; parse_case[i].cmd; i++) {
			int x, out_argc;
			char *out_argv[256];
			int result = runcmd_cmd2strv(parse_case[i].cmd, &out_argc, out_argv);
			/*out_argv[out_argc] = NULL;*//* This must be NULL terminated already. */
			ok_int(result, parse_case[i].ret, parse_case[i].cmd);
			ok_int(out_argc, parse_case[i].argc_exp, parse_case[i].cmd);
			for (x = 0; x < parse_case[x].argc_exp && out_argv[x]; x++) {
				ok_str(parse_case[i].argv_exp[x], out_argv[x], "argv comparison test");
			}
			if (out_argv[0]) free(out_argv[0]);
		}
	}

	r2 = t_end();
	return r2 ? r2 : ret;
}
Пример #9
0
void command_exec(void)
{
  
#if 1
  unsigned long address = 0x20002000;
	unsigned char type = 0;
	unsigned char width = 8;
	int count = 1;
	unsigned char data[10] = {0xaa,0x55,0xaa,0x78};


	
	if(new_cmd_pending == CMD_HALT)
	{
		t_halt();
		new_cmd_pending = 0;
	}
	else if(new_cmd_pending == CMD_GO)
	{
		t_go();
		new_cmd_pending = 0;
	}
	else if(new_cmd_pending == CMD_WRITE_MEM)
	{
		t_write_mem(type, address, width, count, data);
		new_cmd_pending = 0;
	}
	else if(new_cmd_pending == CMD_READ_MEM)
	{
		t_read_mem(type, address, width, count, data);
		new_cmd_pending = 0;

	}
	else if(new_cmd_pending == CMD_CORE_WRITE)
	{
		t_changePC(0,0);
		new_cmd_pending = 0;
	}
	else if(new_cmd_pending == CMD_CORE_RESET)
	{
		t_reset();
		new_cmd_pending = 0;
	}	
	else if(new_cmd_pending == CMD_CORE_READ)
	{
		t_ReadPC();
		new_cmd_pending = 0;
	}
	else
	{
		;
	}
#endif

#if 0

	uint32_t i = 0, j = 0, k = 0, l = 0;
	uint32_t read_count = 0;
	uint32_t retry = 0;
	uint8_t led_state = 0;
	uint32_t write_error = 0;
	uint32_t sectorsize = 0;
	uint32_t rambufsize = 0;
	uint32_t rambufaddr = 0;
	

	gpio_set_cdc_led(led_state);
        led_state = !led_state;


	//Start to program
	if (!gpio_get_pin_loader_state())
	{		
		//t_halt();
		gpio_set_cdc_led(1);
		while(!gpio_get_pin_loader_state())
		{
			;
		}
		gpio_set_cdc_led(0);
		/*
		while(gpio_get_pin_loader_state())
		{
			;
		}
		gpio_set_cdc_led(1);

		while(!gpio_get_pin_loader_state())
		{
			;
		}
		gpio_set_cdc_led(0);
		*/

		
		t_reset();	

		
		
		for(i = 0; i < RETRY_TIME; i++)
		{
			write_error = 0;
			pwrite = (uint32_t *)KINETIS_FLASHPRG;
			pread = (uint32_t *)READBACK_ADDR;
			t_write_mem(0,FLASH_PC - 1, 8, 1024, (unsigned char *)pwrite);	
			t_read_mem(0,FLASH_PC - 1, 8, 4, (unsigned char *)pread);
		
			for(l = 0; l < 1; l++)
			{
				if(*pread != *pwrite)
				{
					write_error = 1;
				}
		
				*pread++;
				*pwrite++;
			}
		
			if(write_error == 0)
			{
				break;
			}
		
			
		}

		if(write_error == 1)
		{
			write_error = 0;
			return;
		}

		//return ;
		
			
		t_changePC(FLASH_PC,FLASH_SP);
		t_go();
		#if 1
		//判断Target是否运行
		while(1)
		{
			t_read_mem(0,HWESR, 32, 1, (unsigned char *)&readreg);
			
			if((readreg == CPU_WAIT))
			{
				retry = 0;
				read_count = 0;
				break;
			}
			else 
			{
				read_count++;
			}

			if(read_count > READ_TIME)
			{
				t_halt();
				t_write_mem(0,FLASH_PC - 1, 8, 1024, (unsigned char *)KINETIS_FLASHPRG);
				t_reset();
				t_changePC(FLASH_PC,FLASH_SP);
				t_go();
				read_count = 0;
				retry++;

			}
			//retry more times
			if(retry >= RETRY_TIME)
			{
				retry = 0;
				read_count = 0;
				break;
			}
		}
		#endif
		#if 1

		//计算烧写地址和大小

		t_read_mem(0,HWSID, 32, 1, (unsigned char *)&sectorsize);

		filenb = (*(uint32_t *)FILE_SIZE)/sectorsize;
		if((*(uint32_t *)FILE_SIZE)%sectorsize)
		{
			filenb++;
		}

		//开始擦除flash

		for(i = 0; i < filenb; i++)
		{
			gpio_set_cdc_led(led_state);
    		led_state = !led_state;
			//write byte len
			writereg = 0;
			t_write_mem(0,HWBCR, 32, 1, (unsigned char *)&writereg);
			//write addr
			writereg = sectorsize*i;
			t_write_mem(0,HWBFR, 32, 1, (unsigned char *)&writereg);
		
			writereg = CMD_ERASE;
			t_write_mem(0,HWCMR, 32, 1, (unsigned char *)&writereg);
			
			writereg = CMD_RUN;
			t_write_mem(0,HWCSR, 32, 1, (unsigned char *)&writereg);
			//等待擦除完成
			while(1)
			{
				t_read_mem(0,HWCSR, 32, 1, (unsigned char *)&readreg);

				if((readreg == CMD_DONW))
				{
					read_count = 0;
					break;
				}
				else 
				{
					read_count++;
				}	

				if(read_count > READ_TIME)
				{
					read_count = 0;
					return;
				}
			}

		}
		#endif
		#if 1

		//开始编程
		//i = 0;
		//j = 0;

		t_read_mem(0,HWFCG1, 32, 1, (unsigned char *)&rambufsize);
		t_read_mem(0,HWFCG2, 32, 1, (unsigned char *)&rambufaddr);

		t_read_mem(0,HWSID, 32, 1, (unsigned char *)&sectorsize);

		fileram = (*(uint32_t *)FILE_SIZE)/rambufsize;
		if((*(uint32_t *)FILE_SIZE)%rambufsize)
		{
			fileram++;
		}
		
		//for(i = 0; i < filenb;i++)
		{
			for(j = 0; j < fileram; j++)
			{

				gpio_set_cdc_led(led_state);
                                led_state = !led_state;
				//t_halt();
				//write buf addr
				writereg = rambufaddr;
				t_write_mem(0,HWBUFADDR, 32, 1, (unsigned char *)&writereg);	

		
				pwrite = (uint32_t *)(START_APP_ADDRESS + rambufsize*j);
				pread = (uint32_t *)READBACK_ADDR;
				t_write_mem(0,rambufaddr, 8, rambufsize, (unsigned char *)pwrite);
					
				//write word len
				writereg = rambufsize/4;			//编程一次写4个字节
				t_write_mem(0,HWBCR, 32, 1, (unsigned char *)&writereg);
				//write addr
				writereg = rambufsize*j;
				t_write_mem(0,HWBFR, 32, 1, (unsigned char *)&writereg);
				//write cmd
				writereg = CMD_PROGRA;
				t_write_mem(0,HWCMR, 32, 1, (unsigned char *)&writereg);
				//start to run
				writereg = CMD_RUN;
				t_write_mem(0,HWCSR, 32, 1, (unsigned char *)&writereg);	

				//t_go();

				//delay_us(10);
			
				//wait for down
				while(1)
				{
					t_read_mem(0,HWCSR, 32, 1, (unsigned char *)&readreg);
					if((readreg == CMD_DONW))
					{
						read_count = 0;
						break;
					}
					else 
					{
						read_count++;
					}	
				
					if(read_count > READ_TIME)
					{
						read_count = 0;
						return;
					}
					
				}			

			}

		}
		#endif
	}
#endif	


}
Пример #10
0
//--------------------------------------------------------------------------------
//
//    update_screen
//
//--------------------------------------------------------------------------------
void EmacsView::update_screen( int slow_update )
{
    t_update_begin();

#if !MEMMAP
    check_for_input = 999;
#endif
    if( screen_garbaged )
    {
        t_reset();
        screen_garbaged = 0;
        for( int n=0; n<=t_length; n++ )
        {
            t_phys_screen[n].releaseLine();
        }
    }

    if( current_line >= 0
    && t_desired_screen[ current_line ]->line_length <= t_width - columns_left )
        t_desired_screen[ current_line ]->line_length =
            (columns_left > 0 ?
                t_width - columns_left
            :
                t_width);
    current_line = -1;

    if( t_il_ov == MISSINGFEATURE )
        slow_update = 0;

    if( slow_update )
    {
        int n;
        for( n=1; n<=t_length; n++ )
        {
            if( t_desired_screen[n].isNull() )
                t_desired_screen[n] = t_phys_screen[n];
        }

        int c = 0;
        n = t_length;
        while( n >= 1 && c <= 2 )
        {
            if( t_phys_screen[n] != t_desired_screen[n]
            && !t_phys_screen[n].isNull()
            && t_desired_screen[n]->lineHash() != t_phys_screen[n]->lineHash()  )
                c++;
            n--;
        }
        if( c <= 2 )
            slow_update = 0;
        else
        {
#if !MEMMAP
            check_for_input = 1;    // baud_rate / 2400;
#endif
            executeInsertDelete();
        }
    }

    if( !slow_update )    // fast update
    {
        int n;
        for( n=1; n<=t_length; n++ )
            if( !t_desired_screen[n].isNull() )
            {
                updateLine( t_phys_screen[n], t_desired_screen[n], n );
                t_phys_screen[n] = t_desired_screen[n];
                t_desired_screen[n].releaseLine();
            }
    }

    if( input_pending == 0 )
        t_topos( curs_y, curs_x );

    t_update_end();
}
Пример #11
0
int main(int argc, char **argv)
{
    dkhash_table *tx, *t;
    unsigned int x;
    int ret, r2;
    struct test_data s;
    char *p1, *p2;
    char *strs[10];
    char tmp[32];

    t_set_colors(0);
    t_start("dkhash basic test");
    t = dkhash_create(512);

    p1 = strdup("a not-so secret value");
    dkhash_insert(t, "nisse", NULL, p1);
    ok_int(dkhash_num_entries_max(t), 1, "Added one entry, so that's max");
    ok_int(dkhash_num_entries_added(t), 1, "Added one entry, so one added");
    ok_int(dkhash_table_size(t), 512, "Table must be sized properly");
    ok_int(dkhash_collisions(t), 0, "One entry, so zero collisions");
    p2 = dkhash_get(t, "nisse", NULL);
    test(p1 == p2, "get should get what insert set");
    dkhash_insert(t, "kalle", "bananas", p1);
    p2 = dkhash_get(t, "kalle", "bezinga");
    test(p1 != p2, "we should never get the wrong key");
    ok_int(2, dkhash_num_entries(t), "should be 2 entries after 2 inserts");
    p2 = dkhash_remove(t, "kalle", "bezinga");
    ok_int(2, dkhash_num_entries(t), "should be 2 entries after 2 inserts and 1 failed remove");
    ok_int(0, dkhash_num_entries_removed(t), "should be 0 removed entries after failed remove");
    p2 = dkhash_remove(t, "kalle", "bananas");
    test(p1 == p2, "dkhash_remove() should return removed data");
    ok_int(dkhash_num_entries(t), 1, "should be 1 entries after 2 inserts and 1 successful remove");
    p2 = dkhash_remove(t, "nisse", NULL);
    test(p1 == p2, "dkhash_remove() should return removed data");
    ret = t_end();

    t_reset();
    /* lots of tests below, so we shut up while they're running */
    t_verbose = 0;

    t_start("dkhash_walk_data() test");
    memset(&s, 0, sizeof(s));
    /* first we set up the dkhash-tables */
    tx = dkhash_create(16);
    for (x = 0; x < ARRAY_SIZE(keys); x++) {
        dkhash_insert(tx, keys[x].k1, NULL, ddup(x, 0, 0));
        dkhash_insert(tx, keys[x].k2, NULL, ddup(x, 0, 0));
        dkhash_insert(tx, keys[x].k1, keys[x].k2, ddup(x, 0, 0));
        s.x += 3;
        ok_int(s.x, dkhash_num_entries(tx), "x table adding");
    }

    ok_int(s.x, dkhash_num_entries(tx), "x table done adding");

    for (x = 0; x < ARRAY_SIZE(keys); x++) {
        del.x = x;
        del.i = del.j = 0;

        ok_int(s.x, dkhash_num_entries(tx), "x table pre-delete");
        s.x -= 3;
        dkhash_walk_data(tx, del_matching);
        ok_int(s.x, dkhash_num_entries(tx), "x table post-delete");
    }

    test(0 == dkhash_num_entries(tx), "x table post all ops");
    test(0 == dkhash_check_table(tx), "x table consistency post all ops");
    dkhash_debug_table(tx, 0);
    r2 = t_end();
    ret = r2 ? r2 : ret;

    t_reset();
    for (x = 0; x < 10; x++) {
        sprintf(tmp, "string %d", x);
        strs[x] = strdup(tmp);
    }

    t_start("dkhash single bucket add remove forward");

    t = dkhash_create(1);
    for (x = 0; x < 10; x++) {
        dkhash_insert(t, strs[x], NULL, strs[x]);
    }
    for (x = 0; x < 10; x++) {
        p1 = strs[x];
        p2 = dkhash_remove(t, p1, NULL);
        test(p1 == p2, "remove should return a value");
    }
    r2 = t_end();
    ret = r2 ? r2 : ret;
    t_reset();

    t_start("dkhash single bucket add remove backward");

    t = dkhash_create(1);
    for (x = 0; x < 10; x++) {
        dkhash_insert(t, strs[x], NULL, strs[x]);
    }
    for (x = 9; x; x--) {
        p1 = strs[x];
        p2 = dkhash_remove(t, p1, NULL);
        test(p1 == p2, "remove should return a value");
    }

    dkhash_destroy(t);

    r2 = t_end();
    return r2 ? r2 : ret;
}