1/******************************************************************************
2 * $Id: AKFS_Device.h 580 2012-03-29 09:56:21Z yamada.rj $
3 ******************************************************************************
4 *
5 * Copyright (C) 2012 Asahi Kasei Microdevices Corporation, Japan
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 *      http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19#ifndef AKFS_INC_DEVICE_H
20#define AKFS_INC_DEVICE_H
21
22#include <float.h>
23#include "AKFS_Configure.h"
24
25/***** Constant definition ****************************************************/
26#define AKFS_ERROR			0
27#define AKFS_SUCCESS		1
28
29#define AKFS_HDATA_SIZE		32
30#define AKFS_ADATA_SIZE		32
31
32/***** Type declaration *******************************************************/
33typedef signed char     int8;
34typedef signed short    int16;
35typedef unsigned char   uint8;
36typedef unsigned short  uint16;
37
38
39#ifdef AKFS_PRECISION_DOUBLE
40typedef	double			AKFLOAT;
41#define AKFS_EPSILON	DBL_EPSILON
42#define AKFS_FMAX		DBL_MAX
43#define AKFS_FMIN		DBL_MIN
44
45#else
46typedef	float			AKFLOAT;
47#define AKFS_EPSILON	FLT_EPSILON
48#define AKFS_FMAX		FLT_MAX
49#define AKFS_FMIN		FLT_MIN
50
51#endif
52
53/* Treat maximum value as initial value */
54#define AKFS_INIT_VALUE_F	AKFS_FMAX
55
56/***** Vector *****/
57typedef union _uint8vec{
58	struct {
59		uint8	x;
60		uint8	y;
61		uint8	z;
62	}u;
63	uint8	v[3];
64} uint8vec;
65
66typedef union _AKFVEC{
67	struct {
68		AKFLOAT x;
69		AKFLOAT y;
70		AKFLOAT z;
71	}u;
72	AKFLOAT	v[3];
73} AKFVEC;
74
75/***** Layout pattern *****/
76typedef enum _AKFS_PATNO {
77	PAT_INVALID = 0,
78	PAT1,	/* obverse: 1st pin is right down */
79	PAT2,	/* obverse: 1st pin is left down */
80	PAT3,	/* obverse: 1st pin is left top */
81	PAT4,	/* obverse: 1st pin is right top */
82	PAT5,	/* reverse: 1st pin is left down (from top view) */
83	PAT6,	/* reverse: 1st pin is left top (from top view) */
84	PAT7,	/* reverse: 1st pin is right top (from top view) */
85	PAT8	/* reverse: 1st pin is right down (from top view) */
86} AKFS_PATNO;
87
88/***** Prototype of function **************************************************/
89AKLIB_C_API_START
90int16 AKFS_InitBuffer(
91	const	int16	ndata,		/*!< Size of raw vector buffer */
92			AKFVEC	vdata[]		/*!< Raw vector buffer */
93);
94
95int16 AKFS_BufShift(
96	const	int16	len,
97	const	int16	shift,
98			AKFVEC	v[]
99);
100
101int16 AKFS_Rotate(
102	const   AKFS_PATNO  pat,
103			AKFVEC*     vec
104);
105AKLIB_C_API_END
106
107#endif
108
109