diff --git a/libraries/AP_HAL_Linux/CameraSensor_Mt9v117.cpp b/libraries/AP_HAL_Linux/CameraSensor_Mt9v117.cpp index f54d8f75c0..3577074e37 100644 --- a/libraries/AP_HAL_Linux/CameraSensor_Mt9v117.cpp +++ b/libraries/AP_HAL_Linux/CameraSensor_Mt9v117.cpp @@ -18,7 +18,6 @@ #if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BEBOP #include "CameraSensor_Mt9v117.h" -#include "CameraSensor_Mt9v117_Patches.h" /* Cam sensor register definitions */ #define CHIP_ID 0x0 @@ -318,7 +317,7 @@ void CameraSensor_Mt9v117::_apply_patch() /* write patch */ for (unsigned int i = 0; i < MT9V117_PATCH_LINE_NUM; i++) { _i2c->do_transfer(_addr, - patch_lines[i].data, patch_lines[i].size, NULL, 0); + _patch_lines[i].data, _patch_lines[i].size, NULL, 0); } _write_reg16(LOGICAL_ADDRESS_ACCESS, 0x0000); diff --git a/libraries/AP_HAL_Linux/CameraSensor_Mt9v117.h b/libraries/AP_HAL_Linux/CameraSensor_Mt9v117.h index 410782f2ae..2b85e556d5 100644 --- a/libraries/AP_HAL_Linux/CameraSensor_Mt9v117.h +++ b/libraries/AP_HAL_Linux/CameraSensor_Mt9v117.h @@ -17,17 +17,28 @@ #include "AP_HAL_Linux.h" #include "CameraSensor.h" +namespace Linux { + enum mt9v117_res { MT9V117_QVGA, }; -class Linux::CameraSensor_Mt9v117 : public Linux::CameraSensor { +struct mt9v117_patch { + uint8_t *data; + uint8_t size; +}; + +#define MT9V117_PATCH_LINE_NUM 13 + +class CameraSensor_Mt9v117 : public CameraSensor { public: CameraSensor_Mt9v117(const char *device_path, AP_HAL::I2CDriver *i2c, uint8_t addr, enum mt9v117_res res, uint16_t nrst_gpio, uint32_t clock_freq); private: + static const struct mt9v117_patch _patch_lines[MT9V117_PATCH_LINE_NUM]; + uint8_t _read_reg8(uint16_t reg); void _write_reg8(uint16_t reg, uint8_t val); uint16_t _read_reg16(uint16_t reg); @@ -52,3 +63,5 @@ private: uint16_t _nrst_gpio = 0xFFFF; uint8_t _addr; }; + +} diff --git a/libraries/AP_HAL_Linux/CameraSensor_Mt9v117_Patches.h b/libraries/AP_HAL_Linux/CameraSensor_Mt9v117_Patches.cpp similarity index 88% rename from libraries/AP_HAL_Linux/CameraSensor_Mt9v117_Patches.h rename to libraries/AP_HAL_Linux/CameraSensor_Mt9v117_Patches.cpp index 301e9344ad..72f31268d3 100644 --- a/libraries/AP_HAL_Linux/CameraSensor_Mt9v117_Patches.h +++ b/libraries/AP_HAL_Linux/CameraSensor_Mt9v117_Patches.cpp @@ -12,7 +12,6 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#pragma once /* It seems to be mandatory to write these patches by unit of 48 bytes, the * 2 first ones seem to be an address since it increments of 48 at each line @@ -20,10 +19,15 @@ * writeRegisters(addr, 0xf000, 48, line1); * ... */ -#define MT9V117_PATCH_LINE_NUM 13 +#include "CameraSensor_Mt9v117.h" -uint8_t patch_line1[] = -{ +#include + +#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BEBOP + +using namespace Linux; + +static uint8_t patch_line1[] = { 0xf0, 0x00, 0x72, 0xcf, 0xff, 0x00, 0x3e, 0xd0, 0x92, 0x00, 0x71, 0xcf, 0xff, 0xff, 0xf2, 0x18, 0xb1, 0x10, 0x92, 0x05, 0xb1, 0x11, 0x92, 0x04, 0xb1, 0x12, 0x70, 0xcf, 0xff, 0x00, @@ -31,8 +35,7 @@ uint8_t patch_line1[] = 0xff, 0xff, 0xe7, 0x1c, 0x88, 0x36, 0x09, 0x0f, 0x00, 0xb3 }; -uint8_t patch_line2[] = -{ +static uint8_t patch_line2[] = { 0xf0, 0x30, 0x69, 0x13, 0xe1, 0x80, 0xd8, 0x08, 0x20, 0xca, 0x03, 0x22, 0x71, 0xcf, 0xff, 0xff, 0xe5, 0x68, 0x91, 0x35, 0x22, 0x0a, 0x1f, 0x80, 0xff, 0xff, 0xf2, 0x18, 0x29, 0x05, @@ -40,8 +43,7 @@ uint8_t patch_line2[] = 0x00, 0x00, 0xff, 0xf0, 0x21, 0x8c, 0xf0, 0x10, 0x1a, 0x22 }; -uint8_t patch_line3[] = -{ +static uint8_t patch_line3[] = { 0xf0, 0x60, 0x10, 0x44, 0x12, 0x20, 0x11, 0x02, 0xf7, 0x87, 0x22, 0x4f, 0x03, 0x83, 0x1a, 0x20, 0x10, 0xc4, 0xf0, 0x09, 0xba, 0xae, 0x7b, 0x50, 0x1a, 0x20, 0x10, 0x84, 0x21, 0x45, @@ -49,8 +51,7 @@ uint8_t patch_line3[] = 0x3e, 0xd0, 0xb0, 0x60, 0xb0, 0x25, 0x7e, 0xe0, 0x78, 0xe0 }; -uint8_t patch_line4[] = -{ +static uint8_t patch_line4[] = { 0xf0, 0x90, 0x71, 0xcf, 0xff, 0xff, 0xf2, 0x18, 0x91, 0x12, 0x72, 0xcf, 0xff, 0xff, 0xe7, 0x1c, 0x8a, 0x57, 0x20, 0x04, 0x0f, 0x80, 0x00, 0x00, 0xff, 0xf0, 0xe2, 0x80, 0x20, 0xc5, @@ -58,8 +59,7 @@ uint8_t patch_line4[] = 0xff, 0x00, 0x3e, 0xd0, 0xb1, 0x04, 0x7e, 0xe0, 0x78, 0xe0 }; -uint8_t patch_line5[] = -{ +static uint8_t patch_line5[] = { 0xf0, 0xc0, 0x70, 0xcf, 0xff, 0xff, 0xe7, 0x1c, 0x88, 0x57, 0x71, 0xcf, 0xff, 0xff, 0xf2, 0x18, 0x91, 0x13, 0xea, 0x84, 0xb8, 0xa9, 0x78, 0x10, 0xf0, 0x03, 0xb8, 0x89, 0xb8, 0x8c, @@ -67,8 +67,7 @@ uint8_t patch_line5[] = 0x7e, 0xe0, 0xc0, 0xf1, 0x09, 0x1e, 0x03, 0xc0, 0xc1, 0xa1 }; -uint8_t patch_line6[] = -{ +static uint8_t patch_line6[] = { 0xf0, 0xf0, 0x75, 0x08, 0x76, 0x28, 0x77, 0x48, 0xc2, 0x40, 0xd8, 0x20, 0x71, 0xcf, 0x00, 0x03, 0x20, 0x67, 0xda, 0x02, 0x08, 0xae, 0x03, 0xa0, 0x73, 0xc9, 0x0e, 0x25, 0x13, 0xc0, @@ -76,8 +75,7 @@ uint8_t patch_line6[] = 0x01, 0x00, 0xd8, 0x00, 0xb8, 0x9e, 0x0e, 0x5a, 0x03, 0x20 }; -uint8_t patch_line7[] = -{ +static uint8_t patch_line7[] = { 0xf1, 0x20, 0xd9, 0x01, 0xd8, 0x00, 0xb8, 0x9e, 0x0e, 0xb6, 0x03, 0x20, 0xd9, 0x01, 0x8d, 0x14, 0x08, 0x17, 0x01, 0x91, 0x8d, 0x16, 0xe8, 0x07, 0x0b, 0x36, 0x01, 0x60, 0xd8, 0x07, @@ -85,8 +83,7 @@ uint8_t patch_line7[] = 0xd8, 0x00, 0x20, 0xca, 0x02, 0x62, 0x00, 0xc9, 0x03, 0xe0 }; -uint8_t patch_line8[] = -{ +static uint8_t patch_line8[] = { 0xf1, 0x50, 0xc0, 0xa1, 0x78, 0xe0, 0xc0, 0xf1, 0x08, 0xb2, 0x03, 0xc0, 0x76, 0xcf, 0xff, 0xff, 0xe5, 0x40, 0x75, 0xcf, 0xff, 0xff, 0xe5, 0x68, 0x95, 0x17, 0x96, 0x40, 0x77, 0xcf, @@ -94,8 +91,7 @@ uint8_t patch_line8[] = 0x97, 0x40, 0x0a, 0x11, 0x00, 0x40, 0x0b, 0x0a, 0x01, 0x00 }; -uint8_t patch_line9[] = -{ +static uint8_t patch_line9[] = { 0xf1, 0x80, 0x95, 0x17, 0xb6, 0x00, 0x95, 0x18, 0xb7, 0x00, 0x76, 0xcf, 0xff, 0xff, 0xe5, 0x44, 0x96, 0x20, 0x95, 0x15, 0x08, 0x13, 0x00, 0x40, 0x0e, 0x1e, 0x01, 0x20, 0xd9, 0x00, @@ -103,8 +99,7 @@ uint8_t patch_line9[] = 0xe7, 0x1c, 0x77, 0xcf, 0xff, 0xff, 0xe5, 0x46, 0x97, 0x40 }; -uint8_t patch_line10[] = -{ +static uint8_t patch_line10[] = { 0xf1, 0xb0, 0x8d, 0x16, 0x76, 0xcf, 0xff, 0xff, 0xe5, 0x48, 0x8d, 0x37, 0x08, 0x0d, 0x00, 0x81, 0x96, 0x40, 0x09, 0x15, 0x00, 0x80, 0x0f, 0xd6, 0x01, 0x00, 0x8d, 0x16, 0xb7, 0x00, @@ -112,8 +107,7 @@ uint8_t patch_line10[] = 0x03, 0xc0, 0xc0, 0xf1, 0x0d, 0x9e, 0x01, 0x00, 0xe8, 0x04 }; -uint8_t patch_line11[] = -{ +static uint8_t patch_line11[] = { 0xf1, 0xe0, 0xff, 0x88, 0xf0, 0x0a, 0x0d, 0x6a, 0x01, 0x00, 0x0d, 0x8e, 0x01, 0x00, 0xe8, 0x7e, 0xff, 0x85, 0x0d, 0x72, 0x01, 0x00, 0xff, 0x8c, 0xff, 0xa7, 0xff, 0xb2, 0xd8, 0x00, @@ -121,8 +115,7 @@ uint8_t patch_line11[] = 0x81, 0x41, 0xe0, 0x02, 0x81, 0x20, 0x08, 0xf7, 0x81, 0x34 }; -uint8_t patch_line12[] = -{ +static uint8_t patch_line12[] = { 0xf2, 0x10, 0xa1, 0x40, 0xd8, 0x00, 0xc0, 0xd1, 0x7e, 0xe0, 0x53, 0x51, 0x30, 0x34, 0x20, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, @@ -130,18 +123,12 @@ uint8_t patch_line12[] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -uint8_t patch_line13[] = -{ +static uint8_t patch_line13[] = { 0xf2, 0x40, 0xff, 0xff, 0xe8, 0x28, 0xff, 0xff, 0xf0, 0xe8, 0xff, 0xff, 0xe8, 0x08, 0xff, 0xff, 0xf1, 0x54 }; -struct mt9v117_patch_line { - uint8_t *data; - uint8_t size; -}; - -struct mt9v117_patch_line patch_lines[MT9V117_PATCH_LINE_NUM] = { +const struct mt9v117_patch CameraSensor_Mt9v117::_patch_lines[MT9V117_PATCH_LINE_NUM] = { {patch_line1, sizeof(patch_line1)}, {patch_line2, sizeof(patch_line2)}, {patch_line3, sizeof(patch_line3)}, @@ -156,3 +143,5 @@ struct mt9v117_patch_line patch_lines[MT9V117_PATCH_LINE_NUM] = { {patch_line12, sizeof(patch_line12)}, {patch_line13, sizeof(patch_line13)} }; + +#endif