Commit 16d50f7d authored by John Ballance's avatar John Ballance
Browse files

Added 'CreateModeFile' instead of optional file name on ReadEDID now needs a...

Added 'CreateModeFile' instead of optional file name on ReadEDID now needs a file path for where to save the created mdf. It'll use the name in the EDID for the file name

Admin:
 tested in iMx6

Version 0.45. Tagged as 'ScrModes-0_45'
parent 97cb9b7c
No preview for this file type
No preview for this file type
/* (0.44) /* (0.45)
* *
* This file is automatically maintained by srccommit, do not edit manually. * This file is automatically maintained by srccommit, do not edit manually.
* Last processed by srccommit version: 1.1. * Last processed by srccommit version: 1.1.
* *
*/ */
#define Module_MajorVersion_CMHG 0.44 #define Module_MajorVersion_CMHG 0.45
#define Module_MinorVersion_CMHG #define Module_MinorVersion_CMHG
#define Module_Date_CMHG 14 Feb 2015 #define Module_Date_CMHG 16 Feb 2015
#define Module_MajorVersion "0.44" #define Module_MajorVersion "0.45"
#define Module_Version 44 #define Module_Version 45
#define Module_MinorVersion "" #define Module_MinorVersion ""
#define Module_Date "14 Feb 2015" #define Module_Date "16 Feb 2015"
#define Module_ApplicationDate "14-Feb-15" #define Module_ApplicationDate "16-Feb-15"
#define Module_ComponentName "ScrModes" #define Module_ComponentName "ScrModes"
#define Module_ComponentPath "castle/RiscOS/Sources/Video/UserI/ScrModes" #define Module_ComponentPath "castle/RiscOS/Sources/Video/UserI/ScrModes"
#define Module_FullVersion "0.44" #define Module_FullVersion "0.45"
#define Module_HelpVersion "0.44 (14 Feb 2015)" #define Module_HelpVersion "0.45 (16 Feb 2015)"
#define Module_LibraryVersionInfo "0:44" #define Module_LibraryVersionInfo "0:45"
...@@ -2097,6 +2097,7 @@ static void generate_mode_using_cvt_rb(double h_pixels, double v_lines, double i ...@@ -2097,6 +2097,7 @@ static void generate_mode_using_cvt_rb(double h_pixels, double v_lines, double i
/* Now populate the mode definition block */ /* Now populate the mode definition block */
mode_desc->definition.xres = (int)h_pixels; mode_desc->definition.xres = (int)h_pixels;
mode_desc->definition.yres = (int)v_lines; mode_desc->definition.yres = (int)v_lines;
mode_desc->frame_hz = (int)ip_freq_rqd;
mode_desc->definition.hpar[FR_SYNC] = h_sync; mode_desc->definition.hpar[FR_SYNC] = h_sync;
mode_desc->definition.hpar[FR_BPCH] = h_back_porch; mode_desc->definition.hpar[FR_BPCH] = h_back_porch;
mode_desc->definition.hpar[FR_BDR1] = (int) left_margin; mode_desc->definition.hpar[FR_BDR1] = (int) left_margin;
...@@ -2255,7 +2256,6 @@ static void dtd_block_to_modedesc(char* dtd_data, ModeDescriptionRef mode_desc) ...@@ -2255,7 +2256,6 @@ static void dtd_block_to_modedesc(char* dtd_data, ModeDescriptionRef mode_desc)
} }
sprintf(mode_desc->definition.name, "%d x %d", mode_desc->definition.xres, mode_desc->definition.yres); sprintf(mode_desc->definition.name, "%d x %d", mode_desc->definition.xres, mode_desc->definition.yres);
compute_modedescription(mode_desc);
#if DODEBUG #if DODEBUG
display_mode_parameters(mode_desc); display_mode_parameters(mode_desc);
...@@ -2279,9 +2279,10 @@ static int get_extd_type(EDIDBlockRef edidblockref, int block_no) ...@@ -2279,9 +2279,10 @@ static int get_extd_type(EDIDBlockRef edidblockref, int block_no)
} }
static _kernel_oserror *parseedid(char *ediddata, FILE *f) static _kernel_oserror *parseedid(char *ediddata, const char *file)
{ {
_kernel_oserror *res = NULL; _kernel_oserror *res = NULL;
FILE *f = NULL;
MonitorDescriptionRef new_monitor; MonitorDescriptionRef new_monitor;
ModeDescriptionRef new_preferred_mode = NULL; /* No preferred mode */ ModeDescriptionRef new_preferred_mode = NULL; /* No preferred mode */
EDIDBlockRef edidblockref = (EDIDBlockRef) ediddata; EDIDBlockRef edidblockref = (EDIDBlockRef) ediddata;
...@@ -2526,9 +2527,34 @@ static _kernel_oserror *parseedid(char *ediddata, FILE *f) ...@@ -2526,9 +2527,34 @@ static _kernel_oserror *parseedid(char *ediddata, FILE *f)
sort_modelist(&new_monitor->modelist); sort_modelist(&new_monitor->modelist);
} }
#if DODEBUG #if DODEBUG
printf("Modes sorted\n"); printf("Modes sorted\n");
#endif #endif
if(file) {
/* open file for new mode file if required */
/* file is a string terminated in 0x0D */
char *ptr,*fbuf;
int length=strcspn(file,"\r");
res = _swix(OS_Module, _IN(0) | _IN(3) | _OUT(2), 6, length+24, &fbuf);
/* get around the CR terminated file name */
if(!res) {
fbuf[length] = 0;
while((--length)>=0){
fbuf[length] = file[length];
}
strcat (fbuf,".");
strncat (fbuf,new_monitor->name,22);
while(ptr=strpbrk(fbuf," "),ptr) {
*ptr='_';
}
f=fopen(fbuf,"w");
res = _swix(OS_Module, _IN(0) |_IN(2) , 7, fbuf);
}
}
if(f) { if(f) {
fprintf(f,"# Monitor description file for %s\n",new_monitor->name); fprintf(f,"# Monitor description file for %s\n",new_monitor->name);
fprintf(f,"# Created by ScrModes %s\n",Module_VersionString); fprintf(f,"# Created by ScrModes %s\n",Module_VersionString);
...@@ -2596,6 +2622,7 @@ static _kernel_oserror *parseedid(char *ediddata, FILE *f) ...@@ -2596,6 +2622,7 @@ static _kernel_oserror *parseedid(char *ediddata, FILE *f)
ediddata[i+12],ediddata[i+13],ediddata[i+14],ediddata[i+15]); ediddata[i+12],ediddata[i+13],ediddata[i+14],ediddata[i+15]);
} }
fprintf(f,"#\n#End\n"); fprintf(f,"#\n#End\n");
fclose (f);
} }
else else
{ {
...@@ -2757,17 +2784,10 @@ static _kernel_oserror *readedidblock (int displaynum, EDIDBlockRef edidblock, i ...@@ -2757,17 +2784,10 @@ static _kernel_oserror *readedidblock (int displaynum, EDIDBlockRef edidblock, i
static _kernel_oserror *readedid (int displaynum, const char *file) static _kernel_oserror *readedid (int displaynum, const char *file)
{ {
_kernel_oserror *res; _kernel_oserror *res;
FILE *f = NULL;
EDIDBlockRef edidblock = (EDIDBlockRef) malloc(128); EDIDBlockRef edidblock = (EDIDBlockRef) malloc(128);
if (edidblock == NULL) { if (edidblock == NULL) {
return error (ERR_NOSPACE, 0, 0, 0); return error (ERR_NOSPACE, 0, 0, 0);
} }
if (file)
{
f = fopen (file, "w");
}
debug printf ("ReadEDID called\n"); debug printf ("ReadEDID called\n");
res = readedidblock (displaynum, edidblock, 0, 1); res = readedidblock (displaynum, edidblock, 0, 1);
...@@ -2810,15 +2830,10 @@ static _kernel_oserror *readedid (int displaynum, const char *file) ...@@ -2810,15 +2830,10 @@ static _kernel_oserror *readedid (int displaynum, const char *file)
EDIDEnabled = 1; EDIDEnabled = 1;
/* ERR_NOMODES expects a filename, give it something vaguely sensible */ /* ERR_NOMODES expects a filename, give it something vaguely sensible */
thefilename = "(EDID)"; thefilename = "(EDID)";
res = parseedid(ediddata,f); res = parseedid(ediddata,file);
}
if(f) {
fclose(f);
} }
free(edidblock); free(edidblock);
return res; return res;
} }
...@@ -3623,6 +3638,9 @@ _kernel_oserror *ScreenModes_cmdhandler (const char *arg_string, int argc, int c ...@@ -3623,6 +3638,9 @@ _kernel_oserror *ScreenModes_cmdhandler (const char *arg_string, int argc, int c
result = loadmodefile (arg_string); result = loadmodefile (arg_string);
break; break;
case CMD_ReadEDID: case CMD_ReadEDID:
result = readedid (current_graphicsv_driver(),NULL);
break;
case CMD_CreateModeFile:
result = readedid (current_graphicsv_driver(),arg_string); result = readedid (current_graphicsv_driver(),arg_string);
break; break;
default: default:
......
...@@ -43,9 +43,12 @@ command-keyword-table: ScreenModes_cmdhandler ...@@ -43,9 +43,12 @@ command-keyword-table: ScreenModes_cmdhandler
LoadModeFile(min-args:1, max-args: 1, international:, LoadModeFile(min-args:1, max-args: 1, international:,
invalid-syntax: "SSMDLMF", invalid-syntax: "SSMDLMF",
help-text: "HSMDLMF"), help-text: "HSMDLMF"),
ReadEDID(min-args:0,max-args:1, international:, ReadEDID(min-args:0,max-args:0, international:,
invalid-syntax: "SSMDRED", invalid-syntax: "SSMDRED",
help-text: "HSMDRED") help-text: "HSMDRED"),
CreateModeFile(min-args:1,max-args:1, international:,
invalid-syntax: "SSMDCMF",
help-text: "HSMDCMF")
swi-chunk-base-number: 0x487C0 swi-chunk-base-number: 0x487C0
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment