/** * 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; }
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; }
/** * 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); }