Browse Source

add:添加camera

Dozingfiretruck 4 years ago
parent
commit
5bb91861d4

+ 16 - 11
components/camera/luat_camera.h

@@ -1,22 +1,27 @@
-#ifndef LUAT_CAMERA_H
-#define LUAT_CAMERA_H
+/******************************************************************************
+ *  CAMERA设备操作抽象层
+ *  @author Dozingfiretruck
+ *  @since 0.0.1
+ *****************************************************************************/
+#ifndef Luat_CAMERA_H
+#define Luat_CAMERA_H
 
 #include "luat_base.h"
 
 typedef struct luat_camera_conf
 {
     uint8_t id;
-    uint8_t port_type;
-    uint8_t port_id;
-    uint8_t color_bit;
-    uint8_t pin_sel;
-    uint8_t pin_rst;
-    char type_name[16];
-}luat_camera_conf;
+    uint8_t zbar_scan;
+    uint8_t i2c_addr;
+    uint16_t sensor_width;
+    uint16_t sensor_height;
+    uint8_t id_reg;
+	uint8_t id_value;
+    uint8_t *init_cmd;
+} luat_camera_conf_t;
 
 
-int luat_camera_init(luat_camera_conf* conf);
-
+int luat_camera_init(luat_camera_conf_t *conf);
 int luat_camera_close(int id);
 
 #endif

+ 0 - 387
components/camera/luat_camera_gc032a.c

