Subversion Repositories HelenOS-historic

Rev

Rev 955 | Rev 965 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 955 Rev 959
Line 103... Line 103...
103
    spinlock_lock(&box->lock);
103
    spinlock_lock(&box->lock);
104
    list_remove(&phone->list);
104
    list_remove(&phone->list);
105
    spinlock_unlock(&box->lock);
105
    spinlock_unlock(&box->lock);
106
}
106
}
107
 
107
 
-
 
108
/** Helper function to facilitate synchronous calls */
-
 
109
void ipc_call_sync(phone_t *phone, call_t *request)
-
 
110
{
-
 
111
    answerbox_t sync_box;
-
 
112
 
-
 
113
    ipc_answerbox_init(&sync_box);
-
 
114
 
-
 
115
    /* We will receive data on special box */
-
 
116
    request->callerbox = &sync_box;
-
 
117
 
-
 
118
    ipc_call(phone, request);
-
 
119
    ipc_wait_for_call(&sync_box, 0);
-
 
120
}
108
 
121
 
109
/** Send a request using phone to answerbox
122
/** Send a asynchronous request using phone to answerbox
110
 *
123
 *
111
 * @param phone Phone connected to answerbox
124
 * @param phone Phone connected to answerbox
112
 * @param request Request to be sent
125
 * @param request Request to be sent
113
 */
126
 */
114
void ipc_call(phone_t *phone, call_t *request)
127
void ipc_call(phone_t *phone, call_t *request)
Line 197... Line 210...
197
    printf("Phone company started.\n");
210
    printf("Phone company started.\n");
198
    while (1) {
211
    while (1) {
199
        call = ipc_wait_for_call(&TASK->answerbox, 0);
212
        call = ipc_wait_for_call(&TASK->answerbox, 0);
200
        printf("Received phone call - %P %P\n",
213
        printf("Received phone call - %P %P\n",
201
               call->data[0], call->data[1]);
214
               call->data[0], call->data[1]);
-
 
215
        call->data[0] = 0xbabaaaee;;
-
 
216
        call->data[1] = 0xaaaaeeee;
202
        ipc_answer(&TASK->answerbox, call);
217
        ipc_answer(&TASK->answerbox, call);
203
        printf("Call answered.\n");
218
        printf("Call answered.\n");
204
    }
219
    }
205
}
220
}
206
 
221