/* * Overlayswap userspace utility * * Copyright (C) 2010 Texas Instruments * * Author: David Anders * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include #include #include #include FILE *fp_display0_enb; FILE *fp_display1_enb; FILE *fp_overlay0_enb; FILE *fp_overlay0_man; void switch_to_hdmi(void) { char set_value[5]; rewind(fp_display1_enb); strcpy(set_value,"0"); fwrite(&set_value, sizeof(char), 1, fp_display1_enb); rewind(fp_overlay0_enb); strcpy(set_value,"0"); fwrite(&set_value, sizeof(char), 1, fp_overlay0_enb); rewind(fp_overlay0_man); strcpy(set_value,"tv"); fwrite(&set_value, sizeof(char), 2, fp_overlay0_man); rewind(fp_overlay0_enb); strcpy(set_value,"1"); fwrite(&set_value, sizeof(char), 1, fp_overlay0_enb); rewind(fp_display0_enb); strcpy(set_value,"1"); fwrite(&set_value, sizeof(char), 1, fp_display0_enb); } void switch_to_2lcd(void) { char set_value[5]; rewind(fp_display0_enb); strcpy(set_value,"0"); fwrite(&set_value, sizeof(char), 1, fp_display0_enb); rewind(fp_overlay0_enb); strcpy(set_value,"0"); fwrite(&set_value, sizeof(char), 1, fp_overlay0_enb); rewind(fp_overlay0_man); strcpy(set_value,"2lcd"); fwrite(&set_value, sizeof(char), 4, fp_overlay0_man); rewind(fp_overlay0_enb); strcpy(set_value,"1"); fwrite(&set_value, sizeof(char), 1, fp_overlay0_enb); rewind(fp_display1_enb); strcpy(set_value,"1"); fwrite(&set_value, sizeof(char), 1, fp_display1_enb); } int main(int argc, char** argv) { //create a variable to store whether we are sending a '1' or a '0' char set_value[6]; //Integer to keep track of whether we want on or off int toggle = 0; int retval = 0; if (argc == 2){ strcpy(set_value,argv[1]); } else { if ((fp_display0_enb = fopen("/sys/devices/platform/omapdss/display0/enabled", "rb+")) == NULL) { printf("Cannot open display0-enb file.\n"); goto fail; } rewind(fp_display0_enb); fread(&set_value, sizeof(char), 1, fp_display0_enb); if (set_value[0] == '1') retval=1; else retval=0; goto fail1; } if ((fp_display0_enb = fopen("/sys/devices/platform/omapdss/display0/enabled", "rb+")) == NULL) { printf("Cannot open display0-enb file.\n"); goto fail; } if ((fp_display1_enb = fopen("/sys/devices/platform/omapdss/display1/enabled", "rb+")) == NULL) { printf("Cannot open display1-enb file.\n"); goto fail1; } if ((fp_overlay0_enb = fopen("/sys/devices/platform/omapdss/overlay0/enabled", "rb+")) == NULL) { printf("Cannot open overlay0-enb file.\n"); goto fail2; } if ((fp_overlay0_man = fopen("/sys/devices/platform/omapdss/overlay0/manager", "rb+")) == NULL) { printf("Cannot open overlay0-man file.\n"); goto fail3; } if (!strcmp(set_value,"tv")){ switch_to_hdmi(); retval=1; } else if (!strcmp(set_value,"2lcd")){ switch_to_2lcd(); retval=0; } else printf("unknown overlay!\n"); fclose(fp_overlay0_man); fail3: fclose(fp_overlay0_enb); fail2: fclose(fp_display1_enb); fail1: fclose(fp_display0_enb); fail: return retval; }