| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786 |
- /**
- ******************************** STM32F10x *********************************
- * @文件名 : ytsf.c
- * @作者 : sun
- * @库版本 : V3.5.0
- * @文件版本 : V1.0.0
- * @日期 : 2016年05月09日
- * @摘要 : USART源文件
- ******************************************************************************/
- /*----------------------------------------------------------------------------
- 更新日志:
- 2016-05-09 V1.0.0:初始版本
- ----------------------------------------------------------------------------*/
- /* 包含的头文件 --------------------------------------------------------------*/
- #include <stdio.h>
- #include <string.h>
- #include "stm32f10x.h"
- #include "ytsf.h"
- #include "sx1276_api.h"
- #include "usart.h"
- #include "queue.h"
- #include "systick.h"
- #include "timer.h"
- #include "eeprom.h"
- #include "led.h"
- uint8_t Ytsf_CMD_BUF[Ytsf_CMD_BUF_SIZE]={0x00}; //命令缓冲区
- uint8_t Ytsf_CMD_PARM[Ytsf_CMD_PARM_SIZE]={0x00}; //命令参数
- uint8_t MAX_CMD_LIST=0; //命令列表数量
- bool YTSF_OnUse=true; //英泰赛福模块在位
- volatile bool Port0_OnUse=true; //端口0使用标记
- volatile bool Port1_OnUse=true; //端口1使用标记
- bool Port0_GunTotal=1; //端口0枪数
- bool Port1_GunTotal=1; //端口0枪数
- bool PORT0_SN_CHANGED=false;
- bool PORT1_SN_CHANGED=false;
- bool PORT0_ZLJ_CHANGED = false;
- bool PORT1_ZLJ_CHANGED = false;
- volatile uint32_t YTSF_PORT0_Send_Delay = 0;
- volatile uint32_t YTSF_PORT1_Send_Delay = 0;
- volatile uint32_t YTSF_PORT0_Send_CNT = 0;
- volatile uint32_t YTSF_PORT1_Send_CNT = 0;
- uint8_t mYTSF_state=YTSF_STATE_IDLE;
- //uint8_t mYTSF_state_port0=YTSF_STATE_IDLE;
- //uint8_t mYTSF_state_port1=YTSF_STATE_IDLE;
- tYTSFRxFrame_t YTSF_rx_frame;
- tYTSFRxFrame_t YTSF_rx_frame_port[2];
- tYTSFRxFrame_t Tax_rx_frame[2];
- tDevice_t mDevice;
- //tYtsfDeviceReg_t mDeviceReg;
- uint8_t Ytsf_CMD_A1[]={
- 0xbb, //前导码
- 0x10, //长度码
- 0x81, //帧号
- 0x00, //端口号
- 0xa1, //命令码
- 0x11, //累计类型
- 0x00, //gun_num,00H:1号枪,01H:2号枪
- 0x00,0x00,0x00,0x00, //参数,默认0
- 0x00,0x00,0x00,0x00,0x00, //监控序列号
- 0x00,0x00 //校验码
- };
- uint8_t Ytsf_CMD_A2[]={
- 0xbb, //前导码
- 0x0d, //长度码
- 0x81, //帧号
- 0x00, //端口号
- 0xa2, //命令码
- 0x11, //信息类型
- 0x00, //gun_num,00H:1号枪,01H:2号枪
- 0x00,0x00,0x00,0x00, //参数,默认0
- 0x00,0x00, //预留
- 0x00,0x00 //校验码
- };
- uint8_t Ytsf_CMD_A5[]={
- 0xbb, //前导码
- 0x0d, //长度码
- 0x81, //帧号
- 0x00, //端口号
- 0xa5, //命令码
- 0x11, //信息类型
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //参数,时钟8字节
- 0x00,0x00 //校验码
- };
- uint8_t CMD_LIST_polling=0;
- uint16_t CMD_LIST_polling_port0=0;
- uint16_t CMD_LIST_polling_port1=0;
- //YTSF_CMD_Tx(Ytsf_CMD_A2_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_00);
- uint8_t CMD_LIST[][6]={ //命令列表
- //第0个元素表示是否使能
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_00},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_01},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_02},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_10},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_21},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_00},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_01},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_02},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_10},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A2_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_21},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_1,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_1,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_1,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_1,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_1,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_2,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_2,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_2,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_2,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_2,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_3,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_3,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_3,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_3,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_3,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_4,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_4,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_4,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_4,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_4,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_5,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_5,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_5,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_5,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_5,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_6,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_6,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_6,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_6,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_6,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_7,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_7,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_7,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_7,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_7,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_1,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_1,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_1,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_1,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_1,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_2,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_2,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_2,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_2,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_2,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_3,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_3,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_3,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_3,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_3,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_4,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_4,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_4,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_4,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_4,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_5,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_5,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_5,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_5,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_5,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_6,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_6,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_6,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_6,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_6,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_7,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_7,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_12},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_7,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_13},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_7,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14},
- {CMD_dn,Ytsf_CMD_A1_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_7,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_20},
-
- {CMD_dn,Ytsf_CMD_A5_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A5,Ytsf_CMD_TYPE_00},
- {CMD_dn,Ytsf_CMD_A5_SIZE+1,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A5,Ytsf_CMD_TYPE_01},
- {CMD_dn,Ytsf_CMD_A5_SIZE,Ytsf_PORT_0,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A5,Ytsf_CMD_TYPE_FF},
- {CMD_dn,Ytsf_CMD_A5_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A5,Ytsf_CMD_TYPE_00},
- {CMD_dn,Ytsf_CMD_A5_SIZE+1,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A5,Ytsf_CMD_TYPE_01},
- {CMD_dn,Ytsf_CMD_A5_SIZE,Ytsf_PORT_1,Ytsf_GUN_NUM_0,Ytsf_CMD_INSTRUCT_A5,Ytsf_CMD_TYPE_FF},
- //
- {CMD_dn,0x06,TAX_PORT_0,TAX_GUN_NUM_0,0x83,0x00},
- {CMD_dn,0x06,TAX_PORT_1,TAX_GUN_NUM_0,0x83,0x00},
- {CMD_dn,0x07,TAX_PORT_0,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_0,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_0,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_0,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_0,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_0,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_0,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_0,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x08,TAX_PORT_0,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_0,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_0,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_0,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_0,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_0,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_0,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_0,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x07,TAX_PORT_1,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_1,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_1,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_1,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_1,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_1,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_1,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x07,TAX_PORT_1,TAX_GUN_NUM_0,0x86,0x00},
- {CMD_dn,0x08,TAX_PORT_1,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_1,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_1,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_1,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_1,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_1,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_1,TAX_GUN_NUM_0,0x89,0x00},
- {CMD_dn,0x08,TAX_PORT_1,TAX_GUN_NUM_0,0x89,0x00}
- };
- int16_t YTSF_SET_STATE_port(uint8_t mport,uint8_t s,uint8_t mode);
- int16_t TAX_SET_STATE_port(uint8_t mport,uint8_t s,uint8_t mode);
- /********************************
- 获取命令列表总数
- ********************************/
- uint8_t Get_MAX_CMD_LIST(void)
- {
- MAX_CMD_LIST = sizeof(CMD_LIST)/sizeof(CMD_LIST[0]);
- return MAX_CMD_LIST;
- }
- void YTSF_GPIO_Init(void)
- {
-
- GPIO_InitTypeDef GPIO_InitStructure;
- //YTSF_GPIO_REV1_RST_N PC8
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PC端口时钟 //复位
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //PC.8 端口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //IO口速度为2MHz
- GPIO_Init(GPIOC, &GPIO_InitStructure); //根据设定参数初始化GPIOC 8
- GPIO_SetBits(GPIOC,GPIO_Pin_8); //置高PC8
-
- //YTSF_GPIO_REV2 PB4
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟 预留的
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //PB.4 端口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //IO口速度为2MHz
- GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB 4
- //GPIO_SetBits(GPIOB,GPIO_Pin_4); //置高PB4
-
- //YTSF_GPIO_REV3_DETECT_N A11
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //Pin_11 Pin_12 端口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //IO口速度为2MHz
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- //GPIO_SetBits(GPIOA,GPIO_Pin_11); //在位
-
- //YTSF_GPIO_REV4_EN_N A12
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //Pin_12 端口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //IO口速度为2MHz
- GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.11,12
- GPIO_ResetBits(GPIOA,GPIO_Pin_12); //使能 //低使能
- }
- /********************************
- 初始化
- ********************************/
- uint8_t Get_Ytsf_init(void){
-
-
- // uint32_t mID=0x83010001;
- uint16_t temp=0;
-
-
- uint8_t returncode = 1;
-
- YTSF_GPIO_Init();
-
-
- if(YTSF_GPIO_DETECT==0)
- {
- YTSF_OnUse=true;
- YTSF_GPIO_EN();
- YTSF_DEBUG1("YTSF_GPIO_DETECT=%d,there is a YTSF DATA MODEL!\r\n",YTSF_GPIO_DETECT);
-
- GPIO_ResetBits(GPIOB,GPIO_Pin_10);
- YTSF_GPIO_RST();
- TIMDelay_Nms(1000);
-
- YTSF_GPIO_SET();
- GPIO_SetBits(GPIOB,GPIO_Pin_10);
-
- //TIMDelay_Nms(1000);
- }
- else{
- YTSF_OnUse=false;
- YTSF_GPIO_DN();
- YTSF_DEBUG1("YTSF_GPIO_DETECT=%d,there is no YTSF DATA MODEL!\r\n",YTSF_GPIO_DETECT);
- //return 1;
- }
-
-
-
-
- memset(&mDevice,0,sizeof(mDevice));
-
- //mDevice.port[0].state_m=1;
- mDevice.port[0].gun[0].state=1;
-
- if(EE_ReadVariable(VirtAddVarTab[CURSET_YTSF_PORT0_SN0], &temp)==0)
- {
- mDevice.port[0].mntr_sn[0] = temp & 0xff;
- }
- if(EE_ReadVariable(VirtAddVarTab[CURSET_YTSF_PORT0_SN1], &temp)==0)
- {
- mDevice.port[0].mntr_sn[1] = (temp>>8) & 0xff;
- mDevice.port[0].mntr_sn[2] = (temp>>0) & 0xff;
- }
- if(EE_ReadVariable(VirtAddVarTab[CURSET_YTSF_PORT0_SN2], &temp)==0)
- {
- mDevice.port[0].mntr_sn[3] = (temp>>8) & 0xff;
- mDevice.port[0].mntr_sn[4] = (temp>>0) & 0xff;
- }
-
-
-
- //mDevice.port[1].state=1;
- mDevice.port[1].gun[0].state=1;
-
- if(EE_ReadVariable(VirtAddVarTab[CURSET_YTSF_PORT1_SN0], &temp)==0)
- {
- mDevice.port[1].mntr_sn[0] = temp & 0xff;
- }
- if(EE_ReadVariable(VirtAddVarTab[CURSET_YTSF_PORT1_SN1], &temp)==0)
- {
- mDevice.port[1].mntr_sn[1] = (temp>>8) & 0xff;
- mDevice.port[1].mntr_sn[2] = (temp>>0) & 0xff;
- }
- if(EE_ReadVariable(VirtAddVarTab[CURSET_YTSF_PORT1_SN2], &temp)==0)
- {
- mDevice.port[1].mntr_sn[3] = (temp>>8) & 0xff;
- mDevice.port[1].mntr_sn[4] = (temp>>0) & 0xff;
- }
-
- //读取ID信息
- if(EE_ReadVariable(VirtAddVarTab[CURSET_DEVICE_DevAddr0], &temp)==0)
- {
- mDevice.device_id = (((uint32_t)temp) << 16);
- }
- else{
- mDevice.device_id = ((uint32_t)(0xFFFF) << 16);
- }
- if(EE_ReadVariable(VirtAddVarTab[CURSET_DEVICE_DevAddr1], &temp)==0)
- {
- mDevice.device_id += (uint32_t)temp;
- }
- else{
- mDevice.device_id += (0xFFFF);
- }
-
-
-
- mDevice.chan_index = 0;
- mDevice.chan_total = 0;
- mDevice.port[Ytsf_PORT_0].zlj_state=0;
- mDevice.port[Ytsf_PORT_1].zlj_state=0;
-
- mDevice.chk_zlj = 0;
- mDevice.lora_send_state = 1;
-
- mDevice.encrypt = YTSF_OnUse;
- mDevice.ytsf_state = YTSF_OnUse;
-
- mDevice.lora_nosend_timeout = 60*1000;
- mDevice.lora_nosend_period = TickCounter - mDevice.lora_nosend_timeout;
-
- //LoRa_SendTimeCouter = TickCounter - LoRa_SendTimeOut;
-
-
- mDevice.port[Ytsf_PORT_0].loop_sn_timeout = 5*1000;
- mDevice.port[Ytsf_PORT_0].loop_sn_period = TickCounter;// - mDevice.port[Ytsf_PORT_0].loop_sn_timeout;
-
- mDevice.port[Ytsf_PORT_0].loop_zlj_timeout = 20*1000;
- mDevice.port[Ytsf_PORT_0].loop_zlj_period = TickCounter - mDevice.port[Ytsf_PORT_0].loop_zlj_timeout;
-
- mDevice.port[Ytsf_PORT_0].loop_dc_timeout = 8*1000;
- mDevice.port[Ytsf_PORT_0].loop_dc_period = TickCounter - mDevice.port[Ytsf_PORT_0].loop_dc_timeout;
-
-
- mDevice.port[Ytsf_PORT_1].loop_sn_timeout = 5*1000;
- mDevice.port[Ytsf_PORT_1].loop_sn_period = TickCounter - mDevice.port[Ytsf_PORT_1].loop_sn_timeout/2 + 1;
-
- mDevice.port[Ytsf_PORT_1].loop_zlj_timeout = 20*1000;
- mDevice.port[Ytsf_PORT_1].loop_zlj_period = TickCounter - mDevice.port[Ytsf_PORT_1].loop_zlj_timeout/2 +1;
-
- mDevice.port[Ytsf_PORT_1].loop_dc_timeout = 8*1000;
- mDevice.port[Ytsf_PORT_1].loop_dc_period = TickCounter - mDevice.port[Ytsf_PORT_1].loop_dc_timeout+1;
-
-
-
- //mDeviceReg init
- if(mDevice.lora_send_state)
- Get_MAX_CMD_LIST();
-
- YTSF_SET_STATE_port(Ytsf_PORT_0,YTSF_STATE_IDLE,STATE_M_MODE_INIT);
- YTSF_SET_STATE_port(Ytsf_PORT_1,YTSF_STATE_IDLE,STATE_M_MODE_INIT);
-
- TAX_SET_STATE_port(TAX_PORT_0,YTSF_STATE_IDLE,STATE_M_MODE_INIT);
- TAX_SET_STATE_port(TAX_PORT_1,YTSF_STATE_IDLE,STATE_M_MODE_INIT);
-
-
- #ifdef XXXXYTSF_DEBUG_EN
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- for(j=0;j<6;j++)
- //YTSF_DEBUG("%02x ",CMD_LIST[i][j]);
-
- //YTSF_DEBUG("\r\n");
- printf("%02x ",CMD_LIST[i][j]);
- printf("\r\n");
- }
- #endif
- /*
- index = Get_CMD_Index_ByParm(Ytsf_PORT_0,0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_00);
- YTSF_DEBUG1("index=%d\r\n",index);
- if(index >=0)
- YTSF_CMD_Tx(CMD_LIST[index][1],CMD_LIST[index][2],CMD_LIST[index][3],CMD_LIST[index][4],CMD_LIST[index][5]);
-
-
- TIMDelay_Nms(500);
- index = Get_CMD_Index_ByParm(Ytsf_PORT_1,0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_00);
- YTSF_DEBUG1("index=%d\r\n",index);
- if(index >=0)
- YTSF_CMD_Tx(CMD_LIST[index][1],CMD_LIST[index][2],CMD_LIST[index][3],CMD_LIST[index][4],CMD_LIST[index][5]);
-
- TIMDelay_Nms(500);
- */
- returncode = 0;
- return returncode;
- }
- /********************************
- 命令使能,通过索引寻址
- ********************************/
- int16_t Set_CMD_Enable_ByIndex(uint16_t index)
- {
- if(index >= MAX_CMD_LIST)
- return -1;
- CMD_LIST[index][0] = CMD_en;
- return 0;
- }
- /********************************
- 命令去使能,通过索引寻址
- ********************************/
- int16_t ReSet_CMD_Enable_ByIndex(uint16_t index)
- {
- if(index >= MAX_CMD_LIST)
- return -1;
- CMD_LIST[index][0] = CMD_dn;
- return 0;
- }
- /********************************
- 命令使能,通过参数寻址
- ********************************/
- int16_t Set_CMD_Enable_ByParm(uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type)
- {
- uint16_t i=0;
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- if((CMD_LIST[i][2] == port)&&(CMD_LIST[i][3] == gun)&&(CMD_LIST[i][4] == instruct)&&(CMD_LIST[i][5] == type))
- CMD_LIST[i][0] = CMD_en;
- }
- return i;
- }
- /********************************
- 命令去使能,通过参数寻址
- ********************************/
- int16_t ReSet_CMD_Enable_ByParm(uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type)
- {
- uint16_t i=0;
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- if((CMD_LIST[i][2] == port)&&(CMD_LIST[i][3] == gun)&&(CMD_LIST[i][4] == instruct)&&(CMD_LIST[i][5] == type))
- CMD_LIST[i][0] = CMD_dn;
- }
- return i;
- }
- /********************************
- 命令使能,通过端口寻址
- ********************************/
- int16_t Set_CMD_Enable_ByPort(uint8_t port)
- {
- uint16_t i=0;
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- if(CMD_LIST[i][2] == port)
- CMD_LIST[i][0] = CMD_en;
- }
- return i;
- }
- /********************************
- 命令去使能,通过端口寻址
- ********************************/
- int16_t ReSet_CMD_Enable_ByPort(uint8_t port)
- {
- uint16_t i=0;
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- if(CMD_LIST[i][2] == port)
- CMD_LIST[i][0] = CMD_dn;
- }
- return i;
- }
- /********************************
- 命令使能,通过端口及枪号寻址
- ********************************/
- int16_t Set_CMD_Enable_ByGun(uint8_t port,uint8_t gun)
- {
- uint16_t i=0;
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- if((CMD_LIST[i][2] == port)&&(CMD_LIST[i][3] == gun))
- CMD_LIST[i][0] = CMD_en;
- }
- return i;
- }
- /********************************
- 命令去使能,通过端口及枪号寻址
- ********************************/
- int16_t ReSet_CMD_Enable_ByGun(uint8_t port,uint8_t gun)
- {
- uint8_t i=0;
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- if((CMD_LIST[i][2] == port)&&(CMD_LIST[i][3] == gun))
- CMD_LIST[i][0] = CMD_dn;
- }
- return i;
- }
- /********************************
- 获取索引,通过参数寻址
- ********************************/
- int16_t Get_CMD_Index_ByParm(uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type)
- {
- uint8_t i =0;
-
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- if((CMD_LIST[i][2]==port)&&(CMD_LIST[i][3]==gun)&&(CMD_LIST[i][4]==instruct)&&(CMD_LIST[i][5]==type))
- return i;
- }
-
- YTSF_DEBUG1("port=%d,gun=%d,instruct=%d,type=%d\r\n",port,gun,instruct,type);
- return -1;
- }
- /************************************************
- 函数名称 : Get_Ytsf_CMD_A1
- 功 能 : 发送命令
- 参 数 : cmd 命令指针
- size 命令长度
- port 端口
- type 命令类型
- gun 抢号
- parameter 参数
- 返 回 值 : 无
- 作 者 : scx
- *************************************************/
- int8_t Get_Ytsf_CMD(uint8_t size,uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type){
- uint8_t i=0;
- // uint8_t j=0;
- uint8_t sum_check=0;
- uint8_t temp=0;
- uint8_t index=0;
- uint16_t crc=0;
- uint8_t *cmd=Ytsf_CMD_BUF;
- // uint8_t tbuf[128];
- // uint8_t tlen=0;
- //0xa1 累计数读取指令
- //0xa2 油机信息读取指令
- //0xa5 模块操作指令
- //0xaf 中转指令
-
- switch(instruct){
- case Ytsf_CMD_INSTRUCT_A1:
- index = 0;
- if(size!=Ytsf_CMD_A1_SIZE)
- return YTSF_CMD_ERROR_LEN;//帧长度错误.
-
- if(cmd==NULL)
- return YTSF_CMD_ERROR_CMD;//指令指针为空.
-
- if((type==Ytsf_CMD_TYPE_11)|(type==Ytsf_CMD_TYPE_12)|(type==Ytsf_CMD_TYPE_13)|(type==Ytsf_CMD_TYPE_14)|(type==Ytsf_CMD_TYPE_20))
- {
- index=0;
- }
- else{
- return YTSF_CMD_ERROR_TYPE;//累计类型错误
- }
-
- cmd[index++]=0xbb; //前导码,固定0xbb
- cmd[index++]=size-2; //帧长度
- cmd[index++]=0x81; //帧号,单帧固定0x81
- cmd[index++]=port; //端口号,税控口号
- cmd[index++]=instruct; //指令码
- cmd[index++]=type; //类型码
- cmd[index++]=gun; //枪号
- if((type==0x11)|(type==0x14))
- {
- cmd[index++]=0x00; //操作参数
- cmd[index++]=0x00;
- cmd[index++]=0x00;
- cmd[index++]=0x00;
- }
-
- else if(type==0x20)
- {
- cmd[index++]=0x01; //操作参数
- cmd[index++]=0x00;
- cmd[index++]=0x00;
- cmd[index++]=0x00;
- }
- else
- {
- cmd[index++]=Ytsf_CMD_PARM[0]; //操作参数
- cmd[index++]=Ytsf_CMD_PARM[1];
- cmd[index++]=Ytsf_CMD_PARM[2];
- cmd[index++]=Ytsf_CMD_PARM[3];
- }
- temp = 0;
- for(i=0;i<5;i++){
- if((mDevice.port[port].mntr_sn[i]==0)|(mDevice.port[port].mntr_sn[i]==0xff))
- temp++;
- }
- if(temp>=5)
- return YTSF_CMD_ERROR_SN;
-
- cmd[index++]=mDevice.port[port].mntr_sn[0]; //监控序列号
- cmd[index++]=mDevice.port[port].mntr_sn[1]; //监控序列号
- cmd[index++]=mDevice.port[port].mntr_sn[2]; //监控序列号
- cmd[index++]=mDevice.port[port].mntr_sn[3]; //监控序列号
- cmd[index++]=mDevice.port[port].mntr_sn[4]; //监控序列号
-
- crc = GetCRC16(cmd,size-2);
-
- cmd[index++]=crc>>8; //crc16校验,
- cmd[index++]=crc>>0;
- break;
- case Ytsf_CMD_INSTRUCT_A2:
- index = 0;
- if(size!=Ytsf_CMD_A2_SIZE)
- return YTSF_CMD_ERROR_LEN;//帧长度错误.
-
- if(cmd==NULL)
- return YTSF_CMD_ERROR_CMD;//指令指针为空.
-
- if((type==Ytsf_CMD_TYPE_00)|(type==Ytsf_CMD_TYPE_01)|(type==Ytsf_CMD_TYPE_02)|(type==Ytsf_CMD_TYPE_10)|(type==Ytsf_CMD_TYPE_11)|(type==Ytsf_CMD_TYPE_20)|(type==Ytsf_CMD_TYPE_21))
- {
- index=0;
- }
- else{
- return YTSF_CMD_ERROR_TYPE;//信息类型错误
- }
- cmd[index++]=0xbb; //前导码,固定0xbb
- cmd[index++]=size-2; //帧长度
- cmd[index++]=0x81; //帧号,单帧固定0x81
- cmd[index++]=port; //端口号,税控口号
- cmd[index++]=instruct; //指令码
- cmd[index++]=type; //类型码
- cmd[index++]=gun; //枪号
-
- cmd[index++]=0x00; //操作参数
- cmd[index++]=0x00;
- cmd[index++]=0x00;
- cmd[index++]=0x00;
-
- cmd[index++]=0x00; //预留参数
- cmd[index++]=0x00; //预留参数
-
- crc = GetCRC16(cmd,size-2);
-
- cmd[index++]=crc>>8; //crc16校验,
- cmd[index++]=crc>>0;
- break;
-
- case Ytsf_CMD_INSTRUCT_A5:
- index = 0;
- if(cmd==NULL)
- return YTSF_CMD_ERROR_CMD;//指令指针为空.
-
- if((type==0x00)|(type==0xff))
- {
- if(size!=8)
- return YTSF_CMD_ERROR_LEN; //帧长度错误.
- }
-
- if(type==0x01)
- {
- if(size!=9)
- return YTSF_CMD_ERROR_LEN; //帧长度错误.
- }
-
-
- if((type==Ytsf_CMD_TYPE_00)|(type==Ytsf_CMD_TYPE_01)|(type==Ytsf_CMD_TYPE_FF))
- {
- index=0;
- }
- else{
- return YTSF_CMD_ERROR_TYPE;//操作类型错误
- }
-
- cmd[index++]=0xbb; //前导码,固定0xbb
- cmd[index++]=size-2; //帧长度
- cmd[index++]=0x81; //帧号,单帧固定0x81
- cmd[index++]=port; //端口号,税控口号
- cmd[index++]=instruct; //指令码
- cmd[index++]=type; //类型码
-
-
- if(type==0x01)
- {
- cmd[index++]=0x00; //0x00读,0x01写
- /*
- cmd[index++]=Ytsf_CMD_PARM[1]; //时间
- cmd[index++]=Ytsf_CMD_PARM[2]; //时间
- cmd[index++]=Ytsf_CMD_PARM[3]; //时间
- cmd[index++]=Ytsf_CMD_PARM[4]; //时间
- cmd[index++]=Ytsf_CMD_PARM[5]; //时间
- cmd[index++]=Ytsf_CMD_PARM[6]; //时间
- cmd[index++]=Ytsf_CMD_PARM[7]; //时间
- */
- }
- crc = GetCRC16(cmd,size-2);
- cmd[index++]=crc>>8; //crc16校验,
- cmd[index++]=crc>>0;
- break;
- case 0x83:
- index = 0;
- if(cmd==NULL)
- return YTSF_CMD_ERROR_CMD;//指令指针为空.
-
- if(size!=6)
- return YTSF_CMD_ERROR_LEN; //帧长度错误.
-
- cmd[index++]=0xbb; //前导码,固定0xbb
- cmd[index++]=size-2; //帧长度
- cmd[index++]=0xff; //帧号,
- cmd[index++]=0x83; //指令码
- cmd[index++]=0x00; //参数,枪号
-
- for(i=2;i<index;i++){
- sum_check ^=cmd[i];
- }
- cmd[index++] = sum_check; //和校验
-
- break;
- case 0x86:
- index = 0;
- if(cmd==NULL)
- return YTSF_CMD_ERROR_CMD;//指令指针为空.
-
- if(size!=7)
- return YTSF_CMD_ERROR_LEN; //帧长度错误.
-
- cmd[index++]=0xbb; //前导码,固定0xbb
- cmd[index++]=size-2; //帧长度
- cmd[index++]=0xff; //帧号,
- cmd[index++]=0x86; //指令码
- cmd[index++]=gun; //参数,枪号
- cmd[index++]=0x01; //return_method,01明文输出
-
- for(i=2;i<index;i++){
- sum_check ^=cmd[i];
- }
- cmd[index++] = sum_check; //和校验
-
- break;
- case 0x89:
- index = 0;
- if(cmd==NULL)
- return YTSF_CMD_ERROR_CMD;//指令指针为空.
-
- if(size!=8)
- return YTSF_CMD_ERROR_LEN; //帧长度错误.
-
- cmd[index++]=0xbb; //前导码,固定0xbb
- cmd[index++]=size-2; //帧长度
- cmd[index++]=0xff; //帧号,
- cmd[index++]=0x86; //指令码
- cmd[index++]=gun; //参数,枪号
- cmd[index++]=0x00; //mode,0x00累计加油,0x01出厂调试用油量,0x02剂量后油量
- cmd[index++]=0x01; //return_method,0x01明文输出
-
- for(i=2;i<index;i++){
- sum_check ^=cmd[i];
- }
-
- cmd[index++] = sum_check; //和校验
-
- break;
- default:
- return YTSF_CMD_ERROR_CMD;
- }
- return index;
- }
- /************************************************
- 函数名称 : YTSF_CMD_Tx_A1
- 功 能 : 发送命令
- 参 数 : cmd 命令指针
- size 命令长度
- port 端口
- type 命令类型
- gun 抢号
- parameter 参数
- 返 回 值 : 无
- 作 者 : scx
- *************************************************/
- uint8_t YTSF_CMD_Tx(uint8_t size,uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type){
-
- int8_t cmd_l=0;
- // uint8_t sout[64]={0};
- // uint8_t lout=0;
- // uint8_t tmp=0;
- // uint16_t i=0;
- //uint8_t result=0;
-
- //cmd_l=Get_Ytsf_CMD(Ytsf_CMD_A2_SIZE,Ytsf_PORT_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_00,Ytsf_GUN_NUM_0);
- cmd_l=Get_Ytsf_CMD(size,port,gun,instruct,type);
-
- if(cmd_l<0)
- switch(cmd_l){
- case YTSF_CMD_ERROR_CMD:
- YTSF_DEBUG1("YTSF_CMD_ERROR_CMD\r\n");
- break;
- case YTSF_CMD_ERROR_LEN:
- YTSF_DEBUG1("YTSF_CMD_ERROR_LEN\r\n");
- break;
- case YTSF_CMD_ERROR_TYPE:
- YTSF_DEBUG1("YTSF_CMD_ERROR_TYPE\r\n");
- break;
- case YTSF_CMD_ERROR_SN:
- YTSF_DEBUG1("YTSF_CMD_ERROR_SN\r\n");
- break;
-
- default:
- break;
- }
-
- if(cmd_l < 0)
- YTSF_DEBUG1("YTSF SEND CMD,获取发送指令失败\r\n");
- else if(cmd_l < 100)
- {
- YTSF_DEBUG1("YTSF SEND CMD=");
- YTSF_DEBUG2(Ytsf_CMD_BUF,cmd_l);
- }
- else
- YTSF_DEBUG1("YTSF SEND CMD,指令长达太长,>100.\r\n");
-
-
-
-
- if(cmd_l>0)
- {
- UART4_SendNByte(Ytsf_CMD_BUF,cmd_l);
- if(port==0){
- YTSF_PORT0_Send_CNT++;
- YTSF_PORT0_Send_Delay = TickCounter;
- start_led(2,cmd_l,10,30*10);//(led,delay*0.1ms,duty,period*0.1ms)
- }
- if(port==1){
- YTSF_PORT1_Send_CNT++;
- YTSF_PORT1_Send_Delay = TickCounter;
- start_led(3,cmd_l,10,30*10);//(led,delay*0.1ms,duty,period*0.1ms)
- }
- }
-
-
- return 0;
- }
- /*
- uint8_t Ytsf_CMD_polling(void){
- uint8_t i =0;
-
- if(CMD_LIST[CMD_LIST_polling][0]!=CMD_en)
- {
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- if(CMD_LIST[(i+CMD_LIST_polling+1) % MAX_CMD_LIST][0]==CMD_dn)
- {
- continue;
- }else{
- CMD_LIST_polling=(i+CMD_LIST_polling+1) % MAX_CMD_LIST;
- break;
- }
- }
- }
- if(CMD_LIST[CMD_LIST_polling][0]==CMD_en)
- {
- YTSF_DEBUG("\r\n\r\n");
- YTSF_DEBUG1("CMD_LIST_polling=%d\r\n",CMD_LIST_polling);
- //YTSF_CMD_Tx(Ytsf_CMD_A2_SIZE, Ytsf_PORT_0, Ytsf_GUN_NUM_0, Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_00);
- YTSF_CMD_Tx(CMD_LIST[CMD_LIST_polling][1],CMD_LIST[CMD_LIST_polling][2],CMD_LIST[CMD_LIST_polling][3],CMD_LIST[CMD_LIST_polling][4],CMD_LIST[CMD_LIST_polling][5]);
- }
- CMD_LIST_polling++;
- CMD_LIST_polling%=MAX_CMD_LIST;
-
- return CMD_LIST_polling;
- }
- */
- uint8_t Ytsf_CMD_polling_port(uint8_t mport){
- uint8_t i =0;
- uint16_t *poll;
- if(mport == Ytsf_PORT_0){
- poll = &CMD_LIST_polling_port0;
- }
- if(mport == Ytsf_PORT_1){
- poll = &CMD_LIST_polling_port1;
- }
-
- YTSF_DEBUG1("Ytsf_CMD_polling_port mport=%d,poll=%d.\r\n",mport,*poll);
-
- if(CMD_LIST[*poll][0]!=CMD_en)
- {
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- if((CMD_LIST[(i+*poll+1) % MAX_CMD_LIST][0]!=CMD_en) || (CMD_LIST[(i+*poll+1) % MAX_CMD_LIST][2]!=mport))
- {
- continue;
- }else{
- *poll=(i+*poll+1) % MAX_CMD_LIST;
- break;
- }
- }
- }
- if((CMD_LIST[*poll][0]==CMD_en)&&(CMD_LIST[*poll][2]==mport))
- {
- YTSF_DEBUG("\r\n\r\n");
- YTSF_DEBUG1("CMD port[%d] index =%d\r\n",mport,*poll);
- //YTSF_CMD_Tx(Ytsf_CMD_A2_SIZE, Ytsf_PORT_0, Ytsf_GUN_NUM_0, Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_00);
- YTSF_CMD_Tx(CMD_LIST[*poll][1],CMD_LIST[*poll][2],CMD_LIST[*poll][3],CMD_LIST[*poll][4],CMD_LIST[*poll][5]);
- }
- *poll = *poll +1;
- *poll = *poll % MAX_CMD_LIST;
-
- return *poll;
- }
- /************************************************
- 函数名称 : GetYtsfStatus
- 功 能 : 获取英泰赛福状态
- 参 数 : 无
- 返 回 值 : 无
- 作 者 : scx
- *************************************************/
- uint8_t GetYtsfStatus(void){
- return 0;
- }
- /************************************************
- 函数名称 : GetYtsfStatus
- 功 能 : 获取英泰赛福状态
- 参 数 : 无
- 返 回 值 : crc
- 作 者 : scx
- *************************************************/
- uint16_t GetCRC16(uint8_t *_buff,uint32_t _len)
- {
- uint32_t i,j;
- uint16_t crc;
- uint16_t temp;
- crc=(uint16_t)CRC_INIT_VALUE;
- for(i=0;i<_len;i++)
- {
- temp=_buff[i];
- temp &=0x00FF;
- crc^=temp;
- for(j=0;j<8;j++)
- {
- if((crc&0x0001)!=0x00)
- {
- crc>>=1;
- crc^=0xA001;
- }
- else
- {
- crc>>=1;
- }
- }
- }
-
- //printf("%x " ,crc);
- return crc;
- }
- int8_t Ytsf_CMD_Analysis2(tYTSFRxFrame_t *frame,uint8_t *sbuf,uint8_t slen){
-
- int8_t ReturnCode = -1;
- uint16_t scrc=0x0000;
- uint8_t tbuf[128];
- uint8_t tlen = 0;
- int16_t i=0;
-
- YTSF_DEBUG1("Rev len=%d,CMD=",slen);
- YTSF_DEBUG2(sbuf,slen);
-
- if(sbuf==NULL)
- {
- YTSF_DEBUG1("error:tbuf==NULL\r\n");
- return ReturnCode;
- }
- //帧中除了帧头为 BB 外,不再出现 BB,如果出现 BB 则转义为BA 01;如果出现 BA 则转义为 BA 00;帧长度和校验码都按转义前来计算。
- //检查0xba 0x00,并替换为0xba
- tlen = 0;
- for(i = 0;i < slen - 1; i ++){
- if((sbuf[i] == 0xba) && (sbuf[i+1] == 0x00)){
- tbuf[tlen++] = 0xba;
- i++;
- }
- else{
- tbuf[tlen++] = sbuf[i];
- }
- }
- if(!((sbuf[slen-2] == 0xba) && (sbuf[slen-1] == 0x00))){
- tbuf[tlen++] = sbuf[i];
- }
-
- //检查0xba 0x01,并替换为0xbb
- slen = 0;
- for(i = 0;i < tlen - 1; i ++){
- if((tbuf[i] == 0xba) && (tbuf[i+1] == 0x01)){
- sbuf[slen++] = 0xbb;
- i++;
- }
- else{
- sbuf[slen++] = tbuf[i];
- }
- }
- if(!((tbuf[tlen-2] == 0xba) && (tbuf[tlen-1] == 0x01))){
- sbuf[slen++] = tbuf[i];
- }
-
- //帧头(1Byte)
- frame->fhead = sbuf[0];
- if(frame->fhead!=0xbb)
- {
- YTSF_DEBUG1("error:frame->fhead != 0xbb,fhead=0x%02X\r\n",frame->fhead);
- return ReturnCode;
- }
- //帧长度(1Byte)
- frame->flen = sbuf[1];
- if(frame->flen>32)
- {
- YTSF_DEBUG1("error:len > 32,frame->flen=0x%02X\r\n",frame->flen);
- return ReturnCode;
- }
- if(frame->flen!=slen-2)
- {
- YTSF_DEBUG1("error:frame->flen!=slen-2,frame->flen=0x%02X,slen=0x%02X\r\n",frame->flen,slen);
- return ReturnCode;
- }
- //CRC校验(2Byte)
- frame->fcrc = GetCRC16(sbuf,frame->flen);
- scrc = (sbuf[frame->flen]<<8 | sbuf[frame->flen+1]);
- if(frame->fcrc != scrc)
- {
- YTSF_DEBUG1("error:crc error!,frame->fcrc=0x%04X,scrc=0x%04X\r\n",frame->fcrc,scrc);
- return ReturnCode;
- }
- //税控口编号(1Byte),0税控口1,1税控口2
- frame->fport = sbuf[3];
- frame->fcmd = sbuf[4];
- frame->ftype = sbuf[5];
- //start_led(frame->fport+2,slen,99,10*10);//(led,delay*0.1ms,duty,period*0.1ms)
-
- //枪号
- if(frame->fcmd == Ytsf_CMD_INSTRUCT_A1)
- frame->fgun = sbuf[6];
- else if(frame->fcmd == Ytsf_CMD_INSTRUCT_A2)
- frame->fgun = sbuf[6];
- else
- frame->fgun = 0x00;
- mDevice.port[frame->fport].gun_index = frame->fgun;
- //读取结果
- if(frame->fcmd == Ytsf_CMD_INSTRUCT_A1)
- frame->fresult = sbuf[7];
- else if(frame->fcmd == Ytsf_CMD_INSTRUCT_A2)
- frame->fresult = sbuf[7];
- else if(frame->fcmd == Ytsf_CMD_INSTRUCT_A5)
- frame->fresult = sbuf[6];
- else
- frame->fresult = 0xff;
-
- switch(frame->fresult){
- case 0x00:YTSF_DEBUG1("指令执行错误\r\n");break;
- case 0x01:YTSF_DEBUG1("指令执行成功\r\n");break;
- case 0x02:YTSF_DEBUG1("数据模块忙,稍后再试\r\n");break;
- case 0x03:YTSF_DEBUG1("监控微处理器忙,稍后再试\r\n");break;
- case 0x04:YTSF_DEBUG1("监控微处理器通讯超时,超时时间设定为10秒\r\n");break;
- case 0x05:YTSF_DEBUG1("查询的记录不存在\r\n");break;
- case 0x10:YTSF_DEBUG1("监控微处理器序列号不存在\r\n");break;
- case 0x11:YTSF_DEBUG1("密文数据解密错误\r\n");break;
- default :break;
- }
-
-
- if(frame->fresult!=0x01){
- mDevice.port[frame->fport].zlj_state=0;
- return ReturnCode;
- }
-
-
- //读取数据(NByte)
- if(frame->fcmd == Ytsf_CMD_INSTRUCT_A1){
- frame->fldata = slen-10;
- memcpy(frame->fdata,sbuf+8,slen-10);
- }
- else if(frame->fcmd == Ytsf_CMD_INSTRUCT_A2){
- frame->fldata = slen-10;
- memcpy(frame->fdata,sbuf+8,slen-10);
- }
- else if(frame->fcmd == Ytsf_CMD_INSTRUCT_A5){
- frame->fldata = slen-9;
- memcpy(frame->fdata,sbuf+7,slen-9);
- }
- else{
- //frame->fldata = 0xff;
- //memset(frame->fdata,0xff,32);
- }
-
-
- YTSF_DEBUG1("frame:\r\n");
- YTSF_DEBUG("frame->fhead=0x%02X\r\n",frame->fhead);
- YTSF_DEBUG("frame->flen=0x%02X\r\n",frame->flen);
- YTSF_DEBUG("frame->findex=0x%02X\r\n",frame->findex);
- YTSF_DEBUG("frame->fport=0x%02X\r\n",frame->fport);
- YTSF_DEBUG("frame->fcmd=0x%02X\r\n",frame->fcmd);
- YTSF_DEBUG("frame->ftype=0x%02X\r\n",frame->ftype);
- if(frame->fgun!=0xff)
- YTSF_DEBUG("frame->fgun=0x%02X\r\n",frame->fgun);
- if(frame->fresult!=0xff)
- YTSF_DEBUG("frame->fresult=0x%02X\r\n",frame->fresult);
-
- YTSF_DEBUG("frame->fldata=0x%02X,frame->fdata=",frame->fldata);
- if(frame->fldata!=0xff){
- YTSF_DEBUG2(frame->fdata,frame->fldata);
- //YTSF_DEBUG("\r\n");
- }
- YTSF_DEBUG("frame->fcrc=0x%04X\r\n",frame->fcrc);
-
- if((frame->fcmd == Ytsf_CMD_INSTRUCT_A2)||(frame->ftype == Ytsf_CMD_TYPE_00)){
-
- if((frame->fdata[5] >= '0') && (frame->fdata[5] <= '8') ){
- mDevice.port[frame->fport].mntr_factory = 1;
- YTSF_DEBUG1("税控口%d,芯片厂家为:英泰赛福\r\n",frame->fport);
- }
- if((frame->fdata[5] >= 'A') && (frame->fdata[5] <= 'H') ){
- mDevice.port[frame->fport].mntr_factory = 2;
- YTSF_DEBUG1("税控口%d,芯片厂家为:拓盛\r\n",frame->fport);
- }
-
- switch(frame->fdata[5]){
- case '0':
- case '1':
- case 'A':
- case 'a':
- mDevice.port[frame->fport].gun_max = 1;
- break;
- case '2':
- case '3':
- case 'B':
- case 'b':
- mDevice.port[frame->fport].gun_max = 2;
- break;
- case 'C':
- case 'c':
- mDevice.port[frame->fport].gun_max = 3;
- break;
- case '4':
- case 'D':
- case 'd':
- mDevice.port[frame->fport].gun_max = 4;
- break;
- case '6':
- case 'F':
- case 'f':
- mDevice.port[frame->fport].gun_max = 6;
- break;
- case '8':
- case 'H':
- case 'h':
- mDevice.port[frame->fport].gun_max = 8;
- break;
- default:
- mDevice.port[frame->fport].gun_max = 1;
- break;
-
- }
-
- for(i=0;i<(mDevice.port[frame->fport].gun_max);i++){
- Set_CMD_Enable_ByParm(frame->fport,i,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14);
- }
-
- for(i=0;i<(sizeof(CMD_LIST)/sizeof(CMD_LIST[0])-1);i++)
- {
- if((CMD_LIST[i][2]==frame->fport)&&(CMD_LIST[i][3]>mDevice.port[frame->fport].gun_max))
- CMD_LIST[i][0]=CMD_dn;
- };
- }
-
- if((frame->fcmd == Ytsf_CMD_INSTRUCT_A1) || (frame->fcmd == Ytsf_CMD_INSTRUCT_A2)){
- //接收帧,按端口分开
- memcpy(&YTSF_rx_frame_port[frame->fport],frame,sizeof(tYTSFRxFrame_t));
- }
- if((frame->fcmd == Ytsf_CMD_INSTRUCT_A1) && (frame->ftype == Ytsf_CMD_TYPE_14)){
- //接收帧,按端口分开
- YTSF_SET_STATE_port(frame->fport,YTSF_STATE_GUN_GET_ZongLeiJi_INIT,STATE_M_MODE_FORCE);
- }
-
- if((frame->fcmd == Ytsf_CMD_INSTRUCT_A1) && (frame->ftype == Ytsf_CMD_TYPE_11)){
- //接收帧,按端口分开
- memcpy(mDevice.port[frame->fport].dangci_frame,sbuf,slen);
- mDevice.port[frame->fport].dangci_lframe = slen;
- YTSF_SET_STATE_port(frame->fport,YTSF_STATE_GUN_GET_DangCi_INIT,STATE_M_MODE_FORCE);
- }
-
- if((frame->fcmd == Ytsf_CMD_INSTRUCT_A5) && (frame->ftype == Ytsf_CMD_TYPE_00)){
- memcpy(mDevice.ytsf_id,frame->fdata,frame->fldata);
- YTSF_DEBUG1("获取英泰赛福模块ID正常,mDevice.ytsf_id=");
- YTSF_DEBUG2(mDevice.ytsf_id,12);
- }
-
-
- ReturnCode = frame->fport;
- return ReturnCode;
- }
- uint8_t YTSF_GET_STATE(void){
- return mYTSF_state;
- }
- uint8_t YTSF_SET_STATE(uint8_t s){
-
- if(YTSF_GET_STATE()==YTSF_STATE_IDLE){
- mYTSF_state = s;
- return 0;
- }
- return 1;
- }
- int16_t YTSF_SET_STATE_port(uint8_t mport,uint8_t s,uint8_t mode){
- static uint8_t status[2][8]={YTSF_STATE_IDLE};
- static uint8_t front=sizeof(status[0]);
- static uint8_t rear=sizeof(status[0]);
- static uint8_t sum=0;
-
- uint8_t f=0;
- uint8_t r=0;
- if((mport != 0)&&(mport != 1))
- return -1;
-
- if(mode == STATE_M_MODE_INIT){ //初始化队列
- front=sizeof(status[0]);
- rear=sizeof(status[0]);
- sum=0;
- memset(status,YTSF_STATE_IDLE,sizeof(status));
- return 0;
- }
-
- if(mode == STATE_M_MODE_En){ //mode=1入队列(队尾写入)
- if(sum==sizeof(status[0])){ //满队列判断
- return -1;
- }
- r = (rear+1) % (sizeof(status[0])); //循环存储
- status[mport][r] = s;
- rear = r; //更新入队标记
- sum++; //更新总数标记
- return s;
- }
-
- if((mode == STATE_M_MODE_De)&&(mDevice.port[mport].state_m == YTSF_STATE_IDLE)){//mode=2出队列(队首读取)
- if(sum==0){ //空队列判断
- mDevice.port[mport].state_m = YTSF_STATE_IDLE;
- return -1;
- }
- f = (front+1) % (sizeof(status[0])); //循环存储
- mDevice.port[mport].state_m = status[mport][f]; //读取队首值
-
- front = f; //更新出队标记
- sum--; //更新总数标记
- return status[mport][f];
- }
- return -1;
-
- }
- uint8_t YTSF_SN_Compare(uint8_t mport,tDevice_t *device,tYTSFRxFrame_t *frame){
- int8_t i=0;
- for(i=0;i<5;i++){
- if(device->port[mport].mntr_sn[i]!=frame->fdata[i]){
- return 1;
- }
- }
- return 0;
- }
- uint8_t YTSF_SN_Update(tDevice_t *device,tYTSFRxFrame_t *frame){
- int8_t i=0;
-
- for(i=0;i<5;i++){
- device->port[frame->fport].mntr_sn[i]=frame->fdata[i];
- }
-
- if(frame->fport == Ytsf_PORT_0){
- EE_WriteVariable(CURSET_YTSF_PORT0_SN0, (frame->fdata[5]<<8)+(frame->fdata[0]));
- EE_WriteVariable(CURSET_YTSF_PORT0_SN1, (frame->fdata[1]<<8)+(frame->fdata[2]));
- EE_WriteVariable(CURSET_YTSF_PORT0_SN2, (frame->fdata[3]<<8)+(frame->fdata[4]));
-
- /*
-
- for(i=0;i<(sizeof(CMD_LIST)/sizeof(CMD_LIST[0])-1);i++)
- {
- if((CMD_LIST[i][2]==Ytsf_PORT_0)&&(CMD_LIST[i][3]>Port0_GunTotal))
- CMD_LIST[i][0]=CMD_dn;
- };
- */
-
- }
- if(frame->fport == Ytsf_PORT_1){
- EE_WriteVariable(CURSET_YTSF_PORT1_SN0, (frame->fdata[5]<<8)+(frame->fdata[0]));
- EE_WriteVariable(CURSET_YTSF_PORT1_SN1, (frame->fdata[1]<<8)+(frame->fdata[2]));
- EE_WriteVariable(CURSET_YTSF_PORT1_SN2, (frame->fdata[3]<<8)+(frame->fdata[4]));
- }
-
- if((frame->fdata[5] >= '0') && (frame->fdata[5] <= '8') )
- YTSF_DEBUG1("税控口%d,芯片厂家为:英泰赛福\r\n",frame->fport);
- if((frame->fdata[5] >= 'A') && (frame->fdata[5] <= 'H') )
- YTSF_DEBUG1("税控口%d,芯片厂家为:拓盛\r\n",frame->fport);
-
-
- switch(frame->fdata[5]){
- case '0':
- case '1':
- case 'A':
- case 'a':
- device->port[frame->fport].gun_max = 1;
- break;
- case '2':
- case '3':
- case 'B':
- case 'b':
- device->port[frame->fport].gun_max = 2;
- break;
- case 'C':
- case 'c':
- device->port[frame->fport].gun_max = 3;
- break;
- case '4':
- case 'D':
- case 'd':
- device->port[frame->fport].gun_max = 4;
- break;
- case '6':
- case 'F':
- case 'f':
- device->port[frame->fport].gun_max = 6;
- break;
- case '8':
- case 'H':
- case 'h':
- device->port[frame->fport].gun_max = 8;
- break;
- default:
- device->port[frame->fport].gun_max = 1;
- break;
-
- }
-
- for(i=0;i<(device->port[frame->fport].gun_max);i++){
- Set_CMD_Enable_ByParm(frame->fport,i,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_14);
- }
-
- for(i=0;i<(sizeof(CMD_LIST)/sizeof(CMD_LIST[0])-1);i++)
- {
- if((CMD_LIST[i][2]==frame->fport)&&(CMD_LIST[i][3]>=device->port[frame->fport].gun_max))
- CMD_LIST[i][0]=CMD_dn;
- };
-
-
- return 0;
- }
- uint8_t YTSF_CreateMsg_0D(uint8_t mport,tDevice_t *device,tYTSFRxFrame_t *frame,uint8_t *fbuf,uint8_t flen){
- uint16_t index=0;
- // uint16_t temp=0;
- uint8_t check=0;
- uint16_t i=0;
- YTSF_DEBUG1(\
- "deviceReg->port=0x%02X,frame->fport=0x%02X,deviceg->gun=0x%02X,frame->fgun=0x%02X\r\n",\
- frame->fport,frame->fport,device->port[mport].gun_index,frame->fgun);
- if((mport == frame->fport)&&(device->port[mport].gun_index == frame->fgun)){
- device->port[mport].lora_send_msg[index++]=0xFF; //UDP帧头
- device->port[mport].lora_send_msg[index++]=0xEE;
- device->port[mport].lora_send_msg[index++]=0x00; //UDP长度(2B)
- device->port[mport].lora_send_msg[index++]=0x00;
-
- device->port[mport].lora_send_msg[index++]=0x0D; //消息类型
-
- device->port[mport].lora_send_msg[index++]=(device->device_id >> 0)&0xff;//0x4A; //主板号设备ID(4B),比如01 02 03 04
- device->port[mport].lora_send_msg[index++]=(device->device_id >> 8)&0xff;//0x27;
- device->port[mport].lora_send_msg[index++]=(device->device_id >>16)&0xff;//0x00;
- device->port[mport].lora_send_msg[index++]=(device->device_id >>24)&0xff;//0x00;
-
-
- device->port[mport].lora_send_msg[index++]=mport; //UDP消息内容,借用通道号的字段(1B),(高4位表示通道编号,第3位表示通道总数,如0x46,意思是共6个通道,本设备编号为第4个通道。
- device->port[mport].lora_send_msg[index++]=device->port[mport].gun_index;//0x01; //UDP消息内容,枪号(1B)
-
- device->port[mport].lora_send_msg[index++]=device->ytsf_state;//标记加密版还是非加密版,0非加密,1加密(带英泰赛福)
-
-
- //
- if(device->ytsf_state){ //加密(带英泰赛福)
- //总累计,油量7字节,金额7字节
- for(i=0;i<14;i++){
- device->port[mport].lora_send_msg[index++]=device->port[mport].gun[device->port[mport].gun_index].ZongLeiJi[i];
- }
-
- //当次加油信息,数据格式来自英泰赛福
- for(i=0;i<flen;i++){
- device->port[mport].lora_send_msg[index++]=fbuf[i];
- }
- //和校验
- device->port[mport].lora_send_msg[index++] = 0x00;
-
- device->port[mport].lora_send_lmsg = index;
-
- //计算UDP帧,帧长度
- device->port[mport].lora_send_msg[2] = ((index-5) >> 0) & 0xff;
- device->port[mport].lora_send_msg[3] = ((index-5) >> 8) & 0xff;
-
-
- check = 0x00;
- //UDP,校验和
- for(i=0;i<index-1;i++)
- {
- check = check ^ device->port[mport].lora_send_msg[i];
- }
- device->port[mport].lora_send_msg[index-1] = check;
-
- YTSF_DEBUG1("UDP_0D_frame=\r\n");
- for(i=0;i<index;i++)
- YTSF_DEBUG("%02X",device->port[mport].lora_send_msg[i]);
- YTSF_DEBUG("\r\n");
-
- YTSF_DEBUG1("\r\n端口号=%d",mport);
- YTSF_DEBUG("枪号=%d\r\n",device->port[mport].gun_index);
- YTSF_DEBUG("总油量=");
- YTSF_DEBUG2(device->port[mport].gun[device->port[mport].gun_index].ZongLeiJi,7);
- YTSF_DEBUG("总金额=");
- YTSF_DEBUG2(device->port[mport].gun[device->port[mport].gun_index].ZongLeiJi+7,7);
-
- YTSF_DEBUG("时间=");
- YTSF_DEBUG2(fbuf+8,3);
- YTSF_DEBUG("油量=");
- YTSF_DEBUG2(fbuf+11,5);
- YTSF_DEBUG("金额=");
- YTSF_DEBUG2(fbuf+16,5);
- YTSF_DEBUG("单价=");
- YTSF_DEBUG2(fbuf+21,3);
- YTSF_DEBUG("\r\n");
-
- }
- else{ //非加密
- //总累计,油量7字节,金额7字节
- for(i=0;i<24;i++){
- device->port[mport].lora_send_msg[index++]=device->port[mport].gun[device->port[mport].gun_index].ZongLeiJi[i];
- }
-
- //当次加油信息,数据格式来自英泰赛福
- for(i=0;i<flen;i++){
- device->port[mport].lora_send_msg[index++]=fbuf[i];
- }
- //和校验
- device->port[mport].lora_send_msg[index++] = 0x00;
-
- device->port[mport].lora_send_lmsg = index;
-
- //计算UDP帧,帧长度
- device->port[mport].lora_send_msg[2] = ((index-5) >> 0) & 0xff;
- device->port[mport].lora_send_msg[3] = ((index-5) >> 8) & 0xff;
-
-
- check = 0x00;
- //UDP,校验和
- for(i=0;i<index-1;i++)
- {
- check = check ^ device->port[mport].lora_send_msg[i];
- }
- device->port[mport].lora_send_msg[index-1] = check;
-
- YTSF_DEBUG1("UDP_0D_frame=\r\n");
- for(i=0;i<index;i++)
- YTSF_DEBUG("%02X",device->port[mport].lora_send_msg[i]);
- YTSF_DEBUG("\r\n");
-
-
- YTSF_DEBUG1("\r\n端口号=%d",mport);
- YTSF_DEBUG("枪号=%d\r\n",device->port[mport].gun_index);
- YTSF_DEBUG("总油量=");
- YTSF_DEBUG_SN(device->port[mport].gun[device->port[mport].gun_index].ZongLeiJi,12);
- YTSF_DEBUG("\r\n");
- YTSF_DEBUG("总金额=");
- YTSF_DEBUG_SN(device->port[mport].gun[device->port[mport].gun_index].ZongLeiJi+12,12);
- YTSF_DEBUG("\r\n");
-
- YTSF_DEBUG("时间=");
- YTSF_DEBUG_SN(fbuf+5,6);
- YTSF_DEBUG("\r\n");
- YTSF_DEBUG("油量=");
- YTSF_DEBUG_SN(fbuf+11,6);
- YTSF_DEBUG("\r\n");
- YTSF_DEBUG("金额=");
- YTSF_DEBUG_SN(fbuf+17,6);
- YTSF_DEBUG("\r\n");
- YTSF_DEBUG("单价=");
- YTSF_DEBUG_SN(fbuf+23,4);
- YTSF_DEBUG("\r\n");
-
- }
- }
-
-
-
-
-
- return index;
- }
- uint8_t YTSF_CreateMsg_0C(tDevice_t *device){
- uint16_t index=0;
- uint8_t check=0;
- uint16_t i=0;
- device->msg[index++]=0xFF; //UDP帧头
- device->msg[index++]=0xEE;
- device->msg[index++]=0x00; //UDP长度(2B)
- device->msg[index++]=0x00;
-
- device->msg[index++]=0x0C; //消息类型
-
- device->msg[index++]=(device->device_id >> 0)&0xff;//0x4A; //主板号设备ID(4B),比如01 02 03 04
- device->msg[index++]=(device->device_id >> 8)&0xff;//0x27;
- device->msg[index++]=(device->device_id >>16)&0xff;//0x00;
- device->msg[index++]=(device->device_id >>24)&0xff;//0x00;
-
-
- device->msg[index++]=(device->ver >> 0)&0xff; //版本号
- device->msg[index++]=(device->ver >> 8)&0xff; //版本号
-
- //和校验
- device->msg[index++] = 0x00;
-
- device->lmsg = index;
-
- //计算UDP帧,帧长度
- device->msg[2] = ((index-5) >> 0) & 0xff;
- device->msg[3] = ((index-5) >> 8) & 0xff;
-
-
- check = 0x00;
- //UDP,校验和
- for(i=0;i<index-1;i++)
- {
- check = check ^ device->msg[i];
- }
- device->msg[index-1] = check;
-
- YTSF_DEBUG1("UDP_0C_frame=\r\n");
- for(i=0;i<index;i++)
- YTSF_DEBUG("%02X",device->msg[i]);
- YTSF_DEBUG("\r\n");
-
- return index;
- }
- uint8_t Ytsf_UartRx_Process(void){
- uint8_t ReturnCode=1;
-
-
- if(mYTSF_state!=YTSF_STATE_IDLE)
- YTSF_DEBUG1("mYTSF_state=%d\r\n",mYTSF_state);
-
-
- switch(mYTSF_state){
- case YTSF_STATE_IDLE:
- mYTSF_state=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
-
- case YTSF_STATE_DEVICE_HEARTBEAT_INIT:
-
- mYTSF_state=(YTSF_STATE_DEVICE_HEARTBEAT_RUNNING);
- ReturnCode = 0;
- break;
- case YTSF_STATE_DEVICE_HEARTBEAT_RUNNING:
- YTSF_CreateMsg_0C(&mDevice);
- En_Queue(lora_tx_sq,mDevice.msg,sizeof(mDevice.msg),mDevice.lmsg);
- mYTSF_state=(YTSF_STATE_DEVICE_HEARTBEAT_DONE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_DEVICE_HEARTBEAT_DONE:
- mYTSF_state=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_DEVICE_HEARTBEAT_FAILED:
- mYTSF_state=(YTSF_STATE_IDLE);
- ReturnCode = 1;
- break;
-
- default:
- mYTSF_state=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- }
-
- return ReturnCode;
- }
- uint8_t Ytsf_UartRx_Process_port(uint8_t mport){
- uint8_t temp =0;
- // static uint8_t sbuf[32];
- // static uint8_t slen=0;
- uint8_t ReturnCode=1;
-
- //mDevice.port = YTSF_rx_frame.fport;
- //mDevice.gun = YTSF_rx_frame.fgun;
- //YTSF_SET_STATE_port(mport,YTSF_STATE_IDLE,STATE_M_MODE_De);
- if(mDevice.port[mport].state_m!=YTSF_STATE_IDLE)
- YTSF_DEBUG1("mDevice.port[%d].state_m=%d\r\n",mport,mDevice.port[mport].state_m);
-
-
- switch(mDevice.port[mport].state_m){
- case YTSF_STATE_IDLE:
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
-
- case YTSF_STATE_PORT_GET_MONITOR_SN_INIT:
- mDevice.port[mport].state_m=(YTSF_STATE_PORT_GET_MONITOR_SN_RUNNING);
- ReturnCode = 0;
- break;
- case YTSF_STATE_PORT_GET_MONITOR_SN_RUNNING:
- //
- temp=YTSF_SN_Compare(mport,&mDevice,&YTSF_rx_frame_port[mport]);
- if(temp == 0x00){//ok
- mDevice.port[mport].state_m=(YTSF_STATE_PORT_GET_MONITOR_SN_DONE);
- }
- else{//sn changed
- mDevice.port[mport].state_m=(YTSF_STATE_PORT_GET_MONITOR_SN_CHANGED);
- }
- ReturnCode = 0;
- break;
- case YTSF_STATE_PORT_GET_MONITOR_SN_DONE:
- mDevice.port[mport].sn_init_st = 0x88;
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
-
- ReturnCode = 0;
- break;
- case YTSF_STATE_PORT_GET_MONITOR_SN_TIMEOUT:
- ReturnCode = 0;
- break;
- case YTSF_STATE_PORT_GET_MONITOR_SN_CHANGED:
- YTSF_SN_Update(&mDevice,&YTSF_rx_frame_port[mport]);
- mDevice.port[mport].state_m=(YTSF_STATE_PORT_GET_MONITOR_SN_DONE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_PORT_GET_MONITOR_SN_FAILED:
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 1;
- break;
-
- case YTSF_STATE_GUN_GET_ZongLeiJi_INIT:
- //todo时间赋值
- mDevice.port[mport].state_m=(YTSF_STATE_GUN_GET_ZongLeiJi_RUNNING);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_ZongLeiJi_RUNNING:
- //TODO,总累计状态更新
- //YTSF_DEBUG1("mDevice.port=%d,mDevice.gun=%d\r\n",mDevice.port,mDevice.gun);
- if(mDevice.chk_zlj)
- temp = memcmp(mDevice.port[mport].gun[YTSF_rx_frame_port[mport].fgun].ZongLeiJi,YTSF_rx_frame_port[mport].fdata,14);
- else
- temp = 1;
-
- //持续发送数据
- if(temp!=0)
- mDevice.port[mport].state_m=(YTSF_STATE_GUN_GET_ZongLeiJi_CHANGED);
- else
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
-
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_ZongLeiJi_DONE:
- mDevice.port[mport].zlj_state = 0x01;
-
- YTSF_DEBUG1("mDevice.port[%d].zlj_state==1,fgun=%d\r\n",mport,YTSF_rx_frame_port[mport].fgun);
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_ZongLeiJi_TIMEOUT:
- //超时判断
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_ZongLeiJi_CHANGED:
-
- memcpy(mDevice.port[mport].gun[YTSF_rx_frame_port[mport].fgun].ZongLeiJi,YTSF_rx_frame_port[mport].fdata,14);
-
- mDevice.port[mport].state_m=(YTSF_STATE_GUN_GET_ZongLeiJi_DONE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_ZongLeiJi_FAILED:
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 1;
- break;
- case YTSF_STATE_GUN_GET_DangCi_INIT:
- mDevice.port[mport].state_m=(YTSF_STATE_GUN_GET_DangCi_RUNNING);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_DangCi_RUNNING:
- YTSF_CreateMsg_0D(mport,&mDevice,&YTSF_rx_frame_port[mport],mDevice.port[mport].dangci_frame,mDevice.port[mport].dangci_lframe);
- if(mDevice.lora_send_state)
- En_Queue(lora_tx_sq,mDevice.port[mport].lora_send_msg,sizeof(mDevice.port[mport].lora_send_msg),mDevice.port[mport].lora_send_lmsg);
- else
- YTSF_DEBUG1("LoRa_Send_En=0\r\n");
- //缓冲区清零
- memset(mDevice.port[mport].lora_send_msg,0,128);
- mDevice.port[mport].lora_send_lmsg=0;
-
- mDevice.port[mport].state_m=(YTSF_STATE_GUN_GET_DangCi_DONE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_DangCi_DONE:
- mDevice.port[mport].zlj_state=0;
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_DangCi_TIMEOUT:
- mDevice.port[mport].zlj_state=0;
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_DangCi_CHANGED:
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_DangCi_FAILED:
- mDevice.port[mport].zlj_state=0;
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 1;
- break;
-
- default:
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- }
-
- return ReturnCode;
- }
- void Ytsf_loop_port(uint8_t mport){
- int8_t index=0;
- uint8_t zlj_state=0;
- uint8_t sn_init_st=0;
- uint32_t loop_dc_period=0;
- uint32_t loop_dc_timeout=0;
- uint32_t loop_zlj_period=0;
- uint32_t loop_zlj_timeout=0;
- static uint32_t loop_state_period_port[2];
-
-
- Ytsf_UartRx_Process_port(mport);
-
- if(mDevice.ytsf_state==1){
- sn_init_st = mDevice.port[mport].sn_init_st;
-
-
- //若SN未初始化,则进行初始化
- if((sn_init_st == 0x00)&&(TickCounter - mDevice.port[mport].loop_sn_period > mDevice.port[mport].loop_sn_timeout)){
- mDevice.port[mport].loop_sn_period = TickCounter;
- mDevice.port[mport].zlj_state = 0;
-
- index = Get_CMD_Index_ByParm(mport,0,Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_00);
- YTSF_DEBUG1("index=%d\r\n",index);
- if(index >=0)
- YTSF_CMD_Tx(CMD_LIST[index][1],CMD_LIST[index][2],CMD_LIST[index][3],CMD_LIST[index][4],CMD_LIST[index][5]);
- }
-
-
- //总累计已读取,且当次查询定时时间到
- if(sn_init_st == 0x88){
- zlj_state = mDevice.port[mport].zlj_state;
-
- loop_dc_period = mDevice.port[mport].loop_dc_period;
- loop_dc_timeout = mDevice.port[mport].loop_dc_timeout;
-
- loop_zlj_period = mDevice.port[mport].loop_zlj_period;
- loop_zlj_timeout = mDevice.port[mport].loop_zlj_timeout;
-
- //读当次条件符合后,尝试3次。zlj_state在状态机里更新,如果当次读取成功则zlj_state=0x88;
- if((zlj_state!=0)&&(TickCounter - loop_dc_period >loop_dc_timeout)){
- mDevice.port[mport].loop_dc_period = TickCounter;
- loop_state_period_port[mport] = TickCounter;
- if((zlj_state > 0)&&(zlj_state < 3)){
- mDevice.port[mport].zlj_state++;
- index = Get_CMD_Index_ByParm(mport,mDevice.port[mport].gun_index,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_11);
- YTSF_DEBUG1("index=%d\r\n",index);
- if(index >=0)
- YTSF_CMD_Tx(CMD_LIST[index][1],CMD_LIST[index][2],CMD_LIST[index][3],CMD_LIST[index][4],CMD_LIST[index][5]);
- }
- //当次读取失败或超时,总累计记录清零
- if((zlj_state >= 3) && (zlj_state < 10)){
- memset(mDevice.port[mport].gun[YTSF_rx_frame_port[mport].fgun].ZongLeiJi,0,14);
- }
- }
- //总累计
- if((zlj_state == 0x00)&&(TickCounter - loop_zlj_period > loop_zlj_timeout)){
- mDevice.port[mport].loop_zlj_period = TickCounter;
- mDevice.port[mport].loop_dc_period = TickCounter;
- loop_state_period_port[mport] = TickCounter;
- //轮询
- Ytsf_CMD_polling_port(mport);
- //英泰赛福
- if(mDevice.port[mport].mntr_factory == 1)
- mDevice.port[mport].loop_zlj_timeout = 20*1000;//1小时
- //拓盛
- if(mDevice.port[mport].mntr_factory == 2)
- mDevice.port[mport].loop_zlj_timeout = 20*1000;//20秒
- }
- if((zlj_state != 0x00)&&(TickCounter - loop_state_period_port[mport] > 60*1000)){
- loop_state_period_port[mport] = TickCounter;
- mDevice.port[mport].zlj_state = 0;
- }
- }
-
- }
-
- }
- void Ytsf_loop(void){
-
- int8_t temp =0;
- static uint8_t sbuf[128];
- static uint8_t slen=0;
-
- if(mDevice.ytsf_state==0)
- return;
-
- if(!Check_Seqeue_Empty(uart4_rx_sq)){
- slen = 0;
- memset(sbuf,0,sizeof(sbuf));
-
- De_Queue(uart4_rx_sq,sbuf,sizeof(sbuf),(uint8_t *)&slen);
-
- temp=Ytsf_CMD_Analysis2(&YTSF_rx_frame,sbuf,slen);
- if(temp == -1){
- YTSF_DEBUG1("Ytsf_CMD_Analysis2 is failed\r\n");
- YTSF_DEBUG2(sbuf,slen);
-
- }
- else{
- YTSF_DEBUG1("Ytsf_CMD_Analysis2 is succeed\r\n");
- //mYTSF_state=(YTSF_STATE_UART_ANALYSIS_DONE);
- if((YTSF_rx_frame.fcmd == Ytsf_CMD_INSTRUCT_A2) && (YTSF_rx_frame.ftype == Ytsf_CMD_TYPE_00)){
- //YTSF_SET_STATE_port(YTSF_rx_frame.fport,YTSF_STATE_PORT_GET_MONITOR_SN_INIT,STATE_M_MODE_En);
- mDevice.port[YTSF_rx_frame.fport].state_m = YTSF_STATE_PORT_GET_MONITOR_SN_INIT;
- }
- if((YTSF_rx_frame.fcmd == Ytsf_CMD_INSTRUCT_A1) && (YTSF_rx_frame.ftype == Ytsf_CMD_TYPE_14)){
- //YTSF_SET_STATE_port(YTSF_rx_frame.fport,YTSF_STATE_GUN_GET_ZongLeiJi_INIT,STATE_M_MODE_En);
- mDevice.port[YTSF_rx_frame.fport].state_m = YTSF_STATE_GUN_GET_ZongLeiJi_INIT;
- }
- if((YTSF_rx_frame.fcmd == Ytsf_CMD_INSTRUCT_A1) && (YTSF_rx_frame.ftype == Ytsf_CMD_TYPE_11)){
- //YTSF_SET_STATE_port(YTSF_rx_frame.fport,YTSF_STATE_GUN_GET_DangCi_INIT,STATE_M_MODE_En);
- mDevice.port[YTSF_rx_frame.fport].state_m = YTSF_STATE_GUN_GET_DangCi_INIT;
- }
- }
- }
-
- Ytsf_loop_port(Ytsf_PORT_0);
- Ytsf_loop_port(Ytsf_PORT_1);
-
- //心跳长时间无数据发送,则产生心跳
- if(TickCounter - LoRa_SendTimeCouter > LoRa_SendTimeOut){
- LoRa_SendTimeCouter = TickCounter;
-
- YTSF_CreateMsg_0C(&mDevice);
- En_Queue(lora_tx_sq,mDevice.msg,sizeof(mDevice.msg),mDevice.lmsg);
-
- YTSF_DEBUG1("LoRa_SendTimeOut\r\n");
- }
-
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //以下为非加密版
- uint8_t TAX_CMD_Tx(uint8_t size,uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type){
-
- int16_t cmd_l=0;
- // uint8_t sout[64]={0};
- // uint8_t lout=0;
- // uint8_t tmp=0;
- // uint16_t i=0;
- //uint8_t result=0;
-
- //cmd_l=Get_Ytsf_CMD(Ytsf_CMD_A2_SIZE,Ytsf_PORT_0,Ytsf_CMD_INSTRUCT_A1,Ytsf_CMD_TYPE_00,Ytsf_GUN_NUM_0);
- cmd_l=Get_Ytsf_CMD(size,port,gun,instruct,0x00);
-
- if(cmd_l<0){
- YTSF_DEBUG1("TAX SEND CMD,获取发送指令失败\r\n");
- switch(cmd_l){
- case YTSF_CMD_ERROR_CMD:
- YTSF_DEBUG1("TAX_CMD_ERROR_CMD\r\n");
- break;
- case YTSF_CMD_ERROR_LEN:
- YTSF_DEBUG1("TAX_CMD_ERROR_LEN\r\n");
- break;
- case YTSF_CMD_ERROR_TYPE:
- YTSF_DEBUG1("TAX_CMD_ERROR_TYPE\r\n");
- break;
- case YTSF_CMD_ERROR_SN:
- YTSF_DEBUG1("TAX_CMD_ERROR_SN\r\n");
- break;
-
- default:
- break;
- }
- }
- else if(cmd_l > 100)
- {
- YTSF_DEBUG1("TAX SEND CMD,指令长达太长,>100.\r\n");
- }
- else{
- YTSF_DEBUG1("TAX SEND CMD=");
- YTSF_DEBUG2(Ytsf_CMD_BUF,cmd_l);
- if(port == TAX_PORT_0){
- UART5_SendNByte(Ytsf_CMD_BUF,cmd_l);
- YTSF_PORT0_Send_CNT++;
- YTSF_PORT0_Send_Delay = TickCounter;
- start_led(2,cmd_l,10,30*10);//(led,delay*0.1ms,duty,period*0.1ms)
- }
- if(port == TAX_PORT_1){
- USART1_SendNByte(Ytsf_CMD_BUF,cmd_l);
- YTSF_PORT1_Send_CNT++;
- YTSF_PORT1_Send_Delay = TickCounter;
- start_led(3,cmd_l,10,30*10);//(led,delay*0.1ms,duty,period*0.1ms)
- }
- }
-
-
-
-
-
- return 0;
- }
- uint8_t TAX_CMD_polling_port(uint8_t mport){
- uint8_t i =0;
- uint16_t *poll;
- if(mport == Ytsf_PORT_0){
- poll = &CMD_LIST_polling_port0;
- }
- if(mport == Ytsf_PORT_1){
- poll = &CMD_LIST_polling_port1;
- }
-
- YTSF_DEBUG1("TAX_CMD_polling_port mport=%d,poll=%d.\r\n",mport,*poll);
-
- if(CMD_LIST[*poll][0]!=CMD_en)
- {
- for(i=0;i<MAX_CMD_LIST;i++)
- {
- if((CMD_LIST[(i+*poll+1) % MAX_CMD_LIST][0]!=CMD_en) || (CMD_LIST[(i+*poll+1) % MAX_CMD_LIST][2]!=mport))
- {
- continue;
- }else{
- *poll=(i+*poll+1) % MAX_CMD_LIST;
- break;
- }
- }
- }
- if((CMD_LIST[*poll][0]==CMD_en)&&(CMD_LIST[*poll][2]==mport))
- {
- YTSF_DEBUG("\r\n\r\n");
- YTSF_DEBUG1("CMD port[%d] index =%d\r\n",mport,*poll);
- mDevice.port[mport].gun_index = CMD_LIST[*poll][3];
- //YTSF_CMD_Tx(Ytsf_CMD_A2_SIZE, Ytsf_PORT_0, Ytsf_GUN_NUM_0, Ytsf_CMD_INSTRUCT_A2,Ytsf_CMD_TYPE_00);
- TAX_CMD_Tx(CMD_LIST[*poll][1],CMD_LIST[*poll][2],CMD_LIST[*poll][3],CMD_LIST[*poll][4],CMD_LIST[*poll][5]);
- }
- *poll = *poll +1;
- *poll = *poll % MAX_CMD_LIST;
-
- return *poll;
- }
- //mode=1入队列(队尾写入),mode=2出队列(队首读取)
- int16_t TAX_SET_STATE_port(uint8_t mport,uint8_t s,uint8_t mode){
- static uint8_t status[2][8]={YTSF_STATE_IDLE};
- static uint8_t front=sizeof(status[0]);
- static uint8_t rear=sizeof(status[0]);
- static uint8_t sum=0;
-
- uint8_t f=0;
- uint8_t r=0;
- if((mport != 0)&&(mport != 1))
- return -1;
-
- if(mode == STATE_M_MODE_INIT){ //初始化队列
- front=sizeof(status[0]);
- rear=sizeof(status[0]);
- sum=0;
- memset(status,YTSF_STATE_IDLE,sizeof(status));
- return 0;
- }
-
- if(mode == STATE_M_MODE_En){ //mode=1入队列(队尾写入)
- if(sum==sizeof(status[0])){ //满队列判断
- return -1;
- }
- r = (rear+1) % (sizeof(status[0])); //循环存储
- status[mport][r] = s;
- rear = r; //更新入队标记
- sum++; //更新总数标记
- return s;
- }
-
- if((mode == STATE_M_MODE_De)&&(mDevice.port[mport].state_m == YTSF_STATE_IDLE)){//mode=2出队列(队首读取)
- if(sum==0){ //空队列判断
- mDevice.port[mport].state_m = YTSF_STATE_IDLE;
- return -1;
- }
- f = (front+1) % (sizeof(status[0])); //循环存储
- mDevice.port[mport].state_m = status[mport][f]; //读取队首值
-
- front = f; //更新出队标记
- sum--; //更新总数标记
- return status[mport][f];
- }
-
- if(mode == STATE_M_MODE_FORCE){ //mode=3强制设置状态机
- mDevice.port[mport].state_m =s; //更新总数标记
- return s;
- }
- return -1;
- }
-
- uint8_t TAX_SN_Compare(uint8_t mport,tDevice_t *device,tYTSFRxFrame_t *frame){
- int8_t i=0;
- for(i=0;i<10;i++){
- if(device->port[mport].mntr_sn[i]!=frame->fdata[i]){
- return 1;
- }
- }
- return 0;
- }
- uint8_t TAX_SN_Update(tDevice_t *device,tYTSFRxFrame_t *frame){
- int8_t i=0;
-
- for(i=0;i<10;i++){
- device->port[frame->fport].mntr_sn[i]=frame->fdata[i];
- }
-
- if(frame->fport == Ytsf_PORT_0){
- EE_WriteVariable(CURSET_YTSF_PORT0_SN0, (frame->fdata[5]<<8)+(frame->fdata[0]));
- EE_WriteVariable(CURSET_YTSF_PORT0_SN1, (frame->fdata[1]<<8)+(frame->fdata[2]));
- EE_WriteVariable(CURSET_YTSF_PORT0_SN2, (frame->fdata[3]<<8)+(frame->fdata[4]));
-
- /*
-
- for(i=0;i<(sizeof(CMD_LIST)/sizeof(CMD_LIST[0])-1);i++)
- {
- if((CMD_LIST[i][2]==Ytsf_PORT_0)&&(CMD_LIST[i][3]>Port0_GunTotal))
- CMD_LIST[i][0]=CMD_dn;
- };
- */
-
- }
- if(frame->fport == Ytsf_PORT_1){
- EE_WriteVariable(CURSET_YTSF_PORT1_SN0, (frame->fdata[5]<<8)+(frame->fdata[0]));
- EE_WriteVariable(CURSET_YTSF_PORT1_SN1, (frame->fdata[1]<<8)+(frame->fdata[2]));
- EE_WriteVariable(CURSET_YTSF_PORT1_SN2, (frame->fdata[3]<<8)+(frame->fdata[4]));
- }
-
- if((frame->fdata[0] >= '0') && (frame->fdata[0] <= '8') )
- YTSF_DEBUG1("税控口%d,芯片厂家为:英泰赛福\r\n",frame->fport);
- if((frame->fdata[0] >= 'A') && (frame->fdata[0] <= 'H') )
- YTSF_DEBUG1("税控口%d,芯片厂家为:拓盛\r\n",frame->fport);
-
-
- switch(frame->fdata[0]){
- case '0':
- case '1':
- case 'A':
- case 'a':
- device->port[frame->fport].gun_max = 1;
- break;
- case '2':
- case '3':
- case 'B':
- case 'b':
- device->port[frame->fport].gun_max = 2;
- break;
- case 'C':
- case 'c':
- device->port[frame->fport].gun_max = 3;
- break;
- case '4':
- case 'D':
- case 'd':
- device->port[frame->fport].gun_max = 4;
- break;
- case '6':
- case 'F':
- case 'f':
- device->port[frame->fport].gun_max = 6;
- break;
- case '8':
- case 'H':
- case 'h':
- device->port[frame->fport].gun_max = 8;
- break;
- default:
- device->port[frame->fport].gun_max = 1;
- break;
-
- }
-
- for(i=0;i<(device->port[frame->fport].gun_max);i++){
- Set_CMD_Enable_ByParm(frame->fport,i,0x89,0x00);
- }
-
- for(i=0;i<(sizeof(CMD_LIST)/sizeof(CMD_LIST[0])-1);i++)
- {
- if((CMD_LIST[i][2]==frame->fport)&&(CMD_LIST[i][3]>=device->port[frame->fport].gun_max))
- CMD_LIST[i][0]=CMD_dn;
- };
-
-
- return 0;
- }
- int8_t Tax_CMD_Analysis(uint8_t mport,tYTSFRxFrame_t *frame,uint8_t *sbuf,uint8_t slen){
-
- int8_t ReturnCode = -1;
- uint8_t scrc=0x0000;
- // uint8_t tbuf[128];
- // uint8_t tlen = 0;
- int16_t i=0;
- uint8_t check=0;
-
- YTSF_DEBUG1("Rev len=%d,CMD=",slen);
- YTSF_DEBUG2(sbuf,slen);
-
- if(sbuf==NULL)
- {
- YTSF_DEBUG1("error:tbuf==NULL\r\n");
- return ReturnCode;
- }
-
-
- //帧头(1Byte)
- frame->fhead = sbuf[0];
- if(frame->fhead!=0xbb)
- {
- YTSF_DEBUG1("error:frame->fhead != 0xbb,fhead=0x%02X\r\n",frame->fhead);
- return ReturnCode;
- }
- //帧长度(1Byte)
- frame->flen = sbuf[1];
- if(frame->flen>64)
- {
- YTSF_DEBUG1("error:len > 64,frame->flen=0x%02X\r\n",frame->flen);
- return ReturnCode;
- }
- if(frame->flen!=slen-2)
- {
- YTSF_DEBUG1("error:frame->flen!=slen-2,frame->flen=0x%02X,slen=0x%02X\r\n",frame->flen,slen);
- return ReturnCode;
- }
- //和校验
- check = 0;
- for(i=2;i<slen-1;i++)
- {
- check = check ^ sbuf[i];
- }
- scrc = sbuf[slen-1];
- if(check != scrc)
- {
- YTSF_DEBUG1("error:Sum check error!,check0x%02X,scrc=0x%02X\r\n",check,scrc);
- return ReturnCode;
- }
- //税控口编号(1Byte),0税控口1,1税控口2
- frame->fport = mport;
- frame->fcmd = sbuf[3];//0x83,0x86,0x89
- frame->fstatus = sbuf[4];
- //读取数据(NByte)
- frame->fldata = slen-5;
- memcpy(frame->fdata,sbuf+5,slen-5);
- //
- if(frame->fcmd == 0x83){
-
- if((frame->fdata[0] >= '0') && (frame->fdata[0] <= '8') ){
- mDevice.port[frame->fport].mntr_factory = 1;
- YTSF_DEBUG1("税控口%d,芯片厂家为:英泰赛福\r\n",frame->fport);
- }
- if((frame->fdata[0] >= 'A') && (frame->fdata[0] <= 'H') ){
- mDevice.port[frame->fport].mntr_factory = 2;
- YTSF_DEBUG1("税控口%d,芯片厂家为:拓盛\r\n",frame->fport);
- }
- switch(frame->fdata[5]){
- case '0':
- case '1':
- case 'A':
- case 'a':
- mDevice.port[frame->fport].gun_max = 1;
- break;
- case '2':
- case '3':
- case 'B':
- case 'b':
- mDevice.port[frame->fport].gun_max = 2;
- break;
- case 'C':
- case 'c':
- mDevice.port[frame->fport].gun_max = 3;
- break;
- case '4':
- case 'D':
- case 'd':
- mDevice.port[frame->fport].gun_max = 4;
- break;
- case '6':
- case 'F':
- case 'f':
- mDevice.port[frame->fport].gun_max = 6;
- break;
- case '8':
- case 'H':
- case 'h':
- mDevice.port[frame->fport].gun_max = 8;
- break;
- default:
- mDevice.port[frame->fport].gun_max = 1;
- break;
-
- }
-
- }
-
- memcpy(&YTSF_rx_frame_port[frame->fport],frame,sizeof(tYTSFRxFrame_t));
-
- if(frame->fcmd == 0x89){
- //接收帧,按端口分开
-
- TAX_SET_STATE_port(frame->fport,YTSF_STATE_GUN_GET_ZongLeiJi_INIT,STATE_M_MODE_FORCE);
- }
-
- if(frame->fcmd == 0x86){
- //接收帧,按端口分开
- memcpy(mDevice.port[frame->fport].dangci_frame,sbuf,slen);
- mDevice.port[frame->fport].dangci_lframe = slen;
- TAX_SET_STATE_port(frame->fport,YTSF_STATE_GUN_GET_DangCi_INIT,STATE_M_MODE_FORCE);
- }
-
- ReturnCode = frame->fport;
- return ReturnCode;
- }
- uint8_t Tax_HeartBeat_Process(void){
- uint8_t ReturnCode=1;
-
-
- if(mYTSF_state!=YTSF_STATE_IDLE)
- YTSF_DEBUG1("mYTSF_state=%d\r\n",mYTSF_state);
-
-
- switch(mYTSF_state){
- case YTSF_STATE_IDLE:
- mYTSF_state=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
-
- case YTSF_STATE_DEVICE_HEARTBEAT_INIT:
-
- mYTSF_state=(YTSF_STATE_DEVICE_HEARTBEAT_RUNNING);
- ReturnCode = 0;
- break;
- case YTSF_STATE_DEVICE_HEARTBEAT_RUNNING:
- YTSF_CreateMsg_0C(&mDevice);
- En_Queue(lora_tx_sq,mDevice.msg,sizeof(mDevice.msg),mDevice.lmsg);
- mYTSF_state=(YTSF_STATE_DEVICE_HEARTBEAT_DONE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_DEVICE_HEARTBEAT_DONE:
- mYTSF_state=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_DEVICE_HEARTBEAT_FAILED:
- mYTSF_state=(YTSF_STATE_IDLE);
- ReturnCode = 1;
- break;
-
- default:
- mYTSF_state=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- }
-
- return ReturnCode;
- }
- uint8_t Tax_UartRx_Process_port(uint8_t mport){
- uint8_t temp =0;
- //static uint8_t sbuf[32];
- //static uint8_t slen=0;
- uint8_t ReturnCode=1;
-
- TAX_SET_STATE_port(mport,YTSF_STATE_IDLE,STATE_M_MODE_De);//若当前状态机为,YTSF_STATE_IDLE,则出队列且更新状态。
-
- if(mDevice.port[mport].state_m!=YTSF_STATE_IDLE)
- YTSF_DEBUG1("mDevice.port[%d].state_m=%d\r\n",mport,mDevice.port[mport].state_m);
-
-
- switch(mDevice.port[mport].state_m){
- case YTSF_STATE_IDLE:
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
-
- case YTSF_STATE_PORT_GET_MONITOR_SN_INIT:
- mDevice.port[mport].state_m=(YTSF_STATE_PORT_GET_MONITOR_SN_RUNNING);
- ReturnCode = 0;
- break;
- case YTSF_STATE_PORT_GET_MONITOR_SN_RUNNING:
- //
- temp=TAX_SN_Compare(mport,&mDevice,&YTSF_rx_frame_port[mport]);
- if(temp == 0x00){//ok
- mDevice.port[mport].state_m=(YTSF_STATE_PORT_GET_MONITOR_SN_DONE);
- }
- else{//sn changed
- mDevice.port[mport].state_m=(YTSF_STATE_PORT_GET_MONITOR_SN_CHANGED);
- }
- ReturnCode = 0;
- break;
- case YTSF_STATE_PORT_GET_MONITOR_SN_DONE:
- mDevice.port[mport].sn_init_st = 0x88;
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
-
- ReturnCode = 0;
- break;
- case YTSF_STATE_PORT_GET_MONITOR_SN_TIMEOUT:
- ReturnCode = 0;
- break;
- case YTSF_STATE_PORT_GET_MONITOR_SN_CHANGED:
- TAX_SN_Update(&mDevice,&YTSF_rx_frame_port[mport]);
- mDevice.port[mport].state_m=(YTSF_STATE_PORT_GET_MONITOR_SN_DONE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_PORT_GET_MONITOR_SN_FAILED:
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 1;
- break;
-
- case YTSF_STATE_GUN_GET_ZongLeiJi_INIT:
- //todo时间赋值
- mDevice.port[mport].state_m=(YTSF_STATE_GUN_GET_ZongLeiJi_RUNNING);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_ZongLeiJi_RUNNING:
- //TODO,总累计状态更新
- //YTSF_DEBUG1("mDevice.port=%d,mDevice.gun=%d\r\n",mDevice.port,mDevice.gun);
- if(mDevice.chk_zlj)
- temp = memcmp(mDevice.port[mport].gun[YTSF_rx_frame_port[mport].fgun].ZongLeiJi,YTSF_rx_frame_port[mport].fdata,24);
- else
- temp = 1;
-
- //持续发送数据
- if(temp!=0)
- mDevice.port[mport].state_m=(YTSF_STATE_GUN_GET_ZongLeiJi_CHANGED);
- else
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
-
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_ZongLeiJi_DONE:
- mDevice.port[mport].zlj_state = 0x01;
-
- YTSF_DEBUG1("mDevice.port[%d].zlj_state==1,fgun=%d\r\n",mport,YTSF_rx_frame_port[mport].fgun);
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_ZongLeiJi_TIMEOUT:
- //超时判断
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_ZongLeiJi_CHANGED:
-
- memcpy(mDevice.port[mport].gun[YTSF_rx_frame_port[mport].fgun].ZongLeiJi,YTSF_rx_frame_port[mport].fdata,24);
-
- mDevice.port[mport].state_m=(YTSF_STATE_GUN_GET_ZongLeiJi_DONE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_ZongLeiJi_FAILED:
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 1;
- break;
- case YTSF_STATE_GUN_GET_DangCi_INIT:
- mDevice.port[mport].state_m=(YTSF_STATE_GUN_GET_DangCi_RUNNING);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_DangCi_RUNNING:
- YTSF_CreateMsg_0D(mport,&mDevice,&YTSF_rx_frame_port[mport],mDevice.port[mport].dangci_frame,mDevice.port[mport].dangci_lframe);
- if(mDevice.lora_send_state)
- En_Queue(lora_tx_sq,mDevice.port[mport].lora_send_msg,sizeof(mDevice.port[mport].lora_send_msg),mDevice.port[mport].lora_send_lmsg);
- else
- YTSF_DEBUG1("LoRa_Send_En=0\r\n");
- //缓冲区清零
- memset(mDevice.port[mport].lora_send_msg,0,128);
- mDevice.port[mport].lora_send_lmsg=0;
-
- mDevice.port[mport].state_m=(YTSF_STATE_GUN_GET_DangCi_DONE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_DangCi_DONE:
- mDevice.port[mport].zlj_state=0;
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_DangCi_TIMEOUT:
- mDevice.port[mport].zlj_state=0;
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_DangCi_CHANGED:
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- break;
- case YTSF_STATE_GUN_GET_DangCi_FAILED:
- mDevice.port[mport].zlj_state=0;
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 1;
- break;
-
- default:
- mDevice.port[mport].state_m=(YTSF_STATE_IDLE);
- ReturnCode = 0;
- }
-
- return ReturnCode;
- }
- void Tax_loop_port(uint8_t mport){
- int16_t index=0;
- uint8_t zlj_state=0;
- uint8_t sn_init_st=0;
- uint32_t loop_dc_period=0;
- uint32_t loop_dc_timeout=0;
- uint32_t loop_zlj_period=0;
- uint32_t loop_zlj_timeout=0;
- static uint32_t loop_state_period_port[2];
-
-
- Tax_UartRx_Process_port(mport);
-
- if(mDevice.ytsf_state==0){
- sn_init_st = mDevice.port[mport].sn_init_st;
-
-
- //若SN未初始化,则进行初始化
- if((sn_init_st == 0x00)&&(TickCounter - mDevice.port[mport].loop_sn_period > mDevice.port[mport].loop_sn_timeout)){
- mDevice.port[mport].loop_sn_period = TickCounter;
- mDevice.port[mport].zlj_state = 0;
-
- index = Get_CMD_Index_ByParm(mport,0x00,0x83,0x00);
- YTSF_DEBUG1("index=%d\r\n",index);
- if(index >=0)
- TAX_CMD_Tx(CMD_LIST[index][1],CMD_LIST[index][2],CMD_LIST[index][3],CMD_LIST[index][4],CMD_LIST[index][5]);
- }
-
-
- //总累计已读取,且当次查询定时时间到
- if(sn_init_st == 0x88){
- zlj_state = mDevice.port[mport].zlj_state;
-
- loop_dc_period = mDevice.port[mport].loop_dc_period;
- loop_dc_timeout = mDevice.port[mport].loop_dc_timeout;
-
- loop_zlj_period = mDevice.port[mport].loop_zlj_period;
- loop_zlj_timeout = mDevice.port[mport].loop_zlj_timeout;
-
- //读当次条件符合后,尝试3次。zlj_state在状态机里更新,如果当次读取成功则zlj_state=0x88;
- if((zlj_state!=0)&&(TickCounter - loop_dc_period >loop_dc_timeout)){
- mDevice.port[mport].loop_dc_period = TickCounter;
- loop_state_period_port[mport] = TickCounter;
- if((zlj_state > 0)&&(zlj_state < 3)){
- mDevice.port[mport].zlj_state++;
- index = Get_CMD_Index_ByParm(mport,mDevice.port[mport].gun_index,0x86,0x00);
- YTSF_DEBUG1("index=%d\r\n",index);
- if(index >=0)
- TAX_CMD_Tx(CMD_LIST[index][1],CMD_LIST[index][2],CMD_LIST[index][3],CMD_LIST[index][4],CMD_LIST[index][5]);
- }
- //当次读取失败或超时,总累计记录清零
- if((zlj_state >= 3) && (zlj_state < 10)){
- memset(mDevice.port[mport].gun[YTSF_rx_frame_port[mport].fgun].ZongLeiJi,0,24);
- }
- }
- //总累计
- if((zlj_state == 0x00)&&(TickCounter - loop_zlj_period > loop_zlj_timeout)){
- mDevice.port[mport].loop_zlj_period = TickCounter;
- mDevice.port[mport].loop_dc_period = TickCounter;
- loop_state_period_port[mport] = TickCounter;
- //轮询
- TAX_CMD_polling_port(mport);
- //英泰赛福
- if(mDevice.port[mport].mntr_factory == 1)
- mDevice.port[mport].loop_zlj_timeout = 20*1000;//1小时
- //拓盛
- if(mDevice.port[mport].mntr_factory == 2)
- mDevice.port[mport].loop_zlj_timeout = 20*1000;//20秒
- }
- if((zlj_state != 0x00)&&(TickCounter - loop_state_period_port[mport] > 60*1000)){
- loop_state_period_port[mport] = TickCounter;
- mDevice.port[mport].zlj_state = 0;
- }
- }
-
- }
-
- }
- void Tax_loop(void){
-
- int8_t temp =0;
- static uint8_t sbuf[128];
- static uint8_t slen=0;
-
- if(mDevice.ytsf_state==1)
- return;
-
- if(!Check_Seqeue_Empty(uart5_rx_sq)){
- slen = 0;
- memset(sbuf,0,sizeof(sbuf));
-
- De_Queue(uart5_rx_sq,sbuf,sizeof(sbuf),(uint8_t *)&slen);
-
- temp=Tax_CMD_Analysis(TAX_PORT_0,&Tax_rx_frame[TAX_PORT_0],sbuf,slen);
- if(temp == -1){
- YTSF_DEBUG1("Tax_CMD_Analysis is failed\r\n");
- YTSF_DEBUG2(sbuf,slen);
- }
- else{
- YTSF_DEBUG1("Tax_CMD_Analysis is succeed\r\n");
- //mYTSF_state=(YTSF_STATE_UART_ANALYSIS_DONE);
- if(Tax_rx_frame[TAX_PORT_0].fcmd == 0x83){
- //TAX_SET_STATE_port(YTSF_rx_frame.fport,YTSF_STATE_PORT_GET_MONITOR_SN_INIT,STATE_M_MODE_En);
- mDevice.port[TAX_PORT_0].state_m = YTSF_STATE_PORT_GET_MONITOR_SN_INIT;
- }
- if(Tax_rx_frame[TAX_PORT_0].fcmd == 0x89){
- //TAX_SET_STATE_port(YTSF_rx_frame.fport,YTSF_STATE_GUN_GET_ZongLeiJi_INIT,STATE_M_MODE_En);
- mDevice.port[TAX_PORT_0].state_m = YTSF_STATE_GUN_GET_ZongLeiJi_INIT;
- }
- if(Tax_rx_frame[TAX_PORT_0].fcmd == 0x86){
- //TAX_SET_STATE_port(YTSF_rx_frame.fport,YTSF_STATE_GUN_GET_DangCi_INIT,STATE_M_MODE_En);
- mDevice.port[TAX_PORT_0].state_m = YTSF_STATE_GUN_GET_DangCi_INIT;
- }
- }
- }
-
- Tax_loop_port(TAX_PORT_0);
-
-
- if(!Check_Seqeue_Empty(usart1_rx_sq)){
- slen = 0;
- memset(sbuf,0,sizeof(sbuf));
-
- De_Queue(usart1_rx_sq,sbuf,sizeof(sbuf),(uint8_t *)&slen);
-
- temp=Tax_CMD_Analysis(TAX_PORT_1,&Tax_rx_frame[TAX_PORT_1],sbuf,slen);
- if(temp == -1){
- YTSF_DEBUG1("Tax_CMD_Analysis is failed\r\n");
- YTSF_DEBUG2(sbuf,slen);
- }
- else{
- YTSF_DEBUG1("Tax_CMD_Analysis is succeed\r\n");
- //mYTSF_state=(YTSF_STATE_UART_ANALYSIS_DONE);
- if(Tax_rx_frame[TAX_PORT_1].fcmd == 0x83){
- //TAX_SET_STATE_port(YTSF_rx_frame.fport,YTSF_STATE_PORT_GET_MONITOR_SN_INIT);
- mDevice.port[TAX_PORT_1].state_m = YTSF_STATE_PORT_GET_MONITOR_SN_INIT;
- }
- if(Tax_rx_frame[TAX_PORT_1].fcmd == 0x89){
- //TAX_SET_STATE_port(YTSF_rx_frame.fport,YTSF_STATE_GUN_GET_ZongLeiJi_INIT);
- mDevice.port[TAX_PORT_1].state_m = YTSF_STATE_GUN_GET_ZongLeiJi_INIT;
- }
- if(Tax_rx_frame[TAX_PORT_1].fcmd == 0x86){
- //TAX_SET_STATE_port(YTSF_rx_frame.fport,YTSF_STATE_GUN_GET_DangCi_INIT);
- mDevice.port[TAX_PORT_1].state_m = YTSF_STATE_GUN_GET_DangCi_INIT;
- }
- }
- }
- Tax_loop_port(TAX_PORT_1);
-
- //心跳长时间无数据发送,则产生心跳
- if(TickCounter - LoRa_SendTimeCouter > LoRa_SendTimeOut){
- LoRa_SendTimeCouter = TickCounter;
-
- YTSF_CreateMsg_0C(&mDevice);
- En_Queue(lora_tx_sq,mDevice.msg,sizeof(mDevice.msg),mDevice.lmsg);
-
- YTSF_DEBUG1("LoRa_SendTimeOut\r\n");
- }
-
- }
- /**** Copyright (C)2016 sun. All Rights Reserved **** END OF FILE ****/
|