Rev 2401 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2401 | Rev 2403 | ||
---|---|---|---|
Line 64... | Line 64... | ||
64 | static int new_consument_map(void); |
64 | static int new_consument_map(void); |
65 | 65 | ||
66 | static void fs_connection(ipc_callid_t iid, ipc_call_t *icall) |
66 | static void fs_connection(ipc_callid_t iid, ipc_call_t *icall) |
67 | { |
67 | { |
68 | 68 | ||
69 | int result; |
69 | int result = 0; |
- | 70 | ipcarg_t arg = 0; |
|
70 | 71 | ||
71 | ipc_answer_fast(iid, 0, 0, 0); |
72 | ipc_answer_fast(iid, 0, 0, 0); |
72 | 73 | ||
73 | while (1) |
74 | while (1) |
74 | { |
75 | { |
75 | prepare_message(); |
76 | prepare_message(); |
76 | 77 | ||
- | 78 | switch (fs_call) |
|
- | 79 | { |
|
77 | if (fs_call == IPC_M_PHONE_HUNGUP) { |
80 | case IPC_M_PHONE_HUNGUP: |
78 | ipc_answer_fast(callid, 0,0,0); |
81 | ipc_answer_fast(callid, 0,0,0); |
79 | return; |
82 | return; |
80 | } |
- | |
81 | 83 | ||
82 | if (fs_call == FS_NEW_CONSUMER) { |
84 | case FS_NEW_CONSUMER: |
83 | if (!new_consument) { |
85 | if (!new_consument) { |
84 | ipc_answer_fast(callid, FS_ECONNECT, 0, 0); |
- | |
85 | } |
- | |
86 | else { |
- | |
87 | result = new_consument_map(); |
86 | result = FS_ECONNECT; |
88 | ipc_answer_fast(callid, result, 0, 0); |
- | |
89 | - | ||
90 | if (!result) { |
- | |
91 | new_consument = FALSE; |
- | |
92 | } |
87 | } |
93 | } |
88 | else { |
- | 89 | result = new_consument_map(); |
|
94 | continue; |
90 | if (!result) { |
- | 91 | new_consument = FALSE; |
|
- | 92 | } |
|
95 | } |
93 | } |
- | 94 | break; |
|
96 | 95 | ||
97 | if (fs_call == IPC_M_AS_AREA_SEND) { |
96 | case IPC_M_AS_AREA_SEND: |
98 | if (!new_consument) |
97 | if (!new_consument) |
99 | ipc_answer_fast(callid, FS_ECONNECT, 0, 0); |
98 | result = FS_ECONNECT; |
100 | else { |
99 | else { |
- | 100 | result = 0; |
|
101 | ipc_answer_fast(callid, 0, (uintptr_t)fp->buffer, 0); |
101 | arg = (uintptr_t)fp->buffer; |
102 | fp = &fproc[new_consument]; |
102 | fp = &fproc[new_consument]; |
103 | fp->connected = TRUE; |
103 | fp->connected = TRUE; |
104 | new_consument = FALSE; |
104 | new_consument = FALSE; |
105 | } |
105 | } |
106 | continue; |
106 | break; |
107 | } |
- | |
108 | 107 | ||
109 | if (fs_call == FS_DROP_CONSUMER) { |
108 | case FS_DROP_CONSUMER: |
110 | fproc->connected = FALSE; |
109 | fproc->connected = FALSE; |
111 | fproc->buffer = NULL; |
110 | fproc->buffer = NULL; |
- | 111 | result = 0; |
|
- | 112 | break; |
|
- | 113 | ||
- | 114 | default: |
|
- | 115 | if (check_con < 0) { |
|
- | 116 | result = err_code; |
|
- | 117 | check_con = TRUE; |
|
- | 118 | break; |
|
- | 119 | } |
|
112 | ipc_answer_fast(callid, 0, 0, 0); |
120 | if (FS_IN_RANGE(fs_call)) { |
- | 121 | result = call_vector[fs_call-FS_BASE](); |
|
- | 122 | } |
|
- | 123 | else { |
|
- | 124 | result = FS_EBADCALL; |
|
113 | 125 | } |
|
114 | continue; |
126 | break; |
- | 127 | ||
115 | } |
128 | } |
116 | 129 | ||
117 | if (check_con < 0) { |
- | |
118 | ipc_answer_fast(callid, err_code, 0, 0); |
130 | ipc_answer_fast(callid, result, arg, 0); |
119 | check_con = TRUE; |
- | |
120 | continue; |
131 | arg = 0; |
121 | } |
- | |
122 | - | ||
123 | if (FS_IN_RANGE(fs_call)) { |
- | |
124 | result = call_vector[fs_call-FS_BASE](); |
- | |
125 | } |
- | |
126 | else { |
- | |
127 | result = FS_EBADCALL; |
- | |
128 | } |
- | |
129 | - | ||
130 | ipc_answer_fast(callid, result, 0, 0); |
- | |
131 | } |
132 | } |
132 | } |
133 | } |
133 | 134 | ||
134 | /* Extracts parameters from message and prepare them for later usage. */ |
135 | /* Extracts parameters from message and prepare them for later usage. */ |
135 | void prepare_message(void) |
136 | void prepare_message(void) |
136 | { |
137 | { |
137 | 138 | ||
138 | int shift, id_task; |
139 | int shift, id_task; |
- | 140 | ||
139 | 141 | ||
140 | callid = async_get_call(&m_input); |
142 | callid = async_get_call(&m_input); |
141 | fs_call = IPC_GET_METHOD(m_input); |
143 | fs_call = IPC_GET_METHOD(m_input); |
142 | 144 | ||
143 | if (fs_call == IPC_M_AS_AREA_SEND) { |
145 | if (fs_call == IPC_M_AS_AREA_SEND) { |
144 | if (!new_consument) { |
146 | if (!new_consument) { |