Change up config lookup and add documentation for it
This commit is contained in:
parent
02abe20fa3
commit
4fb0a5b133
34
README.md
34
README.md
|
@ -14,3 +14,37 @@ $ sudo ninja install
|
||||||
# Developing
|
# Developing
|
||||||
|
|
||||||
See the mailing list and issue tracker on https://sr.ht/~martijnbraam/Megapixels/
|
See the mailing list and issue tracker on https://sr.ht/~martijnbraam/Megapixels/
|
||||||
|
|
||||||
|
# Config
|
||||||
|
|
||||||
|
Megapixels checks multiple locations for it's configuration file and uses the first one it finds.
|
||||||
|
As first step it will get the first compatible name in the device tree, in the case of a PinePhone
|
||||||
|
this might be "pine64,pinephone-1.2". Then that dtname will be used as the filename in the search
|
||||||
|
path in this order:
|
||||||
|
|
||||||
|
* $XDG_CONFIG_DIR/megapixels/config/$dtname.ini
|
||||||
|
* ~/.config/megapixels/config/$dtname.ini
|
||||||
|
* /etc/megapixels/config/$dtname.ini
|
||||||
|
* /usr/share/megapixels/config/$dtname.ini
|
||||||
|
|
||||||
|
The files in /usr/share/megapixels should be the config files distributed in this repository. The other
|
||||||
|
locations allow the user or distribution to override config.
|
||||||
|
|
||||||
|
## Config file format
|
||||||
|
|
||||||
|
Configuration files are INI format files.
|
||||||
|
|
||||||
|
### [device]
|
||||||
|
|
||||||
|
This provides global info, currently only the `csi` key exists, telling megapixels which device in the
|
||||||
|
media-ctl tree is the interface to the kernel. This should provide the /dev/video* node.
|
||||||
|
|
||||||
|
### [rear] and [front]
|
||||||
|
|
||||||
|
These are the sections describing the sensors.
|
||||||
|
|
||||||
|
* `driver=ov5640` the name of the media node that provides the sensor and it's /dev/v4l-subdev* node.
|
||||||
|
* `width=640` and `height=480` the resolution to use for the sensor
|
||||||
|
* `rate=15` the refresh rate in fps to use for the sensor
|
||||||
|
* `fmt=BGGR8` sets the pixel and bus formats used when capturing from the sensor, only BGGR8 is fully supported
|
||||||
|
* `rotate=90` the rotation angle to make the sensor match the screen
|
||||||
|
|
34
main.c
34
main.c
|
@ -12,7 +12,9 @@
|
||||||
#include <linux/kdev_t.h>
|
#include <linux/kdev_t.h>
|
||||||
#include <sys/sysmacros.h>
|
#include <sys/sysmacros.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
|
#include <wordexp.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
#include "config.h"
|
||||||
#include "ini.h"
|
#include "ini.h"
|
||||||
#include "bayer.h"
|
#include "bayer.h"
|
||||||
#include "quickdebayer.h"
|
#include "quickdebayer.h"
|
||||||
|
@ -847,17 +849,45 @@ int
|
||||||
find_config(char *conffile)
|
find_config(char *conffile)
|
||||||
{
|
{
|
||||||
char buf[512];
|
char buf[512];
|
||||||
|
char *xdg_config_home;
|
||||||
|
wordexp_t exp_result;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
// Resolve XDG stuff
|
||||||
|
if ((xdg_config_home = getenv("XDG_CONFIG_HOME")) == NULL) {
|
||||||
|
xdg_config_home = "~/.config";
|
||||||
|
}
|
||||||
|
wordexp(xdg_config_home, &exp_result, 0);
|
||||||
|
xdg_config_home = strdup(exp_result.we_wordv[0]);
|
||||||
|
wordfree(&exp_result);
|
||||||
|
|
||||||
if(access("/proc/device-tree/compatible", F_OK) != -1) {
|
if(access("/proc/device-tree/compatible", F_OK) != -1) {
|
||||||
|
// Reads to compatible string of the current device tree, looks like:
|
||||||
|
// pine64,pinephone-1.2\0allwinner,sun50i-a64\0
|
||||||
fp = fopen("/proc/device-tree/compatible", "r");
|
fp = fopen("/proc/device-tree/compatible", "r");
|
||||||
fgets(buf, 512, fp);
|
fgets(buf, 512, fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
sprintf(conffile, "/usr/share/megapixels/config/%s.ini", buf);
|
|
||||||
|
// Check for a config file in XDG_CONFIG_HOME
|
||||||
|
sprintf(conffile, "%s/megapixels/config/%s.ini", xdg_config_home, buf);
|
||||||
if(access(conffile, F_OK) != -1) {
|
if(access(conffile, F_OK) != -1) {
|
||||||
printf("Found config file at %s\n", conffile);
|
printf("Found config file at %s\n", conffile);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check user overridden /etc/megapixels/config/$dt.ini
|
||||||
|
sprintf(conffile, "%s/megapixels/config/%s.ini", SYSCONFDIR, buf);
|
||||||
|
if(access(conffile, F_OK) != -1) {
|
||||||
|
printf("Found config file at %s\n", conffile);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// Check packaged /usr/share/megapixels/config/$dt.ini
|
||||||
|
sprintf(conffile, "%s/megapixels/config/%s.ini", DATADIR, buf);
|
||||||
|
if(access(conffile, F_OK) != -1) {
|
||||||
|
printf("Found config file at %s\n", conffile);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// Check config/%dt.ini in the current working directory
|
||||||
sprintf(conffile, "config/%s.ini", buf);
|
sprintf(conffile, "config/%s.ini", buf);
|
||||||
if(access(conffile, F_OK) != -1) {
|
if(access(conffile, F_OK) != -1) {
|
||||||
printf("Found config file at %s\n", conffile);
|
printf("Found config file at %s\n", conffile);
|
||||||
|
@ -867,6 +897,8 @@ find_config(char *conffile)
|
||||||
} else {
|
} else {
|
||||||
printf("Could not read device name from device tree\n");
|
printf("Could not read device name from device tree\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If all else fails, fall back to /etc/megapixels.ini
|
||||||
conffile = "/etc/megapixels.ini";
|
conffile = "/etc/megapixels.ini";
|
||||||
if(access(conffile, F_OK) != -1) {
|
if(access(conffile, F_OK) != -1) {
|
||||||
printf("Found config file at %s\n", conffile);
|
printf("Found config file at %s\n", conffile);
|
||||||
|
|
|
@ -7,6 +7,13 @@ libm = cc.find_library('m', required: false)
|
||||||
|
|
||||||
resources = gnome.compile_resources('megapixels-resources', 'org.postmarketos.Megapixels.gresource.xml')
|
resources = gnome.compile_resources('megapixels-resources', 'org.postmarketos.Megapixels.gresource.xml')
|
||||||
|
|
||||||
|
conf = configuration_data()
|
||||||
|
conf.set_quoted('DATADIR', join_paths(get_option('prefix'), get_option('datadir')))
|
||||||
|
conf.set_quoted('SYSCONFDIR', get_option('sysconfdir'))
|
||||||
|
configure_file(
|
||||||
|
output: 'config.h',
|
||||||
|
configuration: conf )
|
||||||
|
|
||||||
executable('megapixels', 'main.c', 'ini.c', 'bayer.c', 'quickdebayer.c', resources, dependencies : [gtkdep, libm], install : true)
|
executable('megapixels', 'main.c', 'ini.c', 'bayer.c', 'quickdebayer.c', resources, dependencies : [gtkdep, libm], install : true)
|
||||||
|
|
||||||
install_data(['org.postmarketos.Megapixels.desktop'],
|
install_data(['org.postmarketos.Megapixels.desktop'],
|
||||||
|
|
Loading…
Reference in New Issue