Hi,
I am now trying to use Jetson orin nano to connect a camera. Jetpack 5.1.2 L4T: 35.4.1
Hardware:
- a csi to 2* gsml board, with max9296a.
- camera imx390c + GW5200 gsml with max9295a yuv uyuy 8bit 1920 * 1080;
- camera OX03C10 max96717F 1920 * 1280 RAW12 bggr.
What I have down is activate the camera imx390C
. I used v4l2-ctl --stream-mmap -d /dev/video3
command to successfully get the stream.
But When I do the same step for camera OX03C10 max96717F
I got two errors that I could not understand.
- The first one is when I set
pixel_phase = "bggr";
I always get an error in the kernal message. I have no idea about that.
[ 58.884268] camera_sensor_ding 9-001b: probing camera camera_sensor v4l2 sensor.
[ 58.884481] camera_sensor_ding 9-001b: tegracam sensor driver:camera_sensor_v2.0.6
[ 58.884537] tegra-camrtc-capture-vi tegra-capture-vi: subdev camera_sensor_ding 9-001b bound
[ 58.885474] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
[ 58.894592] Mem abort info:
[ 58.897517] ESR = 0x96000004
[ 58.900697] EC = 0x25: DABT (current EL), IL = 32 bits
[ 58.906175] SET = 0, FnV = 0
[ 58.909334] EA = 0, S1PTW = 0
[ 58.912575] Data abort info:
[ 58.915539] ISV = 0, ISS = 0x00000004
[ 58.919504] CM = 0, WnR = 0
[ 58.922577] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000140b17000
[ 58.929243] [0000000000000000] pgd=0000000000000000, p4d=0000000000000000
- After successfully set the register configuration of OX03C10, max96717F and max9296A. With the value of the register of max9296a, 0x108, 0x11a, 0x12c, 0x13e, the streaming is setting successful. But when I tried to use
v4l2-ctl --stream-mmap -d /dev/video3
I got the error which showed that the vi got an error when getting the stream. I have already check the description of the err_data: 131072 in the kernal source but have no idea about the description. /** Frame end was forced by channel reset */ define CAPTURE_CHANNEL_ERROR_FORCE_FE MK_BIT32(17)
[ 98.291234] camera_sensor_ding 9-001b: probing camera camera_sensor v4l2 sensor.
[ 98.291447] camera_sensor_ding 9-001b: tegracam sensor driver:camera_sensor_v2.0.6
[ 98.291500] tegra-camrtc-capture-vi tegra-capture-vi: subdev camera_sensor_ding 9-001b bound
[ 98.292544] camera_sensor_ding 9-001b: Detected camera sensor
[ 98.292621] camera_sensor_ding 9-001c: probing camera camera_sensor v4l2 sensor.
[ 98.292702] debugfs: Directory 'camera_sensor_a' with parent '/' already present!
[ 98.302066] camera_sensor_ding 9-001c: tegracam sensor driver:camera_sensor_v2.0.6
[ 98.302137] tegra-camrtc-capture-vi tegra-capture-vi: subdev camera_sensor_ding 9-001c bound
[ 98.303730] camera_sensor_ding 9-001c: Detected camera sensor
[ 98.303813] camera_sensor_ding 10-001b: probing camera camera_sensor v4l2 sensor.
[ 98.303921] camera_sensor_ding 10-001b: tegracam sensor driver:camera_sensor_v2.0.6
[ 98.303956] tegra-camrtc-capture-vi tegra-capture-vi: subdev camera_sensor_ding 10-001b bound
[ 98.304489] camera_sensor_ding 10-001b: Detected camera sensor
[ 98.304544] camera_sensor_ding 10-001c: probing camera camera_sensor v4l2 sensor.
[ 98.304619] debugfs: Directory 'camera_sensor_c' with parent '/' already present!
[ 98.312366] camera_sensor_ding 10-001c: tegracam sensor driver:camera_sensor_v2.0.6
[ 98.312398] tegra-camrtc-capture-vi tegra-capture-vi: subdev camera_sensor_ding 10-001c bound
[ 98.312790] camera_sensor_ding 10-001c: Detected camera sensor
[ 295.411145] camera_sensor_ding 10-001c: camera_sensor_power_on: power on
[ 295.422193] bwmgr API not supported
[ 295.423234] camera_sensor_ding 10-001c: mode id= 0
[ 295.435916] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 0, flags: 0, err_data 131072
[ 295.446145] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 0, flags: 0, err_data 131072
[ 295.467985] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 0, flags: 0, err_data 131072
[ 295.478487] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 0, flags: 0, err_data 131072
[ 296.895303] bwmgr API not supported
[ 296.895986] camera_sensor_ding 10-001c: camera_sensor_power_off:
working dts for imx390
#define MAX9296_CAM_I2C_MUX TEGRA234_AON_GPIO(CC, 3)
/ {
tegra-capture-vi {
num-channels = <4>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_a_vi_in0: endpoint {
vc-id = <0>;
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_csi_out0>;
};
};
port@1 {
reg = <1>;
max9296_a_vi_in1: endpoint {
vc-id = <1>;
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_csi_out1>;
};
};
port@2 {
reg = <2>;
max9296_b_vi_in0: endpoint {
vc-id = <0>;
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_csi_out0>;
};
};
port@3 {
reg = <3>;
max9296_b_vi_in1: endpoint {
vc-id = <1>;
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_csi_out1>;
};
};
};
};
host1x@13e00000 {
nvcsi@15a00000 {
num-channels = <4>;
#address-cells = <1>;
#size-cells = <0>;
channel@0 {
reg = <0>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_a_csi_in0: endpoint@0 {
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_out0>;
};
};
port@1 {
reg = <1>;
max9296_a_csi_out0: endpoint@1 {
remote-endpoint = <&max9296_a_vi_in0>;
};
};
};
};
channel@1 {
reg = <1>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_a_csi_in1: endpoint@2 {
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_out1>;
};
};
port@1 {
reg = <1>;
max9296_a_csi_out1: endpoint@3 {
remote-endpoint = <&max9296_a_vi_in1>;
};
};
};
};
channel@2 {
reg = <2>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_b_csi_in0: endpoint@0 {
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_out0>;
};
};
port@1 {
reg = <1>;
max9296_b_csi_out0: endpoint@1 {
remote-endpoint = <&max9296_b_vi_in0>;
};
};
};
};
channel@3 {
reg = <3>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_b_csi_in1: endpoint@2 {
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_out1>;
};
};
port@1 {
reg = <1>;
max9296_b_csi_out1: endpoint@3 {
remote-endpoint = <&max9296_b_vi_in1>;
};
};
};
};
};
};
max9296_cam_i2cmux{
compatible = "i2c-mux-gpio";
#address-cells = <1>;
#size-cells = <0>;
i2c-parent = <&cam_i2c>;
mux-gpios = <&tegra_aon_gpio MAX9296_CAM_I2C_MUX GPIO_ACTIVE_HIGH>;
i2c@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
max9296_a@1b {
compatible = "camera,sensor";
reg = <0x1b>;
/* Physical dimensions of sensor */
physical_w = "15.0";
physical_h = "12.5";
sensor_model ="max9296";
/* Defines number of frames to be dropped by driver internally after applying */
/* sensor crop settings. Some sensors send corrupt frames after applying */
/* crop co-ordinates */
post_crop_frame_drop = "0";
/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
use_decibel_gain = "true";
/* enable CID_SENSOR_MODE_ID for sensor modes selection */
use_sensor_mode_id = "false";
mode0 {
mclk_khz = "24000";
num_lanes = "4";
tegra_sinterface = "serial_a";
vc_id = "0";
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = "0";
dynamic_pixel_bit_depth = "16";
csi_pixel_bit_depth = "16";
mode_type = "yuv";
pixel_phase = "yuyv";
// lane_polarity = "6";
active_w = "1920";
active_h = "1080";
readout_orientation = "0";
line_length = "1920";
inherent_gain = "1";
pix_clk_hz = "74250000";
/*Skew calibration is required if sensor or deserializer is using DPHY, and the output data rate is > 1.5Gbps.*/
/*Output data rate = (sensor or deserializer pixel clock in hertz) * (bits per pixel) / (number of CSI lanes)*/
serdes_pix_clk_hz = "300000000";
gain_factor = "10";
min_gain_val = "1"; /* dB */
max_gain_val = "480"; /* dB */
step_gain_val = "3"; /* 0.3 */
default_gain = "0";
min_hdr_ratio = "1";
max_hdr_ratio = "1";
framerate_factor = "1000000";
min_framerate = "30000000"; // 30fps
max_framerate = "30000000"; // 60fps
step_framerate = "1";
default_framerate = "30000000";
exposure_factor = "1000000";
min_exp_time = "30"; /*us, 2 lines*/
max_exp_time = "660000";
step_exp_time = "1";
default_exp_time = "33334";/* us */
embedded_metadata_height = "0";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_a_out0: endpoint {
vc-id = <0>;
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_csi_in0>;
};
};
};
};
max9296_a@1c {
compatible = "camera,sensor";
reg = <0x1c>;
/* Physical dimensions of sensor */
physical_w = "15.0";
physical_h = "12.5";
sensor_model ="max9296";
/* Defines number of frames to be dropped by driver internally after applying */
/* sensor crop settings. Some sensors send corrupt frames after applying */
/* crop co-ordinates */
post_crop_frame_drop = "0";
/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
use_decibel_gain = "true";
/* enable CID_SENSOR_MODE_ID for sensor modes selection */
use_sensor_mode_id = "false";
mode0 {
mclk_khz = "24000";
num_lanes = "4";
tegra_sinterface = "serial_a";
vc_id = "0";
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = "0";
dynamic_pixel_bit_depth = "16";
csi_pixel_bit_depth = "16";
mode_type = "yuv";
pixel_phase = "yuyv";
// lane_polarity = "6";
active_w = "1920";
active_h = "1080";
readout_orientation = "0";
line_length = "1920";
inherent_gain = "1";
pix_clk_hz = "74250000";
/*Skew calibration is required if sensor or deserializer is using DPHY, and the output data rate is > 1.5Gbps.*/
/*Output data rate = (sensor or deserializer pixel clock in hertz) * (bits per pixel) / (number of CSI lanes)*/
serdes_pix_clk_hz = "300000000";
gain_factor = "10";
min_gain_val = "1"; /* dB */
max_gain_val = "480"; /* dB */
step_gain_val = "3"; /* 0.3 */
default_gain = "0";
min_hdr_ratio = "1";
max_hdr_ratio = "1";
framerate_factor = "1000000";
min_framerate = "30000000"; // 30fps
max_framerate = "30000000"; // 60fps
step_framerate = "1";
default_framerate = "30000000";
exposure_factor = "1000000";
min_exp_time = "30"; /*us, 2 lines*/
max_exp_time = "660000";
step_exp_time = "1";
default_exp_time = "33334";/* us */
embedded_metadata_height = "0";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_a_out1: endpoint {
vc-id = <1>;
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_csi_in1>;
};
};
};
};
};
i2c@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
max9296_b@1b {
compatible = "camera,sensor";
reg = <0x1b>;
/* Physical dimensions of sensor */
physical_w = "15.0";
physical_h = "12.5";
sensor_model ="max9296";
/* Defines number of frames to be dropped by driver internally after applying */
/* sensor crop settings. Some sensors send corrupt frames after applying */
/* crop co-ordinates */
post_crop_frame_drop = "0";
/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
use_decibel_gain = "true";
/* enable CID_SENSOR_MODE_ID for sensor modes selection */
use_sensor_mode_id = "false";
mode0 {
mclk_khz = "24000";
num_lanes = "4";
tegra_sinterface = "serial_a";
vc_id = "0";
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = "0";
dynamic_pixel_bit_depth = "16";
csi_pixel_bit_depth = "16";
mode_type = "yuv";
pixel_phase = "yuyv";
active_w = "1920";
active_h = "1080";
readout_orientation = "0";
line_length = "1920";
inherent_gain = "1";
pix_clk_hz = "74250000";
/*Skew calibration is required if sensor or deserializer is using DPHY, and the output data rate is > 1.5Gbps.*/
/*Output data rate = (sensor or deserializer pixel clock in hertz) * (bits per pixel) / (number of CSI lanes)*/
serdes_pix_clk_hz = "300000000";
gain_factor = "10";
min_gain_val = "1"; /* dB */
max_gain_val = "480"; /* dB */
step_gain_val = "3"; /* 0.3 */
default_gain = "0";
min_hdr_ratio = "1";
max_hdr_ratio = "1";
framerate_factor = "1000000";
min_framerate = "30000000"; // 30fps
max_framerate = "30000000"; // 60fps
step_framerate = "1";
default_framerate = "30000000";
exposure_factor = "1000000";
min_exp_time = "30"; /*us, 2 lines*/
max_exp_time = "660000";
step_exp_time = "1";
default_exp_time = "33334";/* us */
embedded_metadata_height = "0";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_b_out0: endpoint {
vc-id = <0>;
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_csi_in0>;
};
};
};
};
max9296_b@1c {
compatible = "camera,sensor";
reg = <0x1c>;
/* Physical dimensions of sensor */
physical_w = "15.0";
physical_h = "12.5";
sensor_model ="max9296";
/* Defines number of frames to be dropped by driver internally after applying */
/* sensor crop settings. Some sensors send corrupt frames after applying */
/* crop co-ordinates */
post_crop_frame_drop = "0";
/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
use_decibel_gain = "true";
/* enable CID_SENSOR_MODE_ID for sensor modes selection */
use_sensor_mode_id = "false";
mode0 {
mclk_khz = "24000";
num_lanes = "4";
tegra_sinterface = "serial_a";
vc_id = "0";
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = "0";
dynamic_pixel_bit_depth = "16";
csi_pixel_bit_depth = "16";
mode_type = "yuv";
pixel_phase = "yuyv";
active_w = "1920";
active_h = "1080";
readout_orientation = "0";
line_length = "1920";
inherent_gain = "1";
pix_clk_hz = "74250000";
/*Skew calibration is required if sensor or deserializer is using DPHY, and the output data rate is > 1.5Gbps.*/
/*Output data rate = (sensor or deserializer pixel clock in hertz) * (bits per pixel) / (number of CSI lanes)*/
serdes_pix_clk_hz = "300000000";
gain_factor = "10";
min_gain_val = "1"; /* dB */
max_gain_val = "480"; /* dB */
step_gain_val = "3"; /* 0.3 */
default_gain = "0";
min_hdr_ratio = "1";
max_hdr_ratio = "1";
framerate_factor = "1000000";
min_framerate = "30000000"; // 30fps
max_framerate = "30000000"; // 60fps
step_framerate = "1";
default_framerate = "30000000";
exposure_factor = "1000000";
min_exp_time = "30"; /*us, 2 lines*/
max_exp_time = "660000";
step_exp_time = "1";
default_exp_time = "33334";/* us */
embedded_metadata_height = "0";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_b_out1: endpoint {
vc-id = <1>;
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_csi_in1>;
};
};
};
};
};
};
tegra-camera-platform {
compatible = "nvidia, tegra-camera-platform";
/**
* Physical settings to calculate max ISO BW
*
* num_csi_lanes = <>;
* Total number of CSI lanes when all cameras are active
*
* max_lane_speed = <>;
* Max lane speed in Kbit/s
*
* min_bits_per_pixel = <>;
* Min bits per pixel
*
* vi_peak_byte_per_pixel = <>;
* Max byte per pixel for the VI ISO case
*
* vi_bw_margin_pct = <>;
* Vi bandwidth margin in percentage
*
* max_pixel_rate = <>;
* Max pixel rate in Kpixel/s for the ISP ISO case
*
* isp_peak_byte_per_pixel = <>;
* Max byte per pixel for the ISP ISO case
*
* isp_bw_margin_pct = <>;
* Isp bandwidth margin in percentage
*/
num_csi_lanes = <4>;
max_lane_speed = <15000000>;
min_bits_per_pixel = <16>;
vi_peak_byte_per_pixel = <2>;
vi_bw_margin_pct = <25>;
// the isp setting is not mandatory(checked)
// isp_peak_byte_per_pixel = <5>;
// isp_bw_margin_pct = <25>;
/**
* The general guideline for naming badge_info contains 3 parts, and is as follows,
* The first part is the camera_board_id for the module; if the module is in a FFD
* platform, then use the platform name for this part.
* The second part contains the position of the module, ex. "rear" or "front".
* The third part contains the last 6 characters of a part number which is found
* in the module's specsheet from the vender.
*/
modules {
module0 {
badge = "max9296_cam0";
position = "cam0";
orientation = "1";
drivernode0 {
pcl_id = "v4l2_sensor";
devname = "cam0 9-0041";
proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/sensing_imx390_a@41";
};
};
module1 {
badge = "max9296_cam0";
position = "cam1";
orientation = "1";
drivernode0 {
pcl_id = "v4l2_sensor";
devname = "cam1 9-0042";
proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/sensing_imx390_b@42";
};
};
module2 {
badge = "max9296_cam0";
position = "cam2";
orientation = "1";
drivernode0 {
pcl_id = "v4l2_sensor";
devname = "cam2 10-0043";
proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/sensing_imx390_c@43";
};
};
module3 {
badge = "max9296_cam0";
position = "cam3";
orientation = "1";
drivernode0 {
pcl_id = "v4l2_sensor";
devname = "cam3 10-0044";
proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/sensing_imx390_d@44";
};
};
};
};
};
not working file for max96717F
#define MAX9296_CAM_I2C_MUX TEGRA234_AON_GPIO(CC, 3)
/ {
tegra-capture-vi {
num-channels = <4>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_a_vi_in0: endpoint {
vc-id = <0>;
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_csi_out0>;
};
};
port@1 {
reg = <1>;
max9296_a_vi_in1: endpoint {
vc-id = <1>;
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_csi_out1>;
};
};
port@2 {
reg = <2>;
max9296_b_vi_in0: endpoint {
vc-id = <0>;
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_csi_out0>;
};
};
port@3 {
reg = <3>;
max9296_b_vi_in1: endpoint {
vc-id = <1>;
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_csi_out1>;
};
};
};
};
host1x@13e00000 {
nvcsi@15a00000 {
status = "okay";
num-channels = <4>;
#address-cells = <1>;
#size-cells = <0>;
channel@0 {
reg = <0>;
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
port@0 {
reg = <0>;
status = "okay";
max9296_a_csi_in0: endpoint@0 {
status = "okay";
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_out0>;
};
};
port@1 {
reg = <1>;
status = "okay";
max9296_a_csi_out0: endpoint@1 {
status = "okay";
remote-endpoint = <&max9296_a_vi_in0>;
};
};
};
};
channel@1 {
reg = <1>;
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
port@0 {
reg = <0>;
status = "okay";
max9296_a_csi_in1: endpoint@2 {
status = "okay";
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_out1>;
};
};
port@1 {
reg = <1>;
status = "okay";
max9296_a_csi_out1: endpoint@3 {
status = "okay";
remote-endpoint = <&max9296_a_vi_in1>;
};
};
};
};
channel@2 {
reg = <2>;
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
port@0 {
reg = <0>;
status = "okay";
max9296_b_csi_in0: endpoint@0 {
status = "okay";
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_out0>;
};
};
port@1 {
reg = <1>;
status = "okay";
max9296_b_csi_out0: endpoint@1 {
status = "okay";
remote-endpoint = <&max9296_b_vi_in0>;
};
};
};
};
channel@3 {
reg = <3>;
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
port@0 {
reg = <0>;
status = "okay";
max9296_b_csi_in1: endpoint@2 {
status = "okay";
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_out1>;
};
};
port@1 {
reg = <1>;
status = "okay";
max9296_b_csi_out1: endpoint@3 {
status = "okay";
remote-endpoint = <&max9296_b_vi_in1>;
};
};
};
};
};
};
max9296_cam_i2cmux{
compatible = "i2c-mux-gpio";
#address-cells = <1>;
#size-cells = <0>;
i2c-parent = <&cam_i2c>;
mux-gpios = <&tegra_aon_gpio MAX9296_CAM_I2C_MUX GPIO_ACTIVE_HIGH>;
i2c@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
max9296_a@1b {
compatible = "camera,sensor";
reg = <0x1b>;
/* Physical dimensions of sensor */
physical_w = "24.0";
physical_h = "23.5";
sensor_model ="OX03C10";
/* Defines number of frames to be dropped by driver internally after applying */
/* sensor crop settings. Some sensors send corrupt frames after applying */
/* crop co-ordinates */
post_crop_frame_drop = "0";
/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
use_decibel_gain = "true";
/* enable CID_SENSOR_MODE_ID for sensor modes selection */
use_sensor_mode_id = "false";
mode0 {
mclk_khz = "24000";
num_lanes = "4";
tegra_sinterface = "serial_a";
vc_id = "0";
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = "0";
dynamic_pixel_bit_depth = "12";
csi_pixel_bit_depth = "12";
mode_type = "bayer";
pixel_phase = "rggb";
active_w = "1920";
active_h = "1280";
readout_orientation = "0";
line_length = "1920";
inherent_gain = "1";
pix_clk_hz = "124416000";
/*Skew calibration is required if sensor or deserializer is using DPHY, and the output data rate is > 1.5Gbps.*/
/*Output data rate = (sensor or deserializer pixel clock in hertz) * (bits per pixel) / (number of CSI lanes)*/
serdes_pix_clk_hz = "373248000";
gain_factor = "10";
min_gain_val = "1"; /* dB */
max_gain_val = "140"; /* dB */
step_gain_val = "3"; /* 0.3 */
default_gain = "0";
min_hdr_ratio = "1";
max_hdr_ratio = "1";
framerate_factor = "1000000";
min_framerate = "60000000"; // 30fps
max_framerate = "60000000"; // 60fps
step_framerate = "1";
default_framerate = "60000000";
exposure_factor = "1000000";
min_exp_time = "30"; /*us, 2 lines*/
max_exp_time = "660000";
step_exp_time = "1";
default_exp_time = "33334";/* us */
embedded_metadata_height = "0";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_a_out0: endpoint {
vc-id = <0>;
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_csi_in0>;
};
};
};
};
max9296_a@1c {
compatible = "camera,sensor";
reg = <0x1c>;
/* Physical dimensions of sensor */
physical_w = "24.0";
physical_h = "23.5";
sensor_model ="OX03C10";
/* Defines number of frames to be dropped by driver internally after applying */
/* sensor crop settings. Some sensors send corrupt frames after applying */
/* crop co-ordinates */
post_crop_frame_drop = "0";
/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
use_decibel_gain = "true";
/* enable CID_SENSOR_MODE_ID for sensor modes selection */
use_sensor_mode_id = "false";
mode0 {
mclk_khz = "24000";
num_lanes = "4";
tegra_sinterface = "serial_a";
vc_id = "0";
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = "0";
dynamic_pixel_bit_depth = "12";
csi_pixel_bit_depth = "12";
mode_type = "bayer";
pixel_phase = "rggb";
active_w = "1920";
active_h = "1280";
readout_orientation = "0";
line_length = "1920";
inherent_gain = "1";
pix_clk_hz = "74250000";
/*Skew calibration is required if sensor or deserializer is using DPHY, and the output data rate is > 1.5Gbps.*/
/*Output data rate = (sensor or deserializer pixel clock in hertz) * (bits per pixel) / (number of CSI lanes)*/
serdes_pix_clk_hz = "300000000";
gain_factor = "10";
min_gain_val = "1"; /* dB */
max_gain_val = "140"; /* dB */
step_gain_val = "3"; /* 0.3 */
default_gain = "0";
min_hdr_ratio = "1";
max_hdr_ratio = "1";
framerate_factor = "1000000";
min_framerate = "30000000"; // 30fps
max_framerate = "60000000"; // 60fps
step_framerate = "1";
default_framerate = "30000000";
exposure_factor = "1000000";
min_exp_time = "30"; /*us, 2 lines*/
max_exp_time = "660000";
step_exp_time = "1";
default_exp_time = "33334";/* us */
embedded_metadata_height = "0";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_a_out1: endpoint {
vc-id = <1>;
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&max9296_a_csi_in1>;
};
};
};
};
};
i2c@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
max9296_b@1b {
compatible = "camera,sensor";
reg = <0x1b>;
/* Physical dimensions of sensor */
physical_w = "24.0";
physical_h = "23.5";
sensor_model ="OX03C10";
/* Defines number of frames to be dropped by driver internally after applying */
/* sensor crop settings. Some sensors send corrupt frames after applying */
/* crop co-ordinates */
post_crop_frame_drop = "0";
/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
use_decibel_gain = "true";
/* enable CID_SENSOR_MODE_ID for sensor modes selection */
use_sensor_mode_id = "false";
mode0 {
mclk_khz = "24000";
num_lanes = "4";
tegra_sinterface = "serial_a";
vc_id = "0";
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = "0";
dynamic_pixel_bit_depth = "12";
csi_pixel_bit_depth = "12";
mode_type = "bayer";
pixel_phase = "rggb";
active_w = "1920";
active_h = "1280";
readout_orientation = "0";
line_length = "1920";
inherent_gain = "1";
pix_clk_hz = "74250000";
/*Skew calibration is required if sensor or deserializer is using DPHY, and the output data rate is > 1.5Gbps.*/
/*Output data rate = (sensor or deserializer pixel clock in hertz) * (bits per pixel) / (number of CSI lanes)*/
serdes_pix_clk_hz = "300000000";
gain_factor = "10";
min_gain_val = "1"; /* dB */
max_gain_val = "140"; /* dB */
step_gain_val = "3"; /* 0.3 */
default_gain = "0";
min_hdr_ratio = "1";
max_hdr_ratio = "1";
framerate_factor = "1000000";
min_framerate = "30000000"; // 30fps
max_framerate = "60000000"; // 60fps
step_framerate = "1";
default_framerate = "30000000";
exposure_factor = "1000000";
min_exp_time = "30"; /*us, 2 lines*/
max_exp_time = "660000";
step_exp_time = "1";
default_exp_time = "33334";/* us */
embedded_metadata_height = "0";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_b_out0: endpoint {
vc-id = <0>;
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_csi_in0>;
};
};
};
};
max9296_b@1c {
compatible = "camera,sensor";
reg = <0x1c>;
/* Physical dimensions of sensor */
physical_w = "24.0";
physical_h = "23.5";
sensor_model ="OX03C10";
/* Defines number of frames to be dropped by driver internally after applying */
/* sensor crop settings. Some sensors send corrupt frames after applying */
/* crop co-ordinates */
post_crop_frame_drop = "0";
/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
use_decibel_gain = "true";
/* enable CID_SENSOR_MODE_ID for sensor modes selection */
use_sensor_mode_id = "false";
mode0 {
mclk_khz = "24000";
num_lanes = "4";
tegra_sinterface = "serial_a";
vc_id = "0";
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = "0";
dynamic_pixel_bit_depth = "12";
csi_pixel_bit_depth = "12";
mode_type = "bayer";
pixel_phase = "rggb";
active_w = "1920";
active_h = "1280";
readout_orientation = "0";
line_length = "1920";
inherent_gain = "1";
pix_clk_hz = "99000000";
/*Skew calibration is required if sensor or deserializer is using DPHY, and the output data rate is > 1.5Gbps.*/
/*Output data rate = (sensor or deserializer pixel clock in hertz) * (bits per pixel) / (number of CSI lanes)*/
serdes_pix_clk_hz = "400000000";
gain_factor = "10";
min_gain_val = "1"; /* dB */
max_gain_val = "140"; /* dB */
step_gain_val = "3"; /* 0.3 */
default_gain = "0";
min_hdr_ratio = "1";
max_hdr_ratio = "1";
framerate_factor = "1000000";
min_framerate = "10000000"; // 30fps
max_framerate = "60000000"; // 60fps
step_framerate = "1";
default_framerate = "30000000";
exposure_factor = "1000000";
min_exp_time = "30"; /*us, 2 lines*/
max_exp_time = "660000";
step_exp_time = "1";
default_exp_time = "33334";/* us */
embedded_metadata_height = "0";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
max9296_b_out1: endpoint {
vc-id = <1>;
port-index = <2>;
bus-width = <2>;
remote-endpoint = <&max9296_b_csi_in1>;
};
};
};
};
};
};
tegra-camera-platform {
compatible = "nvidia, tegra-camera-platform";
/**
* Physical settings to calculate max ISO BW
*
* num_csi_lanes = <>;
* Total number of CSI lanes when all cameras are active
*
* max_lane_speed = <>;
* Max lane speed in Kbit/s
*
* min_bits_per_pixel = <>;
* Min bits per pixel
*
* vi_peak_byte_per_pixel = <>;
* Max byte per pixel for the VI ISO case
*
* vi_bw_margin_pct = <>;
* Vi bandwidth margin in percentage
*
* max_pixel_rate = <>;
* Max pixel rate in Kpixel/s for the ISP ISO case
*
* isp_peak_byte_per_pixel = <>;
* Max byte per pixel for the ISP ISO case
*
* isp_bw_margin_pct = <>;
* Isp bandwidth margin in percentage
*/
num_csi_lanes = <4>;
max_lane_speed = <15000000>;
min_bits_per_pixel = <12>;
vi_peak_byte_per_pixel = <2>;
vi_bw_margin_pct = <25>;
// isp_peak_byte_per_pixel = <5>;
// isp_bw_margin_pct = <25>;
/**
* The general guideline for naming badge_info contains 3 parts, and is as follows,
* The first part is the camera_board_id for the module; if the module is in a FFD
* platform, then use the platform name for this part.
* The second part contains the position of the module, ex. "rear" or "front".
* The third part contains the last 6 characters of a part number which is found
* in the module's specsheet from the vender.
*/
modules {
module0 {
badge = "max9296_cam0";
position = "cam0";
orientation = "1";
drivernode0 {
pcl_id = "v4l2_sensor";
devname = "cam0 9-0041";
proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/hirain_96717_a@41";
};
};
module1 {
badge = "max9296_cam0";
position = "cam1";
orientation = "1";
drivernode0 {
pcl_id = "v4l2_sensor";
devname = "cam1 9-0042";
proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/hirain_96717_b@42";
};
};
module2 {
badge = "max9296_cam0";
position = "cam2";
orientation = "1";
drivernode0 {
pcl_id = "v4l2_sensor";
devname = "cam2 10-0043";
proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/hirain_96717_c@43";
};
};
module3 {
badge = "max9296_cam0";
position = "cam3";
orientation = "1";
drivernode0 {
pcl_id = "v4l2_sensor";
devname = "cam3 10-0044";
proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/hirain_96717_d@44";
};
};
};
};
};
the drivering that I create. The register configuration is setting in user mode as below.
camera_gmsl_mode_tbls.h.txt (511 Bytes)
camera_gmsl_driver.c.txt (8.3 KB)
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <linux/i2c.h>
#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
// use i2cdetect -l to check
#define GROUPA_DEVICE "/dev/i2c-9"
#define GROUPB_DEVICE "/dev/i2c-10"
struct cam_cfg {
// device address use i2cdetect -r [i2c channel]
unsigned char dev_addr;
// delay after cmd has finish, unit: us
unsigned long delay;
// cmd len for buf
unsigned char len;
// I2C buffer, 8bit or 16bit I2C address and 8bit data
unsigned char buf[4];
};
// the size of the config_list
long unsigned int list_size;
// handle config
void handle_cfg(int fd, struct cam_cfg *config_list, long unsigned int list_size);
// i2c command list max96717
struct cam_cfg max9295_max96717_list[] = {
{0x4a,0xf4240, 0x03, 0x00, 0x10, 0x81},
{0x4a,0x3e8, 0x03, 0x03, 0x13, 0x00},
{ 0x4a, 0xf4240, 0x03, 0x00, 0x01, 0x01 },
{ 0x4a, 0x30D40, 0x03, 0x04, 0x0a, 0x00 },
{ 0x4a, 0x30D40, 0x03, 0x04, 0x8a, 0x00 },
{ 0x4a, 0x30D40, 0x03, 0x04, 0xca, 0x00 },
{0x4a,0x30D40, 0x03, 0x00, 0x10, 0x22},
{0x40,0x3e8, 0x03, 0x00, 0x00, 0x84},
{ 0x42, 0x30D40, 0x03, 0x03, 0x18, 0x2c },
{ 0x42, 0x30D40, 0x03, 0x03, 0x31, 0x33 },
{ 0x42, 0x30D40, 0x03, 0x03, 0xf1, 0x09 },
{ 0x42, 0x30D40, 0x03, 0x03, 0x32, 0xe0 },
{ 0x42, 0x30D40, 0x03, 0x05, 0x70, 0x00 },
{ 0x42, 0x30D40, 0x03, 0x03, 0x08, 0x64 },
{ 0x42, 0x30D40, 0x03, 0x00, 0x11, 0x43 },
{ 0x42, 0x30D40, 0x03, 0x03, 0xf0, 0x51 },
{ 0x42, 0x30D40, 0x03, 0x00, 0x03, 0x03 },
{ 0x42, 0x30D40, 0x03, 0x00, 0x06, 0xb1 },
{ 0x42, 0x30D40, 0x03, 0x00, 0x02, 0x43 },
{ 0x42, 0x30D40, 0x03, 0x03, 0x13, 0x02 },
//PHYA linka pipez vc=0
{0x4a,0x3e8, 0x03, 0x04, 0x0b,0x07},
{0x4a,0x3e8, 0x03, 0x04, 0x2d,0x15},
{0x4a,0x3e8, 0x03, 0x04, 0x0d,0x1e},
{0x4a,0x3e8, 0x03, 0x04, 0x0e,0x1e},
{0x4a,0x3e8, 0x03, 0x04, 0x0f,0x00},
{0x4a,0x3e8, 0x03, 0x04, 0x10,0x00},
{0x4a,0x3e8, 0x03, 0x04, 0x11,0x01},
{0x4a,0x3e8, 0x03, 0x04, 0x12,0x01},
//PHYA linkb pipex vc=1
{0x4a,0x3e8, 0x03, 0x04, 0x4b,0x07},
{0x4a,0x3e8, 0x03, 0x04, 0x6d,0x15},
{0x4a,0x3e8, 0x03, 0x04, 0x4d,0x1e},
{0x4a,0x3e8, 0x03, 0x04, 0x4e,0x5e},
{0x4a,0x3e8, 0x03, 0x04, 0x4f,0x00},
{0x4a,0x3e8, 0x03, 0x04, 0x50,0x40},
{0x4a,0x3e8, 0x03, 0x04, 0x51,0x01},
{0x4a,0x3e8, 0x03, 0x04, 0x52,0x41},
{0x4a,0x3e8, 0x03, 0x00, 0x03,0x40},
{ 0x4a, 0x30D40, 0x03, 0x04, 0x4a, 0xc0 },
{ 0x4a, 0x30D40, 0x03, 0x03, 0x30, 0x04 },
{ 0x4a, 0x30D40, 0x03, 0x03, 0x33, 0x1b },
{ 0x4a, 0x30D40, 0x03, 0x03, 0x34, 0xe4 },
{ 0x4a, 0x30D40, 0x03, 0x03, 0x35, 0x00 },
{ 0x4a, 0x30D40, 0x03, 0x03, 0x20, 0x2f },
{0x4a,0x3e8, 0x03, 0x03, 0x1d,0x2c},
{0x4a,0x3e8, 0x03, 0x03, 0x13,0x02},
{ 0x4a, 0x30D40, 0x03, 0x00, 0x50, 0x00 },
{ 0x4a, 0x30D40, 0x03, 0x00, 0x51, 0x02 },
{ 0x4a, 0x30D40, 0x03, 0x00, 0x52, 0x01 },
{ 0x4a, 0x30D40, 0x03, 0x00, 0x53, 0x03 },
{ 0x4a, 0x30D40, 0x03, 0x03, 0x32, 0xf0 },
{ 0x36, 0x1388, 0x03, 0x01, 0x00, 0x00 },
{ 0x36, 0x1388, 0x03, 0x01, 0x03, 0x01 },
{ 0x36, 0x1388, 0x03, 0x01, 0x07, 0x01 },
{ 0x36, 0x1388, 0x03, 0x00, 0x00, 0xff },
{ 0x36, 0x1388, 0x03, 0x4d, 0x5a, 0x1a },
{ 0x36, 0x1388, 0x03, 0x4d, 0x09, 0xff },
{ 0x36, 0x1388, 0x03, 0x4d, 0x09, 0xdf },
{ 0x36, 0x1388, 0x03, 0x32, 0x08, 0x04 },
{ 0x36, 0x1388, 0x03, 0x46, 0x20, 0x04 },
{ 0x36, 0x1388, 0x03, 0x32, 0x08, 0x14 },
{ 0x36, 0x1388, 0x03, 0x32, 0x08, 0x05 },
{ 0x36, 0x1388, 0x03, 0x46, 0x20, 0x04 },
{ 0x36, 0x1388, 0x03, 0x32, 0x08, 0x15 },
{ 0x36, 0x1388, 0x03, 0x32, 0x08, 0x02 },
{ 0x36, 0x1388, 0x03, 0x35, 0x07, 0x00 },
{ 0x36, 0x1388, 0x03, 0x32, 0x08, 0x12 },
{ 0x36, 0x1388, 0x03, 0x32, 0x08, 0xa2 },
{ 0x36, 0x1388, 0x03, 0x03, 0x01, 0xc8 },
{ 0x36, 0x1388, 0x03, 0x03, 0x03, 0x01 },
{ 0x36, 0x1388, 0x03, 0x03, 0x04, 0x01 },
{ 0x36, 0x1388, 0x03, 0x03, 0x05, 0x0b },
{ 0x36, 0x1388, 0x03, 0x03, 0x06, 0x04 },
{ 0x36, 0x1388, 0x03, 0x03, 0x07, 0x03 },
{ 0x36, 0x1388, 0x03, 0x03, 0x16, 0x00 },
{ 0x36, 0x1388, 0x03, 0x03, 0x17, 0x00 },
{ 0x36, 0x1388, 0x03, 0x03, 0x18, 0x00 },
{ 0x36, 0x1388, 0x03, 0x03, 0x23, 0x05 },
{ 0x36, 0x1388, 0x03, 0x03, 0x24, 0x01 },
{ 0x36, 0x1388, 0x03, 0x03, 0x25, 0x0c },
{ 0x36, 0x1388, 0x03, 0x04, 0x00, 0xe0 },
{ 0x36, 0x1388, 0x03, 0x04, 0x01, 0x80 },
{ 0x36, 0x1388, 0x03, 0x04, 0x03, 0xde },
{ 0x36, 0x1388, 0x03, 0x04, 0x04, 0x34 },
{ 0x36, 0x1388, 0x03, 0x04, 0x05, 0x3b },
{ 0x36, 0x1388, 0x03, 0x04, 0x06, 0xde },
{ 0x36, 0x1388, 0x03, 0x04, 0x07, 0x08 },
{ 0x36, 0x1388, 0x03, 0x04, 0x08, 0xe0 },
{ 0x36, 0x1388, 0x03, 0x04, 0x09, 0x7f },
{ 0x36, 0x1388, 0x03, 0x04, 0x0a, 0xde },
{ 0x36, 0x1388, 0x03, 0x04, 0x0b, 0x34 },
{ 0x36, 0x1388, 0x03, 0x04, 0x0c, 0x47 },
{ 0x36, 0x1388, 0x03, 0x04, 0x0d, 0xd8 },
{ 0x36, 0x1388, 0x03, 0x04, 0x0e, 0x08 },
{ 0x36, 0x1388, 0x03, 0x28, 0x03, 0xfe },
{ 0x36, 0x1388, 0x03, 0x28, 0x0b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x28, 0x0c, 0x79 },
{ 0x36, 0x1388, 0x03, 0x30, 0x01, 0x03 },
{ 0x36, 0x1388, 0x03, 0x30, 0x02, 0xf8 },
{ 0x36, 0x1388, 0x03, 0x30, 0x05, 0x80 },
{ 0x36, 0x1388, 0x03, 0x30, 0x07, 0x01 },
{ 0x36, 0x1388, 0x03, 0x30, 0x08, 0x80 },
{ 0x36, 0x1388, 0x03, 0x30, 0x12, 0x41 },
{ 0x36, 0x1388, 0x03, 0x30, 0x20, 0x05 },
{ 0x36, 0x1388, 0x03, 0x37, 0x00, 0x28 },
{ 0x36, 0x1388, 0x03, 0x37, 0x01, 0x15 },
{ 0x36, 0x1388, 0x03, 0x37, 0x02, 0x19 },
{ 0x36, 0x1388, 0x03, 0x37, 0x03, 0x23 },
{ 0x36, 0x1388, 0x03, 0x37, 0x04, 0x0a },
{ 0x36, 0x1388, 0x03, 0x37, 0x05, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0x06, 0x3e },
{ 0x36, 0x1388, 0x03, 0x37, 0x07, 0x0d },
{ 0x36, 0x1388, 0x03, 0x37, 0x08, 0x50 },
{ 0x36, 0x1388, 0x03, 0x37, 0x09, 0x5a },
{ 0x36, 0x1388, 0x03, 0x37, 0x0a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0x0b, 0x96 },
{ 0x36, 0x1388, 0x03, 0x37, 0x11, 0x11 },
{ 0x36, 0x1388, 0x03, 0x37, 0x12, 0x13 },
{ 0x36, 0x1388, 0x03, 0x37, 0x17, 0x02 },
{ 0x36, 0x1388, 0x03, 0x37, 0x18, 0x73 },
{ 0x36, 0x1388, 0x03, 0x37, 0x2c, 0x40 },
{ 0x36, 0x1388, 0x03, 0x37, 0x33, 0x01 },
{ 0x36, 0x1388, 0x03, 0x37, 0x38, 0x36 },
{ 0x36, 0x1388, 0x03, 0x37, 0x39, 0x36 },
{ 0x36, 0x1388, 0x03, 0x37, 0x3a, 0x25 },
{ 0x36, 0x1388, 0x03, 0x37, 0x3b, 0x25 },
{ 0x36, 0x1388, 0x03, 0x37, 0x3f, 0x21 },
{ 0x36, 0x1388, 0x03, 0x37, 0x40, 0x21 },
{ 0x36, 0x1388, 0x03, 0x37, 0x41, 0x21 },
{ 0x36, 0x1388, 0x03, 0x37, 0x42, 0x21 },
{ 0x36, 0x1388, 0x03, 0x37, 0x47, 0x28 },
{ 0x36, 0x1388, 0x03, 0x37, 0x48, 0x28 },
{ 0x36, 0x1388, 0x03, 0x37, 0x49, 0x19 },
{ 0x36, 0x1388, 0x03, 0x37, 0x55, 0x1a },
{ 0x36, 0x1388, 0x03, 0x37, 0x56, 0x0a },
{ 0x36, 0x1388, 0x03, 0x37, 0x57, 0x1c },
{ 0x36, 0x1388, 0x03, 0x37, 0x65, 0x19 },
{ 0x36, 0x1388, 0x03, 0x37, 0x66, 0x05 },
{ 0x36, 0x1388, 0x03, 0x37, 0x67, 0x05 },
{ 0x36, 0x1388, 0x03, 0x37, 0x68, 0x13 },
{ 0x36, 0x1388, 0x03, 0x37, 0x6c, 0x07 },
{ 0x36, 0x1388, 0x03, 0x37, 0x78, 0x20 },
{ 0x36, 0x1388, 0x03, 0x37, 0x7c, 0xc8 },
{ 0x36, 0x1388, 0x03, 0x37, 0x81, 0x02 },
{ 0x36, 0x1388, 0x03, 0x37, 0x83, 0x02 },
{ 0x36, 0x1388, 0x03, 0x37, 0x9c, 0x58 },
{ 0x36, 0x1388, 0x03, 0x37, 0x9e, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0x9f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0xa0, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0xbc, 0x22 },
{ 0x36, 0x1388, 0x03, 0x37, 0xc0, 0x01 },
{ 0x36, 0x1388, 0x03, 0x37, 0xc4, 0x3e },
{ 0x36, 0x1388, 0x03, 0x37, 0xc5, 0x3e },
{ 0x36, 0x1388, 0x03, 0x37, 0xc6, 0x2a },
{ 0x36, 0x1388, 0x03, 0x37, 0xc7, 0x28 },
{ 0x36, 0x1388, 0x03, 0x37, 0xc8, 0x02 },
{ 0x36, 0x1388, 0x03, 0x37, 0xc9, 0x12 },
{ 0x36, 0x1388, 0x03, 0x37, 0xcb, 0x29 },
{ 0x36, 0x1388, 0x03, 0x37, 0xcd, 0x29 },
{ 0x36, 0x1388, 0x03, 0x37, 0xd2, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0xd3, 0x73 },
{ 0x36, 0x1388, 0x03, 0x37, 0xd6, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0xd7, 0x6b },
{ 0x36, 0x1388, 0x03, 0x37, 0xdc, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0xdf, 0x54 },
{ 0x36, 0x1388, 0x03, 0x37, 0xe2, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0xe3, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0xf8, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0xf9, 0x01 },
{ 0x36, 0x1388, 0x03, 0x37, 0xfa, 0x00 },
{ 0x36, 0x1388, 0x03, 0x37, 0xfb, 0x19 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x03, 0x01 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x04, 0x01 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x06, 0x21 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x08, 0x01 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x09, 0x01 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x0a, 0x01 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x0b, 0x21 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x13, 0x21 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x14, 0x82 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x16, 0x13 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x21, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x22, 0xf3 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x37, 0x12 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x38, 0x31 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x3c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x3d, 0x03 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x44, 0x16 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x5c, 0x8a },
{ 0x36, 0x1388, 0x03, 0x3c, 0x5f, 0x03 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x61, 0x80 },
{ 0x36, 0x1388, 0x03, 0x3c, 0x6f, 0x2b },
{ 0x36, 0x1388, 0x03, 0x3c, 0x70, 0x5f },
{ 0x36, 0x1388, 0x03, 0x3c, 0x71, 0x2c },
{ 0x36, 0x1388, 0x03, 0x3c, 0x72, 0x2c },
{ 0x36, 0x1388, 0x03, 0x3c, 0x73, 0x2c },
{ 0x36, 0x1388, 0x03, 0x3c, 0x76, 0x12 },
{ 0x36, 0x1388, 0x03, 0x31, 0x82, 0x12 },
{ 0x36, 0x1388, 0x03, 0x32, 0x0e, 0x00 },
{ 0x36, 0x1388, 0x03, 0x32, 0x0f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x32, 0x11, 0x61 },
{ 0x36, 0x1388, 0x03, 0x32, 0x15, 0xcd },
{ 0x36, 0x1388, 0x03, 0x32, 0x19, 0x08 },
{ 0x36, 0x1388, 0x03, 0x35, 0x06, 0x30 },
{ 0x36, 0x1388, 0x03, 0x35, 0x0a, 0x01 },
{ 0x36, 0x1388, 0x03, 0x35, 0x0b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x35, 0x0c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x35, 0x86, 0x60 },
{ 0x36, 0x1388, 0x03, 0x35, 0x8a, 0x01 },
{ 0x36, 0x1388, 0x03, 0x35, 0x8b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x35, 0x8c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x35, 0x41, 0x00 },
{ 0x36, 0x1388, 0x03, 0x35, 0x42, 0x04 },
{ 0x36, 0x1388, 0x03, 0x35, 0x48, 0x04 },
{ 0x36, 0x1388, 0x03, 0x35, 0x49, 0x40 },
{ 0x36, 0x1388, 0x03, 0x35, 0x4a, 0x01 },
{ 0x36, 0x1388, 0x03, 0x35, 0x4b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x35, 0x4c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x35, 0xc1, 0x00 },
{ 0x36, 0x1388, 0x03, 0x35, 0xc2, 0x02 },
{ 0x36, 0x1388, 0x03, 0x35, 0xc6, 0xa0 },
{ 0x36, 0x1388, 0x03, 0x36, 0x00, 0x8f },
{ 0x36, 0x1388, 0x03, 0x36, 0x05, 0x16 },
{ 0x36, 0x1388, 0x03, 0x36, 0x09, 0xf0 },
{ 0x36, 0x1388, 0x03, 0x36, 0x0a, 0x01 },
{ 0x36, 0x1388, 0x03, 0x36, 0x0e, 0x1d },
{ 0x36, 0x1388, 0x03, 0x36, 0x0f, 0x10 },
{ 0x36, 0x1388, 0x03, 0x36, 0x10, 0x70 },
{ 0x36, 0x1388, 0x03, 0x36, 0x11, 0x3a },
{ 0x36, 0x1388, 0x03, 0x36, 0x12, 0x28 },
{ 0x36, 0x1388, 0x03, 0x36, 0x1a, 0x29 },
{ 0x36, 0x1388, 0x03, 0x36, 0x1b, 0x6c },
{ 0x36, 0x1388, 0x03, 0x36, 0x1c, 0x0b },
{ 0x36, 0x1388, 0x03, 0x36, 0x1d, 0x00 },
{ 0x36, 0x1388, 0x03, 0x36, 0x1e, 0xfc },
{ 0x36, 0x1388, 0x03, 0x36, 0x2a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x36, 0x4d, 0x0f },
{ 0x36, 0x1388, 0x03, 0x36, 0x4e, 0x18 },
{ 0x36, 0x1388, 0x03, 0x36, 0x4f, 0x12 },
{ 0x36, 0x1388, 0x03, 0x36, 0x53, 0x1c },
{ 0x36, 0x1388, 0x03, 0x36, 0x54, 0x00 },
{ 0x36, 0x1388, 0x03, 0x36, 0x55, 0x1f },
{ 0x36, 0x1388, 0x03, 0x36, 0x56, 0x1f },
{ 0x36, 0x1388, 0x03, 0x36, 0x57, 0x0c },
{ 0x36, 0x1388, 0x03, 0x36, 0x58, 0x0a },
{ 0x36, 0x1388, 0x03, 0x36, 0x59, 0x14 },
{ 0x36, 0x1388, 0x03, 0x36, 0x5a, 0x18 },
{ 0x36, 0x1388, 0x03, 0x36, 0x5b, 0x14 },
{ 0x36, 0x1388, 0x03, 0x36, 0x5c, 0x10 },
{ 0x36, 0x1388, 0x03, 0x36, 0x5e, 0x12 },
{ 0x36, 0x1388, 0x03, 0x36, 0x74, 0x08 },
{ 0x36, 0x1388, 0x03, 0x36, 0x77, 0x3a },
{ 0x36, 0x1388, 0x03, 0x36, 0x78, 0x3a },
{ 0x36, 0x1388, 0x03, 0x36, 0x79, 0x19 },
{ 0x36, 0x1388, 0x03, 0x38, 0x02, 0x00 },
{ 0x36, 0x1388, 0x03, 0x38, 0x03, 0x04 },
{ 0x36, 0x1388, 0x03, 0x38, 0x06, 0x05 },
{ 0x36, 0x1388, 0x03, 0x38, 0x07, 0x0b },
{ 0x36, 0x1388, 0x03, 0x38, 0x08, 0x07 },
{ 0x36, 0x1388, 0x03, 0x38, 0x09, 0x80 },
{ 0x36, 0x1388, 0x03, 0x38, 0x0a, 0x05 },
{ 0x36, 0x1388, 0x03, 0x38, 0x0b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x38, 0x0c, 0x04 },
{ 0x36, 0x1388, 0x03, 0x38, 0x0d, 0x47 },
{ 0x36, 0x1388, 0x03, 0x38, 0x0e, 0x05 },
{ 0x36, 0x1388, 0x03, 0x38, 0x0f, 0x6a },
{ 0x36, 0x1388, 0x03, 0x38, 0x10, 0x00 },
{ 0x36, 0x1388, 0x03, 0x38, 0x11, 0x08 },
{ 0x36, 0x1388, 0x03, 0x38, 0x12, 0x00 },
{ 0x36, 0x1388, 0x03, 0x38, 0x13, 0x04 },
{ 0x36, 0x1388, 0x03, 0x38, 0x16, 0x01 },
{ 0x36, 0x1388, 0x03, 0x38, 0x17, 0x01 },
{ 0x36, 0x1388, 0x03, 0x38, 0x1c, 0x18 },
{ 0x36, 0x1388, 0x03, 0x38, 0x1e, 0x01 },
{ 0x36, 0x1388, 0x03, 0x38, 0x1f, 0x01 },
{ 0x36, 0x1388, 0x03, 0x38, 0x20, 0x00 },
{ 0x36, 0x1388, 0x03, 0x38, 0x21, 0x19 },
{ 0x36, 0x1388, 0x03, 0x38, 0x32, 0x00 },
{ 0x36, 0x1388, 0x03, 0x38, 0x34, 0x00 },
{ 0x36, 0x1388, 0x03, 0x38, 0x4c, 0x02 },
{ 0x36, 0x1388, 0x03, 0x38, 0x4d, 0x0d },
{ 0x36, 0x1388, 0x03, 0x38, 0x50, 0x00 },
{ 0x36, 0x1388, 0x03, 0x38, 0x51, 0x42 },
{ 0x36, 0x1388, 0x03, 0x38, 0x52, 0x00 },
{ 0x36, 0x1388, 0x03, 0x38, 0x53, 0x40 },
{ 0x36, 0x1388, 0x03, 0x38, 0x58, 0x04 },
{ 0x36, 0x1388, 0x03, 0x38, 0x8c, 0x02 },
{ 0x36, 0x1388, 0x03, 0x38, 0x8d, 0x2b },
{ 0x36, 0x1388, 0x03, 0x3b, 0x40, 0x05 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x41, 0x40 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x42, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x43, 0x90 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x44, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x45, 0x20 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x46, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x47, 0x20 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x48, 0x19 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x49, 0x12 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x4a, 0x16 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x4b, 0x2e },
{ 0x36, 0x1388, 0x03, 0x3b, 0x4c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x4d, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x86, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x87, 0x34 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x88, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x89, 0x08 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x8a, 0x05 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x8b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x8c, 0x07 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x8d, 0x80 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x8e, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x8f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x92, 0x05 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x93, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x94, 0x07 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x95, 0x80 },
{ 0x36, 0x1388, 0x03, 0x3b, 0x9e, 0x09 },
{ 0x36, 0x1388, 0x03, 0x3d, 0x85, 0x05 },
{ 0x36, 0x1388, 0x03, 0x3d, 0x8a, 0x03 },
{ 0x36, 0x1388, 0x03, 0x3d, 0x8b, 0xff },
{ 0x36, 0x1388, 0x03, 0x3d, 0x99, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3d, 0x9a, 0x9f },
{ 0x36, 0x1388, 0x03, 0x3d, 0x9b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3d, 0x9c, 0xa0 },
{ 0x36, 0x1388, 0x03, 0x3d, 0xa4, 0x00 },
{ 0x36, 0x1388, 0x03, 0x3d, 0xa7, 0x50 },
{ 0x36, 0x1388, 0x03, 0x42, 0x0e, 0xff },
{ 0x36, 0x1388, 0x03, 0x42, 0x0f, 0xff },
{ 0x36, 0x1388, 0x03, 0x42, 0x10, 0xff },
{ 0x36, 0x1388, 0x03, 0x42, 0x11, 0xff },
{ 0x36, 0x1388, 0x03, 0x42, 0x1e, 0x02 },
{ 0x36, 0x1388, 0x03, 0x42, 0x1f, 0x45 },
{ 0x36, 0x1388, 0x03, 0x42, 0x20, 0xe1 },
{ 0x36, 0x1388, 0x03, 0x42, 0x21, 0x05 },
{ 0x36, 0x1388, 0x03, 0x43, 0x01, 0xff },
{ 0x36, 0x1388, 0x03, 0x43, 0x07, 0x03 },
{ 0x36, 0x1388, 0x03, 0x43, 0x08, 0x13 },
{ 0x36, 0x1388, 0x03, 0x43, 0x0a, 0x13 },
{ 0x36, 0x1388, 0x03, 0x43, 0x0d, 0x93 },
{ 0x36, 0x1388, 0x03, 0x43, 0x0f, 0x17 },
{ 0x36, 0x1388, 0x03, 0x43, 0x10, 0x95 },
{ 0x36, 0x1388, 0x03, 0x43, 0x11, 0x16 },
{ 0x36, 0x1388, 0x03, 0x43, 0x16, 0x00 },
{ 0x36, 0x1388, 0x03, 0x43, 0x17, 0x08 },
{ 0x36, 0x1388, 0x03, 0x43, 0x19, 0x43 },
{ 0x36, 0x1388, 0x03, 0x43, 0x1a, 0x01 },
{ 0x36, 0x1388, 0x03, 0x43, 0x1b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x43, 0x1d, 0x2a },
{ 0x36, 0x1388, 0x03, 0x43, 0x1e, 0x11 },
{ 0x36, 0x1388, 0x03, 0x43, 0x1f, 0x30 },
{ 0x36, 0x1388, 0x03, 0x43, 0x20, 0x19 },
{ 0x36, 0x1388, 0x03, 0x43, 0x23, 0x80 },
{ 0x36, 0x1388, 0x03, 0x43, 0x24, 0x00 },
{ 0x36, 0x1388, 0x03, 0x45, 0x03, 0x4e },
{ 0x36, 0x1388, 0x03, 0x45, 0x05, 0x00 },
{ 0x36, 0x1388, 0x03, 0x45, 0x09, 0x00 },
{ 0x36, 0x1388, 0x03, 0x45, 0x0a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x45, 0x80, 0xf8 },
{ 0x36, 0x1388, 0x03, 0x45, 0x83, 0x07 },
{ 0x36, 0x1388, 0x03, 0x45, 0x84, 0x6a },
{ 0x36, 0x1388, 0x03, 0x45, 0x85, 0x08 },
{ 0x36, 0x1388, 0x03, 0x45, 0x86, 0x05 },
{ 0x36, 0x1388, 0x03, 0x45, 0x87, 0x04 },
{ 0x36, 0x1388, 0x03, 0x45, 0x88, 0x73 },
{ 0x36, 0x1388, 0x03, 0x45, 0x89, 0x05 },
{ 0x36, 0x1388, 0x03, 0x45, 0x8a, 0x1f },
{ 0x36, 0x1388, 0x03, 0x45, 0x8b, 0x02 },
{ 0x36, 0x1388, 0x03, 0x45, 0x8c, 0xdc },
{ 0x36, 0x1388, 0x03, 0x45, 0x8d, 0x03 },
{ 0x36, 0x1388, 0x03, 0x45, 0x8e, 0x02 },
{ 0x36, 0x1388, 0x03, 0x45, 0x97, 0x07 },
{ 0x36, 0x1388, 0x03, 0x45, 0x98, 0x40 },
{ 0x36, 0x1388, 0x03, 0x45, 0x99, 0x0e },
{ 0x36, 0x1388, 0x03, 0x45, 0x9a, 0x0e },
{ 0x36, 0x1388, 0x03, 0x45, 0x9b, 0xfb },
{ 0x36, 0x1388, 0x03, 0x45, 0x9c, 0xf3 },
{ 0x36, 0x1388, 0x03, 0x46, 0x02, 0x00 },
{ 0x36, 0x1388, 0x03, 0x46, 0x03, 0x13 },
{ 0x36, 0x1388, 0x03, 0x46, 0x04, 0x00 },
{ 0x36, 0x1388, 0x03, 0x46, 0x09, 0x0a },
{ 0x36, 0x1388, 0x03, 0x46, 0x0a, 0x30 },
{ 0x36, 0x1388, 0x03, 0x46, 0x10, 0x00 },
{ 0x36, 0x1388, 0x03, 0x46, 0x11, 0x70 },
{ 0x36, 0x1388, 0x03, 0x46, 0x12, 0x01 },
{ 0x36, 0x1388, 0x03, 0x46, 0x13, 0x00 },
{ 0x36, 0x1388, 0x03, 0x46, 0x14, 0x00 },
{ 0x36, 0x1388, 0x03, 0x46, 0x15, 0x70 },
{ 0x36, 0x1388, 0x03, 0x46, 0x16, 0x01 },
{ 0x36, 0x1388, 0x03, 0x46, 0x17, 0x00 },
{ 0x36, 0x1388, 0x03, 0x48, 0x00, 0x04 },
{ 0x36, 0x1388, 0x03, 0x48, 0x0a, 0x22 },
{ 0x36, 0x1388, 0x03, 0x48, 0x13, 0xe4 },
{ 0x36, 0x1388, 0x03, 0x48, 0x14, 0x2a },
{ 0x36, 0x1388, 0x03, 0x48, 0x37, 0x0d },
{ 0x36, 0x1388, 0x03, 0x48, 0x4b, 0x47 },
{ 0x36, 0x1388, 0x03, 0x48, 0x4f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x48, 0x87, 0x51 },
{ 0x36, 0x1388, 0x03, 0x4d, 0x00, 0x4a },
{ 0x36, 0x1388, 0x03, 0x4d, 0x01, 0x18 },
{ 0x36, 0x1388, 0x03, 0x4d, 0x05, 0xff },
{ 0x36, 0x1388, 0x03, 0x4d, 0x06, 0x88 },
{ 0x36, 0x1388, 0x03, 0x4d, 0x08, 0x63 },
{ 0x36, 0x1388, 0x03, 0x4d, 0x09, 0xdf },
{ 0x36, 0x1388, 0x03, 0x4d, 0x15, 0x7d },
{ 0x36, 0x1388, 0x03, 0x4d, 0x1a, 0x20 },
{ 0x36, 0x1388, 0x03, 0x4d, 0x30, 0x0a },
{ 0x36, 0x1388, 0x03, 0x4d, 0x31, 0x00 },
{ 0x36, 0x1388, 0x03, 0x4d, 0x34, 0x7d },
{ 0x36, 0x1388, 0x03, 0x4d, 0x3c, 0x7d },
{ 0x36, 0x1388, 0x03, 0x4f, 0x00, 0x3f },
{ 0x36, 0x1388, 0x03, 0x4f, 0x01, 0xff },
{ 0x36, 0x1388, 0x03, 0x4f, 0x02, 0xff },
{ 0x36, 0x1388, 0x03, 0x4f, 0x03, 0x2c },
{ 0x36, 0x1388, 0x03, 0x4f, 0x04, 0xe0 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x00, 0x00 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x01, 0x20 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x02, 0x00 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x03, 0x20 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x04, 0x02 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x05, 0x80 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x06, 0x01 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x07, 0xe0 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x08, 0xcf },
{ 0x36, 0x1388, 0x03, 0x6a, 0x09, 0x01 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x0a, 0x40 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x20, 0x00 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x21, 0x02 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x22, 0x00 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x23, 0x00 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x24, 0x00 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x25, 0x00 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x26, 0x00 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x27, 0x00 },
{ 0x36, 0x1388, 0x03, 0x6a, 0x28, 0x00 },
{ 0x36, 0x1388, 0x03, 0x50, 0x00, 0x8f },
{ 0x36, 0x1388, 0x03, 0x50, 0x01, 0x75 },
{ 0x36, 0x1388, 0x03, 0x50, 0x02, 0x3f },
{ 0x36, 0x1388, 0x03, 0x50, 0x03, 0x2a },
{ 0x36, 0x1388, 0x03, 0x50, 0x04, 0x3e },
{ 0x36, 0x1388, 0x03, 0x50, 0x05, 0x1e },
{ 0x36, 0x1388, 0x03, 0x50, 0x06, 0x1e },
{ 0x36, 0x1388, 0x03, 0x50, 0x07, 0x1e },
{ 0x36, 0x1388, 0x03, 0x50, 0x08, 0x00 },
{ 0x36, 0x1388, 0x03, 0x50, 0x0c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x50, 0x2c, 0x0f },
{ 0x36, 0x1388, 0x03, 0x50, 0x2e, 0x00 },
{ 0x36, 0x1388, 0x03, 0x50, 0x2f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x50, 0x4b, 0x04 },
{ 0x36, 0x1388, 0x03, 0x50, 0x53, 0x03 },
{ 0x36, 0x1388, 0x03, 0x50, 0x5b, 0x02 },
{ 0x36, 0x1388, 0x03, 0x50, 0x63, 0x01 },
{ 0x36, 0x1388, 0x03, 0x50, 0x70, 0x00 },
{ 0x36, 0x1388, 0x03, 0x50, 0x74, 0x49 },
{ 0x36, 0x1388, 0x03, 0x50, 0x7a, 0x04 },
{ 0x36, 0x1388, 0x03, 0x50, 0x7b, 0x09 },
{ 0x36, 0x1388, 0x03, 0x55, 0x00, 0x02 },
{ 0x36, 0x1388, 0x03, 0x57, 0x00, 0x02 },
{ 0x36, 0x1388, 0x03, 0x59, 0x00, 0x02 },
{ 0x36, 0x1388, 0x03, 0x60, 0x07, 0x04 },
{ 0x36, 0x1388, 0x03, 0x60, 0x08, 0x05 },
{ 0x36, 0x1388, 0x03, 0x60, 0x09, 0x02 },
{ 0x36, 0x1388, 0x03, 0x60, 0x0b, 0x08 },
{ 0x36, 0x1388, 0x03, 0x60, 0x0c, 0x07 },
{ 0x36, 0x1388, 0x03, 0x60, 0x0d, 0x88 },
{ 0x36, 0x1388, 0x03, 0x60, 0x16, 0x00 },
{ 0x36, 0x1388, 0x03, 0x60, 0x27, 0x04 },
{ 0x36, 0x1388, 0x03, 0x60, 0x28, 0x05 },
{ 0x36, 0x1388, 0x03, 0x60, 0x29, 0x02 },
{ 0x36, 0x1388, 0x03, 0x60, 0x2b, 0x08 },
{ 0x36, 0x1388, 0x03, 0x60, 0x2c, 0x07 },
{ 0x36, 0x1388, 0x03, 0x60, 0x2d, 0x88 },
{ 0x36, 0x1388, 0x03, 0x60, 0x47, 0x04 },
{ 0x36, 0x1388, 0x03, 0x60, 0x48, 0x05 },
{ 0x36, 0x1388, 0x03, 0x60, 0x49, 0x02 },
{ 0x36, 0x1388, 0x03, 0x60, 0x4b, 0x08 },
{ 0x36, 0x1388, 0x03, 0x60, 0x4c, 0x07 },
{ 0x36, 0x1388, 0x03, 0x60, 0x4d, 0x88 },
{ 0x36, 0x1388, 0x03, 0x60, 0x67, 0x04 },
{ 0x36, 0x1388, 0x03, 0x60, 0x68, 0x05 },
{ 0x36, 0x1388, 0x03, 0x60, 0x69, 0x02 },
{ 0x36, 0x1388, 0x03, 0x60, 0x6b, 0x08 },
{ 0x36, 0x1388, 0x03, 0x60, 0x6c, 0x07 },
{ 0x36, 0x1388, 0x03, 0x60, 0x6d, 0x88 },
{ 0x36, 0x1388, 0x03, 0x60, 0x87, 0x04 },
{ 0x36, 0x1388, 0x03, 0x60, 0x88, 0x05 },
{ 0x36, 0x1388, 0x03, 0x60, 0x89, 0x02 },
{ 0x36, 0x1388, 0x03, 0x60, 0x8b, 0x08 },
{ 0x36, 0x1388, 0x03, 0x60, 0x8c, 0x07 },
{ 0x36, 0x1388, 0x03, 0x60, 0x8d, 0x88 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x00, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x01, 0x0a },
{ 0x36, 0x1388, 0x03, 0x5e, 0x02, 0x0a },
{ 0x36, 0x1388, 0x03, 0x5e, 0x03, 0x0b },
{ 0x36, 0x1388, 0x03, 0x5e, 0x04, 0x0b },
{ 0x36, 0x1388, 0x03, 0x5e, 0x05, 0x0b },
{ 0x36, 0x1388, 0x03, 0x5e, 0x06, 0x0c },
{ 0x36, 0x1388, 0x03, 0x5e, 0x07, 0x0c },
{ 0x36, 0x1388, 0x03, 0x5e, 0x08, 0x0c },
{ 0x36, 0x1388, 0x03, 0x5e, 0x09, 0x0c },
{ 0x36, 0x1388, 0x03, 0x5e, 0x0a, 0x0d },
{ 0x36, 0x1388, 0x03, 0x5e, 0x0b, 0x0d },
{ 0x36, 0x1388, 0x03, 0x5e, 0x0c, 0x0d },
{ 0x36, 0x1388, 0x03, 0x5e, 0x0d, 0x0d },
{ 0x36, 0x1388, 0x03, 0x5e, 0x0e, 0x0d },
{ 0x36, 0x1388, 0x03, 0x5e, 0x0f, 0x0e },
{ 0x36, 0x1388, 0x03, 0x5e, 0x10, 0x0e },
{ 0x36, 0x1388, 0x03, 0x5e, 0x11, 0x0e },
{ 0x36, 0x1388, 0x03, 0x5e, 0x12, 0x0e },
{ 0x36, 0x1388, 0x03, 0x5e, 0x13, 0x0f },
{ 0x36, 0x1388, 0x03, 0x5e, 0x14, 0x0f },
{ 0x36, 0x1388, 0x03, 0x5e, 0x15, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x16, 0x11 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x17, 0x11 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x18, 0x12 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x19, 0x12 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x1a, 0x13 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x1b, 0x13 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x1c, 0x14 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x1d, 0x14 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x1e, 0x15 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x1f, 0x15 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x20, 0x16 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x21, 0x16 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x22, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x23, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x26, 0x03 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x27, 0xff },
{ 0x36, 0x1388, 0x03, 0x5e, 0x29, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x2a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x2c, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x2d, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x2f, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x30, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x32, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x33, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x34, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x35, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x36, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x37, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x38, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x39, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x3a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x3b, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x3c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x3d, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x3e, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x3f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x40, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x41, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x42, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x43, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x44, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x45, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x46, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x47, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x48, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x49, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x4a, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x4b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x4c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x4d, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x4e, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x50, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x51, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x53, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x54, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x56, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x57, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x59, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x5a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x5c, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x5d, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x5f, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x60, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x62, 0x08 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x63, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x65, 0x08 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x66, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x68, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x69, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x6b, 0x08 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x6c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x6e, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x6f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x71, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x72, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x74, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x75, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x77, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x78, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x7a, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x7b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x7d, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x7e, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x80, 0x20 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x81, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x83, 0x20 },
{ 0x36, 0x1388, 0x03, 0x5e, 0x84, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x00, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x01, 0x08 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x02, 0x09 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x03, 0x0a },
{ 0x36, 0x1388, 0x03, 0x5f, 0x04, 0x0b },
{ 0x36, 0x1388, 0x03, 0x5f, 0x05, 0x0c },
{ 0x36, 0x1388, 0x03, 0x5f, 0x06, 0x0c },
{ 0x36, 0x1388, 0x03, 0x5f, 0x07, 0x0c },
{ 0x36, 0x1388, 0x03, 0x5f, 0x08, 0x0c },
{ 0x36, 0x1388, 0x03, 0x5f, 0x09, 0x0c },
{ 0x36, 0x1388, 0x03, 0x5f, 0x0a, 0x0d },
{ 0x36, 0x1388, 0x03, 0x5f, 0x0b, 0x0d },
{ 0x36, 0x1388, 0x03, 0x5f, 0x0c, 0x0d },
{ 0x36, 0x1388, 0x03, 0x5f, 0x0d, 0x0d },
{ 0x36, 0x1388, 0x03, 0x5f, 0x0e, 0x0d },
{ 0x36, 0x1388, 0x03, 0x5f, 0x0f, 0x0e },
{ 0x36, 0x1388, 0x03, 0x5f, 0x10, 0x0e },
{ 0x36, 0x1388, 0x03, 0x5f, 0x11, 0x0e },
{ 0x36, 0x1388, 0x03, 0x5f, 0x12, 0x0e },
{ 0x36, 0x1388, 0x03, 0x5f, 0x13, 0x0f },
{ 0x36, 0x1388, 0x03, 0x5f, 0x14, 0x0f },
{ 0x36, 0x1388, 0x03, 0x5f, 0x15, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x16, 0x11 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x17, 0x11 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x18, 0x12 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x19, 0x12 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x1a, 0x13 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x1b, 0x13 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x1c, 0x14 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x1d, 0x14 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x1e, 0x16 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x1f, 0x16 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x20, 0x16 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x21, 0x08 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x22, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x23, 0x01 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x26, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x27, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x29, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x2a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x2c, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x2d, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x2f, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x30, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x32, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x33, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x34, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x35, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x36, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x37, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x38, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x39, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x3a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x3b, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x3c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x3d, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x3e, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x3f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x40, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x41, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x42, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x43, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x44, 0x02 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x45, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x46, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x47, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x48, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x49, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x4a, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x4b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x4c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x4d, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x4e, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x50, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x51, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x53, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x54, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x56, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x57, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x59, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x5a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x5c, 0x04 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x5d, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x5f, 0x08 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x60, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x62, 0x08 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x63, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x65, 0x08 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x66, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x68, 0x08 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x69, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x6b, 0x08 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x6c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x6e, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x6f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x71, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x72, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x74, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x75, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x77, 0x10 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x78, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x7a, 0x20 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x7b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x7d, 0x20 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x7e, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x80, 0x20 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x81, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x83, 0x00 },
{ 0x36, 0x1388, 0x03, 0x5f, 0x84, 0xff },
{ 0x36, 0x1388, 0x03, 0x52, 0x40, 0x0f },
{ 0x36, 0x1388, 0x03, 0x52, 0x43, 0x00 },
{ 0x36, 0x1388, 0x03, 0x52, 0x44, 0x00 },
{ 0x36, 0x1388, 0x03, 0x52, 0x45, 0x00 },
{ 0x36, 0x1388, 0x03, 0x52, 0x46, 0x00 },
{ 0x36, 0x1388, 0x03, 0x52, 0x47, 0x00 },
{ 0x36, 0x1388, 0x03, 0x52, 0x48, 0x00 },
{ 0x36, 0x1388, 0x03, 0x52, 0x49, 0x00 },
{ 0x36, 0x1388, 0x03, 0x54, 0x40, 0x0f },
{ 0x36, 0x1388, 0x03, 0x54, 0x43, 0x00 },
{ 0x36, 0x1388, 0x03, 0x54, 0x45, 0x00 },
{ 0x36, 0x1388, 0x03, 0x54, 0x47, 0x00 },
{ 0x36, 0x1388, 0x03, 0x54, 0x48, 0x00 },
{ 0x36, 0x1388, 0x03, 0x54, 0x49, 0x00 },
{ 0x36, 0x1388, 0x03, 0x56, 0x40, 0x0f },
{ 0x36, 0x1388, 0x03, 0x56, 0x42, 0x00 },
{ 0x36, 0x1388, 0x03, 0x56, 0x43, 0x00 },
{ 0x36, 0x1388, 0x03, 0x56, 0x44, 0x00 },
{ 0x36, 0x1388, 0x03, 0x56, 0x45, 0x00 },
{ 0x36, 0x1388, 0x03, 0x56, 0x46, 0x00 },
{ 0x36, 0x1388, 0x03, 0x56, 0x47, 0x00 },
{ 0x36, 0x1388, 0x03, 0x56, 0x49, 0x00 },
{ 0x36, 0x1388, 0x03, 0x58, 0x40, 0x0f },
{ 0x36, 0x1388, 0x03, 0x58, 0x42, 0x00 },
{ 0x36, 0x1388, 0x03, 0x58, 0x43, 0x00 },
{ 0x36, 0x1388, 0x03, 0x58, 0x45, 0x00 },
{ 0x36, 0x1388, 0x03, 0x58, 0x46, 0x00 },
{ 0x36, 0x1388, 0x03, 0x58, 0x47, 0x00 },
{ 0x36, 0x1388, 0x03, 0x58, 0x48, 0x00 },
{ 0x36, 0x1388, 0x03, 0x58, 0x49, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x01, 0x2b },
{ 0x36, 0x1388, 0x03, 0x40, 0x08, 0x02 },
{ 0x36, 0x1388, 0x03, 0x40, 0x09, 0x03 },
{ 0x36, 0x1388, 0x03, 0x40, 0x18, 0x12 },
{ 0x36, 0x1388, 0x03, 0x40, 0x22, 0x40 },
{ 0x36, 0x1388, 0x03, 0x40, 0x23, 0x20 },
{ 0x36, 0x1388, 0x03, 0x40, 0x26, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x27, 0x40 },
{ 0x36, 0x1388, 0x03, 0x40, 0x28, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x29, 0x40 },
{ 0x36, 0x1388, 0x03, 0x40, 0x2a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x2b, 0x40 },
{ 0x36, 0x1388, 0x03, 0x40, 0x2c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x2d, 0x40 },
{ 0x36, 0x1388, 0x03, 0x40, 0x5e, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x5f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x60, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x61, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x62, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x63, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x64, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x65, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x66, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x67, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x68, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x69, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x6a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x6b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x6c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x6d, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x6e, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x6f, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x70, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x71, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x72, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x73, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x74, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x75, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x76, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x77, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x78, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x79, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x7a, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x7b, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x7c, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x7d, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x7e, 0xcc },
{ 0x36, 0x1388, 0x03, 0x40, 0x7f, 0x18 },
{ 0x36, 0x1388, 0x03, 0x40, 0x80, 0xff },
{ 0x36, 0x1388, 0x03, 0x40, 0x81, 0xff },
{ 0x36, 0x1388, 0x03, 0x40, 0x82, 0x01 },
{ 0x36, 0x1388, 0x03, 0x40, 0x83, 0x53 },
{ 0x36, 0x1388, 0x03, 0x40, 0x84, 0x01 },
{ 0x36, 0x1388, 0x03, 0x40, 0x85, 0x2b },
{ 0x36, 0x1388, 0x03, 0x40, 0x86, 0x00 },
{ 0x36, 0x1388, 0x03, 0x40, 0x87, 0xb3 },
{ 0x36, 0x1388, 0x03, 0x46, 0x40, 0x40 },
{ 0x36, 0x1388, 0x03, 0x46, 0x41, 0x11 },
{ 0x36, 0x1388, 0x03, 0x46, 0x42, 0x0e },
{ 0x36, 0x1388, 0x03, 0x46, 0x43, 0xee },
{ 0x36, 0x1388, 0x03, 0x46, 0x46, 0x0f },
{ 0x36, 0x1388, 0x03, 0x46, 0x48, 0x00 },
{ 0x36, 0x1388, 0x03, 0x46, 0x49, 0x03 },
{ 0x36, 0x1388, 0x03, 0x4f, 0x04, 0xf8 },
{ 0x36, 0x1388, 0x03, 0x4d, 0x09, 0xff },
{ 0x36, 0x1388, 0x03, 0x4d, 0x09, 0xdf },
{ 0x36, 0x1388, 0x03, 0x38, 0x0e, 0x05 },
{ 0x36, 0x1388, 0x03, 0x38, 0x0f, 0x6a },
{ 0x36, 0x1388, 0x03, 0x38, 0x0c, 0x04 },
{ 0x36, 0x1388, 0x03, 0x38, 0x0d, 0x47 },
{ 0x36, 0x1388, 0x03, 0x38, 0x4c, 0x02 },
{ 0x36, 0x1388, 0x03, 0x38, 0x4d, 0x0d },
{ 0x36, 0x1388, 0x03, 0x38, 0x8c, 0x02 },
{ 0x36, 0x1388, 0x03, 0x38, 0x8d, 0x2b },
{ 0x36, 0x1388, 0x03, 0x35, 0x01, 0x01 },
{ 0x36, 0x1388, 0x03, 0x35, 0x02, 0x02 },
{ 0x36, 0x1388, 0x03, 0x35, 0x08, 0x01 },
{ 0x36, 0x1388, 0x03, 0x35, 0x09, 0x00 },
{ 0x36, 0x1388, 0x03, 0x35, 0x41, 0x01 },
{ 0x36, 0x1388, 0x03, 0x35, 0x42, 0xc8 },
{ 0x36, 0x1388, 0x03, 0x35, 0xc1, 0x00 },
{ 0x36, 0x1388, 0x03, 0x35, 0xc2, 0x01 },
{ 0x36, 0x1388, 0x03, 0x38, 0x20, 0x30 },
{ 0x36, 0x1388, 0x03, 0x01, 0x00, 0x01 }
};
// i2c command list imx390
struct cam_cfg max9295_imx390_list[] = {
//reset 9296A
{0x4a,0xf4240, 0x03, 0x00, 0x10, 0x81},
{0x4a,0x3e8, 0x03, 0x03, 0x13, 0x00},
//enabled linkA
{0x4a,0x30D40, 0x03, 0x00, 0x10, 0x21},
{0x40,0x3e8, 0x03, 0x00, 0x00, 0x86},
{0x43,0x3e8, 0x03, 0x00, 0x53, 0x12},
{0x43,0x3e8, 0x03, 0x00, 0x5b, 0x10},
{0x43,0x7a120, 0x03, 0x02, 0xbe, 0x00},
{0x43,0x7a120, 0x03, 0x02, 0xbe, 0x10},
{0x43,0x3e8, 0x03, 0x03, 0x18, 0x5e},
{0x43,0x7a120, 0x03, 0x02, 0xd3, 0x00},
{0x43,0x3e8, 0x03, 0x02, 0xd3, 0x10},
//enabled linkB
{0x4a,0x30D40, 0x03, 0x00, 0x10, 0x22},
{0x40,0x3e8, 0x03, 0x00, 0x00, 0x84},
{0x42,0x3e8, 0x03, 0x00, 0x57, 0x12},
{0x42,0x3e8, 0x03, 0x00, 0x5b, 0x11},
{0x42,0x7a120, 0x03, 0x02, 0xbe, 0x00},
{0x42,0x7a120, 0x03, 0x02, 0xbe, 0x10},
{0x42,0x3e8, 0x03, 0x03, 0x18, 0x5e},
{0x42,0x7a120, 0x03, 0x02, 0xd3, 0x00},
{0x42,0x3e8, 0x03, 0x02, 0xd3, 0x10},
//PHYA linka pipez vc=0
{0x4a,0x3e8, 0x03, 0x04, 0x0b,0x07},
{0x4a,0x3e8, 0x03, 0x04, 0x2d,0x15},
{0x4a,0x3e8, 0x03, 0x04, 0x0d,0x1e},
{0x4a,0x3e8, 0x03, 0x04, 0x0e,0x1e},
{0x4a,0x3e8, 0x03, 0x04, 0x0f,0x00},
{0x4a,0x3e8, 0x03, 0x04, 0x10,0x00},
{0x4a,0x3e8, 0x03, 0x04, 0x11,0x01},
{0x4a,0x3e8, 0x03, 0x04, 0x12,0x01},
//PHYA linkb pipex vc=1
{0x4a,0x3e8, 0x03, 0x04, 0x4b,0x07},
{0x4a,0x3e8, 0x03, 0x04, 0x6d,0x15},
{0x4a,0x3e8, 0x03, 0x04, 0x4d,0x1e},
{0x4a,0x3e8, 0x03, 0x04, 0x4e,0x5e},
{0x4a,0x3e8, 0x03, 0x04, 0x4f,0x00},
{0x4a,0x3e8, 0x03, 0x04, 0x50,0x40},
{0x4a,0x3e8, 0x03, 0x04, 0x51,0x01},
{0x4a,0x3e8, 0x03, 0x04, 0x52,0x41},
{0x4a,0x3e8, 0x03, 0x00, 0x03,0x40},
{0x4a,0x3e8, 0x03, 0x04, 0x4a,0x40},
{0x4a,0x3e8, 0x03, 0x03, 0x30,0x04},
{0x4a,0x3e8, 0x03, 0x03, 0x33,0x4e},
{0x4a,0x3e8, 0x03, 0x03, 0x34,0xe4},
{0x4a,0x3e8, 0x03, 0x03, 0x20,0x2c},
{0x4a,0x3e8, 0x03, 0x03, 0x1d,0x2c},
{0x4a,0x3e8, 0x03, 0x03, 0x13,0x02},
{0x4a,0x3e8, 0x03, 0x00, 0x50,0x00},
{0x4a,0x3e8, 0x03, 0x00, 0x51,0x01},
{0x4a,0x3e8, 0x03, 0x00, 0x52,0x02},
{0x4a,0x3e8, 0x03, 0x00, 0x53,0x03},
{0x4a,0x3e8, 0x03, 0x03, 0x32,0xf0},
};
int i2c_write_data( int fd,
unsigned char dev_addr,
unsigned char *buf,
unsigned char len) {
struct i2c_rdwr_ioctl_data data;
struct i2c_msg write_messages;
write_messages.addr = dev_addr; // reg add
write_messages.flags = 0; // write
write_messages.len = len;
write_messages.buf = buf; // data value
data.msgs = &write_messages;
data.nmsgs = 1;
return ioctl(fd, I2C_RDWR, &data);
}
int i2c_read_data(int fd,
unsigned char dev_addr,
unsigned char *reg_addr,
unsigned char *buf) {
struct i2c_rdwr_ioctl_data data;
struct i2c_msg read_messages[2];
read_messages[0].addr = dev_addr;
read_messages[0].flags = 0; // write
read_messages[0].len = 2; // 16bit
read_messages[0].buf = reg_addr;
read_messages[1].addr = dev_addr;
read_messages[1].flags = I2C_M_RD;
read_messages[1].len = 1; // 8bit
read_messages[1].buf = buf;
data.msgs = read_messages;
data.nmsgs = 2;
return ioctl(fd, I2C_RDWR, &data);
}
void handle_cfg(int fd, struct cam_cfg *config_list, long unsigned int list_size) {
int ret;
struct cam_cfg *reg_list = config_list;
long unsigned int i = 0;
for (size_t i = 0; i < list_size; i++) {
ret = i2c_write_data(fd, reg_list[i].dev_addr, reg_list[i].buf, reg_list[i].len);
if(ret < 0) {
printf("error: i2c write error! %ld, 0x%x 0x%x, 0x%x, 0x%x\n",
i, reg_list[i].dev_addr, reg_list[i].buf[0], reg_list[i].buf[1], reg_list[i].buf[2]);
}
usleep(reg_list[i].delay);
}
}
unsigned char check_config_result(int fd, struct cam_cfg *configlist) {
struct cam_cfg *reg_list = configlist;
//max9296a VPRBS 0x1dc/0x1fc/0x21c/0x23c correspondant to the channel x,y,z,u
//对于9296来说,使用x y通道就可以
unsigned char lock_reg[2] = {0x00, 0x00};
unsigned char link_set[3] = {0x00, 0x10, 0x20};
unsigned char lockstatus = 0;
unsigned char tt = 0;
unsigned ch_status = 0x0;
int ret=0;
for (tt = 0; tt < 2; tt++) {
switch (tt) {
case 0: //pipe x linka
lock_reg[0] = 0x01;
lock_reg[1] = 0xdc;
link_set[2] = 0x21;
ret = i2c_write_data(fd,reg_list[0].dev_addr,&link_set[0],3);
if(ret < 0 ) printf("0: i2c write error!\n");
usleep(200000);
break;
case 1: //pipe y linb
lock_reg[0] = 0x01;
lock_reg[1] = 0xfc;
link_set[2] = 0x22;
ret = i2c_write_data(fd,reg_list[0].dev_addr,&link_set[0],3);
usleep(200000);
if(ret < 0 ) printf("1: i2c write error!\n");
break;
default:
break;
}
usleep(20000);
ret = i2c_read_data(fd,reg_list[0].dev_addr,&lock_reg[0],&lockstatus);
if(ret < 0) {
printf("i2c read error!\n");
}
usleep(10000);
ch_status |= ((lockstatus & 0x1) << tt);
lockstatus = 0x0;
}
if((ch_status&0x3) == 0x3) {
link_set[2] = 0x23;
} else if((ch_status&0x1) == 0x1) {
link_set[2] = 0x21;
} else if((ch_status&0x2) == 0x2) {
link_set[2] = 0x22;
} else {
link_set[2] = 0x00;
}
ret = i2c_write_data(fd,reg_list[0].dev_addr,&link_set[0],3);
if(ret < 0) {
printf("final: i2c write error!\n");
}
usleep(200000);
return ch_status;
}
int init_cam(char *i2c_dev_ch) {
int fd = -1;
int ret = -1;
fd = open(i2c_dev_ch, O_RDWR);
if(fd < 0) {
printf("error: open %s error\n", i2c_dev_ch);
return -1;
}
handle_cfg(fd, max9295_max96717_list, ARRAY_SIZE(max9295_max96717_list));
usleep(10000);
ret = check_config_result(fd, max9295_max96717_list);
close(fd);
return ret;
}
int main(int argc,char *argv[]) {
int ch_status;
// //第一组 video0 video1
// printf("video0 and video1 init:\n");
// ch_status = init_cam(GROUPA_DEVICE);
// if (0x3 == ch_status) {
// printf("video0 success, video1 success \n");
// } else if (0x1 == ch_status) {
// printf("video0 success, video1 fail \n");
// } else if (0x2 == ch_status) {
// printf("video0 fail, video1 success \n");
// } else {
// printf("video0 fail, video1 fail \n");
// }
// usleep(1000);
//第二组 video2 video3
printf("video2 and video3 init:\n");
ch_status = init_cam(GROUPB_DEVICE);
if(0x3 == ch_status)
{
printf("video2 success, video3 success \n");
} else if(0x1 == ch_status) {
printf("video2 success, video3 fail \n");
} else if(0x2 == ch_status) {
printf("video2 fail, video3 success \n");
} else {
printf("video2 fail, video3 fail \n");
}
return 0;
}