1ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/******************************************************************************
2ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * $Id: AKFS_Device.c 580 2012-03-29 09:56:21Z yamada.rj $
3ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda ******************************************************************************
4ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda *
5ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * Copyright (C) 2012 Asahi Kasei Microdevices Corporation, Japan
6ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda *
7ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * Licensed under the Apache License, Version 2.0 (the "License");
8ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * you may not use this file except in compliance with the License.
9ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * You may obtain a copy of the License at
10ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda *
11ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda *      http://www.apache.org/licenses/LICENSE-2.0
12ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda *
13ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * Unless required by applicable law or agreed to in writing, software
14ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * distributed under the License is distributed on an "AS IS" BASIS,
15ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * See the License for the specific language governing permissions and
17ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * limitations under the License.
18ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda */
19ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#include "AKFS_Device.h"
20ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
21ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16 AKFS_InitBuffer(
22ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	const	int16	ndata,		/*!< Size of vector buffer */
23ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			AKFVEC	vdata[]		/*!< Vector buffer */
24ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda)
25ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda{
26ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	int i;
27ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
28ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	/* size check */
29ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	if (ndata <= 0) {
30ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		return AKFS_ERROR;
31ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	}
32ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
33ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	for (i=0; i<ndata; i++) {
34ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		vdata[i].u.x = AKFS_INIT_VALUE_F;
35ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		vdata[i].u.y = AKFS_INIT_VALUE_F;
36ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		vdata[i].u.z = AKFS_INIT_VALUE_F;
37ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	}
38ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
39ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	return AKFS_SUCCESS;
40ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda}
41ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
42ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16 AKFS_BufShift(
43ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	const	int16	len,	/*!< size of buffer */
44ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	const	int16	shift,	/*!< shift size */
45ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			AKFVEC	v[] /*!< buffer */
46ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda)
47ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda{
48ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	int16 i;
49ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
50ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	if((shift < 1) || (len < shift)) {
51ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		return AKFS_ERROR;
52ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	}
53ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	for (i = len-1; i >= shift; i--) {
54ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		v[i] = v[i-shift];
55ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	}
56ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	return AKFS_SUCCESS;
57ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda}
58ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
59ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudaint16 AKFS_Rotate(
60ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	const	AKFS_PATNO	pat,
61ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			AKFVEC*		vec
62ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda)
63ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda{
64ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	AKFLOAT tmp;
65ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	switch(pat){
66ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		/* Obverse */
67ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		case PAT1:
68ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			/* This is Android default */
69ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			break;
70ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		case PAT2:
71ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			tmp = vec->u.x;
72ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.x = vec->u.y;
73ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.y = -tmp;
74ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			break;
75ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		case PAT3:
76ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.x = -(vec->u.x);
77ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.y = -(vec->u.y);
78ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			break;
79ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		case PAT4:
80ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			tmp = vec->u.x;
81ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.x = -(vec->u.y);
82ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.y = tmp;
83ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			break;
84ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		/* Reverse */
85ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		case PAT5:
86ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.x = -(vec->u.x);
87ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.z = -(vec->u.z);
88ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			break;
89ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		case PAT6:
90ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			tmp = vec->u.x;
91ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.x = vec->u.y;
92ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.y = tmp;
93ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.z = -(vec->u.z);
94ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			break;
95ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		case PAT7:
96ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.y = -(vec->u.y);
97ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.z = -(vec->u.z);
98ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			break;
99ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		case PAT8:
100ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			tmp = vec->u.x;
101ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.x = -(vec->u.y);
102ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.y = -tmp;
103ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			vec->u.z = -(vec->u.z);
104ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			break;
105ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda		default:
106ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda			return AKFS_ERROR;
107ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	}
108ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
109ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	return AKFS_SUCCESS;
110ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda}
111ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
112