Sorry for not taking the time to make it prettier, here's a very ugly hack in order to mijia_ctrl to be called by a while:;sleep loop and enable DAYNIGHT if ev value is below 1000, which is the value corresponding for my cam (ieGeek):
diff --git a/mijia_ctrl.c b/mijia_ctrl.c
index dcd95b8..4933f02 100644
--- a/mijia_ctrl.c
+++ b/mijia_ctrl.c
@@ -267,7 +267,7 @@ int cmd_ircut(int argc, char *argv[], char *buf) {
}
int cmd_daynight(int argc, char *argv[], char *buf) {
- unsigned int val = -1;
+ unsigned int val = -1, ev = 0;
if ( fcntl(isp_fd, F_GETFD) == -1 ) {
strcpy(buf, REPLY_DEV_INIT_FAIL);
@@ -277,6 +277,17 @@ int cmd_daynight(int argc, char *argv[], char *buf) {
if (argc == 2) {
sscanf(argv[1], "%d", &val);
fprintf(stdout, "daynight mode:%d\n", val);
+ if (val == 2) {
+ get_ev(&ev);
+ fprintf(stdout, "ev:%d\n", ev);
+ if (ev < 1000)
+ val = 1;
+ else
+ val = 0;
+
+ ioctl(isp_fd, _IOW(0x6d, 0x0a, int), &val);
+ return 0;
+ }
if (val <= 1) {
ioctl(isp_fd, _IOW(0x6d, 0x0a, int), &val);
sprintf(buf, "OK,VAL=%d\n", val);
@@ -321,6 +332,11 @@ int cmd_ledstatus(int argc, char *argv[], char *buf) {
return 0;
}
+void
+get_ev(unsigned int *ev) {
+ ioctl(isp_fd, _IOR(0x65, 0x1f, int), ev);
+}
+
int cmd_isp_sta(int argc, char *argv[], char *buf) {
unsigned int converge = 0, ev = 0, sta_rdy = 0;
unsigned int awb_sta[10];
@@ -334,7 +350,7 @@ int cmd_isp_sta(int argc, char *argv[], char *buf) {
ioctl(isp_fd, _IOR(0x65, 0x23, int), &converge);
sleep(1);
}
- ioctl(isp_fd, _IOR(0x65, 0x1f, int), &ev);
+ get_ev(&ev);
while (sta_rdy != 0xf) {
ioctl(isp_fd, _IOR(0x63, 0x09, int), &sta_rdy);
After building with this patch, mijia_ctrl DAYNIGHT,2 will enable NIGHTMODE when ev < 1000.
Sorry for not taking the time to make it prettier, here's a very ugly hack in order to
mijia_ctrl
to be called by awhile:;sleep
loop and enableDAYNIGHT
ifev
value is below1000
, which is the value corresponding for my cam (ieGeek):After building with this patch,
mijia_ctrl DAYNIGHT,2
will enableNIGHTMODE
whenev < 1000
.