From ba02428375d91a149f6ea36b1f8b8ab4f6db5565 Mon Sep 17 00:00:00 2001 From: Tolga Cakir Date: Fri, 1 Jan 2016 16:08:08 +0100 Subject: [PATCH] implemented proof-of-concept device reset --- Makefile | 2 +- README.md | 10 +- commands.c | 20 ++ commands.h | 9 +- common.h | 2 + elgato-gchd.c | 37 ++-- init.c | 541 ++++++++++++++++++++++++++++++++++++++++++++++++++ init.h | 13 ++ init_1080p.c | 508 +---------------------------------------------- init_720p.c | 506 +--------------------------------------------- remove.c | 59 +++++- 11 files changed, 688 insertions(+), 1019 deletions(-) create mode 100644 init.c create mode 100644 init.h diff --git a/Makefile b/Makefile index 582bec4..a49551d 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ CC = clang CFLAGS = -std=c99 -Wall -Wextra LDFLAGS = -lusb-1.0 -SRCS = elgato-gchd.c commands.c init_720p.c init_1080p.c remove.c +SRCS = elgato-gchd.c commands.c init.c init_720p.c init_1080p.c remove.c OBJS = $(SRCS:.c=.o) EXEC = elgato-gchd diff --git a/README.md b/README.md index 1440871..82ce51f 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Usage According to your HDMI source, run `./elgato-gchd -r 720p` or `./elgato-gchd -r 1080p` with root permissions in a terminal and leave it open. -This driver will create a new file `/tmp/elgato-gchd.ts`. +This command will create a new file `/tmp/elgato-gchd.ts`. Please note, that this file is actually a FIFO pipe and will not grow. You will need an external program to record footage. @@ -70,9 +70,11 @@ You can open up this file using any media player, which supports reading from pipes. There will be a slight delay, which is hardware limited and can not be worked around. -After closing the file, you will not be able to reopen it again. You will need -to stop the terminal using "Ctrl + C", disconnect and reconnect your Elgato Game -Capture HD's USB cable and start over again. +If you're done using this driver, close the file. Then stop the terminal using +"Ctrl + C" and wait for the program to successfully terminate. The driver is +resetting your device, so it can be used again. If you interrupt this step, it +will leave your device in an undefined state and you will need to replug your +device, to manually reset it. Currently, 1080p30 and 720p60 are supported. diff --git a/commands.c b/commands.c index 7a5d9c4..7f24d75 100644 --- a/commands.c +++ b/commands.c @@ -7,6 +7,7 @@ #include #include +#include #include @@ -20,6 +21,17 @@ void read_config(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wL free(recv); } +int read_config4(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char data0, unsigned char data1, unsigned char data2, unsigned char data3) { + unsigned char recv[4]; + libusb_control_transfer(devh, 0xc0, bRequest, wValue, wIndex, recv, 4, 0); + + if (recv[0] == data0 && recv[1] == data1 && recv[2] == data2 && recv[3] == data3) { + return 1; + } + + return 0; +} + void write_config2(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char data0, unsigned char data1) { unsigned char send[2] = {data0, data1}; libusb_control_transfer(devh, 0x40, bRequest, wValue, wIndex, send, 2, 0); @@ -168,3 +180,11 @@ void dlfirm(const char *file) { fclose(bin); } + +void receive_data() { + int transfer; + unsigned char data[DATA_BUF] = {0}; + + libusb_bulk_transfer(devh, 0x81, data, DATA_BUF, &transfer, 5000); + write(fd_fifo, (char *)data, DATA_BUF); +} diff --git a/commands.h b/commands.h index 8113592..4d49519 100644 --- a/commands.h +++ b/commands.h @@ -11,12 +11,13 @@ #include // scmd commands -#define SCMD_IDLE 1 -#define SCMD_INIT 4 +#define SCMD_IDLE 1 +#define SCMD_INIT 4 #define SCMD_STATE_CHANGE 5 -// deprecated functions. Getting replaced by reverse engineered functions. +// Getting replaced by reverse engineered functions. void read_config(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength); +int read_config4(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char data0, unsigned char data1, unsigned char data2, unsigned char data3); void write_config2(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char data0, unsigned char data1); void write_config3(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char data0, unsigned char data1, unsigned char data2); void write_config4(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char data0, unsigned char data1, unsigned char data2, unsigned char data3); @@ -79,4 +80,6 @@ void slsi(uint16_t wIndex, uint16_t data); */ void dlfirm(const char *file); +void receive_data(); + #endif diff --git a/common.h b/common.h index 865bcc7..195c8cf 100644 --- a/common.h +++ b/common.h @@ -16,5 +16,7 @@ #define FW_MB86H57_H58_ENC "firmware/mb86h57_h58_enc_h.bin" struct libusb_device_handle *devh; +extern int fd_fifo; +extern int init_has_been_run; #endif diff --git a/elgato-gchd.c b/elgato-gchd.c index 58a4159..f1fb414 100644 --- a/elgato-gchd.c +++ b/elgato-gchd.c @@ -39,6 +39,7 @@ static volatile sig_atomic_t is_running = 1; int libusb_ret = 1; int fd_fifo = 0; +int init_has_been_run = 0; char *fifo_path = "/tmp/elgato_gchd.ts"; enum video_resoltion { @@ -47,6 +48,8 @@ enum video_resoltion { }; void sig_handler(int sig) { + fprintf(stderr, "Stop signal received. Do not interrupt or unplug your device.\n"); + switch(sig) { case SIGINT: is_running = 0; @@ -104,17 +107,13 @@ int get_interface() { return 0; } -void receive_data() { - int transfer; - unsigned char data[DATA_BUF] = {0}; - - libusb_bulk_transfer(devh, 0x81, data, DATA_BUF, &transfer, 5000); - write(fd_fifo, (char *)data, DATA_BUF); -} - void clean_up() { if (devh) { - remove_elgato(); + if (init_has_been_run) { + remove_elgato(); + fprintf(stderr, "Device has been reset.\n"); + } + libusb_release_interface(devh, INTERFACE_NUM); libusb_close(devh); } @@ -125,6 +124,8 @@ void clean_up() { close(fd_fifo); unlink(fifo_path); + + fprintf(stderr, "Clean up done. Terminating\n"); } int main(int argc, char *argv[]) { @@ -188,18 +189,26 @@ int main(int argc, char *argv[]) { // create the FIFO (also known as named pipe) mkfifo(fifo_path, 0644); + fprintf(stderr, "%s has been created. Waiting for user to open it.\n", fifo_path); + // open FIFO fd_fifo = open(fifo_path, O_WRONLY); // set device configuration - switch (resolution) { - case v720p: configure_dev_720p(); break; - case v1080p: configure_dev_1080p(); break; - default: clean_up(); + if (is_running) { + fprintf(stderr, "Running. Initializing device.\n"); + + switch (resolution) { + case v720p: configure_dev_720p(); break; + case v1080p: configure_dev_1080p(); break; + default: clean_up(); + } + + fprintf(stderr, "Streaming data from device now.\n"); } // receive audio and video from device - while(is_running) { + while (is_running) { receive_data(); } diff --git a/init.c b/init.c new file mode 100644 index 0000000..f422bea --- /dev/null +++ b/init.c @@ -0,0 +1,541 @@ +/** + * Copyright (c) 2014 - 2015 Tolga Cakir + * + * This source file is part of Elgato Game Capture HD Linux driver and is + * distributed under the MIT License. For more information, see LICENSE file. + */ + +#include "commands.h" +#include "common.h" + +void configure_dev_mode() { + int is_configured = 0; + + init_has_been_run = 1; + + read_config(0xbc, 0x0800, 0x0094, 4); + read_config(0xbc, 0x0800, 0x0098, 4); + + // check, if the device already has been configured + is_configured |= read_config4(0xbc, 0x0800, 0x0010, 0x00, 0x00, 0x00, 0x00); + is_configured |= read_config4(0xbc, 0x0800, 0x0014, 0x00, 0x00, 0x00, 0x00); + is_configured |= read_config4(0xbc, 0x0800, 0x0018, 0x00, 0x00, 0x00, 0x00); + + write_config2(0xbc, 0x0900, 0x0000, 0x00, 0x00); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0800, 0x2008, 2); + + // if configured, skip "idle" firmware + if (is_configured) { + read_config(0xbc, 0x0800, 0x2008, 2); + + // unknown scmd command + scmd(0x02, 0x00, 0x0000); + + read_config(0xbc, 0x0800, 0x2008, 2); + read_config(0xbc, 0x0900, 0x0074, 2); + read_config(0xbc, 0x0900, 0x01b0, 2); + read_config(0xbc, 0x0800, 0x2008, 2); + read_config(0xbc, 0x0800, 0x2008, 2); + + write_config2(0xbc, 0x0900, 0x0074, 0x00, 0x04); + write_config2(0xbc, 0x0900, 0x01b0, 0x00, 0x00); + + goto configured_1; + } + + read_config(0xbc, 0x0900, 0x0074, 2); + read_config(0xbc, 0x0900, 0x01b0, 2); + read_config(0xbc, 0x0800, 0x2008, 2); + read_config(0xbc, 0x0800, 0x2008, 2); + + // this is an important step for sending the firmware + write_config2(0xbc, 0x0900, 0x0074, 0x00, 0x04); + write_config2(0xbc, 0x0900, 0x01b0, 0x00, 0x00); + + // load "idle" firmware + dlfirm(FW_MB86H57_H58_IDLE); + + write_config2(0xbc, 0x0900, 0x0070, 0x00, 0x04); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + read_config(0xbc, 0x0000, 0x0010, 2); + read_config(0xbc, 0x0000, 0x0012, 2); + read_config(0xbc, 0x0000, 0x0014, 2); + read_config(0xbc, 0x0000, 0x0016, 2); + read_config(0xbc, 0x0000, 0x0018, 2); + read_config(0xbc, 0x0000, 0x001a, 2); + read_config(0xbc, 0x0000, 0x001c, 2); + read_config(0xbc, 0x0000, 0x001e, 2); + +configured_1: + read_config(0xbc, 0x0800, 0x2008, 2); + + // IDLE command + scmd(SCMD_IDLE, 0x00, 0x0000); + + read_config(0xbc, 0x0800, 0x2008, 2); + read_config(0xbc, 0x0900, 0x0074, 2); + read_config(0xbc, 0x0900, 0x01b0, 2); + read_config(0xbc, 0x0800, 0x2008, 2); + read_config(0xbc, 0x0800, 0x2008, 2); + + write_config2(0xbc, 0x0900, 0x0074, 0x00, 0x04); + write_config2(0xbc, 0x0900, 0x01b0, 0x00, 0x00); + + // if configured, skip this part + if (is_configured) { + goto configured_2; + } + + write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x00); + + read_config(0xbc, 0x0900, 0x001c, 2); + read_config(0xbd, 0x0000, 0x3300, 3); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x00); + + read_config(0xbc, 0x0900, 0x001c, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x04); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x00); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + + read_config(0xbc, 0x0900, 0x001c, 2); + read_config(0xbd, 0x0000, 0x3300, 3); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x001c, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + + read_config(0xbc, 0x0900, 0x001c, 2); + read_config(0xbd, 0x0000, 0x3300, 3); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x001c, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + + read_config(0xbc, 0x0900, 0x001c, 2); + read_config(0xbd, 0x0000, 0x3300, 3); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x001c, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + + read_config(0xbc, 0x0900, 0x001c, 2); + read_config(0xbd, 0x0000, 0x3300, 3); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x001c, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + + read_config(0xbc, 0x0900, 0x001c, 2); + read_config(0xbd, 0x0000, 0x3300, 3); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x001c, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + + read_config(0xbc, 0x0900, 0x001c, 2); + read_config(0xbd, 0x0000, 0x3300, 3); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x001c, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + + write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + + read_config(0xbc, 0x0900, 0x001c, 2); + read_config(0xbd, 0x0000, 0x3300, 3); + + write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); + write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); + + read_config(0xbc, 0x0900, 0x0014, 2); + read_config(0xbc, 0x0900, 0x0018, 2); + +configured_2: + write_config2(0xbc, 0x0900, 0x0000, 0x00, 0x00); + + write_config8(0xbc, 0x0001, 0x1000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02); + write_config8(0xbc, 0x0001, 0x1000, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10); + write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1004, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00); + write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00); + write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80); + write_config8(0xbc, 0x0001, 0x1100, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04); + write_config8(0xbc, 0x0001, 0x1240, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04); + write_config8(0xbc, 0x0001, 0x1100, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03); + write_config8(0xbc, 0x0001, 0x1240, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03); + write_config8(0xbc, 0x0001, 0x1104, 0x61, 0xa8, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1244, 0x1f, 0x40, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1104, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1244, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1108, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1108, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1248, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1248, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x110c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x110c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1110, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1110, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x124c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x124c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1250, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1250, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1124, 0x00, 0x00, 0x10, 0x11, 0x00, 0x00, 0x1f, 0xff); + write_config8(0xbc, 0x0001, 0x1264, 0x00, 0x00, 0x10, 0x11, 0x00, 0x00, 0x1f, 0xff); + write_config8(0xbc, 0x0001, 0x1128, 0x01, 0x0f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1268, 0x01, 0x0f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1134, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1274, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x112c, 0x01, 0x10, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x126c, 0x01, 0x10, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x112c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f, 0xff); + write_config8(0xbc, 0x0001, 0x126c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f, 0xff); + write_config8(0xbc, 0x0001, 0x1268, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x1f, 0xff); + write_config8(0xbc, 0x0001, 0x1130, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1270, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x113c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x127c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x113c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); + write_config8(0xbc, 0x0001, 0x127c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); + write_config8(0xbc, 0x0001, 0x1140, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1280, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1140, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff); + write_config8(0xbc, 0x0001, 0x1280, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff); + write_config8(0xbc, 0x0001, 0x1138, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); + + write_config2(0xbc, 0x0000, 0x1144, 0x00, 0xb0); + write_config2(0xbc, 0x0000, 0x1146, 0x11, 0x00); + write_config2(0xbc, 0x0000, 0x1148, 0x00, 0xc1); + write_config2(0xbc, 0x0000, 0x114a, 0x00, 0x00); + write_config2(0xbc, 0x0000, 0x114c, 0x00, 0x01); + write_config2(0xbc, 0x0000, 0x114e, 0xe1, 0x10); + write_config2(0xbc, 0x0000, 0x1150, 0x00, 0x00); + write_config2(0xbc, 0x0000, 0x1152, 0xe0, 0x1f); + + write_config8(0xbc, 0x0001, 0x1278, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); + + write_config2(0xbc, 0x0000, 0x1284, 0x00, 0xb0); + write_config2(0xbc, 0x0000, 0x1286, 0x11, 0x00); + write_config2(0xbc, 0x0000, 0x1288, 0x00, 0xc1); + write_config2(0xbc, 0x0000, 0x128a, 0x00, 0x00); + write_config2(0xbc, 0x0000, 0x128c, 0x00, 0x01); + write_config2(0xbc, 0x0000, 0x128e, 0xe1, 0x10); + write_config2(0xbc, 0x0000, 0x1290, 0x00, 0x00); + write_config2(0xbc, 0x0000, 0x1292, 0xe0, 0x1f); + + write_config8(0xbc, 0x0001, 0x113c, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xff, 0x00); + + write_config2(0xbc, 0x0000, 0x1010, 0x7f, 0xf0); + write_config2(0xbc, 0x0000, 0x1012, 0x0b, 0xff); + write_config2(0xbc, 0x0000, 0x1014, 0xff, 0xc1); + write_config2(0xbc, 0x0000, 0x1016, 0x00, 0x00); + write_config2(0xbc, 0x0000, 0x1018, 0xf0, 0x00); + write_config8(0xbc, 0x0001, 0x127c, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xff, 0x00); + write_config2(0xbc, 0x0000, 0x1370, 0x7f, 0xf0); + write_config2(0xbc, 0x0000, 0x1372, 0x0b, 0xff); + write_config2(0xbc, 0x0000, 0x1374, 0xff, 0xc1); + write_config2(0xbc, 0x0000, 0x1376, 0x00, 0x00); + write_config2(0xbc, 0x0000, 0x1378, 0xf0, 0x00); + + write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x20, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x100c, 0x30, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1130, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xff); + write_config8(0xbc, 0x0001, 0x1138, 0x00, 0x36, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + + write_config2(0xbc, 0x0000, 0x1176, 0x37, 0x00); + write_config2(0xbc, 0x0000, 0x11a4, 0xff, 0x03); + write_config2(0xbc, 0x0000, 0x11a6, 0xe1, 0x0f); + write_config2(0xbc, 0x0000, 0x11a8, 0xf0, 0x00); + write_config2(0xbc, 0x0000, 0x1174, 0x02, 0xb0); + write_config2(0xbc, 0x0000, 0x1178, 0x01, 0xc1); + write_config2(0xbc, 0x0000, 0x117a, 0x00, 0x00); + write_config2(0xbc, 0x0000, 0x117c, 0xe1, 0x00); + write_config2(0xbc, 0x0000, 0x117e, 0xf0, 0x0c); + write_config2(0xbc, 0x0000, 0x1180, 0x05, 0x04); + write_config2(0xbc, 0x0000, 0x1182, 0x48, 0x44); + write_config2(0xbc, 0x0000, 0x1184, 0x4d, 0x56); + write_config2(0xbc, 0x0000, 0x1186, 0x88, 0x04); + write_config2(0xbc, 0x0000, 0x1188, 0x0f, 0xff); + write_config2(0xbc, 0x0000, 0x118a, 0xfc, 0xfc); + write_config2(0xbc, 0x0000, 0x118c, 0x1b, 0xf0); + write_config2(0xbc, 0x0000, 0x118e, 0x11, 0xf0); + write_config2(0xbc, 0x0000, 0x1190, 0x14, 0x05); + write_config2(0xbc, 0x0000, 0x1192, 0x08, 0x48); + write_config2(0xbc, 0x0000, 0x1194, 0x44, 0x4d); + write_config2(0xbc, 0x0000, 0x1196, 0x56, 0xff); + write_config2(0xbc, 0x0000, 0x1198, 0x1b, 0x44); + write_config2(0xbc, 0x0000, 0x119a, 0x3f, 0x28); + write_config2(0xbc, 0x0000, 0x119c, 0x04, 0x64); + write_config2(0xbc, 0x0000, 0x119e, 0x00, 0x28); + write_config2(0xbc, 0x0000, 0x11a0, 0x3f, 0x2a); + write_config2(0xbc, 0x0000, 0x11a2, 0x02, 0x7e); + + write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1270, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xff); + write_config8(0xbc, 0x0001, 0x1278, 0x00, 0x36, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + + write_config2(0xbc, 0x0000, 0x12b6, 0x37, 0x00); + write_config2(0xbc, 0x0000, 0x12e4, 0xff, 0x03); + write_config2(0xbc, 0x0000, 0x12e6, 0xe1, 0x0f); + write_config2(0xbc, 0x0000, 0x12e8, 0xf0, 0x00); + write_config2(0xbc, 0x0000, 0x12b4, 0x02, 0xb0); + write_config2(0xbc, 0x0000, 0x12b8, 0x01, 0xc1); + write_config2(0xbc, 0x0000, 0x12ba, 0x00, 0x00); + write_config2(0xbc, 0x0000, 0x12bc, 0xe1, 0x00); + write_config2(0xbc, 0x0000, 0x12be, 0xf0, 0x0c); + write_config2(0xbc, 0x0000, 0x12c0, 0x05, 0x04); + write_config2(0xbc, 0x0000, 0x12c2, 0x48, 0x44); + write_config2(0xbc, 0x0000, 0x12c4, 0x4d, 0x56); + write_config2(0xbc, 0x0000, 0x12c6, 0x88, 0x04); + write_config2(0xbc, 0x0000, 0x12c8, 0x0f, 0xff); + write_config2(0xbc, 0x0000, 0x12ca, 0xfc, 0xfc); + write_config2(0xbc, 0x0000, 0x12cc, 0x1b, 0xf0); + write_config2(0xbc, 0x0000, 0x12ce, 0x11, 0xf0); + write_config2(0xbc, 0x0000, 0x12d0, 0x14, 0x05); + write_config2(0xbc, 0x0000, 0x12d2, 0x08, 0x48); + write_config2(0xbc, 0x0000, 0x12d4, 0x44, 0x4d); + write_config2(0xbc, 0x0000, 0x12d6, 0x56, 0xff); + write_config2(0xbc, 0x0000, 0x12d8, 0x1b, 0x44); + write_config2(0xbc, 0x0000, 0x12da, 0x3f, 0x28); + write_config2(0xbc, 0x0000, 0x12dc, 0x04, 0x64); + write_config2(0xbc, 0x0000, 0x12de, 0x00, 0x28); + write_config2(0xbc, 0x0000, 0x12e0, 0x3f, 0x2a); + write_config2(0xbc, 0x0000, 0x12e2, 0x02, 0x7e); + + write_config8(0xbc, 0x0001, 0x1710, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00); + + write_config2(0xbc, 0x0000, 0x1710, 0x00, 0xfc); + write_config2(0xbc, 0x0000, 0x1712, 0x00, 0x24); + write_config2(0xbc, 0x0000, 0x1714, 0x00, 0xf8); + write_config2(0xbc, 0x0000, 0x1716, 0x00, 0xe8); + write_config2(0xbc, 0x0000, 0x1718, 0x00, 0xda); + write_config2(0xbc, 0x0000, 0x171a, 0x00, 0xc6); + write_config2(0xbc, 0x0000, 0x171c, 0x00, 0x76); + write_config2(0xbc, 0x0000, 0x171e, 0x00, 0xea); + + write_config8(0xbc, 0x0001, 0x1500, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00); + write_config8(0xbc, 0x0001, 0x1500, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff); + write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00); + write_config8(0xbc, 0x0001, 0x1504, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1518, 0x0f, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1618, 0x0f, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1518, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1618, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1518, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x151c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1618, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x161c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1524, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00); + write_config8(0xbc, 0x0001, 0x1524, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xff); + write_config8(0xbc, 0x0001, 0x152c, 0x02, 0xd0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x152c, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1624, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00); + write_config8(0xbc, 0x0001, 0x1624, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xff); + write_config8(0xbc, 0x0001, 0x162c, 0x01, 0x40, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x162c, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1530, 0x00, 0x00, 0x3e, 0x80, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1534, 0x36, 0xb0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1534, 0x00, 0x00, 0x1f, 0x40, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1538, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1630, 0x00, 0x00, 0x27, 0x10, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1634, 0x17, 0x70, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1634, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1638, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1550, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00); + write_config8(0xbc, 0x0001, 0x1550, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); + write_config8(0xbc, 0x0001, 0x1554, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1554, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1554, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1558, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1570, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1670, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1570, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1670, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1570, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1670, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x157c, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x167c, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x157c, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x167c, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x157c, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x167c, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x157c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00); + write_config8(0xbc, 0x0001, 0x167c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00); + write_config8(0xbc, 0x0001, 0x157c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70); + write_config8(0xbc, 0x0001, 0x167c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70); + write_config8(0xbc, 0x0001, 0x157c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); + write_config8(0xbc, 0x0001, 0x167c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); + write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00); + write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00); + write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); + write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); + write_config8(0xbc, 0x0001, 0x1684, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1684, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1688, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a0c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a64, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a64, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1a68, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a68, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1a6c, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a6c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff); + write_config8(0xbc, 0x0001, 0x1a04, 0x01, 0x80, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); + write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60); + write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10); + write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08); + write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06); + write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); + write_config8(0xbc, 0x0001, 0x1a04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); + + // download firmware command + scmd(SCMD_INIT, 0x00, 0x0000); + + /* load "enc" firmware */ + dlfirm(FW_MB86H57_H58_ENC); + + read_config(0xbc, 0x0000, 0x0010, 2); + read_config(0xbc, 0x0000, 0x0012, 2); + read_config(0xbc, 0x0000, 0x0014, 2); + read_config(0xbc, 0x0000, 0x0016, 2); +} diff --git a/init.h b/init.h new file mode 100644 index 0000000..0950d43 --- /dev/null +++ b/init.h @@ -0,0 +1,13 @@ +/** + * Copyright (c) 2014 - 2015 Tolga Cakir + * + * This source file is part of Elgato Game Capture HD Linux driver and is + * distributed under the MIT License. For more information, see LICENSE file. + */ + +#ifndef INIT_H +#define INIT_H + +void configure_dev_mode(); + +#endif diff --git a/init_1080p.c b/init_1080p.c index 1ec828d..cabeb62 100644 --- a/init_1080p.c +++ b/init_1080p.c @@ -6,502 +6,10 @@ */ #include "commands.h" +#include "init.h" void configure_dev_1080p() { - read_config(0xbc, 0x0800, 0x0094, 4); - read_config(0xbc, 0x0800, 0x0098, 4); - read_config(0xbc, 0x0800, 0x0010, 4); - read_config(0xbc, 0x0800, 0x0014, 4); - read_config(0xbc, 0x0800, 0x0018, 4); - - write_config2(0xbc, 0x0900, 0x0000, 0x00, 0x00); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - read_config(0xbc, 0x0900, 0x0074, 2); - read_config(0xbc, 0x0900, 0x01b0, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - - // this is an important step for sending the firmware - write_config2(0xbc, 0x0900, 0x0074, 0x00, 0x04); - write_config2(0xbc, 0x0900, 0x01b0, 0x00, 0x00); - - // load "idle" firmware - dlfirm("firmware/mb86h57_h58_idle.bin"); - - // begin of highly (!) experimental part - using ov2lusb utility - write_config2(0xbc, 0x0900, 0x0070, 0x00, 0x04); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - read_config(0xbc, 0x0000, 0x0010, 2); - read_config(0xbc, 0x0000, 0x0012, 2); - read_config(0xbc, 0x0000, 0x0014, 2); - read_config(0xbc, 0x0000, 0x0016, 2); - read_config(0xbc, 0x0000, 0x0018, 2); - read_config(0xbc, 0x0000, 0x001a, 2); - read_config(0xbc, 0x0000, 0x001c, 2); - read_config(0xbc, 0x0000, 0x001e, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00); - - read_config(0xbc, 0x0800, 0x2008, 2); - read_config(0xbc, 0x0900, 0x0074, 2); - read_config(0xbc, 0x0900, 0x01b0, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - - write_config2(0xbc, 0x0900, 0x0074, 0x00, 0x04); - write_config2(0xbc, 0x0900, 0x01b0, 0x00, 0x00); - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x00); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x00); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x04); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x00); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0000, 0x00, 0x00); - - write_config8(0xbc, 0x0001, 0x1000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02); - write_config8(0xbc, 0x0001, 0x1000, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80); - write_config8(0xbc, 0x0001, 0x1100, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04); - write_config8(0xbc, 0x0001, 0x1240, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04); - write_config8(0xbc, 0x0001, 0x1100, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03); - write_config8(0xbc, 0x0001, 0x1240, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03); - write_config8(0xbc, 0x0001, 0x1104, 0x61, 0xa8, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1244, 0x1f, 0x40, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1104, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1244, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1108, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1108, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1248, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1248, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x110c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x110c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1110, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1110, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x124c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x124c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1250, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1250, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1124, 0x00, 0x00, 0x10, 0x11, 0x00, 0x00, 0x1f, 0xff); - write_config8(0xbc, 0x0001, 0x1264, 0x00, 0x00, 0x10, 0x11, 0x00, 0x00, 0x1f, 0xff); - write_config8(0xbc, 0x0001, 0x1128, 0x01, 0x0f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1268, 0x01, 0x0f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1134, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1274, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x112c, 0x01, 0x10, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x126c, 0x01, 0x10, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x112c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f, 0xff); - write_config8(0xbc, 0x0001, 0x126c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f, 0xff); - write_config8(0xbc, 0x0001, 0x1268, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x1f, 0xff); - write_config8(0xbc, 0x0001, 0x1130, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1270, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x113c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x127c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x113c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x127c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1140, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1280, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1140, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff); - write_config8(0xbc, 0x0001, 0x1280, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff); - write_config8(0xbc, 0x0001, 0x1138, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); - - write_config2(0xbc, 0x0000, 0x1144, 0x00, 0xb0); - write_config2(0xbc, 0x0000, 0x1146, 0x11, 0x00); - write_config2(0xbc, 0x0000, 0x1148, 0x00, 0xc1); - write_config2(0xbc, 0x0000, 0x114a, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x114c, 0x00, 0x01); - write_config2(0xbc, 0x0000, 0x114e, 0xe1, 0x10); - write_config2(0xbc, 0x0000, 0x1150, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x1152, 0xe0, 0x1f); - - write_config8(0xbc, 0x0001, 0x1278, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); - - write_config2(0xbc, 0x0000, 0x1284, 0x00, 0xb0); - write_config2(0xbc, 0x0000, 0x1286, 0x11, 0x00); - write_config2(0xbc, 0x0000, 0x1288, 0x00, 0xc1); - write_config2(0xbc, 0x0000, 0x128a, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x128c, 0x00, 0x01); - write_config2(0xbc, 0x0000, 0x128e, 0xe1, 0x10); - write_config2(0xbc, 0x0000, 0x1290, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x1292, 0xe0, 0x1f); - - write_config8(0xbc, 0x0001, 0x113c, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xff, 0x00); - - write_config2(0xbc, 0x0000, 0x1010, 0x7f, 0xf0); - write_config2(0xbc, 0x0000, 0x1012, 0x0b, 0xff); - write_config2(0xbc, 0x0000, 0x1014, 0xff, 0xc1); - write_config2(0xbc, 0x0000, 0x1016, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x1018, 0xf0, 0x00); - write_config8(0xbc, 0x0001, 0x127c, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config2(0xbc, 0x0000, 0x1370, 0x7f, 0xf0); - write_config2(0xbc, 0x0000, 0x1372, 0x0b, 0xff); - write_config2(0xbc, 0x0000, 0x1374, 0xff, 0xc1); - write_config2(0xbc, 0x0000, 0x1376, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x1378, 0xf0, 0x00); - - write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x20, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x100c, 0x30, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1130, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1138, 0x00, 0x36, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - - write_config2(0xbc, 0x0000, 0x1176, 0x37, 0x00); - write_config2(0xbc, 0x0000, 0x11a4, 0xff, 0x03); - write_config2(0xbc, 0x0000, 0x11a6, 0xe1, 0x0f); - write_config2(0xbc, 0x0000, 0x11a8, 0xf0, 0x00); - write_config2(0xbc, 0x0000, 0x1174, 0x02, 0xb0); - write_config2(0xbc, 0x0000, 0x1178, 0x01, 0xc1); - write_config2(0xbc, 0x0000, 0x117a, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x117c, 0xe1, 0x00); - write_config2(0xbc, 0x0000, 0x117e, 0xf0, 0x0c); - write_config2(0xbc, 0x0000, 0x1180, 0x05, 0x04); - write_config2(0xbc, 0x0000, 0x1182, 0x48, 0x44); - write_config2(0xbc, 0x0000, 0x1184, 0x4d, 0x56); - write_config2(0xbc, 0x0000, 0x1186, 0x88, 0x04); - write_config2(0xbc, 0x0000, 0x1188, 0x0f, 0xff); - write_config2(0xbc, 0x0000, 0x118a, 0xfc, 0xfc); - write_config2(0xbc, 0x0000, 0x118c, 0x1b, 0xf0); - write_config2(0xbc, 0x0000, 0x118e, 0x11, 0xf0); - write_config2(0xbc, 0x0000, 0x1190, 0x14, 0x05); - write_config2(0xbc, 0x0000, 0x1192, 0x08, 0x48); - write_config2(0xbc, 0x0000, 0x1194, 0x44, 0x4d); - write_config2(0xbc, 0x0000, 0x1196, 0x56, 0xff); - write_config2(0xbc, 0x0000, 0x1198, 0x1b, 0x44); - write_config2(0xbc, 0x0000, 0x119a, 0x3f, 0x28); - write_config2(0xbc, 0x0000, 0x119c, 0x04, 0x64); - write_config2(0xbc, 0x0000, 0x119e, 0x00, 0x28); - write_config2(0xbc, 0x0000, 0x11a0, 0x3f, 0x2a); - write_config2(0xbc, 0x0000, 0x11a2, 0x02, 0x7e); - - write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1270, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1278, 0x00, 0x36, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - - write_config2(0xbc, 0x0000, 0x12b6, 0x37, 0x00); - write_config2(0xbc, 0x0000, 0x12e4, 0xff, 0x03); - write_config2(0xbc, 0x0000, 0x12e6, 0xe1, 0x0f); - write_config2(0xbc, 0x0000, 0x12e8, 0xf0, 0x00); - write_config2(0xbc, 0x0000, 0x12b4, 0x02, 0xb0); - write_config2(0xbc, 0x0000, 0x12b8, 0x01, 0xc1); - write_config2(0xbc, 0x0000, 0x12ba, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x12bc, 0xe1, 0x00); - write_config2(0xbc, 0x0000, 0x12be, 0xf0, 0x0c); - write_config2(0xbc, 0x0000, 0x12c0, 0x05, 0x04); - write_config2(0xbc, 0x0000, 0x12c2, 0x48, 0x44); - write_config2(0xbc, 0x0000, 0x12c4, 0x4d, 0x56); - write_config2(0xbc, 0x0000, 0x12c6, 0x88, 0x04); - write_config2(0xbc, 0x0000, 0x12c8, 0x0f, 0xff); - write_config2(0xbc, 0x0000, 0x12ca, 0xfc, 0xfc); - write_config2(0xbc, 0x0000, 0x12cc, 0x1b, 0xf0); - write_config2(0xbc, 0x0000, 0x12ce, 0x11, 0xf0); - write_config2(0xbc, 0x0000, 0x12d0, 0x14, 0x05); - write_config2(0xbc, 0x0000, 0x12d2, 0x08, 0x48); - write_config2(0xbc, 0x0000, 0x12d4, 0x44, 0x4d); - write_config2(0xbc, 0x0000, 0x12d6, 0x56, 0xff); - write_config2(0xbc, 0x0000, 0x12d8, 0x1b, 0x44); - write_config2(0xbc, 0x0000, 0x12da, 0x3f, 0x28); - write_config2(0xbc, 0x0000, 0x12dc, 0x04, 0x64); - write_config2(0xbc, 0x0000, 0x12de, 0x00, 0x28); - write_config2(0xbc, 0x0000, 0x12e0, 0x3f, 0x2a); - write_config2(0xbc, 0x0000, 0x12e2, 0x02, 0x7e); - - write_config8(0xbc, 0x0001, 0x1710, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00); - - write_config2(0xbc, 0x0000, 0x1710, 0x00, 0xfc); - write_config2(0xbc, 0x0000, 0x1712, 0x00, 0x24); - write_config2(0xbc, 0x0000, 0x1714, 0x00, 0xf8); - write_config2(0xbc, 0x0000, 0x1716, 0x00, 0xe8); - write_config2(0xbc, 0x0000, 0x1718, 0x00, 0xda); - write_config2(0xbc, 0x0000, 0x171a, 0x00, 0xc6); - write_config2(0xbc, 0x0000, 0x171c, 0x00, 0x76); - write_config2(0xbc, 0x0000, 0x171e, 0x00, 0xea); - - write_config8(0xbc, 0x0001, 0x1500, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00); - write_config8(0xbc, 0x0001, 0x1500, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00); - write_config8(0xbc, 0x0001, 0x1504, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1518, 0x0f, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1618, 0x0f, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1518, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1618, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1518, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x151c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1618, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x161c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1524, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config8(0xbc, 0x0001, 0x1524, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x152c, 0x02, 0xd0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x152c, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1624, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config8(0xbc, 0x0001, 0x1624, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x162c, 0x01, 0x40, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x162c, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1530, 0x00, 0x00, 0x3e, 0x80, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1534, 0x36, 0xb0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1534, 0x00, 0x00, 0x1f, 0x40, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1538, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1630, 0x00, 0x00, 0x27, 0x10, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1634, 0x17, 0x70, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1634, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1638, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1550, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config8(0xbc, 0x0001, 0x1550, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1554, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1554, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1554, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1558, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1570, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1670, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1570, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1670, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1570, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1670, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x157c, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x167c, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x157c, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x167c, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x157c, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x167c, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x157c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00); - write_config8(0xbc, 0x0001, 0x167c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00); - write_config8(0xbc, 0x0001, 0x157c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70); - write_config8(0xbc, 0x0001, 0x167c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70); - write_config8(0xbc, 0x0001, 0x157c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); - write_config8(0xbc, 0x0001, 0x167c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); - write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1684, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1684, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1688, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a0c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a64, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a64, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1a68, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a68, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1a6c, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a6c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1a04, 0x01, 0x80, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60); - write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10); - write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08); - write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06); - write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); - write_config8(0xbc, 0x0001, 0x1a04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); - - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00); - /* end of highly experimental part */ - - /* load "enc" firmware */ - dlfirm("firmware/mb86h57_h58_enc_h.bin"); - - read_config(0xbc, 0x0000, 0x0010, 2); - read_config(0xbc, 0x0000, 0x0012, 2); - read_config(0xbc, 0x0000, 0x0014, 2); - read_config(0xbc, 0x0000, 0x0016, 2); + configure_dev_mode(); write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); @@ -2036,7 +1544,10 @@ void configure_dev_1080p() { write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00); write_config8(0xbc, 0x0001, 0x100c, 0x03, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00); write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x04, 0xa0, 0x00, 0x00); + + // encode mode command + scmd(SCMD_INIT, 0xa0, 0x0000); + write_config2(0xbd, 0x0000, 0x4400, 0x06, 0x86); write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x1e); @@ -10262,9 +9773,12 @@ void configure_dev_1080p() { write_config8(0xbc, 0x0001, 0x1008, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f); write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00); write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00); - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x04, 0xa0, 0x00, 0x00); + + // encode mode command + scmd(SCMD_INIT, 0xa0, 0x0000); read_config(0xbc, 0x0800, 0x2008, 2); - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02); + // state change - start encoding + scmd(SCMD_STATE_CHANGE, 0x00, 0x0002); } diff --git a/init_720p.c b/init_720p.c index 8944e24..05af6fb 100644 --- a/init_720p.c +++ b/init_720p.c @@ -6,502 +6,10 @@ */ #include "commands.h" +#include "init.h" void configure_dev_720p() { - read_config(0xbc, 0x0800, 0x0094, 4); - read_config(0xbc, 0x0800, 0x0098, 4); - read_config(0xbc, 0x0800, 0x0010, 4); - read_config(0xbc, 0x0800, 0x0014, 4); - read_config(0xbc, 0x0800, 0x0018, 4); - - write_config2(0xbc, 0x0900, 0x0000, 0x00, 0x00); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - read_config(0xbc, 0x0900, 0x0074, 2); - read_config(0xbc, 0x0900, 0x01b0, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - - // this is an important step for sending the firmware - write_config2(0xbc, 0x0900, 0x0074, 0x00, 0x04); - write_config2(0xbc, 0x0900, 0x01b0, 0x00, 0x00); - - // load "idle" firmware - dlfirm("firmware/mb86h57_h58_idle.bin"); - - // begin of highly (!) experimental part - using ov2lusb utility - write_config2(0xbc, 0x0900, 0x0070, 0x00, 0x04); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - read_config(0xbc, 0x0000, 0x0010, 2); - read_config(0xbc, 0x0000, 0x0012, 2); - read_config(0xbc, 0x0000, 0x0014, 2); - read_config(0xbc, 0x0000, 0x0016, 2); - read_config(0xbc, 0x0000, 0x0018, 2); - read_config(0xbc, 0x0000, 0x001a, 2); - read_config(0xbc, 0x0000, 0x001c, 2); - read_config(0xbc, 0x0000, 0x001e, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00); - - read_config(0xbc, 0x0800, 0x2008, 2); - read_config(0xbc, 0x0900, 0x0074, 2); - read_config(0xbc, 0x0900, 0x01b0, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - read_config(0xbc, 0x0800, 0x2008, 2); - - write_config2(0xbc, 0x0900, 0x0074, 0x00, 0x04); - write_config2(0xbc, 0x0900, 0x01b0, 0x00, 0x00); - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x00); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x00); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x04); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x00); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x001c, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - - read_config(0xbc, 0x0900, 0x001c, 2); - read_config(0xbd, 0x0000, 0x3300, 3); - - write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); - write_config2(0xbc, 0x0900, 0x0018, 0x00, 0x02); - - read_config(0xbc, 0x0900, 0x0014, 2); - read_config(0xbc, 0x0900, 0x0018, 2); - - write_config2(0xbc, 0x0900, 0x0000, 0x00, 0x00); - - write_config8(0xbc, 0x0001, 0x1000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02); - write_config8(0xbc, 0x0001, 0x1000, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00); - write_config8(0xbc, 0x0001, 0x1004, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80); - write_config8(0xbc, 0x0001, 0x1100, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04); - write_config8(0xbc, 0x0001, 0x1240, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04); - write_config8(0xbc, 0x0001, 0x1100, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03); - write_config8(0xbc, 0x0001, 0x1240, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03); - write_config8(0xbc, 0x0001, 0x1104, 0x61, 0xa8, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1244, 0x1f, 0x40, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1104, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1244, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1108, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1108, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1248, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1248, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x110c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x110c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1110, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1110, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x124c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x124c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1250, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1250, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1124, 0x00, 0x00, 0x10, 0x11, 0x00, 0x00, 0x1f, 0xff); - write_config8(0xbc, 0x0001, 0x1264, 0x00, 0x00, 0x10, 0x11, 0x00, 0x00, 0x1f, 0xff); - write_config8(0xbc, 0x0001, 0x1128, 0x01, 0x0f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1268, 0x01, 0x0f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1134, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1274, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x112c, 0x01, 0x10, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x126c, 0x01, 0x10, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x112c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f, 0xff); - write_config8(0xbc, 0x0001, 0x126c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f, 0xff); - write_config8(0xbc, 0x0001, 0x1268, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x1f, 0xff); - write_config8(0xbc, 0x0001, 0x1130, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1270, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x113c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x127c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x113c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x127c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1140, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1280, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1140, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff); - write_config8(0xbc, 0x0001, 0x1280, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff); - write_config8(0xbc, 0x0001, 0x1138, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); - - write_config2(0xbc, 0x0000, 0x1144, 0x00, 0xb0); - write_config2(0xbc, 0x0000, 0x1146, 0x11, 0x00); - write_config2(0xbc, 0x0000, 0x1148, 0x00, 0xc1); - write_config2(0xbc, 0x0000, 0x114a, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x114c, 0x00, 0x01); - write_config2(0xbc, 0x0000, 0x114e, 0xe1, 0x10); - write_config2(0xbc, 0x0000, 0x1150, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x1152, 0xe0, 0x1f); - - write_config8(0xbc, 0x0001, 0x1278, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); - - write_config2(0xbc, 0x0000, 0x1284, 0x00, 0xb0); - write_config2(0xbc, 0x0000, 0x1286, 0x11, 0x00); - write_config2(0xbc, 0x0000, 0x1288, 0x00, 0xc1); - write_config2(0xbc, 0x0000, 0x128a, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x128c, 0x00, 0x01); - write_config2(0xbc, 0x0000, 0x128e, 0xe1, 0x10); - write_config2(0xbc, 0x0000, 0x1290, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x1292, 0xe0, 0x1f); - - write_config8(0xbc, 0x0001, 0x113c, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xff, 0x00); - - write_config2(0xbc, 0x0000, 0x1010, 0x7f, 0xf0); - write_config2(0xbc, 0x0000, 0x1012, 0x0b, 0xff); - write_config2(0xbc, 0x0000, 0x1014, 0xff, 0xc1); - write_config2(0xbc, 0x0000, 0x1016, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x1018, 0xf0, 0x00); - write_config8(0xbc, 0x0001, 0x127c, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config2(0xbc, 0x0000, 0x1370, 0x7f, 0xf0); - write_config2(0xbc, 0x0000, 0x1372, 0x0b, 0xff); - write_config2(0xbc, 0x0000, 0x1374, 0xff, 0xc1); - write_config2(0xbc, 0x0000, 0x1376, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x1378, 0xf0, 0x00); - - write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x20, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x100c, 0x30, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1130, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1138, 0x00, 0x36, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - - write_config2(0xbc, 0x0000, 0x1176, 0x37, 0x00); - write_config2(0xbc, 0x0000, 0x11a4, 0xff, 0x03); - write_config2(0xbc, 0x0000, 0x11a6, 0xe1, 0x0f); - write_config2(0xbc, 0x0000, 0x11a8, 0xf0, 0x00); - write_config2(0xbc, 0x0000, 0x1174, 0x02, 0xb0); - write_config2(0xbc, 0x0000, 0x1178, 0x01, 0xc1); - write_config2(0xbc, 0x0000, 0x117a, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x117c, 0xe1, 0x00); - write_config2(0xbc, 0x0000, 0x117e, 0xf0, 0x0c); - write_config2(0xbc, 0x0000, 0x1180, 0x05, 0x04); - write_config2(0xbc, 0x0000, 0x1182, 0x48, 0x44); - write_config2(0xbc, 0x0000, 0x1184, 0x4d, 0x56); - write_config2(0xbc, 0x0000, 0x1186, 0x88, 0x04); - write_config2(0xbc, 0x0000, 0x1188, 0x0f, 0xff); - write_config2(0xbc, 0x0000, 0x118a, 0xfc, 0xfc); - write_config2(0xbc, 0x0000, 0x118c, 0x1b, 0xf0); - write_config2(0xbc, 0x0000, 0x118e, 0x11, 0xf0); - write_config2(0xbc, 0x0000, 0x1190, 0x14, 0x05); - write_config2(0xbc, 0x0000, 0x1192, 0x08, 0x48); - write_config2(0xbc, 0x0000, 0x1194, 0x44, 0x4d); - write_config2(0xbc, 0x0000, 0x1196, 0x56, 0xff); - write_config2(0xbc, 0x0000, 0x1198, 0x1b, 0x44); - write_config2(0xbc, 0x0000, 0x119a, 0x3f, 0x28); - write_config2(0xbc, 0x0000, 0x119c, 0x04, 0x64); - write_config2(0xbc, 0x0000, 0x119e, 0x00, 0x28); - write_config2(0xbc, 0x0000, 0x11a0, 0x3f, 0x2a); - write_config2(0xbc, 0x0000, 0x11a2, 0x02, 0x7e); - - write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1270, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1278, 0x00, 0x36, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - - write_config2(0xbc, 0x0000, 0x12b6, 0x37, 0x00); - write_config2(0xbc, 0x0000, 0x12e4, 0xff, 0x03); - write_config2(0xbc, 0x0000, 0x12e6, 0xe1, 0x0f); - write_config2(0xbc, 0x0000, 0x12e8, 0xf0, 0x00); - write_config2(0xbc, 0x0000, 0x12b4, 0x02, 0xb0); - write_config2(0xbc, 0x0000, 0x12b8, 0x01, 0xc1); - write_config2(0xbc, 0x0000, 0x12ba, 0x00, 0x00); - write_config2(0xbc, 0x0000, 0x12bc, 0xe1, 0x00); - write_config2(0xbc, 0x0000, 0x12be, 0xf0, 0x0c); - write_config2(0xbc, 0x0000, 0x12c0, 0x05, 0x04); - write_config2(0xbc, 0x0000, 0x12c2, 0x48, 0x44); - write_config2(0xbc, 0x0000, 0x12c4, 0x4d, 0x56); - write_config2(0xbc, 0x0000, 0x12c6, 0x88, 0x04); - write_config2(0xbc, 0x0000, 0x12c8, 0x0f, 0xff); - write_config2(0xbc, 0x0000, 0x12ca, 0xfc, 0xfc); - write_config2(0xbc, 0x0000, 0x12cc, 0x1b, 0xf0); - write_config2(0xbc, 0x0000, 0x12ce, 0x11, 0xf0); - write_config2(0xbc, 0x0000, 0x12d0, 0x14, 0x05); - write_config2(0xbc, 0x0000, 0x12d2, 0x08, 0x48); - write_config2(0xbc, 0x0000, 0x12d4, 0x44, 0x4d); - write_config2(0xbc, 0x0000, 0x12d6, 0x56, 0xff); - write_config2(0xbc, 0x0000, 0x12d8, 0x1b, 0x44); - write_config2(0xbc, 0x0000, 0x12da, 0x3f, 0x28); - write_config2(0xbc, 0x0000, 0x12dc, 0x04, 0x64); - write_config2(0xbc, 0x0000, 0x12de, 0x00, 0x28); - write_config2(0xbc, 0x0000, 0x12e0, 0x3f, 0x2a); - write_config2(0xbc, 0x0000, 0x12e2, 0x02, 0x7e); - - write_config8(0xbc, 0x0001, 0x1710, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00); - - write_config2(0xbc, 0x0000, 0x1710, 0x00, 0xfc); - write_config2(0xbc, 0x0000, 0x1712, 0x00, 0x24); - write_config2(0xbc, 0x0000, 0x1714, 0x00, 0xf8); - write_config2(0xbc, 0x0000, 0x1716, 0x00, 0xe8); - write_config2(0xbc, 0x0000, 0x1718, 0x00, 0xda); - write_config2(0xbc, 0x0000, 0x171a, 0x00, 0xc6); - write_config2(0xbc, 0x0000, 0x171c, 0x00, 0x76); - write_config2(0xbc, 0x0000, 0x171e, 0x00, 0xea); - - write_config8(0xbc, 0x0001, 0x1500, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00); - write_config8(0xbc, 0x0001, 0x1500, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00); - write_config8(0xbc, 0x0001, 0x1504, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1510, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1610, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1518, 0x0f, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1618, 0x0f, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1518, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1618, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1518, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x151c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1618, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x161c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1524, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config8(0xbc, 0x0001, 0x1524, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x152c, 0x02, 0xd0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x152c, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1624, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config8(0xbc, 0x0001, 0x1624, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x162c, 0x01, 0x40, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x162c, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1530, 0x00, 0x00, 0x3e, 0x80, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1534, 0x36, 0xb0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1534, 0x00, 0x00, 0x1f, 0x40, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1538, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1630, 0x00, 0x00, 0x27, 0x10, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1634, 0x17, 0x70, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1634, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1638, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1550, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config8(0xbc, 0x0001, 0x1550, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1554, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1554, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1554, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1558, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1570, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1670, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1570, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1670, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1570, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1670, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x157c, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x167c, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x157c, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x167c, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x157c, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x167c, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x157c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00); - write_config8(0xbc, 0x0001, 0x167c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00); - write_config8(0xbc, 0x0001, 0x157c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70); - write_config8(0xbc, 0x0001, 0x167c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70); - write_config8(0xbc, 0x0001, 0x157c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); - write_config8(0xbc, 0x0001, 0x167c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); - write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00); - write_config8(0xbc, 0x0001, 0x1580, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1680, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff); - write_config8(0xbc, 0x0001, 0x1684, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1684, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1688, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a0c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a64, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a64, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1a68, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a68, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1a6c, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a6c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff); - write_config8(0xbc, 0x0001, 0x1a04, 0x01, 0x80, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00); - write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60); - write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10); - write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08); - write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06); - write_config8(0xbc, 0x0001, 0x1a14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); - write_config8(0xbc, 0x0001, 0x1a04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01); - - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00); - /* end of highly experimental part */ - - /* load "enc" firmware */ - dlfirm("firmware/mb86h57_h58_enc_h.bin"); - - read_config(0xbc, 0x0000, 0x0010, 2); - read_config(0xbc, 0x0000, 0x0012, 2); - read_config(0xbc, 0x0000, 0x0014, 2); - read_config(0xbc, 0x0000, 0x0016, 2); + configure_dev_mode(); write_config5(0xbd, 0x0000, 0x3300, 0xab, 0xa9, 0x0f, 0xa4, 0x55); write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x06); @@ -2183,7 +1691,8 @@ void configure_dev_720p() { write_config8(0xbc, 0x0001, 0x100c, 0x03, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00); write_config8(0xbc, 0x0001, 0x1a08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00); - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x04, 0xa0, 0x00, 0x00); + // encode mode command + scmd(SCMD_INIT, 0xa0, 0x0000); write_config2(0xbd, 0x0000, 0x4400, 0x06, 0x86); write_config2(0xbc, 0x0900, 0x0014, 0x00, 0x1e); @@ -11219,9 +10728,12 @@ void configure_dev_720p() { write_config8(0xbc, 0x0001, 0x1008, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f); write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00); write_config8(0xbc, 0x0001, 0x100c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00); - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x04, 0xa0, 0x00, 0x00); + + // encode mode command + scmd(SCMD_INIT, 0xa0, 0x0000); read_config(0xbc, 0x0800, 0x2008, 2); - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x05, 0x00, 0x00, 0x02); + // state change - start encoding + scmd(SCMD_STATE_CHANGE, 0x00, 0x0002); } diff --git a/remove.c b/remove.c index 914c4bb..fce8b48 100644 --- a/remove.c +++ b/remove.c @@ -8,18 +8,71 @@ #include "commands.h" void remove_elgato() { - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04); - + // state change - output null + scmd(SCMD_STATE_CHANGE, 0x00, 0x0004); + + // usually, this is done by a seperate thread, which runs in parallel. + // I'm just quickly hacking a way around it, to test some stuff. Taking + // a big, random number, which is slightly based on the USB traffic logs + // I'm working with. Receive empty data, after setting state change to + // null transfer. + for (int i = 0; i < 5000; i++) { + receive_data(); + } + + // we probably need some sleeps here and receive null output, to give + // the Elgato enough time to gracefully reset. Else, the next scmd() + // command seems to be ignored and we're leaving the device in an + // undefined state. read_config(0xbc, 0x0800, 0x2008, 2); + + for (int i = 0; i < 50; i++) { + receive_data(); + } + read_config(0xbc, 0x0900, 0x0074, 2); + + for (int i = 0; i < 50; i++) { + receive_data(); + } + read_config(0xbc, 0x0900, 0x01b0, 2); + + for (int i = 0; i < 50; i++) { + receive_data(); + } + read_config(0xbc, 0x0800, 0x2008, 2); + + for (int i = 0; i < 50; i++) { + receive_data(); + } + read_config(0xbc, 0x0800, 0x2008, 2); + + for (int i = 0; i < 50; i++) { + receive_data(); + } + write_config2(0xbc, 0x0900, 0x0074, 0x00, 0x04); + + for (int i = 0; i < 50; i++) { + receive_data(); + } + write_config2(0xbc, 0x0900, 0x01b0, 0x00, 0x00); - write_config6(0xb8, 0x0000, 0x0000, 0x00, 0x00, 0x05, 0x00, 0x00, 0x01); + for (int i = 0; i < 50; i++) { + receive_data(); + } + + // state change - stop encoding + scmd(SCMD_STATE_CHANGE, 0x00, 0x0001); + + for (int i = 0; i < 5; i++) { + receive_data(); + } read_config(0xbc, 0x0800, 0x2008, 2); read_config(0xbc, 0x0900, 0x0074, 2);