update: 调整mobile.scell函数的返回值为table,一次性返回足够多的信息, 并可以容纳更多信息
[LuatOS.git] / components / camera / luat_camera.h
blob7a318be8c775fbeb52b4d490de9f5796ab274283
1 /******************************************************************************
2 * CAMERA设备操作抽象层
3 * @author Dozingfiretruck
4 * @since 0.0.1
5 *****************************************************************************/
6 #ifndef Luat_CAMERA_H
7 #define Luat_CAMERA_H
9 #include "luat_base.h"
10 #ifdef __LUATOS__
11 #include "luat_lcd.h"
12 #endif
13 /**
14 * @defgroup CAMERA CAMERA设备(CAMERA)
15 * @{
17 enum
19 LUAT_CAMERA_FRAME_START = 0,
20 LUAT_CAMERA_FRAME_END,
21 LUAT_CAMERA_FRAME_RX_DONE,
22 LUAT_CAMERA_FRAME_ERROR,
24 LUAT_CAMERA_MODE_AUTO = 0,
25 LUAT_CAMERA_MODE_SCAN,
28 typedef struct luat_camera_conf
30 uint8_t id;
31 uint8_t zbar_scan;
32 uint8_t draw_lcd;
33 uint8_t i2c_id;
34 uint8_t i2c_addr;
35 uint8_t pwm_id;
36 size_t pwm_period;
37 uint8_t pwm_pulse;
38 uint16_t sensor_width;
39 uint16_t sensor_height;
40 uint8_t color_bit;
41 uint8_t id_reg;
42 uint8_t id_value;
43 size_t init_cmd_size;
44 uint8_t *init_cmd;
45 #ifdef __LUATOS__
46 luat_lcd_conf_t* lcd_conf;
47 #else
48 void *lcd_conf;
49 #endif
50 } luat_camera_conf_t;
52 typedef struct
54 size_t camera_speed; //提供给camera时钟频率
55 uint16_t sensor_width; //camera的最大宽度
56 uint16_t sensor_height; //camera的最大高度
57 uint8_t only_y;
58 uint8_t rowScaleRatio;
59 uint8_t colScaleRatio;
60 uint8_t scaleBytes;
61 uint8_t spi_mode;
62 uint8_t is_msb; //0 or 1;
63 uint8_t is_two_line_rx; //0 or 1;
64 uint8_t seq_type; //0 or 1
65 uint8_t plat_param[4];
66 #ifdef __LUATOS__
67 luat_lcd_conf_t* lcd_conf;
68 #else
69 void *lcd_conf;
70 #endif
71 } luat_spi_camera_t;
72 #ifdef __LUATOS__
73 int l_camera_handler(lua_State *L, void* ptr);
74 #endif
75 /**
76 * @brief 配置spi camera并且初始化camera
77 * @param id camera接收数据总线ID,ec618上有2条,0和1
78 * @param conf camera相关配置
79 * @param callback camera接收中断回调,注意这是在中断里的回调
80 * @param param 中断回调时用户的参数
81 * @return >=0成功,其他失败
83 int luat_camera_setup(int id, luat_spi_camera_t *conf, void* callback, void *param);
85 /**
86 * @brief 配置图像大小
87 * @param id camera接收数据总线ID
88 * @param w 图像宽
89 * @param h 图像高
90 * @return >=0成功,其他失败
92 int luat_camera_set_image_w_h(int id, uint16_t w, uint16_t h);
94 /**
95 * @brief 配置camera并且初始化camera,spi camera不要使用这个
96 * @param conf camera相关配置
97 * @return 0成功,其他失败
99 int luat_camera_init(luat_camera_conf_t *conf);
102 * @brief 关闭camera并且释放资源
103 * @param id camera接收数据总线ID
104 * @return 0成功,其他失败
106 int luat_camera_close(int id);
109 * @brief 摄像头启动开始接收数据,csdk专用
110 * @param id camera接收数据总线ID
111 * @param buf 用户区地址,如果为NULL,则表示不存放到用户区
112 * @return 0成功,其他失败
114 int luat_camera_start_with_buffer(int id, void *buf);
116 * @brief 摄像头切换接收数据缓冲区,csdk专用
117 * @param id camera接收数据总线ID
118 * @param buf 用户区地址,如果为NULL,则表示不存放到用户区
119 * @return 0成功,其他失败
121 void luat_camera_continue_with_buffer(int id, void *buf);
123 * @brief 暂停接收camera数据
124 * @param id camera接收数据总线ID
125 * @param is_pause 非0暂停,0恢复
126 * @return 0成功,其他失败
128 int luat_camera_pause(int id, uint8_t is_pause);
130 * @brief 扫码库初始化
131 * @param type 扫码库型号,目前只支持0
132 * @param stack 扫码库任务的堆栈地址
133 * @param stack_length 扫码库任务的堆栈深度,type=0时需要至少220KB
134 * @param priority 扫码库任务优先级
135 * @return 0成功,其他失败
137 int luat_camera_image_decode_init(uint8_t type, void *stack, uint32_t stack_length, uint32_t priority);
139 * @brief 扫码库进行一次解码
140 * @param data 缓冲区
141 * @param image_w 图像宽
142 * @param image_h 图像高
143 * @param timeout 超时
144 * @param callback 回调函数
145 * @param param 回调参数
146 * @return 0成功,其他失败
148 int luat_camera_image_decode_once(uint8_t *data, uint16_t image_w, uint16_t image_h, uint32_t timeout, void *callback, void *param);
151 * @brief 扫码库反初始化
153 void luat_camera_image_decode_deinit(void);
155 * @brief 获取解码结果
156 * @param buf 缓冲区
157 * @return 1成功,其他失败
159 int luat_camera_image_decode_get_result(uint8_t *buf);
161 /**********以下是luatos使用,csdk不要使用***********/
163 * @brief 开始接收camera数据
164 * @param id camera接收数据总线ID
165 * @return 0成功,其他失败
167 int luat_camera_start(int id);
169 * @brief 停止接收camera数据
170 * @param id camera接收数据总线ID
171 * @return 0成功,其他失败
173 int luat_camera_stop(int id);
175 int luat_camera_preview(int id, uint8_t on_off);
177 int luat_camera_work_mode(int id, int mode);
179 int luat_camera_capture(int id, uint8_t quality, const char *path);
181 int luat_camera_capture_in_ram(int id, uint8_t quality, void *buffer);
182 /** @}*/
183 #endif