@@ -1,387 +0,0 @@
-
-#include "luat_base.h"
-#include "luat_i2c.h"
-#include "luat_camera.h"
-
-#include "luat_hwtimer.h"
-
-#define LUAT_LOG_TAG "camera"
-#include "luat_log.h"
-
-const uint8_t GC032A_InitRegQueue[][2] =
-{
-        {0xf3, 0xff},
-        {0xf7, 0x01},
-		{0xf8, 0x03},
-        {0xf9, 0xce},
-        {0xfa, 0x00},
-        {0xfc, 0x02},
-        {0xfe, 0x02},
-        {0x81, 0x03},
-        {0xfe, 0x03},
-        {0x5a, 0x06},
-        /*Analog&Cisctl*/
-
-        {0xfe, 0x00},
-        {0x03, 0x01},
-        {0x04, 0xc2},
-        {0x05, 0x01},
-		{0x06, 0xad},
-        {0x07, 0x00},
-        {0x08, 0x08},
-//        {0x0a, 0x04},
-//        {0x0c, 0x04},
-        {0x0d, 0x01},
-        {0x0e, 0xe8},
-        {0x0f, 0x02},
-        {0x10, 0x88},
-        {0x17, 0x00},
-        {0x19, 0x04},
-        {0x1a, 0x0a},
-        {0x1f, 0x40},
-        {0x20, 0x30},
-        {0x2e, 0x80},
-        {0x2f, 0x2b},
-        {0x30, 0x1a},
-		{0x44, 0x06},	//改成RGB565输出
-        {0xfe, 0x02},
-        {0x03, 0x02},
-        {0x05, 0xd7},
-        {0x06, 0x60},
-        {0x12, 0x89},
-
-        // add
-
-        //{0x60, 0x01},  //sync code0
-        //{0x61, 0x02},  //sync code1
-        //{0x62, 0x40},  //sync code2
-        //{0x63, 0x00},  //sync code3
-        //sck_always?bit656?
-        {0x64, 0x00}, //sync code3
-
-        /*blk*/
-        {0xfe, 0x00},
-        {0x18, 0x02},
-        {0xfe, 0x02},
-        {0x40, 0x22},
-        {0x45, 0x00},
-        {0x46, 0x00},
-        {0x49, 0x20},
-        {0x4b, 0x3c},
-        {0x50, 0x20},
-        {0x42, 0x10},
-
-        /*isp*/
-
-        {0xfe, 0x01},
-        {0x0a, 0xc5},
-        {0x45, 0x00},
-        {0xfe, 0x00},
-        {0x40, 0xff},
-        {0x41, 0x25},
-        {0x42, 0xcf},
-        {0x43, 0x10},
-        {0x44, 0x06},	//改成RGB565输出
-        {0x46, 0x0f},	//决定了VSYNC,HSYNC, pixclk
-        {0x49, 0x03},
-        {0x4f, 0x01},
-        {0xde, 0x84},
-        {0xfe, 0x02},
-        {0x22, 0xf6},
-
-        /*Shading*/
-
-        {0xfe, 0x01},
-        {0xc1, 0x3c},
-        {0xc2, 0x50},
-        {0xc3, 0x00},
-        {0xc4, 0x32},
-        {0xc5, 0x24},
-        {0xc6, 0x16},
-        {0xc7, 0x08},
-        {0xc8, 0x08},
-        {0xc9, 0x00},
-        {0xca, 0x20},
-        {0xdc, 0x8a},
-        {0xdd, 0xa0},
-        {0xde, 0xa6},
-        {0xdf, 0x75},
-
-        /*AWB*/
-
-        {0xfe, 0x01},
-        {0x7c, 0x09},
-        {0x65, 0x06},
-        {0x7c, 0x08},
-        {0x56, 0xf4},
-        {0x66, 0x0f},
-        {0x67, 0x84},
-        {0x6b, 0x80},
-        {0x6d, 0x12},
-        {0x6e, 0xb0},
-        {0x86, 0x00},
-        {0x87, 0x00},
-        {0x88, 0x00},
-        {0x89, 0x00},
-        {0x8a, 0x00},
-        {0x8b, 0x00},
-        {0x8c, 0x00},
-        {0x8d, 0x00},
-        {0x8e, 0x00},
-        {0x8f, 0x00},
-        {0x90, 0xef},
-        {0x91, 0xe1},
-        {0x92, 0x0c},
-        {0x93, 0xef},
-        {0x94, 0x65},
-        {0x95, 0x1f},
-        {0x96, 0x0c},
-        {0x97, 0x2d},
-        {0x98, 0x20},
-        {0x99, 0xaa},
-        {0x9a, 0x3f},
-        {0x9b, 0x2c},
-        {0x9c, 0x5f},
-        {0x9d, 0x3e},
-        {0x9e, 0xaa},
-        {0x9f, 0x67},
-        {0xa0, 0x60},
-        {0xa1, 0x00},
-        {0xa2, 0x00},
-        {0xa3, 0x0a},
-        {0xa4, 0xb6},
-        {0xa5, 0xac},
-        {0xa6, 0xc1},
-        {0xa7, 0xac},
-        {0xa8, 0x55},
-        {0xa9, 0xc3},
-        {0xaa, 0xa4},
-        {0xab, 0xba},
-        {0xac, 0xa8},
-        {0xad, 0x55},
-        {0xae, 0xc8},
-        {0xaf, 0xb9},
-        {0xb0, 0xd4},
-        {0xb1, 0xc3},
-        {0xb2, 0x55},
-        {0xb3, 0xd8},
-        {0xb4, 0xce},
-        {0xb5, 0x00},
-        {0xb6, 0x00},
-        {0xb7, 0x05},
-        {0xb8, 0xd6},
-        {0xb9, 0x8c},
-
-        /*CC*/
-
-        {0xfe, 0x01},
-        {0xd0, 0x40}, //3a
-        {0xd1, 0xf8},
-        {0xd2, 0x00},
-        {0xd3, 0xfa},
-        {0xd4, 0x45},
-        {0xd5, 0x02},
-
-        {0xd6, 0x30},
-        {0xd7, 0xfa},
-        {0xd8, 0x08},
-        {0xd9, 0x08},
-        {0xda, 0x58},
-        {0xdb, 0x02},
-        {0xfe, 0x00},
-
-        /*Gamma*/
-        {0xfe, 0x00},
-        {0xba, 0x00},
-        {0xbb, 0x04},
-        {0xbc, 0x0a},
-        {0xbd, 0x0e},
-        {0xbe, 0x22},
-        {0xbf, 0x30},
-        {0xc0, 0x3d},
-        {0xc1, 0x4a},
-        {0xc2, 0x5d},
-        {0xc3, 0x6b},
-        {0xc4, 0x7a},
-        {0xc5, 0x85},
-        {0xc6, 0x90},
-        {0xc7, 0xa5},
-        {0xc8, 0xb5},
-        {0xc9, 0xc2},
-        {0xca, 0xcc},
-        {0xcb, 0xd5},
-        {0xcc, 0xde},
-        {0xcd, 0xea},
-        {0xce, 0xf5},
-        {0xcf, 0xff},
-
-        /*Auto Gamma*/
-        {0xfe, 0x00},
-        {0x5a, 0x08},
-        {0x5b, 0x0f},
-        {0x5c, 0x15},
-        {0x5d, 0x1c},
-        {0x5e, 0x28},
-        {0x5f, 0x36},
-        {0x60, 0x45},
-        {0x61, 0x51},
-        {0x62, 0x6a},
-        {0x63, 0x7d},
-        {0x64, 0x8d},
-        {0x65, 0x98},
-        {0x66, 0xa2},
-        {0x67, 0xb5},
-        {0x68, 0xc3},
-        {0x69, 0xcd},
-        {0x6a, 0xd4},
-        {0x6b, 0xdc},
-        {0x6c, 0xe3},
-        {0x6d, 0xf0},
-        {0x6e, 0xf9},
-        {0x6f, 0xff},
-
-        /*Gain*/
-
-        {0xfe, 0x00},
-        {0x70, 0x50},
-
-        /*AEC*/
-        {0xfe, 0x00},
-        {0x4f, 0x01},
-        {0xfe, 0x01},
-
-        {0x44, 0x04},
-        {0x1f, 0x30},
-        {0x20, 0x40},
-		{0x26,0x4d,1},
-        {0x27, 0x01},
-		{0x28,0xce,1},
-        {0x29, 0x03},
-		{0x2a,0x02,1},
-        {0x2b, 0x03},
-        {0x2c, 0xe9},
-        {0x2d, 0x07},
-        {0x2e, 0xd2},
-        {0x2f, 0x0b},
-        {0x30, 0x6e},
-        {0x31, 0x0e},
-        {0x32, 0x70},
-        {0x33, 0x12},
-        {0x34, 0x0c},
-        {0x3c, 0x00}, //[5:4] Max level setting
-        {0x3e, 0x20},
-        {0x3f, 0x2d},
-        {0x40, 0x40},
-        {0x41, 0x5b},
-        {0x42, 0x82},
-        {0x43, 0xb7},
-        {0x04, 0x0a},
-        {0x02, 0x79},
-        {0x03, 0xc0},
-
-        /*measure window*/
-        {0xcc, 0x08},
-        {0xcd, 0x08},
-        {0xce, 0xa4},
-        {0xcf, 0xec},
-
-        /*DNDD*/
-        {0xfe, 0x00},
-        {0x81, 0xb8}, //f8
-        {0x82, 0x12},
-        {0x83, 0x0a},
-        {0x84, 0x01},
-        {0x86, 0x50},
-        {0x87, 0x18},
-        {0x88, 0x10},
-        {0x89, 0x70},
-        {0x8a, 0x20},
-        {0x8b, 0x10},
-        {0x8c, 0x08},
-        {0x8d, 0x0a},
-
-        /*Intpee*/
-        {0xfe, 0x00},
-        {0x8f, 0xaa},
-        {0x90, 0x9c},
-        {0x91, 0x52},
-        {0x92, 0x03},
-        {0x93, 0x03},
-        {0x94, 0x08},
-        {0x95, 0x44},
-        {0x97, 0x00},
-        {0x98, 0x00},
-
-        /*ASDE*/
-        {0xfe, 0x00},
-        {0xa1, 0x30},
-        {0xa2, 0x41},
-        {0xa4, 0x30},
-        {0xa5, 0x20},
-        {0xaa, 0x30},
-        {0xac, 0x32},
-
-        /*YCP*/
-        {0xfe, 0x00},
-        {0xd1, 0x3c},
-        {0xd2, 0x3c},
-        {0xd3, 0x38},
-        {0xd6, 0xf4},
-        {0xd7, 0x1d},
-        {0xdd, 0x73},
-        {0xde, 0x84},
-
-        {0xfe, 0x03},
-        {0x5a, 0x40}, //00 //yuv
-
-};
-
-
-int luat_carmera_gc032a_init(luat_camera_conf_t* conf) {
-
-    uint8_t Reg = 0xf0;
-
-    //HWTimer_SetPWM(HW_TIMER5, 12000000, 0, 0);
-	//Task_DelayMS(1);
-
-
-	//GPIO_Output(GPIOD_06, 1);
-	//GPIO_Output(GPIOD_07, 1);
-	Task_DelayUS(10);
-	// GPIO_Output(GPIOD_07, 0);
-	// I2C_MasterSetup(I2C_ID0, 400000);
-    char Data[2];
-	Data[0] = 0xf4;
-	Data[1] = 0x10;
-
-    luat_i2c_send(conf->port_id, 0x21, Data, 2);
-    luat_i2c_read_reg(conf->port_id, 0x21, Reg, Data);
-	//I2C_BlockWrite(I2C_ID0, GC032A_I2C_ADDRESS, Data, 2, 10, NULL, 0);
-	//I2C_BlockRead(I2C_ID0, GC032A_I2C_ADDRESS, &Reg, Data, 2, 10, NULL, 0);
-	if ((0x23 == Data[0]) && (0x2a == Data[1]))
-	{
-		LLOGD("识别到GC032A控制芯片");
-	}
-	else
-	{
-		LLOGW("没有识别到GC032A控制芯片");
-		return -1;
-	}
-
-	Data[0] = 0xfe;
-	Data[1] = 0x00;
-	Reg = 0x44;
-
-	//I2C_BlockWrite(I2C_ID0, GC032A_I2C_ADDRESS, Data, 2, 10, NULL, 0);
-	//I2C_BlockRead(I2C_ID0, GC032A_I2C_ADDRESS, &Reg, Data, 2, 10, NULL, 0);
-    luat_i2c_send(conf->port_id, 0x21, Data, 2);
-    luat_i2c_read_reg(conf->port_id, 0x21, Reg, Data);
-	LLOGD("gc032a %x,%x", Data[0], Data[1]);
-	for(size_t i = 0; i < sizeof(GC032A_InitRegQueue)/sizeof(uint16_t); i++)
-	{
-		//I2C_BlockWrite(I2C_ID0, GC032A_I2C_ADDRESS, GC032A_InitRegQueue[i].Data, 2, 10, NULL, 0);
-        luat_i2c_write(conf->port_id, GC032A_InitRegQueue[i], 2);
-	}
-
-    return 0;
-}

