Changeset b3eeae5 in mainline for uspace/app/disp/disp.c
- Timestamp:
- 2023-01-15T09:24:50Z (2 years ago)
- Branches:
- master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 46a47c0
- Parents:
- 46b02cb
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/disp/disp.c
r46b02cb rb3eeae5 54 54 printf(" %s create-seat <name>\n", NAME); 55 55 printf(" %s delete-seat <name>\n", NAME); 56 printf(" %s assign-dev <device> <seat>\n", NAME); 57 printf(" %s unassign-dev <device>\n", NAME); 56 58 } 57 59 … … 273 275 } 274 276 277 /** Assign device subcommand. 278 * 279 * @param dcfg_svc Display configuration service name 280 * @param argc Number of arguments 281 * @param argv Arguments 282 * @return EOK on success or an erro code 283 */ 284 static errno_t dev_assign(const char *dcfg_svc, int argc, char *argv[]) 285 { 286 dispcfg_t *dispcfg; 287 char *dev_name; 288 service_id_t svc_id; 289 char *seat_name; 290 sysarg_t seat_id; 291 errno_t rc; 292 293 if (argc < 2) { 294 printf(NAME ": Missing arguments.\n"); 295 print_syntax(); 296 return EINVAL; 297 } 298 299 if (argc > 2) { 300 printf(NAME ": Too many arguments.\n"); 301 print_syntax(); 302 return EINVAL; 303 } 304 305 dev_name = argv[0]; 306 seat_name = argv[1]; 307 308 rc = loc_service_get_id(dev_name, &svc_id, 0); 309 if (rc != EOK) { 310 printf(NAME ": Device service '%s' not found.\n", 311 dev_name); 312 return ENOENT; 313 } 314 315 rc = dispcfg_open(dcfg_svc, NULL, NULL, &dispcfg); 316 if (rc != EOK) { 317 printf(NAME ": Failed connecting to display configuration " 318 "service: %s.\n", str_error(rc)); 319 return rc; 320 } 321 322 rc = seat_find_by_name(dispcfg, seat_name, &seat_id); 323 if (rc != EOK) { 324 printf(NAME ": Seat '%s' not found.\n", seat_name); 325 dispcfg_close(dispcfg); 326 return ENOENT; 327 } 328 329 rc = dispcfg_dev_assign(dispcfg, svc_id, seat_id); 330 if (rc != EOK) { 331 printf(NAME ": Failed assigning device '%s' to seat '%s': " 332 "%s\n", dev_name, seat_name, str_error(rc)); 333 dispcfg_close(dispcfg); 334 return EIO; 335 } 336 337 dispcfg_close(dispcfg); 338 return EOK; 339 } 340 341 /** Unassign device subcommand. 342 * 343 * @param dcfg_svc Display configuration service name 344 * @param argc Number of arguments 345 * @param argv Arguments 346 * @return EOK on success or an erro code 347 */ 348 static errno_t dev_unassign(const char *dcfg_svc, int argc, char *argv[]) 349 { 350 dispcfg_t *dispcfg; 351 char *dev_name; 352 service_id_t svc_id; 353 errno_t rc; 354 355 if (argc < 1) { 356 printf(NAME ": Missing arguments.\n"); 357 print_syntax(); 358 return EINVAL; 359 } 360 361 if (argc > 1) { 362 printf(NAME ": Too many arguments.\n"); 363 print_syntax(); 364 return EINVAL; 365 } 366 367 dev_name = argv[0]; 368 369 rc = loc_service_get_id(dev_name, &svc_id, 0); 370 if (rc != EOK) { 371 printf(NAME ": Device service '%s' not found.\n", 372 dev_name); 373 return ENOENT; 374 } 375 376 rc = dispcfg_open(dcfg_svc, NULL, NULL, &dispcfg); 377 if (rc != EOK) { 378 printf(NAME ": Failed connecting to display configuration " 379 "service: %s.\n", str_error(rc)); 380 return rc; 381 } 382 383 rc = dispcfg_dev_unassign(dispcfg, svc_id); 384 if (rc != EOK) { 385 printf(NAME ": Failed unassigning device '%s': %s\n", 386 dev_name, str_error(rc)); 387 dispcfg_close(dispcfg); 388 return EIO; 389 } 390 391 dispcfg_close(dispcfg); 392 return EOK; 393 } 394 275 395 int main(int argc, char *argv[]) 276 396 { … … 295 415 if (rc != EOK) 296 416 return 1; 417 } else if (str_cmp(argv[1], "assign-dev") == 0) { 418 rc = dev_assign(dispcfg_svc, argc - 2, argv + 2); 419 if (rc != EOK) 420 return 1; 421 } else if (str_cmp(argv[1], "unassign-dev") == 0) { 422 rc = dev_unassign(dispcfg_svc, argc - 2, argv + 2); 423 if (rc != EOK) 424 return 1; 297 425 } else { 298 426 printf(NAME ": Unknown command '%s'.\n", argv[1]);
Note:
See TracChangeset
for help on using the changeset viewer.