Changeset 0ca15eb7 in mainline
- Timestamp:
- 2014-07-09T10:53:33Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7d276395
- Parents:
- 005ac3c
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/compositor/compositor.c
r005ac3c r0ca15eb7 55 55 #include <async.h> 56 56 #include <loc.h> 57 #include <devman.h>58 57 59 58 #include <event.h> … … 1149 1148 } 1150 1149 1151 static async_sess_t *vsl_connect( const char *svc)1150 static async_sess_t *vsl_connect(service_id_t sid, const char *svc) 1152 1151 { 1153 1152 int rc; 1154 1153 async_sess_t *sess; 1155 service_id_t dsid; 1156 devman_handle_t handle; 1157 1158 rc = loc_service_get_id(svc, &dsid, 0); 1154 1155 sess = loc_service_connect(EXCHANGE_SERIALIZE, sid, 0); 1156 if (sess == NULL) { 1157 printf("%s: Unable to connect to visualizer %s\n", NAME, svc); 1158 return NULL; 1159 } 1160 1161 rc = graph_dev_connect(sess); 1159 1162 if (rc != EOK) { 1163 printf("%s: Failed initializing visualiser %s\n", NAME, svc); 1160 1164 return NULL; 1161 1165 } 1162 1166 1163 rc = devman_fun_sid_to_handle(dsid, &handle);1164 if (rc == EOK) {1165 sess = devman_device_connect(EXCHANGE_SERIALIZE, handle, 0);1166 if (sess == NULL) {1167 printf("%s: Unable to connect to visualizer %s\n", NAME, svc);1168 return NULL;1169 }1170 rc = graph_dev_connect(sess);1171 if (rc != EOK) {1172 return NULL;1173 }1174 } else if (rc == ENOENT) {1175 sess = loc_service_connect(EXCHANGE_SERIALIZE, dsid, 0);1176 if (sess == NULL) {1177 printf("%s: Unable to connect to visualizer %s\n", NAME, svc);1178 return NULL;1179 }1180 } else {1181 return NULL;1182 }1183 1184 1167 async_exch_t *exch = async_exchange_begin(sess); 1185 rc = async_connect_to_me(exch, dsid, 0, 0, vsl_notifications, NULL);1168 rc = async_connect_to_me(exch, sid, 0, 0, vsl_notifications, NULL); 1186 1169 async_exchange_end(exch); 1187 1170 … … 1196 1179 } 1197 1180 1198 static viewport_t *viewport_create( const char *vsl_name)1181 static viewport_t *viewport_create(service_id_t sid) 1199 1182 { 1200 1183 int rc; 1201 1202 viewport_t *vp = (viewport_t *) malloc(sizeof(viewport_t)); 1203 if (!vp) { 1204 return NULL; 1205 } 1184 char *vsl_name = NULL; 1185 viewport_t *vp = NULL; 1186 bool claimed = false; 1187 1188 rc = loc_service_get_name(sid, &vsl_name); 1189 if (rc != EOK) 1190 goto error; 1191 1192 vp = (viewport_t *) calloc(1, sizeof(viewport_t)); 1193 if (!vp) 1194 goto error; 1206 1195 1207 1196 link_initialize(&vp->link); … … 1210 1199 1211 1200 /* Establish output bidirectional connection. */ 1212 vp->sess = vsl_connect(vsl_name); 1213 rc = loc_service_get_id(vsl_name, &vp->dsid, 0); 1214 if (vp->sess == NULL || rc != EOK) { 1215 free(vp); 1216 return NULL; 1217 } 1201 vp->dsid = sid; 1202 vp->sess = vsl_connect(sid, vsl_name); 1203 if (vp->sess == NULL) 1204 goto error; 1218 1205 1219 1206 /* Claim the given visualizer. */ 1220 1207 rc = visualizer_claim(vp->sess, 0); 1221 1208 if (rc != EOK) { 1222 async_hangup(vp->sess);1223 free(vp);1224 1209 printf("%s: Unable to claim visualizer (%s)\n", NAME, str_error(rc)); 1225 return NULL; 1226 } 1210 goto error; 1211 } 1212 1213 claimed = true; 1227 1214 1228 1215 /* Retrieve the default mode. */ 1229 1216 rc = visualizer_get_default_mode(vp->sess, &vp->mode); 1230 1217 if (rc != EOK) { 1231 visualizer_yield(vp->sess);1232 async_hangup(vp->sess);1233 free(vp);1234 1218 printf("%s: Unable to retrieve mode (%s)\n", NAME, str_error(rc)); 1235 return NULL;1219 goto error; 1236 1220 } 1237 1221 … … 1240 1224 NULL, SURFACE_FLAG_SHARED); 1241 1225 if (vp->surface == NULL) { 1242 visualizer_yield(vp->sess);1243 async_hangup(vp->sess);1244 free(vp);1245 1226 printf("%s: Unable to create surface (%s)\n", NAME, str_error(rc)); 1246 return NULL;1227 goto error; 1247 1228 } 1248 1229 … … 1251 1232 vp->mode.index, vp->mode.version, surface_direct_access(vp->surface)); 1252 1233 if (rc != EOK) { 1234 printf("%s: Unable to set mode (%s)\n", NAME, str_error(rc)); 1235 goto error; 1236 } 1237 1238 return vp; 1239 error: 1240 if (claimed) 1253 1241 visualizer_yield(vp->sess); 1254 surface_destroy(vp->surface);1242 if (vp->sess != NULL) 1255 1243 async_hangup(vp->sess); 1256 free(vp); 1257 printf("%s: Unable to set mode (%s)\n", NAME, str_error(rc)); 1258 return NULL; 1259 } 1260 1261 return vp; 1244 free(vp); 1245 free(vsl_name); 1246 return NULL; 1262 1247 } 1263 1248 … … 2190 2175 continue; 2191 2176 2192 char *svc_name; 2193 rc = loc_service_get_name(svcs[i], &svc_name); 2194 if (rc == EOK) { 2195 viewport_t *vp = viewport_create(svc_name); 2196 if (vp != NULL) { 2197 list_append(&vp->link, &viewport_list); 2198 } 2199 } 2177 viewport_t *vp = viewport_create(svcs[i]); 2178 if (vp != NULL) 2179 list_append(&vp->link, &viewport_list); 2200 2180 } 2201 2181 fibril_mutex_unlock(&viewport_list_mtx);
Note:
See TracChangeset
for help on using the changeset viewer.