+ 0 - 16
components/camera/luat_carmera.c

@@ -1,16 +0,0 @@
-
-#include "luat_base.h"
-#include "luat_camera.h"
-#include "luat_i2c.h"
-
-
-
-int luat_camera_init(luat_camera_conf* conf) {
-    if (!strcmp("gc032a", conf->type_name)) {
-        
-    }
-}
-
-int luat_camera_close(int id) {
-    return 0; // 不支持关闭
-}

+ 82 - 0
components/camera/luat_lib_camera.c

@@ -0,0 +1,82 @@
+
+/*
+@module  camera
+@summary 摄像头
+@version 1.0
+@date    2022.01.11
+*/
+#include "luat_base.h"
+#include "luat_camera.h"
+
+#define LUAT_LOG_TAG "camera"
+
+static int l_camera_init(lua_State *L){
+    luat_camera_conf_t conf = {0};
+    if (lua_istable(L, 1)) {
+        lua_pushliteral(L, "zbar_scan");
+        lua_gettable(L, 1);
+        if (lua_isinteger(L, -1)) {
+            conf.zbar_scan = luaL_checkinteger(L, -1);
+        }
+        lua_pop(L, 1);
+        lua_pushliteral(L, "i2c_addr");
+        lua_gettable(L, 1);
+        if (lua_isinteger(L, -1)) {
+            conf.i2c_addr = luaL_checkinteger(L, -1);
+        }
+        lua_pop(L, 1);
+        lua_pushliteral(L, "sensor_width");
+        lua_gettable(L, 1);
+        if (lua_isinteger(L, -1)) {
+            conf.sensor_width = luaL_checkinteger(L, -1);
+        }
+        lua_pop(L, 1);
+        lua_pushliteral(L, "sensor_height");
+        lua_gettable(L, 1);
+        if (lua_isinteger(L, -1)) {
+            conf.sensor_height = luaL_checkinteger(L, -1);
+        }
+        lua_pop(L, 1);
+        lua_pushliteral(L, "id_reg");
+        lua_gettable(L, 1);
+        if (lua_isinteger(L, -1)) {
+            conf.id_reg = luaL_checkinteger(L, -1);
+        }
+        lua_pop(L, 1);
+        lua_pushliteral(L, "id_value");
+        lua_gettable(L, 1);
+        if (lua_isinteger(L, -1)) {
+            conf.id_value = luaL_checkinteger(L, -1);
+        }
+        lua_pop(L, 1);
+        lua_pushliteral(L, "init_cmd");
+        lua_gettable(L, 1);
+        if (lua_istable(L, -1)) {
+            size_t init_cmd_size = lua_rawlen(L, -1);
+            conf.init_cmd = luat_heap_malloc(init_cmd_size * sizeof(uint8_t));
+            for (size_t i = 1; i <= init_cmd_size; i++){
+                lua_geti(L, -1, i);
+                conf.init_cmd[i-1] = luaL_checkinteger(L, -1);
+                lua_pop(L, 1);
+            }
+        }
+        lua_pop(L, 1);
+    }
+    luat_camera_init(&conf);
+    return 0;
+}
+
+#include "rotable.h"
+static const rotable_Reg reg_camera[] =
+{
+    { "init" ,       l_camera_init , 0},
+    // { "open" ,       l_camera_open , 0},
+    // { "close" ,      l_camera_close, 0},
+	{ NULL,          NULL ,       0}
+};
+
+LUAMOD_API int luaopen_camera( lua_State *L ) {
+    luat_newlib(L, reg_camera);
+    return 1;
+}
+

+ 1 - 1
luat/include/luat_libs.h

@@ -104,7 +104,7 @@ LUAMOD_API int luaopen_dac( lua_State *L );
 LUAMOD_API int luaopen_otp( lua_State *L );
 LUAMOD_API int luaopen_mlx90640( lua_State *L );
 LUAMOD_API int luaopen_zlib( lua_State *L );
-
+LUAMOD_API int luaopen_camera( lua_State *L );
 LUAMOD_API int luaopen_luf( lua_State *L );
 
 #endif