Bluecell_operate.c 235 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include "main.h"
  5. #include "Bluecell_operate.h"
  6. #include "PE43711.h"
  7. #include "eeprom.h"
  8. /***************************************************************************************/
  9. /* Extern Function */
  10. /***************************************************************************************/
  11. extern void PE43711_atten_ctrl(PE43711_st ATT ,uint8_t data);
  12. extern void Uart1_Data_Send(uint8_t* data,uint16_t size);
  13. extern HAL_StatusTypeDef EEPROM_M24C08_Zerowrite(uint8_t devid,uint16_t Address);
  14. /***************************************************************************************/
  15. /* Extern Valuable */
  16. /***************************************************************************************/
  17. extern volatile bool AlarmTimerOnSet;
  18. extern volatile bool AlarmTimerOffSet;
  19. extern volatile uint32_t AlarmTimerOnCnt;
  20. extern volatile uint32_t AlarmTimerOffCnt;
  21. extern volatile uint32_t AGC_On_AlarmTimerCnt[AGC_Alarm_DL_Index_MAX];
  22. extern volatile uint32_t AGC_Off_AlarmTimerCnt[AGC_Alarm_DL_Index_MAX];
  23. extern ALL_PE43711_st ALL_ATT;
  24. extern volatile uint16_t ADC1valuearray[4][ADC_AVERAGECNT];
  25. extern volatile uint16_t ADC3valuearray[5][ADC_AVERAGECNT];
  26. extern volatile uint32_t LedTimerCnt;
  27. extern volatile uint32_t AdcTimerCnt;
  28. extern volatile uint32_t DET_UL_On_AlarmTimerCnt[DET_Alarm_UL_Index_MAX];
  29. extern volatile uint32_t DET_UL_Off_AlarmTimerCnt[DET_Alarm_UL_Index_MAX];
  30. extern volatile uint32_t DET_DL_Low_On_AlarmTimerCnt[DET_Alarm_DL_Index_MAX];
  31. extern volatile uint32_t DET_DL_High_On_AlarmTimerCnt[DET_Alarm_DL_Index_MAX];
  32. extern volatile uint32_t DET_DL_Low_Off_AlarmTimerCnt[DET_Alarm_DL_Index_MAX];
  33. extern volatile uint32_t DET_DL_High_Off_AlarmTimerCnt[DET_Alarm_DL_Index_MAX];
  34. extern volatile uint32_t ALC_On_AlarmTimerCnt[ALC_Alarm_UL_Index_MAX];
  35. extern volatile uint32_t ALC_Off_AlarmTimerCnt[ALC_Alarm_UL_Index_MAX];
  36. extern volatile uint32_t DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL_Index_MAX];
  37. extern volatile uint32_t DET_UL_Shutdown_Off_AlarmTimerCnt[DET_Alarm_UL_Index_MAX];
  38. extern volatile uint32_t DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL_Index_MAX];
  39. extern volatile uint32_t DET_DL_Shutdown_Off_AlarmTimerCnt[DET_Alarm_DL_Index_MAX];
  40. /***************************************************************************************/
  41. /* Function */
  42. /***************************************************************************************/
  43. double AutoControl_ADC_Compare(double CurrentAdc,uint8_t* CompareAdc,uint8_t size);
  44. void Bluecell_StructCpy(uint8_t* dst,uint8_t* src,uint16_t size);
  45. void DataStatusSet(void);
  46. void Alarm_Check();
  47. double TableAtteGuarantee(uint8_t* Table,double AttenValue);
  48. uint8_t PE43711_Calc(uint8_t* Table,uint8_t high_bit,uint8_t low_bit,uint8_t offset_h,uint8_t offset_l);
  49. uint8_t PE43711_Calc_NoTable(uint8_t high_bit,uint8_t low_bit);
  50. double PE43711_Double(uint8_t high_bit,uint8_t low_bit);
  51. void Booting_LED_Check(void);
  52. double Bluecell_TestPro(double value );
  53. double AGC_AutoControl_ADC_Compare(double CurrentAdc,uint8_t* CompareAdc,uint8_t size);
  54. /***************************************************************************************/
  55. /* Valuable */
  56. /***************************************************************************************/
  57. bool Alarm_LED_OnSet = false;
  58. uint8_t DataWrite[sizeof(BLUESTATUS_st)] = {0,};
  59. uint8_t Txdata[512];
  60. int8_t AutoControl_Save[sizeof(ALC_dBm_t)];
  61. uint16_t ADC1Ret[4];
  62. uint16_t ADC3Ret[5];
  63. ATT_TABLE_st Att_DL1;
  64. ATT_TABLE_st Att_DL2;
  65. ATT_TABLE_st Att_DL3;
  66. ATT_TABLE_st Att_DL4;
  67. ATT_TABLE_st Att_UL1;
  68. ATT_TABLE_st Att_UL2;
  69. ATT_TABLE_st Att_UL3;
  70. ATT_TABLE_st Att_UL4;
  71. DET_TABLEDL_st Det_DL1;
  72. DET_TABLEDL_st Det_DL2;
  73. DET_TABLEDL_st Det_DL3;
  74. DET_TABLEDL_st Det_DL4;
  75. DET_TABLEUL_st Det_UL1;
  76. DET_TABLEUL_st Det_UL2;
  77. DET_TABLEUL_st Det_UL3;
  78. DET_TABLEUL_st Det_UL4;
  79. TEMP_TABLE_st Temp_DL1;
  80. TEMP_TABLE_st Temp_DL2;
  81. TEMP_TABLE_st Temp_DL3;
  82. TEMP_TABLE_st Temp_DL4;
  83. TEMP_TABLE_st Temp_UL1;
  84. TEMP_TABLE_st Temp_UL2;
  85. TEMP_TABLE_st Temp_UL3;
  86. TEMP_TABLE_st Temp_UL4;
  87. BLUESTATUS_st bluecell_Currdatastatus;
  88. BLUESTATUS_st bluecell_Prevdatastatus;
  89. #if 0 // PYJ.2020.05.21_BEGIN --
  90. int8_t AGC_ATTEN_ref[16] = {
  91. 15 ,
  92. 14 ,
  93. 13 ,
  94. 12 ,
  95. 11 ,
  96. 10 ,
  97. 9 ,
  98. 8 ,
  99. 7 ,
  100. 6 ,
  101. 5 ,
  102. 4 ,
  103. 3 ,
  104. 2 ,
  105. 1 ,
  106. 0 ,
  107. };
  108. #endif // PYJ.2020.05.21_END --
  109. uint8_t MBIC_TxDataArray[256] = {0,};
  110. void Booting_LedInit(void){
  111. HAL_GPIO_WritePin(BOOT_LED_GPIO_Port,BOOT_LED_Pin,GPIO_PIN_RESET);
  112. HAL_GPIO_WritePin(LED_ACT_GPIO_Port,LED_ACT_Pin,GPIO_PIN_SET);
  113. HAL_GPIO_WritePin(LED_FAIL_GPIO_Port,LED_FAIL_Pin,GPIO_PIN_SET);
  114. }
  115. void Booting_LED_Check(void){
  116. for(int i = 0; i < 6; i ++){
  117. HAL_GPIO_TogglePin(BOOT_LED_GPIO_Port,BOOT_LED_Pin);
  118. HAL_GPIO_TogglePin(LED_ACT_GPIO_Port,LED_ACT_Pin);
  119. HAL_GPIO_TogglePin(LED_FAIL_GPIO_Port,LED_FAIL_Pin);
  120. HAL_Delay(1000);
  121. }
  122. }
  123. uint8_t LED_TestCnt = 0;
  124. void Boot_LED_Toggle(void){
  125. if(bluecell_Currdatastatus.LED_TEST == false){
  126. if(LedTimerCnt > 1000){
  127. HAL_GPIO_TogglePin(BOOT_LED_GPIO_Port,BOOT_LED_Pin);
  128. HAL_GPIO_TogglePin(LED_ACT_GPIO_Port,LED_ACT_Pin);
  129. // if(AlarmTimerOnCnt > 3000){
  130. if(Alarm_LED_OnSet == true){
  131. HAL_GPIO_WritePin(LED_FAIL_GPIO_Port,LED_FAIL_Pin,GPIO_PIN_SET);
  132. }else{
  133. HAL_GPIO_WritePin(LED_FAIL_GPIO_Port,LED_FAIL_Pin,GPIO_PIN_RESET);
  134. }
  135. // printf("Alarm_LED_OnSet : %d\r\n",Alarm_LED_OnSet);
  136. LedTimerCnt = 0;
  137. }
  138. }else{
  139. if(LedTimerCnt > 500){
  140. if(LED_TestCnt % 2){
  141. HAL_GPIO_WritePin(BOOT_LED_GPIO_Port,BOOT_LED_Pin,GPIO_PIN_SET);
  142. HAL_GPIO_WritePin(LED_FAIL_GPIO_Port,LED_FAIL_Pin,GPIO_PIN_RESET);
  143. HAL_GPIO_WritePin(LED_ACT_GPIO_Port,LED_ACT_Pin,GPIO_PIN_RESET);
  144. }else{
  145. HAL_GPIO_WritePin(BOOT_LED_GPIO_Port,BOOT_LED_Pin,GPIO_PIN_RESET);
  146. HAL_GPIO_WritePin(LED_FAIL_GPIO_Port,LED_FAIL_Pin,GPIO_PIN_SET);
  147. HAL_GPIO_WritePin(LED_ACT_GPIO_Port,LED_ACT_Pin,GPIO_PIN_SET);
  148. }
  149. LED_TestCnt++;
  150. LedTimerCnt = 0;
  151. /*Set LED TEST variable False after 12 flashes*/
  152. if(LED_TestCnt >= 10){
  153. bluecell_Currdatastatus.LED_TEST = false;
  154. LED_TestCnt = 0;
  155. }
  156. }
  157. }
  158. }
  159. uint8_t PE43711_Calc(uint8_t* Table,uint8_t high_bit,uint8_t low_bit,uint8_t offset_h,uint8_t offset_l){
  160. double ret = 0;
  161. uint8_t Result = 0;
  162. ret = PE43711_Double(high_bit,low_bit); // Hidden Atten Calc
  163. ret += PE43711_Double(offset_h,offset_l);//Plus User Atten Calc
  164. ret += PE43711_Double(0,HIDDENATTEN);//Plus Default Atten 5
  165. // printf("ret1 : %f \r\n",ret); // 2
  166. ret = TableAtteGuarantee(Table,ret);//Table Guarantee
  167. // printf("ret2 : %f \r\n",ret);
  168. Result = PE43711_DataToHexConvert(ret);
  169. return Result;
  170. }
  171. uint8_t MBIC_PE43711_Calc(uint8_t* Table,int16_t MBIC_Val,uint8_t offset_h,uint8_t offset_l){
  172. double ret = 0;
  173. uint8_t Result = 0;
  174. //ret = PE43711_Double(MBIC_Val); // Hidden Atten Calc
  175. ret = MBIC_Val * -1;
  176. ret += PE43711_Double(offset_h,offset_l);//Plus User Atten Calc
  177. ret += PE43711_Double(0,HIDDENATTEN);//Plus Default Atten 5
  178. printf("ret1 : %f \r\n",ret); // 2
  179. ret = TableAtteGuarantee(Table,ret);//Table Guarantee
  180. // printf("ret2 : %f \r\n",ret);
  181. Result = PE43711_DataToHexConvert(ret);
  182. return Result;
  183. }
  184. uint8_t PE43711_Calc_NoTable(uint8_t high_bit,uint8_t low_bit){
  185. double ret = 0;
  186. ret = PE43711_Double(high_bit,low_bit);
  187. PE43711_DataToHexConvert(ret);
  188. return 0;
  189. }
  190. /*2 byte Data Double Convert Function*/
  191. double PE43711_Double(uint8_t high_bit,uint8_t low_bit){
  192. uint16_t tmp_h = 0,tmp_l = 0;
  193. double ret = 0;
  194. #if 0 // PYJ.2020.05.22_BEGIN --
  195. tmp_h = high_bit;
  196. tmp_l = low_bit;
  197. ret = ((tmp_h << 8) & 0xFF00);
  198. ret += (tmp_l & 0x00FF);
  199. /*Minus Convert*/
  200. if((((tmp_h << 8) & 0xFF00) & 0xF000) == 0xF000){
  201. // printf("minus Calc Start\r\n");
  202. ret = 0xFFFF - ret;
  203. // printf("0xFFFF - %x\r\n",ret);
  204. ret += 0x01;
  205. ret = ret - (2*ret);
  206. // printf("ret : %x\r\n",ret);
  207. }
  208. // printf("%s 1: ret : %x\r\n",__func__,ret);
  209. ret /= 10;
  210. #else
  211. ret = ((((high_bit << 8) & 0xFF00) | (low_bit)) / 10);
  212. #if 0 // PYJ.2020.05.22_BEGIN --
  213. if(ret > 6000){
  214. printf("high_bit : %x LOW BIT : %x \r\n",high_bit,low_bit);
  215. }
  216. #endif // PYJ.2020.05.22_END --
  217. #endif // PYJ.2020.05.22_END --
  218. // printf("%s 2: ret : %f\r\n",__func__,ret);
  219. return ret;
  220. }
  221. double TableAtteGuarantee(uint8_t* Table,double AttenValue){
  222. int8_t GuaranteeData[256];
  223. double ret = 0;
  224. //double ref = 0;
  225. uint8_t cnt = 0;
  226. for(double ref = 0; ref < AttenValue; ref += 0.5){
  227. cnt++;
  228. }
  229. Bluecell_StructCpy(&GuaranteeData[0],&Table[0],sizeof(ATT_TABLE_st));
  230. // printf("H : %x L : %x \r\n",GuaranteeData[cnt * 2],GuaranteeData[cnt * 2 + 1]);
  231. ret = GuaranteeData[cnt] / 2;
  232. //= PE43711_Double(GuaranteeData[cnt * 2],GuaranteeData[cnt * 2 + 1]);
  233. // printf("ret3 : %f \r\n",ret); //1
  234. ret += AttenValue;
  235. // printf("ret4 : %f \r\n",ret);
  236. return ret;
  237. }
  238. #if 1 // PYJ.2020.05.25_BEGIN --
  239. int8_t AGC_Table_ref[sizeof(AGC_dBm_t)] = {
  240. 5 , 4 , 3 , 2 ,
  241. 1 , 0 , -1 , -2 ,
  242. -3 , -4 , -5 , -6 ,
  243. -7 , -8 , -9 , -10 ,
  244. -11 , -12 , -13 , -14 ,
  245. -15 , -16 , -17 , -18 ,
  246. -19 , -20 , -21 , -22 ,
  247. -23 , -24 , -25 ,
  248. };
  249. void Bluecell_AttenInitialize(){
  250. uint8_t val = 0;
  251. Bluecell_StructCpy(&AutoControl_Save[0],&AGC_Table_ref[0],sizeof(AGC_dBm_t));
  252. bluecell_Prevdatastatus.ATT_DL1_H = bluecell_Currdatastatus.ATT_DL1_H;
  253. bluecell_Prevdatastatus.ATT_DL1_L = bluecell_Currdatastatus.ATT_DL1_L;
  254. bluecell_Prevdatastatus.bluecell_User_DL1_H = bluecell_Currdatastatus.bluecell_User_DL1_H;
  255. bluecell_Prevdatastatus.bluecell_User_DL1_L = bluecell_Currdatastatus.bluecell_User_DL1_L;
  256. val = PE43711_Calc(&Att_DL1.Table_0_0_dBm, // Table Offset
  257. bluecell_Currdatastatus.ATT_DL1_H, // Hidden Atten High bit
  258. bluecell_Currdatastatus.ATT_DL1_L, // Hidden Atten Low bit
  259. bluecell_Currdatastatus.bluecell_User_DL1_H, // User Atten High Bit
  260. bluecell_Currdatastatus.bluecell_User_DL1_L);// User Atten Low Bit
  261. PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  262. bluecell_Prevdatastatus.ATT_DL2_H = bluecell_Currdatastatus.ATT_DL2_H;
  263. bluecell_Prevdatastatus.ATT_DL2_L = bluecell_Currdatastatus.ATT_DL2_L;
  264. bluecell_Prevdatastatus.bluecell_User_DL2_H = bluecell_Currdatastatus.bluecell_User_DL2_H;
  265. bluecell_Prevdatastatus.bluecell_User_DL2_L = bluecell_Currdatastatus.bluecell_User_DL2_L;
  266. val = PE43711_Calc(&Att_DL2.Table_0_0_dBm, // Table Offset
  267. bluecell_Currdatastatus.ATT_DL2_H, // Hidden Atten High bit
  268. bluecell_Currdatastatus.ATT_DL2_L, // Hidden Atten Low bit
  269. bluecell_Currdatastatus.bluecell_User_DL2_H, // User Atten High Bit
  270. bluecell_Currdatastatus.bluecell_User_DL2_L);// User Atten Low Bit
  271. PE43711_atten_ctrl(ALL_ATT.ATT_DL2,val);
  272. bluecell_Prevdatastatus.ATT_DL3_H = bluecell_Currdatastatus.ATT_DL3_H;
  273. bluecell_Prevdatastatus.ATT_DL3_L = bluecell_Currdatastatus.ATT_DL3_L;
  274. bluecell_Prevdatastatus.bluecell_User_DL3_H = bluecell_Currdatastatus.bluecell_User_DL3_H;
  275. bluecell_Prevdatastatus.bluecell_User_DL3_L = bluecell_Currdatastatus.bluecell_User_DL3_L;
  276. val = PE43711_Calc(&Att_DL3.Table_0_0_dBm, // Table Offset
  277. bluecell_Currdatastatus.ATT_DL3_H, // Hidden Atten High bit
  278. bluecell_Currdatastatus.ATT_DL3_L, // Hidden Atten Low bit
  279. bluecell_Currdatastatus.bluecell_User_DL3_H, // User Atten High Bit
  280. bluecell_Currdatastatus.bluecell_User_DL3_L);// User Atten Low Bit
  281. PE43711_atten_ctrl(ALL_ATT.ATT_DL3,val);
  282. bluecell_Prevdatastatus.ATT_DL4_H = bluecell_Currdatastatus.ATT_DL4_H;
  283. bluecell_Prevdatastatus.ATT_DL4_L = bluecell_Currdatastatus.ATT_DL4_L;
  284. bluecell_Prevdatastatus.bluecell_User_DL4_H = bluecell_Currdatastatus.bluecell_User_DL4_H;
  285. bluecell_Prevdatastatus.bluecell_User_DL4_L = bluecell_Currdatastatus.bluecell_User_DL4_L;
  286. val = PE43711_Calc(&Att_DL4.Table_0_0_dBm, // Table Offset
  287. bluecell_Currdatastatus.ATT_DL4_H, // Hidden Atten High bit
  288. bluecell_Currdatastatus.ATT_DL4_L, // Hidden Atten Low bit
  289. bluecell_Currdatastatus.bluecell_User_DL4_H, // User Atten High Bit
  290. bluecell_Currdatastatus.bluecell_User_DL4_L);// User Atten Low Bit
  291. PE43711_atten_ctrl(ALL_ATT.ATT_DL4,val);
  292. bluecell_Prevdatastatus.ATT_UL1_H = bluecell_Currdatastatus.ATT_UL1_H;
  293. bluecell_Prevdatastatus.ATT_UL1_L = bluecell_Currdatastatus.ATT_UL1_L;
  294. bluecell_Prevdatastatus.bluecell_User_UL1_H = bluecell_Currdatastatus.bluecell_User_UL1_H;
  295. bluecell_Prevdatastatus.bluecell_User_UL1_L = bluecell_Currdatastatus.bluecell_User_UL1_L;
  296. val = PE43711_Calc(&Att_UL1.Table_0_0_dBm,// Table Offset
  297. bluecell_Currdatastatus.ATT_UL1_H,// Hidden Atten High bit
  298. bluecell_Currdatastatus.ATT_UL1_L,// Hidden Atten Low bit
  299. bluecell_Currdatastatus.bluecell_User_UL1_H,// User Atten High Bit
  300. bluecell_Currdatastatus.bluecell_User_UL1_L);// User Atten Low Bit
  301. // printf("%d val = %x \r\n",__LINE__,val);
  302. PE43711_atten_ctrl(ALL_ATT.ATT_UL1,val);
  303. bluecell_Prevdatastatus.ATT_UL2_H = bluecell_Currdatastatus.ATT_UL2_H;
  304. bluecell_Prevdatastatus.ATT_UL2_L = bluecell_Currdatastatus.ATT_UL2_L;
  305. bluecell_Prevdatastatus.bluecell_User_UL2_H = bluecell_Currdatastatus.bluecell_User_UL2_H;
  306. bluecell_Prevdatastatus.bluecell_User_UL2_L = bluecell_Currdatastatus.bluecell_User_UL2_L;
  307. val = PE43711_Calc(&Att_UL2.Table_0_0_dBm,// Table Offset
  308. bluecell_Currdatastatus.ATT_UL2_H,// Hidden Atten High bit
  309. bluecell_Currdatastatus.ATT_UL2_L,// Hidden Atten Low bit
  310. bluecell_Currdatastatus.bluecell_User_UL2_H,// User Atten High Bit
  311. bluecell_Currdatastatus.bluecell_User_UL2_L);// User Atten Low Bit
  312. // printf("%d val = %x \r\n",__LINE__,val);
  313. PE43711_atten_ctrl(ALL_ATT.ATT_UL2,val);
  314. bluecell_Prevdatastatus.ATT_UL3_H = bluecell_Currdatastatus.ATT_UL3_H;
  315. bluecell_Prevdatastatus.ATT_UL3_L = bluecell_Currdatastatus.ATT_UL3_L;
  316. bluecell_Prevdatastatus.bluecell_User_UL3_H = bluecell_Currdatastatus.bluecell_User_UL3_H;
  317. bluecell_Prevdatastatus.bluecell_User_UL3_L = bluecell_Currdatastatus.bluecell_User_UL3_L;
  318. val = PE43711_Calc(&Att_UL3.Table_0_0_dBm,// Table Offset
  319. bluecell_Currdatastatus.ATT_UL3_H,// Hidden Atten High bit
  320. bluecell_Currdatastatus.ATT_UL3_L,// Hidden Atten Low bit
  321. bluecell_Currdatastatus.bluecell_User_UL3_H,// User Atten High Bit
  322. bluecell_Currdatastatus.bluecell_User_UL3_L);// User Atten Low Bit
  323. // printf("%d val = %x \r\n",__LINE__,val);
  324. PE43711_atten_ctrl(ALL_ATT.ATT_UL3,val);
  325. bluecell_Prevdatastatus.ATT_UL4_H = bluecell_Currdatastatus.ATT_UL4_H;
  326. bluecell_Prevdatastatus.ATT_UL4_L = bluecell_Currdatastatus.ATT_UL4_L;
  327. bluecell_Prevdatastatus.bluecell_User_UL4_H = bluecell_Currdatastatus.bluecell_User_UL4_H;
  328. bluecell_Prevdatastatus.bluecell_User_UL4_L = bluecell_Currdatastatus.bluecell_User_UL4_L;
  329. val = PE43711_Calc(&Att_UL4.Table_0_0_dBm,// Table Offset
  330. bluecell_Currdatastatus.ATT_UL4_H,// Hidden Atten High bit
  331. bluecell_Currdatastatus.ATT_UL4_L,// Hidden Atten Low bit
  332. bluecell_Currdatastatus.bluecell_User_UL4_H,// User Atten High Bit
  333. bluecell_Currdatastatus.bluecell_User_UL4_L);// User Atten Low Bit
  334. // printf("%d val = %x \r\n",__LINE__,val);
  335. PE43711_atten_ctrl(ALL_ATT.ATT_UL4,val);
  336. }
  337. void CompareAttenData(BLUESTATUS_st Curr,BLUESTATUS_st Prev){
  338. uint8_t val = 0;
  339. int16_t MBIC_Val = 0;
  340. if((Curr.ATT_DL1_H != Prev.ATT_DL1_H
  341. ||Curr.ATT_DL1_L != Prev.ATT_DL1_L)
  342. ||(Curr.bluecell_User_DL1_H != Prev.bluecell_User_DL1_H
  343. ||Curr.bluecell_User_DL1_L != Prev.bluecell_User_DL1_L)){
  344. // printf("%s : %d \r\n",__func__,__LINE__);
  345. bluecell_Prevdatastatus.ATT_DL1_H = bluecell_Currdatastatus.ATT_DL1_H;
  346. bluecell_Prevdatastatus.ATT_DL1_L = bluecell_Currdatastatus.ATT_DL1_L;
  347. bluecell_Prevdatastatus.bluecell_User_DL1_H = bluecell_Currdatastatus.bluecell_User_DL1_H;
  348. bluecell_Prevdatastatus.bluecell_User_DL1_L = bluecell_Currdatastatus.bluecell_User_DL1_L;
  349. MBIC_Val = Curr.ATT_DL1_H << 8 | Curr.ATT_DL1_L;
  350. val = MBIC_PE43711_Calc(&Att_DL1.Table_0_0_dBm, // Table Offset
  351. MBIC_Val,
  352. bluecell_Currdatastatus.bluecell_User_DL1_H, // User Atten High Bit
  353. bluecell_Currdatastatus.bluecell_User_DL1_L);// User Atten Low Bit
  354. // printf("%s : %d \r\n",__func__,__LINE__);
  355. // printf("%d val = %x \r\n",__LINE__,val);
  356. PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  357. }
  358. if((Curr.ATT_DL2_H != Prev.ATT_DL2_H)
  359. ||(Curr.ATT_DL2_L != Prev.ATT_DL2_L)
  360. ||(Curr.bluecell_User_DL2_H != Prev.bluecell_User_DL2_H
  361. ||Curr.bluecell_User_DL2_L != Prev.bluecell_User_DL2_L)){
  362. bluecell_Prevdatastatus.ATT_DL2_H = bluecell_Currdatastatus.ATT_DL2_H;
  363. bluecell_Prevdatastatus.ATT_DL2_L = bluecell_Currdatastatus.ATT_DL2_L;
  364. bluecell_Prevdatastatus.bluecell_User_DL2_H = bluecell_Currdatastatus.bluecell_User_DL2_H;
  365. bluecell_Prevdatastatus.bluecell_User_DL2_L = bluecell_Currdatastatus.bluecell_User_DL2_L;
  366. MBIC_Val = Curr.ATT_DL2_H << 8 | Curr.ATT_DL2_L;
  367. val = MBIC_PE43711_Calc(&Att_DL2.Table_0_0_dBm,// Table Offset
  368. MBIC_Val,// Hidden Atten Low bit
  369. bluecell_Currdatastatus.bluecell_User_DL2_H,// User Atten High Bit
  370. bluecell_Currdatastatus.bluecell_User_DL2_L);// User Atten Low Bit
  371. // printf("%d val = %x \r\n",__LINE__,val);
  372. PE43711_atten_ctrl(ALL_ATT.ATT_DL2,val);
  373. }
  374. if((Curr.ATT_DL3_H != Prev.ATT_DL3_H
  375. ||Curr.ATT_DL3_L != Prev.ATT_DL3_L)
  376. ||(Curr.bluecell_User_DL3_H != Prev.bluecell_User_DL3_H
  377. ||Curr.bluecell_User_DL3_L != Prev.bluecell_User_DL3_L)){
  378. bluecell_Prevdatastatus.ATT_DL3_H = bluecell_Currdatastatus.ATT_DL3_H;
  379. bluecell_Prevdatastatus.ATT_DL3_L = bluecell_Currdatastatus.ATT_DL3_L;
  380. bluecell_Prevdatastatus.bluecell_User_DL3_H = bluecell_Currdatastatus.bluecell_User_DL3_H;
  381. bluecell_Prevdatastatus.bluecell_User_DL3_L = bluecell_Currdatastatus.bluecell_User_DL3_L;
  382. MBIC_Val = Curr.ATT_DL3_H << 8 | Curr.ATT_DL3_L;
  383. val = MBIC_PE43711_Calc(&Att_DL3.Table_0_0_dBm,// Table Offset
  384. MBIC_Val,// Hidden Atten Low bit
  385. bluecell_Currdatastatus.bluecell_User_DL3_H,// User Atten High Bit
  386. bluecell_Currdatastatus.bluecell_User_DL3_L);// User Atten Low Bit
  387. printf("%d val = %x \r\n",__LINE__,val);
  388. PE43711_atten_ctrl(ALL_ATT.ATT_DL3,val);
  389. }
  390. // printf("\r\nCurr.ATT_DL3_H : %x \r\nPrev.ATT_DL3_H : %x \r\n",Curr.ATT_DL3_H,Prev.ATT_DL3_H);
  391. // printf("\r\nCurr.ATT_DL3_L : %x \r\nPrev.ATT_DL3_L : %x \r\n",Curr.ATT_DL3_L,Prev.ATT_DL3_L);
  392. if((Curr.ATT_DL4_H != Prev.ATT_DL4_H
  393. ||Curr.ATT_DL4_L != Prev.ATT_DL4_L)
  394. ||(Curr.bluecell_User_DL4_H != Prev.bluecell_User_DL4_H
  395. ||Curr.bluecell_User_DL4_L != Prev.bluecell_User_DL4_L)){
  396. bluecell_Prevdatastatus.ATT_DL4_H = bluecell_Currdatastatus.ATT_DL4_H;
  397. bluecell_Prevdatastatus.ATT_DL4_L = bluecell_Currdatastatus.ATT_DL4_L;
  398. bluecell_Prevdatastatus.bluecell_User_DL4_H = bluecell_Currdatastatus.bluecell_User_DL4_H;
  399. bluecell_Prevdatastatus.bluecell_User_DL4_L = bluecell_Currdatastatus.bluecell_User_DL4_L;
  400. MBIC_Val = Curr.ATT_DL4_H << 8 | Curr.ATT_DL4_L;
  401. val = MBIC_PE43711_Calc(&Att_DL4.Table_0_0_dBm,// Table Offset
  402. MBIC_Val,// Hidden Atten Low bit
  403. bluecell_Currdatastatus.bluecell_User_DL4_H,// User Atten High Bit
  404. bluecell_Currdatastatus.bluecell_User_DL4_L);// User Atten Low Bit
  405. printf("%d val = %x \r\n",__LINE__,val);
  406. PE43711_atten_ctrl(ALL_ATT.ATT_DL4,val);
  407. }
  408. if((Curr.ATT_UL1_H != Prev.ATT_UL1_H
  409. ||Curr.ATT_UL1_L != Prev.ATT_UL1_L)
  410. ||(Curr.bluecell_User_UL1_H != Prev.bluecell_User_UL1_H
  411. ||Curr.bluecell_User_UL1_L != Prev.bluecell_User_UL1_L)){
  412. bluecell_Prevdatastatus.ATT_UL1_H = bluecell_Currdatastatus.ATT_UL1_H;
  413. bluecell_Prevdatastatus.ATT_UL1_L = bluecell_Currdatastatus.ATT_UL1_L;
  414. bluecell_Prevdatastatus.bluecell_User_UL1_H = bluecell_Currdatastatus.bluecell_User_UL1_H;
  415. bluecell_Prevdatastatus.bluecell_User_UL1_L = bluecell_Currdatastatus.bluecell_User_UL1_L;
  416. MBIC_Val = Curr.ATT_DL1_H << 8 | Curr.ATT_DL1_L;
  417. val = MBIC_PE43711_Calc(&Att_UL1.Table_0_0_dBm,// Table Offset
  418. MBIC_Val,// Hidden Atten Low bit
  419. bluecell_Currdatastatus.bluecell_User_UL1_H,// User Atten High Bit
  420. bluecell_Currdatastatus.bluecell_User_UL1_L);// User Atten Low Bit
  421. // printf("%d val = %x \r\n",__LINE__,val);
  422. PE43711_atten_ctrl(ALL_ATT.ATT_UL1,val);
  423. }
  424. if((Curr.ATT_UL2_H != Prev.ATT_UL2_H
  425. ||Curr.ATT_UL2_L != Prev.ATT_UL2_L)
  426. ||(Curr.bluecell_User_UL2_H != Prev.bluecell_User_UL2_H
  427. ||Curr.bluecell_User_UL2_L != Prev.bluecell_User_UL2_L)){
  428. bluecell_Prevdatastatus.ATT_UL2_H = bluecell_Currdatastatus.ATT_UL2_H;
  429. bluecell_Prevdatastatus.ATT_UL2_L = bluecell_Currdatastatus.ATT_UL2_L;
  430. bluecell_Prevdatastatus.bluecell_User_UL2_H = bluecell_Currdatastatus.bluecell_User_UL2_H;
  431. bluecell_Prevdatastatus.bluecell_User_UL2_L = bluecell_Currdatastatus.bluecell_User_UL2_L;
  432. MBIC_Val = Curr.ATT_DL2_H << 8 | Curr.ATT_DL2_L;
  433. val = MBIC_PE43711_Calc(&Att_UL2.Table_0_0_dBm,// Table Offset
  434. MBIC_Val,// Hidden Atten Low bit
  435. bluecell_Currdatastatus.bluecell_User_UL2_H,// User Atten High Bit
  436. bluecell_Currdatastatus.bluecell_User_UL2_L);// User Atten Low Bit
  437. // printf("%d val = %x \r\n",__LINE__,val);
  438. PE43711_atten_ctrl(ALL_ATT.ATT_UL2,val);
  439. }
  440. if((Curr.ATT_UL3_H != Prev.ATT_UL3_H
  441. ||Curr.ATT_UL3_L != Prev.ATT_UL3_L)
  442. ||(Curr.bluecell_User_UL3_H != Prev.bluecell_User_UL3_H
  443. ||Curr.bluecell_User_UL3_L != Prev.bluecell_User_UL3_L))
  444. {
  445. bluecell_Prevdatastatus.ATT_UL3_H = bluecell_Currdatastatus.ATT_UL3_H;
  446. bluecell_Prevdatastatus.ATT_UL3_L = bluecell_Currdatastatus.ATT_UL3_L;
  447. bluecell_Prevdatastatus.bluecell_User_UL3_H = bluecell_Currdatastatus.bluecell_User_UL3_H;
  448. bluecell_Prevdatastatus.bluecell_User_UL3_L = bluecell_Currdatastatus.bluecell_User_UL3_L;
  449. MBIC_Val = Curr.ATT_DL3_H << 8 | Curr.ATT_DL3_L;
  450. val = MBIC_PE43711_Calc(&Att_UL3.Table_0_0_dBm,// Table Offset
  451. MBIC_Val,// Hidden Atten Low bit
  452. bluecell_Currdatastatus.bluecell_User_UL3_H,// User Atten High Bit
  453. bluecell_Currdatastatus.bluecell_User_UL3_L);// User Atten Low Bit
  454. // printf("%d val = %x \r\n",__LINE__,val);
  455. PE43711_atten_ctrl(ALL_ATT.ATT_UL3,val);
  456. }
  457. if((Curr.ATT_UL4_H != Prev.ATT_UL4_H
  458. ||Curr.ATT_UL4_L != Prev.ATT_UL4_L)
  459. ||(Curr.bluecell_User_UL4_H != Prev.bluecell_User_UL4_H
  460. ||Curr.bluecell_User_UL4_L != Prev.bluecell_User_UL4_L)){
  461. bluecell_Prevdatastatus.ATT_UL4_H = bluecell_Currdatastatus.ATT_UL4_H;
  462. bluecell_Prevdatastatus.ATT_UL4_L = bluecell_Currdatastatus.ATT_UL4_L;
  463. bluecell_Prevdatastatus.bluecell_User_UL4_H = bluecell_Currdatastatus.bluecell_User_UL4_H;
  464. bluecell_Prevdatastatus.bluecell_User_UL4_L = bluecell_Currdatastatus.bluecell_User_UL4_L;
  465. MBIC_Val = Curr.ATT_DL4_H << 8 | Curr.ATT_DL4_L;
  466. val = MBIC_PE43711_Calc(&Att_UL4.Table_0_0_dBm,// Table Offset
  467. MBIC_Val,// Hidden Atten Low bit
  468. bluecell_Currdatastatus.bluecell_User_UL4_H,// User Atten High Bit
  469. bluecell_Currdatastatus.bluecell_User_UL4_L);// User Atten Low Bit
  470. // printf("%d val = %x \r\n",__LINE__,val);
  471. PE43711_atten_ctrl(ALL_ATT.ATT_UL4,val);
  472. }
  473. // memcpy(&bluecell_Prevdatastatus.ATT_DL1_H,&bluecell_Currdatastatus.ATT_DL1_H,32);
  474. #if 0 // PYJ.2020.04.21_BEGIN --
  475. if((Curr.ULO_ALC_Threshold_H != Prev.ULO_ALC_Threshold_H
  476. ||Curr.ULO_ALC_Threshold_L != Prev.ULO_ALC_Threshold_L)
  477. ||(Curr.bluecell_User_UL1_H != Prev.bluecell_User_UL1_H
  478. ||Curr.bluecell_User_UL1_L != Prev.bluecell_User_UL1_L)){
  479. bluecell_Prevdatastatus.ULO_ALC_Threshold_H = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  480. bluecell_Prevdatastatus.ULO_ALC_Threshold_L = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  481. bluecell_Prevdatastatus.bluecell_User_UL1_H = bluecell_Currdatastatus.bluecell_User_UL1_H;
  482. bluecell_Prevdatastatus.bluecell_User_UL1_L = bluecell_Currdatastatus.bluecell_User_UL1_L;
  483. val = PE43711_Calc(&Att_UL1.Table_0_0_dBm,
  484. Curr.ULO_ALC_Threshold_H,
  485. Curr.ULO_ALC_Threshold_L,
  486. bluecell_Currdatastatus.bluecell_User_DL1_H,
  487. bluecell_Currdatastatus.bluecell_User_DL1_L);
  488. // val = PE43711_DataToHexConvert(ret);
  489. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  490. }
  491. if((Curr.ULO_ALC_Threshold_H != Prev.ULO_ALC_Threshold_H
  492. ||Curr.ULO_ALC_Threshold_L != Prev.ULO_ALC_Threshold_L)
  493. ||(Curr.bluecell_User_UL2_H != Prev.bluecell_User_UL2_H
  494. ||Curr.bluecell_User_UL2_L != Prev.bluecell_User_UL2_L)){
  495. bluecell_Prevdatastatus.ULO_ALC_Threshold_H = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  496. bluecell_Prevdatastatus.ULO_ALC_Threshold_L = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  497. bluecell_Prevdatastatus.bluecell_User_UL2_H = bluecell_Currdatastatus.bluecell_User_UL2_H;
  498. bluecell_Prevdatastatus.bluecell_User_UL2_L = bluecell_Currdatastatus.bluecell_User_UL2_L;
  499. val = PE43711_Calc(&Att_UL2.Table_0_0_dBm,
  500. Curr.ATT_ALC2_MAX_H,
  501. Curr.ATT_ALC2_MAX_L,
  502. bluecell_Currdatastatus.bluecell_User_DL2_H,
  503. bluecell_Currdatastatus.bluecell_User_DL2_L);
  504. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  505. }
  506. if((Curr.ULO_ALC_Threshold_H != Prev.ULO_ALC_Threshold_H
  507. ||Curr.ULO_ALC_Threshold_L != Prev.ULO_ALC_Threshold_L)
  508. ||(Curr.bluecell_User_UL3_H != Prev.bluecell_User_UL3_H
  509. ||Curr.bluecell_User_UL3_L != Prev.bluecell_User_UL3_L)){
  510. bluecell_Prevdatastatus.ULO_ALC_Threshold_H = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  511. bluecell_Prevdatastatus.ULO_ALC_Threshold_L = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  512. bluecell_Prevdatastatus.bluecell_User_UL3_H = bluecell_Currdatastatus.bluecell_User_UL3_H;
  513. bluecell_Prevdatastatus.bluecell_User_UL3_L = bluecell_Currdatastatus.bluecell_User_UL3_L;
  514. val = PE43711_Calc(&Att_UL3.Table_0_0_dBm,
  515. Curr.ATT_ALC3_MAX_H,
  516. Curr.ATT_ALC3_MAX_L,
  517. bluecell_Currdatastatus.bluecell_User_DL3_H,
  518. bluecell_Currdatastatus.bluecell_User_DL3_L);
  519. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  520. }
  521. if((Curr.ULO_ALC_Threshold_H != Prev.ULO_ALC_Threshold_H
  522. ||Curr.ULO_ALC_Threshold_L != Prev.ULO_ALC_Threshold_L)
  523. ||(Curr.bluecell_User_UL4_H != Prev.bluecell_User_UL4_H
  524. ||Curr.bluecell_User_UL4_L != Prev.bluecell_User_UL4_L)){
  525. // printf("Curr.ATT_ALC4_MAX_H : %x Curr.ATT_ALC4_MAX_L : %x\r\n",Curr.ATT_ALC4_MAX_H,Curr.ATT_ALC4_MAX_L);
  526. bluecell_Prevdatastatus.ULO_ALC_Threshold_H = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  527. bluecell_Prevdatastatus.ULO_ALC_Threshold_L = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  528. bluecell_Prevdatastatus.bluecell_User_UL4_H = bluecell_Currdatastatus.bluecell_User_UL4_H;
  529. bluecell_Prevdatastatus.bluecell_User_UL4_L = bluecell_Currdatastatus.bluecell_User_UL4_L;
  530. val = PE43711_Calc(&Att_UL4.Table_0_0_dBm,
  531. Curr.ATT_ALC4_MAX_H,
  532. Curr.ATT_ALC4_MAX_L,
  533. bluecell_Currdatastatus.bluecell_User_DL4_H,
  534. bluecell_Currdatastatus.bluecell_User_DL4_L);
  535. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  536. }
  537. if((Curr.ULO_ALC_Threshold_H != Prev.ULO_ALC_Threshold_H
  538. ||Curr.ULO_ALC_Threshold_L != Prev.ULO_ALC_Threshold_L)
  539. ||(Curr.bluecell_User_UL1_H != Prev.bluecell_User_UL1_H
  540. ||Curr.bluecell_User_UL1_L != Prev.bluecell_User_UL1_L)){
  541. bluecell_Prevdatastatus.ULO_ALC_Threshold_H = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  542. bluecell_Prevdatastatus.ULO_ALC_Threshold_L = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  543. bluecell_Prevdatastatus.bluecell_User_UL1_H = bluecell_Currdatastatus.bluecell_User_UL1_H;
  544. bluecell_Prevdatastatus.bluecell_User_UL1_L = bluecell_Currdatastatus.bluecell_User_UL1_L;
  545. val = PE43711_Calc(&Att_DL1.Table_0_0_dBm,
  546. Curr.ULO_ALC_Threshold_H,
  547. Curr.ULO_ALC_Threshold_L,
  548. bluecell_Currdatastatus.bluecell_User_UL1_H,
  549. bluecell_Currdatastatus.bluecell_User_UL1_L);
  550. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  551. }
  552. if((Curr.ATT_ALC2_MIN_H != Prev.ATT_ALC2_MIN_H
  553. ||Curr.ATT_ALC2_MIN_L != Prev.ATT_ALC2_MIN_L)
  554. ||(Curr.bluecell_User_UL2_H != Prev.bluecell_User_UL2_H
  555. ||Curr.bluecell_User_UL2_L != Prev.bluecell_User_UL2_L)){
  556. bluecell_Prevdatastatus.ATT_ALC2_MIN_H = bluecell_Currdatastatus.ATT_ALC2_MIN_H;
  557. bluecell_Prevdatastatus.ATT_ALC2_MIN_L = bluecell_Currdatastatus.ATT_ALC2_MIN_L;
  558. bluecell_Prevdatastatus.bluecell_User_UL2_H = bluecell_Currdatastatus.bluecell_User_UL2_H;
  559. bluecell_Prevdatastatus.bluecell_User_UL2_L = bluecell_Currdatastatus.bluecell_User_UL2_L;
  560. val = PE43711_Calc(&Att_DL2.Table_0_0_dBm,
  561. Curr.ATT_ALC2_MIN_H,
  562. Curr.ATT_ALC2_MIN_L,
  563. bluecell_Currdatastatus.bluecell_User_UL2_H,
  564. bluecell_Currdatastatus.bluecell_User_UL2_L);
  565. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  566. }
  567. if((Curr.ATT_ALC3_MIN_H != Prev.ATT_ALC3_MIN_H
  568. ||Curr.ATT_ALC3_MIN_L != Prev.ATT_ALC3_MIN_L)
  569. ||(Curr.bluecell_User_UL3_H != Prev.bluecell_User_UL3_H
  570. ||Curr.bluecell_User_UL3_L != Prev.bluecell_User_UL3_L)){
  571. bluecell_Prevdatastatus.ATT_ALC3_MIN_H = bluecell_Currdatastatus.ATT_ALC3_MIN_H;
  572. bluecell_Prevdatastatus.ATT_ALC3_MIN_L = bluecell_Currdatastatus.ATT_ALC3_MIN_L;
  573. bluecell_Prevdatastatus.bluecell_User_UL3_H = bluecell_Currdatastatus.bluecell_User_UL3_H;
  574. bluecell_Prevdatastatus.bluecell_User_UL3_L = bluecell_Currdatastatus.bluecell_User_UL3_L;
  575. val = PE43711_Calc(&Att_DL3.Table_0_0_dBm,
  576. Curr.ATT_ALC3_MIN_H,
  577. Curr.ATT_ALC3_MIN_L,
  578. bluecell_Currdatastatus.bluecell_User_UL3_H,
  579. bluecell_Currdatastatus.bluecell_User_UL3_L);
  580. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  581. }
  582. if((Curr.ATT_ALC4_MIN_H != Prev.ATT_ALC4_MIN_H
  583. ||Curr.ATT_ALC4_MIN_L != Prev.ATT_ALC4_MIN_L)
  584. ||(Curr.bluecell_User_UL4_H != Prev.bluecell_User_UL4_H
  585. ||Curr.bluecell_User_UL4_L != Prev.bluecell_User_UL4_L)){
  586. bluecell_Prevdatastatus.ATT_ALC4_MIN_H = bluecell_Currdatastatus.ATT_ALC4_MIN_H;
  587. bluecell_Prevdatastatus.ATT_ALC4_MIN_L = bluecell_Currdatastatus.ATT_ALC4_MIN_L;
  588. bluecell_Prevdatastatus.bluecell_User_UL4_H = bluecell_Currdatastatus.bluecell_User_UL4_H;
  589. bluecell_Prevdatastatus.bluecell_User_UL4_L = bluecell_Currdatastatus.bluecell_User_UL4_L;
  590. val = PE43711_Calc(&Att_DL4.Table_0_0_dBm,
  591. Curr.ATT_ALC4_MIN_H,
  592. Curr.ATT_ALC4_MIN_L,
  593. bluecell_Currdatastatus.bluecell_User_UL4_H,
  594. bluecell_Currdatastatus.bluecell_User_UL4_L);
  595. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  596. }
  597. #endif // PYJ.2020.04.21_END --
  598. }
  599. #else
  600. void CompareAttenData(BLUESTATUS_st Curr,BLUESTATUS_st Prev){
  601. uint8_t val = 0;
  602. bluecell_Prevdatastatus.ATT_DL1_H = bluecell_Currdatastatus.ATT_DL1_H;
  603. bluecell_Prevdatastatus.ATT_DL1_L = bluecell_Currdatastatus.ATT_DL1_L;
  604. bluecell_Prevdatastatus.bluecell_User_DL1_H = bluecell_Currdatastatus.bluecell_User_DL1_H;
  605. bluecell_Prevdatastatus.bluecell_User_DL1_L = bluecell_Currdatastatus.bluecell_User_DL1_L;
  606. val = PE43711_Calc(&Att_DL1.Table_0_0_dBm, // Table Offset
  607. Curr.ATT_DL1_H, // Hidden Atten High bit
  608. Curr.ATT_DL1_L, // Hidden Atten Low bit
  609. bluecell_Currdatastatus.bluecell_User_DL1_H, // User Atten High Bit
  610. bluecell_Currdatastatus.bluecell_User_DL1_L);// User Atten Low Bit
  611. // printf("%s : %d \r\n",__func__,__LINE__);
  612. // printf("%d val = %x \r\n",__LINE__,val);
  613. PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  614. bluecell_Prevdatastatus.ATT_DL2_H = bluecell_Currdatastatus.ATT_DL2_H;
  615. bluecell_Prevdatastatus.ATT_DL2_L = bluecell_Currdatastatus.ATT_DL2_L;
  616. bluecell_Prevdatastatus.bluecell_User_DL2_H = bluecell_Currdatastatus.bluecell_User_DL2_H;
  617. bluecell_Prevdatastatus.bluecell_User_DL2_L = bluecell_Currdatastatus.bluecell_User_DL2_L;
  618. val = PE43711_Calc(&Att_DL2.Table_0_0_dBm,// Table Offset
  619. Curr.ATT_DL2_H,// Hidden Atten High bit
  620. Curr.ATT_DL2_L,// Hidden Atten Low bit
  621. bluecell_Currdatastatus.bluecell_User_DL2_H,// User Atten High Bit
  622. bluecell_Currdatastatus.bluecell_User_DL2_L);// User Atten Low Bit
  623. // printf("%d val = %x \r\n",__LINE__,val);
  624. PE43711_atten_ctrl(ALL_ATT.ATT_DL2,val);
  625. bluecell_Prevdatastatus.ATT_DL3_H = bluecell_Currdatastatus.ATT_DL3_H;
  626. bluecell_Prevdatastatus.ATT_DL3_L = bluecell_Currdatastatus.ATT_DL3_L;
  627. bluecell_Prevdatastatus.bluecell_User_DL3_H = bluecell_Currdatastatus.bluecell_User_DL3_H;
  628. bluecell_Prevdatastatus.bluecell_User_DL3_L = bluecell_Currdatastatus.bluecell_User_DL3_L;
  629. val = PE43711_Calc(&Att_DL3.Table_0_0_dBm,// Table Offset
  630. Curr.ATT_DL3_H,// Hidden Atten High bit
  631. Curr.ATT_DL3_L,// Hidden Atten Low bit
  632. bluecell_Currdatastatus.bluecell_User_DL3_H,// User Atten High Bit
  633. bluecell_Currdatastatus.bluecell_User_DL3_L);// User Atten Low Bit
  634. // printf("%d val = %x \r\n",__LINE__,val);
  635. PE43711_atten_ctrl(ALL_ATT.ATT_DL3,val);
  636. // printf("\r\nCurr.ATT_DL3_H : %x \r\nPrev.ATT_DL3_H : %x \r\n",Curr.ATT_DL3_H,Prev.ATT_DL3_H);
  637. // printf("\r\nCurr.ATT_DL3_L : %x \r\nPrev.ATT_DL3_L : %x \r\n",Curr.ATT_DL3_L,Prev.ATT_DL3_L);
  638. bluecell_Prevdatastatus.ATT_DL4_H = bluecell_Currdatastatus.ATT_DL4_H;
  639. bluecell_Prevdatastatus.ATT_DL4_L = bluecell_Currdatastatus.ATT_DL4_L;
  640. bluecell_Prevdatastatus.bluecell_User_DL4_H = bluecell_Currdatastatus.bluecell_User_DL4_H;
  641. bluecell_Prevdatastatus.bluecell_User_DL4_L = bluecell_Currdatastatus.bluecell_User_DL4_L;
  642. val = PE43711_Calc(&Att_DL4.Table_0_0_dBm,// Table Offset
  643. Curr.ATT_DL4_H,// Hidden Atten High bit
  644. Curr.ATT_DL4_L,// Hidden Atten Low bit
  645. bluecell_Currdatastatus.bluecell_User_DL4_H,// User Atten High Bit
  646. bluecell_Currdatastatus.bluecell_User_DL4_L);// User Atten Low Bit
  647. // printf("%d val = %x \r\n",__LINE__,val);
  648. PE43711_atten_ctrl(ALL_ATT.ATT_DL4,val);
  649. bluecell_Prevdatastatus.ATT_UL1_H = bluecell_Currdatastatus.ATT_UL1_H;
  650. bluecell_Prevdatastatus.ATT_UL1_L = bluecell_Currdatastatus.ATT_UL1_L;
  651. bluecell_Prevdatastatus.bluecell_User_UL1_H = bluecell_Currdatastatus.bluecell_User_UL1_H;
  652. bluecell_Prevdatastatus.bluecell_User_UL1_L = bluecell_Currdatastatus.bluecell_User_UL1_L;
  653. val = PE43711_Calc(&Att_UL1.Table_0_0_dBm,// Table Offset
  654. Curr.ATT_UL1_H,// Hidden Atten High bit
  655. Curr.ATT_UL1_L,// Hidden Atten Low bit
  656. bluecell_Currdatastatus.bluecell_User_UL1_H,// User Atten High Bit
  657. bluecell_Currdatastatus.bluecell_User_UL1_L);// User Atten Low Bit
  658. // printf("%d val = %x \r\n",__LINE__,val);
  659. PE43711_atten_ctrl(ALL_ATT.ATT_UL1,val);
  660. bluecell_Prevdatastatus.ATT_UL2_H = bluecell_Currdatastatus.ATT_UL2_H;
  661. bluecell_Prevdatastatus.ATT_UL2_L = bluecell_Currdatastatus.ATT_UL2_L;
  662. bluecell_Prevdatastatus.bluecell_User_UL2_H = bluecell_Currdatastatus.bluecell_User_UL2_H;
  663. bluecell_Prevdatastatus.bluecell_User_UL2_L = bluecell_Currdatastatus.bluecell_User_UL2_L;
  664. val = PE43711_Calc(&Att_UL2.Table_0_0_dBm,// Table Offset
  665. Curr.ATT_UL2_H,// Hidden Atten High bit
  666. Curr.ATT_UL2_L,// Hidden Atten Low bit
  667. bluecell_Currdatastatus.bluecell_User_UL2_H,// User Atten High Bit
  668. bluecell_Currdatastatus.bluecell_User_UL2_L);// User Atten Low Bit
  669. // printf("%d val = %x \r\n",__LINE__,val);
  670. PE43711_atten_ctrl(ALL_ATT.ATT_UL2,val);
  671. bluecell_Prevdatastatus.ATT_UL3_H = bluecell_Currdatastatus.ATT_UL3_H;
  672. bluecell_Prevdatastatus.ATT_UL3_L = bluecell_Currdatastatus.ATT_UL3_L;
  673. bluecell_Prevdatastatus.bluecell_User_UL3_H = bluecell_Currdatastatus.bluecell_User_UL3_H;
  674. bluecell_Prevdatastatus.bluecell_User_UL3_L = bluecell_Currdatastatus.bluecell_User_UL3_L;
  675. val = PE43711_Calc(&Att_UL3.Table_0_0_dBm,// Table Offset
  676. Curr.ATT_UL3_H,// Hidden Atten High bit
  677. Curr.ATT_UL3_L,// Hidden Atten Low bit
  678. bluecell_Currdatastatus.bluecell_User_UL3_H,// User Atten High Bit
  679. bluecell_Currdatastatus.bluecell_User_UL3_L);// User Atten Low Bit
  680. // printf("%d val = %x \r\n",__LINE__,val);
  681. PE43711_atten_ctrl(ALL_ATT.ATT_UL3,val);
  682. bluecell_Prevdatastatus.ATT_UL4_H = bluecell_Currdatastatus.ATT_UL4_H;
  683. bluecell_Prevdatastatus.ATT_UL4_L = bluecell_Currdatastatus.ATT_UL4_L;
  684. bluecell_Prevdatastatus.bluecell_User_UL4_H = bluecell_Currdatastatus.bluecell_User_UL4_H;
  685. bluecell_Prevdatastatus.bluecell_User_UL4_L = bluecell_Currdatastatus.bluecell_User_UL4_L;
  686. val = PE43711_Calc(&Att_UL4.Table_0_0_dBm,// Table Offset
  687. Curr.ATT_UL4_H,// Hidden Atten High bit
  688. Curr.ATT_UL4_L,// Hidden Atten Low bit
  689. bluecell_Currdatastatus.bluecell_User_UL4_H,// User Atten High Bit
  690. bluecell_Currdatastatus.bluecell_User_UL4_L);// User Atten Low Bit
  691. // printf("%d val = %x \r\n",__LINE__,val);
  692. PE43711_atten_ctrl(ALL_ATT.ATT_UL4,val);
  693. // memcpy(&bluecell_Prevdatastatus.ATT_DL1_H,&bluecell_Currdatastatus.ATT_DL1_H,32);
  694. #if 0 // PYJ.2020.04.21_BEGIN --
  695. if((Curr.ULO_ALC_Threshold_H != Prev.ULO_ALC_Threshold_H
  696. ||Curr.ULO_ALC_Threshold_L != Prev.ULO_ALC_Threshold_L)
  697. ||(Curr.bluecell_User_UL1_H != Prev.bluecell_User_UL1_H
  698. ||Curr.bluecell_User_UL1_L != Prev.bluecell_User_UL1_L)){
  699. bluecell_Prevdatastatus.ULO_ALC_Threshold_H = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  700. bluecell_Prevdatastatus.ULO_ALC_Threshold_L = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  701. bluecell_Prevdatastatus.bluecell_User_UL1_H = bluecell_Currdatastatus.bluecell_User_UL1_H;
  702. bluecell_Prevdatastatus.bluecell_User_UL1_L = bluecell_Currdatastatus.bluecell_User_UL1_L;
  703. val = PE43711_Calc(&Att_UL1.Table_0_0_dBm,
  704. Curr.ULO_ALC_Threshold_H,
  705. Curr.ULO_ALC_Threshold_L,
  706. bluecell_Currdatastatus.bluecell_User_DL1_H,
  707. bluecell_Currdatastatus.bluecell_User_DL1_L);
  708. // val = PE43711_DataToHexConvert(ret);
  709. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  710. }
  711. if((Curr.ULO_ALC_Threshold_H != Prev.ULO_ALC_Threshold_H
  712. ||Curr.ULO_ALC_Threshold_L != Prev.ULO_ALC_Threshold_L)
  713. ||(Curr.bluecell_User_UL2_H != Prev.bluecell_User_UL2_H
  714. ||Curr.bluecell_User_UL2_L != Prev.bluecell_User_UL2_L)){
  715. bluecell_Prevdatastatus.ULO_ALC_Threshold_H = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  716. bluecell_Prevdatastatus.ULO_ALC_Threshold_L = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  717. bluecell_Prevdatastatus.bluecell_User_UL2_H = bluecell_Currdatastatus.bluecell_User_UL2_H;
  718. bluecell_Prevdatastatus.bluecell_User_UL2_L = bluecell_Currdatastatus.bluecell_User_UL2_L;
  719. val = PE43711_Calc(&Att_UL2.Table_0_0_dBm,
  720. Curr.ATT_ALC2_MAX_H,
  721. Curr.ATT_ALC2_MAX_L,
  722. bluecell_Currdatastatus.bluecell_User_DL2_H,
  723. bluecell_Currdatastatus.bluecell_User_DL2_L);
  724. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  725. }
  726. if((Curr.ULO_ALC_Threshold_H != Prev.ULO_ALC_Threshold_H
  727. ||Curr.ULO_ALC_Threshold_L != Prev.ULO_ALC_Threshold_L)
  728. ||(Curr.bluecell_User_UL3_H != Prev.bluecell_User_UL3_H
  729. ||Curr.bluecell_User_UL3_L != Prev.bluecell_User_UL3_L)){
  730. bluecell_Prevdatastatus.ULO_ALC_Threshold_H = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  731. bluecell_Prevdatastatus.ULO_ALC_Threshold_L = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  732. bluecell_Prevdatastatus.bluecell_User_UL3_H = bluecell_Currdatastatus.bluecell_User_UL3_H;
  733. bluecell_Prevdatastatus.bluecell_User_UL3_L = bluecell_Currdatastatus.bluecell_User_UL3_L;
  734. val = PE43711_Calc(&Att_UL3.Table_0_0_dBm,
  735. Curr.ATT_ALC3_MAX_H,
  736. Curr.ATT_ALC3_MAX_L,
  737. bluecell_Currdatastatus.bluecell_User_DL3_H,
  738. bluecell_Currdatastatus.bluecell_User_DL3_L);
  739. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  740. }
  741. if((Curr.ULO_ALC_Threshold_H != Prev.ULO_ALC_Threshold_H
  742. ||Curr.ULO_ALC_Threshold_L != Prev.ULO_ALC_Threshold_L)
  743. ||(Curr.bluecell_User_UL4_H != Prev.bluecell_User_UL4_H
  744. ||Curr.bluecell_User_UL4_L != Prev.bluecell_User_UL4_L)){
  745. // printf("Curr.ATT_ALC4_MAX_H : %x Curr.ATT_ALC4_MAX_L : %x\r\n",Curr.ATT_ALC4_MAX_H,Curr.ATT_ALC4_MAX_L);
  746. bluecell_Prevdatastatus.ULO_ALC_Threshold_H = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  747. bluecell_Prevdatastatus.ULO_ALC_Threshold_L = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  748. bluecell_Prevdatastatus.bluecell_User_UL4_H = bluecell_Currdatastatus.bluecell_User_UL4_H;
  749. bluecell_Prevdatastatus.bluecell_User_UL4_L = bluecell_Currdatastatus.bluecell_User_UL4_L;
  750. val = PE43711_Calc(&Att_UL4.Table_0_0_dBm,
  751. Curr.ATT_ALC4_MAX_H,
  752. Curr.ATT_ALC4_MAX_L,
  753. bluecell_Currdatastatus.bluecell_User_DL4_H,
  754. bluecell_Currdatastatus.bluecell_User_DL4_L);
  755. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  756. }
  757. if((Curr.ULO_ALC_Threshold_H != Prev.ULO_ALC_Threshold_H
  758. ||Curr.ULO_ALC_Threshold_L != Prev.ULO_ALC_Threshold_L)
  759. ||(Curr.bluecell_User_UL1_H != Prev.bluecell_User_UL1_H
  760. ||Curr.bluecell_User_UL1_L != Prev.bluecell_User_UL1_L)){
  761. bluecell_Prevdatastatus.ULO_ALC_Threshold_H = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  762. bluecell_Prevdatastatus.ULO_ALC_Threshold_L = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  763. bluecell_Prevdatastatus.bluecell_User_UL1_H = bluecell_Currdatastatus.bluecell_User_UL1_H;
  764. bluecell_Prevdatastatus.bluecell_User_UL1_L = bluecell_Currdatastatus.bluecell_User_UL1_L;
  765. val = PE43711_Calc(&Att_DL1.Table_0_0_dBm,
  766. Curr.ULO_ALC_Threshold_H,
  767. Curr.ULO_ALC_Threshold_L,
  768. bluecell_Currdatastatus.bluecell_User_UL1_H,
  769. bluecell_Currdatastatus.bluecell_User_UL1_L);
  770. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  771. }
  772. if((Curr.ATT_ALC2_MIN_H != Prev.ATT_ALC2_MIN_H
  773. ||Curr.ATT_ALC2_MIN_L != Prev.ATT_ALC2_MIN_L)
  774. ||(Curr.bluecell_User_UL2_H != Prev.bluecell_User_UL2_H
  775. ||Curr.bluecell_User_UL2_L != Prev.bluecell_User_UL2_L)){
  776. bluecell_Prevdatastatus.ATT_ALC2_MIN_H = bluecell_Currdatastatus.ATT_ALC2_MIN_H;
  777. bluecell_Prevdatastatus.ATT_ALC2_MIN_L = bluecell_Currdatastatus.ATT_ALC2_MIN_L;
  778. bluecell_Prevdatastatus.bluecell_User_UL2_H = bluecell_Currdatastatus.bluecell_User_UL2_H;
  779. bluecell_Prevdatastatus.bluecell_User_UL2_L = bluecell_Currdatastatus.bluecell_User_UL2_L;
  780. val = PE43711_Calc(&Att_DL2.Table_0_0_dBm,
  781. Curr.ATT_ALC2_MIN_H,
  782. Curr.ATT_ALC2_MIN_L,
  783. bluecell_Currdatastatus.bluecell_User_UL2_H,
  784. bluecell_Currdatastatus.bluecell_User_UL2_L);
  785. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  786. }
  787. if((Curr.ATT_ALC3_MIN_H != Prev.ATT_ALC3_MIN_H
  788. ||Curr.ATT_ALC3_MIN_L != Prev.ATT_ALC3_MIN_L)
  789. ||(Curr.bluecell_User_UL3_H != Prev.bluecell_User_UL3_H
  790. ||Curr.bluecell_User_UL3_L != Prev.bluecell_User_UL3_L)){
  791. bluecell_Prevdatastatus.ATT_ALC3_MIN_H = bluecell_Currdatastatus.ATT_ALC3_MIN_H;
  792. bluecell_Prevdatastatus.ATT_ALC3_MIN_L = bluecell_Currdatastatus.ATT_ALC3_MIN_L;
  793. bluecell_Prevdatastatus.bluecell_User_UL3_H = bluecell_Currdatastatus.bluecell_User_UL3_H;
  794. bluecell_Prevdatastatus.bluecell_User_UL3_L = bluecell_Currdatastatus.bluecell_User_UL3_L;
  795. val = PE43711_Calc(&Att_DL3.Table_0_0_dBm,
  796. Curr.ATT_ALC3_MIN_H,
  797. Curr.ATT_ALC3_MIN_L,
  798. bluecell_Currdatastatus.bluecell_User_UL3_H,
  799. bluecell_Currdatastatus.bluecell_User_UL3_L);
  800. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  801. }
  802. if((Curr.ATT_ALC4_MIN_H != Prev.ATT_ALC4_MIN_H
  803. ||Curr.ATT_ALC4_MIN_L != Prev.ATT_ALC4_MIN_L)
  804. ||(Curr.bluecell_User_UL4_H != Prev.bluecell_User_UL4_H
  805. ||Curr.bluecell_User_UL4_L != Prev.bluecell_User_UL4_L)){
  806. bluecell_Prevdatastatus.ATT_ALC4_MIN_H = bluecell_Currdatastatus.ATT_ALC4_MIN_H;
  807. bluecell_Prevdatastatus.ATT_ALC4_MIN_L = bluecell_Currdatastatus.ATT_ALC4_MIN_L;
  808. bluecell_Prevdatastatus.bluecell_User_UL4_H = bluecell_Currdatastatus.bluecell_User_UL4_H;
  809. bluecell_Prevdatastatus.bluecell_User_UL4_L = bluecell_Currdatastatus.bluecell_User_UL4_L;
  810. val = PE43711_Calc(&Att_DL4.Table_0_0_dBm,
  811. Curr.ATT_ALC4_MIN_H,
  812. Curr.ATT_ALC4_MIN_L,
  813. bluecell_Currdatastatus.bluecell_User_UL4_H,
  814. bluecell_Currdatastatus.bluecell_User_UL4_L);
  815. // PE43711_atten_ctrl(ALL_ATT.ATT_DL1,val);
  816. }
  817. #endif // PYJ.2020.04.21_END --
  818. }
  819. #endif // PYJ.2020.05.25_END --
  820. void Bluecell_StructCpy(uint8_t* dst,uint8_t* src,uint16_t size){
  821. for(int i = 0; i < size; i++){
  822. dst[i] = src[i];
  823. }
  824. }
  825. int16_t ConvertTo2byte(uint8_t highbit, uint8_t lowbit){
  826. int16_t ret = 0;
  827. ret += ((highbit << 8) & 0xFF00);
  828. ret += (lowbit & 0x00FF);
  829. return ret;
  830. }
  831. OneByteToTwoByte ConvertTo1Byte(uint16_t data){
  832. OneByteToTwoByte ret;
  833. ret.High_bit = ((data & 0xFF00) >> 8);
  834. ret.Low_bit = ((data & 0x00FF));
  835. return ret;
  836. }
  837. void Bluecell_Struct2byteCopyFunction(uint8_t* dst,uint16_t* src,uint8_t size){
  838. OneByteToTwoByte convert;
  839. for(int i = 0; i < (size / 2); i++){
  840. convert = ConvertTo1Byte(src[i]);
  841. dst[i * 2] = convert.High_bit;
  842. dst[i * 2 + 1] = convert.Low_bit;
  843. }
  844. }
  845. void Bluecell_structprintf(uint8_t* dst,uint8_t size){
  846. for(int i = 0; i < size; i++){
  847. printf("Index[%d]%x \r\n",i,dst[i]);
  848. }
  849. }
  850. void Bluecell_DataCopy(uint8_t* dst,uint8_t* src,uint16_t size){
  851. for(int i = 0; i < size; i++){
  852. dst[i] = src[i];
  853. }
  854. }
  855. void Bluecell_TableLoad(uint8_t* data,uint8_t type){
  856. uint8_t tabletype = type;
  857. // OneByteToTwoByte data;
  858. // printf("%s : %x \r\n",__func__,tabletype);
  859. //INDEX :5 COpy Start
  860. switch(tabletype){
  861. case DLI_P1_ATT_Accuracy_Table_Number:
  862. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,EEPROM_ATT_BASE ,&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  863. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  864. // Bluecell_structprintf(&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  865. data[BLUECELL_LENGTH] = (sizeof(ATT_TABLE_st)) + 7 - 3;
  866. break;
  867. case DLI_P2_ATT_Accuracy_Table_Number:
  868. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_ATT_DL1_TABLE_ADDRESDS),&Att_DL2.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  869. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Att_DL2.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  870. data[BLUECELL_LENGTH] = (sizeof(ATT_TABLE_st)) + 7 - 3;
  871. break;
  872. case DLI_P3_ATT_Accuracy_Table_Number:
  873. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_ATT_DL2_TABLE_ADDRESDS),&Att_DL3.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  874. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Att_DL3.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  875. data[BLUECELL_LENGTH] = (sizeof(ATT_TABLE_st)) + 7 - 3;
  876. break;
  877. case DLI_P4_ATT_Accuracy_Table_Number:
  878. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_ATT_DL3_TABLE_ADDRESDS),&Att_DL4.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  879. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Att_DL4.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  880. data[BLUECELL_LENGTH] = (sizeof(ATT_TABLE_st)) + 7 - 3;
  881. break;
  882. case ULO_P1_ATT_Accuracy_Table_Number:
  883. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_ATT_DL4_TABLE_ADDRESDS),&Att_UL1.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  884. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Att_UL1.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  885. data[BLUECELL_LENGTH] = (sizeof(ATT_TABLE_st)) + 7 - 3;
  886. break;
  887. case ULO_P2_ATT_Accuracy_Table_Number:
  888. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_ATT_UL1_TABLE_ADDRESDS),&Att_UL2.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  889. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Att_UL2.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  890. data[BLUECELL_LENGTH] = (sizeof(ATT_TABLE_st)) + 7 - 3;
  891. break;
  892. case ULO_P3_ATT_Accuracy_Table_Number:
  893. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_ATT_UL2_TABLE_ADDRESDS),&Att_UL3.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  894. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Att_UL3.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  895. data[BLUECELL_LENGTH] = (sizeof(ATT_TABLE_st)) + 7 - 3;
  896. break;
  897. case ULO_P4_ATT_Accuracy_Table_Number:
  898. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_ATT_UL3_TABLE_ADDRESDS),&Att_UL4.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  899. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Att_UL4.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  900. data[BLUECELL_LENGTH] = (sizeof(ATT_TABLE_st)) + 7 - 3;
  901. break;
  902. case DLI_P1_Level_Table_Number:
  903. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_ATT_UL4_TABLE_ADDRESDS),&Det_DL1.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  904. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Det_DL1.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st));
  905. data[BLUECELL_LENGTH] = (sizeof(DET_TABLEDL_st)) + 7 - 3;
  906. break;
  907. case DLI_P2_Level_Table_Number:
  908. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_DET_DL1_TABLE_ADDRESDS),&Det_DL2.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  909. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Det_DL2.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st));
  910. data[BLUECELL_LENGTH] = (sizeof(DET_TABLEDL_st)) + 7 - 3;
  911. break;
  912. case DLI_P3_Level_Table_Number:
  913. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_DET_DL2_TABLE_ADDRESDS),&Det_DL3.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  914. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Det_DL3.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st));
  915. data[BLUECELL_LENGTH] = (sizeof(DET_TABLEDL_st)) + 7 - 3;
  916. break;
  917. case DLI_P4_Level_Table_Number:
  918. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_DET_DL3_TABLE_ADDRESDS),&Det_DL4.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st) );
  919. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Det_DL4.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st));
  920. data[BLUECELL_LENGTH] = (sizeof(DET_TABLEDL_st)) + 7 - 3;
  921. break;
  922. case ULO_P1_Level_Table_Number:
  923. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_DET_DL4_TABLE_ADDRESDS),&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  924. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  925. data[BLUECELL_LENGTH] = (sizeof(DET_TABLEUL_st)) + 7 - 3;
  926. break;
  927. case ULO_P2_Level_Table_Number:
  928. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_DET_UL1_TABLE_ADDRESDS),&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  929. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  930. data[BLUECELL_LENGTH] = (sizeof(DET_TABLEUL_st)) + 7 - 3;
  931. break;
  932. case ULO_P3_Level_Table_Number:
  933. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_DET_UL2_TABLE_ADDRESDS),&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  934. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  935. data[BLUECELL_LENGTH] = (sizeof(DET_TABLEUL_st)) + 7 - 3;
  936. break;
  937. case ULO_P4_Level_Table_Number:
  938. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_DET_UL3_TABLE_ADDRESDS),&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st) );
  939. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  940. data[BLUECELL_LENGTH] = (sizeof(DET_TABLEUL_st)) + 7 - 3;
  941. break;
  942. case DLI_P1_ATT_Temp_guarantee_Table_Number:
  943. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_DET_UL4_TABLE_ADDRESDS),&Temp_DL1.Table_10_Temp_H,sizeof(TEMP_TABLE_st) );
  944. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Temp_DL1.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  945. data[BLUECELL_LENGTH] = (sizeof(TEMP_TABLE_st)) + 7 - 3;
  946. break;
  947. case DLI_P2_ATT_Temp_guarantee_Table_Number:
  948. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL1_TABLE_ADDRESDS),&Temp_DL2.Table_10_Temp_H,sizeof(TEMP_TABLE_st) );
  949. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Temp_DL2.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  950. data[BLUECELL_LENGTH] = (sizeof(TEMP_TABLE_st)) + 7 - 3;
  951. break;
  952. case DLI_P3_ATT_Temp_guarantee_Table_Number:
  953. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL2_TABLE_ADDRESDS),&Temp_DL3.Table_10_Temp_H,sizeof(TEMP_TABLE_st) );
  954. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Temp_DL3.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  955. data[BLUECELL_LENGTH] = (sizeof(TEMP_TABLE_st)) + 7 - 3;
  956. break;
  957. case DLI_P4_ATT_Temp_guarantee_Table_Number:
  958. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL3_TABLE_ADDRESDS),&Temp_DL4.Table_10_Temp_H,sizeof(TEMP_TABLE_st) );
  959. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Temp_DL4.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  960. data[BLUECELL_LENGTH] = (sizeof(TEMP_TABLE_st)) + 7 - 3;
  961. break;
  962. case ULO_P1_ATT_Temp_guarantee_Table_Number:
  963. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL4_TABLE_ADDRESDS),&Temp_UL1.Table_10_Temp_H,sizeof(TEMP_TABLE_st) );
  964. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Temp_UL1.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  965. data[BLUECELL_LENGTH] = (sizeof(TEMP_TABLE_st)) + 7 - 3;
  966. break;
  967. case ULO_P2_ATT_Temp_guarantee_Table_Number:
  968. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_TEMP_UL1_TABLE_ADDRESDS),&Temp_UL2.Table_10_Temp_H,sizeof(TEMP_TABLE_st) );
  969. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Temp_UL2.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  970. data[BLUECELL_LENGTH] = (sizeof(TEMP_TABLE_st)) + 7 - 3;
  971. break;
  972. case ULO_P3_ATT_Temp_guarantee_Table_Number:
  973. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_TEMP_UL2_TABLE_ADDRESDS),&Temp_UL3.Table_10_Temp_H,sizeof(TEMP_TABLE_st) );
  974. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Temp_UL3.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  975. data[BLUECELL_LENGTH] = (sizeof(TEMP_TABLE_st)) + 7 - 3;
  976. break;
  977. case ULO_P4_ATT_Temp_guarantee_Table_Number:
  978. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_TEMP_UL3_TABLE_ADDRESDS),&Temp_UL4.Table_10_Temp_H,sizeof(TEMP_TABLE_st) );
  979. Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Temp_UL4.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  980. data[BLUECELL_LENGTH] = (sizeof(TEMP_TABLE_st)) + 7 - 3;
  981. break;
  982. }
  983. }
  984. void Bluecell_TableSave(uint8_t* data,uint8_t type){
  985. uint8_t tabletype = type;
  986. //printf("%s : %x \r\n",__func__,tabletype);
  987. switch(tabletype){
  988. case DLI_P1_ATT_Accuracy_Table_Number:
  989. Bluecell_DataCopy(&Att_DL1.Table_0_0_dBm,&data[BLUECELL_DATA + 1],sizeof(ATT_TABLE_st));
  990. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_BASE) ,&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  991. break;
  992. case DLI_P2_ATT_Accuracy_Table_Number:
  993. Bluecell_DataCopy(&Att_DL2.Table_0_0_dBm,&data[BLUECELL_DATA + 1],sizeof(ATT_TABLE_st));
  994. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_DL1_TABLE_ADDRESDS),&Att_DL2.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
  995. // printf("ADDRESS : %d \r\n",EEPROM_ATT_DL1_TABLE_ADDRESDS );
  996. break;
  997. case DLI_P3_ATT_Accuracy_Table_Number:
  998. Bluecell_DataCopy(&Att_DL3.Table_0_0_dBm,&data[BLUECELL_DATA + 1],sizeof(ATT_TABLE_st));
  999. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_DL2_TABLE_ADDRESDS),&Att_DL3.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  1000. break;
  1001. case DLI_P4_ATT_Accuracy_Table_Number:
  1002. Bluecell_DataCopy(&Att_DL4.Table_0_0_dBm,&data[BLUECELL_DATA + 1],sizeof(ATT_TABLE_st));
  1003. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_DL3_TABLE_ADDRESDS),&Att_DL4.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  1004. break;
  1005. case ULO_P1_ATT_Accuracy_Table_Number:
  1006. Bluecell_DataCopy(&Att_UL1.Table_0_0_dBm,&data[BLUECELL_DATA + 1],sizeof(ATT_TABLE_st));
  1007. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_DL4_TABLE_ADDRESDS),&Att_UL1.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  1008. break;
  1009. case ULO_P2_ATT_Accuracy_Table_Number:
  1010. Bluecell_DataCopy(&Att_UL2.Table_0_0_dBm,&data[BLUECELL_DATA + 1],sizeof(ATT_TABLE_st));
  1011. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_UL1_TABLE_ADDRESDS),&Att_UL2.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  1012. break;
  1013. case ULO_P3_ATT_Accuracy_Table_Number:
  1014. Bluecell_DataCopy(&Att_UL3.Table_0_0_dBm,&data[BLUECELL_DATA + 1],sizeof(ATT_TABLE_st));
  1015. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_UL2_TABLE_ADDRESDS),&Att_UL3.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  1016. break;
  1017. case ULO_P4_ATT_Accuracy_Table_Number:
  1018. Bluecell_DataCopy(&Att_UL4.Table_0_0_dBm,&data[BLUECELL_DATA + 1],sizeof(ATT_TABLE_st));
  1019. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_UL3_TABLE_ADDRESDS),&Att_UL4.Table_0_0_dBm,sizeof(ATT_TABLE_st));
  1020. break;
  1021. case DLI_P1_Level_Table_Number:
  1022. Bluecell_DataCopy(&Det_DL1.Table_Det5_dBm_H,&data[BLUECELL_DATA + 1],sizeof(DET_TABLEDL_st));
  1023. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_UL4_TABLE_ADDRESDS),&Det_DL1.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st));
  1024. break;
  1025. case DLI_P2_Level_Table_Number:
  1026. Bluecell_DataCopy(&Det_DL2.Table_Det5_dBm_H,&data[BLUECELL_DATA + 1],sizeof(DET_TABLEDL_st));
  1027. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_DET_DL1_TABLE_ADDRESDS),&Det_DL2.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st));
  1028. break;
  1029. case DLI_P3_Level_Table_Number:
  1030. Bluecell_DataCopy(&Det_DL3.Table_Det5_dBm_H,&data[BLUECELL_DATA + 1],sizeof(DET_TABLEDL_st));
  1031. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_DET_DL2_TABLE_ADDRESDS),&Det_DL3.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st));
  1032. case DLI_P4_Level_Table_Number:
  1033. Bluecell_DataCopy(&Det_DL4.Table_Det5_dBm_H,&data[BLUECELL_DATA + 1],sizeof(DET_TABLEDL_st));
  1034. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_DET_DL3_TABLE_ADDRESDS),&Det_DL4.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st));
  1035. break;
  1036. case ULO_P1_Level_Table_Number:
  1037. Bluecell_DataCopy(&Det_UL1.Table_Det_15_dBm_H,&data[BLUECELL_DATA + 1],sizeof(DET_TABLEUL_st));
  1038. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_DET_DL4_TABLE_ADDRESDS),&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  1039. break;
  1040. case ULO_P2_Level_Table_Number:
  1041. Bluecell_DataCopy(&Det_UL2.Table_Det_15_dBm_H,&data[BLUECELL_DATA + 1],sizeof(DET_TABLEUL_st));
  1042. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_DET_UL1_TABLE_ADDRESDS),&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  1043. break;
  1044. case ULO_P3_Level_Table_Number:
  1045. Bluecell_DataCopy(&Det_UL3.Table_Det_15_dBm_H,&data[BLUECELL_DATA + 1],sizeof(DET_TABLEUL_st));
  1046. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_DET_UL2_TABLE_ADDRESDS),&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  1047. break;
  1048. case ULO_P4_Level_Table_Number:
  1049. Bluecell_DataCopy(&Det_UL4.Table_Det_15_dBm_H,&data[BLUECELL_DATA + 1],sizeof(DET_TABLEUL_st));
  1050. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_DET_UL3_TABLE_ADDRESDS),&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  1051. break;
  1052. case DLI_P1_ATT_Temp_guarantee_Table_Number:
  1053. Bluecell_DataCopy(&Temp_DL1.Table_10_Temp_H,&data[BLUECELL_DATA + 1],sizeof(TEMP_TABLE_st));
  1054. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_DET_UL4_TABLE_ADDRESDS),&Temp_DL1.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  1055. break;
  1056. case DLI_P2_ATT_Temp_guarantee_Table_Number:
  1057. Bluecell_DataCopy(&Temp_DL2.Table_10_Temp_H,&data[BLUECELL_DATA + 1],sizeof(TEMP_TABLE_st));
  1058. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL1_TABLE_ADDRESDS),&Temp_DL2.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  1059. break;
  1060. case DLI_P3_ATT_Temp_guarantee_Table_Number:
  1061. Bluecell_DataCopy(&Temp_DL3.Table_10_Temp_H,&data[BLUECELL_DATA + 1],sizeof(TEMP_TABLE_st));
  1062. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL2_TABLE_ADDRESDS),&Temp_DL3.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  1063. break;
  1064. case DLI_P4_ATT_Temp_guarantee_Table_Number:
  1065. Bluecell_DataCopy(&Temp_DL4.Table_10_Temp_H,&data[BLUECELL_DATA + 1],sizeof(TEMP_TABLE_st));
  1066. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL3_TABLE_ADDRESDS),&Temp_DL4.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  1067. break;
  1068. case ULO_P1_ATT_Temp_guarantee_Table_Number:
  1069. Bluecell_DataCopy(&Temp_UL1.Table_10_Temp_H,&data[BLUECELL_DATA + 1],sizeof(TEMP_TABLE_st));
  1070. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL4_TABLE_ADDRESDS),&Temp_UL1.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  1071. EEPROM_M24C08_Read(EEPROM_M24C08_ID ,(EEPROM_TEMP_DL4_TABLE_ADDRESDS),&Temp_UL1.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  1072. Bluecell_structprintf(&Temp_UL1.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  1073. break;
  1074. case ULO_P2_ATT_Temp_guarantee_Table_Number:
  1075. Bluecell_DataCopy(&Temp_UL2.Table_10_Temp_H,&data[BLUECELL_DATA + 1],sizeof(TEMP_TABLE_st));
  1076. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_TEMP_UL1_TABLE_ADDRESDS),&Temp_UL2.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  1077. break;
  1078. case ULO_P3_ATT_Temp_guarantee_Table_Number:
  1079. Bluecell_DataCopy(&Temp_UL3.Table_10_Temp_H,&data[BLUECELL_DATA + 1],sizeof(TEMP_TABLE_st));
  1080. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_TEMP_UL2_TABLE_ADDRESDS),&Temp_UL3.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  1081. break;
  1082. case ULO_P4_ATT_Temp_guarantee_Table_Number:
  1083. Bluecell_DataCopy(&Temp_UL4.Table_10_Temp_H,&data[BLUECELL_DATA + 1],sizeof(TEMP_TABLE_st));
  1084. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_TEMP_UL3_TABLE_ADDRESDS),&Temp_UL4.Table_10_Temp_H,sizeof(TEMP_TABLE_st));
  1085. break;
  1086. }
  1087. }
  1088. bool Bluecell_Operate(uint8_t* data){
  1089. uint8_t datatype = data[BLUECELL_TYPE];
  1090. //double ret = 0 ,tmp = 0.1;
  1091. int16_t tempdata = 0;
  1092. uint8_t i = 0;
  1093. switch(datatype){
  1094. case BLUECELL_SOFTWARERESET:
  1095. NVIC_SystemReset();
  1096. break;
  1097. case Bluecell_ATT_DL1 :
  1098. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1099. bluecell_Currdatastatus.ATT_DL1_H = data[BLUECELL_DATA + i++];
  1100. bluecell_Currdatastatus.ATT_DL1_L = data[BLUECELL_DATA + i++];
  1101. // printf("bluecell_Currdatastatus.ATT_DL1_H : %x\r\n",bluecell_Currdatastatus.ATT_DL1_H);
  1102. // printf("bluecell_Currdatastatus.ATT_DL1_L : %x\r\n",bluecell_Currdatastatus.ATT_DL1_L);
  1103. /*
  1104. Atten Ctrl Function
  1105. */
  1106. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1107. break;
  1108. case Bluecell_ATT_DL2 :
  1109. bluecell_Currdatastatus.ATT_DL2_H = data[BLUECELL_DATA + i++];
  1110. bluecell_Currdatastatus.ATT_DL2_L = data[BLUECELL_DATA + i++];
  1111. /*
  1112. Atten Ctrl Function
  1113. */
  1114. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1115. break;
  1116. case Bluecell_ATT_DL3 :
  1117. bluecell_Currdatastatus.ATT_DL3_H = data[BLUECELL_DATA + i++];
  1118. bluecell_Currdatastatus.ATT_DL3_L = data[BLUECELL_DATA + i++];
  1119. /*
  1120. Atten Ctrl Function
  1121. */
  1122. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1123. break;
  1124. case Bluecell_ATT_DL4 :
  1125. bluecell_Currdatastatus.ATT_DL4_H = data[BLUECELL_DATA + i++];
  1126. bluecell_Currdatastatus.ATT_DL4_L = data[BLUECELL_DATA + i++];
  1127. /*
  1128. Atten Ctrl Function
  1129. */
  1130. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1131. break;
  1132. case Bluecell_ATT_UL1 :
  1133. bluecell_Currdatastatus.ATT_UL1_H = data[BLUECELL_DATA + i++];
  1134. bluecell_Currdatastatus.ATT_UL1_L = data[BLUECELL_DATA + i++];
  1135. /*
  1136. Atten Ctrl Function
  1137. */
  1138. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1139. // printf("bluecell_Currdatastatus.ATT_UL1_H : %x\r\n",bluecell_Currdatastatus.ATT_UL1_H);
  1140. // printf("bluecell_Currdatastatus.ATT_UL1_L : %x\r\n",bluecell_Currdatastatus.ATT_UL1_L);
  1141. break;
  1142. case Bluecell_ATT_UL2 :
  1143. bluecell_Currdatastatus.ATT_UL2_H = data[BLUECELL_DATA + i++];
  1144. bluecell_Currdatastatus.ATT_UL2_L = data[BLUECELL_DATA + i++];
  1145. /*
  1146. Atten Ctrl Function
  1147. */
  1148. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1149. break;
  1150. case Bluecell_ATT_UL3 :
  1151. bluecell_Currdatastatus.ATT_UL3_H = data[BLUECELL_DATA + i++];
  1152. bluecell_Currdatastatus.ATT_UL3_L = data[BLUECELL_DATA + i++];
  1153. /*
  1154. Atten Ctrl Function
  1155. */
  1156. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1157. break;
  1158. case Bluecell_ATT_UL4 :
  1159. bluecell_Currdatastatus.ATT_UL4_H = data[BLUECELL_DATA + i++];
  1160. bluecell_Currdatastatus.ATT_UL4_L = data[BLUECELL_DATA + i++];
  1161. /*
  1162. Atten Ctrl Function
  1163. */
  1164. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1165. // printf("ret : %f ,tmp %f \r\n",ret,tmp );
  1166. break;
  1167. case ATT_DL1_PATH :
  1168. if(data[BLUECELL_DATA]==0){
  1169. HAL_GPIO_WritePin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin,GPIO_PIN_RESET);//CLOCK
  1170. // printf("ATT_DL1_PATH OFF\r\n");
  1171. bluecell_Currdatastatus.DLI_Shutdown_Retry_Count1 = 0;
  1172. }
  1173. else{
  1174. HAL_GPIO_WritePin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin,GPIO_PIN_SET);//CLOCK
  1175. bluecell_Prevdatastatus.ATT_DL1_H = ~bluecell_Prevdatastatus.ATT_DL1_H;
  1176. bluecell_Prevdatastatus.ATT_DL1_L = ~bluecell_Prevdatastatus.ATT_DL1_L;
  1177. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1178. // printf("ATT_DL1_PATH ON\r\n");
  1179. }
  1180. bluecell_Currdatastatus.ATT_DL1_PATH = data[BLUECELL_DATA];
  1181. break;
  1182. case ATT_UL1_PATH :
  1183. if(data[BLUECELL_DATA]==0){
  1184. HAL_GPIO_WritePin(PATH_EN_UL1_GPIO_Port,PATH_EN_UL1_Pin,GPIO_PIN_RESET);//CLOCK
  1185. bluecell_Currdatastatus.ULO_Shutdown_Retry_Count1 = 0;
  1186. }
  1187. else{
  1188. HAL_GPIO_WritePin(PATH_EN_UL1_GPIO_Port,PATH_EN_UL1_Pin,GPIO_PIN_SET);//CLOCK
  1189. bluecell_Prevdatastatus.ATT_UL1_H = ~bluecell_Prevdatastatus.ATT_UL1_H;
  1190. bluecell_Prevdatastatus.ATT_UL1_L = ~bluecell_Prevdatastatus.ATT_UL1_L;
  1191. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1192. }
  1193. bluecell_Currdatastatus.ATT_UL1_PATH = data[BLUECELL_DATA];
  1194. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1195. break;
  1196. case ATT_SelfTest1 :
  1197. if(data[BLUECELL_DATA]==0){
  1198. HAL_GPIO_WritePin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin,GPIO_PIN_RESET);//CLOCK
  1199. HAL_GPIO_WritePin(PATH_SW1_GPIO_Port,PATH_SW1_Pin,GPIO_PIN_SET);//CLOCK
  1200. }
  1201. else{
  1202. HAL_GPIO_WritePin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin,GPIO_PIN_SET);//CLOCK
  1203. HAL_GPIO_WritePin(PATH_SW1_GPIO_Port,PATH_SW1_Pin,GPIO_PIN_RESET);//CLOCK
  1204. }
  1205. bluecell_Currdatastatus.Selftest1 = data[BLUECELL_DATA];
  1206. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1207. break;
  1208. case ATT_DL2_PATH :
  1209. if(data[BLUECELL_DATA]==0){
  1210. HAL_GPIO_WritePin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin,GPIO_PIN_RESET);//CLOCK
  1211. bluecell_Currdatastatus.DLI_Shutdown_Retry_Count2 = 0;
  1212. }
  1213. else{
  1214. HAL_GPIO_WritePin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin,GPIO_PIN_SET);//CLOCK
  1215. bluecell_Prevdatastatus.ATT_DL2_H = ~bluecell_Prevdatastatus.ATT_DL2_H;
  1216. bluecell_Prevdatastatus.ATT_DL2_L = ~bluecell_Prevdatastatus.ATT_DL2_L;
  1217. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1218. }
  1219. bluecell_Currdatastatus.ATT_DL2_PATH = data[BLUECELL_DATA];
  1220. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1221. break;
  1222. break;
  1223. case ATT_UL2_PATH :
  1224. if(data[BLUECELL_DATA]==0){
  1225. HAL_GPIO_WritePin(PATH_EN_UL2_GPIO_Port,PATH_EN_UL2_Pin,GPIO_PIN_RESET);//CLOCK
  1226. bluecell_Currdatastatus.ULO_Shutdown_Retry_Count2 = 0;
  1227. }
  1228. else{
  1229. HAL_GPIO_WritePin(PATH_EN_UL2_GPIO_Port,PATH_EN_UL2_Pin,GPIO_PIN_SET);//CLOCK
  1230. bluecell_Prevdatastatus.ATT_UL2_H = ~bluecell_Prevdatastatus.ATT_UL2_H;
  1231. bluecell_Prevdatastatus.ATT_UL2_L = ~bluecell_Prevdatastatus.ATT_UL2_L;
  1232. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1233. }
  1234. bluecell_Currdatastatus.ATT_UL2_PATH = data[BLUECELL_DATA];
  1235. break;
  1236. case ATT_SelfTest2 :
  1237. if(data[BLUECELL_DATA]==0){
  1238. HAL_GPIO_WritePin(_PATH_SW2_GPIO_Port,_PATH_SW2_Pin,GPIO_PIN_RESET);//CLOCK
  1239. HAL_GPIO_WritePin(PATH_SW2_GPIO_Port,PATH_SW2_Pin,GPIO_PIN_SET);//CLOCK
  1240. }else{
  1241. HAL_GPIO_WritePin(PATH_SW2_GPIO_Port,PATH_SW2_Pin,GPIO_PIN_RESET);//CLOCK
  1242. HAL_GPIO_WritePin(_PATH_SW2_GPIO_Port,_PATH_SW2_Pin,GPIO_PIN_SET);//CLOCK
  1243. }
  1244. bluecell_Currdatastatus.Selftest2 = data[BLUECELL_DATA];
  1245. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1246. break;
  1247. case ATT_DL3_PATH :
  1248. if(data[BLUECELL_DATA]==0){
  1249. HAL_GPIO_WritePin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin,GPIO_PIN_RESET);//CLOCK
  1250. bluecell_Currdatastatus.DLI_Shutdown_Retry_Count3 = 0;
  1251. }
  1252. else{
  1253. HAL_GPIO_WritePin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin,GPIO_PIN_SET);//CLOCK
  1254. bluecell_Prevdatastatus.ATT_DL3_H = ~bluecell_Prevdatastatus.ATT_DL3_H;
  1255. bluecell_Prevdatastatus.ATT_DL3_L = ~bluecell_Prevdatastatus.ATT_DL3_L;
  1256. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1257. }
  1258. bluecell_Currdatastatus.ATT_DL3_PATH = data[BLUECELL_DATA];
  1259. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1260. break;
  1261. case ATT_UL3_PATH :
  1262. if(data[BLUECELL_DATA]==0){
  1263. HAL_GPIO_WritePin(PATH_EN_UL3_GPIO_Port,PATH_EN_UL3_Pin,GPIO_PIN_RESET);//CLOCK
  1264. bluecell_Currdatastatus.ULO_Shutdown_Retry_Count3 = 0;
  1265. }
  1266. else{
  1267. HAL_GPIO_WritePin(PATH_EN_UL3_GPIO_Port,PATH_EN_UL3_Pin,GPIO_PIN_SET);//CLOCK
  1268. bluecell_Prevdatastatus.ATT_UL3_H = ~bluecell_Prevdatastatus.ATT_UL3_H;
  1269. bluecell_Prevdatastatus.ATT_UL3_L = ~bluecell_Prevdatastatus.ATT_UL3_L;
  1270. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1271. }
  1272. bluecell_Currdatastatus.ATT_UL3_PATH = data[BLUECELL_DATA];
  1273. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1274. break;
  1275. case ATT_SelfTest3 :
  1276. if(data[BLUECELL_DATA]==0){
  1277. HAL_GPIO_WritePin(_PATH_SW3_GPIO_Port,_PATH_SW3_Pin,GPIO_PIN_RESET);//CLOCK
  1278. HAL_GPIO_WritePin(PATH_SW3_GPIO_Port,PATH_SW3_Pin,GPIO_PIN_SET);//CLOCK
  1279. }
  1280. else{
  1281. HAL_GPIO_WritePin(PATH_SW3_GPIO_Port,PATH_SW3_Pin,GPIO_PIN_RESET);//CLOCK
  1282. HAL_GPIO_WritePin(_PATH_SW3_GPIO_Port,_PATH_SW3_Pin,GPIO_PIN_SET);//CLOCK
  1283. }
  1284. bluecell_Currdatastatus.Selftest3 = data[BLUECELL_DATA];
  1285. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1286. break;
  1287. case ATT_DL4_PATH :
  1288. if(data[BLUECELL_DATA]==0){
  1289. HAL_GPIO_WritePin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin,GPIO_PIN_RESET);//CLOCK
  1290. bluecell_Currdatastatus.DLI_Shutdown_Retry_Count4 = 0;
  1291. }else{
  1292. HAL_GPIO_WritePin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin,GPIO_PIN_SET);//CLOCK
  1293. bluecell_Prevdatastatus.ATT_DL4_H = ~bluecell_Prevdatastatus.ATT_DL4_H;
  1294. bluecell_Prevdatastatus.ATT_DL4_L = ~bluecell_Prevdatastatus.ATT_DL4_L;
  1295. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1296. }
  1297. bluecell_Currdatastatus.ATT_DL4_PATH = data[BLUECELL_DATA];
  1298. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1299. break;
  1300. case ATT_UL4_PATH:
  1301. if(data[BLUECELL_DATA]==0){
  1302. HAL_GPIO_WritePin(PATH_EN_UL4_GPIO_Port,PATH_EN_UL4_Pin,GPIO_PIN_RESET);//CLOCK
  1303. bluecell_Currdatastatus.ULO_Shutdown_Retry_Count4 = 0;
  1304. }
  1305. else{
  1306. HAL_GPIO_WritePin(PATH_EN_UL4_GPIO_Port,PATH_EN_UL4_Pin,GPIO_PIN_SET);//CLOCK
  1307. bluecell_Prevdatastatus.ATT_UL4_H = ~bluecell_Prevdatastatus.ATT_UL4_H;
  1308. bluecell_Prevdatastatus.ATT_UL4_L = ~bluecell_Prevdatastatus.ATT_UL4_L;
  1309. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1310. }
  1311. bluecell_Currdatastatus.ATT_UL4_PATH = data[BLUECELL_DATA];
  1312. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1313. break;
  1314. case ATT_SelfTest4 :
  1315. if(data[BLUECELL_DATA]==0){
  1316. HAL_GPIO_WritePin(_PATH_SW4_GPIO_Port,_PATH_SW4_Pin,GPIO_PIN_RESET);//CLOCK
  1317. HAL_GPIO_WritePin(PATH_SW4_GPIO_Port,PATH_SW4_Pin,GPIO_PIN_SET);//CLOCK
  1318. }else{
  1319. HAL_GPIO_WritePin(_PATH_SW4_GPIO_Port,_PATH_SW4_Pin,GPIO_PIN_SET);//CLOCK
  1320. HAL_GPIO_WritePin(PATH_SW4_GPIO_Port,PATH_SW4_Pin,GPIO_PIN_RESET);//CLOCK
  1321. }
  1322. bluecell_Currdatastatus.Selftest4 = data[BLUECELL_DATA];
  1323. // printf("Function : %s Line %d \r\n",__func__,__LINE__);
  1324. break;
  1325. case ATT_TableSet:
  1326. Bluecell_TableSave(data, data[BLUECELL_DATA]);
  1327. case ATT_TableGet:
  1328. Bluecell_TableLoad(data, data[BLUECELL_DATA]);
  1329. data[BLUECELL_TYPE] = ATT_TableGet;
  1330. data[data[BLUECELL_LENGTH] + 1] = ((CRC16_Generate(&data[BLUECELL_TYPE], data[BLUECELL_LENGTH]) & 0xFF00) >> 8);
  1331. data[data[BLUECELL_LENGTH] + 2] = CRC16_Generate(&data[BLUECELL_TYPE], data[BLUECELL_LENGTH]) & 0x00FF;
  1332. data[data[BLUECELL_LENGTH] + 3] = 0xEB;
  1333. Bluecell_StructCpy(&Txdata[0],&data[0],data[BLUECELL_LENGTH] + 4);
  1334. Uart1_Data_Send(&Txdata[0], Txdata[BLUECELL_LENGTH] + 4);
  1335. #if 0 // PYJ.2020.04.22_BEGIN --
  1336. for(int i = 0 ; i < data[BLUECELL_LENGTH] + 3; i++ ){
  1337. // printf("%x ",data[i]);
  1338. Txdata[0] = data[0]; }
  1339. printf("\r\n");
  1340. #endif // PYJ.2020.04.22_END --
  1341. // printf("\r\nuint8_t data : %x data[BLUECELL_LENGTH] + 6 : %d\r\n",data[0],data[BLUECELL_LENGTH] + 6);
  1342. break;
  1343. case Bluecell_StatusReq:
  1344. DataStatusSet();
  1345. #if 0 // PYJ.2020.05.28_BEGIN --
  1346. Bluecell_StructCpy(&Txdata[0],&bluecell_Currdatastatus.bluecell_header,94);
  1347. Txdata[BLUECELL_LENGTH] = 94 - 3;//sizeof(BLUESTATUS_st) - 3;
  1348. Txdata[94 - 2] = STH30_CreateCrc(&Txdata[BLUECELL_TYPE], Txdata[BLUECELL_LENGTH]);
  1349. #else
  1350. Bluecell_StructCpy(&Txdata[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
  1351. Txdata[BLUECELL_LENGTH] = sizeof(BLUESTATUS_st) - 3;//sizeof(BLUESTATUS_st) - 3;
  1352. // Txdata[sizeof(BLUESTATUS_st) - 2] = STH30_CreateCrc(&Txdata[BLUECELL_TYPE], Txdata[BLUECELL_LENGTH]);
  1353. Txdata[sizeof(BLUESTATUS_st) - 3] = ((CRC16_Generate(&data[BLUECELL_TYPE], data[BLUECELL_LENGTH]) & 0xFF00) >> 8);
  1354. Txdata[sizeof(BLUESTATUS_st) - 2] = CRC16_Generate(&data[BLUECELL_TYPE], data[BLUECELL_LENGTH]) & 0x00FF;
  1355. #endif // PYJ.2020.05.28_END --
  1356. #if 0 // PYJ.2020.04.22_BEGIN --
  1357. for(int i = 0 ; i < sizeof(BLUESTATUS_st); i++ ){
  1358. printf("%x ",Txdata[i]);
  1359. }
  1360. printf("\r\n");
  1361. #endif // PYJ.2020.04.22_END --
  1362. Uart1_Data_Send(&Txdata[0], sizeof(BLUESTATUS_st));
  1363. break;
  1364. case Bluecell_StatusSave:
  1365. // printf("Copy Complete");
  1366. // Bluecell_StructCpy(&DataWrite[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
  1367. // EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_BASE),&DataWrite[0],sizeof(BLUESTATUS_st));
  1368. // Bluecell_StructCpy(&Txdata[0],&DataWrite[0],sizeof(BLUESTATUS_st));
  1369. // Txdata[sizeof(BLUESTATUS_st) - 2] = STH30_CreateCrc(&Txdata[BLUECELL_TYPE], sizeof(BLUESTATUS_st) - 3);
  1370. // Uart1_Data_Send(&Txdata[0], sizeof(BLUESTATUS_st));
  1371. EEPROM_M24C08_Zerowrite(EEPROM_M24C08_ID ,(EEPROM_ATT_BASE));
  1372. // printf("ZERO WRITE COMPLETE");
  1373. NVIC_SystemReset();
  1374. break;
  1375. case Bluecell_DL1_USER:
  1376. bluecell_Currdatastatus.bluecell_User_DL1_H = data[BLUECELL_DATA + i++];
  1377. bluecell_Currdatastatus.bluecell_User_DL1_L = data[BLUECELL_DATA + i++];
  1378. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1379. break;
  1380. case Bluecell_DL2_USER:
  1381. bluecell_Currdatastatus.bluecell_User_DL2_H = data[BLUECELL_DATA + i++];
  1382. bluecell_Currdatastatus.bluecell_User_DL2_L = data[BLUECELL_DATA + i++];
  1383. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1384. break;
  1385. case Bluecell_DL3_USER:
  1386. bluecell_Currdatastatus.bluecell_User_DL3_H = data[BLUECELL_DATA + i++];
  1387. bluecell_Currdatastatus.bluecell_User_DL3_L = data[BLUECELL_DATA + i++];
  1388. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1389. break;
  1390. case Bluecell_DL4_USER:
  1391. bluecell_Currdatastatus.bluecell_User_DL4_H = data[BLUECELL_DATA + i++];
  1392. bluecell_Currdatastatus.bluecell_User_DL4_L = data[BLUECELL_DATA + i++];
  1393. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1394. break;
  1395. case Bluecell_UL1_USER:
  1396. bluecell_Currdatastatus.bluecell_User_UL1_H = data[BLUECELL_DATA + i++];
  1397. bluecell_Currdatastatus.bluecell_User_UL1_L = data[BLUECELL_DATA + i++];
  1398. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1399. break;
  1400. case Bluecell_UL2_USER:
  1401. bluecell_Currdatastatus.bluecell_User_UL2_H = data[BLUECELL_DATA + i++];
  1402. bluecell_Currdatastatus.bluecell_User_UL2_L = data[BLUECELL_DATA + i++];
  1403. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1404. break;
  1405. case Bluecell_UL3_USER:
  1406. bluecell_Currdatastatus.bluecell_User_UL3_H = data[BLUECELL_DATA + i++];
  1407. bluecell_Currdatastatus.bluecell_User_UL3_L = data[BLUECELL_DATA + i++];
  1408. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1409. break;
  1410. case Bluecell_UL4_USER:
  1411. bluecell_Currdatastatus.bluecell_User_UL4_H = data[BLUECELL_DATA + i++];
  1412. bluecell_Currdatastatus.bluecell_User_UL4_L = data[BLUECELL_DATA + i++];
  1413. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1414. break;
  1415. /*******/
  1416. #if 0 // PYJ.2020.05.13_BEGIN --
  1417. 수정 및 추가
  1418. #endif // PYJ.2020.05.13_END --
  1419. /*******/
  1420. case Bluecell_TEMP_USER :
  1421. bluecell_Currdatastatus.bluecell_User_TEMP_OFFSET = data[BLUECELL_DATA + i++];
  1422. // bluecell_Currdatastatus.bluecell_User_TEMP_OFFSET_L = data[BLUECELL_DATA + i++];
  1423. break;
  1424. case Bluecell_DLI_AGC_ON_OFF:
  1425. bluecell_Currdatastatus.DLI_AGC_ON_OFF = data[BLUECELL_DATA + i];
  1426. // printf("AGC ON OFF SET : %d \r\n",bluecell_Currdatastatus.DLI_AGC_ON_OFF);
  1427. break;
  1428. case Bluecell_ULO_ALC_ON_OFF:
  1429. bluecell_Currdatastatus.ULO_ALC_ON_OFF = data[BLUECELL_DATA + i];
  1430. break;
  1431. case Bluecell_DLI_AGC_Threshold:
  1432. bluecell_Currdatastatus.DLI_AGC_Threshold_H = data[BLUECELL_DATA + i++];
  1433. bluecell_Currdatastatus.DLI_AGC_Threshold_L = data[BLUECELL_DATA + i++];
  1434. // tempdata = (( bluecell_Currdatastatus.DLI_AGC_Threshold_H << 8) & 0xFF00) ;
  1435. // tempdata += bluecell_Currdatastatus.DLI_AGC_Threshold_L ;
  1436. // tempdata /= 10;
  1437. // printf("tempdata : %d\r\n",tempdata);
  1438. // bluecell_Currdatastatus.DLI_AGC_Threshold_H = ((tempdata & 0xFF00) >> 8);
  1439. // bluecell_Currdatastatus.DLI_AGC_Threshold_L = (tempdata & 0x00FF);
  1440. break;
  1441. case Bluecell_DLI_AGC_Threshold_Default:
  1442. bluecell_Currdatastatus.DLI_AGC_Threshold_default = data[BLUECELL_DATA + i++];
  1443. if(bluecell_Currdatastatus.DLI_AGC_Threshold_default == true){
  1444. bluecell_Currdatastatus.DLI_AGC_Threshold_H = MBIC_DLI_AGC_Threshold_Default_H;
  1445. bluecell_Currdatastatus.DLI_AGC_Threshold_L = MBIC_DLI_AGC_Threshold_Default_L;
  1446. bluecell_Currdatastatus.DLI_AGC_Threshold_default = false;
  1447. printf("%s : %d \r\n",__func__,__LINE__);
  1448. }
  1449. break;
  1450. case Bluecell_DLI_Shutdown_ON_OFF:
  1451. bluecell_Currdatastatus.DLI_Shutdown_ON_OFF = data[BLUECELL_DATA + i++];
  1452. printf("%s : %d DLI_Shutdown_ON_OFF : %d \r\n",__func__,__LINE__,bluecell_Currdatastatus.DLI_Shutdown_ON_OFF);
  1453. break;
  1454. case Bluecell_DLI_Shutdown_Threshold:
  1455. bluecell_Currdatastatus.DLI_Shutdown_Threshold_H = data[BLUECELL_DATA + i++];
  1456. bluecell_Currdatastatus.DLI_Shutdown_Threshold_L = data[BLUECELL_DATA + i++];
  1457. tempdata = (( bluecell_Currdatastatus.DLI_Shutdown_Threshold_H << 8) & 0xFF00) ;
  1458. tempdata += bluecell_Currdatastatus.DLI_Shutdown_Threshold_L ;
  1459. tempdata /= 10;
  1460. printf("tempdata : %d\r\n",tempdata);
  1461. // bluecell_Currdatastatus.DLI_Shutdown_Threshold_H = ((tempdata & 0xFF00) >> 8);
  1462. // bluecell_Currdatastatus.DLI_Shutdown_Threshold_L = (tempdata & 0x00FF);
  1463. // printf("tempdata %d \r\n",tempdata);
  1464. break;
  1465. case Bluecell_DLI_Shutdown_Threshold_Default:
  1466. bluecell_Currdatastatus.DLI_Shutdown_Threshold_Default = data[BLUECELL_DATA + i++];
  1467. if(bluecell_Currdatastatus.DLI_Shutdown_Threshold_Default == true){
  1468. bluecell_Currdatastatus.DLI_Shutdown_Threshold_H = MBIC_DLI_Shutdown_Threshold_Default_H;
  1469. bluecell_Currdatastatus.DLI_Shutdown_Threshold_L = MBIC_DLI_Shutdown_Threshold_Default_L;
  1470. }
  1471. printf("%s : %d \r\n",__func__,__LINE__);
  1472. // printf("bluecell_Currdatastatus.DLI_Shutdown_Threshold_Default : %d \r\n",bluecell_Currdatastatus.DLI_Shutdown_Threshold_Default);
  1473. break;
  1474. case Bluecell_DLI_Shutdown_Count:
  1475. /*NOP*/
  1476. break;
  1477. case Bluecell_DLI_Level_High_Threshold :
  1478. bluecell_Currdatastatus.DLI_Level_High_Threshold_H = data[BLUECELL_DATA + i++];
  1479. bluecell_Currdatastatus.DLI_Level_High_Threshold_L = data[BLUECELL_DATA + i++];
  1480. tempdata = (( bluecell_Currdatastatus.DLI_Level_High_Threshold_H << 8) & 0xFF00) ;
  1481. tempdata += bluecell_Currdatastatus.DLI_Level_High_Threshold_L ;
  1482. tempdata /= 10;
  1483. printf("DLI_Level_High_Threshold : %d\r\n",tempdata);
  1484. // bluecell_Currdatastatus.DLI_Level_High_Threshold_H = ((tempdata & 0xFF00) >> 8);
  1485. // bluecell_Currdatastatus.DLI_Level_High_Threshold_L = (tempdata & 0x00FF);
  1486. break;
  1487. case Bluecell_DLI_Level_Low_Threshold :
  1488. bluecell_Currdatastatus.DLI_Level_Low_Threshold_H = data[BLUECELL_DATA + i++];
  1489. bluecell_Currdatastatus.DLI_Level_Low_Threshold_L = data[BLUECELL_DATA + i++];
  1490. tempdata = (( bluecell_Currdatastatus.DLI_Level_Low_Threshold_H << 8) & 0xFF00) ;
  1491. tempdata += bluecell_Currdatastatus.DLI_Level_Low_Threshold_L ;
  1492. tempdata /= 10;
  1493. printf("DLI_Level_Low_Threshold : %d\r\n",tempdata);
  1494. // bluecell_Currdatastatus.DLI_Level_Low_Threshold_H = ((tempdata & 0xFF00) >> 8);
  1495. // bluecell_Currdatastatus.DLI_Level_Low_Threshold_L = (tempdata & 0x00FF);
  1496. break;
  1497. case Bluecell_DLI_Level_High_Low_Threshold_default :
  1498. bluecell_Currdatastatus.DLI_Level_High_Low_Threshold_default = data[BLUECELL_DATA + i++];
  1499. if(bluecell_Currdatastatus.DLI_Level_High_Low_Threshold_default == true){
  1500. bluecell_Currdatastatus.DLI_Level_High_Threshold_H = MBIC_DLI_Level_High_Threshold_default_H;
  1501. bluecell_Currdatastatus.DLI_Level_High_Threshold_L = MBIC_DLI_Level_High_Threshold_default_L;
  1502. bluecell_Currdatastatus.DLI_Level_Low_Threshold_H = MBIC_DLI_Level_Low_Threshold_default_H;
  1503. bluecell_Currdatastatus.DLI_Level_Low_Threshold_L = MBIC_DLI_Level_Low_Threshold_default_L;
  1504. }
  1505. break;
  1506. case Bluecell_LED_TEST :
  1507. bluecell_Currdatastatus.LED_TEST = data[BLUECELL_DATA + i++];
  1508. printf("%s : %d Value : %d \r\n",__func__,__LINE__,bluecell_Currdatastatus.LED_TEST);
  1509. break;
  1510. case Bluecell_Temperature_Offset :
  1511. bluecell_Currdatastatus.bluecell_User_TEMP_OFFSET = data[BLUECELL_DATA + i++];
  1512. printf("%s : %d \r\n",__func__,__LINE__);
  1513. break;
  1514. case Bluecell_Temp_High_Threshold :
  1515. bluecell_Currdatastatus.Temp_High_Threshold = data[BLUECELL_DATA + i++];
  1516. printf("%s : %d Temps_High_Threshold : %d\r\n",__func__,__LINE__,bluecell_Currdatastatus.Temp_High_Threshold);
  1517. printf("Temp_High_Threshold : %d : Det %d \r\n",bluecell_Currdatastatus.Temp_High_Threshold,bluecell_Currdatastatus.DET_TEMP);
  1518. printf("Temp_High_Alarm : %d \r\n",bluecell_Currdatastatus.Temp_High_Alarm);
  1519. printf("Txdata : %d \r\n",Txdata[201]);
  1520. break;
  1521. case Bluecell_Temp_High_Threshold_Default :
  1522. bluecell_Currdatastatus.Temp_High_Threshold_Default = data[BLUECELL_DATA + i++];
  1523. if(bluecell_Currdatastatus.Temp_High_Threshold_Default == true){
  1524. bluecell_Currdatastatus.Temp_High_Threshold_Default = MBIC_Temp_High_Threshold_Default;
  1525. }
  1526. printf("%s : %d \r\n",__func__,__LINE__);
  1527. break;
  1528. case Bluecell_ULO_Level_High_Threshold :
  1529. bluecell_Currdatastatus.ULO_Level_High_Threshold_H = data[BLUECELL_DATA + i++];
  1530. bluecell_Currdatastatus.ULO_Level_High_Threshold_L = data[BLUECELL_DATA + i++];
  1531. tempdata = (( bluecell_Currdatastatus.ULO_Level_High_Threshold_H << 8) & 0xFF00) ;
  1532. tempdata += bluecell_Currdatastatus.ULO_Level_High_Threshold_L ;
  1533. tempdata /= 10;
  1534. printf("ULO_Level_High_Threshold : %d\r\n",tempdata);
  1535. // bluecell_Currdatastatus.ULO_Level_High_Threshold_H = ((tempdata & 0xFF00) >> 8);
  1536. // bluecell_Currdatastatus.ULO_Level_High_Threshold_L = (tempdata & 0x00FF);
  1537. break;
  1538. case Bluecell_ULO_Level_High_Threshold_default :
  1539. bluecell_Currdatastatus.ULO_Level_High_Threshold_default = data[BLUECELL_DATA + i++];
  1540. if(bluecell_Currdatastatus.ULO_Level_High_Threshold_default == true){
  1541. bluecell_Currdatastatus.ULO_Level_High_Threshold_H = MBIC_ULO_Level_High_Threshold_Default_H;
  1542. bluecell_Currdatastatus.ULO_Level_High_Threshold_L = MBIC_ULO_Level_High_Threshold_Default_L;
  1543. }
  1544. break;
  1545. case Bluecell_ULO_ALC_Threshold :
  1546. bluecell_Currdatastatus.ULO_ALC_Threshold_H = data[BLUECELL_DATA + i++];
  1547. bluecell_Currdatastatus.ULO_ALC_Threshold_L = data[BLUECELL_DATA + i++];
  1548. tempdata = (( bluecell_Currdatastatus.ULO_ALC_Threshold_H << 8) & 0xFF00) ;
  1549. tempdata += bluecell_Currdatastatus.ULO_ALC_Threshold_L ;
  1550. tempdata /= 10;
  1551. printf("ULO_ALC_Threshold : %d\r\n",tempdata);
  1552. // bluecell_Currdatastatus.ULO_ALC_Threshold_H = ((tempdata & 0xFF00) >> 8);
  1553. // bluecell_Currdatastatus.ULO_ALC_Threshold_L = (tempdata & 0x00FF);
  1554. break;
  1555. case Bluecell_ULO_ALC_Threshold_Default :
  1556. bluecell_Currdatastatus.ULO_ALC_Threshold_Default = data[BLUECELL_DATA + i++];
  1557. if(bluecell_Currdatastatus.ULO_Level_High_Threshold_default == true){
  1558. bluecell_Currdatastatus.ULO_ALC_Threshold_H = MBIC_ULO_ALC_Threshold_Default_H;
  1559. bluecell_Currdatastatus.ULO_ALC_Threshold_L = MBIC_ULO_ALC_Threshold_Default_L;
  1560. }
  1561. printf("%s : %d \r\n",__func__,__LINE__);
  1562. break;
  1563. case Bluecell_ULO_Shutdown_ON_OFF :
  1564. bluecell_Currdatastatus.ULO_Shutdown_ON_OFF = data[BLUECELL_DATA + i++];
  1565. printf("%s : %d \r\n",__func__,__LINE__);
  1566. break;
  1567. case Bluecell_ULO_Shutdown_Threshold :
  1568. bluecell_Currdatastatus.ULO_Shutdown_Threshold_H = data[BLUECELL_DATA + i++];
  1569. bluecell_Currdatastatus.ULO_Shutdown_Threshold_L = data[BLUECELL_DATA + i++];
  1570. tempdata = (( bluecell_Currdatastatus.ULO_Shutdown_Threshold_H << 8) & 0xFF00) ;
  1571. tempdata += bluecell_Currdatastatus.ULO_Shutdown_Threshold_L ;
  1572. tempdata /= 10;
  1573. printf("tempdata : %d\r\n",tempdata);
  1574. // bluecell_Currdatastatus.ULO_Shutdown_Threshold_H = ((tempdata & 0xFF00) >> 8);
  1575. // bluecell_Currdatastatus.ULO_Shutdown_Threshold_L = (tempdata & 0x00FF);
  1576. break;
  1577. case Bluecell_ULO_Shutdown_Threshold_Default :
  1578. bluecell_Currdatastatus.ULO_Shutdown_Threshold_Default = data[BLUECELL_DATA + i++];
  1579. if(bluecell_Currdatastatus.ULO_Level_High_Threshold_default == true){
  1580. bluecell_Currdatastatus.ULO_Shutdown_Threshold_H = MBIC_ULO_Shutdown_Threshold_Default_H;
  1581. bluecell_Currdatastatus.ULO_Shutdown_Threshold_L = MBIC_ULO_Shutdown_Threshold_Default_L;
  1582. }
  1583. printf("%s : %d \r\n",__func__,__LINE__);
  1584. break;
  1585. case Bluecell_ULO_Shutdown_Retry_Count :
  1586. break;
  1587. case Bluecell_Alarm_Mask:
  1588. bluecell_Currdatastatus.ALARM_MASK1 = (data[BLUECELL_DATA + i+ 1] / 10);
  1589. printf("%s : %d ALARM_MASK1 : %d \r\n",__func__,__LINE__,bluecell_Currdatastatus.ALARM_MASK1);
  1590. printf("Txdata : %d \r\n",Txdata[107]);
  1591. break;
  1592. }
  1593. if(datatype != Bluecell_StatusReq
  1594. && datatype != Bluecell_LED_TEST)
  1595. {
  1596. Bluecell_StructCpy(&DataWrite[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
  1597. EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_WINDOW_STATUS_ADDRESDS),&DataWrite[0],sizeof(BLUESTATUS_st));
  1598. // EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_WINDOW_STATUS_ADDRESDS,&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st) );
  1599. // Bluecell_StructCpy(&Txdata[0],&DataWrite[0],sizeof(BLUESTATUS_st));
  1600. // Txdata[sizeof(BLUESTATUS_st) - 2] = STH30_CreateCrc(&Txdata[BLUECELL_TYPE], sizeof(BLUESTATUS_st) - 3);
  1601. // Uart1_Data_Send(&Txdata[0], sizeof(BLUESTATUS_st));
  1602. }
  1603. return true;
  1604. }
  1605. void DataStatusSet(void){
  1606. bluecell_Currdatastatus.bluecell_header = 0xbe;
  1607. bluecell_Currdatastatus.bluecell_type = Bluecell_StatusReq;
  1608. bluecell_Currdatastatus.bluecell_length = 94 - 3;
  1609. bluecell_Currdatastatus.bluecell_crcindex = 94 - 2 + 1;
  1610. bluecell_Currdatastatus.ATT_DL1_PATH = HAL_GPIO_ReadPin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin);//CLOCK;
  1611. bluecell_Currdatastatus.ATT_DL2_PATH = HAL_GPIO_ReadPin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin);//CLOCK;
  1612. bluecell_Currdatastatus.ATT_DL3_PATH = HAL_GPIO_ReadPin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin);//CLOCK;
  1613. bluecell_Currdatastatus.ATT_DL4_PATH = HAL_GPIO_ReadPin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin);//CLOCK;
  1614. bluecell_Currdatastatus.ATT_UL1_PATH = HAL_GPIO_ReadPin(PATH_EN_UL1_GPIO_Port,PATH_EN_UL1_Pin);//CLOCK;
  1615. bluecell_Currdatastatus.ATT_UL2_PATH = HAL_GPIO_ReadPin(PATH_EN_UL2_GPIO_Port,PATH_EN_UL2_Pin);//CLOCK;
  1616. bluecell_Currdatastatus.ATT_UL3_PATH = HAL_GPIO_ReadPin(PATH_EN_UL3_GPIO_Port,PATH_EN_UL3_Pin);//CLOCK;
  1617. bluecell_Currdatastatus.ATT_UL4_PATH = HAL_GPIO_ReadPin(PATH_EN_UL4_GPIO_Port,PATH_EN_UL4_Pin);//CLOCK;
  1618. bluecell_Currdatastatus.bluecell_etx = 0xeb;
  1619. }
  1620. void Bluecell_DataInit(){
  1621. HAL_GPIO_WritePin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin,bluecell_Currdatastatus.ATT_DL1_PATH);
  1622. HAL_GPIO_WritePin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin,bluecell_Currdatastatus.ATT_DL2_PATH);
  1623. HAL_GPIO_WritePin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin,bluecell_Currdatastatus.ATT_DL3_PATH);
  1624. HAL_GPIO_WritePin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin,bluecell_Currdatastatus.ATT_DL4_PATH);
  1625. HAL_GPIO_WritePin(PATH_EN_UL1_GPIO_Port,PATH_EN_UL1_Pin,bluecell_Currdatastatus.ATT_UL1_PATH);
  1626. HAL_GPIO_WritePin(PATH_EN_UL2_GPIO_Port,PATH_EN_UL2_Pin,bluecell_Currdatastatus.ATT_UL2_PATH);
  1627. HAL_GPIO_WritePin(PATH_EN_UL3_GPIO_Port,PATH_EN_UL3_Pin,bluecell_Currdatastatus.ATT_UL3_PATH);
  1628. HAL_GPIO_WritePin(PATH_EN_UL4_GPIO_Port,PATH_EN_UL4_Pin,bluecell_Currdatastatus.ATT_UL4_PATH);
  1629. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  1630. if(bluecell_Currdatastatus.Selftest1==0){
  1631. // printf("Selftest1 : 0 \r\n");
  1632. HAL_GPIO_WritePin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin,GPIO_PIN_RESET);//CLOCK
  1633. HAL_GPIO_WritePin(PATH_SW1_GPIO_Port,PATH_SW1_Pin,GPIO_PIN_SET);//CLOCK
  1634. }else{
  1635. // printf("Selftest1 : 1 \r\n");
  1636. HAL_GPIO_WritePin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin,GPIO_PIN_SET);//CLOCK
  1637. HAL_GPIO_WritePin(PATH_SW1_GPIO_Port,PATH_SW1_Pin,GPIO_PIN_RESET);//CLOCK
  1638. }
  1639. if(bluecell_Currdatastatus.Selftest2==0){
  1640. // printf("Selftest1 : 0 \r\n");
  1641. HAL_GPIO_WritePin(_PATH_SW2_GPIO_Port,_PATH_SW2_Pin,GPIO_PIN_RESET);//CLOCK
  1642. HAL_GPIO_WritePin(PATH_SW2_GPIO_Port,PATH_SW2_Pin,GPIO_PIN_SET);//CLOCK
  1643. }else{
  1644. // printf("Selftest2 : 1 \r\n");
  1645. HAL_GPIO_WritePin(_PATH_SW2_GPIO_Port,_PATH_SW2_Pin,GPIO_PIN_SET);//CLOCK
  1646. HAL_GPIO_WritePin(PATH_SW2_GPIO_Port,PATH_SW2_Pin,GPIO_PIN_RESET);//CLOCK
  1647. }
  1648. if(bluecell_Currdatastatus.Selftest3==0){
  1649. // printf("Selftest1 : 0 \r\n");
  1650. HAL_GPIO_WritePin(_PATH_SW3_GPIO_Port,_PATH_SW3_Pin,GPIO_PIN_RESET);//CLOCK
  1651. HAL_GPIO_WritePin(PATH_SW3_GPIO_Port,PATH_SW3_Pin,GPIO_PIN_SET);//CLOCK
  1652. }else{
  1653. // printf("Selftest3 : 1 \r\n");
  1654. HAL_GPIO_WritePin(_PATH_SW3_GPIO_Port,_PATH_SW3_Pin,GPIO_PIN_SET);//CLOCK
  1655. HAL_GPIO_WritePin(PATH_SW3_GPIO_Port,PATH_SW3_Pin,GPIO_PIN_RESET);//CLOCK
  1656. }
  1657. if(bluecell_Currdatastatus.Selftest4==0){
  1658. // printf("Selftest4 : 0 \r\n");
  1659. HAL_GPIO_WritePin(_PATH_SW4_GPIO_Port,_PATH_SW4_Pin,GPIO_PIN_RESET);//CLOCK
  1660. HAL_GPIO_WritePin(PATH_SW4_GPIO_Port,PATH_SW4_Pin,GPIO_PIN_SET);//CLOCK
  1661. }else{
  1662. // printf("Selftest4 : 1 \r\n");
  1663. HAL_GPIO_WritePin(_PATH_SW4_GPIO_Port,_PATH_SW4_Pin,GPIO_PIN_SET);//CLOCK
  1664. HAL_GPIO_WritePin(PATH_SW4_GPIO_Port,PATH_SW4_Pin,GPIO_PIN_RESET);//CLOCK
  1665. }
  1666. DataStatusSet();
  1667. }
  1668. //uint8_t ResultData[1024] = {0,};
  1669. uint8_t* MBIC_HeaderDataSetting(uint8_t* data){
  1670. static uint8_t ResultData[1024] = {0,}; /*NOT YET*/
  1671. return ResultData;
  1672. }
  1673. void ALARM_Value_Get(uint8_t datatype,uint8_t* ret){
  1674. switch(datatype){
  1675. }
  1676. }
  1677. #define MBIC_AID 0xE0
  1678. uint32_t MBIC_DataSend(uint8_t* data){
  1679. uint32_t i = 0;
  1680. uint32_t Length = 0;
  1681. /*ALARM BIT LIST*/
  1682. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1683. data[MBIC_PAYLOADSTART + i++] = Alarm_Bit_List;
  1684. Length += 10;
  1685. data[MBIC_PAYLOADSTART + i++] = 10; // LENGTH
  1686. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_MASK1;
  1687. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_MASK2;
  1688. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_MASK3;
  1689. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_MASK4;
  1690. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_MASK5;
  1691. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_TEMP_HIGH;
  1692. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_DLI_Level;
  1693. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN;
  1694. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_ULO_Level;
  1695. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN;
  1696. /*ALARM BIT MASK*/
  1697. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1698. data[MBIC_PAYLOADSTART + i++] = Alarm_Mask;
  1699. Length += 5;
  1700. data[MBIC_PAYLOADSTART + i++] = 5; // LENGTH
  1701. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_MASK1;
  1702. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_MASK2;
  1703. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_MASK3;
  1704. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_MASK4;
  1705. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_MASK5;
  1706. /*Alarm_Test_Mode*/
  1707. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1708. data[MBIC_PAYLOADSTART + i++] = Alarm_Test_Mode;
  1709. Length += 1;
  1710. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1711. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_TESTMODE;
  1712. /*Alarm_Test_Mode*/
  1713. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1714. data[MBIC_PAYLOADSTART + i++] = Alarm_Test_Dummy;
  1715. Length += 5;
  1716. data[MBIC_PAYLOADSTART + i++] = 5; // LENGTH
  1717. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_Test_Dummy1;
  1718. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_Test_Dummy2;
  1719. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_Test_Dummy3;
  1720. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_Test_Dummy4;
  1721. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ALARM_Test_Dummy5;
  1722. /*CPU_Version*/
  1723. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1724. data[MBIC_PAYLOADSTART + i++] = CPU_Version;
  1725. Length += 3;
  1726. data[MBIC_PAYLOADSTART + i++] = 3; // LENGTH
  1727. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPUVERSION1 = 0x00;
  1728. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPUVERSION2 = 0x00;
  1729. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPUVERSION3 = 0x01;
  1730. /*CPU_Current_Bank*/
  1731. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1732. data[MBIC_PAYLOADSTART + i++] = CPU_Current_Bank;
  1733. Length += 1;
  1734. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1735. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Current_Bank;
  1736. /*CPU_Bank1_Image_Version*/
  1737. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1738. data[MBIC_PAYLOADSTART + i++] = CPU_Bank1_Image_Version;
  1739. data[MBIC_PAYLOADSTART + i++] = 3; // LENGTH
  1740. Length += 3;
  1741. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank1_Image_Version1;
  1742. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank1_Image_Version2;
  1743. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank1_Image_Version3;
  1744. /*CPU_Bank1_Image_BuildTime*/
  1745. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1746. data[MBIC_PAYLOADSTART + i++] = CPU_Bank1_Image_BuildTime;
  1747. data[MBIC_PAYLOADSTART + i++] = 6; // LENGTH
  1748. Length += 6;
  1749. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime1;
  1750. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime2;
  1751. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime3;
  1752. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime4;
  1753. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime5;
  1754. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime6;
  1755. /*CPU_Bank1_Image_Name*/
  1756. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1757. data[MBIC_PAYLOADSTART + i++] = CPU_Bank1_Image_Name;
  1758. data[MBIC_PAYLOADSTART + i++] = 32; // LENGTH
  1759. Length += 32;
  1760. for(int a = 0; a < 32; a++){
  1761. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank1_Image_Name[a];
  1762. }
  1763. /*CPU_Bank2_Image_Version*/
  1764. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1765. data[MBIC_PAYLOADSTART + i++] = CPU_Bank2_Image_Version;
  1766. data[MBIC_PAYLOADSTART + i++] = 3; // LENGTH
  1767. Length += 3;
  1768. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank2_Image_Version1;
  1769. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank2_Image_Version2;
  1770. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank2_Image_Version3;
  1771. /*CPU_Bank2_Image_BuildTime*/
  1772. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1773. data[MBIC_PAYLOADSTART + i++] = CPU_Bank2_Image_BuildTime;
  1774. data[MBIC_PAYLOADSTART + i++] = 6; // LENGTH
  1775. Length += 6;
  1776. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime1;
  1777. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime2;
  1778. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime3;
  1779. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime4;
  1780. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime5;
  1781. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime6;
  1782. /*CPU_Bank2_Image_Name*/
  1783. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1784. data[MBIC_PAYLOADSTART + i++] = CPU_Bank2_Image_Name;
  1785. data[MBIC_PAYLOADSTART + i++] = 32; // LENGTH
  1786. Length += 32;
  1787. for(int a = 0; a < 32; a++){
  1788. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.CPU_Bank2_Image_Name[a];
  1789. }
  1790. /*Temperature*/
  1791. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1792. data[MBIC_PAYLOADSTART + i++] = Temperature;
  1793. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1794. Length += 1;
  1795. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DET_TEMP;
  1796. /*Temperature_Offset*/
  1797. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1798. data[MBIC_PAYLOADSTART + i++] = Temperature_Offset;
  1799. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1800. Length += 1 ;
  1801. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_TEMP_OFFSET;
  1802. /*Temperature_Offset*/
  1803. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1804. data[MBIC_PAYLOADSTART + i++] = Temp_High_Threshold;
  1805. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1806. Length += 1;
  1807. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.Temp_High_Threshold;
  1808. /*Node*/
  1809. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1810. data[MBIC_PAYLOADSTART + i++] = Node;
  1811. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1812. Length += 1;
  1813. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.NODE;
  1814. /*Type*/
  1815. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1816. data[MBIC_PAYLOADSTART + i++] = Type;
  1817. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1818. Length += 1;
  1819. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.Type;
  1820. /*PCB_Version*/
  1821. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1822. data[MBIC_PAYLOADSTART + i++] = PCB_Version;
  1823. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1824. Length += 2;
  1825. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.PCB_Version[0];
  1826. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.PCB_Version[1];
  1827. /*Serial_Number*/
  1828. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1829. data[MBIC_PAYLOADSTART + i++] = Serial_Number;
  1830. data[MBIC_PAYLOADSTART + i++] = 20; // LENGTH
  1831. Length += 20 ;
  1832. for(int a = 0; a < 20; a++){
  1833. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.Serial_Number[a];
  1834. }
  1835. /*Manufacture*/
  1836. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1837. data[MBIC_PAYLOADSTART + i++] = Manufacture;
  1838. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1839. Length += 1 ;
  1840. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.Manufacture;
  1841. /*Manufacture_Date*/
  1842. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1843. data[MBIC_PAYLOADSTART + i++] = Manufacture_Date;
  1844. data[MBIC_PAYLOADSTART + i++] = 3; // LENGTH
  1845. Length += 3 ;
  1846. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.Manufacture_Date[0];
  1847. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.Manufacture_Date[1];
  1848. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.Manufacture_Date[2];
  1849. /*Freq_ID*/
  1850. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1851. data[MBIC_PAYLOADSTART + i++] = Freq_ID;
  1852. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1853. Length += 1 ;
  1854. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.Freq_ID;
  1855. /*Carrier_ID*/
  1856. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1857. data[MBIC_PAYLOADSTART + i++] = Carrier_ID;
  1858. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1859. Length += 1 ;
  1860. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.Carrier_ID;
  1861. /*Carrier_ID*/
  1862. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1863. data[MBIC_PAYLOADSTART + i++] = Carrier_ON_OFF;
  1864. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1865. Length += 1 ;
  1866. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.Carrier_ON_OFF;
  1867. /*DLI_P1_Level*/
  1868. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1869. data[MBIC_PAYLOADSTART + i++] = DLI_P1_Level;
  1870. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1871. Length += 2 ;
  1872. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_P1_Level1_H;
  1873. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_P1_Level1_L;
  1874. /*DLI_P2_Level*/
  1875. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1876. data[MBIC_PAYLOADSTART + i++] = DLI_P2_Level;
  1877. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1878. Length += 2 ;
  1879. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_P2_Level2_H;
  1880. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_P2_Level2_L;
  1881. /*DLI_P3_Level*/
  1882. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1883. data[MBIC_PAYLOADSTART + i++] = DLI_P3_Level;
  1884. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1885. Length += 2 ;
  1886. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_P3_Level3_H;
  1887. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_P3_Level3_L;
  1888. /*DLI_P4_Level*/
  1889. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1890. data[MBIC_PAYLOADSTART + i++] = DLI_P4_Level;
  1891. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1892. Length += 2 ;
  1893. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_P4_Level4_H;
  1894. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_P4_Level4_L;
  1895. /*ULO_P1_Level*/
  1896. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1897. data[MBIC_PAYLOADSTART + i++] = ULO_P1_Level;
  1898. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1899. Length += 2 ;
  1900. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_P1_Level1_H;
  1901. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_P1_Level1_L;
  1902. /*ULO_P2_Level*/
  1903. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1904. data[MBIC_PAYLOADSTART + i++] = ULO_P2_Level;
  1905. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1906. Length += 2 ;
  1907. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_P2_Level2_H;
  1908. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_P2_Level2_L;
  1909. /*ULO_P3_Level*/
  1910. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1911. data[MBIC_PAYLOADSTART + i++] = ULO_P3_Level;
  1912. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1913. Length += 2 ;
  1914. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_P3_Level3_H;
  1915. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_P3_Level3_L;
  1916. /*ULO_P4_Level*/
  1917. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1918. data[MBIC_PAYLOADSTART + i++] = ULO_P4_Level;
  1919. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1920. Length += 2 ;
  1921. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_P4_Level4_H;
  1922. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_P4_Level4_L;
  1923. /*DLI_RF_Path1_ON_OFF*/
  1924. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1925. printf("data[%d]:%x\r\n",MBIC_PAYLOADSTART + i-1,data[MBIC_PAYLOADSTART + i-1]);
  1926. data[MBIC_PAYLOADSTART + i++] = DLI_RF_Path1_ON_OFF;
  1927. printf("data[%d]:%x\r\n",MBIC_PAYLOADSTART + i-1,data[MBIC_PAYLOADSTART + i-1]);
  1928. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1929. Length += 1 ;
  1930. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL1_PATH;
  1931. printf("data[%d]:%x\r\n",MBIC_PAYLOADSTART + i-1,data[MBIC_PAYLOADSTART + i-1]);
  1932. // printf("bluecell_Currdatastatus.ATT_DL1_PATH : %d\r\n",bluecell_Currdatastatus.ATT_DL1_PATH);
  1933. /*DLI_RF_Path2_ON_OFF*/
  1934. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1935. data[MBIC_PAYLOADSTART + i++] = DLI_RF_Path2_ON_OFF;
  1936. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1937. Length += 1 ;
  1938. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL2_PATH;
  1939. /*DLI_RF_Path3_ON_OFF*/
  1940. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1941. data[MBIC_PAYLOADSTART + i++] = DLI_RF_Path3_ON_OFF;
  1942. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1943. Length += 1 ;
  1944. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL3_PATH;
  1945. /*DLI_RF_Path4_ON_OFF*/
  1946. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1947. data[MBIC_PAYLOADSTART + i++] = DLI_RF_Path4_ON_OFF;
  1948. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  1949. Length += 1 ;
  1950. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL4_PATH;
  1951. /*DLI_Gain_Atten1*/
  1952. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1953. data[MBIC_PAYLOADSTART + i++] = DLI_Gain_Atten1;
  1954. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1955. Length += 2 ;
  1956. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL1_H;
  1957. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL1_L;
  1958. /*DLI_Gain_Atten2*/
  1959. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1960. data[MBIC_PAYLOADSTART + i++] = DLI_Gain_Atten2;
  1961. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1962. Length += 2 ;
  1963. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL2_H;
  1964. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL2_L;
  1965. /*DLI_Gain_Atten3*/
  1966. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1967. data[MBIC_PAYLOADSTART + i++] = DLI_Gain_Atten3;
  1968. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1969. Length += 2 ;
  1970. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL3_H;
  1971. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL3_L;
  1972. /*DLI_Gain_Atten4*/
  1973. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1974. data[MBIC_PAYLOADSTART + i++] = DLI_Gain_Atten4;
  1975. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1976. Length += 2 ;
  1977. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL4_H;
  1978. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_DL4_L;
  1979. /*DLI_Gain_Atten_Offset1*/
  1980. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1981. data[MBIC_PAYLOADSTART + i++] = DLI_Gain_Atten_Offset1;
  1982. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1983. Length += 2;
  1984. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_DL1_H;
  1985. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_DL1_L;
  1986. /*DLI_Gain_Atten_Offset2*/
  1987. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1988. data[MBIC_PAYLOADSTART + i++] = DLI_Gain_Atten_Offset2;
  1989. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1990. Length += 2 ;
  1991. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_DL2_H;
  1992. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_DL2_L;
  1993. /*DLI_Gain_Atten_Offset3*/
  1994. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  1995. data[MBIC_PAYLOADSTART + i++] = DLI_Gain_Atten_Offset3;
  1996. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  1997. Length += 2 ;
  1998. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_DL3_H;
  1999. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_DL3_L;
  2000. /*DLI_Gain_Atten_Offset4*/
  2001. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2002. data[MBIC_PAYLOADSTART + i++] = DLI_Gain_Atten_Offset4;
  2003. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2004. Length += 2 ;
  2005. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_DL4_H;
  2006. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_DL4_L;
  2007. /*DLI_Level_High_Threshold*/
  2008. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2009. data[MBIC_PAYLOADSTART + i++] = DLI_Level_High_Threshold;
  2010. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2011. Length += 2 ;
  2012. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level_High_Threshold_H;
  2013. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level_High_Threshold_L;
  2014. /*DLI_Level_Low_Threshold*/
  2015. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2016. data[MBIC_PAYLOADSTART + i++] = DLI_Level_Low_Threshold;
  2017. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2018. Length += 2 ;
  2019. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level_Low_Threshold_H;
  2020. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level_Low_Threshold_L;
  2021. /*DLI_Level*/
  2022. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2023. data[MBIC_PAYLOADSTART + i++] = DLI_Level;
  2024. data[MBIC_PAYLOADSTART + i++] = 8; // LENGTH
  2025. Length += 8 ;
  2026. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level1_H;
  2027. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level1_L;
  2028. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level2_H;
  2029. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level2_L;
  2030. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level3_H;
  2031. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level3_L;
  2032. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level4_H;
  2033. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Level4_L;
  2034. /*DLI_FRBT_Atten*/
  2035. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2036. data[MBIC_PAYLOADSTART + i++] = DLI_FRBT_Atten;
  2037. data[MBIC_PAYLOADSTART + i++] = 8; // LENGTH
  2038. Length += 8 ;
  2039. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_FRBT_Atten1_H;
  2040. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_FRBT_Atten1_L;
  2041. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_FRBT_Atten2_H;
  2042. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_FRBT_Atten2_L;
  2043. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_FRBT_Atten3_H;
  2044. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_FRBT_Atten3_L;
  2045. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_FRBT_Atten4_H;
  2046. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_FRBT_Atten4_L;
  2047. /*DLI_FRBT_D_Day*/
  2048. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2049. data[MBIC_PAYLOADSTART + i++] = DLI_FRBT_D_Day;
  2050. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  2051. Length += 1 ;
  2052. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_FRBT_D_Day;
  2053. /*DLI_FRBT_Status*/
  2054. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2055. data[MBIC_PAYLOADSTART + i++] = DLI_FRBT_Status;
  2056. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  2057. Length += 1 ;
  2058. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_FRBT_Status;
  2059. /*DLI_AGC_ON_OFF*/
  2060. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2061. data[MBIC_PAYLOADSTART + i++] = DLI_AGC_ON_OFF;
  2062. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  2063. Length += 1 ;
  2064. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_AGC_ON_OFF;
  2065. /*DLI_AGC_Threshold*/
  2066. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2067. data[MBIC_PAYLOADSTART + i++] = DLI_AGC_Threshold;
  2068. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2069. Length += 2 ;
  2070. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_AGC_Threshold_H;
  2071. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_AGC_Threshold_L;
  2072. /*DLI_Shutdown_ON_OFF*/
  2073. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2074. data[MBIC_PAYLOADSTART + i++] = DLI_Shutdown_ON_OFF;
  2075. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  2076. Length += 1 ;
  2077. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Shutdown_ON_OFF;
  2078. /*DLI_Shutdown_ON_OFF*/
  2079. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2080. data[MBIC_PAYLOADSTART + i++] = DLI_Shutdown_Threshold;
  2081. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2082. Length += 2 ;
  2083. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Shutdown_Threshold_H;
  2084. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Shutdown_Threshold_L;
  2085. /*DLI_Shutdown_Count*/
  2086. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2087. data[MBIC_PAYLOADSTART + i++] = DLI_Shutdown_Count;
  2088. data[MBIC_PAYLOADSTART + i++] = 4; // LENGTH
  2089. Length += 4 ;
  2090. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Shutdown_Retry_Count1;
  2091. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Shutdown_Retry_Count2;
  2092. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Shutdown_Retry_Count3;
  2093. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.DLI_Shutdown_Retry_Count4;
  2094. /*ULO_RF_Path1_ON_OFF*/
  2095. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2096. data[MBIC_PAYLOADSTART + i++] = ULO_RF_Path1_ON_OFF;
  2097. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  2098. Length += 1 ;
  2099. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL1_PATH;
  2100. /*ULO_RF_Path3_ON_OFF*/
  2101. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2102. data[MBIC_PAYLOADSTART + i++] = ULO_RF_Path2_ON_OFF;
  2103. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  2104. Length += 1 ;
  2105. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL2_PATH;
  2106. /*ULO_RF_Path3_ON_OFF*/
  2107. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2108. data[MBIC_PAYLOADSTART + i++] = ULO_RF_Path3_ON_OFF;
  2109. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  2110. Length += 1 ;
  2111. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL3_PATH;
  2112. /*ULO_RF_Path4_ON_OFF*/
  2113. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2114. data[MBIC_PAYLOADSTART + i++] = ULO_RF_Path4_ON_OFF;
  2115. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  2116. Length += 1 ;
  2117. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL4_PATH;
  2118. /*ULO_Gain_Atten1*/
  2119. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2120. data[MBIC_PAYLOADSTART + i++] = ULO_Gain_Atten1;
  2121. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2122. Length += 2 ;
  2123. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL1_H;
  2124. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL1_L;
  2125. /*ULO_Gain_Atten2*/
  2126. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2127. data[MBIC_PAYLOADSTART + i++] = ULO_Gain_Atten2;
  2128. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2129. Length += 2 ;
  2130. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL2_H;
  2131. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL2_L;
  2132. /*ULO_Gain_Atten3*/
  2133. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2134. data[MBIC_PAYLOADSTART + i++] = ULO_Gain_Atten3;
  2135. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2136. Length += 2 ;
  2137. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL3_H;
  2138. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL3_L;
  2139. /*ULO_Gain_Atten4*/
  2140. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2141. data[MBIC_PAYLOADSTART + i++] = ULO_Gain_Atten4;
  2142. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2143. Length += 2 ;
  2144. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL4_H;
  2145. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ATT_UL4_L;
  2146. /*ULO_Gain_Atten_Offset1*/
  2147. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2148. data[MBIC_PAYLOADSTART + i++] = ULO_Gain_Atten_Offset1;
  2149. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2150. Length += 2 ;
  2151. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_UL1_H;
  2152. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_UL1_L;
  2153. /*ULO_Gain_Atten_Offset2*/
  2154. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2155. data[MBIC_PAYLOADSTART + i++] = ULO_Gain_Atten_Offset2;
  2156. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2157. Length += 2 ;
  2158. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_UL2_H;
  2159. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_UL2_L;
  2160. /*ULO_Gain_Atten_Offset3*/
  2161. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2162. data[MBIC_PAYLOADSTART + i++] = ULO_Gain_Atten_Offset3;
  2163. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2164. Length += 2 ;
  2165. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_UL3_H;
  2166. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_UL3_L;
  2167. /*ULO_Gain_Atten_Offset4*/
  2168. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2169. data[MBIC_PAYLOADSTART + i++] = ULO_Gain_Atten_Offset4;
  2170. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2171. Length += 2 ;
  2172. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_UL4_H;
  2173. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.bluecell_User_UL4_L;
  2174. /*ULO_Level_High_Threshold*/
  2175. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2176. data[MBIC_PAYLOADSTART + i++] = ULO_Level_High_Threshold;
  2177. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2178. Length += 2 ;
  2179. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Level_High_Threshold_H;
  2180. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Level_High_Threshold_L;
  2181. /*ULO_Level*/
  2182. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2183. data[MBIC_PAYLOADSTART + i++] = ULO_Level;
  2184. data[MBIC_PAYLOADSTART + i++] = 8; // LENGTH
  2185. Length += 8 ;
  2186. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Level1_H;
  2187. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Level1_L;
  2188. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Level2_H;
  2189. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Level2_L;
  2190. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Level3_H;
  2191. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Level3_L;
  2192. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Level4_H;
  2193. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Level4_L;
  2194. /*ULO_ALC_ON_OFF*/
  2195. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2196. data[MBIC_PAYLOADSTART + i++] = ULO_ALC_ON_OFF;
  2197. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  2198. Length += 1 ;
  2199. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_ALC_ON_OFF;
  2200. /*ULO_ALC_Threshold*/
  2201. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2202. data[MBIC_PAYLOADSTART + i++] = ULO_ALC_Threshold;
  2203. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2204. Length += 2 ;
  2205. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_ALC_Threshold_H;
  2206. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_ALC_Threshold_L;
  2207. /*ULO_ALC_Threshold*/
  2208. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2209. data[MBIC_PAYLOADSTART + i++] = ULO_Shutdown_ON_OFF;
  2210. data[MBIC_PAYLOADSTART + i++] = 1; // LENGTH
  2211. Length += 1;
  2212. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Shutdown_ON_OFF;
  2213. /*ULO_ALC_Threshold*/
  2214. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2215. data[MBIC_PAYLOADSTART + i++] = ULO_Shutdown_Threshold;
  2216. data[MBIC_PAYLOADSTART + i++] = 2; // LENGTH
  2217. Length += 2;
  2218. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Shutdown_Threshold_H;
  2219. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Shutdown_Threshold_L;
  2220. /*ULO_Shutdown_Threshold*/
  2221. data[MBIC_PAYLOADSTART + i++] = MBIC_AID;
  2222. data[MBIC_PAYLOADSTART + i++] = ULO_Shutdown_Retry_Count;
  2223. data[MBIC_PAYLOADSTART + i++] = 4; // LENGTH
  2224. Length += 4;
  2225. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Shutdown_Retry_Count1;
  2226. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Shutdown_Retry_Count2;
  2227. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Shutdown_Retry_Count3;
  2228. data[MBIC_PAYLOADSTART + i++] = bluecell_Currdatastatus.ULO_Shutdown_Retry_Count4;
  2229. data[MBIC_LENGTH_0] = (((Length + (3 * 74)) & 0xFF00) >> 8);
  2230. data[MBIC_LENGTH_1] = ((Length + (3 * 74)) & 0x00FF);
  2231. data[MBIC_HEADERCHECKSUM_0] = Chksum_Create(data);
  2232. data[MBIC_PAYLOADSTART + i++] = ((CRC16_Generate(&data[MBIC_PAYLOADSTART], (Length + (3 * 74))) & 0xFF00) >> 8);
  2233. data[MBIC_PAYLOADSTART + i++] = CRC16_Generate(&data[MBIC_PAYLOADSTART], (Length + (3 * 74))) & 0x00FF;
  2234. data[MBIC_PAYLOADSTART + i++] = 0x03;
  2235. Uart1_Data_Send(data, (Length + (3 * 74)) + 22 + 3);
  2236. return Length;
  2237. }
  2238. bool MBIC_Operate(uint8_t* data){
  2239. uint8_t datatype = data[MBIC_PAYLOADSTART + 1];
  2240. // uint8_t Length = (data[MBIC_PROT_SUB_DATA_INDEX + 2]);
  2241. uint8_t cmd = data[MBIC_PROT_CMD_INDEX];
  2242. uint16_t Temp_ADC = 0;
  2243. uint16_t i = 0;
  2244. double temp = 0;
  2245. int16_t Level = 0;
  2246. uint16_t Length = data[MBIC_LENGTH_0] << 8 | data[MBIC_LENGTH_1];
  2247. uint8_t* Tempdata;
  2248. uint16_t occurlen = Length;
  2249. /*AID*/
  2250. /* for(int i = 0; i < Length; i++){
  2251. SubData[i] = (data[MBIC_PROT_SUB_DATA_INDEX + 3 + i]);
  2252. }*/
  2253. // SubData 임시 데이터 변수 선언 Subdata로 데이터 전송
  2254. data[MBIC_PREAMBLE_0] = MBIC_PREAMBLE0;
  2255. data[MBIC_PREAMBLE_1] = MBIC_PREAMBLE1;
  2256. data[MBIC_PREAMBLE_2] = MBIC_PREAMBLE2;
  2257. data[MBIC_PREAMBLE_3] = MBIC_PREAMBLE3;
  2258. data[MBIC_SUBUID_0] = MBIC_SUBUID0;
  2259. data[MBIC_SUBUID_1] = MBIC_SUBUID1;
  2260. data[MBIC_RCODE_0] = data[MBIC_RCODE_0];
  2261. data[MBIC_TRID_0] = data[MBIC_TRID_0];
  2262. data[MBIC_TRID_1] = data[MBIC_TRID_1];
  2263. data[MBIC_SEQSUM_0] = data[MBIC_SEQSUM_0];
  2264. data[MBIC_TTL_0] = data[MBIC_TTL_0];
  2265. data[MBIC_TIME_0] = data[MBIC_TIME_0];
  2266. data[MBIC_TIME_1] = data[MBIC_TIME_1];
  2267. data[MBIC_TIME_2] = data[MBIC_TIME_2];
  2268. data[MBIC_TIME_3] = data[MBIC_TIME_3];
  2269. data[MBIC_TIME_4] = data[MBIC_TIME_4];
  2270. data[MBIC_TIME_5] = data[MBIC_TIME_5];
  2271. data[MBIC_ERRRESPONSE_0] = MBIC_ERRRESPONSE;
  2272. if(cmd == MBIC_GET){
  2273. data[MBIC_CMD_0] = 0x80;//MBIC_ERRRESPONSE;
  2274. Length = MBIC_DataSend(data);
  2275. }
  2276. else if(cmd == MBIC_SET){
  2277. protocolReplay:
  2278. datatype = data[MBIC_PAYLOADSTART + 1];
  2279. switch(datatype){
  2280. case Alarm_Mask :
  2281. bluecell_Currdatastatus.ALARM_MASK1 = data[MBIC_PAYLOADSTART + 3];
  2282. bluecell_Currdatastatus.ALARM_MASK2 = data[MBIC_PAYLOADSTART + 4];
  2283. bluecell_Currdatastatus.ALARM_MASK3 = data[MBIC_PAYLOADSTART + 5];
  2284. bluecell_Currdatastatus.ALARM_MASK4 = data[MBIC_PAYLOADSTART + 6];
  2285. bluecell_Currdatastatus.ALARM_MASK5 = data[MBIC_PAYLOADSTART + 7];
  2286. break;
  2287. case Alarm_Test_Mode :
  2288. bluecell_Currdatastatus.ALARM_TESTMODE = data[MBIC_PAYLOADSTART + 3];
  2289. break;
  2290. case Alarm_Test_Dummy :
  2291. bluecell_Currdatastatus.ALARM_Test_Dummy1 = data[MBIC_PAYLOADSTART + 3];
  2292. bluecell_Currdatastatus.ALARM_Test_Dummy2 = data[MBIC_PAYLOADSTART + 4];
  2293. bluecell_Currdatastatus.ALARM_Test_Dummy3 = data[MBIC_PAYLOADSTART + 5];
  2294. bluecell_Currdatastatus.ALARM_Test_Dummy4 = data[MBIC_PAYLOADSTART + 6];
  2295. bluecell_Currdatastatus.ALARM_Test_Dummy5 = data[MBIC_PAYLOADSTART + 7];
  2296. break;
  2297. case CPU_Bank_Select_Reboot_by :
  2298. bluecell_Currdatastatus.CPU_Bank_Select = data[MBIC_PAYLOADSTART + 3];
  2299. break;
  2300. case SW_Reset :
  2301. bluecell_Currdatastatus.S_W_Reset = data[MBIC_PAYLOADSTART + 3];
  2302. break;
  2303. case Factory_Set_Initialization :
  2304. bluecell_Currdatastatus.Factory_Set_Initialization = data[MBIC_PAYLOADSTART + 3];
  2305. break;
  2306. case Temperature_Offset :
  2307. bluecell_Currdatastatus.bluecell_User_TEMP_OFFSET = data[MBIC_PAYLOADSTART + 3];
  2308. break;
  2309. case Temp_High_Threshold :
  2310. bluecell_Currdatastatus.Temp_High_Threshold = data[MBIC_PAYLOADSTART + 3];
  2311. break;
  2312. case Temp_High_Threshold_Default :
  2313. bluecell_Currdatastatus.Temp_High_Threshold_Default = data[MBIC_PAYLOADSTART + 3];
  2314. break;
  2315. case LED_TEST :
  2316. bluecell_Currdatastatus.LED_TEST = data[MBIC_PAYLOADSTART + 3];
  2317. break;
  2318. case PCB_Version :
  2319. break;
  2320. case Serial_Number :
  2321. break;
  2322. case Manufacture_Date :
  2323. break;
  2324. case ENVIRONMENT_INVENTORY_NULL0 :
  2325. break;
  2326. case Carrier_ON_OFF :
  2327. break;
  2328. case DLI_RF_Path1_ON_OFF :
  2329. bluecell_Currdatastatus.ATT_DL1_PATH = data[MBIC_PAYLOADSTART + 3];
  2330. if(data[MBIC_PAYLOADSTART + 3]==0){
  2331. HAL_GPIO_WritePin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin,GPIO_PIN_RESET);//CLOCK
  2332. }
  2333. else{
  2334. bluecell_Prevdatastatus.ATT_DL1_H = ~bluecell_Prevdatastatus.ATT_DL1_H;
  2335. bluecell_Prevdatastatus.ATT_DL1_L = ~bluecell_Prevdatastatus.ATT_DL1_L;
  2336. HAL_GPIO_WritePin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin,GPIO_PIN_SET);//CLOCK
  2337. }
  2338. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2339. break;
  2340. case DLI_RF_Path2_ON_OFF :
  2341. bluecell_Currdatastatus.ATT_DL2_PATH = data[MBIC_PAYLOADSTART + 3];
  2342. if(data[MBIC_PAYLOADSTART + 3]==0){
  2343. HAL_GPIO_WritePin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin,GPIO_PIN_RESET);//CLOCK
  2344. }
  2345. else{
  2346. bluecell_Prevdatastatus.ATT_DL2_H = ~bluecell_Prevdatastatus.ATT_DL2_H;
  2347. bluecell_Prevdatastatus.ATT_DL2_L = ~bluecell_Prevdatastatus.ATT_DL2_L;
  2348. HAL_GPIO_WritePin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin,GPIO_PIN_SET);//CLOCK
  2349. }
  2350. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2351. break;
  2352. case DLI_RF_Path3_ON_OFF :
  2353. bluecell_Currdatastatus.ATT_DL3_PATH = data[MBIC_PAYLOADSTART + 3];
  2354. if(data[MBIC_PAYLOADSTART + 3]==0){
  2355. HAL_GPIO_WritePin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin,GPIO_PIN_RESET);//CLOCK
  2356. }
  2357. else{
  2358. bluecell_Prevdatastatus.ATT_DL3_H = ~bluecell_Prevdatastatus.ATT_DL3_H;
  2359. bluecell_Prevdatastatus.ATT_DL3_L = ~bluecell_Prevdatastatus.ATT_DL3_L;
  2360. HAL_GPIO_WritePin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin,GPIO_PIN_SET);//CLOCK
  2361. }
  2362. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2363. break;
  2364. case DLI_RF_Path4_ON_OFF :
  2365. bluecell_Currdatastatus.ATT_DL4_PATH = data[MBIC_PAYLOADSTART + 3];
  2366. if(data[MBIC_PAYLOADSTART + 3]==0){
  2367. HAL_GPIO_WritePin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin,GPIO_PIN_RESET);//CLOCK
  2368. }
  2369. else{
  2370. bluecell_Prevdatastatus.ATT_DL4_H = ~bluecell_Prevdatastatus.ATT_DL4_H;
  2371. bluecell_Prevdatastatus.ATT_DL4_L = ~bluecell_Prevdatastatus.ATT_DL4_L;
  2372. HAL_GPIO_WritePin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin,GPIO_PIN_SET);//CLOCK
  2373. }
  2374. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2375. break;
  2376. case DLI_Gain_Atten1 :
  2377. bluecell_Currdatastatus.ATT_DL1_H = data[MBIC_PAYLOADSTART + 3];
  2378. bluecell_Currdatastatus.ATT_DL1_L = data[MBIC_PAYLOADSTART + 4];
  2379. printf("bluecell_Currdatastatus.ATT_DL1_H : %x\r\n",bluecell_Currdatastatus.ATT_DL1_H);
  2380. printf("bluecell_Currdatastatus.ATT_DL1_L : %x\r\n",bluecell_Currdatastatus.ATT_DL1_L);
  2381. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2382. break;
  2383. case DLI_Gain_Atten2 :
  2384. bluecell_Currdatastatus.ATT_DL2_H = data[MBIC_PAYLOADSTART + 3];
  2385. bluecell_Currdatastatus.ATT_DL2_L = data[MBIC_PAYLOADSTART + 4];
  2386. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2387. printf("bluecell_Currdatastatus.ATT_DL2_H : %x\r\n",bluecell_Currdatastatus.ATT_DL2_H);
  2388. printf("bluecell_Currdatastatus.ATT_DL2_L : %x\r\n",bluecell_Currdatastatus.ATT_DL2_L);
  2389. break;
  2390. case DLI_Gain_Atten3 :
  2391. bluecell_Currdatastatus.ATT_DL3_H = data[MBIC_PAYLOADSTART + 3];
  2392. bluecell_Currdatastatus.ATT_DL3_L = data[MBIC_PAYLOADSTART + 4];
  2393. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2394. break;
  2395. case DLI_Gain_Atten4 :
  2396. bluecell_Currdatastatus.ATT_DL4_H = data[MBIC_PAYLOADSTART + 3];
  2397. bluecell_Currdatastatus.ATT_DL4_L = data[MBIC_PAYLOADSTART + 4];
  2398. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2399. break;
  2400. case DLI_Gain_Atten_Offset1 :
  2401. bluecell_Currdatastatus.bluecell_User_DL1_H = data[MBIC_PAYLOADSTART + 3];
  2402. bluecell_Currdatastatus.bluecell_User_DL1_L = data[MBIC_PAYLOADSTART + 4];
  2403. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2404. break;
  2405. case DLI_Gain_Atten_Offset2 :
  2406. bluecell_Currdatastatus.bluecell_User_DL2_H = data[MBIC_PAYLOADSTART + 3];
  2407. bluecell_Currdatastatus.bluecell_User_DL2_L = data[MBIC_PAYLOADSTART + 4];
  2408. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2409. break;
  2410. case DLI_Gain_Atten_Offset3 :
  2411. bluecell_Currdatastatus.bluecell_User_DL3_H = data[MBIC_PAYLOADSTART + 3];
  2412. bluecell_Currdatastatus.bluecell_User_DL3_L = data[MBIC_PAYLOADSTART + 4];
  2413. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2414. break;
  2415. case DLI_Gain_Atten_Offset4 :
  2416. bluecell_Currdatastatus.bluecell_User_DL4_H = data[MBIC_PAYLOADSTART + 3];
  2417. bluecell_Currdatastatus.bluecell_User_DL4_L = data[MBIC_PAYLOADSTART + 4];
  2418. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2419. break;
  2420. case DLI_Level_High_Threshold :
  2421. bluecell_Currdatastatus.DLI_Level_High_Threshold_H = data[MBIC_PAYLOADSTART + 3];
  2422. bluecell_Currdatastatus.DLI_Level_High_Threshold_L = data[MBIC_PAYLOADSTART + 4];
  2423. break;
  2424. case DLI_Level_Low_Threshold :
  2425. bluecell_Currdatastatus.DLI_Level_Low_Threshold_H = data[MBIC_PAYLOADSTART + 3];
  2426. bluecell_Currdatastatus.DLI_Level_Low_Threshold_L = data[MBIC_PAYLOADSTART + 4];
  2427. break;
  2428. case DLI_Level_High_Low_Threshold_default :
  2429. bluecell_Currdatastatus.DLI_Level_High_Low_Threshold_default = data[MBIC_PAYLOADSTART + 3];
  2430. break;
  2431. case DLI_FRBT_D_Day:
  2432. bluecell_Currdatastatus.DLI_FRBT_D_Day = data[MBIC_PAYLOADSTART + 3];
  2433. break;
  2434. case DLI_AGC_ON_OFF :
  2435. /*AGC multi apply*/
  2436. bluecell_Currdatastatus.DLI_AGC_ON_OFF = data[MBIC_PAYLOADSTART + 3];
  2437. break;
  2438. case DLI_AGC_Threshold :
  2439. bluecell_Currdatastatus.DLI_AGC_Threshold_H = data[MBIC_PAYLOADSTART + 3];
  2440. bluecell_Currdatastatus.DLI_AGC_Threshold_L = data[MBIC_PAYLOADSTART + 4];
  2441. break;
  2442. case DLI_AGC_Threshold_Default :
  2443. bluecell_Currdatastatus.DLI_AGC_Threshold_default = data[MBIC_PAYLOADSTART + 3];
  2444. break;
  2445. case DLI_Shutdown_ON_OFF :
  2446. bluecell_Currdatastatus.DLI_Shutdown_ON_OFF = data[MBIC_PAYLOADSTART + 3];
  2447. break;
  2448. case DLI_Shutdown_Threshold :
  2449. bluecell_Currdatastatus.DLI_Shutdown_Threshold_H = data[MBIC_PAYLOADSTART + 3];
  2450. bluecell_Currdatastatus.DLI_Shutdown_Threshold_L = data[MBIC_PAYLOADSTART + 4];
  2451. break;
  2452. case DLI_Shutdown_Threshold_Default :
  2453. bluecell_Currdatastatus.DLI_Shutdown_Threshold_Default = data[MBIC_PAYLOADSTART + 3];
  2454. break;
  2455. case ULO_RF_Path1_ON_OFF :
  2456. bluecell_Currdatastatus.ATT_UL1_PATH = data[MBIC_PAYLOADSTART + 3];
  2457. if(data[MBIC_PAYLOADSTART + 3]==0){
  2458. HAL_GPIO_WritePin(PATH_EN_UL1_GPIO_Port,PATH_EN_UL1_Pin,GPIO_PIN_RESET);//CLOCK
  2459. }
  2460. else{
  2461. bluecell_Prevdatastatus.ATT_UL1_H = ~bluecell_Prevdatastatus.ATT_UL1_H;
  2462. bluecell_Prevdatastatus.ATT_UL1_L = ~bluecell_Prevdatastatus.ATT_UL1_L;
  2463. HAL_GPIO_WritePin(PATH_EN_UL1_GPIO_Port,PATH_EN_UL1_Pin,GPIO_PIN_SET);//CLOCK
  2464. }
  2465. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2466. break;
  2467. case ULO_RF_Path2_ON_OFF :
  2468. bluecell_Currdatastatus.ATT_UL2_PATH = data[MBIC_PAYLOADSTART + 3];
  2469. if(data[MBIC_PAYLOADSTART + 3]==0){
  2470. HAL_GPIO_WritePin(PATH_EN_UL2_GPIO_Port,PATH_EN_UL2_Pin,GPIO_PIN_RESET);//CLOCK
  2471. }
  2472. else{
  2473. bluecell_Prevdatastatus.ATT_UL2_H = ~bluecell_Prevdatastatus.ATT_UL2_H;
  2474. bluecell_Prevdatastatus.ATT_UL2_L = ~bluecell_Prevdatastatus.ATT_UL2_L;
  2475. HAL_GPIO_WritePin(PATH_EN_UL2_GPIO_Port,PATH_EN_UL2_Pin,GPIO_PIN_SET);//CLOCK
  2476. }
  2477. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2478. break;
  2479. case ULO_RF_Path3_ON_OFF :
  2480. bluecell_Currdatastatus.ATT_UL3_PATH = data[MBIC_PAYLOADSTART + 3];
  2481. if(data[MBIC_PAYLOADSTART + 3]==0){
  2482. HAL_GPIO_WritePin(PATH_EN_UL3_GPIO_Port,PATH_EN_UL3_Pin,GPIO_PIN_RESET);//CLOCK
  2483. }
  2484. else{
  2485. bluecell_Prevdatastatus.ATT_UL3_H = ~bluecell_Prevdatastatus.ATT_UL3_H;
  2486. bluecell_Prevdatastatus.ATT_UL3_L = ~bluecell_Prevdatastatus.ATT_UL3_L;
  2487. HAL_GPIO_WritePin(PATH_EN_UL3_GPIO_Port,PATH_EN_UL3_Pin,GPIO_PIN_SET);//CLOCK
  2488. }
  2489. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2490. break;
  2491. case ULO_RF_Path4_ON_OFF :
  2492. bluecell_Currdatastatus.ATT_UL4_PATH = data[MBIC_PAYLOADSTART + 3];
  2493. if(data[MBIC_PAYLOADSTART + 3]==0){
  2494. HAL_GPIO_WritePin(PATH_EN_UL4_GPIO_Port,PATH_EN_UL4_Pin,GPIO_PIN_RESET);//CLOCK
  2495. }
  2496. else{
  2497. bluecell_Prevdatastatus.ATT_UL4_H = ~bluecell_Prevdatastatus.ATT_UL4_H;
  2498. bluecell_Prevdatastatus.ATT_UL4_L = ~bluecell_Prevdatastatus.ATT_UL4_L;
  2499. HAL_GPIO_WritePin(PATH_EN_UL4_GPIO_Port,PATH_EN_UL4_Pin,GPIO_PIN_SET);//CLOCK
  2500. }
  2501. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2502. break;
  2503. case ULO_Gain_Atten1 :
  2504. bluecell_Currdatastatus.ATT_UL1_H = data[MBIC_PAYLOADSTART + 3];
  2505. bluecell_Currdatastatus.ATT_UL1_L = data[MBIC_PAYLOADSTART + 4];
  2506. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2507. break;
  2508. case ULO_Gain_Atten2 :
  2509. bluecell_Currdatastatus.ATT_UL2_H = data[MBIC_PAYLOADSTART + 3];
  2510. bluecell_Currdatastatus.ATT_UL2_L = data[MBIC_PAYLOADSTART + 4];
  2511. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2512. break;
  2513. case ULO_Gain_Atten3 :
  2514. bluecell_Currdatastatus.ATT_UL3_H = data[MBIC_PAYLOADSTART + 3];
  2515. bluecell_Currdatastatus.ATT_UL3_L = data[MBIC_PAYLOADSTART + 4];
  2516. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2517. break;
  2518. case ULO_Gain_Atten4 :
  2519. bluecell_Currdatastatus.ATT_UL4_H = data[MBIC_PAYLOADSTART + 3];
  2520. bluecell_Currdatastatus.ATT_UL4_L = data[MBIC_PAYLOADSTART + 4];
  2521. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2522. break;
  2523. case ULO_Gain_Atten_Offset1 :
  2524. bluecell_Currdatastatus.bluecell_User_UL1_H = data[MBIC_PAYLOADSTART + 3];
  2525. bluecell_Currdatastatus.bluecell_User_UL1_L = data[MBIC_PAYLOADSTART + 4];
  2526. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2527. break;
  2528. case ULO_Gain_Atten_Offset2 :
  2529. bluecell_Currdatastatus.bluecell_User_UL2_H = data[MBIC_PAYLOADSTART + 3];
  2530. bluecell_Currdatastatus.bluecell_User_UL2_L = data[MBIC_PAYLOADSTART + 4];
  2531. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2532. break;
  2533. case ULO_Gain_Atten_Offset3 :
  2534. bluecell_Currdatastatus.bluecell_User_UL3_H = data[MBIC_PAYLOADSTART + 3];
  2535. bluecell_Currdatastatus.bluecell_User_UL3_L = data[MBIC_PAYLOADSTART + 4];
  2536. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2537. break;
  2538. case ULO_Gain_Atten_Offset4 :
  2539. bluecell_Currdatastatus.bluecell_User_UL4_H = data[MBIC_PAYLOADSTART + 3];
  2540. bluecell_Currdatastatus.bluecell_User_UL4_L = data[MBIC_PAYLOADSTART + 4];
  2541. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  2542. break;
  2543. case ULO_Level_High_Threshold :
  2544. bluecell_Currdatastatus.ULO_Level_High_Threshold_H = data[MBIC_PAYLOADSTART + 3];
  2545. bluecell_Currdatastatus.ULO_Level_High_Threshold_L = data[MBIC_PAYLOADSTART + 4];
  2546. break;
  2547. case ULO_Level_High_Threshold_default :
  2548. bluecell_Currdatastatus.ULO_Level_High_Threshold_default = data[MBIC_PAYLOADSTART + 3];
  2549. break;
  2550. case ULO_ALC_ON_OFF :
  2551. bluecell_Currdatastatus.ULO_ALC_ON_OFF = data[MBIC_PAYLOADSTART + 3];
  2552. break;
  2553. case ULO_ALC_Threshold :
  2554. bluecell_Currdatastatus.ULO_ALC_Threshold_H = data[MBIC_PAYLOADSTART + 3];
  2555. bluecell_Currdatastatus.ULO_ALC_Threshold_L = data[MBIC_PAYLOADSTART + 4];
  2556. break;
  2557. case ULO_ALC_Threshold_Default :
  2558. bluecell_Currdatastatus.ULO_ALC_Threshold_Default = data[MBIC_PAYLOADSTART + 3];
  2559. break;
  2560. case ULO_Shutdown_ON_OFF :
  2561. bluecell_Currdatastatus.ULO_Shutdown_ON_OFF = data[MBIC_PAYLOADSTART + 3];
  2562. break;
  2563. case ULO_Shutdown_Threshold :
  2564. bluecell_Currdatastatus.ULO_Shutdown_Threshold_H = data[MBIC_PAYLOADSTART + 3];
  2565. bluecell_Currdatastatus.ULO_Shutdown_Threshold_L = data[MBIC_PAYLOADSTART + 4];
  2566. break;
  2567. case ULO_Shutdown_Threshold_Default :
  2568. bluecell_Currdatastatus.ULO_Shutdown_Threshold_Default = data[MBIC_PAYLOADSTART + 3];
  2569. break;
  2570. }
  2571. if(data[MBIC_PAYLOADSTART + data[MBIC_PAYLOADSTART + 2] + 3 ] == 0xE0 && occurlen > 0){
  2572. occurlen -= data[MBIC_PAYLOADSTART + 2] + 3;
  2573. for(int k = 0; k < occurlen; k++){
  2574. data[MBIC_PAYLOADSTART + k] = data[MBIC_PAYLOADSTART + data[MBIC_PAYLOADSTART + 2] + 3 + k];
  2575. }
  2576. goto protocolReplay;
  2577. }
  2578. data[MBIC_CMD_0] = 0x81;//MBIC_ERRRESPONSE;
  2579. Length = MBIC_DataSend(data);
  2580. // Bluecell_StructCpy(&DataWrite[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
  2581. // EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_WINDOW_STATUS_ADDRESDS),&DataWrite[0],sizeof(BLUESTATUS_st));
  2582. }
  2583. else if(cmd == MBIC_Table_Get){
  2584. /*Table Get */
  2585. if(data[MBIC_PAYLOADSTART + 0] == UNIT_TYPE_MBIC){
  2586. // data[MBIC_PAYLOADSTART + 1] //Reserve Data
  2587. switch(data[MBIC_PAYLOADSTART + 2]){
  2588. case DLI_P1_Level_Table_Number :
  2589. case DLI_P2_Level_Table_Number :
  2590. case DLI_P3_Level_Table_Number :
  2591. case DLI_P4_Level_Table_Number :
  2592. case ULO_P1_Level_Table_Number :
  2593. case ULO_P2_Level_Table_Number :
  2594. case ULO_P3_Level_Table_Number :
  2595. case ULO_P4_Level_Table_Number :
  2596. case DLI_P1_ATT_Temp_guarantee_Table_Number :
  2597. case DLI_P2_ATT_Temp_guarantee_Table_Number :
  2598. case DLI_P3_ATT_Temp_guarantee_Table_Number :
  2599. case DLI_P4_ATT_Temp_guarantee_Table_Number :
  2600. case ULO_P1_ATT_Temp_guarantee_Table_Number :
  2601. case ULO_P2_ATT_Temp_guarantee_Table_Number :
  2602. case ULO_P3_ATT_Temp_guarantee_Table_Number :
  2603. case ULO_P4_ATT_Temp_guarantee_Table_Number :
  2604. case DLI_P1_ATT_Accuracy_Table_Number :
  2605. case DLI_P2_ATT_Accuracy_Table_Number :
  2606. case DLI_P3_ATT_Accuracy_Table_Number :
  2607. case DLI_P4_ATT_Accuracy_Table_Number :
  2608. case ULO_P1_ATT_Accuracy_Table_Number :
  2609. case ULO_P2_ATT_Accuracy_Table_Number :
  2610. case ULO_P3_ATT_Accuracy_Table_Number :
  2611. case ULO_P4_ATT_Accuracy_Table_Number :
  2612. //Header 문장 + sizeof(ATT_TABLE_st) + EXT 문장 Length 추가
  2613. Bluecell_TableLoad(&data[MBIC_PAYLOADSTART],data[MBIC_PAYLOADSTART + 2]);
  2614. }
  2615. }
  2616. data[MBIC_PAYLOADSTART + i++] = 0x00;
  2617. data[MBIC_PAYLOADSTART + i++] = 0x00;
  2618. }
  2619. else if(cmd == MBIC_Table_Set){
  2620. }
  2621. else{
  2622. /*NOP*/
  2623. printf("DATA ERR\r\n");
  2624. }
  2625. // Uart1_Data_Send(&data[0], data[BLUECELL_LENGTH] + 3);
  2626. return true;
  2627. }
  2628. uint16_t Ascendingcompare(const void *a, const void *b) // 오름차순 비교 함수 구현
  2629. {
  2630. uint16_t num1 = *(int *)a; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴
  2631. uint16_t num2 = *(int *)b; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴
  2632. if (num1 < num2) // a가 b보다 작을 때는
  2633. return -1; // -1 반환
  2634. if (num1 > num2) // a가 b보다 클 때는
  2635. return 1; // 1 반환
  2636. return 0; // a와 b가 같을 때는 0 반환
  2637. }
  2638. uint16_t Descendingcompare(const void *a, const void *b) // 내림차순 비교 함수 구현
  2639. {
  2640. uint16_t num1 = *(uint16_t *)a; // void 포인터를 uint16_t 포인터로 변환한 뒤 역참조하여 값을 가져옴
  2641. uint16_t num2 = *(uint16_t *)b; // void 포인터를 uint16_t 포인터로 변환한 뒤 역참조하여 값을 가져옴
  2642. if (num1 > num2) // a가 b보다 클 때는
  2643. return -1; // -1 반환
  2644. if (num1 < num2) // a가 b보다 작을 때는
  2645. return 1; // 1 반환
  2646. return 0; // a와 b가 같을 때는 0 반환
  2647. }
  2648. void DascendigFunc(uint16_t* data,uint32_t size ){
  2649. int temp;
  2650. for(int i = 0 ; i < size - 1 ; i ++) {
  2651. for(int j = i+1 ; j < size ; j ++) {
  2652. if(data[i] < data[j]) {
  2653. temp = data[j];
  2654. data[j] = data[i];
  2655. data[i] = temp;
  2656. }
  2657. }
  2658. }
  2659. }
  2660. uint32_t SumFunc(uint16_t* data,uint16_t size){
  2661. uint32_t ret = 0;
  2662. for (uint16_t i = 0; i < size; i++) // 배열의 요소 개수만큼 반복
  2663. {
  2664. ret += data[i]; // sum과 배열의 요소를 더해서 다시 sum에 저장
  2665. }
  2666. return ret;
  2667. }
  2668. bool ADC_Alarm_DL_High_Set[DET_Alarm_DL_Index_MAX] = {false,} ;
  2669. bool ADC_Alarm_DL_Low_Set[DET_Alarm_DL_Index_MAX] = {false,} ;
  2670. bool ADC_Alarm_UL_Set[DET_Alarm_UL_Index_MAX] = {false,} ;
  2671. bool ADC_Alarm_DL_Shutdown_Set[DET_Alarm_DL_Shutdown_Index_MAX] = {false,} ;
  2672. bool ADC_Alarm_UL_Shutdown_Set[DET_Alarm_UL_Shutdown_Index_MAX] = {false,} ;
  2673. void DET_LevelAlarmCheck(){
  2674. int16_t DL[DET_Alarm_DL_Index_MAX] = {0,};
  2675. int16_t UL[DET_Alarm_UL_Index_MAX] = {0,};
  2676. int16_t LimitData_UL_High = 0;
  2677. int16_t LimitData_DL_High = 0;
  2678. int16_t LimitData_DL_Low = 0;
  2679. int16_t LimitData_DL_Shutdown = 0;
  2680. int16_t LimitData_UL_Shutdown = 0;
  2681. double ret = 0;
  2682. int8_t Res_DL_dBm[DET_Alarm_DL_Index_MAX] = {0,};
  2683. int8_t Res_UL_dBm[DET_Alarm_UL_Index_MAX] = {0,};
  2684. LimitData_UL_High = ConvertTo2byte(bluecell_Currdatastatus.ULO_Level_High_Threshold_H,bluecell_Currdatastatus.ULO_Level_High_Threshold_L) / 10;
  2685. LimitData_DL_High = ConvertTo2byte(bluecell_Currdatastatus.DLI_Level_High_Threshold_H,bluecell_Currdatastatus.DLI_Level_High_Threshold_L)/ 10;
  2686. LimitData_DL_Low = ConvertTo2byte(bluecell_Currdatastatus.DLI_Level_Low_Threshold_H,bluecell_Currdatastatus.DLI_Level_Low_Threshold_L)/ 10;
  2687. LimitData_DL_Shutdown = ConvertTo2byte(bluecell_Currdatastatus.DLI_Shutdown_Threshold_H,bluecell_Currdatastatus.DLI_Shutdown_Threshold_L)/ 10;
  2688. LimitData_UL_Shutdown = ConvertTo2byte(bluecell_Currdatastatus.ULO_Shutdown_Threshold_H,bluecell_Currdatastatus.ULO_Shutdown_Threshold_L)/ 10;
  2689. DL[DET_Alarm_DL1_Index] = ConvertTo2byte(bluecell_Currdatastatus.DLI_P1_Level1_H,bluecell_Currdatastatus.DLI_P1_Level1_L);
  2690. DL[DET_Alarm_DL2_Index] = ConvertTo2byte(bluecell_Currdatastatus.DLI_P2_Level2_H,bluecell_Currdatastatus.DLI_P2_Level2_L);
  2691. DL[DET_Alarm_DL3_Index] = ConvertTo2byte(bluecell_Currdatastatus.DLI_P3_Level3_H,bluecell_Currdatastatus.DLI_P3_Level3_L);
  2692. DL[DET_Alarm_DL4_Index] = ConvertTo2byte(bluecell_Currdatastatus.DLI_P4_Level4_H,bluecell_Currdatastatus.DLI_P4_Level4_L);
  2693. UL[DET_Alarm_UL1_Index] = ConvertTo2byte(bluecell_Currdatastatus.ULO_P1_Level1_H,bluecell_Currdatastatus.ULO_P1_Level1_L);
  2694. UL[DET_Alarm_UL2_Index] = ConvertTo2byte(bluecell_Currdatastatus.ULO_P2_Level2_H,bluecell_Currdatastatus.ULO_P2_Level2_L);
  2695. UL[DET_Alarm_UL3_Index] = ConvertTo2byte(bluecell_Currdatastatus.ULO_P3_Level3_H,bluecell_Currdatastatus.ULO_P3_Level3_L);
  2696. UL[DET_Alarm_UL4_Index] = ConvertTo2byte(bluecell_Currdatastatus.ULO_P4_Level4_H,bluecell_Currdatastatus.ULO_P4_Level4_L);
  2697. ret = bluecell_Currdatastatus.DLI_P1_Level1_H << 8;
  2698. ret += bluecell_Currdatastatus.DLI_P1_Level1_L;
  2699. ret *= 0.001;
  2700. Res_DL_dBm[DET_Alarm_DL1_Index]
  2701. = (int8_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL1.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  2702. ret = bluecell_Currdatastatus.DLI_P2_Level2_H << 8;
  2703. ret += bluecell_Currdatastatus.DLI_P2_Level2_L;
  2704. ret *= 0.001;
  2705. Res_DL_dBm[DET_Alarm_DL2_Index]
  2706. = (int8_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL2.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  2707. ret = bluecell_Currdatastatus.DLI_P3_Level3_H << 8;
  2708. ret += bluecell_Currdatastatus.DLI_P3_Level3_L;
  2709. ret *= 0.001;
  2710. Res_DL_dBm[DET_Alarm_DL3_Index]
  2711. = (int8_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL3.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  2712. ret = bluecell_Currdatastatus.DLI_P4_Level4_H << 8;
  2713. ret += bluecell_Currdatastatus.DLI_P4_Level4_L;
  2714. ret *= 0.001;
  2715. Res_DL_dBm[DET_Alarm_DL4_Index]
  2716. = (int8_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL4.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  2717. ret = bluecell_Currdatastatus.ULO_P1_Level1_H << 8;
  2718. ret += bluecell_Currdatastatus.ULO_P1_Level1_L;
  2719. ret *= 0.001;
  2720. Res_UL_dBm[DET_Alarm_UL1_Index]
  2721. = (int8_t)Bluecell_TestPro(AutoControl_ADC_Compare(ret,&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st)));
  2722. // printf("LimitData_UL_High : %d \r\n",LimitData_UL_High);
  2723. // printf("DET_High : %d \r\n",Res_UL_dBm[DET_Alarm_UL1_Index] );
  2724. ret = bluecell_Currdatastatus.ULO_P2_Level2_H << 8;
  2725. ret += bluecell_Currdatastatus.ULO_P2_Level2_L;
  2726. ret *= 0.001;
  2727. Res_UL_dBm[DET_Alarm_UL2_Index]
  2728. = (int8_t)Bluecell_TestPro(AutoControl_ADC_Compare(ret,&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st)));
  2729. ret = bluecell_Currdatastatus.ULO_P3_Level3_H << 8;
  2730. ret += bluecell_Currdatastatus.ULO_P3_Level3_L;
  2731. ret *= 0.001;
  2732. Res_UL_dBm[DET_Alarm_UL3_Index]
  2733. = (int8_t)Bluecell_TestPro(AutoControl_ADC_Compare(ret,&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st)));
  2734. ret = bluecell_Currdatastatus.ULO_P4_Level4_H << 8;
  2735. ret += bluecell_Currdatastatus.ULO_P4_Level4_L;
  2736. ret *= 0.001;
  2737. Res_UL_dBm[DET_Alarm_UL4_Index]
  2738. = (int8_t)Bluecell_TestPro(AutoControl_ADC_Compare(ret,&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st)));
  2739. // printf("LimitData_DL_High : %d \r\n",LimitData_DL_High);
  2740. // printf("LimitData_DL_Low : %d \r\n",LimitData_DL_Low);
  2741. /*
  2742. DL Level Alarm Check Part
  2743. */
  2744. for(int i = 0 ; i < DET_Alarm_DL_Index_MAX; i++){
  2745. if(LimitData_DL_High < Res_DL_dBm[DET_Alarm_DL1_Index + i]){
  2746. ADC_Alarm_DL_High_Set[DET_Alarm_DL1_Index + i] = true;
  2747. // printf("ADC_Alarm_DL_High_Set %d ,Value : %d\r\n",DET_Alarm_UL1_Index + i,ADC_Alarm_DL_High_Set[DET_Alarm_UL1_Index + i]);
  2748. }
  2749. else{
  2750. ADC_Alarm_DL_High_Set[DET_Alarm_DL1_Index + i] = false;
  2751. // printf("ADC_Alarm_DL_High_Set %d ,Value : %d\r\n",DET_Alarm_UL1_Index + i,ADC_Alarm_DL_High_Set[DET_Alarm_UL1_Index + i]);
  2752. }
  2753. // printf("LimitData_DL_High: %d Res_DL_dBm [%d] : %d ,Value : %d\r\n",
  2754. // LimitData_DL_Low,
  2755. // DET_Alarm_UL1_Index + i,
  2756. // Res_DL_dBm[DET_Alarm_DL1_Index + i],
  2757. // ADC_Alarm_DL_High_Set[LimitData_DL_High + i]);
  2758. }
  2759. /*
  2760. DL Shutdown Alarm Check Part
  2761. */
  2762. for(int i = 0 ; i < DET_Alarm_DL_Shutdown_Index_MAX; i++){
  2763. if(LimitData_DL_Shutdown < Res_DL_dBm[DET_Alarm_DL1_Shutdown_Index + i])
  2764. ADC_Alarm_DL_Shutdown_Set[DET_Alarm_DL1_Shutdown_Index + i] = true;
  2765. else
  2766. ADC_Alarm_DL_Shutdown_Set[DET_Alarm_DL1_Shutdown_Index + i] = false;
  2767. }
  2768. for(int i = 0 ; i < DET_Alarm_DL_Index_MAX; i++){
  2769. if(LimitData_DL_Low > Res_DL_dBm[DET_Alarm_DL1_Index + i]){
  2770. ADC_Alarm_DL_Low_Set[DET_Alarm_DL1_Index + i] = true;
  2771. }
  2772. else{
  2773. ADC_Alarm_DL_Low_Set[DET_Alarm_DL1_Index + i] = false;
  2774. }
  2775. // printf("LimitData_DL_Low: %d Res_DL_dBm [%d] : %d ,Value : %d\r\n",LimitData_DL_Low,DET_Alarm_UL1_Index + i,Res_DL_dBm[DET_Alarm_DL1_Index + i],ADC_Alarm_DL_Low_Set[LimitData_DL_High + i]);
  2776. }
  2777. /*
  2778. UL Shutdown Alarm Check Part
  2779. */
  2780. for(int i = 0 ; i < DET_Alarm_UL_Shutdown_Index_MAX; i++){
  2781. if(LimitData_UL_Shutdown < Res_UL_dBm[DET_Alarm_UL1_Shutdown_Index + i]){
  2782. ADC_Alarm_UL_Shutdown_Set[DET_Alarm_UL1_Shutdown_Index + i] = true;
  2783. }
  2784. else{
  2785. ADC_Alarm_UL_Shutdown_Set[DET_Alarm_UL1_Shutdown_Index + i] = false;
  2786. }
  2787. }
  2788. /*
  2789. UL Level Alarm Check Part
  2790. */
  2791. for(int i = 0 ; i < DET_Alarm_UL_Index_MAX; i++){
  2792. if(LimitData_UL_High < Res_UL_dBm[DET_Alarm_UL1_Index + i]){
  2793. ADC_Alarm_UL_Set[DET_Alarm_UL1_Index + i] = true;
  2794. // printf("ADC_Alarm_UL_Set %d ,Value : %d\r\n",DET_Alarm_UL1_Index + i,ADC_Alarm_UL_Set[DET_Alarm_UL1_Index + i]);
  2795. }
  2796. else{
  2797. ADC_Alarm_UL_Set[DET_Alarm_UL1_Index + i] = false;
  2798. // printf("ADC_Alarm_UL_Set %d ,Value : %d\r\n",DET_Alarm_UL1_Index + i,ADC_Alarm_UL_Set[DET_Alarm_UL1_Index + i] );
  2799. }
  2800. }
  2801. }
  2802. void ADC_Check(void){
  2803. //static uint8_t Cnt = 0;
  2804. double ADC1DoubleRet[4];
  2805. double ADC3DoubleRet[5];
  2806. uint32_t ADC1_Average_value[ADC1_CNT];
  2807. uint32_t ADC3_Average_value[ADC3_CNT];
  2808. // double ret = 0;
  2809. uint16_t MIN_ADC[ADC3_CNT] = {0,};
  2810. uint16_t cnt[ADC3_CNT] = {0,};
  2811. double temp;
  2812. // if(AdcTimerCnt > 10){
  2813. // 정렬할 배열, 요소 개수, 요소 크기, 비교 함수를 넣어줌
  2814. if(adc3cnt >= ADC_AVERAGECNT){
  2815. // printf("%f\r\n",ADC3value[4]*3.3/4095);
  2816. #if 1 // PYJ.2020.05.25_BEGIN --
  2817. for(int i = 0; i < ADC3_CNT; i++){
  2818. DascendigFunc(&ADC3valuearray[i][0],ADC_AVERAGECNT);
  2819. MIN_ADC[i] = ADC3valuearray[i][0] - 12;
  2820. for(int a = 0; a < ADC_AVERAGECNT; a++){
  2821. // printf("ADC3valuearray[%d][%d] : %d \r\n",i,a,ADC3valuearray[i][a]);
  2822. if(ADC3valuearray[i][a] < MIN_ADC[i]){
  2823. cnt[i] = a;
  2824. // printf("cnt[i] %d \r\n",cnt[i]);
  2825. break;
  2826. }else{
  2827. cnt[i] = ADC_AVERAGECNT;
  2828. }
  2829. }
  2830. ADC3_Average_value[i] = SumFunc(&ADC3valuearray[i][0],cnt[i]);
  2831. // printf("ADC3_Average_value[%d] : %d / %f \r\n",i,ADC3_Average_value[i],ADC3_Average_value[i]/cnt[i] * Volt_Calc_val);
  2832. }
  2833. for(int i = 0; i < ADC3_CNT; i++){
  2834. ADC3DoubleRet[i] = (((ADC3_Average_value[i] / cnt[i]) * 3.3 /4095) * 1000);
  2835. ADC3Ret[i] = ADC3DoubleRet[i];
  2836. ADC3_Average_value[i] = 0;
  2837. }
  2838. bluecell_Currdatastatus.DLI_P1_Level1_H
  2839. = ((ADC3Ret[1] & 0xFF00) >> 8);
  2840. bluecell_Currdatastatus.DLI_P1_Level1_L
  2841. = ((ADC3Ret[1] & 0x00FF));
  2842. bluecell_Currdatastatus.DLI_P2_Level2_H
  2843. = ((ADC3Ret[2] & 0xFF00) >> 8);
  2844. bluecell_Currdatastatus.DLI_P2_Level2_L
  2845. = ((ADC3Ret[2] & 0x00FF) );
  2846. bluecell_Currdatastatus.DLI_P3_Level3_H
  2847. = ((ADC3Ret[3] & 0xFF00) >> 8);
  2848. bluecell_Currdatastatus.DLI_P3_Level3_L
  2849. = ((ADC3Ret[3] & 0x00FF) );
  2850. bluecell_Currdatastatus.DLI_P4_Level4_H
  2851. = ((ADC3Ret[4] & 0xFF00) >> 8);
  2852. bluecell_Currdatastatus.DLI_P4_Level4_L
  2853. = ((ADC3Ret[4] & 0x00FF) );
  2854. bluecell_Currdatastatus.ULO_P4_Level4_H
  2855. = ((ADC3Ret[0] & 0xFF00) >> 8);
  2856. bluecell_Currdatastatus.ULO_P4_Level4_L
  2857. = ((ADC3Ret[0] & 0x00FF) );
  2858. #endif // PYJ.2020.05.25_END --
  2859. #if 0 // PYJ.2020.04.26_BEGIN --
  2860. double ret = 0;
  2861. ret = (ADC3Ret[0]) * 0.001;
  2862. printf("ADC3Ret[0] : %d UL4 : %f\r\n",ADC3Ret[0],ret);
  2863. ret = (ADC3Ret[1]) * 0.001;
  2864. printf("ADC3Ret[1] : %d DL1 : %f\r\n",ADC3Ret[1],ret);
  2865. ret = (ADC3Ret[2]) * 0.001;
  2866. printf("ADC3Ret[2] : %d DL2 : %f\r\n",ADC3Ret[2],ret);
  2867. ret = (ADC3Ret[3]) * 0.001;
  2868. printf("ADC3Ret[3] : %d DL3 : %f\r\n",ADC3Ret[3],ret);
  2869. ret = (ADC3Ret[4]) * 0.001;
  2870. printf("ADC3Ret[4] : %d DL4 : %f\r\n",ADC3Ret[4],ret);
  2871. #endif // PYJ.2020.04.26_END --
  2872. adc3cnt = 0;
  2873. }
  2874. if(adc1cnt >= ADC_AVERAGECNT){
  2875. for(int i = 0; i < ADC1_CNT; i++){
  2876. DascendigFunc(&ADC1valuearray[i][0],ADC_AVERAGECNT);
  2877. MIN_ADC[i] = ADC1valuearray[i][0] - 12;
  2878. for(int a = 0; a < ADC_AVERAGECNT; a++){
  2879. // printf("ADC1valuearray[%d][%d] : %d \r\n",i,a,ADC1valuearray[i][a]);
  2880. if(ADC1valuearray[i][a] < MIN_ADC[i]){
  2881. cnt[i] = a;
  2882. // printf("cnt[i] %d \r\n",cnt[i]);
  2883. break;
  2884. }else{
  2885. cnt[i] = ADC_AVERAGECNT;
  2886. }
  2887. }
  2888. ADC1_Average_value[i] = SumFunc(&ADC1valuearray[i][0],cnt[i]);
  2889. // printf("ADC1_Average_value[%d] : %d / %f \r\n",i,ADC1_Average_value[i],ADC1_Average_value[i]/cnt[i] * Volt_Calc_val);
  2890. }
  2891. for(int i = 0; i < 4; i++){
  2892. ADC1DoubleRet[i] = (((ADC1_Average_value[i] / cnt[i]) * 3.3 /4095) * 1000);
  2893. ADC1Ret[i] = ADC1DoubleRet[i];
  2894. // ADC1Ret[i] = ADC1_Average_value[i] / cnt[i];
  2895. ADC1_Average_value[i] = 0;
  2896. }
  2897. bluecell_Currdatastatus.ULO_P1_Level1_H
  2898. = ((ADC1Ret[0] & 0xFF00) >> 8);
  2899. bluecell_Currdatastatus.ULO_P1_Level1_L
  2900. = ((ADC1Ret[0] & 0x00FF) );
  2901. bluecell_Currdatastatus.ULO_P2_Level2_H
  2902. = ((ADC1Ret[1] & 0xFF00) >> 8);
  2903. bluecell_Currdatastatus.ULO_P2_Level2_L
  2904. = ((ADC1Ret[1] & 0x00FF) );
  2905. bluecell_Currdatastatus.ULO_P3_Level3_H
  2906. = ((ADC1Ret[2] & 0xFF00) >> 8);
  2907. bluecell_Currdatastatus.ULO_P3_Level3_L
  2908. = ((ADC1Ret[2] & 0x00FF) );
  2909. // printf("ADC1_Average_value[%d] : %d / %f \r\n",i,ADC1_Average_value[i],ADC1_Average_value[i]/cnt[i] * Volt_Calc_val);
  2910. #if 0 // PYJ.2020.05.14_BEGIN --
  2911. bluecell_Currdatastatus.DET_TEMP_H
  2912. =((ADC1Ret[3] & 0xFF00) >> 8);
  2913. bluecell_Currdatastatus.DET_TEMP_L
  2914. =((ADC1Ret[3] & 0x00FF) );
  2915. #else
  2916. /* *
  2917. 온도 소수점 제거
  2918. */
  2919. temp = (ADC1Ret[3] * 0.001);
  2920. // printf("DetEnd");
  2921. // printf("temp %f \r\n",temp );
  2922. bluecell_Currdatastatus.DET_TEMP = (uint8_t)( (temp - 0.5) * 100);
  2923. // printf("DET_TEMP %d \r\n",bluecell_Currdatastatus.DET_TEMP );
  2924. bluecell_Currdatastatus.DET_TEMP += bluecell_Currdatastatus.bluecell_User_TEMP_OFFSET;
  2925. // printf("2 DET_TEMP %d \r\n",bluecell_Currdatastatus.DET_TEMP );
  2926. // temp= ((( - 0.5 ) * 100) + );
  2927. #endif // PYJ.2020.05.14_END --
  2928. // ret = ((ADC1Ret[0]) * Volt_Calc_val);
  2929. // printf("UL1 : %f\r\n",ret);
  2930. // ret = ((ADC1Ret[1]) * Volt_Calc_val);
  2931. // printf("UL2 : %f\r\n",ret);
  2932. // ret = ((ADC1Ret[2]) * Volt_Calc_val);
  2933. //// printf("UL3 : %f\r\n",ret);
  2934. // bluecell_Currdatastatus.DET_TEMP_H
  2935. // =((ADC1Ret[3] & 0xFF00) >> 8);
  2936. // bluecell_Currdatastatus.DET_TEMP_L
  2937. // =((ADC1Ret[3] & 0x00FF) );
  2938. // printf("bluecell_Currdatastatus.DET_TEMP %d \r\n",bluecell_Currdatastatus.DET_TEMP );
  2939. // printf(" ADC1Ret[3] %x \r\n", ADC1Ret[3] );
  2940. // ret = ((ADC1Ret[3]) * Volt_Calc_val);
  2941. // printf("Temp : %f\r\n",ret);
  2942. adc1cnt = 0;
  2943. }
  2944. /*
  2945. After ADC calculation is completed, start Det Alarm check.
  2946. */
  2947. DET_LevelAlarmCheck();/*DL UL Alarm Check*/
  2948. }
  2949. #if 1 // PYJ.2020.05.12_BEGIN --
  2950. /*One Point round*/
  2951. double Bluecell_round( double value )
  2952. {
  2953. unsigned short data = value * 1000;
  2954. unsigned short temp = 0;
  2955. double ret = 0;
  2956. // printf("1: %d\r\n",data);
  2957. temp = data % 10;
  2958. if(temp >= 5){
  2959. data = data - temp + 10;
  2960. }else{
  2961. data = data - temp;
  2962. }
  2963. // printf("2: %d\r\n",data);
  2964. temp = (data % 100) / 10;
  2965. // printf("3: %d\r\n",temp);
  2966. if(temp >= 5){
  2967. data = data - (temp * 10)+ 100;
  2968. }else{
  2969. data = data - (temp * 10);
  2970. }
  2971. // printf("4: %d\r\n",data);
  2972. ret = data;
  2973. printf("ret : %f\r\n",ret / 1000);
  2974. return ret / 1000;
  2975. }
  2976. /*One Point round*/
  2977. double Bluecell_TestPro(double value )
  2978. {
  2979. int16_t temp = (value * 10);
  2980. double temp_float = 0;
  2981. bool minus_set = 0;
  2982. // printf("0. temp : %d\r\n",temp);
  2983. temp = temp % 10;
  2984. // printf("1. temp : %d\r\n",temp);
  2985. if((int16_t)temp == 0)
  2986. return value;
  2987. if(temp < 0){
  2988. temp *= -1;//Convert Minus To plus
  2989. // printf("2. temp : %d\r\n",temp);
  2990. minus_set = true;
  2991. }
  2992. temp_float = temp * 0.1;
  2993. // printf("3. temp_float: %f temp : %f\r\n",temp_float,temp);
  2994. // printf("4. value : %f temp : %d temp_float : %f \r\n",value,temp,temp_float);
  2995. if(temp >= 5){
  2996. if(minus_set == true){
  2997. value -= 1;
  2998. value += temp_float;
  2999. }else{
  3000. value += 1;
  3001. value -= temp_float;
  3002. }
  3003. // printf("temp_float : %f \r\n",temp_float);
  3004. }
  3005. else{
  3006. #if 1 // PYJ.2020.05.25_BEGIN --
  3007. if(minus_set == true){
  3008. value += temp_float;
  3009. }
  3010. else{
  3011. value -= temp_float;
  3012. }
  3013. #else
  3014. value -= temp_float;
  3015. #endif // PYJ.2020.05.25_END --
  3016. // printf("temp_float : %f \r\n",temp_float);
  3017. }
  3018. // printf("temp : %f \r\n",value);
  3019. return (value);
  3020. }
  3021. #endif // PYJ.2020.05.12_END --
  3022. #if 0 // PYJ.2020.05.12_BEGIN --
  3023. double AutoControl_ADC_Compare(double CurrentAdc,uint8_t* CompareAdc,uint8_t size){
  3024. double ret = 0xFF,CurrRet = 0,TableAdc,TableAdcret;
  3025. uint8_t LastIndex = 0;
  3026. double Max_ADC = 0,Min_ADC = 0;
  3027. double step = 0;
  3028. double dot = 0,tempret = 0xFF;
  3029. for(int i =0; i < size / 2; i++){
  3030. TableAdc = CompareAdc[i * 2] << 8;
  3031. TableAdc += CompareAdc[i * 2 + 1];
  3032. TableAdc /= 1000;
  3033. // printf("TableAdc[%d] : %f \r\n",i,TableAdc);
  3034. CurrRet = TableAdc - CurrentAdc;
  3035. if(CurrRet < 0){ // plus 공식
  3036. CurrRet = (CurrRet * -2) + CurrRet;
  3037. }
  3038. if(ret > CurrRet){
  3039. ret = CurrRet;
  3040. TableAdcret = TableAdc;
  3041. LastIndex = i;
  3042. }
  3043. }
  3044. /*MIN*/
  3045. TableAdc = CompareAdc[LastIndex * 2] << 8;
  3046. TableAdc += CompareAdc[LastIndex * 2 + 1];
  3047. TableAdc /= 1000;
  3048. Min_ADC = TableAdc;
  3049. /*MAX*/
  3050. TableAdc = CompareAdc[LastIndex * 2 - 2 ] << 8;
  3051. TableAdc += CompareAdc[LastIndex * 2 - 1];
  3052. TableAdc /= 1000;
  3053. Max_ADC = TableAdc;
  3054. step = ((Max_ADC - Min_ADC) / 10);
  3055. // Min_ADC = Bluecell_round(Min_ADC);
  3056. // CurrentAdc = Bluecell_round(CurrentAdc);
  3057. // printf("1:STEP : %f , %f > %f > %f \r\n",step,Max_ADC,CurrentAdc,Min_ADC);
  3058. for(double d = 0; d < 1; d += 0.1){
  3059. CurrRet = CurrentAdc - Min_ADC;
  3060. if(tempret >= CurrRet & CurrRet > 0){
  3061. // printf("(%f >= %f)\r\n",tempret,CurrRet);
  3062. tempret = CurrRet;
  3063. // printf("2:STEP : %f , %f > %f > %f \r\n",step,Max_ADC,CurrentAdc,Min_ADC);
  3064. Min_ADC += step;
  3065. dot = d;
  3066. }
  3067. }
  3068. // printf("dot : %f \r\n",dot);
  3069. dot = AutoControl_Save[LastIndex] - dot;
  3070. // printf("AutoControl_Save[LastIndex]:%d + dot:%f : %f \r\n",AutoControl_Save[LastIndex] + dot);
  3071. // printf(" %f > %f > %f \r\n",Max_ADC,CurrentAdc,Min_ADC);
  3072. return dot;
  3073. }
  3074. #else
  3075. #if 0 // PYJ.2020.05.15_BEGIN --
  3076. int8_t AutoControl_ADC_Compare(double CurrentAdc,uint8_t* CompareAdc,uint8_t size){
  3077. double ret = 0xFF,CurrRet = 0,TableAdc;
  3078. uint8_t LastIndex = 0;
  3079. for(int i =0; i < size / 2; i++){
  3080. TableAdc = CompareAdc[i * 2] << 8;
  3081. TableAdc += CompareAdc[i * 2 + 1];
  3082. TableAdc /= 1000;
  3083. // printf("TableAdc[%d] : %f \r\n",i,TableAdc);
  3084. CurrRet = TableAdc - CurrentAdc;
  3085. if(CurrRet < 0){
  3086. CurrRet = (CurrRet * -2) + CurrRet;
  3087. }
  3088. if(ret > CurrRet){
  3089. ret = CurrRet;
  3090. LastIndex = i;
  3091. }
  3092. }
  3093. return AutoControl_Save[LastIndex];
  3094. }
  3095. #else
  3096. double AutoControl_ADC_Compare(double CurrentAdc,uint8_t* CompareAdc,uint8_t size){
  3097. double ret = 0xFF,CurrRet = 0,TableAdc,NextTableAdc;
  3098. double Vitual_array[10] = {0,};
  3099. double step = 0;
  3100. uint8_t LastIndex = 0;
  3101. uint8_t dot = 0;
  3102. for(int i =0; i < size / 2; i++){
  3103. TableAdc = CompareAdc[i * 2] << 8;
  3104. TableAdc += CompareAdc[i * 2 + 1];
  3105. TableAdc /= 1000;
  3106. NextTableAdc = CompareAdc[i * 2 + 2] << 8;
  3107. NextTableAdc += CompareAdc[i * 2 + 3];
  3108. NextTableAdc /= 1000;
  3109. // printf("TableAdc[%d] : %f \r\n",i,TableAdc);
  3110. // CurrRet = TableAdc - CurrentAdc;
  3111. step = (TableAdc - NextTableAdc) / 10;
  3112. for(int a = 0; a < 10; a++){
  3113. Vitual_array[a] = TableAdc - (step * a);
  3114. CurrRet = (Vitual_array[a]) - (CurrentAdc);
  3115. // printf("Vitual_array[%d] : %f \r\n",a,Vitual_array[a]);
  3116. if(CurrRet < 0){
  3117. CurrRet = (CurrRet * -2) + CurrRet;
  3118. }
  3119. if(ret > CurrRet){
  3120. ret = CurrRet;
  3121. LastIndex = i;
  3122. dot = a;
  3123. }
  3124. }
  3125. }
  3126. TableAdc = CompareAdc[0] << 8;
  3127. TableAdc += CompareAdc[1];
  3128. TableAdc /= 1000;
  3129. if(CurrentAdc < TableAdc){
  3130. // printf("LastIndex : %d / dot : %d TableAdc : %f \r\n",LastIndex,dot,(AutoControl_Save[LastIndex] - (dot * 0.1)));
  3131. return (AutoControl_Save[LastIndex] - (dot * 0.1));
  3132. }
  3133. else{
  3134. // printf("CurrentAdc : %f TableAdc : %f \r\n",CurrentAdc,TableAdc);
  3135. return (AutoControl_Save[0]);
  3136. }
  3137. }
  3138. double AGC_AutoControl_ADC_Compare(double CurrentAdc,uint8_t* CompareAdc,uint8_t size){
  3139. double ret = 0xFF,CurrRet = 0,TableAdc,NextTableAdc;
  3140. double Vitual_array[10] = {0,};
  3141. double step = 0;
  3142. uint8_t LastIndex = 0;
  3143. uint8_t dot = 0;
  3144. for(int i =0; i < size / 2; i++){
  3145. TableAdc = CompareAdc[i * 2] << 8;
  3146. TableAdc += CompareAdc[i * 2 + 1];
  3147. TableAdc /= 1000;
  3148. NextTableAdc = CompareAdc[i * 2 + 2] << 8;
  3149. NextTableAdc += CompareAdc[i * 2 + 3];
  3150. NextTableAdc /= 1000;
  3151. // printf("TableAdc[%d] : %f \r\n",i,TableAdc);
  3152. // CurrRet = TableAdc - CurrentAdc;
  3153. step = (TableAdc - NextTableAdc) / 10;
  3154. for(int a = 0; a < 10; a++){
  3155. Vitual_array[a] = TableAdc - (step * a);
  3156. CurrRet = (Vitual_array[a]) - (CurrentAdc);
  3157. // printf("Vitual_array[%d] : %f \r\n",a,Vitual_array[a]);
  3158. if(CurrRet < 0){
  3159. CurrRet = (CurrRet * -2) + CurrRet;
  3160. }
  3161. if(ret > CurrRet){
  3162. ret = CurrRet;
  3163. LastIndex = i;
  3164. dot = a;
  3165. }
  3166. }
  3167. }
  3168. TableAdc = CompareAdc[0] << 8;
  3169. TableAdc += CompareAdc[1];
  3170. TableAdc /= 1000;
  3171. if(CurrentAdc < TableAdc){
  3172. // printf("LastIndex : %d / dot : %d TableAdc : %f \r\n",LastIndex,dot,(AutoControl_Save[LastIndex] - (dot * 0.1)));
  3173. return (AutoControl_Save[LastIndex] - (dot * 0.1));
  3174. }
  3175. else{
  3176. // printf("CurrentAdc : %f TableAdc : %f \r\n",CurrentAdc,TableAdc);
  3177. // for(int a = 0; a < sizeof(AGC_dBm_t); a++)
  3178. // printf("AutoControl_Save[%d] : %d \r\n",a,AutoControl_Save[a]);
  3179. return (AutoControl_Save[0]);
  3180. }
  3181. }
  3182. #endif // PYJ.2020.05.15_END --
  3183. #endif // PYJ.2020.05.12_END --
  3184. #if 0 // PYJ.2020.05.21_BEGIN --
  3185. int32_t MinusConvert(uint8_t Temp_h, int32_t Value){
  3186. int32_t ret;
  3187. if((((bluecell_Currdatastatus.ATT_ALC1_MAX_H << 8) & 0xFF00) & 0xF000) == 0xF000){
  3188. Value = 0x0000FFFF - (Value & 0x0000FFFF);
  3189. Value += 0x01;
  3190. Value *= -1;
  3191. }
  3192. Value /= 100;
  3193. ret = Value;
  3194. return ret;
  3195. }
  3196. #endif // PYJ.2020.05.21_END --
  3197. uint8_t ALC_AlarmSet[ALC_Alarm_UL_Index_MAX] = {0,};
  3198. double ALC_Calc(uint8_t num,double CurrAtten ,int8_t threshold,double CurrDet){
  3199. double ret = 0;
  3200. // ret = CurrDet - threshold;
  3201. #if 0 // PYJ.2020.05.25_BEGIN --
  3202. if(CurrAtten >= 20){
  3203. if(CurrDet - threshold < 0){
  3204. if(CurrAtten + (CurrDet - threshold) > 0){
  3205. // ret = CurrAtten + (CurrDet - threshold);
  3206. printf("5. %f : %f %d\r\n",ret,CurrDet,threshold);
  3207. }
  3208. else{
  3209. ret = CurrAtten * -1;
  3210. printf("6. %f : %f %d\r\n",ret,CurrDet,threshold);
  3211. }
  3212. }else{
  3213. ALC_AlarmSet[num] = true;
  3214. }
  3215. printf("4. %f : %f %d\r\n",ret,CurrDet,threshold);
  3216. return ret;
  3217. }
  3218. #endif // PYJ.2020.05.25_END --
  3219. if(CurrDet < threshold){
  3220. ret = CurrDet - threshold;
  3221. // printf("1. %f : %f %d\r\n",ret,CurrDet,threshold);
  3222. // if(((ret * 10) % 10 ) != 0)
  3223. ret = Bluecell_TestPro(ret);
  3224. // printf("ret = %f \r\n",rset);
  3225. }
  3226. else if(CurrDet > threshold){
  3227. ret = CurrDet - threshold;
  3228. // printf("2. %f : %f %d\r\n",ret,CurrDet,threshold);
  3229. // if(((ret * 10) % 10 ) != 0)
  3230. ret = Bluecell_TestPro(ret);
  3231. // printf("Result : ret = %f \r\n",ret);
  3232. }
  3233. if(CurrAtten + ret <= 0){
  3234. ret = CurrAtten * -1;
  3235. // printf("3. ret0 : %f \r\n",ret);
  3236. }else{
  3237. ALC_AlarmSet[num] = false;
  3238. }
  3239. if(CurrAtten + ret > 20){
  3240. ret = 20 - CurrAtten;
  3241. ALC_AlarmSet[num] = true;
  3242. }
  3243. // printf("ret3 : %f \r\n",ret);
  3244. return ret;
  3245. }
  3246. void ALC_Function(){ //DL
  3247. double Volt_Calc_val = 3.3 / 4095;
  3248. double tempret = 0;
  3249. double ret = 0;
  3250. // double CurrnALCValue = 0;
  3251. double CurrentATTENVALUE = 0;
  3252. uint8_t tempcurratten = 0;
  3253. // int32_t CurrnALC_MAX_SettingValue = 0;
  3254. // int32_t CurrnALC_MIN_SettingValue = 0;
  3255. // int32_t ALC_Result = 0;
  3256. int16_t Limitdata = 0;
  3257. double ResdBm = 0;
  3258. int16_t IwillGiveAtten = 0;
  3259. uint8_t tempadc[100];
  3260. ALC_dBm_t ALC_Table_ref = {
  3261. -15 , -16 , -17 , -18 , -19 ,
  3262. -20 , -21 , -22 , -23 , -24 , -25 , -26 , -27 ,
  3263. -28 , -29 , -30 , -31 , -32 , -33 , -34 , -35 ,
  3264. -36 , -37 , -38 , -39 , -40 , -41 , -42 , -43 ,
  3265. -44 , -45 , -46 , -47 , -48 , -49 , -50 , -51 ,
  3266. -52 , -53 , -54 , -55 , -56 , -57 , -58 , -59 ,
  3267. -60 ,
  3268. };
  3269. Bluecell_StructCpy(&AutoControl_Save[0],&ALC_Table_ref.DET_UL_0,sizeof(ALC_dBm_t));
  3270. Bluecell_StructCpy(&tempadc[0],&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  3271. if(ALCTimerCnt > 400){
  3272. if(bluecell_Currdatastatus.ULO_ALC_ON_OFF == true){
  3273. /***************************************************************************************************************/
  3274. /* ALC 1 */
  3275. /***************************************************************************************************************/
  3276. //ret 현재 Voltage 값 출력
  3277. //ret 에 따른 현재 DBM 구현
  3278. ret = bluecell_Currdatastatus.ULO_P1_Level1_H << 8;
  3279. ret += bluecell_Currdatastatus.ULO_P1_Level1_L;
  3280. ret *= 0.001;
  3281. Limitdata = (( bluecell_Currdatastatus.ULO_ALC_Threshold_H << 8) & 0xFF00) ;
  3282. Limitdata += bluecell_Currdatastatus.ULO_ALC_Threshold_L ;
  3283. Limitdata /= 10;
  3284. ResdBm = AutoControl_ADC_Compare(ret,&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  3285. bluecell_Currdatastatus.ULO_Level1_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3286. bluecell_Currdatastatus.ULO_Level1_L = ((int16_t)ResdBm & 0x00FF);
  3287. CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL1_H,bluecell_Currdatastatus.ATT_UL1_L);
  3288. // tempret = (((bluecell_Currdatastatus.ATT_UL1_H << 8) & 0xFF00) | (bluecell_Currdatastatus.ATT_UL1_L & 0x00FF)) / 10;
  3289. //if(ResdBm < Limitdata && CurrentATTENVALUE != 0){
  3290. // printf("db %f \r\n",ResdBm);
  3291. // printf("==================START================\r\n");
  3292. // printf("Current UL ADC VALUE : %f \r\n",ret);
  3293. // printf("ResdBm : UL1 : %f \r\n",ResdBm);
  3294. //CurrnALC_MIN_SettingValue = MinusConvert(bluecell_Currdatastatus.ULO_P1_Level1_H,CurrnALC_MIN_SettingValue);
  3295. // Limitdata = (( bluecell_Currdatastatus.ATT_UL1_H << 8) & 0xFF00) ;
  3296. // Limitdata += bluecell_Currdatastatus.ATT_UL1_L ;
  3297. //
  3298. // Limitdata /= 10;
  3299. // printf("CurrentATTENVALUE : %d\r\n",CurrentATTENVALUE);
  3300. IwillGiveAtten = ALC_Calc(ALC_Alarm_UL1_Index,CurrentATTENVALUE,Limitdata,ResdBm);
  3301. // printf("CurrentATTENVALUE : %f \r\n",CurrentATTENVALUE);
  3302. // if(CurrentATTENVALUE < 20 && IwillGiveAtten != 0){
  3303. // IwillGiveAtten = CurrentATTENVALUE + IwillGiveAtten ;
  3304. // }
  3305. // printf("ADC : %f Current : %f Threas : %d : I WILL GIVE ATTEN : %d \r\n",ret,ResdBm , Limitdata,IwillGiveAtten);
  3306. // printf("CurrentATTENVALUE : %d I WILL GIVE ATTEN : %d \r\n",CurrentATTENVALUE,IwillGiveAtten);
  3307. // printf("CurrentATTENVALUE : %d I WILL GIVE ATTEN : %d \r\n",CurrentATTENVALUE,IwillGiveAtten);
  3308. // if(IwillGiveAtten < 0)
  3309. // printf("CurrentATTENVALUE %f \r\n",CurrentATTENVALUE);
  3310. if( (IwillGiveAtten > 0) || (CurrentATTENVALUE >= (IwillGiveAtten * -1))){
  3311. IwillGiveAtten *=10;
  3312. tempcurratten = CurrentATTENVALUE * 10;
  3313. #if 1 // PYJ.2020.05.23_BEGIN --
  3314. //if(((ResdBm > (Limitdata + 0.5)) || (ResdBm < (Limitdata - 0.5))) && IwillGiveAtten != 0){
  3315. bluecell_Currdatastatus.ATT_UL1_H = (((tempcurratten + IwillGiveAtten) & 0xFF00) >> 8);
  3316. bluecell_Currdatastatus.ATT_UL1_L = (tempcurratten + IwillGiveAtten) & 0x00FF;
  3317. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3318. // }
  3319. }
  3320. CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL1_H,bluecell_Currdatastatus.ATT_UL1_L);
  3321. // printf("CurrentATTENVALUE : %f\r\n",CurrentATTENVALUE );
  3322. // printf("==================END================\r\n");
  3323. #endif // PYJ.2020.05.23_END --
  3324. // HAL_Delay(1000);
  3325. //}
  3326. #if 1 // PYJ.2020.05.22_BEGIN --
  3327. /***************************************************************************************************************/
  3328. /* ALC 2 */
  3329. /***************************************************************************************************************/
  3330. //ret 현재 Voltage 값 출력
  3331. //ret 에 따른 현재 DBM 구현
  3332. ret = bluecell_Currdatastatus.ULO_P2_Level2_H << 8;
  3333. ret += bluecell_Currdatastatus.ULO_P2_Level2_L;
  3334. ret *= 0.001;
  3335. Limitdata = (( bluecell_Currdatastatus.ULO_ALC_Threshold_H << 8) & 0xFF00) ;
  3336. Limitdata += bluecell_Currdatastatus.ULO_ALC_Threshold_L ;
  3337. Limitdata /= 10;
  3338. ResdBm = AutoControl_ADC_Compare(ret,&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  3339. bluecell_Currdatastatus.ULO_Level2_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3340. bluecell_Currdatastatus.ULO_Level2_L = ((int16_t)ResdBm & 0x00FF);
  3341. CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL2_H,bluecell_Currdatastatus.ATT_UL2_L);
  3342. IwillGiveAtten = ALC_Calc(ALC_Alarm_UL2_Index,CurrentATTENVALUE,Limitdata,ResdBm);
  3343. if( (IwillGiveAtten > 0) || (CurrentATTENVALUE >= (IwillGiveAtten * -1))){
  3344. IwillGiveAtten *=10;
  3345. tempcurratten = CurrentATTENVALUE * 10;
  3346. bluecell_Currdatastatus.ATT_UL2_H = (((tempcurratten + IwillGiveAtten) & 0xFF00) >> 8);
  3347. bluecell_Currdatastatus.ATT_UL2_L = (tempcurratten + IwillGiveAtten) & 0x00FF;
  3348. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3349. }
  3350. CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL2_H,bluecell_Currdatastatus.ATT_UL2_L);
  3351. /***************************************************************************************************************/
  3352. /* ALC 3 */
  3353. /***************************************************************************************************************/
  3354. //ret 현재 Voltage 값 출력
  3355. //ret 에 따른 현재 DBM 구현
  3356. ret = bluecell_Currdatastatus.ULO_P3_Level3_H << 8;
  3357. ret += bluecell_Currdatastatus.ULO_P3_Level3_L;
  3358. ret *= 0.001;
  3359. Limitdata = (( bluecell_Currdatastatus.ULO_ALC_Threshold_H << 8) & 0xFF00) ;
  3360. Limitdata += bluecell_Currdatastatus.ULO_ALC_Threshold_L ;
  3361. Limitdata /= 10;
  3362. bluecell_Currdatastatus.ULO_Level3_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3363. bluecell_Currdatastatus.ULO_Level3_L = ((int16_t)ResdBm & 0x00FF);
  3364. // printf("==================START================\r\n");
  3365. ResdBm = AutoControl_ADC_Compare(ret,&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  3366. CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL3_H,bluecell_Currdatastatus.ATT_UL3_L);
  3367. IwillGiveAtten = ALC_Calc(ALC_Alarm_UL3_Index,CurrentATTENVALUE,Limitdata,ResdBm);
  3368. // printf("ADC : %f Current : %f Threas : %d : I WILL GIVE ATTEN : %d \r\n",ret,ResdBm , Limitdata,IwillGiveAtten);
  3369. if( (IwillGiveAtten > 0) || (CurrentATTENVALUE >= (IwillGiveAtten * -1))){
  3370. IwillGiveAtten *=10;
  3371. tempcurratten = CurrentATTENVALUE * 10;
  3372. bluecell_Currdatastatus.ATT_UL3_H = (((tempcurratten + IwillGiveAtten) & 0xFF00) >> 8);
  3373. bluecell_Currdatastatus.ATT_UL3_L = (tempcurratten + IwillGiveAtten) & 0x00FF;
  3374. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3375. }
  3376. CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL3_H,bluecell_Currdatastatus.ATT_UL3_L);
  3377. // printf("CurrentATTENVALUE : %f\r\n",CurrentATTENVALUE );
  3378. // printf("==================END================\r\n");
  3379. /***************************************************************************************************************/
  3380. /* ALC 4 */
  3381. /***************************************************************************************************************/
  3382. //ret 현재 Voltage 값 출력
  3383. //ret 에 따른 현재 DBM 구현
  3384. ret = bluecell_Currdatastatus.ULO_P4_Level4_H << 8;
  3385. ret += bluecell_Currdatastatus.ULO_P4_Level4_L;
  3386. ret *= 0.001;
  3387. Limitdata = (( bluecell_Currdatastatus.ULO_ALC_Threshold_H << 8) & 0xFF00) ;
  3388. Limitdata += bluecell_Currdatastatus.ULO_ALC_Threshold_L ;
  3389. Limitdata /= 10;
  3390. ResdBm = AutoControl_ADC_Compare(ret,&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  3391. bluecell_Currdatastatus.ULO_Level4_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3392. bluecell_Currdatastatus.ULO_Level4_H = ((int16_t)ResdBm & 0x00FF);
  3393. CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL4_H,bluecell_Currdatastatus.ATT_UL4_L);
  3394. IwillGiveAtten = ALC_Calc(ALC_Alarm_UL4_Index,CurrentATTENVALUE,Limitdata,ResdBm);
  3395. if( (IwillGiveAtten > 0) || (CurrentATTENVALUE >= (IwillGiveAtten * -1))){
  3396. IwillGiveAtten *=10;
  3397. tempcurratten = CurrentATTENVALUE * 10;
  3398. bluecell_Currdatastatus.ATT_UL4_H = (((tempcurratten + IwillGiveAtten) & 0xFF00) >> 8);
  3399. bluecell_Currdatastatus.ATT_UL4_L = (tempcurratten + IwillGiveAtten) & 0x00FF;
  3400. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3401. }
  3402. CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL4_H,bluecell_Currdatastatus.ATT_UL4_L);
  3403. #endif // PYJ.2020.05.22_END --
  3404. ALCTimerCnt = 0;
  3405. }else{
  3406. ret = bluecell_Currdatastatus.ULO_P1_Level1_H << 8;
  3407. ret += bluecell_Currdatastatus.ULO_P1_Level1_L;
  3408. ret *= 0.001;
  3409. ResdBm = AutoControl_ADC_Compare(ret,&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  3410. bluecell_Currdatastatus.ULO_Level1_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3411. bluecell_Currdatastatus.ULO_Level1_L = ((int16_t)ResdBm & 0x00FF);
  3412. ret = bluecell_Currdatastatus.ULO_P2_Level2_H << 8;
  3413. ret += bluecell_Currdatastatus.ULO_P2_Level2_L;
  3414. ret *= 0.001;
  3415. ResdBm = AutoControl_ADC_Compare(ret,&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  3416. bluecell_Currdatastatus.ULO_Level2_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3417. bluecell_Currdatastatus.ULO_Level2_L = ((int16_t)ResdBm & 0x00FF);
  3418. ret = bluecell_Currdatastatus.ULO_P3_Level3_H << 8;
  3419. ret += bluecell_Currdatastatus.ULO_P3_Level3_L;
  3420. ret *= 0.001;
  3421. ResdBm = AutoControl_ADC_Compare(ret,&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  3422. bluecell_Currdatastatus.ULO_Level3_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3423. bluecell_Currdatastatus.ULO_Level3_L = ((int16_t)ResdBm & 0x00FF);
  3424. ret = bluecell_Currdatastatus.ULO_P4_Level4_H << 8;
  3425. ret += bluecell_Currdatastatus.ULO_P4_Level4_L;
  3426. ret *= 0.001;
  3427. ResdBm = AutoControl_ADC_Compare(ret,&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
  3428. bluecell_Currdatastatus.ULO_Level4_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3429. bluecell_Currdatastatus.ULO_Level4_L = ((int16_t)ResdBm & 0x00FF);
  3430. }
  3431. }
  3432. }
  3433. //-15 ~ -5
  3434. int8_t AGC_Calc(int8_t threshold,int8_t CurrDet){
  3435. int8_t Attenret = 0;
  3436. if(threshold > CurrDet)
  3437. return Attenret;
  3438. if(threshold != CurrDet){
  3439. Attenret = (threshold - CurrDet) * -1;
  3440. }
  3441. // printf("Attenret : %d \r\n",Attenret);
  3442. return Attenret;
  3443. }
  3444. bool AGC_AlarmSet[AGC_Alarm_DL_Index_MAX] = {0,};
  3445. //bool AGC_AlarmTimerSet[AGC_Alarm_DL_Index_MAX] = {false,};
  3446. void AGC_Alarm_Check(uint8_t Path_Index,double AGC_Det,uint8_t* AGC_Table,uint16_t CurrAtten){
  3447. double TableAdc = 0;
  3448. double PrevTableAdc = 0;
  3449. double step = 0;
  3450. TableAdc = AGC_Table[0] << 8;
  3451. TableAdc += AGC_Table[1];
  3452. TableAdc /= 1000;
  3453. PrevTableAdc = AGC_Table[2] << 8;
  3454. PrevTableAdc += AGC_Table[3];
  3455. PrevTableAdc /= 1000;
  3456. step = TableAdc - PrevTableAdc;
  3457. if(AGC_Det > TableAdc + step){/*Alarm Enable*/
  3458. AGC_AlarmSet[Path_Index] = true; /*Alarm Check val*/
  3459. // AGC_AlarmTimerSet[Path_Index] = false;/*Alarm Timer Setting Val*/
  3460. // AGCAlarmTimerCnt[Path_Index] = 0;/*Alarm Time Cnt Val*/
  3461. // printf("AGC ALARM ON %d \r\n",Path_Index + 1);
  3462. }else{/*Alarm Disable*/
  3463. // if(AGC_AlarmSet[Path_Index] == true && CurrAtten <= 18){/*Alarm Disalbe Condition*/
  3464. // AGC_AlarmTimerSet[Path_Index] = true;
  3465. // }else{/*Alarm Disalbe Fail*/
  3466. // AGC_AlarmTimerSet[Path_Index] = false;
  3467. // AGCAlarmTimerCnt[Path_Index] = 0;
  3468. // }
  3469. // if(AGCAlarmTimerCnt[Path_Index] > 3000){
  3470. AGC_AlarmSet[Path_Index] = false;
  3471. // }
  3472. }
  3473. }
  3474. void AGC_Function(){//DL
  3475. double ret = 0;
  3476. int8_t ResdBm = 0;
  3477. int16_t Levelret = 0;
  3478. int i = 0;
  3479. int16_t Limitdata = 0;
  3480. uint16_t IwillgiveAtten = 0;
  3481. if(AGCTimerCnt > 100){
  3482. if(bluecell_Currdatastatus.DLI_AGC_ON_OFF == true){
  3483. #if 1 // PYJ.2020.05.25_BEGIN --
  3484. ret = bluecell_Currdatastatus.DLI_P1_Level1_H << 8;
  3485. ret += bluecell_Currdatastatus.DLI_P1_Level1_L;
  3486. ret *= 0.001;
  3487. ResdBm = (int8_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL1.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  3488. bluecell_Currdatastatus.DLI_Level1_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3489. bluecell_Currdatastatus.DLI_Level1_L = ((int16_t)ResdBm & 0x00FF);
  3490. //ret 현재 Voltage 값 출력
  3491. //ret 에 따른 현재 DBM 구현
  3492. for(i = 0; i < sizeof(AGC_dBm_t); i++){
  3493. if(AGC_Table_ref[i] == ResdBm)
  3494. break;
  3495. }
  3496. Limitdata = (( bluecell_Currdatastatus.DLI_AGC_Threshold_H << 8) & 0xFF00) ;
  3497. Limitdata += bluecell_Currdatastatus.DLI_AGC_Threshold_L ;
  3498. Limitdata /= 10;
  3499. // printf("==================================\r\n");
  3500. // printf("Current DL1 ADC VALUE : %f \r\n",ret);
  3501. // printf("ResdBm : DL1 : %d \r\n",ResdBm);
  3502. // printf("AGC_Table_ref[%d] : %d\r\n",i,AGC_Table_ref[i]);
  3503. // printf("I WILL GIVE YOU ATTEN : %d\r\n",AGC_Calc(Limitdata,ResdBm));
  3504. // printf("AGC : %d\r\n",Limitdata);
  3505. // HAL_Delay(1000);
  3506. IwillgiveAtten = AGC_Calc(Limitdata,ResdBm);
  3507. AGC_Alarm_Check(AGC_Alarm_DL1_Index,ret,&Det_DL1.Table_Det5_dBm_H,IwillgiveAtten);
  3508. bluecell_Currdatastatus.ATT_DL1_H = (((IwillgiveAtten * 10) & 0xFF00) >> 8) ;
  3509. bluecell_Currdatastatus.ATT_DL1_L = (((IwillgiveAtten * 10) & 0x00FF));
  3510. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3511. ret = bluecell_Currdatastatus.DLI_P2_Level2_H << 8;
  3512. ret += bluecell_Currdatastatus.DLI_P2_Level2_L;
  3513. ret *= 0.001;
  3514. ResdBm = (int8_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL2.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  3515. bluecell_Currdatastatus.DLI_Level2_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3516. bluecell_Currdatastatus.DLI_Level2_L = ((int16_t)ResdBm & 0x00FF);
  3517. for(i = 0; i < sizeof(AGC_dBm_t); i++){
  3518. if(AGC_Table_ref[i] == ResdBm)
  3519. break;
  3520. }
  3521. Limitdata = (( bluecell_Currdatastatus.DLI_AGC_Threshold_H << 8) & 0xFF00) ;
  3522. Limitdata += bluecell_Currdatastatus.DLI_AGC_Threshold_L ;
  3523. Limitdata /= 10;
  3524. // printf("==================================\r\n");
  3525. // printf("Current DL2 ADC VALUE : %f \r\n",ret);
  3526. // printf("ResdBm : DL2 : %d \r\n",ResdBm);
  3527. // printf("AGC_Table_ref[%d] : %d\r\n",i,AGC_Table_ref[i]);
  3528. // printf("I WILL GIVE YOU ATTEN : %d\r\n",AGC_Calc(Limitdata,ResdBm));
  3529. // printf("AGC : %d\r\n",Limitdata);
  3530. // HAL_Delay(1000);
  3531. IwillgiveAtten = AGC_Calc(Limitdata,ResdBm);
  3532. AGC_Alarm_Check(AGC_Alarm_DL2_Index,ret,&Det_DL2.Table_Det5_dBm_H,IwillgiveAtten);
  3533. bluecell_Currdatastatus.ATT_DL2_H = (((IwillgiveAtten * 10) & 0xFF00) >> 8) ;
  3534. bluecell_Currdatastatus.ATT_DL2_L = (((IwillgiveAtten * 10) & 0x00FF));
  3535. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3536. ret = bluecell_Currdatastatus.DLI_P3_Level3_H << 8;
  3537. ret += bluecell_Currdatastatus.DLI_P3_Level3_L;
  3538. ret *= 0.001;
  3539. ResdBm = (int8_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL3.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  3540. bluecell_Currdatastatus.DLI_Level3_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3541. bluecell_Currdatastatus.DLI_Level3_L = ((int16_t)ResdBm & 0x00FF);
  3542. for(i = 0; i < sizeof(AGC_dBm_t); i++){
  3543. if(AGC_Table_ref[i] == ResdBm)
  3544. break;
  3545. }
  3546. Limitdata = (( bluecell_Currdatastatus.DLI_AGC_Threshold_H << 8) & 0xFF00) ;
  3547. Limitdata += bluecell_Currdatastatus.DLI_AGC_Threshold_L ;
  3548. Limitdata /= 10;
  3549. // printf("==================================\r\n");
  3550. // printf("Current DL3 ADC VALUE : %f \r\n",ret);
  3551. // printf("ResdBm : DL3 : %d \r\n",ResdBm);
  3552. // printf("AGC_Table_ref[%d] : %d\r\n",i,AGC_Table_ref[i]);
  3553. // printf("I WILL GIVE YOU ATTEN : %d\r\n",AGC_Calc(Limitdata,ResdBm));
  3554. // printf("AGC : %d\r\n",Limitdata);
  3555. // HAL_Delay(1000);
  3556. IwillgiveAtten = AGC_Calc(Limitdata,ResdBm);
  3557. AGC_Alarm_Check(AGC_Alarm_DL3_Index,ret,&Det_DL3.Table_Det5_dBm_H,IwillgiveAtten);
  3558. bluecell_Currdatastatus.ATT_DL3_H = (((IwillgiveAtten * 10) & 0xFF00) >> 8) ;
  3559. bluecell_Currdatastatus.ATT_DL3_L = (((IwillgiveAtten * 10) & 0x00FF));
  3560. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3561. #endif // PYJ.2020.05.25_END --
  3562. ret = bluecell_Currdatastatus.DLI_P4_Level4_H << 8;
  3563. ret += bluecell_Currdatastatus.DLI_P4_Level4_L;
  3564. ret *= 0.001;
  3565. ResdBm = (int8_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL4.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  3566. bluecell_Currdatastatus.DLI_Level4_H = ((int16_t)ResdBm & 0xFF00) >> 8;
  3567. bluecell_Currdatastatus.DLI_Level4_L = ((int16_t)ResdBm & 0x00FF);
  3568. for(i = 0; i < sizeof(AGC_dBm_t); i++){
  3569. if(AGC_Table_ref[i] == ResdBm)
  3570. break;
  3571. }
  3572. Limitdata = (( bluecell_Currdatastatus.DLI_AGC_Threshold_H << 8) & 0xFF00) ;
  3573. Limitdata += bluecell_Currdatastatus.DLI_AGC_Threshold_L ;
  3574. Limitdata /= 10;
  3575. // printf("==================================\r\n");
  3576. // printf("Current DL4 ADC VALUE : %f \r\n",ret);
  3577. // printf("ResdBm : DL4 : %d \r\n",ResdBm);
  3578. // printf("AGC_Table_ref[%d] : %d\r\n",i,AGC_Table_ref[i]);
  3579. // printf("I WILL GIVE YOU ATTEN : %d\r\n",AGC_Calc(Limitdata,ResdBm));
  3580. // printf("AGC : %d\r\n",Limitdata);
  3581. // HAL_Delay(1000);
  3582. IwillgiveAtten = AGC_Calc(Limitdata,ResdBm);
  3583. AGC_Alarm_Check(AGC_Alarm_DL4_Index,ret,&Det_DL4.Table_Det5_dBm_H,IwillgiveAtten);
  3584. bluecell_Currdatastatus.ATT_DL4_H = (((IwillgiveAtten * 10) & 0xFF00) >> 8) ;
  3585. bluecell_Currdatastatus.ATT_DL4_L = (((IwillgiveAtten * 10) & 0x00FF));
  3586. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3587. }else{
  3588. ret = bluecell_Currdatastatus.DLI_P1_Level1_H << 8;
  3589. ret += bluecell_Currdatastatus.DLI_P1_Level1_L;
  3590. ret *= 0.001;
  3591. Levelret = (int16_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL1.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  3592. bluecell_Currdatastatus.DLI_Level1_H = (Levelret & 0xFF00) >> 8;
  3593. bluecell_Currdatastatus.DLI_Level1_L = (Levelret & 0x00FF);
  3594. ret = bluecell_Currdatastatus.DLI_P2_Level2_H << 8;
  3595. ret += bluecell_Currdatastatus.DLI_P2_Level2_L;
  3596. ret *= 0.001;
  3597. Levelret = (int16_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL2.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  3598. bluecell_Currdatastatus.DLI_Level2_H = (Levelret & 0xFF00) >> 8;
  3599. bluecell_Currdatastatus.DLI_Level2_L = (Levelret & 0x00FF);
  3600. ret = bluecell_Currdatastatus.DLI_P3_Level3_H << 8;
  3601. ret += bluecell_Currdatastatus.DLI_P3_Level3_L;
  3602. ret *= 0.001;
  3603. Levelret = (int16_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL3.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  3604. bluecell_Currdatastatus.DLI_Level3_H = (Levelret & 0xFF00) >> 8;
  3605. bluecell_Currdatastatus.DLI_Level3_L = (Levelret & 0x00FF);
  3606. ret = bluecell_Currdatastatus.DLI_P3_Level3_H << 8;
  3607. ret += bluecell_Currdatastatus.DLI_P3_Level3_L;
  3608. ret *= 0.001;
  3609. Levelret = (int16_t)Bluecell_TestPro(AGC_AutoControl_ADC_Compare(ret,&Det_DL4.Table_Det5_dBm_H,sizeof(DET_TABLEDL_st)));
  3610. bluecell_Currdatastatus.DLI_Level4_H = (Levelret & 0xFF00) >> 8;
  3611. bluecell_Currdatastatus.DLI_Level4_L = (Levelret & 0x00FF);
  3612. }
  3613. AGCTimerCnt = 0;
  3614. }
  3615. }
  3616. void DLI_LevelAlarmCheck(){
  3617. double temp = 0;
  3618. double ret = 0;
  3619. int8_t ResdBm[4] = {0,};
  3620. /*********************DL LEVEL LOW START****************************/
  3621. if(DET_DL_Low_On_AlarmTimerCnt[DET_Alarm_DL1_Index] >= MBIC_ON_MAINTAIN_SEC
  3622. &&ADC_Alarm_DL_Low_Set[DET_Alarm_DL1_Index] == true){
  3623. bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P1_LEVEL_LOW;
  3624. bluecell_Currdatastatus.DLI_Level_Low_Alarm1 = true;
  3625. }else{/**/
  3626. if(DET_DL_Low_Off_AlarmTimerCnt[DET_Alarm_DL1_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3627. bluecell_Currdatastatus.ALARM_DLI_Level &= ~ALARM_DLI_P1_LEVEL_LOW;
  3628. bluecell_Currdatastatus.DLI_Level_Low_Alarm1 = false;
  3629. }
  3630. }
  3631. if(DET_DL_Low_On_AlarmTimerCnt[DET_Alarm_DL2_Index] >= MBIC_ON_MAINTAIN_SEC
  3632. &&ADC_Alarm_DL_Low_Set[DET_Alarm_DL2_Index] == true){
  3633. bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P2_LEVEL_LOW;
  3634. bluecell_Currdatastatus.DLI_Level_Low_Alarm2 = true;
  3635. }else{
  3636. if(DET_DL_Low_Off_AlarmTimerCnt[DET_Alarm_DL2_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3637. bluecell_Currdatastatus.ALARM_DLI_Level &= ~ALARM_DLI_P2_LEVEL_LOW;
  3638. bluecell_Currdatastatus.DLI_Level_Low_Alarm2 = false;
  3639. }
  3640. }
  3641. if(DET_DL_Low_On_AlarmTimerCnt[DET_Alarm_DL3_Index] >= MBIC_ON_MAINTAIN_SEC
  3642. &&ADC_Alarm_DL_Low_Set[DET_Alarm_DL3_Index] == true){
  3643. bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P3_LEVEL_LOW;
  3644. bluecell_Currdatastatus.DLI_Level_Low_Alarm3 = true;
  3645. }else{
  3646. if(DET_DL_Low_Off_AlarmTimerCnt[DET_Alarm_DL3_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3647. bluecell_Currdatastatus.ALARM_DLI_Level &= ~ALARM_DLI_P3_LEVEL_LOW;
  3648. bluecell_Currdatastatus.DLI_Level_Low_Alarm3 = false;
  3649. }
  3650. }
  3651. if(DET_DL_Low_On_AlarmTimerCnt[DET_Alarm_DL4_Index] >= MBIC_ON_MAINTAIN_SEC
  3652. &&ADC_Alarm_DL_Low_Set[DET_Alarm_DL4_Index] == true){
  3653. bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P4_LEVEL_LOW;
  3654. bluecell_Currdatastatus.DLI_Level_Low_Alarm4 = true;
  3655. }else{
  3656. if(DET_DL_Low_Off_AlarmTimerCnt[DET_Alarm_DL4_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3657. bluecell_Currdatastatus.ALARM_DLI_Level &= ~ALARM_DLI_P4_LEVEL_LOW;
  3658. bluecell_Currdatastatus.DLI_Level_Low_Alarm4 = false;
  3659. }
  3660. }
  3661. /*********************DL LEVEL HIGH START***************************/
  3662. if(DET_DL_High_On_AlarmTimerCnt[DET_Alarm_DL1_Index] >= MBIC_ON_MAINTAIN_SEC
  3663. &&ADC_Alarm_DL_High_Set[DET_Alarm_DL1_Index] == true){
  3664. bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P1_LEVEL_HIGH;
  3665. bluecell_Currdatastatus.DLI_Level_High_Alarm1 = true;
  3666. }else{/**/
  3667. if(DET_DL_High_Off_AlarmTimerCnt[DET_Alarm_DL1_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3668. bluecell_Currdatastatus.ALARM_DLI_Level &= ~ALARM_DLI_P1_LEVEL_HIGH;
  3669. bluecell_Currdatastatus.DLI_Level_High_Alarm1 = false;
  3670. }
  3671. }
  3672. if(DET_DL_High_On_AlarmTimerCnt[DET_Alarm_DL2_Index] >= MBIC_ON_MAINTAIN_SEC
  3673. &&ADC_Alarm_DL_High_Set[DET_Alarm_DL2_Index] == true){
  3674. bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P2_LEVEL_HIGH;
  3675. bluecell_Currdatastatus.DLI_Level_High_Alarm2 = true;
  3676. }else{
  3677. if(DET_DL_High_Off_AlarmTimerCnt[DET_Alarm_DL2_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3678. bluecell_Currdatastatus.ALARM_DLI_Level &= ~ALARM_DLI_P2_LEVEL_HIGH;
  3679. bluecell_Currdatastatus.DLI_Level_High_Alarm2 = false;
  3680. }
  3681. }
  3682. if(DET_DL_High_On_AlarmTimerCnt[DET_Alarm_DL3_Index] >= MBIC_ON_MAINTAIN_SEC
  3683. &&ADC_Alarm_DL_High_Set[DET_Alarm_DL3_Index] == true){
  3684. bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P3_LEVEL_HIGH;
  3685. bluecell_Currdatastatus.DLI_Level_High_Alarm3 = true;
  3686. }else{
  3687. if(DET_DL_High_Off_AlarmTimerCnt[DET_Alarm_DL3_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3688. bluecell_Currdatastatus.ALARM_DLI_Level &= ~ALARM_DLI_P3_LEVEL_HIGH;
  3689. bluecell_Currdatastatus.DLI_Level_High_Alarm3 = false;
  3690. }
  3691. }
  3692. if(DET_DL_High_On_AlarmTimerCnt[DET_Alarm_DL4_Index] >= MBIC_ON_MAINTAIN_SEC
  3693. &&ADC_Alarm_DL_High_Set[DET_Alarm_DL4_Index] == true){
  3694. bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P4_LEVEL_HIGH;
  3695. bluecell_Currdatastatus.DLI_Level_High_Alarm4 = true;
  3696. }else{
  3697. if(DET_DL_High_Off_AlarmTimerCnt[DET_Alarm_DL4_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3698. bluecell_Currdatastatus.ALARM_DLI_Level &= ~ALARM_DLI_P4_LEVEL_HIGH;
  3699. bluecell_Currdatastatus.DLI_Level_High_Alarm4 = false;
  3700. }
  3701. }
  3702. }
  3703. void ULO_LevelAlarmCheck(){
  3704. double temp = 0;
  3705. double ret = 0;
  3706. int8_t ResdBm[4] = {0,};
  3707. #if 1 // PYJ.2020.05.27_BEGIN --
  3708. if(DET_UL_On_AlarmTimerCnt[DET_Alarm_UL1_Index] >= MBIC_ON_MAINTAIN_SEC
  3709. &&ADC_Alarm_UL_Set[DET_Alarm_UL1_Index] == true){
  3710. bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P1_LEVEL_HIGH;
  3711. bluecell_Currdatastatus.ULO_Level_High_Alarm1 = true;
  3712. }else{/**/
  3713. if(DET_UL_Off_AlarmTimerCnt[DET_Alarm_UL1_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3714. bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P1_LEVEL_HIGH;
  3715. bluecell_Currdatastatus.ULO_Level_High_Alarm1 = false;
  3716. }
  3717. }
  3718. if(DET_UL_On_AlarmTimerCnt[DET_Alarm_UL2_Index] >= MBIC_ON_MAINTAIN_SEC
  3719. &&ADC_Alarm_UL_Set[DET_Alarm_UL2_Index] == true){
  3720. bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P2_LEVEL_HIGH;
  3721. bluecell_Currdatastatus.ULO_Level_High_Alarm2 = true;
  3722. }else{
  3723. if(DET_UL_Off_AlarmTimerCnt[DET_Alarm_UL2_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3724. bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P2_LEVEL_HIGH;
  3725. bluecell_Currdatastatus.ULO_Level_High_Alarm2 = false;
  3726. }
  3727. }
  3728. if(DET_UL_On_AlarmTimerCnt[DET_Alarm_UL3_Index] >= MBIC_ON_MAINTAIN_SEC
  3729. &&ADC_Alarm_UL_Set[DET_Alarm_UL3_Index] == true){
  3730. bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P3_LEVEL_HIGH;
  3731. bluecell_Currdatastatus.ULO_Level_High_Alarm3 = true;
  3732. }else{
  3733. if(DET_UL_Off_AlarmTimerCnt[DET_Alarm_UL3_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3734. bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P3_LEVEL_HIGH;
  3735. bluecell_Currdatastatus.ULO_Level_High_Alarm3 = false;
  3736. }
  3737. }
  3738. if(DET_UL_On_AlarmTimerCnt[DET_Alarm_UL4_Index] >= MBIC_ON_MAINTAIN_SEC
  3739. &&ADC_Alarm_UL_Set[DET_Alarm_UL4_Index] == true){
  3740. bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P4_LEVEL_HIGH;
  3741. bluecell_Currdatastatus.ULO_Level_High_Alarm4 = true;
  3742. }else{
  3743. if(DET_UL_Off_AlarmTimerCnt[DET_Alarm_UL4_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3744. bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P4_LEVEL_HIGH;
  3745. bluecell_Currdatastatus.ULO_Level_High_Alarm4 = false;
  3746. }
  3747. }
  3748. #else
  3749. if(ADC_Alarm_UL_Set[DET_Alarm_UL1_Index] == true){
  3750. bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P1_LEVEL_HIGH;
  3751. bluecell_Currdatastatus.ULO_Level_High_Alarm1 = true;
  3752. }else{
  3753. bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P1_LEVEL_HIGH;
  3754. bluecell_Currdatastatus.ULO_Level_High_Alarm1 = false;
  3755. }
  3756. if(ADC_Alarm_UL_Set[DET_Alarm_UL2_Index] == true){
  3757. bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P2_LEVEL_HIGH;
  3758. bluecell_Currdatastatus.ULO_Level_High_Alarm2 = true;
  3759. }else{
  3760. bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P2_LEVEL_HIGH;
  3761. bluecell_Currdatastatus.ULO_Level_High_Alarm2 = false;
  3762. }
  3763. if(ADC_Alarm_UL_Set[DET_Alarm_UL3_Index] == true){
  3764. bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P3_LEVEL_HIGH;
  3765. bluecell_Currdatastatus.ULO_Level_High_Alarm3 = true;
  3766. }else{
  3767. bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P3_LEVEL_HIGH;
  3768. bluecell_Currdatastatus.ULO_Level_High_Alarm3 = false;
  3769. }
  3770. if(ADC_Alarm_UL_Set[DET_Alarm_UL4_Index] == true){
  3771. bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P4_LEVEL_HIGH;
  3772. bluecell_Currdatastatus.ULO_Level_High_Alarm4 = true;
  3773. }else{
  3774. bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P4_LEVEL_HIGH;
  3775. bluecell_Currdatastatus.ULO_Level_High_Alarm4 = false;
  3776. }
  3777. #endif // PYJ.2020.05.27_END --
  3778. }
  3779. void DLI_ShutdownAlarmCheck(){
  3780. double temp = 0;
  3781. double ret = 0;
  3782. int8_t ResdBm[4] = {0,};
  3783. if(bluecell_Currdatastatus.DLI_Shutdown_ON_OFF == true){
  3784. if(ADC_Alarm_DL_Shutdown_Set[DET_Alarm_DL1_Shutdown_Index] == true
  3785. &&DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL1_Shutdown_Index] >= MBIC_ON_SHUTDOWN_MAINTAIN_SEC)
  3786. {
  3787. if(bluecell_Currdatastatus.DLI_Shutdown_Retry_Count1 >= RETRYCNT_MAX){
  3788. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN |= ALARM_DLI_SHUTDOWN_P1;
  3789. bluecell_Currdatastatus.DLI_Shutdown_Alarm1 = true;
  3790. HAL_GPIO_WritePin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin,GPIO_PIN_RESET);//CLOCK
  3791. bluecell_Currdatastatus.ATT_DL1_PATH = false;
  3792. }else{
  3793. if(HAL_GPIO_ReadPin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin) == GPIO_PIN_SET)
  3794. {//CLOCK;
  3795. bluecell_Currdatastatus.DLI_Shutdown_Retry_Count1++;
  3796. }
  3797. /*ShutDown Inc*/
  3798. if(DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL1_Shutdown_Index] >= MBIC_RECOVERY_SHUTDOWN_MAINTAIN_SEC){
  3799. /*Path Recovery*/
  3800. HAL_GPIO_WritePin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin,GPIO_PIN_SET);//CLOCK
  3801. bluecell_Prevdatastatus.ATT_DL1_H = ~bluecell_Prevdatastatus.ATT_DL1_H;
  3802. bluecell_Prevdatastatus.ATT_DL1_L = ~bluecell_Prevdatastatus.ATT_DL1_L;
  3803. bluecell_Currdatastatus.ATT_DL1_PATH = true;
  3804. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3805. DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL1_Shutdown_Index] = 0;
  3806. }else{
  3807. /*Path Off*/
  3808. HAL_GPIO_WritePin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin,GPIO_PIN_RESET);//CLOCK
  3809. bluecell_Currdatastatus.ATT_DL1_PATH = false;
  3810. }
  3811. }
  3812. }
  3813. else{
  3814. if(DET_DL_Shutdown_Off_AlarmTimerCnt[DET_Alarm_DL1_Shutdown_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3815. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN &= ~ALARM_DLI_SHUTDOWN_P1;
  3816. bluecell_Currdatastatus.DLI_Shutdown_Alarm1 = false;
  3817. }
  3818. }
  3819. if(ADC_Alarm_DL_Shutdown_Set[DET_Alarm_DL2_Shutdown_Index] == true
  3820. &&DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL2_Shutdown_Index] >= MBIC_ON_SHUTDOWN_MAINTAIN_SEC)
  3821. {
  3822. if(bluecell_Currdatastatus.DLI_Shutdown_Retry_Count2 >= RETRYCNT_MAX){
  3823. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN |= ALARM_DLI_SHUTDOWN_P2;
  3824. bluecell_Currdatastatus.DLI_Shutdown_Alarm2 = true;
  3825. HAL_GPIO_WritePin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin,GPIO_PIN_RESET);//CLOCK
  3826. bluecell_Currdatastatus.ATT_DL2_PATH = false;
  3827. }else{
  3828. if(HAL_GPIO_ReadPin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin) == GPIO_PIN_SET)
  3829. {//CLOCK;
  3830. bluecell_Currdatastatus.DLI_Shutdown_Retry_Count2++;
  3831. }
  3832. /*ShutDown Inc*/
  3833. if(DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL2_Shutdown_Index] >= MBIC_RECOVERY_SHUTDOWN_MAINTAIN_SEC){
  3834. /*Path Recovery*/
  3835. HAL_GPIO_WritePin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin,GPIO_PIN_SET);//CLOCK
  3836. bluecell_Prevdatastatus.ATT_DL2_H = ~bluecell_Prevdatastatus.ATT_DL2_H;
  3837. bluecell_Prevdatastatus.ATT_DL2_L = ~bluecell_Prevdatastatus.ATT_DL2_L;
  3838. bluecell_Currdatastatus.ATT_DL2_PATH = true;
  3839. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3840. DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL2_Shutdown_Index] = 0;
  3841. }else{
  3842. /*Path Off*/
  3843. HAL_GPIO_WritePin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin,GPIO_PIN_RESET);//CLOCK
  3844. bluecell_Currdatastatus.ATT_DL2_PATH = false;
  3845. }
  3846. }
  3847. }
  3848. else{
  3849. if(DET_DL_Shutdown_Off_AlarmTimerCnt[DET_Alarm_DL2_Shutdown_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3850. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN &= ~ALARM_DLI_SHUTDOWN_P2;
  3851. bluecell_Currdatastatus.DLI_Shutdown_Alarm2 = false;
  3852. }
  3853. }
  3854. if(ADC_Alarm_DL_Shutdown_Set[DET_Alarm_DL3_Shutdown_Index] == true
  3855. &&DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL3_Shutdown_Index] >= MBIC_ON_SHUTDOWN_MAINTAIN_SEC)
  3856. {
  3857. if(bluecell_Currdatastatus.DLI_Shutdown_Retry_Count3 >= RETRYCNT_MAX){
  3858. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN |= ALARM_DLI_SHUTDOWN_P3;
  3859. bluecell_Currdatastatus.DLI_Shutdown_Alarm3 = true;
  3860. HAL_GPIO_WritePin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin,GPIO_PIN_RESET);//CLOCK
  3861. bluecell_Currdatastatus.ATT_DL3_PATH = false;
  3862. }else{
  3863. if(HAL_GPIO_ReadPin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin) == GPIO_PIN_SET)
  3864. {//CLOCK;
  3865. bluecell_Currdatastatus.DLI_Shutdown_Retry_Count3++;
  3866. }
  3867. /*ShutDown Inc*/
  3868. if(DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL3_Shutdown_Index] >= MBIC_RECOVERY_SHUTDOWN_MAINTAIN_SEC){
  3869. /*Path Recovery*/
  3870. HAL_GPIO_WritePin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin,GPIO_PIN_SET);//CLOCK
  3871. bluecell_Prevdatastatus.ATT_DL3_H = ~bluecell_Prevdatastatus.ATT_DL3_H;
  3872. bluecell_Prevdatastatus.ATT_DL3_L = ~bluecell_Prevdatastatus.ATT_DL3_L;
  3873. bluecell_Currdatastatus.ATT_DL3_PATH = true;
  3874. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3875. DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL3_Shutdown_Index] = 0;
  3876. }else{
  3877. /*Path Off*/
  3878. HAL_GPIO_WritePin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin,GPIO_PIN_RESET);//CLOCK
  3879. bluecell_Currdatastatus.ATT_DL3_PATH = false;
  3880. }
  3881. }
  3882. }
  3883. else{
  3884. if(DET_DL_Shutdown_Off_AlarmTimerCnt[DET_Alarm_DL3_Shutdown_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3885. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN &= ~ALARM_DLI_SHUTDOWN_P3;
  3886. bluecell_Currdatastatus.DLI_Shutdown_Alarm3 = false;
  3887. }
  3888. }
  3889. if(ADC_Alarm_DL_Shutdown_Set[DET_Alarm_DL4_Shutdown_Index] == true
  3890. &&DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL4_Shutdown_Index] >= MBIC_ON_SHUTDOWN_MAINTAIN_SEC)
  3891. {
  3892. if(bluecell_Currdatastatus.DLI_Shutdown_Retry_Count4 >= RETRYCNT_MAX){
  3893. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN |= ALARM_DLI_SHUTDOWN_P4;
  3894. bluecell_Currdatastatus.DLI_Shutdown_Alarm4 = true;
  3895. HAL_GPIO_WritePin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin,GPIO_PIN_RESET);//CLOCK
  3896. bluecell_Currdatastatus.ATT_DL4_PATH = false;
  3897. }else{
  3898. if(HAL_GPIO_ReadPin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin) == GPIO_PIN_SET)
  3899. {//CLOCK;
  3900. bluecell_Currdatastatus.DLI_Shutdown_Retry_Count4++;
  3901. }
  3902. /*ShutDown Inc*/
  3903. if(DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL4_Shutdown_Index] >= MBIC_RECOVERY_SHUTDOWN_MAINTAIN_SEC){
  3904. /*Path Recovery*/
  3905. HAL_GPIO_WritePin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin,GPIO_PIN_SET);//CLOCK
  3906. bluecell_Prevdatastatus.ATT_DL4_H = ~bluecell_Prevdatastatus.ATT_DL4_H;
  3907. bluecell_Prevdatastatus.ATT_DL4_L = ~bluecell_Prevdatastatus.ATT_DL4_L;
  3908. bluecell_Currdatastatus.ATT_DL4_PATH = true;
  3909. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3910. DET_DL_Shutdown_On_AlarmTimerCnt[DET_Alarm_DL4_Shutdown_Index] = 0;
  3911. }else{
  3912. /*Path Off*/
  3913. HAL_GPIO_WritePin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin,GPIO_PIN_RESET);//CLOCK
  3914. bluecell_Currdatastatus.ATT_DL4_PATH = false;
  3915. }
  3916. }
  3917. }
  3918. else{
  3919. if(DET_DL_Shutdown_Off_AlarmTimerCnt[DET_Alarm_DL4_Shutdown_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3920. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN &= ~ALARM_DLI_SHUTDOWN_P4;
  3921. bluecell_Currdatastatus.DLI_Shutdown_Alarm4 = false;
  3922. }
  3923. }
  3924. }
  3925. else{
  3926. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN = 0;
  3927. bluecell_Currdatastatus.DLI_Shutdown_Alarm1 = false;
  3928. bluecell_Currdatastatus.DLI_Shutdown_Alarm2 = false;
  3929. bluecell_Currdatastatus.DLI_Shutdown_Alarm3 = false;
  3930. bluecell_Currdatastatus.DLI_Shutdown_Alarm4 = false;
  3931. }
  3932. }
  3933. void ULO_ShutdownAlarmCheck(){
  3934. double temp = 0;
  3935. double ret = 0;
  3936. int8_t ResdBm[4] = {0,};
  3937. // if(ALC_AlarmSet[ALC_Alarm_UL1_Index] == true
  3938. // &&ALC_On_AlarmTimerCnt[ALC_Alarm_UL1_Index] >= MBIC_ON_MAINTAIN_SEC){
  3939. // printf("ALARM_ALC_P1 OCCUR\r\n");
  3940. // bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm |= ALARM_ALC_P1;
  3941. // bluecell_Currdatastatus.ULO_ALC_Alarm1 = true;
  3942. // }else{
  3943. // if(ALC_On_AlarmTimerCnt[ALC_Alarm_UL1_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3944. // bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm &= ~ALARM_ALC_P1;
  3945. // bluecell_Currdatastatus.ULO_ALC_Alarm1 = false;
  3946. // }
  3947. // }
  3948. if(bluecell_Currdatastatus.ULO_Shutdown_ON_OFF == true){
  3949. if(ADC_Alarm_UL_Shutdown_Set[DET_Alarm_UL1_Shutdown_Index] == true
  3950. &&DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL1_Shutdown_Index] >= MBIC_ON_SHUTDOWN_MAINTAIN_SEC)
  3951. {
  3952. if(bluecell_Currdatastatus.ULO_Shutdown_Retry_Count1 >= RETRYCNT_MAX){
  3953. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P1;
  3954. bluecell_Currdatastatus.ULO_Shutdown_Alarm1 = true;
  3955. HAL_GPIO_WritePin(PATH_EN_UL1_GPIO_Port,PATH_EN_UL1_Pin,GPIO_PIN_RESET);//CLOCK
  3956. bluecell_Currdatastatus.ATT_UL1_PATH = false;
  3957. }else{
  3958. if(HAL_GPIO_ReadPin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin) == GPIO_PIN_SET)
  3959. {//CLOCK;
  3960. bluecell_Currdatastatus.ULO_Shutdown_Retry_Count1++;
  3961. }
  3962. /*ShutDown Inc*/
  3963. if(DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL1_Shutdown_Index] >= MBIC_RECOVERY_SHUTDOWN_MAINTAIN_SEC){
  3964. /*Path Recovery*/
  3965. HAL_GPIO_WritePin(PATH_EN_UL1_GPIO_Port,PATH_EN_UL1_Pin,GPIO_PIN_SET);//CLOCK
  3966. bluecell_Prevdatastatus.ATT_UL1_H = ~bluecell_Prevdatastatus.ATT_UL1_H;
  3967. bluecell_Prevdatastatus.ATT_UL1_L = ~bluecell_Prevdatastatus.ATT_UL1_L;
  3968. bluecell_Currdatastatus.ATT_UL1_PATH = true;
  3969. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  3970. DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL1_Shutdown_Index] = 0;
  3971. }else{
  3972. /*Path Off*/
  3973. HAL_GPIO_WritePin(PATH_EN_UL1_GPIO_Port,PATH_EN_UL1_Pin,GPIO_PIN_RESET);//CLOCK
  3974. bluecell_Currdatastatus.ATT_UL1_PATH = false;
  3975. }
  3976. }
  3977. }
  3978. else{
  3979. if(DET_UL_Shutdown_Off_AlarmTimerCnt[DET_Alarm_UL1_Shutdown_Index] >= MBIC_OFF_MAINTAIN_SEC){
  3980. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN &= ~ALARM_ULO_SHUTDOWN_P1;
  3981. bluecell_Currdatastatus.ULO_Shutdown_Alarm1 = false;
  3982. }
  3983. }
  3984. if(ADC_Alarm_UL_Shutdown_Set[DET_Alarm_UL2_Shutdown_Index] == true
  3985. &&DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL2_Shutdown_Index] >= MBIC_ON_SHUTDOWN_MAINTAIN_SEC)
  3986. {
  3987. if(bluecell_Currdatastatus.ULO_Shutdown_Retry_Count2 >= RETRYCNT_MAX){
  3988. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P2;
  3989. bluecell_Currdatastatus.ULO_Shutdown_Alarm2 = true;
  3990. HAL_GPIO_WritePin(PATH_EN_UL2_GPIO_Port,PATH_EN_UL2_Pin,GPIO_PIN_RESET);//CLOCK
  3991. bluecell_Currdatastatus.ATT_UL2_PATH = false;
  3992. }else{
  3993. if(HAL_GPIO_ReadPin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin) == GPIO_PIN_SET)
  3994. {//CLOCK;
  3995. bluecell_Currdatastatus.ULO_Shutdown_Retry_Count2++;
  3996. }
  3997. /*ShutDown Inc*/
  3998. if(DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL2_Shutdown_Index] >= MBIC_RECOVERY_SHUTDOWN_MAINTAIN_SEC){
  3999. /*Path Recovery*/
  4000. HAL_GPIO_WritePin(PATH_EN_UL2_GPIO_Port,PATH_EN_UL2_Pin,GPIO_PIN_SET);//CLOCK
  4001. bluecell_Prevdatastatus.ATT_UL2_H = ~bluecell_Prevdatastatus.ATT_UL2_H;
  4002. bluecell_Prevdatastatus.ATT_UL2_L = ~bluecell_Prevdatastatus.ATT_UL2_L;
  4003. bluecell_Currdatastatus.ATT_UL2_PATH = true;
  4004. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  4005. DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL2_Shutdown_Index] = 0;
  4006. }else{
  4007. /*Path Off*/
  4008. HAL_GPIO_WritePin(PATH_EN_UL2_GPIO_Port,PATH_EN_UL2_Pin,GPIO_PIN_RESET);//CLOCK
  4009. bluecell_Currdatastatus.ATT_UL2_PATH = false;
  4010. }
  4011. }
  4012. }
  4013. else{
  4014. if(DET_UL_Shutdown_Off_AlarmTimerCnt[DET_Alarm_UL2_Shutdown_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4015. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN &= ~ALARM_ULO_SHUTDOWN_P2;
  4016. bluecell_Currdatastatus.ULO_Shutdown_Alarm2 = false;
  4017. }
  4018. }
  4019. if(ADC_Alarm_UL_Shutdown_Set[DET_Alarm_UL3_Shutdown_Index] == true
  4020. &&DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL3_Shutdown_Index] >= MBIC_ON_SHUTDOWN_MAINTAIN_SEC)
  4021. {
  4022. if(bluecell_Currdatastatus.ULO_Shutdown_Retry_Count3 >= RETRYCNT_MAX){
  4023. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P3;
  4024. bluecell_Currdatastatus.ULO_Shutdown_Alarm3 = true;
  4025. HAL_GPIO_WritePin(PATH_EN_UL3_GPIO_Port,PATH_EN_UL3_Pin,GPIO_PIN_RESET);//CLOCK
  4026. bluecell_Currdatastatus.ATT_UL3_PATH = false;
  4027. }else{
  4028. if(HAL_GPIO_ReadPin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin) == GPIO_PIN_SET)
  4029. {//CLOCK;
  4030. bluecell_Currdatastatus.ULO_Shutdown_Retry_Count3++;
  4031. }
  4032. /*ShutDown Inc*/
  4033. if(DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL3_Shutdown_Index] >= MBIC_RECOVERY_SHUTDOWN_MAINTAIN_SEC){
  4034. /*Path Recovery*/
  4035. HAL_GPIO_WritePin(PATH_EN_UL3_GPIO_Port,PATH_EN_UL3_Pin,GPIO_PIN_SET);//CLOCK
  4036. bluecell_Prevdatastatus.ATT_UL3_H = ~bluecell_Prevdatastatus.ATT_UL3_H;
  4037. bluecell_Prevdatastatus.ATT_UL3_L = ~bluecell_Prevdatastatus.ATT_UL3_L;
  4038. bluecell_Currdatastatus.ATT_UL3_PATH = true;
  4039. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  4040. DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL3_Shutdown_Index] = 0;
  4041. }else{
  4042. /*Path Off*/
  4043. HAL_GPIO_WritePin(PATH_EN_UL3_GPIO_Port,PATH_EN_UL3_Pin,GPIO_PIN_RESET);//CLOCK
  4044. bluecell_Currdatastatus.ATT_UL3_PATH = false;
  4045. }
  4046. }
  4047. }
  4048. else{
  4049. if(DET_UL_Shutdown_Off_AlarmTimerCnt[DET_Alarm_UL3_Shutdown_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4050. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN &= ~ALARM_ULO_SHUTDOWN_P3;
  4051. bluecell_Currdatastatus.ULO_Shutdown_Alarm3 = false;
  4052. }
  4053. }
  4054. if(ADC_Alarm_UL_Shutdown_Set[DET_Alarm_UL4_Shutdown_Index] == true
  4055. &&DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL4_Shutdown_Index] >= MBIC_ON_SHUTDOWN_MAINTAIN_SEC)
  4056. {
  4057. if(bluecell_Currdatastatus.ULO_Shutdown_Retry_Count4 >= RETRYCNT_MAX){
  4058. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P4;
  4059. bluecell_Currdatastatus.ULO_Shutdown_Alarm4 = true;
  4060. HAL_GPIO_WritePin(PATH_EN_UL4_GPIO_Port,PATH_EN_UL4_Pin,GPIO_PIN_RESET);//CLOCK
  4061. bluecell_Currdatastatus.ATT_UL4_PATH = false;
  4062. }else{
  4063. if(HAL_GPIO_ReadPin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin) == GPIO_PIN_SET)
  4064. {//CLOCK;
  4065. bluecell_Currdatastatus.ULO_Shutdown_Retry_Count4++;
  4066. }
  4067. /*ShutDown Inc*/
  4068. if(DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL4_Shutdown_Index] >= MBIC_RECOVERY_SHUTDOWN_MAINTAIN_SEC){
  4069. /*Path Recovery*/
  4070. HAL_GPIO_WritePin(PATH_EN_UL4_GPIO_Port,PATH_EN_UL4_Pin,GPIO_PIN_SET);//CLOCK
  4071. bluecell_Prevdatastatus.ATT_UL4_H = ~bluecell_Prevdatastatus.ATT_UL4_H;
  4072. bluecell_Prevdatastatus.ATT_UL4_L = ~bluecell_Prevdatastatus.ATT_UL4_L;
  4073. bluecell_Currdatastatus.ATT_UL4_PATH = true;
  4074. CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
  4075. DET_UL_Shutdown_On_AlarmTimerCnt[DET_Alarm_UL4_Shutdown_Index] = 0;
  4076. }else{
  4077. /*Path Off*/
  4078. HAL_GPIO_WritePin(PATH_EN_UL4_GPIO_Port,PATH_EN_UL4_Pin,GPIO_PIN_RESET);//CLOCK
  4079. bluecell_Currdatastatus.ATT_UL4_PATH = false;
  4080. }
  4081. }
  4082. }
  4083. else{
  4084. if(DET_UL_Shutdown_Off_AlarmTimerCnt[DET_Alarm_UL4_Shutdown_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4085. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN &= ~ALARM_ULO_SHUTDOWN_P4;
  4086. bluecell_Currdatastatus.ULO_Shutdown_Alarm4 = false;
  4087. }
  4088. }
  4089. }
  4090. else{
  4091. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN = 0;
  4092. bluecell_Currdatastatus.ULO_Shutdown_Alarm1 = false;
  4093. bluecell_Currdatastatus.ULO_Shutdown_Alarm2 = false;
  4094. bluecell_Currdatastatus.ULO_Shutdown_Alarm3 = false;
  4095. bluecell_Currdatastatus.ULO_Shutdown_Alarm4 = false;
  4096. }
  4097. }
  4098. void ULO_ALCAlarmCheck(){
  4099. double temp = 0;
  4100. double ret = 0;
  4101. int8_t ResdBm[4] = {0,};
  4102. if(bluecell_Currdatastatus.ULO_ALC_ON_OFF == true){
  4103. if(ALC_AlarmSet[ALC_Alarm_UL1_Index] == true
  4104. &&ALC_On_AlarmTimerCnt[ALC_Alarm_UL1_Index] >= MBIC_ON_MAINTAIN_SEC){
  4105. printf("ALARM_ALC_P1 OCCUR\r\n");
  4106. bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm |= ALARM_ALC_P1;
  4107. bluecell_Currdatastatus.ULO_ALC_Alarm1 = true;
  4108. }else{
  4109. if(ALC_Off_AlarmTimerCnt[ALC_Alarm_UL1_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4110. bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm &= ~ALARM_ALC_P1;
  4111. bluecell_Currdatastatus.ULO_ALC_Alarm1 = false;
  4112. }
  4113. }
  4114. if(ALC_AlarmSet[ALC_Alarm_UL2_Index] == true
  4115. &&ALC_On_AlarmTimerCnt[ALC_Alarm_UL2_Index] >= MBIC_ON_MAINTAIN_SEC){
  4116. printf("ALARM_ALC_P2 OCCUR\r\n");
  4117. bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm |= ALARM_ALC_P2;
  4118. bluecell_Currdatastatus.ULO_ALC_Alarm2 = true;
  4119. }else{
  4120. if(ALC_Off_AlarmTimerCnt[ALC_Alarm_UL2_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4121. bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm &= ~ALARM_ALC_P2;
  4122. bluecell_Currdatastatus.ULO_ALC_Alarm2 = false;
  4123. }
  4124. }
  4125. if(ALC_AlarmSet[ALC_Alarm_UL3_Index] == true
  4126. &&ALC_On_AlarmTimerCnt[ALC_Alarm_UL3_Index] >= MBIC_ON_MAINTAIN_SEC){
  4127. printf("ALARM_ALC_P3 OCCUR\r\n");
  4128. bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm |= ALARM_ALC_P3;
  4129. bluecell_Currdatastatus.ULO_ALC_Alarm3 = true;
  4130. }else{
  4131. if(ALC_Off_AlarmTimerCnt[ALC_Alarm_UL3_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4132. bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm &= ~ALARM_ALC_P3;
  4133. bluecell_Currdatastatus.ULO_ALC_Alarm3 = false;
  4134. }
  4135. }
  4136. if(ALC_AlarmSet[ALC_Alarm_UL3_Index] == true
  4137. &&ALC_On_AlarmTimerCnt[ALC_Alarm_UL3_Index] >= MBIC_ON_MAINTAIN_SEC){
  4138. printf("ALARM_ALC_P4 OCCUR\r\n");
  4139. bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm |= ALARM_ALC_P4;
  4140. bluecell_Currdatastatus.ULO_ALC_Alarm4 = true;
  4141. }else{
  4142. if(ALC_Off_AlarmTimerCnt[ALC_Alarm_UL3_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4143. bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm &= ~ALARM_ALC_P4;
  4144. bluecell_Currdatastatus.ULO_ALC_Alarm4 = false;
  4145. }
  4146. }
  4147. }
  4148. }
  4149. void DLI_AGCAlarmCheck(){
  4150. double temp = 0;
  4151. double ret = 0;
  4152. int8_t ResdBm[4] = {0,};
  4153. // if(DET_DL_Low_On_AlarmTimerCnt[DET_Alarm_DL1_Index] >= MBIC_ON_MAINTAIN_SEC
  4154. // &&ADC_Alarm_DL_Low_Set[DET_Alarm_DL1_Index] == true){
  4155. // bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P1_LEVEL_LOW;
  4156. // bluecell_Currdatastatus.DLI_Level_Low_Alarm1 = true;
  4157. //
  4158. // }else{/**/
  4159. // if(DET_DL_Low_Off_AlarmTimerCnt[DET_Alarm_DL1_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4160. // bluecell_Currdatastatus.ALARM_DLI_Level &= ~ALARM_DLI_P1_LEVEL_LOW;
  4161. // bluecell_Currdatastatus.DLI_Level_Low_Alarm1 = false;
  4162. // }
  4163. // }
  4164. if(bluecell_Currdatastatus.DLI_AGC_ON_OFF == true){
  4165. if(AGC_AlarmSet[AGC_Alarm_DL1_Index] == true
  4166. &&AGC_On_AlarmTimerCnt[AGC_Alarm_DL1_Index] >= MBIC_ON_MAINTAIN_SEC){
  4167. printf("ALARM_AGC_P1 OCCUR\r\n");
  4168. bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm |= ALARM_AGC_P1;
  4169. bluecell_Currdatastatus.DLI_AGC_Alarm1 = true;
  4170. }else{
  4171. if(AGC_Off_AlarmTimerCnt[AGC_Alarm_DL1_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4172. bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm &= ~ALARM_AGC_P1;
  4173. bluecell_Currdatastatus.DLI_AGC_Alarm1 = false;
  4174. }
  4175. }
  4176. if(AGC_AlarmSet[AGC_Alarm_DL2_Index] == true
  4177. &&AGC_On_AlarmTimerCnt[AGC_Alarm_DL2_Index] >= MBIC_ON_MAINTAIN_SEC){
  4178. printf("ALARM_AGC_P2 OCCUR\r\n");
  4179. bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm |= ALARM_AGC_P2;
  4180. bluecell_Currdatastatus.DLI_AGC_Alarm2 = true;
  4181. }else{
  4182. if(AGC_Off_AlarmTimerCnt[AGC_Alarm_DL2_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4183. bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm &= ~ALARM_AGC_P2;
  4184. bluecell_Currdatastatus.DLI_AGC_Alarm2 = false;
  4185. }
  4186. }
  4187. if(AGC_AlarmSet[AGC_Alarm_DL3_Index] == true
  4188. &&AGC_On_AlarmTimerCnt[AGC_Alarm_DL3_Index] >= MBIC_ON_MAINTAIN_SEC){
  4189. printf("ALARM_AGC_P3 OCCUR\r\n");
  4190. bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm |= ALARM_AGC_P3;
  4191. bluecell_Currdatastatus.DLI_AGC_Alarm3 = true;
  4192. }else{
  4193. if(AGC_Off_AlarmTimerCnt[AGC_Alarm_DL3_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4194. bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm &= ~ALARM_AGC_P3;
  4195. bluecell_Currdatastatus.DLI_AGC_Alarm3 = false;
  4196. }
  4197. }
  4198. if(AGC_AlarmSet[AGC_Alarm_DL3_Index] == true
  4199. &&AGC_On_AlarmTimerCnt[AGC_Alarm_DL3_Index] >= MBIC_ON_MAINTAIN_SEC){
  4200. printf("ALARM_AGC_P4 OCCUR\r\n");
  4201. bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm |= ALARM_AGC_P4;
  4202. bluecell_Currdatastatus.DLI_AGC_Alarm4 = true;
  4203. }else{
  4204. if(AGC_Off_AlarmTimerCnt[AGC_Alarm_DL3_Index] >= MBIC_OFF_MAINTAIN_SEC){
  4205. bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm &= ~ALARM_AGC_P4;
  4206. bluecell_Currdatastatus.DLI_AGC_Alarm4 = false;
  4207. }
  4208. }
  4209. }
  4210. }
  4211. void Temp_HighAlarmCheck(){
  4212. double temp = 0;
  4213. double ret = 0;
  4214. int8_t ResdBm[4] = {0,};
  4215. if(bluecell_Currdatastatus.Temp_High_Threshold < (bluecell_Currdatastatus.DET_TEMP )){
  4216. bluecell_Currdatastatus.ALARM_TEMP_HIGH |= ENVIRONMENT_TEMPHIGH;
  4217. bluecell_Currdatastatus.Temp_High_Alarm = true;
  4218. }else{
  4219. bluecell_Currdatastatus.ALARM_TEMP_HIGH &= ~ENVIRONMENT_TEMPHIGH;
  4220. bluecell_Currdatastatus.Temp_High_Alarm = false;
  4221. }
  4222. }
  4223. void Alarm_Check(){
  4224. double temp = 0;
  4225. double ret = 0;
  4226. int8_t ResdBm[4] = {0,};
  4227. if(bluecell_Currdatastatus.ALARM_MASK1 == false){
  4228. bluecell_Currdatastatus.ALARM_TEMP_HIGH = 0;
  4229. bluecell_Currdatastatus.ALARM_DLI_Level = 0;
  4230. bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN = 0;
  4231. bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm = 0;
  4232. bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm = 0;
  4233. bluecell_Currdatastatus.ALARM_ULO_Level = 0;
  4234. bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN = 0;
  4235. Alarm_LED_OnSet = false;
  4236. return;
  4237. }
  4238. if(bluecell_Currdatastatus.ALARM_TEMP_HIGH > 0
  4239. || bluecell_Currdatastatus.ALARM_DLI_Level > 0
  4240. || bluecell_Currdatastatus.ALARM_DLI_SHTUTDOWN > 0
  4241. || bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm > 0
  4242. || bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm > 0
  4243. || bluecell_Currdatastatus.ALARM_ULO_Level > 0
  4244. || bluecell_Currdatastatus.ALARM_ULO_SHTUTDOWN > 0)
  4245. {
  4246. // AlarmTimerOnSet = true;
  4247. // AlarmTimerOffSet = false;
  4248. // if(AlarmTimerOnCnt > 3000){
  4249. Alarm_LED_OnSet = true;
  4250. // }
  4251. }else{
  4252. // AlarmTimerOffSet = true;// False
  4253. // if(AlarmTimerOffCnt > 10000){
  4254. // AlarmTimerOnSet = false;
  4255. Alarm_LED_OnSet = false;
  4256. // printf("=================AlarmTimerOffCnt=================\r\n");
  4257. // }
  4258. }
  4259. Temp_HighAlarmCheck();
  4260. DLI_AGCAlarmCheck();
  4261. ULO_ALCAlarmCheck();
  4262. ULO_ShutdownAlarmCheck();
  4263. DLI_ShutdownAlarmCheck();
  4264. DLI_LevelAlarmCheck();
  4265. ULO_LevelAlarmCheck();
  4266. }