Пример #1
0
/**
 * Handles a request for a task.
 *
 */
int handle(Task *task, Request *req) {
    // Handle Interrupts.
    if (req == 0) {
        int data;
        int event = process_interrupt(&data); 
        kevent(event, data);
        make_ready(task);
        return 0;
    }


    // Handle System Calls.
    switch (req->request) {
    case MY_TID:
        kmytid(task);
        break;
    case CREATE:
        kcreate(task, (int)req->args[0] /* priority */, req->args[1] /* code */, (int)req->args[2] /* args */);
        break;
    case MY_PARENT_TID:
        kmy_parent_tid(task);
        break;
    case PASS:
        make_ready(task);
        break;
    case EXIT:
        kexit(task);
        break;
    case SEND:
        ksend(task, (int)req->args[0], (char *)req->args[1], (int)req->args[2], (char *)req->args[3], (int)req->args[4]);
        break;
    case RECEIVE:
        krecieve(task, (int *)req->args[0], (char *)req->args[1], (int)req->args[2]);
        break;
    case REPLY:
        kreply(task, (int)req->args[0], (char *)req->args[1], (int)req->args[2]);
        break;
    case AWAIT_EVENT:
        kawait(task, (int)req->args[0]);
        break;
    case WAIT_TID:
        kwait_tid(task, (int)req->args[0]);
        break;
    case SHUTDOWN:
        return -1;
    default:
        bwprintf(COM2, "Undefined request number %u\n", req->request);
        break;
    }

    return 0;
}
Пример #2
0
int kcreate_test() {
    reset();

    kcreate(t2, MEDIUM, 0, 0);
    vassert(t2->state == READY);
    vassert(task_get_return_value(t2) > t2->tid);

    Task *child = task_get(task_get_return_value(t2));
    vassert(child != 0);
    vassert(child->state == READY);

    return 0;
}
Пример #3
0
/**
 * Adds a specific file to the card.sd image
 *
 * Adds the file at the path specified by filename to the SD card
 * image indicated by dst_filename
 *
 * @param 
 *
 * char *src_file_name - holds the path to the file to add to the SD
 * card image
 *
 * @param
 *
 * char *dst_file_name - holds the path to the SD card image to
 * add the file to
 */
void addFile(const char *src_file_name, const char *dst_file_name)
{
	FILE *f = fopen(src_file_name, "r");
	assert(f);

	// FIXME: should all be const char*
	kclose(kcreate((char*) dst_file_name, 'r', 0));
	int fd = kopen((char*) dst_file_name, 'w');

	char buf[BUF_SIZE];
	int nread;

	while ((nread = fread(buf, 1, BUF_SIZE, f)) > 0)
	{
		kwrite(fd, buf, nread);
		//printf("\t\t%d bytes\n", nread);
	}

	kclose(fd);
	fclose(f);
}