12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601 |
- /*
- * stk6d2x_fifo.c - Linux kernel modules for sensortek stk6d2x
- * ambient light sensor (Algorithm)
- *
- * Copyright (C) 2012~2018 Bk, sensortek Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
- #include <linux/input.h>
- #include <stk6d2x.h>
- #include "stk6d2x_sec.h"
- #ifdef STK_FIFO_ENABLE
- #ifdef SEC_FFT_FLICKER_1024
- // sec_hamming : 0~65535, Q16
- static const int32_t hamming[2048] = {
- 5243, 5243, 5243, 5244, 5245, 5246, 5248, 5250, 5252, 5254, 5257, 5260, 5263, 5267, 5271, 5275, 5279, 5284, 5289, 5294, 5300, 5305, 5312, 5318, 5325, 5332, 5339, 5346, 5354, 5362, 5370, 5379, 5388, 5397, 5407, 5417, 5427, 5437, 5448, 5458, 5470, 5481, 5493, 5505, 5517, 5530, 5543, 5556, 5569, 5583, 5597, 5611, 5626, 5641, 5656, 5671, 5687, 5703, 5719, 5735, 5752, 5769, 5787, 5804, 5822, 5840, 5859, 5878, 5897, 5916, 5935, 5955, 5975, 5996, 6016, 6037, 6059, 6080, 6102, 6124, 6146, 6169, 6192, 6215, 6238, 6262, 6286, 6310,
- 6335, 6360, 6385, 6410, 6436, 6462, 6488, 6514, 6541, 6568, 6595, 6623, 6651, 6679, 6707, 6736, 6764, 6794, 6823, 6853, 6883, 6913, 6943, 6974, 7005, 7036, 7068, 7100, 7132, 7164, 7197, 7230, 7263, 7296, 7330, 7364, 7398, 7433, 7467, 7502, 7538, 7573, 7609, 7645, 7681, 7718, 7755, 7792, 7829, 7867, 7905, 7943, 7981, 8020, 8059, 8098, 8137, 8177, 8217, 8257, 8297, 8338, 8379, 8420, 8462, 8504, 8545, 8588, 8630, 8673, 8716, 8759, 8803, 8846, 8890, 8934, 8979, 9024, 9069, 9114, 9159, 9205, 9251, 9297, 9344, 9390, 9437, 9484,
- 9532, 9580, 9627, 9676, 9724, 9773, 9822, 9871, 9920, 9970, 10019, 10070, 10120, 10170, 10221, 10272, 10323, 10375, 10427, 10479, 10531, 10583, 10636, 10689, 10742, 10795, 10849, 10903, 10957, 11011, 11066, 11121, 11175, 11231, 11286, 11342, 11398, 11454, 11510, 11567, 11624, 11681, 11738, 11795, 11853, 11911, 11969, 12027, 12086, 12145, 12204, 12263, 12322, 12382, 12442, 12502, 12562, 12623, 12683, 12744, 12806, 12867, 12929, 12990, 13052, 13115, 13177, 13240, 13302, 13365, 13429, 13492, 13556, 13620, 13684, 13748, 13813, 13877, 13942, 14007, 14073, 14138, 14204, 14270, 14336, 14402, 14469, 14535,
- 14602, 14669, 14737, 14804, 14872, 14940, 15008, 15076, 15144, 15213, 15282, 15351, 15420, 15489, 15559, 15629, 15699, 15769, 15839, 15909, 15980, 16051, 16122, 16193, 16265, 16336, 16408, 16480, 16552, 16624, 16697, 16769, 16842, 16915, 16988, 17062, 17135, 17209, 17283, 17357, 17431, 17506, 17580, 17655, 17730, 17805, 17880, 17955, 18031, 18107, 18182, 18258, 18335, 18411, 18487, 18564, 18641, 18718, 18795, 18872, 18950, 19027, 19105, 19183, 19261, 19339, 19418, 19496, 19575, 19654, 19733, 19812, 19891, 19970, 20050, 20130, 20209, 20289, 20370, 20450, 20530, 20611, 20691, 20772, 20853, 20934, 21016, 21097,
- 21178, 21260, 21342, 21424, 21506, 21588, 21670, 21753, 21835, 21918, 22001, 22084, 22167, 22250, 22333, 22417, 22500, 22584, 22668, 22751, 22836, 22920, 23004, 23088, 23173, 23257, 23342, 23427, 23512, 23597, 23682, 23767, 23853, 23938, 24024, 24110, 24196, 24281, 24367, 24454, 24540, 24626, 24713, 24799, 24886, 24973, 25059, 25146, 25233, 25320, 25408, 25495, 25582, 25670, 25758, 25845, 25933, 26021, 26109, 26197, 26285, 26373, 26462, 26550, 26638, 26727, 26816, 26904, 26993, 27082, 27171, 27260, 27349, 27438, 27527, 27617, 27706, 27796, 27885, 27975, 28064, 28154, 28244, 28334, 28424, 28514, 28604, 28694,
- 28784, 28875, 28965, 29055, 29146, 29236, 29327, 29417, 29508, 29599, 29690, 29781, 29871, 29962, 30053, 30144, 30236, 30327, 30418, 30509, 30600, 30692, 30783, 30875, 30966, 31058, 31149, 31241, 31332, 31424, 31516, 31607, 31699, 31791, 31883, 31975, 32067, 32159, 32251, 32343, 32435, 32527, 32619, 32711, 32803, 32895, 32987, 33079, 33172, 33264, 33356, 33449, 33541, 33633, 33725, 33818, 33910, 34003, 34095, 34187, 34280, 34372, 34465, 34557, 34650, 34742, 34835, 34927, 35019, 35112, 35204, 35297, 35389, 35482, 35574, 35667, 35759, 35852, 35944, 36037, 36129, 36222, 36314, 36407, 36499, 36591, 36684, 36776,
- 36869, 36961, 37053, 37146, 37238, 37330, 37423, 37515, 37607, 37699, 37792, 37884, 37976, 38068, 38160, 38252, 38344, 38436, 38528, 38620, 38712, 38804, 38896, 38988, 39080, 39171, 39263, 39355, 39447, 39538, 39630, 39721, 39813, 39904, 39996, 40087, 40178, 40270, 40361, 40452, 40543, 40634, 40726, 40817, 40907, 40998, 41089, 41180, 41271, 41361, 41452, 41543, 41633, 41724, 41814, 41904, 41995, 42085, 42175, 42265, 42355, 42445, 42535, 42625, 42714, 42804, 42894, 42983, 43073, 43162, 43251, 43341, 43430, 43519, 43608, 43697, 43786, 43875, 43963, 44052, 44141, 44229, 44317, 44406, 44494, 44582, 44670, 44758,
- 44846, 44934, 45021, 45109, 45196, 45284, 45371, 45458, 45546, 45633, 45719, 45806, 45893, 45980, 46066, 46153, 46239, 46325, 46411, 46497, 46583, 46669, 46755, 46841, 46926, 47011, 47097, 47182, 47267, 47352, 47437, 47521, 47606, 47691, 47775, 47859, 47943, 48027, 48111, 48195, 48279, 48362, 48446, 48529, 48612, 48695, 48778, 48861, 48944, 49026, 49109, 49191, 49273, 49355, 49437, 49519, 49600, 49682, 49763, 49845, 49926, 50007, 50087, 50168, 50249, 50329, 50409, 50489, 50569, 50649, 50729, 50808, 50888, 50967, 51046, 51125, 51204, 51283, 51361, 51440, 51518, 51596, 51674, 51752, 51829, 51907, 51984, 52061,
- 52138, 52215, 52291, 52368, 52444, 52520, 52597, 52672, 52748, 52824, 52899, 52974, 53049, 53124, 53199, 53273, 53348, 53422, 53496, 53570, 53644, 53717, 53790, 53864, 53937, 54009, 54082, 54155, 54227, 54299, 54371, 54443, 54514, 54586, 54657, 54728, 54799, 54869, 54940, 55010, 55080, 55150, 55220, 55290, 55359, 55428, 55497, 55566, 55635, 55703, 55771, 55839, 55907, 55975, 56042, 56110, 56177, 56244, 56310, 56377, 56443, 56509, 56575, 56641, 56706, 56772, 56837, 56902, 56966, 57031, 57095, 57159, 57223, 57287, 57350, 57413, 57476, 57539, 57602, 57664, 57727, 57789, 57850, 57912, 57973, 58034, 58095, 58156,
- 58217, 58277, 58337, 58397, 58457, 58516, 58575, 58634, 58693, 58752, 58810, 58868, 58926, 58984, 59041, 59098, 59155, 59212, 59269, 59325, 59381, 59437, 59493, 59548, 59603, 59658, 59713, 59768, 59822, 59876, 59930, 59983, 60037, 60090, 60143, 60196, 60248, 60300, 60352, 60404, 60455, 60507, 60558, 60608, 60659, 60709, 60759, 60809, 60859, 60908, 60957, 61006, 61055, 61103, 61151, 61199, 61247, 61294, 61342, 61389, 61435, 61482, 61528, 61574, 61620, 61665, 61710, 61755, 61800, 61844, 61889, 61933, 61976, 62020, 62063, 62106, 62149, 62191, 62233, 62275, 62317, 62359, 62400, 62441, 62481, 62522, 62562, 62602,
- 62642, 62681, 62720, 62759, 62798, 62836, 62874, 62912, 62950, 62987, 63024, 63061, 63098, 63134, 63170, 63206, 63241, 63276, 63311, 63346, 63381, 63415, 63449, 63483, 63516, 63549, 63582, 63615, 63647, 63679, 63711, 63742, 63774, 63805, 63836, 63866, 63896, 63926, 63956, 63985, 64014, 64043, 64072, 64100, 64128, 64156, 64184, 64211, 64238, 64265, 64291, 64317, 64343, 64369, 64394, 64419, 64444, 64469, 64493, 64517, 64540, 64564, 64587, 64610, 64633, 64655, 64677, 64699, 64720, 64741, 64762, 64783, 64804, 64824, 64843, 64863, 64882, 64901, 64920, 64939, 64957, 64975, 64992, 65010, 65027, 65043, 65060, 65076,
- 65092, 65108, 65123, 65138, 65153, 65168, 65182, 65196, 65210, 65223, 65236, 65249, 65262, 65274, 65286, 65298, 65309, 65320, 65331, 65342, 65352, 65362, 65372, 65382, 65391, 65400, 65408, 65417, 65425, 65433, 65440, 65447, 65454, 65461, 65467, 65473, 65479, 65485, 65490, 65495, 65500, 65504, 65508, 65512, 65516, 65519, 65522, 65525, 65527, 65529, 65531, 65532, 65534, 65535, 65535, 65536, 65536, 65536, 65535, 65535, 65534, 65532, 65531, 65529, 65527, 65525, 65522, 65519, 65516, 65512, 65508, 65504, 65500, 65495, 65490, 65485, 65479, 65473, 65467, 65461, 65454, 65447, 65440, 65433, 65425, 65417, 65408, 65400,
- 65391, 65382, 65372, 65362, 65352, 65342, 65331, 65320, 65309, 65298, 65286, 65274, 65262, 65249, 65236, 65223, 65210, 65196, 65182, 65168, 65153, 65138, 65123, 65108, 65092, 65076, 65060, 65043, 65027, 65010, 64992, 64975, 64957, 64939, 64920, 64901, 64882, 64863, 64843, 64824, 64804, 64783, 64762, 64741, 64720, 64699, 64677, 64655, 64633, 64610, 64587, 64564, 64540, 64517, 64493, 64469, 64444, 64419, 64394, 64369, 64343, 64317, 64291, 64265, 64238, 64211, 64184, 64156, 64128, 64100, 64072, 64043, 64014, 63985, 63956, 63926, 63896, 63866, 63836, 63805, 63774, 63742, 63711, 63679, 63647, 63615, 63582, 63549,
- 63516, 63483, 63449, 63415, 63381, 63346, 63311, 63276, 63241, 63206, 63170, 63134, 63098, 63061, 63024, 62987, 62950, 62912, 62874, 62836, 62798, 62759, 62720, 62681, 62642, 62602, 62562, 62522, 62481, 62441, 62400, 62359, 62317, 62275, 62233, 62191, 62149, 62106, 62063, 62020, 61976, 61933, 61889, 61844, 61800, 61755, 61710, 61665, 61620, 61574, 61528, 61482, 61435, 61389, 61342, 61294, 61247, 61199, 61151, 61103, 61055, 61006, 60957, 60908, 60859, 60809, 60759, 60709, 60659, 60608, 60558, 60507, 60455, 60404, 60352, 60300, 60248, 60196, 60143, 60090, 60037, 59983, 59930, 59876, 59822, 59768, 59713, 59658,
- 59603, 59548, 59493, 59437, 59381, 59325, 59269, 59212, 59155, 59098, 59041, 58984, 58926, 58868, 58810, 58752, 58693, 58634, 58575, 58516, 58457, 58397, 58337, 58277, 58217, 58156, 58095, 58034, 57973, 57912, 57850, 57789, 57727, 57664, 57602, 57539, 57476, 57413, 57350, 57287, 57223, 57159, 57095, 57031, 56966, 56902, 56837, 56772, 56706, 56641, 56575, 56509, 56443, 56377, 56310, 56244, 56177, 56110, 56042, 55975, 55907, 55839, 55771, 55703, 55635, 55566, 55497, 55428, 55359, 55290, 55220, 55150, 55080, 55010, 54940, 54869, 54799, 54728, 54657, 54586, 54514, 54443, 54371, 54299, 54227, 54155, 54082, 54009,
- 53937, 53864, 53790, 53717, 53644, 53570, 53496, 53422, 53348, 53273, 53199, 53124, 53049, 52974, 52899, 52824, 52748, 52672, 52597, 52520, 52444, 52368, 52291, 52215, 52138, 52061, 51984, 51907, 51829, 51752, 51674, 51596, 51518, 51440, 51361, 51283, 51204, 51125, 51046, 50967, 50888, 50808, 50729, 50649, 50569, 50489, 50409, 50329, 50249, 50168, 50087, 50007, 49926, 49845, 49763, 49682, 49600, 49519, 49437, 49355, 49273, 49191, 49109, 49026, 48944, 48861, 48778, 48695, 48612, 48529, 48446, 48362, 48279, 48195, 48111, 48027, 47943, 47859, 47775, 47691, 47606, 47521, 47437, 47352, 47267, 47182, 47097, 47011,
- 46926, 46841, 46755, 46669, 46583, 46497, 46411, 46325, 46239, 46153, 46066, 45980, 45893, 45806, 45719, 45633, 45546, 45458, 45371, 45284, 45196, 45109, 45021, 44934, 44846, 44758, 44670, 44582, 44494, 44406, 44317, 44229, 44141, 44052, 43963, 43875, 43786, 43697, 43608, 43519, 43430, 43341, 43251, 43162, 43073, 42983, 42894, 42804, 42714, 42625, 42535, 42445, 42355, 42265, 42175, 42085, 41995, 41904, 41814, 41724, 41633, 41543, 41452, 41361, 41271, 41180, 41089, 40998, 40907, 40817, 40726, 40634, 40543, 40452, 40361, 40270, 40178, 40087, 39996, 39904, 39813, 39721, 39630, 39538, 39447, 39355, 39263, 39171,
- 39080, 38988, 38896, 38804, 38712, 38620, 38528, 38436, 38344, 38252, 38160, 38068, 37976, 37884, 37792, 37699, 37607, 37515, 37423, 37330, 37238, 37146, 37053, 36961, 36869, 36776, 36684, 36591, 36499, 36407, 36314, 36222, 36129, 36037, 35944, 35852, 35759, 35667, 35574, 35482, 35389, 35297, 35204, 35112, 35019, 34927, 34835, 34742, 34650, 34557, 34465, 34372, 34280, 34187, 34095, 34003, 33910, 33818, 33725, 33633, 33541, 33449, 33356, 33264, 33172, 33079, 32987, 32895, 32803, 32711, 32619, 32527, 32435, 32343, 32251, 32159, 32067, 31975, 31883, 31791, 31699, 31607, 31516, 31424, 31332, 31241, 31149, 31058,
- 30966, 30875, 30783, 30692, 30600, 30509, 30418, 30327, 30236, 30144, 30053, 29962, 29871, 29781, 29690, 29599, 29508, 29417, 29327, 29236, 29146, 29055, 28965, 28875, 28784, 28694, 28604, 28514, 28424, 28334, 28244, 28154, 28064, 27975, 27885, 27796, 27706, 27617, 27527, 27438, 27349, 27260, 27171, 27082, 26993, 26904, 26816, 26727, 26638, 26550, 26462, 26373, 26285, 26197, 26109, 26021, 25933, 25845, 25758, 25670, 25582, 25495, 25408, 25320, 25233, 25146, 25059, 24973, 24886, 24799, 24713, 24626, 24540, 24454, 24367, 24281, 24196, 24110, 24024, 23938, 23853, 23767, 23682, 23597, 23512, 23427, 23342, 23257,
- 23173, 23088, 23004, 22920, 22836, 22751, 22668, 22584, 22500, 22417, 22333, 22250, 22167, 22084, 22001, 21918, 21835, 21753, 21670, 21588, 21506, 21424, 21342, 21260, 21178, 21097, 21016, 20934, 20853, 20772, 20691, 20611, 20530, 20450, 20370, 20289, 20209, 20130, 20050, 19970, 19891, 19812, 19733, 19654, 19575, 19496, 19418, 19339, 19261, 19183, 19105, 19027, 18950, 18872, 18795, 18718, 18641, 18564, 18487, 18411, 18335, 18258, 18182, 18107, 18031, 17955, 17880, 17805, 17730, 17655, 17580, 17506, 17431, 17357, 17283, 17209, 17135, 17062, 16988, 16915, 16842, 16769, 16697, 16624, 16552, 16480, 16408, 16336,
- 16265, 16193, 16122, 16051, 15980, 15909, 15839, 15769, 15699, 15629, 15559, 15489, 15420, 15351, 15282, 15213, 15144, 15076, 15008, 14940, 14872, 14804, 14737, 14669, 14602, 14535, 14469, 14402, 14336, 14270, 14204, 14138, 14073, 14007, 13942, 13877, 13813, 13748, 13684, 13620, 13556, 13492, 13429, 13365, 13302, 13240, 13177, 13115, 13052, 12990, 12929, 12867, 12806, 12744, 12683, 12623, 12562, 12502, 12442, 12382, 12322, 12263, 12204, 12145, 12086, 12027, 11969, 11911, 11853, 11795, 11738, 11681, 11624, 11567, 11510, 11454, 11398, 11342, 11286, 11231, 11175, 11121, 11066, 11011, 10957, 10903, 10849, 10795,
- 10742, 10689, 10636, 10583, 10531, 10479, 10427, 10375, 10323, 10272, 10221, 10170, 10120, 10070, 10019, 9970, 9920, 9871, 9822, 9773, 9724, 9676, 9627, 9580, 9532, 9484, 9437, 9390, 9344, 9297, 9251, 9205, 9159, 9114, 9069, 9024, 8979, 8934, 8890, 8846, 8803, 8759, 8716, 8673, 8630, 8588, 8545, 8504, 8462, 8420, 8379, 8338, 8297, 8257, 8217, 8177, 8137, 8098, 8059, 8020, 7981, 7943, 7905, 7867, 7829, 7792, 7755, 7718, 7681, 7645, 7609, 7573, 7538, 7502, 7467, 7433, 7398, 7364, 7330, 7296, 7263, 7230, 7197, 7164, 7132, 7100, 7068, 7036,
- 7005, 6974, 6943, 6913, 6883, 6853, 6823, 6794, 6764, 6736, 6707, 6679, 6651, 6623, 6595, 6568, 6541, 6514, 6488, 6462, 6436, 6410, 6385, 6360, 6335, 6310, 6286, 6262, 6238, 6215, 6192, 6169, 6146, 6124, 6102, 6080, 6059, 6037, 6016, 5996, 5975, 5955, 5935, 5916, 5897, 5878, 5859, 5840, 5822, 5804, 5787, 5769, 5752, 5735, 5719, 5703, 5687, 5671, 5656, 5641, 5626, 5611, 5597, 5583, 5569, 5556, 5543, 5530, 5517, 5505, 5493, 5481, 5470, 5458, 5448, 5437, 5427, 5417, 5407, 5397, 5388, 5379, 5370, 5362, 5354, 5346, 5339, 5332,
- 5325, 5318, 5312, 5305, 5300, 5294, 5289, 5284, 5279, 5275, 5271, 5267, 5263, 5260, 5257, 5254, 5252, 5250, 5248, 5246, 5245, 5244, 5243, 5243,
- };
- // sec_sin, sec_cos : -65536~65536
- static const int32_t sin[1024] = {
- 0, 205886, 411764, 617627, 823467, 1029276, 1235045,
- 1440769, 1646438, 1852045, 2057582, 2263042, 2468417, 2673699,
- 2878880, 3083953, 3288909, 3493742, 3698444, 3903006, 4107421,
- 4311681, 4515779, 4719707, 4923458, 5127023, 5330395, 5533566,
- 5736529, 5939276, 6141799, 6344092, 6546145, 6747952, 6949505,
- 7150796, 7351818, 7552563, 7753024, 7953192, 8153062, 8352624,
- 8551872, 8750798, 8949395, 9147655, 9345570, 9543133, 9740337,
- 9937175, 10133638, 10329720, 10525413, 10720709, 10915602, 11110084,
- 11304148, 11497786, 11690991, 11883756, 12076074, 12267936, 12459338,
- 12650270, 12840725, 13030697, 13220179, 13409163, 13597642, 13785609,
- 13973057, 14159979, 14346368, 14532217, 14717519, 14902266, 15086453,
- 15270071, 15453115, 15635577, 15817450, 15998727, 16179403, 16359469,
- 16538919, 16717746, 16895944, 17073506, 17250426, 17426695, 17602309,
- 17777260, 17951541, 18125147, 18298070, 18470305, 18641844, 18812681,
- 18982810, 19152224, 19320917, 19488882, 19656114, 19822606, 19988352,
- 20153345, 20317579, 20481048, 20643747, 20805668, 20966805, 21127153,
- 21286706, 21445458, 21603402, 21760532, 21916844, 22072330, 22226985,
- 22380804, 22533779, 22685907, 22837180, 22987593, 23137141, 23285818,
- 23433618, 23580536, 23726566, 23871703, 24015941, 24159275, 24301699,
- 24443209, 24583798, 24723461, 24862194, 24999991, 25136846, 25272755,
- 25407713, 25541714, 25674753, 25806826, 25937927, 26068051, 26197194,
- 26325351, 26452517, 26578686, 26703855, 26828019, 26951172, 27073311,
- 27194431, 27314527, 27433594, 27551629, 27668626, 27784581, 27899491,
- 28013350, 28126154, 28237899, 28348582, 28458196, 28566740, 28674208,
- 28780596, 28885901, 28990118, 29093244, 29195275, 29296206, 29396034,
- 29494756, 29592367, 29688864, 29784243, 29878501, 29971634, 30063639,
- 30154511, 30244249, 30332847, 30420304, 30506615, 30591778, 30675789,
- 30758645, 30840343, 30920880, 31000253, 31078459, 31155494, 31231357,
- 31306043, 31379551, 31451878, 31523021, 31592976, 31661743, 31729317,
- 31795696, 31860879, 31924862, 31987643, 32049219, 32109589, 32168751,
- 32226701, 32283437, 32338958, 32393262, 32446346, 32498209, 32548848,
- 32598261, 32646447, 32693405, 32739131, 32783624, 32826884, 32868907,
- 32909693, 32949240, 32987546, 33024611, 33060432, 33095008, 33128338,
- 33160421, 33191256, 33220841, 33249175, 33276257, 33302087, 33326663,
- 33349984, 33372049, 33392858, 33412410, 33430704, 33447739, 33463515,
- 33478031, 33491286, 33503281, 33514014, 33523486, 33531695, 33538642,
- 33544326, 33548747, 33551905, 33553800, 33554432, 33553800, 33551905,
- 33548747, 33544326, 33538642, 33531695, 33523486, 33514014, 33503281,
- 33491286, 33478031, 33463515, 33447739, 33430704, 33412410, 33392858,
- 33372049, 33349984, 33326663, 33302087, 33276257, 33249175, 33220841,
- 33191256, 33160421, 33128338, 33095008, 33060432, 33024611, 32987546,
- 32949240, 32909693, 32868907, 32826884, 32783624, 32739131, 32693405,
- 32646447, 32598261, 32548848, 32498209, 32446346, 32393262, 32338958,
- 32283437, 32226701, 32168751, 32109589, 32049219, 31987643, 31924862,
- 31860879, 31795696, 31729317, 31661743, 31592976, 31523021, 31451878,
- 31379551, 31306043, 31231357, 31155494, 31078459, 31000253, 30920880,
- 30840343, 30758645, 30675789, 30591778, 30506615, 30420304, 30332847,
- 30244249, 30154511, 30063639, 29971634, 29878501, 29784243, 29688864,
- 29592367, 29494756, 29396034, 29296206, 29195275, 29093244, 28990118,
- 28885901, 28780596, 28674208, 28566740, 28458196, 28348582, 28237899,
- 28126154, 28013350, 27899491, 27784581, 27668626, 27551629, 27433594,
- 27314527, 27194431, 27073311, 26951172, 26828019, 26703855, 26578686,
- 26452517, 26325351, 26197194, 26068051, 25937927, 25806826, 25674753,
- 25541714, 25407713, 25272755, 25136846, 24999991, 24862194, 24723461,
- 24583798, 24443209, 24301699, 24159275, 24015941, 23871703, 23726566,
- 23580536, 23433618, 23285818, 23137141, 22987593, 22837180, 22685907,
- 22533779, 22380804, 22226985, 22072330, 21916844, 21760532, 21603402,
- 21445458, 21286706, 21127153, 20966805, 20805668, 20643747, 20481048,
- 20317579, 20153345, 19988352, 19822606, 19656114, 19488882, 19320917,
- 19152224, 18982810, 18812681, 18641844, 18470305, 18298070, 18125147,
- 17951541, 17777260, 17602309, 17426695, 17250426, 17073506, 16895944,
- 16717746, 16538919, 16359469, 16179403, 15998727, 15817450, 15635577,
- 15453115, 15270071, 15086453, 14902266, 14717519, 14532217, 14346368,
- 14159979, 13973057, 13785609, 13597642, 13409163, 13220179, 13030697,
- 12840725, 12650270, 12459338, 12267936, 12076074, 11883756, 11690991,
- 11497786, 11304148, 11110084, 10915602, 10720709, 10525413, 10329720,
- 10133638, 9937175, 9740337, 9543133, 9345570, 9147655, 8949395,
- 8750798, 8551872, 8352624, 8153062, 7953192, 7753024, 7552563,
- 7351818, 7150796, 6949505, 6747952, 6546145, 6344092, 6141799,
- 5939276, 5736529, 5533566, 5330395, 5127023, 4923458, 4719707,
- 4515779, 4311681, 4107421, 3903006, 3698444, 3493742, 3288909,
- 3083953, 2878880, 2673699, 2468417, 2263042, 2057582, 1852045,
- 1646438, 1440769, 1235045, 1029276, 823467, 617627, 411764,
- 205886, 0, -205886, -411764, -617627, -823467, -1029276,
- -1235045, -1440769, -1646438, -1852045, -2057582, -2263042, -2468417,
- -2673699, -2878880, -3083953, -3288909, -3493742, -3698444, -3903006,
- -4107421, -4311681, -4515779, -4719707, -4923458, -5127023, -5330395,
- -5533566, -5736529, -5939276, -6141799, -6344092, -6546145, -6747952,
- -6949505, -7150796, -7351818, -7552563, -7753024, -7953192, -8153062,
- -8352624, -8551872, -8750798, -8949395, -9147655, -9345570, -9543133,
- -9740337, -9937175, -10133638, -10329720, -10525413, -10720709, -10915602,
- -11110084, -11304148, -11497786, -11690991, -11883756, -12076074, -12267936,
- -12459338, -12650270, -12840725, -13030697, -13220179, -13409163, -13597642,
- -13785609, -13973057, -14159979, -14346368, -14532217, -14717519, -14902266,
- -15086453, -15270071, -15453115, -15635577, -15817450, -15998727, -16179403,
- -16359469, -16538919, -16717746, -16895944, -17073506, -17250426, -17426695,
- -17602309, -17777260, -17951541, -18125147, -18298070, -18470305, -18641844,
- -18812681, -18982810, -19152224, -19320917, -19488882, -19656114, -19822606,
- -19988352, -20153345, -20317579, -20481048, -20643747, -20805668, -20966805,
- -21127153, -21286706, -21445458, -21603402, -21760532, -21916844, -22072330,
- -22226985, -22380804, -22533779, -22685907, -22837180, -22987593, -23137141,
- -23285818, -23433618, -23580536, -23726566, -23871703, -24015941, -24159275,
- -24301699, -24443209, -24583798, -24723461, -24862194, -24999991, -25136846,
- -25272755, -25407713, -25541714, -25674753, -25806826, -25937927, -26068051,
- -26197194, -26325351, -26452517, -26578686, -26703855, -26828019, -26951172,
- -27073311, -27194431, -27314527, -27433594, -27551629, -27668626, -27784581,
- -27899491, -28013350, -28126154, -28237899, -28348582, -28458196, -28566740,
- -28674208, -28780596, -28885901, -28990118, -29093244, -29195275, -29296206,
- -29396034, -29494756, -29592367, -29688864, -29784243, -29878501, -29971634,
- -30063639, -30154511, -30244249, -30332847, -30420304, -30506615, -30591778,
- -30675789, -30758645, -30840343, -30920880, -31000253, -31078459, -31155494,
- -31231357, -31306043, -31379551, -31451878, -31523021, -31592976, -31661743,
- -31729317, -31795696, -31860879, -31924862, -31987643, -32049219, -32109589,
- -32168751, -32226701, -32283437, -32338958, -32393262, -32446346, -32498209,
- -32548848, -32598261, -32646447, -32693405, -32739131, -32783624, -32826884,
- -32868907, -32909693, -32949240, -32987546, -33024611, -33060432, -33095008,
- -33128338, -33160421, -33191256, -33220841, -33249175, -33276257, -33302087,
- -33326663, -33349984, -33372049, -33392858, -33412410, -33430704, -33447739,
- -33463515, -33478031, -33491286, -33503281, -33514014, -33523486, -33531695,
- -33538642, -33544326, -33548747, -33551905, -33553800, -33554432, -33553800,
- -33551905, -33548747, -33544326, -33538642, -33531695, -33523486, -33514014,
- -33503281, -33491286, -33478031, -33463515, -33447739, -33430704, -33412410,
- -33392858, -33372049, -33349984, -33326663, -33302087, -33276257, -33249175,
- -33220841, -33191256, -33160421, -33128338, -33095008, -33060432, -33024611,
- -32987546, -32949240, -32909693, -32868907, -32826884, -32783624, -32739131,
- -32693405, -32646447, -32598261, -32548848, -32498209, -32446346, -32393262,
- -32338958, -32283437, -32226701, -32168751, -32109589, -32049219, -31987643,
- -31924862, -31860879, -31795696, -31729317, -31661743, -31592976, -31523021,
- -31451878, -31379551, -31306043, -31231357, -31155494, -31078459, -31000253,
- -30920880, -30840343, -30758645, -30675789, -30591778, -30506615, -30420304,
- -30332847, -30244249, -30154511, -30063639, -29971634, -29878501, -29784243,
- -29688864, -29592367, -29494756, -29396034, -29296206, -29195275, -29093244,
- -28990118, -28885901, -28780596, -28674208, -28566740, -28458196, -28348582,
- -28237899, -28126154, -28013350, -27899491, -27784581, -27668626, -27551629,
- -27433594, -27314527, -27194431, -27073311, -26951172, -26828019, -26703855,
- -26578686, -26452517, -26325351, -26197194, -26068051, -25937927, -25806826,
- -25674753, -25541714, -25407713, -25272755, -25136846, -24999991, -24862194,
- -24723461, -24583798, -24443209, -24301699, -24159275, -24015941, -23871703,
- -23726566, -23580536, -23433618, -23285818, -23137141, -22987593, -22837180,
- -22685907, -22533779, -22380804, -22226985, -22072330, -21916844, -21760532,
- -21603402, -21445458, -21286706, -21127153, -20966805, -20805668, -20643747,
- -20481048, -20317579, -20153345, -19988352, -19822606, -19656114, -19488882,
- -19320917, -19152224, -18982810, -18812681, -18641844, -18470305, -18298070,
- -18125147, -17951541, -17777260, -17602309, -17426695, -17250426, -17073506,
- -16895944, -16717746, -16538919, -16359469, -16179403, -15998727, -15817450,
- -15635577, -15453115, -15270071, -15086453, -14902266, -14717519, -14532217,
- -14346368, -14159979, -13973057, -13785609, -13597642, -13409163, -13220179,
- -13030697, -12840725, -12650270, -12459338, -12267936, -12076074, -11883756,
- -11690991, -11497786, -11304148, -11110084, -10915602, -10720709, -10525413,
- -10329720, -10133638, -9937175, -9740337, -9543133, -9345570, -9147655,
- -8949395, -8750798, -8551872, -8352624, -8153062, -7953192, -7753024,
- -7552563, -7351818, -7150796, -6949505, -6747952, -6546145, -6344092,
- -6141799, -5939276, -5736529, -5533566, -5330395, -5127023, -4923458,
- -4719707, -4515779, -4311681, -4107421, -3903006, -3698444, -3493742,
- -3288909, -3083953, -2878880, -2673699, -2468417, -2263042, -2057582,
- -1852045, -1646438, -1440769, -1235045, -1029276, -823467, -617627,
- -411764, -205886
- };
- static const int32_t cos[1024] = {
- 33554432, 33553800, 33551905, 33548747, 33544326, 33538642, 33531695,
- 33523486, 33514014, 33503281, 33491286, 33478031, 33463515, 33447739,
- 33430704, 33412410, 33392858, 33372049, 33349984, 33326663, 33302087,
- 33276257, 33249175, 33220841, 33191256, 33160421, 33128338, 33095008,
- 33060432, 33024611, 32987546, 32949240, 32909693, 32868907, 32826884,
- 32783624, 32739131, 32693405, 32646447, 32598261, 32548848, 32498209,
- 32446346, 32393262, 32338958, 32283437, 32226701, 32168751, 32109589,
- 32049219, 31987643, 31924862, 31860879, 31795696, 31729317, 31661743,
- 31592976, 31523021, 31451878, 31379551, 31306043, 31231357, 31155494,
- 31078459, 31000253, 30920880, 30840343, 30758645, 30675789, 30591778,
- 30506615, 30420304, 30332847, 30244249, 30154511, 30063639, 29971634,
- 29878501, 29784243, 29688864, 29592367, 29494756, 29396034, 29296206,
- 29195275, 29093244, 28990118, 28885901, 28780596, 28674208, 28566740,
- 28458196, 28348582, 28237899, 28126154, 28013350, 27899491, 27784581,
- 27668626, 27551629, 27433594, 27314527, 27194431, 27073311, 26951172,
- 26828019, 26703855, 26578686, 26452517, 26325351, 26197194, 26068051,
- 25937927, 25806826, 25674753, 25541714, 25407713, 25272755, 25136846,
- 24999991, 24862194, 24723461, 24583798, 24443209, 24301699, 24159275,
- 24015941, 23871703, 23726566, 23580536, 23433618, 23285818, 23137141,
- 22987593, 22837180, 22685907, 22533779, 22380804, 22226985, 22072330,
- 21916844, 21760532, 21603402, 21445458, 21286706, 21127153, 20966805,
- 20805668, 20643747, 20481048, 20317579, 20153345, 19988352, 19822606,
- 19656114, 19488882, 19320917, 19152224, 18982810, 18812681, 18641844,
- 18470305, 18298070, 18125147, 17951541, 17777260, 17602309, 17426695,
- 17250426, 17073506, 16895944, 16717746, 16538919, 16359469, 16179403,
- 15998727, 15817450, 15635577, 15453115, 15270071, 15086453, 14902266,
- 14717519, 14532217, 14346368, 14159979, 13973057, 13785609, 13597642,
- 13409163, 13220179, 13030697, 12840725, 12650270, 12459338, 12267936,
- 12076074, 11883756, 11690991, 11497786, 11304148, 11110084, 10915602,
- 10720709, 10525413, 10329720, 10133638, 9937175, 9740337, 9543133,
- 9345570, 9147655, 8949395, 8750798, 8551872, 8352624, 8153062,
- 7953192, 7753024, 7552563, 7351818, 7150796, 6949505, 6747952,
- 6546145, 6344092, 6141799, 5939276, 5736529, 5533566, 5330395,
- 5127023, 4923458, 4719707, 4515779, 4311681, 4107421, 3903006,
- 3698444, 3493742, 3288909, 3083953, 2878880, 2673699, 2468417,
- 2263042, 2057582, 1852045, 1646438, 1440769, 1235045, 1029276,
- 823467, 617627, 411764, 205886, 0, -205886, -411764,
- -617627, -823467, -1029276, -1235045, -1440769, -1646438, -1852045,
- -2057582, -2263042, -2468417, -2673699, -2878880, -3083953, -3288909,
- -3493742, -3698444, -3903006, -4107421, -4311681, -4515779, -4719707,
- -4923458, -5127023, -5330395, -5533566, -5736529, -5939276, -6141799,
- -6344092, -6546145, -6747952, -6949505, -7150796, -7351818, -7552563,
- -7753024, -7953192, -8153062, -8352624, -8551872, -8750798, -8949395,
- -9147655, -9345570, -9543133, -9740337, -9937175, -10133638, -10329720,
- -10525413, -10720709, -10915602, -11110084, -11304148, -11497786, -11690991,
- -11883756, -12076074, -12267936, -12459338, -12650270, -12840725, -13030697,
- -13220179, -13409163, -13597642, -13785609, -13973057, -14159979, -14346368,
- -14532217, -14717519, -14902266, -15086453, -15270071, -15453115, -15635577,
- -15817450, -15998727, -16179403, -16359469, -16538919, -16717746, -16895944,
- -17073506, -17250426, -17426695, -17602309, -17777260, -17951541, -18125147,
- -18298070, -18470305, -18641844, -18812681, -18982810, -19152224, -19320917,
- -19488882, -19656114, -19822606, -19988352, -20153345, -20317579, -20481048,
- -20643747, -20805668, -20966805, -21127153, -21286706, -21445458, -21603402,
- -21760532, -21916844, -22072330, -22226985, -22380804, -22533779, -22685907,
- -22837180, -22987593, -23137141, -23285818, -23433618, -23580536, -23726566,
- -23871703, -24015941, -24159275, -24301699, -24443209, -24583798, -24723461,
- -24862194, -24999991, -25136846, -25272755, -25407713, -25541714, -25674753,
- -25806826, -25937927, -26068051, -26197194, -26325351, -26452517, -26578686,
- -26703855, -26828019, -26951172, -27073311, -27194431, -27314527, -27433594,
- -27551629, -27668626, -27784581, -27899491, -28013350, -28126154, -28237899,
- -28348582, -28458196, -28566740, -28674208, -28780596, -28885901, -28990118,
- -29093244, -29195275, -29296206, -29396034, -29494756, -29592367, -29688864,
- -29784243, -29878501, -29971634, -30063639, -30154511, -30244249, -30332847,
- -30420304, -30506615, -30591778, -30675789, -30758645, -30840343, -30920880,
- -31000253, -31078459, -31155494, -31231357, -31306043, -31379551, -31451878,
- -31523021, -31592976, -31661743, -31729317, -31795696, -31860879, -31924862,
- -31987643, -32049219, -32109589, -32168751, -32226701, -32283437, -32338958,
- -32393262, -32446346, -32498209, -32548848, -32598261, -32646447, -32693405,
- -32739131, -32783624, -32826884, -32868907, -32909693, -32949240, -32987546,
- -33024611, -33060432, -33095008, -33128338, -33160421, -33191256, -33220841,
- -33249175, -33276257, -33302087, -33326663, -33349984, -33372049, -33392858,
- -33412410, -33430704, -33447739, -33463515, -33478031, -33491286, -33503281,
- -33514014, -33523486, -33531695, -33538642, -33544326, -33548747, -33551905,
- -33553800, -33554432, -33553800, -33551905, -33548747, -33544326, -33538642,
- -33531695, -33523486, -33514014, -33503281, -33491286, -33478031, -33463515,
- -33447739, -33430704, -33412410, -33392858, -33372049, -33349984, -33326663,
- -33302087, -33276257, -33249175, -33220841, -33191256, -33160421, -33128338,
- -33095008, -33060432, -33024611, -32987546, -32949240, -32909693, -32868907,
- -32826884, -32783624, -32739131, -32693405, -32646447, -32598261, -32548848,
- -32498209, -32446346, -32393262, -32338958, -32283437, -32226701, -32168751,
- -32109589, -32049219, -31987643, -31924862, -31860879, -31795696, -31729317,
- -31661743, -31592976, -31523021, -31451878, -31379551, -31306043, -31231357,
- -31155494, -31078459, -31000253, -30920880, -30840343, -30758645, -30675789,
- -30591778, -30506615, -30420304, -30332847, -30244249, -30154511, -30063639,
- -29971634, -29878501, -29784243, -29688864, -29592367, -29494756, -29396034,
- -29296206, -29195275, -29093244, -28990118, -28885901, -28780596, -28674208,
- -28566740, -28458196, -28348582, -28237899, -28126154, -28013350, -27899491,
- -27784581, -27668626, -27551629, -27433594, -27314527, -27194431, -27073311,
- -26951172, -26828019, -26703855, -26578686, -26452517, -26325351, -26197194,
- -26068051, -25937927, -25806826, -25674753, -25541714, -25407713, -25272755,
- -25136846, -24999991, -24862194, -24723461, -24583798, -24443209, -24301699,
- -24159275, -24015941, -23871703, -23726566, -23580536, -23433618, -23285818,
- -23137141, -22987593, -22837180, -22685907, -22533779, -22380804, -22226985,
- -22072330, -21916844, -21760532, -21603402, -21445458, -21286706, -21127153,
- -20966805, -20805668, -20643747, -20481048, -20317579, -20153345, -19988352,
- -19822606, -19656114, -19488882, -19320917, -19152224, -18982810, -18812681,
- -18641844, -18470305, -18298070, -18125147, -17951541, -17777260, -17602309,
- -17426695, -17250426, -17073506, -16895944, -16717746, -16538919, -16359469,
- -16179403, -15998727, -15817450, -15635577, -15453115, -15270071, -15086453,
- -14902266, -14717519, -14532217, -14346368, -14159979, -13973057, -13785609,
- -13597642, -13409163, -13220179, -13030697, -12840725, -12650270, -12459338,
- -12267936, -12076074, -11883756, -11690991, -11497786, -11304148, -11110084,
- -10915602, -10720709, -10525413, -10329720, -10133638, -9937175, -9740337,
- -9543133, -9345570, -9147655, -8949395, -8750798, -8551872, -8352624,
- -8153062, -7953192, -7753024, -7552563, -7351818, -7150796, -6949505,
- -6747952, -6546145, -6344092, -6141799, -5939276, -5736529, -5533566,
- -5330395, -5127023, -4923458, -4719707, -4515779, -4311681, -4107421,
- -3903006, -3698444, -3493742, -3288909, -3083953, -2878880, -2673699,
- -2468417, -2263042, -2057582, -1852045, -1646438, -1440769, -1235045,
- -1029276, -823467, -617627, -411764, -205886, 0, 205886,
- 411764, 617627, 823467, 1029276, 1235045, 1440769, 1646438,
- 1852045, 2057582, 2263042, 2468417, 2673699, 2878880, 3083953,
- 3288909, 3493742, 3698444, 3903006, 4107421, 4311681, 4515779,
- 4719707, 4923458, 5127023, 5330395, 5533566, 5736529, 5939276,
- 6141799, 6344092, 6546145, 6747952, 6949505, 7150796, 7351818,
- 7552563, 7753024, 7953192, 8153062, 8352624, 8551872, 8750798,
- 8949395, 9147655, 9345570, 9543133, 9740337, 9937175, 10133638,
- 10329720, 10525413, 10720709, 10915602, 11110084, 11304148, 11497786,
- 11690991, 11883756, 12076074, 12267936, 12459338, 12650270, 12840725,
- 13030697, 13220179, 13409163, 13597642, 13785609, 13973057, 14159979,
- 14346368, 14532217, 14717519, 14902266, 15086453, 15270071, 15453115,
- 15635577, 15817450, 15998727, 16179403, 16359469, 16538919, 16717746,
- 16895944, 17073506, 17250426, 17426695, 17602309, 17777260, 17951541,
- 18125147, 18298070, 18470305, 18641844, 18812681, 18982810, 19152224,
- 19320917, 19488882, 19656114, 19822606, 19988352, 20153345, 20317579,
- 20481048, 20643747, 20805668, 20966805, 21127153, 21286706, 21445458,
- 21603402, 21760532, 21916844, 22072330, 22226985, 22380804, 22533779,
- 22685907, 22837180, 22987593, 23137141, 23285818, 23433618, 23580536,
- 23726566, 23871703, 24015941, 24159275, 24301699, 24443209, 24583798,
- 24723461, 24862194, 24999991, 25136846, 25272755, 25407713, 25541714,
- 25674753, 25806826, 25937927, 26068051, 26197194, 26325351, 26452517,
- 26578686, 26703855, 26828019, 26951172, 27073311, 27194431, 27314527,
- 27433594, 27551629, 27668626, 27784581, 27899491, 28013350, 28126154,
- 28237899, 28348582, 28458196, 28566740, 28674208, 28780596, 28885901,
- 28990118, 29093244, 29195275, 29296206, 29396034, 29494756, 29592367,
- 29688864, 29784243, 29878501, 29971634, 30063639, 30154511, 30244249,
- 30332847, 30420304, 30506615, 30591778, 30675789, 30758645, 30840343,
- 30920880, 31000253, 31078459, 31155494, 31231357, 31306043, 31379551,
- 31451878, 31523021, 31592976, 31661743, 31729317, 31795696, 31860879,
- 31924862, 31987643, 32049219, 32109589, 32168751, 32226701, 32283437,
- 32338958, 32393262, 32446346, 32498209, 32548848, 32598261, 32646447,
- 32693405, 32739131, 32783624, 32826884, 32868907, 32909693, 32949240,
- 32987546, 33024611, 33060432, 33095008, 33128338, 33160421, 33191256,
- 33220841, 33249175, 33276257, 33302087, 33326663, 33349984, 33372049,
- 33392858, 33412410, 33430704, 33447739, 33463515, 33478031, 33491286,
- 33503281, 33514014, 33523486, 33531695, 33538642, 33544326, 33548747,
- 33551905, 33553800
- };
- uint32_t stk6d2x_als_get_max_gain_ratio(uint8_t pd_mode, uint8_t data_type)
- {
- uint32_t value = STK6D2X_ALS_DGAIN_MULTI1024 * STK6D2X_ALS_AGAIN_MULTI4;
- if (data_type == STK6D2X_TYPE_ALS0 && (pd_mode == STK6D2X_ALS0_AGC_PDMODE0 || pd_mode == STK6D2X_ALS0_AGC_PDMODE1))
- {
- value *= STK6D2X_ALS_PD_REDUCE_MULTI4;
- }
- if (data_type == STK6D2X_TYPE_ALS1 && pd_mode == STK6D2X_ALS0_AGC_PDMODE0)
- {
- value *= STK6D2X_ALS_PD_REDUCE_MULTI2;
- }
- if (data_type == STK6D2X_TYPE_ALS1 && pd_mode == STK6D2X_ALS0_AGC_PDMODE1)
- {
- value *= STK6D2X_ALS_PD_REDUCE_MULTI3;
- }
- if (data_type == STK6D2X_TYPE_ALS2 && pd_mode == STK6D2X_ALS0_AGC_PDMODE0)
- {
- value *= STK6D2X_ALS_PD_REDUCE_MULTI2;
- }
- if (data_type == STK6D2X_TYPE_ALS2 && pd_mode == STK6D2X_ALS0_AGC_PDMODE1)
- {
- value *= STK6D2X_ALS_PD_REDUCE_MULTI1;
- }
- return value;
- }
- static uint64_t SEC_sqrt(uint64_t x)
- {
- register uint64_t result, tmp;
- result = 0;
- tmp = (1LL << 62); // second-to-top bit set
- while (tmp > x) {
- tmp >>= 2;
- }
- while (tmp != 0) {
- if (x >= (result + tmp)) {
- x -= result + tmp;
- result += 2 * tmp; // <-- faster than 2 * one
- }
- result >>= 1;
- tmp >>= 2;
- }
- return result;
- }
- void get_magnitude(int64_t* data_r, int64_t* data_i, int32_t* buffer, int size)
- // data : 30 bits
- { //data must be twice as long as size
- int i;
- for (i = 0; i < size; ++i) {
- //sqrt(real^2 + imaginary^2)
- uint64_t square = 0;
- int64_t t_r = data_r[i];
- int64_t t_i = data_i[i];
- square = ((t_r * t_r) >> 1) + ((t_i * t_i) >> 1); // 60bit
- buffer[i] = (int32_t)SEC_sqrt(square); // 30bit
- }
- }
- // n is a power of 2
- int _log2n(int n)
- {
- //int len = sizeof(int) * 8;
- int len = 32, i;
- for (i = 0; i < len; i++)
- {
- if ((n & 1) == 1)
- return i;
- else
- n >>= 1;
- }
- return -1;
- }
- // Utility function for reversing the bits
- // of given index x
- unsigned int sec_bitReverse(unsigned int x, int log2n)
- {
- int n = 0, i;
- for (i = 0; i < log2n; i++)
- {
- n <<= 1;
- n |= (x & 1);
- x >>= 1;
- }
- return n;
- }
- void _fft(int64_t* a_r, int64_t* a_i, int64_t* A_r, int64_t* A_i, int n)
- {
- int log2n = _log2n(n), s, k, j;
- unsigned int i;
- // bit reversal of the given array
- for (i = 0; i < n; ++i) {
- int rev = sec_bitReverse(i, log2n);
- A_r[i] = a_r[rev]; // 28 (29 with sign)
- A_i[i] = a_i[rev]; // 28 (29 with sign)
- }
- for (s = 1; s <= log2n; s++) {
- int m = 1 << s;
- int m_2 = m >> 1;
- int64_t wm_r = (int64_t)cos[1024 >> s]; // wm_r = cos(2 pi / m) Q25
- int64_t wm_i = -(int64_t)sin[1024 >> s]; // wm_i = -sin(2 pi / m) Q25
- for (k = 0; k < n; k += m)
- {
- int64_t w_r = 1LL << 25; // Q25 (33554432)
- int64_t w_i = 0; // Q25
- for (j = 0; j < m_2; j++) {
- int i1 = k + j;
- int i2 = i1 + m_2;
- int64_t t_r = w_r * A_r[i2] -
- w_i * A_i[i2]; // 28+25+0~10=53~63 (64 with sign)
- int64_t t_i = w_r * A_i[i2] +
- w_i * A_r[i2]; // 28+25+0~10=53~63 (64 with sign)
- int64_t u_r = A_r[i1]; // 37~47
- int64_t u_i = A_i[i1]; // 37~47
- int64_t w2_r = w_r * wm_r - w_i * wm_i; // Q25*Q25, 26+25=51
- int64_t w2_i = w_r * wm_i + w_i * wm_r; // Q25*Q25
- t_r >>= 25; // Q25
- t_i >>= 25; // Q25
- A_r[i1] = u_r + t_r; // 28+0~10 = 28~38
- A_i[i1] = u_i + t_i;
- A_r[i2] = u_r - t_r;
- A_i[i2] = u_i - t_i;
- w_r = w2_r >> 25; // Q25
- w_i = w2_i >> 25; // Q25
- }
- }
- }
- }
- int64_t buf_r[SEC_FFT_SIZE] = { 0 };
- int64_t buf_i[SEC_FFT_SIZE] = { 0 };
- int64_t out_r[SEC_FFT_SIZE] = { 0 };
- int64_t out_i[SEC_FFT_SIZE] = { 0 };
- void FFT(int32_t* data, enum fft_size size)
- // int32_t* data : 16bit fifo data
- // enum fft_size : fft data size
- {
- static int log_cnt = 0;
- int i, hamming_step = 2048 / size;
- if (size > SEC_FFT_SIZE || (size & 0x7f) != 0) {
- //FFT size : multiply of 128
- //@TODO add return codes so we know it failed
- return;
- }
- for (i = 0; i < size; i++) {
- // if (!alps_data->saturation && data[i] >= '''saturation value(int)''') {
- // ALS_err("DEBUG_FLICKER saturation\n");
- // alps_data->saturation = true;
- // }
- buf_r[i] = ((int64_t)data[i] * (int64_t)hamming[i * hamming_step]) >> 4; // 16+16-4=28
- if (log_cnt > 30) // print debug log
- ALS_info("DEBUG_FLICKER data[%d] => %d buf[%d] => %lld\n", i,
- data[i], i, buf_r[i]);
- }
- _fft(buf_r, buf_i, out_r, out_i, size); // output 38 (39 sign)
- for (i = 0; i < SEC_FFT_SIZE; i++) {
- out_r[i] >>= 8;
- out_i[i] >>= 8;
- }
- get_magnitude(out_r, out_i, data, size);
- if (log_cnt > 30)
- log_cnt = 0;
- else
- log_cnt++;
- }
- void SEC_fft_entry(struct stk6d2x_data *alps_data)
- {
- stk6d2x_wrapper *stk_wrapper = container_of(alps_data, stk6d2x_wrapper, alps_data);
- int i = 0;
- static uint32_t clear_buffer[SEC_FFT_SIZE] = { 0 };
- static uint32_t uv_buffer[SEC_FFT_SIZE] = { 0 };
- static uint32_t ir_buffer[SEC_FFT_SIZE] = { 0 };
- static uint32_t clear_gain_log[SEC_FFT_SIZE] = { 0 };
- static uint32_t uv_gain_log[SEC_FFT_SIZE] = { 0 };
- static uint32_t ir_gain_log[SEC_FFT_SIZE] = { 0 };
- static bool is_clear_sat[SEC_FFT_SIZE] = { false };
- static bool is_uv_sat[SEC_FFT_SIZE] = { false };
- static bool is_ir_sat[SEC_FFT_SIZE] = { false };
- static bool is_ext_clk[SEC_FFT_SIZE] = { false };
- static uint32_t buf[SEC_FFT_SIZE] = { 0 };
- static int log_cnt = 0;
- uint64_t average_thd = 0;
- uint64_t max_thd = 0;
- long long int ratio_thd = 0;
- uint32_t extclkCnt = 0;
- uint32_t min_clear_gain_log = stk6d2x_als_get_max_gain_ratio(alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS0);
- uint32_t min_uv_gain_log = stk6d2x_als_get_max_gain_ratio(alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS1);
- uint32_t min_ir_gain_log = stk6d2x_als_get_max_gain_ratio(alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS2);
- uint32_t clear_average_fifo = 0;
- uint32_t clear_average = 0;
- uint32_t ir_average = 0;
- uint32_t uv_average = 0;
- int16_t clear_gain = 0;
- int16_t ir_gain = 0;
- int16_t uv_gain = 0;
- uint resolution = DIV_ROUND_CLOSEST(1000000000, SAMPLING_TIME) / SEC_FFT_SIZE;
- uint min_freq = 70 / resolution;
- uint max_freq = 1000 / resolution;
- int imax = min_freq;
- uint16_t freq = 9999;
- uint64_t ratio_DC_max = 0;
- uint64_t ratio_max_avg = 0;
- /*
- ***** read fifo *****
- * ~~_buffer : raw fifo data(max 16bit!!!)
- * ~~_gain_log : gain(log value)
- * ex) gain 1 : 0
- * ex) gain 2 : 1
- * ex) gain 4 : 2
- * ...
- * ex) gain 256 : 8
- * This is an example, you can use it at an appropriate value according to STK68210
- *
- */
- for (i = 0; i < SEC_FFT_SIZE; i++)
- {
- clear_buffer[i] = alps_data->fifo_info.fft_buf[i];
- uv_buffer[i] = alps_data->fifo_info.fft_uv_buf[i];
- ir_buffer[i] = alps_data->fifo_info.fft_ir_buf[i];
- clear_gain_log[i] = alps_data->fifo_info.fft_gain_clear[i];
- uv_gain_log[i] = alps_data->fifo_info.fft_gain_uv[i];
- ir_gain_log[i] = alps_data->fifo_info.fft_gain_ir[i];
- is_clear_sat[i] = (alps_data->fifo_info.fft_xflag[i] & 0x1)? true : false; //CL staturation flag
- is_uv_sat[i] = (alps_data->fifo_info.fft_xflag[i] & 0x2)? true : false; //UV staturation flag
- is_ir_sat[i] = (alps_data->fifo_info.fft_xflag[i] & 0x4)? true : false; //IR staturation flag
- is_ext_clk[i] = (alps_data->fifo_info.fft_xflag[i] & 0x80)? true : false; //External clock flag
- if (is_ext_clk[i])
- extclkCnt++;
- }
- ALS_info("DEBUG_FLICKER extclk count:%d, intclk count:%d", extclkCnt, SEC_FFT_SIZE - extclkCnt);
- // find minimum gain ratio
- for (i = 0; i < SEC_FFT_SIZE; i++)
- {
- if (clear_gain_log[i] < min_clear_gain_log)
- min_clear_gain_log = clear_gain_log[i];
- if (uv_gain_log[i] < min_uv_gain_log)
- min_uv_gain_log = uv_gain_log[i];
- if (ir_gain_log[i] < min_ir_gain_log)
- min_ir_gain_log = ir_gain_log[i];
- }
- // gain unification
- for (i = 0; i < SEC_FFT_SIZE; i++)
- {
- clear_average_fifo += clear_buffer[i];
- clear_buffer[i] = clear_buffer[i] >> (clear_gain_log[i] - min_clear_gain_log);
- ir_buffer[i] = ir_buffer[i] >> (ir_gain_log[i] - min_ir_gain_log );
- uv_buffer[i] = uv_buffer[i] >> (uv_gain_log[i] - min_uv_gain_log );
- buf[i] = clear_buffer[i]; // for FFT, max 16bit
- clear_average += clear_buffer[i]; // 16+11=27
- ir_average += ir_buffer[i];
- uv_average += uv_buffer[i];
- }
- // cal average
- clear_average_fifo = clear_average_fifo / SEC_FFT_SIZE;
- clear_average = clear_average / SEC_FFT_SIZE;
- ir_average = ir_average / SEC_FFT_SIZE;
- uv_average = uv_average / SEC_FFT_SIZE;
- clear_average = (clear_average << FLICKER_AVG_SHIFT) >> min_clear_gain_log; // 16+14=30 -...
- ir_average = (ir_average << FLICKER_AVG_SHIFT) >> min_ir_gain_log; // 16+14=30 -...
- uv_average = (uv_average << FLICKER_AVG_SHIFT) >> min_uv_gain_log; // 16+14=30 -...
- clear_gain = 1<<(min_clear_gain_log);
- ir_gain = 1<<(min_clear_gain_log);
- uv_gain = 1<<(min_clear_gain_log);
- // do fft
- FFT(buf, SEC_FFT_SIZE);
- // get peak index
- for (i = min_freq; i <= max_freq; ++i) { // 70~1000
- // ALS_err("ccb_sw_bin4096_flicker_GetResult: buf[%d]=%10u\n", i, buf[i]);
- if (buf[i] > buf[imax]) {
- imax = i;
- }
- average_thd += buf[i]; // 29+10=39
- }
- average_thd /= (max_freq - min_freq + 1); // 29
- max_thd = buf[imax]; // 29
- ratio_thd = (uint32_t)((average_thd << 10) / max_thd); // 0+10-0, 0+10-29, 29+10-29
- ratio_DC_max = buf[0] / max_thd;
- ratio_max_avg = max_thd / average_thd;
- ALS_info("DEBUG_FLICKER DECISION_THD buf[%d]=%u, avg=%llu, max=%llu, DC=%u, DC/max=%llu, max/avg=%llu", imax, buf[imax], average_thd, max_thd, buf[0], ratio_DC_max, ratio_max_avg);
- // get valid threshold
- // thd = calc_thd(clear_average_fifo, clear_average, buf);
- ALS_info("DEBUG_FLICKER DC:%u\n", buf[0]);
- //ALS_info("DEBUG_FLICKER buf[%d]=%u, thd %lld", imax, buf[imax], thd);
- ALS_info("DEBUG_FLICKER buf[%d]=%u, avg/maxthd %lld\n", imax, buf[imax], ratio_thd);
- // valid peak check
- if (ratio_thd < FLICKER_AVGMAX_THD)
- {
- freq = imax * resolution;
- ALS_info("flicker_freq %d\n", freq);
- }
- else {
- freq = 0;
- ALS_info("flicker_freq is zero\n");
- }
- /*
- if (buf[imax] > thd) {
- freq = imax * resolution;
- ALS_info("flicker_freq %d", freq);
- }
- else {
- freq = 0;
- ALS_info("flicker_freq is zero");
- } */
- if (log_cnt++ > 10) {
- ALS_dbg("flicker_freq : %d", freq);
- log_cnt = 0;
- } else {
- ALS_info("flicker_freq : %d", freq);
- }
- alps_data->flicker = freq;
- input_report_rel(stk_wrapper->als_input_dev, REL_RZ, alps_data->flicker + 1);
- input_sync(stk_wrapper->als_input_dev);
- #if IS_ENABLED(CONFIG_SENSORS_FLICKER_SELF_TEST)
- als_eol_update_flicker(alps_data->flicker);
- #endif
- /*
- return values (average, flicker... )
- */
- }
- #endif
- void stk6d2x_fifo_init(struct stk6d2x_data * alps_data)
- {
- int32_t err;
- uint8_t flag_value;
- err = STK6D2X_REG_READ(alps_data, STK6D2X_REG_FIFO1, &flag_value);
- if (err < 0)
- {
- ALS_err("Read flag failed\n");
- return;
- }
- alps_data->fifo_info.data_type = (flag_value & STK6D2X_FIFO_SEL_MASK);
- ALS_info("data_type = %d\n", alps_data->fifo_info.data_type);
- switch (alps_data->fifo_info.data_type)
- {
- case STK6D2X_FIFO_ALS0:
- case STK6D2X_FIFO_ALS1:
- case STK6D2X_FIFO_ALS2:
- alps_data->fifo_info.frame_byte = 2;
- break;
- case STK6D2X_FIFO_ALS0_ALS1:
- case STK6D2X_FIFO_ALS0_ALS2:
- case STK6D2X_FIFO_ALS1_ALS2:
- alps_data->fifo_info.frame_byte = 4;
- break;
- case STK6D2X_FIFO_ALS0_ALS1_ALS2:
- alps_data->fifo_info.frame_byte = 6;
- break;
- case STK6D2X_FIFO_STA0_ALS0:
- case STK6D2X_FIFO_STA1_ALS1:
- case STK6D2X_FIFO_STA2_ALS2:
- alps_data->fifo_info.frame_byte = 4;
- break;
- case STK6D2X_FIFO_STA01_ALS0_ALS1:
- case STK6D2X_FIFO_STA02_ALS0_ALS2:
- case STK6D2X_FIFO_STA12_ALS1_ALS2:
- alps_data->fifo_info.frame_byte = 6;
- break;
- case STK6D2X_FIFO_STA01_STA2_ALS0_ALS1_ALS2:
- alps_data->fifo_info.frame_byte = 10;
- break;
- default:
- alps_data->fifo_info.frame_byte = 0xFF;
- ALS_err("Frame Type ERROR!\n");
- break;
- }
- alps_data->fifo_info.read_frame = STK_FIFO_I2C_READ_FRAME;
- alps_data->fifo_info.target_frame_count = STK_FIFO_I2C_READ_FRAME_TARGET;
- alps_data->fifo_info.read_max_data_byte = alps_data->fifo_info.frame_byte * STK_FIFO_I2C_READ_FRAME;
- alps_data->fifo_info.fifo_reading = false;
- alps_data->fifo_info.block_size = STK_FIFO_I2C_READ_FRAME_TARGET;
- alps_data->fifo_info.fft_buf_idx = 0;
- alps_data->fifo_info.ext_clk_chk = false;
- alps_data->fifo_info.pre_ext_clk_chk = false;
- }
- int32_t stk6d2x_enable_fifo(struct stk6d2x_data * alps_data, bool en)
- {
- int32_t ret = 0;
- uint8_t fifo_status, i2c_data_reg[2] = {0};
- uint16_t max_frame_count = STK_FIFO_DATA_BUFFER_LEN / alps_data->fifo_info.frame_byte;
- if (alps_data->fifo_info.fifo_enable == en)
- {
- ALS_err("FIFO already set\n");
- return ret;
- }
- ret = STK6D2X_REG_READ(alps_data, STK6D2X_REG_FIFO1, &fifo_status);
- if (ret < 0)
- {
- return ret;
- }
- if (en)
- {
- fifo_status = (STK6D2X_FIFO_MODE_NORMAL | fifo_status);
- i2c_data_reg[0] = (max_frame_count >> 8) & 0x03;
- i2c_data_reg[1] = max_frame_count & 0xFF;
- alps_data->fifo_info.fft_buf_idx = 0;
- alps_data->index_last = 0;
- }
- else
- {
- fifo_status = (fifo_status & (~STK6D2X_FIFO_MODE_NORMAL));
- }
- ret = STK6D2X_REG_WRITE_BLOCK(alps_data,
- STK6D2X_REG_FIFO1_WM_LV,
- i2c_data_reg,
- sizeof(i2c_data_reg) / sizeof(i2c_data_reg[0]));
- if (ret < 0)
- {
- ALS_err("fail, ret=%d\n", ret);
- return ret;
- }
- ret = STK6D2X_REG_READ_MODIFY_WRITE(alps_data,
- STK6D2X_REG_FIFO1,
- fifo_status,
- 0xFF);
- if (ret < 0)
- {
- ALS_err("fail, ret=%d\n", ret);
- return ret;
- }
- alps_data->fifo_info.fifo_enable = en;
- return ret;
- }
- void SEC_local_average(struct stk6d2x_data* alps_data)
- {
- uint64_t clear_local_average = 0;
- uint64_t uv_local_average = 0;
- uint64_t ir_local_average = 0;
- bool is_clear_local_sat = false;
- bool is_uv_local_sat = false;
- bool is_ir_local_sat = false;
- int i = 0;
- int n = 0;
- uint32_t min_clear_local_gain_log = alps_data->fifo_info.fft_gain_clear[alps_data->index_last];
- uint32_t min_uv_local_gain_log = alps_data->fifo_info.fft_gain_uv[alps_data->index_last];
- uint32_t min_ir_local_gain_log = alps_data->fifo_info.fft_gain_ir[alps_data->index_last];
- int local_length = 0;
- int index_last_temp = 0;
- if (alps_data->is_first)
- {
- n = (int)(alps_data->fifo_info.fft_buf_idx) - 1;
- if (n > -1)
- {
- clear_local_average += (alps_data->fifo_info.fft_buf[n]) >> ((alps_data->fifo_info.fft_gain_clear[n]) - (alps_data->fifo_info.fft_gain_clear[n]));
- uv_local_average += (alps_data->fifo_info.fft_uv_buf[n]) >> ((alps_data->fifo_info.fft_gain_uv[n]) - (alps_data->fifo_info.fft_gain_uv[n]));
- ir_local_average += (alps_data->fifo_info.fft_ir_buf[n]) >> ((alps_data->fifo_info.fft_gain_ir[n]) - (alps_data->fifo_info.fft_gain_ir[n]));
- if (alps_data->fifo_info.fft_xflag[n] & 0x1)
- is_clear_local_sat = true;
- if (alps_data->fifo_info.fft_xflag[n] & 0x2)
- is_uv_local_sat = true;
- if (alps_data->fifo_info.fft_xflag[n] & 0x4)
- is_ir_local_sat = true;
- alps_data->is_first = false;
- }
- else
- {
- return; // no data
- }
- }
- if ((alps_data->fifo_info.fft_buf_idx < alps_data->index_last + SEC_LOCAL_AVG_SIZE))
- {
- if (alps_data->fifo_info.fft_buf_idx == 0 && alps_data->index_last > 0)
- {
- }
- else
- {
- return; // not yet
- }
- }
- local_length = SEC_LOCAL_AVG_SIZE;
- index_last_temp = alps_data->index_last + SEC_LOCAL_AVG_SIZE;
- if (index_last_temp > SEC_FFT_SIZE)
- {
- index_last_temp = SEC_FFT_SIZE;
- local_length = index_last_temp - alps_data->index_last;
- }
- // find minimum gain ratio, check saturation
- for (i = alps_data->index_last; i < index_last_temp; i++)
- {
- if (alps_data->fifo_info.fft_gain_clear[i] < min_clear_local_gain_log)
- min_clear_local_gain_log = alps_data->fifo_info.fft_gain_clear[i];
- if (alps_data->fifo_info.fft_gain_uv[i] < min_uv_local_gain_log)
- min_uv_local_gain_log = alps_data->fifo_info.fft_gain_uv[i];
- if (alps_data->fifo_info.fft_gain_ir[i] < min_ir_local_gain_log)
- min_ir_local_gain_log = alps_data->fifo_info.fft_gain_ir[i];
- if (alps_data->fifo_info.fft_xflag[i] & 0x1)
- is_clear_local_sat = true;
- if (alps_data->fifo_info.fft_xflag[i] & 0x2)
- is_uv_local_sat = true;
- if (alps_data->fifo_info.fft_xflag[i] & 0x4)
- is_ir_local_sat = true;
- }
- // gain unification
- for (i = alps_data->index_last; i < index_last_temp; i++)
- {
- clear_local_average += (alps_data->fifo_info.fft_buf[i]) >> ((alps_data->fifo_info.fft_gain_clear[i]) - min_clear_local_gain_log);
- uv_local_average += (alps_data->fifo_info.fft_uv_buf[i]) >> ((alps_data->fifo_info.fft_gain_uv[i]) - min_uv_local_gain_log);
- ir_local_average += (alps_data->fifo_info.fft_ir_buf[i]) >> ((alps_data->fifo_info.fft_gain_ir[i]) - min_ir_local_gain_log);
- }
- // cal average
- clear_local_average /= local_length; // 16
- uv_local_average /= local_length;
- ir_local_average /= local_length;
- clear_local_average = (clear_local_average << FLICKER_AVG_SHIFT) >> min_clear_local_gain_log; // 16+14=30 -...
- uv_local_average = (uv_local_average << FLICKER_AVG_SHIFT) >> min_uv_local_gain_log; // 16+14=30 -...
- ir_local_average = (ir_local_average << FLICKER_AVG_SHIFT) >> min_ir_local_gain_log; // 16+14=30 -...
- alps_data->clear_gain = 1<<(min_clear_local_gain_log);
- alps_data->ir_gain = 1<<(min_ir_local_gain_log);
- alps_data->uv_gain = 1<<(min_uv_local_gain_log);
- alps_data->clear_local_average = clear_local_average;
- alps_data->uv_local_average = uv_local_average;
- alps_data->ir_local_average = ir_local_average;
- alps_data->is_clear_local_sat = is_clear_local_sat;
- alps_data->is_uv_local_sat = is_uv_local_sat;
- alps_data->is_ir_local_sat = is_ir_local_sat;
- ALS_info("clear_local_average:%llu is_clear_local_sat:%d | uv_local_average:%llu is_uv_local_sat:%d | ir_local_average:%llu is_ir_local_sat:%d\n",
- clear_local_average, is_clear_local_sat, uv_local_average, is_uv_local_sat, ir_local_average, is_ir_local_sat);
- alps_data->index_last = index_last_temp;
- if (alps_data->index_last >= SEC_FFT_SIZE)
- alps_data->index_last = 0;
- alps_data->is_local_avg_update = true;
- }
- void stk6d2x_fifo_get_data(struct stk6d2x_data * alps_data, uint16_t frame_num)
- {
- uint16_t offset;
- uint8_t raw_data[STK_FIFO_I2C_READ_FRAME_BUF_SIZE]; // alps_data->fifo_info.read_max_data_byte * sizeof(uint8_t)
- int16_t i, frame_count = 0, read_frame_num = 0;
- int32_t ret, read_bytes;
- #ifdef STK_FIFO_DATA_SUMMATION
- uint64_t als0_sum = 0, als1_sum = 0, als2_sum = 0;
- #endif
- #ifdef STK_CHK_XFLG
- alps_data->xflag = 0;
- if (alps_data->rid != 1)
- {
- ret = STK6D2X_REG_READ(alps_data, STK6D2X_REG_XFLAG, &alps_data->xflag);
- if (ret < 0)
- {
- return;
- }
- }
- #endif
- memset(alps_data->fifo_info.fifo_data0, 0, STK_FIFO_I2C_READ_FRAME_TARGET * sizeof(uint32_t));
- memset(alps_data->fifo_info.fifo_data1, 0, STK_FIFO_I2C_READ_FRAME_TARGET * sizeof(uint32_t));
- memset(alps_data->fifo_info.fifo_data2, 0, STK_FIFO_I2C_READ_FRAME_TARGET * sizeof(uint32_t));
- memset(alps_data->fifo_info.fifo_xflag, 0, STK_FIFO_I2C_READ_FRAME_TARGET * sizeof(uint8_t));
- #ifdef STK_FIFO_DATA_SUMMATION
- if (alps_data->fifo_info.fifo_sum_cnt >= STK6D2X_ALS_SUMMATION_CNT)
- {
- alps_data->fifo_info.fifo_sum_cnt = 0;
- }
- #endif
- for (frame_count = 0 ; frame_count < frame_num ; frame_count += (alps_data->fifo_info.read_frame))
- {
- read_frame_num = (int16_t)(frame_num - frame_count);
- if (read_frame_num >= alps_data->fifo_info.read_frame)
- {
- read_bytes = alps_data->fifo_info.read_max_data_byte;
- read_frame_num = alps_data->fifo_info.read_frame;
- }
- else
- {
- read_bytes = alps_data->fifo_info.frame_byte * read_frame_num;
- }
- memset(raw_data, 0, sizeof(raw_data));
- ret = STK6D2X_REG_BLOCK_READ(alps_data, STK6D2X_REG_FIFO_OUT, read_bytes, raw_data);
- if (ret < 0)
- {
- ALS_err("fail, err=0x%x\n", ret);
- return;
- }
- switch (alps_data->fifo_info.data_type)
- {
- case STK6D2X_FIFO_ALS0:
- case STK6D2X_FIFO_ALS1:
- case STK6D2X_FIFO_ALS2:
- for (i = 0, offset = 0; i < read_frame_num; i++, offset += alps_data->fifo_info.frame_byte)
- {
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) = (*(raw_data + offset) << 8 | *(raw_data + offset + 1));
- }
- break;
- case STK6D2X_FIFO_ALS0_ALS1:
- case STK6D2X_FIFO_ALS0_ALS2:
- case STK6D2X_FIFO_ALS1_ALS2:
- for (i = 0, offset = 0; i < read_frame_num; i++, offset += alps_data->fifo_info.frame_byte)
- {
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) = (*(raw_data + offset) << 8 | *(raw_data + offset + 1));
- *(alps_data->fifo_info.fifo_data1 + frame_count + i) = (*(raw_data + offset + 2) << 8 | *(raw_data + offset + 3));
- }
- break;
- case STK6D2X_FIFO_ALS0_ALS1_ALS2:
- for (i = 0, offset = 0; i < read_frame_num; i++, offset += alps_data->fifo_info.frame_byte)
- {
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) = (*(raw_data + offset) << 8 | *(raw_data + offset + 1));
- *(alps_data->fifo_info.fifo_data1 + frame_count + i) = (*(raw_data + offset + 2) << 8 | *(raw_data + offset + 3));
- *(alps_data->fifo_info.fifo_data2 + frame_count + i) = (*(raw_data + offset + 4) << 8 | *(raw_data + offset + 5));
- }
- break;
- #ifdef STK_ALS_AGC
- case STK6D2X_FIFO_STA0_ALS0:
- for (i = 0, offset = 0; i < read_frame_num; i++, offset += alps_data->fifo_info.frame_byte)
- {
- if (alps_data->rid == 1)
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset + 1) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- }
- #endif
- #ifdef STK_CHK_XFLG
- if ((*(raw_data + offset) & 0x80))
- {
- alps_data->xflag |= 0x1;
- }
- #endif
- }
- else
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- }
- #endif
- }
- alps_data->als_info.als_cur_dgain[0] = stk6d2x_cal_curDGain(*(raw_data + offset) & 0x7);
- alps_data->als_info.als_cur_again[0] = stk6d2x_als_get_again_multiple((*(raw_data + offset) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[0] = stk6d2x_als_get_pd_multiple((*(raw_data + offset) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS0);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) = (*(raw_data + offset + 2) << 8 | *(raw_data + offset + 3));
- stk6d2x_get_als_ratio(alps_data);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) *= alps_data->als_info.als_cur_ratio[0];
- #ifdef STK_FIFO_DATA_SUMMATION
- if (alps_data->fifo_info.fifo_sum_cnt < STK6D2X_ALS_SUMMATION_CNT)
- {
- als0_sum += *(alps_data->fifo_info.fifo_data0 + frame_count + i);
- alps_data->fifo_info.fifo_sum_cnt ++;
- }
- #endif
- }
- break;
- case STK6D2X_FIFO_STA1_ALS1:
- for (i = 0, offset = 0; i < read_frame_num; i++, offset += alps_data->fifo_info.frame_byte)
- {
- if (alps_data->rid == 1)
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset + 1) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- }
- #endif
- #ifdef STK_CHK_XFLG
- if ((*(raw_data + offset) & 0x80))
- {
- alps_data->xflag |= 0x1;
- }
- #endif
- }
- else
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- }
- #endif
- }
- alps_data->als_info.als_cur_dgain[1] = stk6d2x_cal_curDGain(*(raw_data + offset) & 0x7);
- alps_data->als_info.als_cur_again[1] = stk6d2x_als_get_again_multiple((*(raw_data + offset) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[1] = stk6d2x_als_get_pd_multiple((*(raw_data + offset) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS1);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) = (*(raw_data + offset + 2) << 8 | *(raw_data + offset + 3));
- stk6d2x_get_als_ratio(alps_data);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) *= alps_data->als_info.als_cur_ratio[1];
- #ifdef STK_FIFO_DATA_SUMMATION
- if (alps_data->fifo_info.fifo_sum_cnt < STK6D2X_ALS_SUMMATION_CNT)
- {
- als1_sum += *(alps_data->fifo_info.fifo_data0 + frame_count + i);
- alps_data->fifo_info.fifo_sum_cnt ++;
- }
- #endif
- }
- break;
- case STK6D2X_FIFO_STA2_ALS2:
- for (i = 0, offset = 0; i < read_frame_num; i++, offset += alps_data->fifo_info.frame_byte)
- {
- if (alps_data->rid == 1)
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset + 1) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- }
- #endif
- #ifdef STK_CHK_XFLG
- if ((*(raw_data + offset) & 0x80))
- {
- alps_data->xflag |= 0x1;
- }
- #endif
- }
- else
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- }
- #endif
- }
- alps_data->als_info.als_cur_dgain[2] = stk6d2x_cal_curDGain(*(raw_data + offset) & 0x7);
- alps_data->als_info.als_cur_again[2] = stk6d2x_als_get_again_multiple((*(raw_data + offset) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[2] = stk6d2x_als_get_pd_multiple((*(raw_data + offset) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS2);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) = (*(raw_data + offset + 2) << 8 | *(raw_data + offset + 3));
- stk6d2x_get_als_ratio(alps_data);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) *= alps_data->als_info.als_cur_ratio[2];
- #ifdef STK_FIFO_DATA_SUMMATION
- if (alps_data->fifo_info.fifo_sum_cnt < STK6D2X_ALS_SUMMATION_CNT)
- {
- als2_sum += *(alps_data->fifo_info.fifo_data0 + frame_count + i);
- alps_data->fifo_info.fifo_sum_cnt ++;
- }
- #endif
- }
- break;
- case STK6D2X_FIFO_STA01_ALS0_ALS1:
- for (i = 0, offset = 0; i < read_frame_num; i++, offset += alps_data->fifo_info.frame_byte)
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- }
- #endif
- alps_data->als_info.als_cur_dgain[0] = stk6d2x_cal_curDGain(*(raw_data + offset) & 0x7);
- alps_data->als_info.als_cur_again[0] = stk6d2x_als_get_again_multiple((*(raw_data + offset) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[0] = stk6d2x_als_get_pd_multiple((*(raw_data + offset) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS0);
- alps_data->als_info.als_cur_dgain[1] = stk6d2x_cal_curDGain(*(raw_data + offset + 1) & 0x7);
- alps_data->als_info.als_cur_again[1] = stk6d2x_als_get_again_multiple((*(raw_data + offset + 1) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[1] = stk6d2x_als_get_pd_multiple((*(raw_data + offset + 1) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS1);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) = (*(raw_data + offset + 2) << 8 | *(raw_data + offset + 3));
- *(alps_data->fifo_info.fifo_data1 + frame_count + i) = (*(raw_data + offset + 4) << 8 | *(raw_data + offset + 5));
- stk6d2x_get_als_ratio(alps_data);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) *= alps_data->als_info.als_cur_ratio[0];
- *(alps_data->fifo_info.fifo_data1 + frame_count + i) *= alps_data->als_info.als_cur_ratio[1];
- #ifdef STK_FIFO_DATA_SUMMATION
- if (alps_data->fifo_info.fifo_sum_cnt < STK6D2X_ALS_SUMMATION_CNT)
- {
- als0_sum += *(alps_data->fifo_info.fifo_data0 + frame_count + i);
- als1_sum += *(alps_data->fifo_info.fifo_data1 + frame_count + i);
- alps_data->fifo_info.fifo_sum_cnt ++;
- }
- #endif
- }
- break;
- case STK6D2X_FIFO_STA02_ALS0_ALS2:
- for (i = 0, offset = 0; i < read_frame_num; i++, offset += alps_data->fifo_info.frame_byte)
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- }
- #endif
- alps_data->als_info.als_cur_dgain[0] = stk6d2x_cal_curDGain(*(raw_data + offset) & 0x7);
- alps_data->als_info.als_cur_again[0] = stk6d2x_als_get_again_multiple((*(raw_data + offset) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[0] = stk6d2x_als_get_pd_multiple((*(raw_data + offset) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS0);
- alps_data->als_info.als_cur_dgain[2] = stk6d2x_cal_curDGain(*(raw_data + offset + 1) & 0x7);
- alps_data->als_info.als_cur_again[2] = stk6d2x_als_get_again_multiple((*(raw_data + offset + 1) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[2] = stk6d2x_als_get_pd_multiple((*(raw_data + offset + 1) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS2);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) = (*(raw_data + offset + 2) << 8 | *(raw_data + offset + 3));
- *(alps_data->fifo_info.fifo_data1 + frame_count + i) = (*(raw_data + offset + 4) << 8 | *(raw_data + offset + 5));
- stk6d2x_get_als_ratio(alps_data);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) *= alps_data->als_info.als_cur_ratio[0];
- *(alps_data->fifo_info.fifo_data1 + frame_count + i) *= alps_data->als_info.als_cur_ratio[2];
- #ifdef STK_FIFO_DATA_SUMMATION
- if (alps_data->fifo_info.fifo_sum_cnt < STK6D2X_ALS_SUMMATION_CNT)
- {
- als0_sum += *(alps_data->fifo_info.fifo_data0 + frame_count + i);
- als2_sum += *(alps_data->fifo_info.fifo_data1 + frame_count + i);
- alps_data->fifo_info.fifo_sum_cnt ++;
- }
- #endif
- }
- break;
- case STK6D2X_FIFO_STA12_ALS1_ALS2:
- for (i = 0, offset = 0; i < read_frame_num; i++, offset += alps_data->fifo_info.frame_byte)
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- }
- #endif
- alps_data->als_info.als_cur_dgain[1] = stk6d2x_cal_curDGain(*(raw_data + offset) & 0x7);
- alps_data->als_info.als_cur_again[1] = stk6d2x_als_get_again_multiple((*(raw_data + offset) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[1] = stk6d2x_als_get_pd_multiple((*(raw_data + offset) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS1);
- alps_data->als_info.als_cur_dgain[2] = stk6d2x_cal_curDGain(*(raw_data + offset + 1) & 0x7);
- alps_data->als_info.als_cur_again[2] = stk6d2x_als_get_again_multiple((*(raw_data + offset + 1) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[2] = stk6d2x_als_get_pd_multiple((*(raw_data + offset + 1) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS2);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) = (*(raw_data + offset + 2) << 8 | *(raw_data + offset + 3));
- *(alps_data->fifo_info.fifo_data1 + frame_count + i) = (*(raw_data + offset + 4) << 8 | *(raw_data + offset + 5));
- stk6d2x_get_als_ratio(alps_data);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) *= alps_data->als_info.als_cur_ratio[1];
- *(alps_data->fifo_info.fifo_data1 + frame_count + i) *= alps_data->als_info.als_cur_ratio[2];
- #ifdef STK_FIFO_DATA_SUMMATION
- if (alps_data->fifo_info.fifo_sum_cnt < STK6D2X_ALS_SUMMATION_CNT)
- {
- als1_sum += *(alps_data->fifo_info.fifo_data0 + frame_count + i);
- als2_sum += *(alps_data->fifo_info.fifo_data1 + frame_count + i);
- alps_data->fifo_info.fifo_sum_cnt ++;
- }
- #endif
- }
- break;
- case STK6D2X_FIFO_STA01_STA2_ALS0_ALS1_ALS2:
- for (i = 0, offset = 0; i < read_frame_num; i++, offset += alps_data->fifo_info.frame_byte)
- {
- if (alps_data->rid == 1)
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset + 3) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- #ifdef SEC_FFT_FLICKER_1024
- *(alps_data->fifo_info.fifo_xflag + frame_count + i) |= (1 << 7); //bit7 is cfalg
- #endif
- }
- #endif
- #ifdef STK_CHK_XFLG
- if ((*(raw_data + offset) & 0x80))
- {
- alps_data->xflag |= 0x1;
- #ifdef SEC_FFT_FLICKER_1024
- *(alps_data->fifo_info.fifo_xflag + frame_count + i) |= 0x1; //bit0 is xfalg for C
- #endif
- }
- if ((*(raw_data + offset + 1) & 0x80))
- {
- alps_data->xflag |= 0x2;
- #ifdef SEC_FFT_FLICKER_1024
- *(alps_data->fifo_info.fifo_xflag + frame_count + i) |= 0x2; //bit1 is xfalg for UV
- #endif
- }
- if ((*(raw_data + offset + 2) & 0x80))
- {
- alps_data->xflag |= 0x4;
- #ifdef SEC_FFT_FLICKER_1024
- *(alps_data->fifo_info.fifo_xflag + frame_count + i) |= 0x4; //bit2 is xfalg for IR
- #endif
- }
- #endif
- }
- else
- {
- #ifdef STK_CHK_CLK_SRC
- if ((*(raw_data + offset) & 0x80) == 0)
- {
- alps_data->fifo_info.ext_clk_chk = false;
- }
- else
- {
- alps_data->fifo_info.ext_clk_chk = true;
- #ifdef SEC_FFT_FLICKER_1024
- *(alps_data->fifo_info.fifo_xflag + frame_count + i) |= (1 << 7); //bit7 is cfalg
- #endif
- }
- #endif
- }
- alps_data->als_info.als_cur_dgain[0] = stk6d2x_cal_curDGain(*(raw_data + offset) & 0x7);
- alps_data->als_info.als_cur_again[0] = stk6d2x_als_get_again_multiple((*(raw_data + offset) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[0] = stk6d2x_als_get_pd_multiple((*(raw_data + offset) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS0);
- alps_data->als_info.als_cur_dgain[1] = stk6d2x_cal_curDGain(*(raw_data + offset + 1) & 0x7);
- alps_data->als_info.als_cur_again[1] = stk6d2x_als_get_again_multiple((*(raw_data + offset + 1) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[1] = stk6d2x_als_get_pd_multiple((*(raw_data + offset + 1) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS1);
- alps_data->als_info.als_cur_dgain[2] = stk6d2x_cal_curDGain(*(raw_data + offset + 2) & 0x7);
- alps_data->als_info.als_cur_again[2] = stk6d2x_als_get_again_multiple((*(raw_data + offset + 2) & 0x18) >> 3);
- alps_data->als_info.als_cur_pd_reduce[2] = stk6d2x_als_get_pd_multiple((*(raw_data + offset + 2) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS2);
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) = (*(raw_data + offset + 4) << 8 | *(raw_data + offset + 5));
- *(alps_data->fifo_info.fifo_data1 + frame_count + i) = (*(raw_data + offset + 6) << 8 | *(raw_data + offset + 7));
- *(alps_data->fifo_info.fifo_data2 + frame_count + i) = (*(raw_data + offset + 8) << 8 | *(raw_data + offset + 9));
- stk6d2x_get_als_ratio(alps_data);
- #ifdef SEC_FFT_FLICKER_1024
- *(alps_data->fifo_info.fifo_data_clear + frame_count + i) = *(alps_data->fifo_info.fifo_data0 + frame_count + i);
- *(alps_data->fifo_info.fifo_data_uv + frame_count + i) = *(alps_data->fifo_info.fifo_data1 + frame_count + i);
- *(alps_data->fifo_info.fifo_data_ir + frame_count + i) = *(alps_data->fifo_info.fifo_data2 + frame_count + i);
- *(alps_data->fifo_info.fifo_gain_clear + frame_count + i) = stk6d2x_sec_dgain(*(raw_data + offset) & 0x7) + \
- stk6d2x_sec_again((*(raw_data + offset) & 0x18) >> 3) + \
- stk6d2x_sec_pd_multiple((*(raw_data + offset) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS0);
- *(alps_data->fifo_info.fifo_gain_uv + frame_count + i) = stk6d2x_sec_dgain(*(raw_data + offset + 1) & 0x7) + \
- stk6d2x_sec_again((*(raw_data + offset + 1) & 0x18) >> 3) + \
- stk6d2x_sec_pd_multiple((*(raw_data + offset + 1) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS1);
- *(alps_data->fifo_info.fifo_gain_ir + frame_count + i) = stk6d2x_sec_dgain(*(raw_data + offset + 2) & 0x7) + \
- stk6d2x_sec_again((*(raw_data + offset + 2) & 0x18) >> 3) + \
- stk6d2x_sec_pd_multiple((*(raw_data + offset + 2) & 0x60) >> 5, \
- alps_data->als_info.als_cur_pd_mode, STK6D2X_TYPE_ALS2);
- #endif
- *(alps_data->fifo_info.fifo_data0 + frame_count + i) *= alps_data->als_info.als_cur_ratio[0];
- *(alps_data->fifo_info.fifo_data1 + frame_count + i) *= alps_data->als_info.als_cur_ratio[1];
- *(alps_data->fifo_info.fifo_data2 + frame_count + i) *= alps_data->als_info.als_cur_ratio[2];
- #ifdef STK_FIFO_DATA_SUMMATION
- if (alps_data->fifo_info.fifo_sum_cnt < STK6D2X_ALS_SUMMATION_CNT)
- {
- als0_sum += *(alps_data->fifo_info.fifo_data0 + frame_count + i);
- als1_sum += *(alps_data->fifo_info.fifo_data1 + frame_count + i);
- als2_sum += *(alps_data->fifo_info.fifo_data2 + frame_count + i);
- alps_data->fifo_info.fifo_sum_cnt ++;
- }
- #endif
- }
- break;
- #endif
- default:
- ALS_err("unavailable!\n");
- break;
- }
- }
- #ifdef STK_CHK_CLK_SRC
- if (!alps_data->fifo_info.ext_clk_chk)
- {
- /*
- alps_data->fifo_info.last_frame_count = 0;
- ALS_err("internal clock mode\n");
- alps_data->is_long_it = true;
- memset(alps_data->fifo_info.fft_buf, 0, FFT_BUF_SIZE);
- alps_data->fifo_info.fft_buf_idx = 0;
- return;
- */
- ALS_info("internal clock mode");
- }
- #endif
- #ifdef STK_CHK_XFLG
- if ((alps_data->xflag & 0x1))
- ALS_err("XFLAG ALS0 Occur\n");
- if ((alps_data->xflag & 0x2))
- ALS_err("XFLAG ALS1 Occur\n");
- if ((alps_data->xflag & 0x4))
- ALS_err("XFLAG ALS2 Occur\n");
- #endif
- if (alps_data->fifo_info.pre_ext_clk_chk != alps_data->fifo_info.ext_clk_chk)
- {
- ALS_err("clock change skip fifo data");
- alps_data->fifo_info.pre_ext_clk_chk = alps_data->fifo_info.ext_clk_chk;
- alps_data->fifo_info.fft_buf_idx = 0;
- return;
- }
- #ifdef STK_FIFO_DATA_SUMMATION
- #ifdef STK_CHK_XFLG
- //if (!(alps_data->xflag & 0x1))
- #endif
- {
- alps_data->fifo_info.fifo_sum_als0 = als0_sum;
- }
- #ifdef STK_CHK_XFLG
- //if (!(alps_data->xflag & 0x2))
- #endif
- {
- alps_data->fifo_info.fifo_sum_als1 = als1_sum;
- }
- #ifdef STK_CHK_XFLG
- //if (!(alps_data->xflag & 0x4))
- #endif
- {
- alps_data->fifo_info.fifo_sum_als2 = als2_sum;
- }
- #endif
- alps_data->fifo_info.last_frame_count = frame_num;
- #ifdef STK_CHK_XFLG
- if (/*!(alps_data->xflag & 0x1) && */frame_num < STK_FIFO_I2C_READ_FRAME_TARGET)
- #endif
- {
- #ifdef STK_FFT_FLICKER
- for (i = 0; i < frame_num; i ++)
- {
- alps_data->fifo_info.fft_buf[alps_data->fifo_info.fft_buf_idx] = alps_data->fifo_info.fifo_data_clear[i];
- alps_data->fifo_info.fft_uv_buf[alps_data->fifo_info.fft_buf_idx] = alps_data->fifo_info.fifo_data_uv[i];
- alps_data->fifo_info.fft_ir_buf[alps_data->fifo_info.fft_buf_idx] = alps_data->fifo_info.fifo_data_ir[i];
- alps_data->fifo_info.fft_gain_clear[alps_data->fifo_info.fft_buf_idx] = alps_data->fifo_info.fifo_gain_clear[i];
- alps_data->fifo_info.fft_gain_uv[alps_data->fifo_info.fft_buf_idx] = alps_data->fifo_info.fifo_gain_uv[i];
- alps_data->fifo_info.fft_gain_ir[alps_data->fifo_info.fft_buf_idx] = alps_data->fifo_info.fifo_gain_ir[i];
- alps_data->fifo_info.fft_xflag[alps_data->fifo_info.fft_buf_idx] = alps_data->fifo_info.fifo_xflag[i];
- alps_data->fifo_info.fft_buf_idx ++;
- if (alps_data->fifo_info.fft_buf_idx >= FFT_BUF_SIZE)
- {
- break;
- }
- }
- if (alps_data->fifo_info.fft_buf_idx >= FFT_BUF_SIZE)
- {
- alps_data->fifo_info.fft_buf_idx = 0;
- #ifdef SEC_FFT_FLICKER_1024
- SEC_fft_entry(alps_data);
- #endif
- }
- #endif
- }
- #ifdef STK_CHK_XFLG
- else
- {
- alps_data->fifo_info.fft_buf_idx = 0;
- }
- #endif
- }
- void stk6d2x_get_fifo_data_polling(struct stk6d2x_data *alps_data)
- {
- int32_t ret;
- uint8_t raw_data[2] = {0};
- uint16_t frame_num;
- bool is_fifo_warning = false;
- if (alps_data->fifo_info.fifo_enable == false)
- {
- ALS_err("FIFO is disable\n");
- return;
- }
- alps_data->fifo_info.fifo_reading = true;
- alps_data->is_local_avg_update = false;
- ret = STK6D2X_REG_BLOCK_READ(alps_data, STK6D2X_REG_FIFO_FCNT1, 2, raw_data);
- if (ret < 0)
- {
- ALS_err("fail, err=0x%x\n", ret);
- return;
- }
- frame_num = (((raw_data[0] & 0x3) << 8) | raw_data[1]);
- ALS_info("frame_num = %d\n", frame_num);
- if (frame_num == 0)
- {
- return;
- }
- else
- {
- if (alps_data->fifo_info.data_type != STK6D2X_FIFO_STA01_STA2_ALS0_ALS1_ALS2)
- {
- if (frame_num >= 2 * STK_FIFO_I2C_READ_FRAME_TARGET)
- {
- frame_num = STK_FIFO_I2C_READ_FRAME_TARGET;
- is_fifo_warning = true;
- }
- else if(frame_num >= STK_FIFO_I2C_READ_FRAME_TARGET)
- {
- frame_num = STK_FIFO_I2C_READ_FRAME_TARGET;
- }
- }
- else
- {
- if (frame_num >= STK_FIFO_I2C_READ_FRAME_TARGET)
- {
- frame_num = STK_FIFO_I2C_READ_FRAME_TARGET;
- is_fifo_warning = true;
- }
- }
- }
- stk6d2x_fifo_get_data(alps_data, frame_num);
- if (alps_data->fifo_info.last_frame_count != 0)
- SEC_local_average(alps_data);
- if (is_fifo_warning)
- {
- ALS_info("is_fifo_warning\n");
- stk6d2x_fifo_get_data(alps_data, frame_num);
- }
- #if !defined(CONFIG_AMS_ALS_COMPENSATION_FOR_AUTO_BRIGHTNESS)
- if (alps_data->fifo_info.last_frame_count != 0)
- SEC_local_average(alps_data);
- #endif
- alps_data->fifo_info.fifo_reading = false;
- }
- #endif
|