Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
libisp.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include "libisp.h"
#include "libisp_config.h"
+ Include dependency graph for libisp.c:

Go to the source code of this file.

Data Structures

struct  avi_isp_offsets
 

Macros

#define PRINT(string, ...)   fprintf(stderr, "[libisp->%s()] " string,__FUNCTION__ , ##__VA_ARGS__)
 
#define VERBOSE_PRINT(...)
 
#define AVI_BASE   0x400000
 
#define AVI_SIZE   0x100000
 
#define AVI_MASK   (AVI_SIZE - 1)
 
#define AVI_ISP_STAT_YUV_MAX_WAIT   3
 
#define AVI_ISP_IOGET_OFFSETS   _IOR('F', 0x33, struct avi_isp_offsets)
 
#define readl(_addr)   (*((volatile uint32_t *)(_addr)))
 
#define writel(_val, _addr)   (*((volatile uint32_t *)(_addr)) = _val)
 
#define EXPAND_AS_FUNCTION(_node)
 

Functions

static int avi_isp_get_offsets_fd (int fd, struct avi_isp_offsets *off)
 This is taken from libisp. More...
 
static int open_isp_fd (struct libisp_context *ctx, int fd)
 This is taken from libisp. More...
 
int configure_isp (struct v4l2_device *dev)
 
int isp_request_statistics_yuv_window (uint16_t x_start, uint16_t x_end, uint16_t y_start, uint16_t y_end, uint16_t x_odd_inc, uint16_t y_odd_inc)
 
static int isp_set_statistics_yuv_window (void)
 
int isp_get_statistics_yuv (struct isp_yuv_stats_t *yuv_stats)
 
static void memcpy_to_registers (unsigned long addr, const void *reg_base, size_t s)
 
static void memcpy_from_registers (void *reg_base, unsigned long addr, size_t s)
 

Variables

uint8_t curWait = 0
 
static struct libisp_context isp_ctx
 
uint16_t requestWindow [6] = {0}
 
static const unsigned isp_bases []
 

Data Structure Documentation

◆ avi_isp_offsets

struct avi_isp_offsets

Definition at line 26 of file libisp.c.

Data Fields
uint32_t chain_bayer
uint32_t chain_yuv
uint32_t chroma
uint32_t gamma_corrector
uint32_t statistics_yuv

Macro Definition Documentation

◆ AVI_BASE

#define AVI_BASE   0x400000

Definition at line 22 of file libisp.c.

◆ AVI_ISP_IOGET_OFFSETS

#define AVI_ISP_IOGET_OFFSETS   _IOR('F', 0x33, struct avi_isp_offsets)

Definition at line 38 of file libisp.c.

◆ AVI_ISP_STAT_YUV_MAX_WAIT

#define AVI_ISP_STAT_YUV_MAX_WAIT   3

Definition at line 34 of file libisp.c.

◆ AVI_MASK

#define AVI_MASK   (AVI_SIZE - 1)

Definition at line 24 of file libisp.c.

◆ AVI_SIZE

#define AVI_SIZE   0x100000

Definition at line 23 of file libisp.c.

◆ EXPAND_AS_FUNCTION

#define EXPAND_AS_FUNCTION (   _node)
Value:
void avi_isp_ ## _node ## _set_registers(struct libisp_context *c, \
struct avi_isp_ ## _node ## _regs const *regs) \
{ \
memcpy_to_registers(c->offsets[_node], regs, sizeof(*regs)); \
} \
\
void avi_isp_ ## _node ## _get_registers(struct libisp_context *c, \
struct avi_isp_ ## _node ## _regs *regs) \
{ \
memcpy_from_registers(regs, c->offsets[_node], sizeof(*regs)); \
}

Definition at line 343 of file libisp.c.

◆ PRINT

#define PRINT (   string,
  ... 
)    fprintf(stderr, "[libisp->%s()] " string,__FUNCTION__ , ##__VA_ARGS__)

Definition at line 14 of file libisp.c.

◆ readl

#define readl (   _addr)    (*((volatile uint32_t *)(_addr)))

Definition at line 41 of file libisp.c.

◆ VERBOSE_PRINT

#define VERBOSE_PRINT (   ...)

Definition at line 19 of file libisp.c.

◆ writel

#define writel (   _val,
  _addr 
)    (*((volatile uint32_t *)(_addr)) = _val)

Definition at line 42 of file libisp.c.

Function Documentation

◆ avi_isp_get_offsets_fd()

static int avi_isp_get_offsets_fd ( int  fd,
struct avi_isp_offsets off 
)
static

This is taken from libisp.

Original function takes the videodev name and re-opens it, causing undefined behaviour. Here we reuse the already-opened file descriptor

Definition at line 90 of file libisp.c.

References AVI_ISP_IOGET_OFFSETS, fd, and VERBOSE_PRINT.

Referenced by open_isp_fd().

+ Here is the caller graph for this function:

◆ configure_isp()

◆ isp_get_statistics_yuv()

◆ isp_request_statistics_yuv_window()

int isp_request_statistics_yuv_window ( uint16_t  x_start,
uint16_t  x_end,
uint16_t  y_start,
uint16_t  y_end,
uint16_t  x_odd_inc,
uint16_t  y_odd_inc 
)

Definition at line 214 of file libisp.c.

References requestWindow, and VERBOSE_PRINT.

Referenced by mt9f002_init(), and mt9f002_setting_update_resolution().

+ Here is the caller graph for this function:

◆ isp_set_statistics_yuv_window()

◆ memcpy_from_registers()

static void memcpy_from_registers ( void *  reg_base,
unsigned long  addr,
size_t  s 
)
inlinestatic

Definition at line 329 of file libisp.c.

References readl, and s.

◆ memcpy_to_registers()

static void memcpy_to_registers ( unsigned long  addr,
const void *  reg_base,
size_t  s 
)
inlinestatic

Definition at line 315 of file libisp.c.

References s, and writel.

◆ open_isp_fd()

static int open_isp_fd ( struct libisp_context ctx,
int  fd 
)
static

This is taken from libisp.

Original function takes the videodev name and re-opens it, causing undefined behaviour. Here we reuse the already-opened file descriptor

Definition at line 105 of file libisp.c.

References AVI_BASE, libisp_context::avi_base, avi_isp_get_offsets_fd(), AVI_MASK, AVI_SIZE, avi_isp_offsets::chain_bayer, avi_isp_offsets::chain_yuv, avi_isp_offsets::chroma, libisp_context::devmem, fd, avi_isp_offsets::gamma_corrector, isp_bases, ISP_NODE_NR, libisp_context::offsets, and avi_isp_offsets::statistics_yuv.

Referenced by configure_isp().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ curWait

uint8_t curWait = 0

Definition at line 35 of file libisp.c.

Referenced by isp_get_statistics_yuv().

◆ isp_bases

const unsigned isp_bases[]
static

Definition at line 51 of file libisp.c.

Referenced by open_isp_fd().

◆ isp_ctx

struct libisp_context isp_ctx
static
Initial value:
= {
.devmem = -1
}

Definition at line 35 of file libisp.c.

Referenced by configure_isp(), and isp_get_statistics_yuv().

◆ requestWindow

uint16_t requestWindow[6] = {0}

Definition at line 49 of file libisp.c.

Referenced by isp_request_statistics_yuv_window(), and isp_set_statistics_yuv_window().