12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509235102351123512235132351423515235162351723518235192352023521235222352323524235252352623527235282352923530235312353223533235342353523536235372353823539235402354123542235432354423545235462354723548235492355023551235522355323554235552355623557235582355923560235612356223563235642356523566235672356823569235702357123572235732357423575235762357723578235792358023581235822358323584235852358623587235882358923590235912359223593235942359523596235972359823599236002360123602236032360423605236062360723608236092361023611236122361323614236152361623617236182361923620236212362223623236242362523626236272362823629236302363123632236332363423635236362363723638236392364023641236422364323644236452364623647236482364923650236512365223653236542365523656236572365823659236602366123662236632366423665236662366723668236692367023671236722367323674236752367623677236782367923680236812368223683236842368523686236872368823689236902369123692236932369423695236962369723698236992370023701237022370323704237052370623707237082370923710237112371223713237142371523716237172371823719237202372123722237232372423725237262372723728237292373023731237322373323734237352373623737237382373923740237412374223743237442374523746237472374823749237502375123752237532375423755237562375723758237592376023761237622376323764237652376623767237682376923770237712377223773237742377523776237772377823779237802378123782237832378423785237862378723788237892379023791237922379323794237952379623797237982379923800238012380223803238042380523806238072380823809238102381123812238132381423815238162381723818238192382023821238222382323824238252382623827238282382923830238312383223833238342383523836238372383823839238402384123842238432384423845238462384723848238492385023851238522385323854238552385623857238582385923860238612386223863238642386523866238672386823869238702387123872238732387423875238762387723878238792388023881238822388323884238852388623887238882388923890238912389223893238942389523896238972389823899239002390123902239032390423905239062390723908239092391023911239122391323914239152391623917239182391923920239212392223923239242392523926239272392823929239302393123932239332393423935239362393723938239392394023941239422394323944239452394623947239482394923950239512395223953239542395523956239572395823959239602396123962239632396423965239662396723968239692397023971239722397323974239752397623977239782397923980239812398223983239842398523986239872398823989239902399123992239932399423995239962399723998239992400024001240022400324004240052400624007240082400924010240112401224013240142401524016240172401824019240202402124022240232402424025240262402724028240292403024031240322403324034240352403624037240382403924040240412404224043240442404524046240472404824049240502405124052240532405424055240562405724058240592406024061240622406324064240652406624067240682406924070240712407224073240742407524076240772407824079240802408124082240832408424085240862408724088240892409024091240922409324094240952409624097240982409924100241012410224103241042410524106241072410824109241102411124112241132411424115241162411724118241192412024121241222412324124241252412624127241282412924130241312413224133241342413524136241372413824139241402414124142241432414424145241462414724148241492415024151241522415324154241552415624157241582415924160241612416224163241642416524166241672416824169241702417124172241732417424175241762417724178241792418024181241822418324184241852418624187241882418924190241912419224193241942419524196241972419824199242002420124202242032420424205242062420724208242092421024211242122421324214242152421624217242182421924220242212422224223242242422524226242272422824229242302423124232242332423424235242362423724238242392424024241242422424324244242452424624247242482424924250242512425224253242542425524256242572425824259242602426124262242632426424265242662426724268242692427024271242722427324274242752427624277242782427924280242812428224283242842428524286242872428824289242902429124292242932429424295242962429724298242992430024301243022430324304243052430624307243082430924310243112431224313243142431524316243172431824319243202432124322243232432424325243262432724328243292433024331243322433324334243352433624337243382433924340243412434224343243442434524346243472434824349243502435124352243532435424355243562435724358243592436024361243622436324364243652436624367243682436924370243712437224373243742437524376243772437824379243802438124382243832438424385243862438724388243892439024391243922439324394243952439624397243982439924400244012440224403244042440524406244072440824409244102441124412244132441424415244162441724418244192442024421244222442324424244252442624427244282442924430244312443224433244342443524436244372443824439244402444124442244432444424445244462444724448244492445024451244522445324454244552445624457244582445924460244612446224463244642446524466244672446824469244702447124472244732447424475244762447724478244792448024481244822448324484244852448624487244882448924490244912449224493244942449524496244972449824499245002450124502245032450424505245062450724508245092451024511245122451324514245152451624517245182451924520245212452224523245242452524526245272452824529245302453124532245332453424535245362453724538245392454024541245422454324544245452454624547245482454924550245512455224553245542455524556245572455824559245602456124562245632456424565245662456724568245692457024571245722457324574245752457624577245782457924580245812458224583245842458524586245872458824589245902459124592245932459424595245962459724598245992460024601246022460324604246052460624607246082460924610246112461224613246142461524616246172461824619246202462124622246232462424625246262462724628246292463024631246322463324634246352463624637246382463924640246412464224643246442464524646246472464824649246502465124652246532465424655246562465724658246592466024661246622466324664246652466624667246682466924670246712467224673246742467524676246772467824679246802468124682246832468424685246862468724688246892469024691246922469324694246952469624697246982469924700247012470224703247042470524706247072470824709247102471124712247132471424715247162471724718247192472024721247222472324724247252472624727247282472924730247312473224733247342473524736247372473824739247402474124742247432474424745247462474724748247492475024751247522475324754247552475624757247582475924760247612476224763247642476524766247672476824769247702477124772247732477424775247762477724778247792478024781247822478324784247852478624787247882478924790247912479224793247942479524796247972479824799248002480124802248032480424805248062480724808248092481024811248122481324814248152481624817248182481924820248212482224823248242482524826248272482824829248302483124832248332483424835248362483724838248392484024841248422484324844248452484624847248482484924850248512485224853248542485524856248572485824859248602486124862248632486424865248662486724868248692487024871248722487324874248752487624877248782487924880248812488224883248842488524886248872488824889248902489124892248932489424895248962489724898248992490024901249022490324904249052490624907249082490924910249112491224913249142491524916249172491824919249202492124922249232492424925249262492724928249292493024931249322493324934249352493624937249382493924940249412494224943249442494524946249472494824949249502495124952249532495424955249562495724958249592496024961249622496324964249652496624967249682496924970249712497224973249742497524976249772497824979249802498124982249832498424985249862498724988249892499024991249922499324994249952499624997249982499925000250012500225003250042500525006250072500825009250102501125012250132501425015250162501725018250192502025021250222502325024250252502625027250282502925030250312503225033250342503525036250372503825039250402504125042250432504425045250462504725048250492505025051250522505325054250552505625057250582505925060250612506225063250642506525066250672506825069250702507125072250732507425075250762507725078250792508025081250822508325084250852508625087250882508925090250912509225093250942509525096250972509825099251002510125102251032510425105251062510725108251092511025111251122511325114251152511625117251182511925120251212512225123251242512525126251272512825129251302513125132251332513425135251362513725138251392514025141251422514325144251452514625147251482514925150251512515225153251542515525156251572515825159251602516125162251632516425165251662516725168251692517025171251722517325174251752517625177251782517925180251812518225183251842518525186251872518825189251902519125192251932519425195251962519725198251992520025201252022520325204252052520625207252082520925210252112521225213252142521525216252172521825219252202522125222252232522425225252262522725228252292523025231252322523325234252352523625237252382523925240252412524225243252442524525246252472524825249252502525125252252532525425255252562525725258252592526025261252622526325264252652526625267252682526925270252712527225273252742527525276252772527825279252802528125282252832528425285252862528725288252892529025291252922529325294252952529625297252982529925300253012530225303253042530525306253072530825309253102531125312253132531425315253162531725318253192532025321253222532325324253252532625327253282532925330253312533225333253342533525336253372533825339253402534125342253432534425345253462534725348253492535025351253522535325354253552535625357253582535925360253612536225363253642536525366253672536825369253702537125372253732537425375253762537725378253792538025381253822538325384253852538625387253882538925390253912539225393253942539525396253972539825399254002540125402254032540425405254062540725408254092541025411254122541325414254152541625417254182541925420254212542225423254242542525426254272542825429254302543125432254332543425435254362543725438254392544025441254422544325444254452544625447254482544925450254512545225453254542545525456254572545825459254602546125462254632546425465254662546725468254692547025471254722547325474254752547625477254782547925480254812548225483254842548525486254872548825489254902549125492254932549425495254962549725498254992550025501255022550325504255052550625507255082550925510255112551225513255142551525516255172551825519255202552125522255232552425525255262552725528255292553025531255322553325534255352553625537255382553925540255412554225543255442554525546255472554825549255502555125552255532555425555255562555725558255592556025561255622556325564255652556625567255682556925570255712557225573255742557525576255772557825579255802558125582255832558425585255862558725588255892559025591255922559325594255952559625597255982559925600256012560225603256042560525606256072560825609256102561125612256132561425615256162561725618256192562025621256222562325624256252562625627256282562925630256312563225633256342563525636256372563825639256402564125642256432564425645256462564725648256492565025651256522565325654256552565625657256582565925660256612566225663256642566525666256672566825669256702567125672256732567425675256762567725678256792568025681256822568325684256852568625687256882568925690256912569225693256942569525696256972569825699257002570125702257032570425705257062570725708257092571025711257122571325714257152571625717257182571925720257212572225723257242572525726257272572825729257302573125732257332573425735257362573725738257392574025741257422574325744257452574625747257482574925750257512575225753257542575525756257572575825759257602576125762257632576425765257662576725768257692577025771257722577325774257752577625777257782577925780257812578225783257842578525786257872578825789257902579125792257932579425795257962579725798257992580025801258022580325804258052580625807258082580925810258112581225813258142581525816258172581825819258202582125822258232582425825258262582725828258292583025831258322583325834258352583625837258382583925840258412584225843258442584525846258472584825849258502585125852258532585425855258562585725858258592586025861258622586325864258652586625867258682586925870258712587225873258742587525876258772587825879258802588125882258832588425885258862588725888258892589025891258922589325894258952589625897258982589925900259012590225903259042590525906259072590825909259102591125912259132591425915259162591725918259192592025921259222592325924259252592625927259282592925930259312593225933259342593525936259372593825939259402594125942259432594425945259462594725948259492595025951259522595325954259552595625957259582595925960259612596225963259642596525966259672596825969259702597125972259732597425975259762597725978259792598025981259822598325984259852598625987259882598925990259912599225993259942599525996259972599825999260002600126002260032600426005260062600726008260092601026011260122601326014260152601626017260182601926020260212602226023260242602526026260272602826029260302603126032260332603426035260362603726038260392604026041260422604326044260452604626047260482604926050260512605226053260542605526056260572605826059260602606126062260632606426065260662606726068260692607026071260722607326074260752607626077260782607926080260812608226083260842608526086260872608826089260902609126092260932609426095260962609726098260992610026101261022610326104261052610626107261082610926110261112611226113261142611526116261172611826119261202612126122261232612426125261262612726128261292613026131261322613326134261352613626137261382613926140261412614226143261442614526146261472614826149261502615126152261532615426155261562615726158261592616026161261622616326164261652616626167261682616926170261712617226173261742617526176261772617826179261802618126182261832618426185261862618726188261892619026191261922619326194261952619626197261982619926200262012620226203262042620526206262072620826209262102621126212262132621426215262162621726218262192622026221262222622326224262252622626227262282622926230262312623226233262342623526236262372623826239262402624126242262432624426245262462624726248262492625026251262522625326254262552625626257262582625926260262612626226263262642626526266262672626826269262702627126272262732627426275262762627726278262792628026281262822628326284262852628626287262882628926290262912629226293262942629526296262972629826299263002630126302263032630426305263062630726308263092631026311263122631326314263152631626317263182631926320263212632226323263242632526326263272632826329263302633126332263332633426335263362633726338263392634026341263422634326344263452634626347263482634926350263512635226353263542635526356263572635826359263602636126362263632636426365263662636726368263692637026371263722637326374263752637626377263782637926380263812638226383263842638526386263872638826389263902639126392263932639426395263962639726398263992640026401264022640326404264052640626407264082640926410264112641226413264142641526416264172641826419264202642126422264232642426425264262642726428264292643026431264322643326434264352643626437264382643926440264412644226443264442644526446264472644826449264502645126452264532645426455264562645726458264592646026461264622646326464264652646626467264682646926470264712647226473264742647526476264772647826479264802648126482264832648426485264862648726488264892649026491264922649326494264952649626497264982649926500265012650226503265042650526506265072650826509265102651126512265132651426515265162651726518265192652026521265222652326524265252652626527265282652926530265312653226533265342653526536265372653826539265402654126542265432654426545265462654726548265492655026551265522655326554265552655626557265582655926560265612656226563265642656526566265672656826569265702657126572265732657426575265762657726578265792658026581265822658326584265852658626587265882658926590265912659226593265942659526596265972659826599266002660126602266032660426605266062660726608266092661026611266122661326614266152661626617266182661926620266212662226623266242662526626266272662826629266302663126632266332663426635266362663726638266392664026641266422664326644266452664626647266482664926650266512665226653266542665526656266572665826659266602666126662266632666426665266662666726668266692667026671266722667326674266752667626677266782667926680266812668226683266842668526686266872668826689266902669126692266932669426695266962669726698266992670026701267022670326704267052670626707267082670926710267112671226713267142671526716267172671826719267202672126722267232672426725267262672726728267292673026731267322673326734267352673626737267382673926740267412674226743267442674526746267472674826749267502675126752267532675426755267562675726758267592676026761267622676326764267652676626767267682676926770267712677226773267742677526776267772677826779267802678126782267832678426785267862678726788267892679026791267922679326794267952679626797267982679926800268012680226803268042680526806268072680826809268102681126812268132681426815268162681726818268192682026821268222682326824268252682626827268282682926830268312683226833268342683526836268372683826839268402684126842268432684426845268462684726848268492685026851268522685326854268552685626857268582685926860268612686226863268642686526866268672686826869268702687126872268732687426875268762687726878268792688026881268822688326884268852688626887268882688926890268912689226893268942689526896268972689826899269002690126902269032690426905269062690726908269092691026911269122691326914269152691626917269182691926920269212692226923269242692526926269272692826929269302693126932269332693426935269362693726938269392694026941269422694326944269452694626947269482694926950269512695226953269542695526956269572695826959269602696126962269632696426965269662696726968269692697026971269722697326974269752697626977269782697926980269812698226983269842698526986269872698826989269902699126992269932699426995269962699726998269992700027001270022700327004270052700627007270082700927010270112701227013270142701527016270172701827019270202702127022270232702427025270262702727028270292703027031270322703327034270352703627037270382703927040270412704227043270442704527046270472704827049270502705127052270532705427055270562705727058270592706027061270622706327064270652706627067270682706927070270712707227073270742707527076270772707827079270802708127082270832708427085270862708727088270892709027091270922709327094270952709627097270982709927100271012710227103271042710527106271072710827109271102711127112271132711427115271162711727118271192712027121271222712327124271252712627127271282712927130271312713227133271342713527136271372713827139271402714127142271432714427145271462714727148271492715027151271522715327154271552715627157271582715927160271612716227163271642716527166271672716827169271702717127172271732717427175271762717727178271792718027181271822718327184271852718627187271882718927190271912719227193271942719527196271972719827199272002720127202272032720427205272062720727208272092721027211272122721327214272152721627217272182721927220272212722227223272242722527226272272722827229272302723127232272332723427235272362723727238272392724027241272422724327244272452724627247272482724927250272512725227253272542725527256272572725827259272602726127262272632726427265272662726727268272692727027271272722727327274272752727627277272782727927280272812728227283272842728527286272872728827289272902729127292272932729427295272962729727298272992730027301273022730327304273052730627307273082730927310273112731227313273142731527316273172731827319273202732127322273232732427325273262732727328273292733027331273322733327334273352733627337273382733927340273412734227343273442734527346273472734827349273502735127352273532735427355273562735727358273592736027361273622736327364273652736627367273682736927370273712737227373273742737527376273772737827379273802738127382273832738427385273862738727388273892739027391273922739327394273952739627397273982739927400274012740227403274042740527406274072740827409274102741127412274132741427415274162741727418274192742027421274222742327424274252742627427274282742927430274312743227433274342743527436274372743827439274402744127442274432744427445274462744727448274492745027451274522745327454274552745627457274582745927460274612746227463274642746527466274672746827469274702747127472274732747427475274762747727478274792748027481274822748327484274852748627487274882748927490274912749227493274942749527496274972749827499275002750127502275032750427505275062750727508275092751027511275122751327514275152751627517275182751927520275212752227523275242752527526275272752827529275302753127532275332753427535275362753727538275392754027541275422754327544275452754627547275482754927550275512755227553275542755527556275572755827559275602756127562275632756427565275662756727568275692757027571275722757327574275752757627577275782757927580275812758227583275842758527586275872758827589275902759127592275932759427595275962759727598275992760027601276022760327604276052760627607276082760927610276112761227613276142761527616276172761827619276202762127622276232762427625276262762727628276292763027631276322763327634276352763627637276382763927640276412764227643276442764527646276472764827649276502765127652276532765427655276562765727658276592766027661276622766327664276652766627667276682766927670276712767227673276742767527676276772767827679276802768127682276832768427685276862768727688276892769027691276922769327694276952769627697276982769927700277012770227703277042770527706277072770827709277102771127712277132771427715277162771727718277192772027721277222772327724277252772627727277282772927730277312773227733277342773527736277372773827739277402774127742277432774427745277462774727748277492775027751277522775327754277552775627757277582775927760277612776227763277642776527766277672776827769277702777127772277732777427775277762777727778277792778027781277822778327784277852778627787277882778927790277912779227793277942779527796277972779827799278002780127802278032780427805278062780727808278092781027811278122781327814278152781627817278182781927820278212782227823278242782527826278272782827829278302783127832278332783427835278362783727838278392784027841278422784327844278452784627847278482784927850278512785227853278542785527856278572785827859278602786127862278632786427865278662786727868278692787027871278722787327874278752787627877278782787927880278812788227883278842788527886278872788827889278902789127892278932789427895278962789727898278992790027901279022790327904279052790627907279082790927910279112791227913279142791527916279172791827919279202792127922279232792427925279262792727928279292793027931279322793327934279352793627937279382793927940279412794227943279442794527946279472794827949279502795127952279532795427955279562795727958279592796027961279622796327964279652796627967279682796927970279712797227973279742797527976279772797827979279802798127982279832798427985279862798727988279892799027991279922799327994279952799627997279982799928000280012800228003280042800528006280072800828009280102801128012280132801428015280162801728018280192802028021280222802328024280252802628027280282802928030280312803228033280342803528036280372803828039280402804128042280432804428045280462804728048280492805028051280522805328054280552805628057280582805928060280612806228063280642806528066280672806828069280702807128072280732807428075280762807728078280792808028081280822808328084280852808628087280882808928090280912809228093280942809528096280972809828099281002810128102281032810428105281062810728108281092811028111281122811328114281152811628117281182811928120281212812228123281242812528126281272812828129281302813128132281332813428135281362813728138281392814028141281422814328144281452814628147281482814928150281512815228153281542815528156281572815828159281602816128162281632816428165281662816728168281692817028171281722817328174281752817628177281782817928180281812818228183281842818528186281872818828189281902819128192281932819428195281962819728198281992820028201282022820328204282052820628207282082820928210282112821228213282142821528216282172821828219282202822128222282232822428225282262822728228282292823028231282322823328234282352823628237282382823928240282412824228243282442824528246282472824828249282502825128252282532825428255282562825728258282592826028261282622826328264282652826628267282682826928270282712827228273282742827528276282772827828279282802828128282282832828428285282862828728288282892829028291282922829328294282952829628297282982829928300283012830228303283042830528306283072830828309283102831128312283132831428315283162831728318283192832028321283222832328324283252832628327283282832928330283312833228333283342833528336283372833828339283402834128342283432834428345283462834728348283492835028351283522835328354283552835628357283582835928360283612836228363283642836528366283672836828369283702837128372283732837428375283762837728378283792838028381283822838328384283852838628387283882838928390283912839228393283942839528396283972839828399284002840128402284032840428405284062840728408284092841028411284122841328414284152841628417284182841928420284212842228423284242842528426284272842828429284302843128432284332843428435284362843728438284392844028441284422844328444284452844628447284482844928450284512845228453284542845528456284572845828459284602846128462284632846428465284662846728468284692847028471284722847328474284752847628477284782847928480284812848228483284842848528486284872848828489284902849128492284932849428495284962849728498284992850028501285022850328504285052850628507285082850928510285112851228513285142851528516285172851828519285202852128522285232852428525285262852728528285292853028531285322853328534285352853628537285382853928540285412854228543285442854528546285472854828549285502855128552285532855428555285562855728558285592856028561285622856328564285652856628567285682856928570285712857228573285742857528576285772857828579285802858128582285832858428585285862858728588285892859028591285922859328594285952859628597285982859928600286012860228603286042860528606286072860828609286102861128612286132861428615286162861728618286192862028621286222862328624286252862628627286282862928630286312863228633286342863528636286372863828639286402864128642286432864428645286462864728648286492865028651286522865328654286552865628657286582865928660286612866228663286642866528666286672866828669286702867128672286732867428675286762867728678286792868028681286822868328684286852868628687286882868928690286912869228693286942869528696286972869828699287002870128702287032870428705287062870728708287092871028711287122871328714287152871628717287182871928720287212872228723287242872528726287272872828729287302873128732287332873428735287362873728738287392874028741287422874328744287452874628747287482874928750287512875228753287542875528756287572875828759287602876128762287632876428765287662876728768287692877028771287722877328774287752877628777287782877928780287812878228783287842878528786287872878828789287902879128792287932879428795287962879728798287992880028801288022880328804288052880628807288082880928810288112881228813288142881528816288172881828819288202882128822288232882428825288262882728828288292883028831288322883328834288352883628837288382883928840288412884228843288442884528846288472884828849288502885128852288532885428855288562885728858288592886028861288622886328864288652886628867288682886928870288712887228873288742887528876288772887828879288802888128882288832888428885288862888728888288892889028891288922889328894288952889628897288982889928900289012890228903289042890528906289072890828909289102891128912289132891428915289162891728918289192892028921289222892328924289252892628927289282892928930289312893228933289342893528936289372893828939289402894128942289432894428945289462894728948289492895028951289522895328954289552895628957289582895928960289612896228963289642896528966289672896828969289702897128972289732897428975289762897728978289792898028981289822898328984289852898628987289882898928990289912899228993289942899528996289972899828999290002900129002290032900429005290062900729008290092901029011290122901329014290152901629017290182901929020290212902229023290242902529026290272902829029290302903129032290332903429035290362903729038290392904029041290422904329044290452904629047290482904929050290512905229053290542905529056290572905829059290602906129062290632906429065290662906729068290692907029071290722907329074290752907629077290782907929080290812908229083290842908529086290872908829089290902909129092290932909429095290962909729098290992910029101291022910329104291052910629107291082910929110291112911229113291142911529116291172911829119291202912129122291232912429125291262912729128291292913029131291322913329134291352913629137291382913929140291412914229143291442914529146291472914829149291502915129152291532915429155291562915729158291592916029161291622916329164291652916629167291682916929170291712917229173291742917529176291772917829179291802918129182291832918429185291862918729188291892919029191291922919329194291952919629197291982919929200292012920229203292042920529206292072920829209292102921129212292132921429215292162921729218292192922029221292222922329224292252922629227292282922929230292312923229233292342923529236292372923829239292402924129242292432924429245292462924729248292492925029251292522925329254292552925629257292582925929260292612926229263292642926529266292672926829269292702927129272292732927429275292762927729278292792928029281292822928329284292852928629287292882928929290292912929229293292942929529296292972929829299293002930129302293032930429305293062930729308293092931029311293122931329314293152931629317293182931929320293212932229323293242932529326293272932829329293302933129332293332933429335293362933729338293392934029341293422934329344293452934629347293482934929350293512935229353293542935529356293572935829359293602936129362293632936429365293662936729368293692937029371293722937329374293752937629377293782937929380293812938229383293842938529386293872938829389293902939129392293932939429395293962939729398293992940029401294022940329404294052940629407294082940929410294112941229413294142941529416294172941829419294202942129422294232942429425294262942729428294292943029431294322943329434294352943629437294382943929440294412944229443294442944529446294472944829449294502945129452294532945429455294562945729458294592946029461294622946329464294652946629467294682946929470294712947229473294742947529476294772947829479294802948129482294832948429485294862948729488294892949029491294922949329494294952949629497294982949929500295012950229503295042950529506295072950829509295102951129512295132951429515295162951729518295192952029521295222952329524295252952629527295282952929530295312953229533295342953529536295372953829539295402954129542295432954429545295462954729548295492955029551295522955329554295552955629557295582955929560295612956229563295642956529566295672956829569295702957129572295732957429575295762957729578295792958029581295822958329584295852958629587295882958929590295912959229593295942959529596295972959829599296002960129602296032960429605296062960729608296092961029611296122961329614296152961629617296182961929620296212962229623296242962529626296272962829629296302963129632296332963429635296362963729638296392964029641296422964329644296452964629647296482964929650296512965229653296542965529656296572965829659296602966129662296632966429665296662966729668296692967029671296722967329674296752967629677296782967929680296812968229683296842968529686296872968829689296902969129692296932969429695296962969729698296992970029701297022970329704297052970629707297082970929710297112971229713297142971529716297172971829719297202972129722297232972429725297262972729728297292973029731297322973329734297352973629737297382973929740297412974229743297442974529746297472974829749297502975129752297532975429755297562975729758297592976029761297622976329764297652976629767297682976929770297712977229773297742977529776297772977829779297802978129782297832978429785297862978729788297892979029791297922979329794297952979629797297982979929800298012980229803298042980529806298072980829809298102981129812298132981429815298162981729818298192982029821298222982329824298252982629827298282982929830298312983229833298342983529836298372983829839298402984129842298432984429845298462984729848298492985029851298522985329854298552985629857298582985929860298612986229863298642986529866298672986829869298702987129872298732987429875298762987729878298792988029881298822988329884298852988629887298882988929890298912989229893298942989529896298972989829899299002990129902299032990429905299062990729908299092991029911299122991329914299152991629917299182991929920299212992229923299242992529926299272992829929299302993129932299332993429935299362993729938299392994029941299422994329944299452994629947299482994929950299512995229953299542995529956299572995829959299602996129962299632996429965299662996729968299692997029971299722997329974299752997629977299782997929980299812998229983299842998529986299872998829989299902999129992299932999429995299962999729998299993000030001300023000330004300053000630007300083000930010300113001230013300143001530016300173001830019300203002130022300233002430025300263002730028300293003030031300323003330034300353003630037300383003930040300413004230043300443004530046300473004830049300503005130052300533005430055300563005730058300593006030061300623006330064300653006630067300683006930070300713007230073300743007530076300773007830079300803008130082300833008430085300863008730088300893009030091300923009330094300953009630097300983009930100301013010230103301043010530106301073010830109301103011130112301133011430115301163011730118301193012030121301223012330124301253012630127301283012930130301313013230133301343013530136301373013830139301403014130142301433014430145301463014730148301493015030151301523015330154301553015630157301583015930160301613016230163301643016530166301673016830169301703017130172301733017430175301763017730178301793018030181301823018330184301853018630187301883018930190301913019230193301943019530196301973019830199302003020130202302033020430205302063020730208302093021030211302123021330214302153021630217302183021930220302213022230223302243022530226302273022830229302303023130232302333023430235302363023730238302393024030241302423024330244302453024630247302483024930250302513025230253302543025530256302573025830259302603026130262302633026430265302663026730268302693027030271302723027330274302753027630277302783027930280302813028230283302843028530286302873028830289302903029130292302933029430295302963029730298302993030030301303023030330304303053030630307303083030930310303113031230313303143031530316303173031830319303203032130322303233032430325303263032730328303293033030331303323033330334303353033630337303383033930340303413034230343303443034530346303473034830349303503035130352303533035430355303563035730358303593036030361303623036330364303653036630367303683036930370303713037230373303743037530376303773037830379303803038130382303833038430385303863038730388303893039030391303923039330394303953039630397303983039930400304013040230403304043040530406304073040830409304103041130412304133041430415304163041730418304193042030421304223042330424304253042630427304283042930430304313043230433304343043530436304373043830439304403044130442304433044430445304463044730448304493045030451304523045330454304553045630457304583045930460304613046230463304643046530466304673046830469304703047130472304733047430475304763047730478304793048030481304823048330484304853048630487304883048930490304913049230493304943049530496304973049830499305003050130502305033050430505305063050730508305093051030511305123051330514305153051630517305183051930520305213052230523305243052530526305273052830529305303053130532305333053430535305363053730538305393054030541305423054330544305453054630547305483054930550305513055230553305543055530556305573055830559305603056130562305633056430565305663056730568305693057030571305723057330574305753057630577305783057930580305813058230583305843058530586305873058830589305903059130592305933059430595305963059730598305993060030601306023060330604306053060630607306083060930610306113061230613306143061530616306173061830619306203062130622306233062430625306263062730628306293063030631306323063330634306353063630637306383063930640306413064230643306443064530646306473064830649306503065130652306533065430655306563065730658306593066030661306623066330664306653066630667306683066930670306713067230673306743067530676306773067830679306803068130682306833068430685306863068730688306893069030691306923069330694306953069630697306983069930700307013070230703307043070530706307073070830709307103071130712307133071430715307163071730718307193072030721307223072330724307253072630727307283072930730307313073230733307343073530736307373073830739307403074130742307433074430745307463074730748307493075030751307523075330754307553075630757307583075930760307613076230763307643076530766307673076830769307703077130772307733077430775307763077730778307793078030781307823078330784307853078630787307883078930790307913079230793307943079530796307973079830799308003080130802308033080430805308063080730808308093081030811308123081330814308153081630817308183081930820308213082230823308243082530826308273082830829308303083130832308333083430835308363083730838308393084030841308423084330844308453084630847308483084930850308513085230853308543085530856308573085830859308603086130862308633086430865308663086730868308693087030871308723087330874308753087630877308783087930880308813088230883308843088530886308873088830889308903089130892308933089430895308963089730898308993090030901309023090330904309053090630907309083090930910309113091230913309143091530916309173091830919309203092130922309233092430925309263092730928309293093030931309323093330934309353093630937309383093930940309413094230943309443094530946309473094830949309503095130952309533095430955309563095730958309593096030961309623096330964309653096630967309683096930970309713097230973309743097530976309773097830979309803098130982309833098430985309863098730988309893099030991309923099330994309953099630997309983099931000310013100231003310043100531006310073100831009310103101131012310133101431015310163101731018310193102031021310223102331024310253102631027310283102931030310313103231033310343103531036310373103831039310403104131042310433104431045310463104731048310493105031051310523105331054310553105631057310583105931060310613106231063310643106531066310673106831069310703107131072310733107431075310763107731078310793108031081310823108331084310853108631087310883108931090310913109231093310943109531096310973109831099311003110131102311033110431105311063110731108311093111031111311123111331114311153111631117311183111931120311213112231123311243112531126311273112831129311303113131132311333113431135311363113731138311393114031141311423114331144311453114631147311483114931150311513115231153311543115531156311573115831159311603116131162311633116431165311663116731168311693117031171311723117331174311753117631177311783117931180311813118231183311843118531186311873118831189311903119131192311933119431195311963119731198311993120031201312023120331204312053120631207312083120931210312113121231213312143121531216312173121831219312203122131222312233122431225312263122731228312293123031231312323123331234312353123631237312383123931240312413124231243312443124531246312473124831249312503125131252312533125431255312563125731258312593126031261312623126331264312653126631267312683126931270312713127231273312743127531276312773127831279312803128131282312833128431285312863128731288312893129031291312923129331294312953129631297312983129931300313013130231303313043130531306313073130831309313103131131312313133131431315313163131731318313193132031321313223132331324313253132631327313283132931330313313133231333313343133531336313373133831339313403134131342313433134431345313463134731348313493135031351313523135331354313553135631357313583135931360313613136231363313643136531366313673136831369313703137131372313733137431375313763137731378313793138031381313823138331384313853138631387313883138931390313913139231393313943139531396313973139831399314003140131402314033140431405314063140731408314093141031411314123141331414314153141631417314183141931420314213142231423314243142531426314273142831429314303143131432314333143431435314363143731438314393144031441314423144331444314453144631447314483144931450314513145231453314543145531456314573145831459314603146131462314633146431465314663146731468314693147031471314723147331474314753147631477314783147931480314813148231483314843148531486314873148831489314903149131492314933149431495314963149731498314993150031501315023150331504315053150631507315083150931510315113151231513315143151531516315173151831519315203152131522315233152431525315263152731528315293153031531315323153331534315353153631537315383153931540315413154231543315443154531546315473154831549315503155131552315533155431555315563155731558315593156031561315623156331564315653156631567315683156931570315713157231573315743157531576315773157831579315803158131582315833158431585315863158731588315893159031591315923159331594315953159631597315983159931600316013160231603316043160531606316073160831609316103161131612316133161431615316163161731618316193162031621316223162331624316253162631627316283162931630316313163231633316343163531636316373163831639316403164131642316433164431645316463164731648316493165031651316523165331654316553165631657316583165931660316613166231663316643166531666316673166831669316703167131672316733167431675316763167731678316793168031681316823168331684316853168631687316883168931690316913169231693316943169531696316973169831699317003170131702317033170431705317063170731708317093171031711317123171331714317153171631717317183171931720317213172231723317243172531726317273172831729317303173131732317333173431735317363173731738317393174031741317423174331744317453174631747317483174931750317513175231753317543175531756317573175831759317603176131762317633176431765317663176731768317693177031771317723177331774317753177631777317783177931780317813178231783317843178531786317873178831789317903179131792317933179431795317963179731798317993180031801318023180331804318053180631807318083180931810318113181231813318143181531816318173181831819318203182131822318233182431825318263182731828318293183031831318323183331834318353183631837318383183931840318413184231843318443184531846318473184831849318503185131852318533185431855318563185731858318593186031861318623186331864318653186631867318683186931870318713187231873318743187531876318773187831879318803188131882318833188431885318863188731888318893189031891318923189331894318953189631897318983189931900319013190231903319043190531906319073190831909319103191131912319133191431915319163191731918319193192031921319223192331924319253192631927319283192931930319313193231933319343193531936319373193831939319403194131942319433194431945319463194731948319493195031951319523195331954319553195631957319583195931960319613196231963319643196531966319673196831969319703197131972319733197431975319763197731978319793198031981319823198331984319853198631987319883198931990319913199231993319943199531996319973199831999320003200132002320033200432005320063200732008320093201032011320123201332014320153201632017320183201932020320213202232023320243202532026320273202832029320303203132032320333203432035320363203732038320393204032041320423204332044320453204632047320483204932050320513205232053320543205532056320573205832059320603206132062320633206432065320663206732068320693207032071320723207332074320753207632077320783207932080320813208232083320843208532086320873208832089320903209132092320933209432095320963209732098320993210032101321023210332104321053210632107321083210932110321113211232113321143211532116321173211832119321203212132122321233212432125321263212732128321293213032131321323213332134321353213632137321383213932140321413214232143321443214532146321473214832149321503215132152321533215432155321563215732158321593216032161321623216332164321653216632167321683216932170321713217232173321743217532176321773217832179321803218132182321833218432185321863218732188321893219032191321923219332194321953219632197321983219932200322013220232203322043220532206322073220832209322103221132212322133221432215322163221732218322193222032221322223222332224322253222632227322283222932230322313223232233322343223532236322373223832239322403224132242322433224432245322463224732248322493225032251322523225332254322553225632257322583225932260322613226232263322643226532266322673226832269322703227132272322733227432275322763227732278322793228032281322823228332284322853228632287322883228932290322913229232293322943229532296322973229832299323003230132302323033230432305323063230732308323093231032311323123231332314323153231632317323183231932320323213232232323323243232532326323273232832329323303233132332323333233432335323363233732338323393234032341323423234332344323453234632347323483234932350323513235232353323543235532356323573235832359323603236132362323633236432365323663236732368323693237032371323723237332374323753237632377323783237932380323813238232383323843238532386323873238832389323903239132392323933239432395323963239732398323993240032401324023240332404324053240632407324083240932410324113241232413324143241532416324173241832419324203242132422324233242432425324263242732428324293243032431324323243332434324353243632437324383243932440324413244232443324443244532446324473244832449324503245132452324533245432455324563245732458324593246032461324623246332464324653246632467324683246932470324713247232473324743247532476324773247832479324803248132482324833248432485324863248732488324893249032491324923249332494324953249632497324983249932500325013250232503325043250532506325073250832509325103251132512325133251432515325163251732518325193252032521325223252332524325253252632527325283252932530325313253232533325343253532536325373253832539325403254132542325433254432545325463254732548325493255032551325523255332554325553255632557325583255932560325613256232563325643256532566325673256832569325703257132572325733257432575325763257732578325793258032581325823258332584325853258632587325883258932590325913259232593325943259532596325973259832599326003260132602326033260432605326063260732608326093261032611326123261332614326153261632617326183261932620326213262232623326243262532626326273262832629326303263132632326333263432635326363263732638326393264032641326423264332644326453264632647326483264932650326513265232653326543265532656326573265832659326603266132662326633266432665326663266732668326693267032671326723267332674326753267632677326783267932680326813268232683326843268532686326873268832689326903269132692326933269432695326963269732698326993270032701327023270332704327053270632707327083270932710327113271232713327143271532716327173271832719327203272132722327233272432725327263272732728327293273032731327323273332734327353273632737327383273932740327413274232743327443274532746327473274832749327503275132752327533275432755327563275732758327593276032761327623276332764327653276632767327683276932770327713277232773327743277532776327773277832779327803278132782327833278432785327863278732788327893279032791327923279332794327953279632797327983279932800328013280232803328043280532806328073280832809328103281132812328133281432815328163281732818328193282032821328223282332824328253282632827328283282932830328313283232833328343283532836328373283832839328403284132842328433284432845328463284732848328493285032851328523285332854328553285632857328583285932860328613286232863328643286532866328673286832869328703287132872328733287432875328763287732878328793288032881328823288332884328853288632887328883288932890328913289232893328943289532896328973289832899329003290132902329033290432905329063290732908329093291032911329123291332914329153291632917329183291932920329213292232923329243292532926329273292832929329303293132932329333293432935329363293732938329393294032941329423294332944329453294632947329483294932950329513295232953329543295532956329573295832959329603296132962329633296432965329663296732968329693297032971329723297332974329753297632977329783297932980329813298232983329843298532986329873298832989329903299132992329933299432995329963299732998329993300033001330023300333004330053300633007330083300933010330113301233013330143301533016330173301833019330203302133022330233302433025330263302733028330293303033031330323303333034330353303633037330383303933040330413304233043330443304533046330473304833049330503305133052330533305433055330563305733058330593306033061330623306333064330653306633067330683306933070330713307233073330743307533076330773307833079330803308133082330833308433085330863308733088330893309033091330923309333094330953309633097330983309933100331013310233103331043310533106331073310833109331103311133112331133311433115331163311733118331193312033121331223312333124331253312633127331283312933130331313313233133331343313533136331373313833139331403314133142331433314433145331463314733148331493315033151331523315333154331553315633157331583315933160331613316233163331643316533166331673316833169331703317133172331733317433175331763317733178331793318033181331823318333184331853318633187331883318933190331913319233193331943319533196331973319833199332003320133202332033320433205332063320733208332093321033211332123321333214332153321633217332183321933220332213322233223332243322533226332273322833229332303323133232332333323433235332363323733238332393324033241332423324333244332453324633247332483324933250332513325233253332543325533256332573325833259332603326133262332633326433265332663326733268332693327033271332723327333274332753327633277332783327933280332813328233283332843328533286332873328833289332903329133292332933329433295332963329733298332993330033301333023330333304333053330633307333083330933310333113331233313333143331533316333173331833319333203332133322333233332433325333263332733328333293333033331333323333333334333353333633337333383333933340333413334233343333443334533346333473334833349333503335133352333533335433355333563335733358333593336033361333623336333364333653336633367333683336933370333713337233373333743337533376333773337833379333803338133382333833338433385333863338733388333893339033391333923339333394333953339633397333983339933400334013340233403334043340533406334073340833409334103341133412334133341433415334163341733418334193342033421334223342333424334253342633427334283342933430334313343233433334343343533436334373343833439334403344133442334433344433445334463344733448334493345033451334523345333454334553345633457334583345933460334613346233463334643346533466334673346833469334703347133472334733347433475334763347733478334793348033481334823348333484334853348633487334883348933490334913349233493334943349533496334973349833499335003350133502335033350433505335063350733508335093351033511335123351333514335153351633517335183351933520335213352233523335243352533526335273352833529335303353133532335333353433535335363353733538335393354033541335423354333544335453354633547335483354933550335513355233553335543355533556335573355833559335603356133562335633356433565335663356733568335693357033571335723357333574335753357633577335783357933580335813358233583335843358533586335873358833589335903359133592335933359433595335963359733598335993360033601336023360333604336053360633607336083360933610336113361233613336143361533616336173361833619336203362133622336233362433625336263362733628336293363033631336323363333634336353363633637336383363933640336413364233643336443364533646336473364833649336503365133652336533365433655336563365733658336593366033661336623366333664336653366633667336683366933670336713367233673336743367533676336773367833679336803368133682336833368433685336863368733688336893369033691336923369333694336953369633697336983369933700337013370233703337043370533706337073370833709337103371133712337133371433715337163371733718337193372033721337223372333724337253372633727337283372933730337313373233733337343373533736337373373833739337403374133742337433374433745337463374733748337493375033751337523375333754337553375633757337583375933760337613376233763337643376533766337673376833769337703377133772337733377433775337763377733778337793378033781337823378333784337853378633787337883378933790337913379233793337943379533796337973379833799338003380133802338033380433805338063380733808338093381033811338123381333814338153381633817338183381933820338213382233823338243382533826338273382833829338303383133832338333383433835338363383733838338393384033841338423384333844338453384633847338483384933850338513385233853338543385533856338573385833859338603386133862338633386433865338663386733868338693387033871338723387333874338753387633877338783387933880338813388233883338843388533886338873388833889338903389133892338933389433895338963389733898338993390033901339023390333904339053390633907339083390933910339113391233913339143391533916339173391833919339203392133922339233392433925339263392733928339293393033931339323393333934339353393633937339383393933940339413394233943339443394533946339473394833949339503395133952339533395433955339563395733958339593396033961339623396333964339653396633967339683396933970339713397233973339743397533976339773397833979339803398133982339833398433985339863398733988339893399033991339923399333994339953399633997339983399934000340013400234003340043400534006340073400834009340103401134012340133401434015340163401734018340193402034021340223402334024340253402634027340283402934030340313403234033340343403534036340373403834039340403404134042340433404434045340463404734048340493405034051340523405334054340553405634057340583405934060340613406234063340643406534066340673406834069340703407134072340733407434075340763407734078340793408034081340823408334084340853408634087340883408934090340913409234093340943409534096340973409834099341003410134102341033410434105341063410734108341093411034111341123411334114341153411634117341183411934120341213412234123341243412534126341273412834129341303413134132341333413434135341363413734138341393414034141341423414334144341453414634147341483414934150341513415234153341543415534156341573415834159341603416134162341633416434165341663416734168341693417034171341723417334174341753417634177341783417934180341813418234183341843418534186341873418834189341903419134192341933419434195341963419734198341993420034201342023420334204342053420634207342083420934210342113421234213342143421534216342173421834219342203422134222342233422434225342263422734228342293423034231342323423334234342353423634237342383423934240342413424234243342443424534246342473424834249342503425134252342533425434255342563425734258342593426034261342623426334264342653426634267342683426934270342713427234273342743427534276342773427834279342803428134282342833428434285342863428734288342893429034291342923429334294342953429634297342983429934300343013430234303343043430534306343073430834309343103431134312343133431434315343163431734318343193432034321343223432334324343253432634327343283432934330343313433234333343343433534336343373433834339343403434134342343433434434345343463434734348343493435034351343523435334354343553435634357343583435934360343613436234363343643436534366343673436834369343703437134372343733437434375343763437734378343793438034381343823438334384343853438634387343883438934390343913439234393343943439534396343973439834399344003440134402344033440434405344063440734408344093441034411344123441334414344153441634417344183441934420344213442234423344243442534426344273442834429344303443134432344333443434435344363443734438344393444034441344423444334444344453444634447344483444934450344513445234453344543445534456344573445834459344603446134462344633446434465344663446734468344693447034471344723447334474344753447634477344783447934480344813448234483344843448534486344873448834489344903449134492344933449434495344963449734498344993450034501345023450334504345053450634507345083450934510345113451234513345143451534516345173451834519345203452134522345233452434525345263452734528345293453034531345323453334534345353453634537345383453934540345413454234543345443454534546345473454834549345503455134552345533455434555345563455734558345593456034561345623456334564345653456634567345683456934570345713457234573345743457534576345773457834579345803458134582345833458434585345863458734588345893459034591345923459334594345953459634597345983459934600346013460234603346043460534606346073460834609346103461134612346133461434615346163461734618346193462034621346223462334624346253462634627346283462934630346313463234633346343463534636346373463834639346403464134642346433464434645346463464734648346493465034651346523465334654346553465634657346583465934660346613466234663346643466534666346673466834669346703467134672346733467434675346763467734678346793468034681346823468334684346853468634687346883468934690346913469234693346943469534696346973469834699347003470134702347033470434705347063470734708347093471034711347123471334714347153471634717347183471934720347213472234723347243472534726347273472834729347303473134732347333473434735347363473734738347393474034741347423474334744347453474634747347483474934750347513475234753347543475534756347573475834759347603476134762347633476434765347663476734768347693477034771347723477334774347753477634777347783477934780347813478234783347843478534786347873478834789347903479134792347933479434795347963479734798347993480034801348023480334804348053480634807348083480934810348113481234813348143481534816348173481834819348203482134822348233482434825348263482734828348293483034831348323483334834348353483634837348383483934840348413484234843348443484534846348473484834849348503485134852348533485434855348563485734858348593486034861348623486334864348653486634867348683486934870348713487234873348743487534876348773487834879348803488134882348833488434885348863488734888348893489034891348923489334894348953489634897348983489934900349013490234903349043490534906349073490834909349103491134912349133491434915349163491734918349193492034921349223492334924349253492634927349283492934930349313493234933349343493534936349373493834939349403494134942349433494434945349463494734948349493495034951349523495334954349553495634957349583495934960349613496234963349643496534966349673496834969349703497134972349733497434975349763497734978349793498034981349823498334984349853498634987349883498934990349913499234993349943499534996349973499834999350003500135002350033500435005350063500735008350093501035011350123501335014350153501635017350183501935020350213502235023350243502535026350273502835029350303503135032350333503435035350363503735038350393504035041350423504335044350453504635047350483504935050350513505235053350543505535056350573505835059350603506135062350633506435065350663506735068350693507035071350723507335074350753507635077350783507935080350813508235083350843508535086350873508835089350903509135092350933509435095350963509735098350993510035101351023510335104351053510635107351083510935110351113511235113351143511535116351173511835119351203512135122351233512435125351263512735128351293513035131351323513335134351353513635137351383513935140351413514235143351443514535146351473514835149351503515135152351533515435155351563515735158351593516035161351623516335164351653516635167351683516935170351713517235173351743517535176351773517835179351803518135182351833518435185351863518735188351893519035191351923519335194351953519635197351983519935200352013520235203352043520535206352073520835209352103521135212352133521435215352163521735218352193522035221352223522335224352253522635227352283522935230352313523235233352343523535236352373523835239352403524135242352433524435245352463524735248352493525035251352523525335254352553525635257352583525935260352613526235263352643526535266352673526835269352703527135272352733527435275352763527735278352793528035281352823528335284352853528635287352883528935290352913529235293352943529535296352973529835299353003530135302353033530435305353063530735308353093531035311353123531335314353153531635317353183531935320353213532235323353243532535326353273532835329353303533135332353333533435335353363533735338353393534035341353423534335344353453534635347353483534935350353513535235353353543535535356353573535835359353603536135362353633536435365353663536735368353693537035371353723537335374353753537635377353783537935380353813538235383353843538535386353873538835389353903539135392353933539435395353963539735398353993540035401354023540335404354053540635407354083540935410354113541235413354143541535416354173541835419354203542135422354233542435425354263542735428354293543035431354323543335434354353543635437354383543935440354413544235443354443544535446354473544835449354503545135452354533545435455354563545735458354593546035461354623546335464354653546635467354683546935470354713547235473354743547535476354773547835479354803548135482354833548435485354863548735488354893549035491354923549335494354953549635497354983549935500355013550235503355043550535506355073550835509355103551135512355133551435515355163551735518355193552035521355223552335524355253552635527355283552935530355313553235533355343553535536355373553835539355403554135542355433554435545355463554735548355493555035551355523555335554355553555635557355583555935560355613556235563355643556535566355673556835569355703557135572355733557435575355763557735578355793558035581355823558335584355853558635587355883558935590355913559235593355943559535596355973559835599356003560135602356033560435605356063560735608356093561035611356123561335614356153561635617356183561935620356213562235623356243562535626356273562835629356303563135632356333563435635356363563735638356393564035641356423564335644356453564635647356483564935650356513565235653356543565535656356573565835659356603566135662356633566435665356663566735668356693567035671356723567335674356753567635677356783567935680356813568235683356843568535686356873568835689356903569135692356933569435695356963569735698356993570035701357023570335704357053570635707357083570935710357113571235713357143571535716357173571835719357203572135722357233572435725357263572735728357293573035731357323573335734357353573635737357383573935740357413574235743357443574535746357473574835749357503575135752357533575435755357563575735758357593576035761357623576335764357653576635767357683576935770357713577235773357743577535776357773577835779357803578135782357833578435785357863578735788357893579035791357923579335794357953579635797357983579935800358013580235803358043580535806358073580835809358103581135812358133581435815358163581735818358193582035821358223582335824358253582635827358283582935830358313583235833358343583535836358373583835839358403584135842358433584435845358463584735848358493585035851358523585335854358553585635857358583585935860358613586235863358643586535866358673586835869358703587135872358733587435875358763587735878358793588035881358823588335884358853588635887358883588935890358913589235893358943589535896358973589835899359003590135902359033590435905359063590735908359093591035911359123591335914359153591635917359183591935920359213592235923359243592535926359273592835929359303593135932359333593435935359363593735938359393594035941359423594335944359453594635947359483594935950359513595235953359543595535956359573595835959359603596135962359633596435965359663596735968359693597035971359723597335974359753597635977359783597935980359813598235983359843598535986359873598835989359903599135992359933599435995359963599735998359993600036001360023600336004360053600636007360083600936010360113601236013360143601536016360173601836019360203602136022360233602436025360263602736028360293603036031360323603336034360353603636037360383603936040360413604236043360443604536046360473604836049360503605136052360533605436055360563605736058360593606036061360623606336064360653606636067360683606936070360713607236073360743607536076360773607836079360803608136082360833608436085360863608736088360893609036091360923609336094360953609636097360983609936100361013610236103361043610536106361073610836109361103611136112361133611436115361163611736118361193612036121361223612336124361253612636127361283612936130361313613236133361343613536136361373613836139361403614136142361433614436145361463614736148361493615036151361523615336154361553615636157361583615936160361613616236163361643616536166361673616836169361703617136172361733617436175361763617736178361793618036181361823618336184361853618636187361883618936190361913619236193361943619536196361973619836199362003620136202362033620436205362063620736208362093621036211362123621336214362153621636217362183621936220362213622236223362243622536226362273622836229362303623136232362333623436235362363623736238362393624036241362423624336244362453624636247362483624936250362513625236253362543625536256362573625836259362603626136262362633626436265362663626736268362693627036271362723627336274362753627636277362783627936280362813628236283362843628536286362873628836289362903629136292362933629436295362963629736298362993630036301363023630336304363053630636307363083630936310363113631236313363143631536316363173631836319363203632136322363233632436325363263632736328363293633036331363323633336334363353633636337363383633936340363413634236343363443634536346363473634836349363503635136352363533635436355363563635736358363593636036361363623636336364363653636636367363683636936370363713637236373363743637536376363773637836379363803638136382363833638436385363863638736388363893639036391363923639336394363953639636397363983639936400364013640236403364043640536406364073640836409364103641136412364133641436415364163641736418364193642036421364223642336424364253642636427364283642936430364313643236433364343643536436364373643836439364403644136442364433644436445364463644736448364493645036451364523645336454364553645636457364583645936460364613646236463364643646536466364673646836469364703647136472364733647436475364763647736478364793648036481364823648336484364853648636487364883648936490364913649236493364943649536496364973649836499365003650136502365033650436505365063650736508365093651036511365123651336514365153651636517365183651936520365213652236523365243652536526365273652836529365303653136532365333653436535365363653736538365393654036541365423654336544365453654636547365483654936550365513655236553365543655536556365573655836559365603656136562365633656436565365663656736568365693657036571365723657336574365753657636577365783657936580365813658236583365843658536586365873658836589365903659136592365933659436595365963659736598365993660036601366023660336604366053660636607366083660936610366113661236613366143661536616366173661836619366203662136622366233662436625366263662736628366293663036631366323663336634366353663636637366383663936640366413664236643366443664536646366473664836649366503665136652366533665436655366563665736658366593666036661366623666336664366653666636667366683666936670366713667236673366743667536676366773667836679366803668136682366833668436685366863668736688366893669036691366923669336694366953669636697366983669936700367013670236703367043670536706367073670836709367103671136712367133671436715367163671736718367193672036721367223672336724367253672636727367283672936730367313673236733367343673536736367373673836739367403674136742367433674436745367463674736748367493675036751367523675336754367553675636757367583675936760367613676236763367643676536766367673676836769367703677136772367733677436775367763677736778367793678036781367823678336784367853678636787367883678936790367913679236793367943679536796367973679836799368003680136802368033680436805368063680736808368093681036811368123681336814368153681636817368183681936820368213682236823368243682536826368273682836829368303683136832368333683436835368363683736838368393684036841368423684336844368453684636847368483684936850368513685236853368543685536856368573685836859368603686136862368633686436865368663686736868368693687036871368723687336874368753687636877368783687936880368813688236883368843688536886368873688836889368903689136892368933689436895368963689736898368993690036901369023690336904369053690636907369083690936910369113691236913369143691536916369173691836919369203692136922369233692436925369263692736928369293693036931369323693336934369353693636937369383693936940369413694236943369443694536946369473694836949369503695136952369533695436955369563695736958369593696036961369623696336964369653696636967369683696936970369713697236973369743697536976369773697836979369803698136982369833698436985369863698736988369893699036991369923699336994369953699636997369983699937000370013700237003370043700537006370073700837009370103701137012370133701437015370163701737018370193702037021370223702337024370253702637027370283702937030370313703237033370343703537036370373703837039370403704137042370433704437045370463704737048370493705037051370523705337054370553705637057370583705937060370613706237063370643706537066370673706837069370703707137072370733707437075370763707737078370793708037081370823708337084370853708637087370883708937090370913709237093370943709537096370973709837099371003710137102371033710437105371063710737108371093711037111371123711337114371153711637117371183711937120371213712237123371243712537126371273712837129371303713137132371333713437135371363713737138371393714037141371423714337144371453714637147371483714937150371513715237153371543715537156371573715837159371603716137162371633716437165371663716737168371693717037171371723717337174371753717637177371783717937180371813718237183371843718537186371873718837189371903719137192371933719437195371963719737198371993720037201372023720337204372053720637207372083720937210372113721237213372143721537216372173721837219372203722137222372233722437225372263722737228372293723037231372323723337234372353723637237372383723937240372413724237243372443724537246372473724837249372503725137252372533725437255372563725737258372593726037261372623726337264372653726637267372683726937270372713727237273372743727537276372773727837279372803728137282372833728437285372863728737288372893729037291372923729337294372953729637297372983729937300373013730237303373043730537306373073730837309373103731137312373133731437315373163731737318373193732037321373223732337324373253732637327373283732937330373313733237333373343733537336373373733837339373403734137342373433734437345373463734737348373493735037351373523735337354373553735637357373583735937360373613736237363373643736537366373673736837369373703737137372373733737437375373763737737378373793738037381373823738337384373853738637387373883738937390373913739237393373943739537396373973739837399374003740137402374033740437405374063740737408374093741037411374123741337414374153741637417374183741937420374213742237423374243742537426374273742837429374303743137432374333743437435374363743737438374393744037441374423744337444374453744637447374483744937450374513745237453374543745537456374573745837459374603746137462374633746437465374663746737468374693747037471374723747337474374753747637477374783747937480374813748237483374843748537486374873748837489374903749137492374933749437495374963749737498374993750037501375023750337504375053750637507375083750937510375113751237513375143751537516375173751837519375203752137522375233752437525375263752737528375293753037531375323753337534375353753637537375383753937540375413754237543375443754537546375473754837549375503755137552375533755437555375563755737558375593756037561375623756337564375653756637567375683756937570375713757237573375743757537576375773757837579375803758137582375833758437585375863758737588375893759037591375923759337594375953759637597375983759937600376013760237603376043760537606376073760837609376103761137612376133761437615376163761737618376193762037621376223762337624376253762637627376283762937630376313763237633376343763537636376373763837639376403764137642376433764437645376463764737648376493765037651376523765337654376553765637657376583765937660376613766237663376643766537666376673766837669376703767137672376733767437675376763767737678376793768037681376823768337684376853768637687376883768937690376913769237693376943769537696376973769837699377003770137702377033770437705377063770737708377093771037711377123771337714377153771637717377183771937720377213772237723377243772537726377273772837729377303773137732377333773437735377363773737738377393774037741377423774337744377453774637747377483774937750377513775237753377543775537756377573775837759377603776137762377633776437765377663776737768377693777037771377723777337774377753777637777377783777937780377813778237783377843778537786377873778837789377903779137792377933779437795377963779737798377993780037801378023780337804378053780637807378083780937810378113781237813378143781537816378173781837819378203782137822378233782437825378263782737828378293783037831378323783337834378353783637837378383783937840378413784237843378443784537846378473784837849378503785137852378533785437855378563785737858378593786037861378623786337864378653786637867378683786937870378713787237873378743787537876378773787837879378803788137882378833788437885378863788737888378893789037891378923789337894378953789637897378983789937900379013790237903379043790537906379073790837909379103791137912379133791437915379163791737918379193792037921379223792337924379253792637927379283792937930379313793237933379343793537936379373793837939379403794137942379433794437945379463794737948379493795037951379523795337954379553795637957379583795937960379613796237963379643796537966379673796837969379703797137972379733797437975379763797737978379793798037981379823798337984379853798637987379883798937990379913799237993379943799537996379973799837999380003800138002380033800438005380063800738008380093801038011380123801338014380153801638017380183801938020380213802238023380243802538026380273802838029380303803138032380333803438035380363803738038380393804038041380423804338044380453804638047380483804938050380513805238053380543805538056380573805838059380603806138062380633806438065380663806738068380693807038071380723807338074380753807638077380783807938080380813808238083380843808538086380873808838089380903809138092380933809438095380963809738098380993810038101381023810338104381053810638107381083810938110381113811238113381143811538116381173811838119381203812138122381233812438125381263812738128381293813038131381323813338134381353813638137381383813938140381413814238143381443814538146381473814838149381503815138152381533815438155381563815738158381593816038161381623816338164381653816638167381683816938170381713817238173381743817538176381773817838179381803818138182381833818438185381863818738188381893819038191381923819338194381953819638197381983819938200382013820238203382043820538206382073820838209382103821138212382133821438215382163821738218382193822038221382223822338224382253822638227382283822938230382313823238233382343823538236382373823838239382403824138242382433824438245382463824738248382493825038251382523825338254382553825638257382583825938260382613826238263382643826538266382673826838269382703827138272382733827438275382763827738278382793828038281382823828338284382853828638287382883828938290382913829238293382943829538296382973829838299383003830138302383033830438305383063830738308383093831038311383123831338314383153831638317383183831938320383213832238323383243832538326383273832838329383303833138332383333833438335383363833738338383393834038341383423834338344383453834638347383483834938350383513835238353383543835538356383573835838359383603836138362383633836438365383663836738368383693837038371383723837338374383753837638377383783837938380383813838238383383843838538386383873838838389383903839138392383933839438395383963839738398383993840038401384023840338404384053840638407384083840938410384113841238413384143841538416384173841838419384203842138422384233842438425384263842738428384293843038431384323843338434384353843638437384383843938440384413844238443384443844538446384473844838449384503845138452384533845438455384563845738458384593846038461384623846338464384653846638467384683846938470384713847238473384743847538476384773847838479384803848138482384833848438485384863848738488384893849038491384923849338494384953849638497384983849938500385013850238503385043850538506385073850838509385103851138512385133851438515385163851738518385193852038521385223852338524385253852638527385283852938530385313853238533385343853538536385373853838539385403854138542385433854438545385463854738548385493855038551385523855338554385553855638557385583855938560385613856238563385643856538566385673856838569385703857138572385733857438575385763857738578385793858038581385823858338584385853858638587385883858938590385913859238593385943859538596385973859838599386003860138602386033860438605386063860738608386093861038611386123861338614386153861638617386183861938620386213862238623386243862538626386273862838629386303863138632386333863438635386363863738638386393864038641386423864338644386453864638647386483864938650386513865238653386543865538656386573865838659386603866138662386633866438665386663866738668386693867038671386723867338674386753867638677386783867938680386813868238683386843868538686386873868838689386903869138692386933869438695386963869738698386993870038701387023870338704387053870638707387083870938710387113871238713387143871538716387173871838719387203872138722387233872438725387263872738728387293873038731387323873338734387353873638737387383873938740387413874238743387443874538746387473874838749387503875138752387533875438755387563875738758387593876038761387623876338764387653876638767387683876938770387713877238773387743877538776387773877838779387803878138782387833878438785387863878738788387893879038791387923879338794387953879638797387983879938800388013880238803388043880538806388073880838809388103881138812388133881438815388163881738818388193882038821388223882338824388253882638827388283882938830388313883238833388343883538836388373883838839388403884138842388433884438845388463884738848388493885038851388523885338854388553885638857388583885938860388613886238863388643886538866388673886838869388703887138872388733887438875388763887738878388793888038881388823888338884388853888638887388883888938890388913889238893388943889538896388973889838899389003890138902389033890438905389063890738908389093891038911389123891338914389153891638917389183891938920389213892238923389243892538926389273892838929389303893138932389333893438935389363893738938389393894038941389423894338944389453894638947389483894938950389513895238953389543895538956389573895838959389603896138962389633896438965389663896738968389693897038971389723897338974389753897638977389783897938980389813898238983389843898538986389873898838989389903899138992389933899438995389963899738998389993900039001390023900339004390053900639007390083900939010390113901239013390143901539016390173901839019390203902139022390233902439025390263902739028390293903039031390323903339034390353903639037390383903939040390413904239043390443904539046390473904839049390503905139052390533905439055390563905739058390593906039061390623906339064390653906639067390683906939070390713907239073390743907539076390773907839079390803908139082390833908439085390863908739088390893909039091390923909339094390953909639097390983909939100391013910239103391043910539106391073910839109391103911139112391133911439115391163911739118391193912039121391223912339124391253912639127391283912939130391313913239133391343913539136391373913839139391403914139142391433914439145391463914739148391493915039151391523915339154391553915639157391583915939160391613916239163391643916539166391673916839169391703917139172391733917439175391763917739178391793918039181391823918339184391853918639187391883918939190391913919239193391943919539196391973919839199392003920139202392033920439205392063920739208392093921039211392123921339214392153921639217392183921939220392213922239223392243922539226392273922839229392303923139232392333923439235392363923739238392393924039241392423924339244392453924639247392483924939250392513925239253392543925539256392573925839259392603926139262392633926439265392663926739268392693927039271392723927339274392753927639277392783927939280392813928239283392843928539286392873928839289392903929139292392933929439295392963929739298392993930039301393023930339304393053930639307393083930939310393113931239313393143931539316393173931839319393203932139322393233932439325393263932739328393293933039331393323933339334393353933639337393383933939340393413934239343393443934539346393473934839349393503935139352393533935439355393563935739358393593936039361393623936339364393653936639367393683936939370393713937239373393743937539376393773937839379393803938139382393833938439385393863938739388393893939039391393923939339394393953939639397393983939939400394013940239403394043940539406394073940839409394103941139412394133941439415394163941739418394193942039421394223942339424394253942639427394283942939430394313943239433394343943539436394373943839439394403944139442394433944439445394463944739448394493945039451394523945339454394553945639457394583945939460394613946239463394643946539466394673946839469394703947139472394733947439475394763947739478394793948039481394823948339484394853948639487394883948939490394913949239493394943949539496394973949839499395003950139502395033950439505395063950739508395093951039511395123951339514395153951639517395183951939520395213952239523395243952539526395273952839529395303953139532395333953439535395363953739538395393954039541395423954339544395453954639547395483954939550395513955239553395543955539556395573955839559395603956139562395633956439565395663956739568395693957039571395723957339574395753957639577395783957939580395813958239583395843958539586395873958839589395903959139592395933959439595395963959739598395993960039601396023960339604396053960639607396083960939610396113961239613396143961539616396173961839619396203962139622396233962439625396263962739628396293963039631396323963339634396353963639637396383963939640396413964239643396443964539646396473964839649396503965139652396533965439655396563965739658396593966039661396623966339664396653966639667396683966939670396713967239673396743967539676396773967839679396803968139682396833968439685396863968739688396893969039691396923969339694396953969639697396983969939700397013970239703397043970539706397073970839709397103971139712397133971439715397163971739718397193972039721397223972339724397253972639727397283972939730397313973239733397343973539736397373973839739397403974139742397433974439745397463974739748397493975039751397523975339754397553975639757397583975939760397613976239763397643976539766397673976839769397703977139772397733977439775397763977739778397793978039781397823978339784397853978639787397883978939790397913979239793397943979539796397973979839799398003980139802398033980439805398063980739808398093981039811398123981339814398153981639817398183981939820398213982239823398243982539826398273982839829398303983139832398333983439835398363983739838398393984039841398423984339844398453984639847398483984939850398513985239853398543985539856398573985839859398603986139862398633986439865398663986739868398693987039871398723987339874398753987639877398783987939880398813988239883398843988539886398873988839889398903989139892398933989439895398963989739898398993990039901399023990339904399053990639907399083990939910399113991239913399143991539916399173991839919399203992139922399233992439925399263992739928399293993039931399323993339934399353993639937399383993939940399413994239943399443994539946399473994839949399503995139952399533995439955399563995739958399593996039961399623996339964399653996639967399683996939970399713997239973399743997539976399773997839979399803998139982399833998439985399863998739988399893999039991399923999339994399953999639997399983999940000400014000240003400044000540006400074000840009400104001140012400134001440015400164001740018400194002040021400224002340024400254002640027400284002940030400314003240033400344003540036400374003840039400404004140042400434004440045400464004740048400494005040051400524005340054400554005640057400584005940060400614006240063400644006540066400674006840069400704007140072400734007440075400764007740078400794008040081400824008340084400854008640087400884008940090400914009240093400944009540096400974009840099401004010140102401034010440105401064010740108401094011040111401124011340114401154011640117401184011940120401214012240123401244012540126401274012840129401304013140132401334013440135401364013740138401394014040141401424014340144401454014640147401484014940150401514015240153401544015540156401574015840159401604016140162401634016440165401664016740168401694017040171401724017340174401754017640177401784017940180401814018240183401844018540186401874018840189401904019140192401934019440195401964019740198401994020040201402024020340204402054020640207402084020940210402114021240213402144021540216402174021840219402204022140222402234022440225402264022740228402294023040231402324023340234402354023640237402384023940240402414024240243402444024540246402474024840249402504025140252402534025440255402564025740258402594026040261402624026340264402654026640267402684026940270402714027240273402744027540276402774027840279402804028140282402834028440285402864028740288402894029040291402924029340294402954029640297402984029940300403014030240303403044030540306403074030840309403104031140312403134031440315403164031740318403194032040321403224032340324403254032640327403284032940330403314033240333403344033540336403374033840339403404034140342403434034440345403464034740348403494035040351403524035340354403554035640357403584035940360403614036240363403644036540366403674036840369403704037140372403734037440375403764037740378403794038040381403824038340384403854038640387403884038940390403914039240393403944039540396403974039840399404004040140402404034040440405404064040740408404094041040411404124041340414404154041640417404184041940420404214042240423404244042540426404274042840429404304043140432404334043440435404364043740438404394044040441404424044340444404454044640447404484044940450404514045240453404544045540456404574045840459404604046140462404634046440465404664046740468404694047040471404724047340474404754047640477404784047940480404814048240483404844048540486404874048840489404904049140492404934049440495404964049740498404994050040501405024050340504405054050640507405084050940510405114051240513405144051540516405174051840519405204052140522405234052440525405264052740528405294053040531405324053340534405354053640537405384053940540405414054240543405444054540546405474054840549405504055140552405534055440555405564055740558405594056040561405624056340564405654056640567405684056940570405714057240573405744057540576405774057840579405804058140582405834058440585405864058740588405894059040591405924059340594405954059640597405984059940600406014060240603406044060540606406074060840609406104061140612406134061440615406164061740618406194062040621406224062340624406254062640627406284062940630406314063240633406344063540636406374063840639406404064140642406434064440645406464064740648406494065040651406524065340654406554065640657406584065940660406614066240663406644066540666406674066840669406704067140672406734067440675406764067740678406794068040681406824068340684406854068640687406884068940690406914069240693406944069540696406974069840699407004070140702407034070440705407064070740708407094071040711407124071340714407154071640717407184071940720407214072240723407244072540726407274072840729407304073140732407334073440735407364073740738407394074040741407424074340744407454074640747407484074940750407514075240753407544075540756407574075840759407604076140762407634076440765407664076740768407694077040771407724077340774407754077640777407784077940780407814078240783407844078540786407874078840789407904079140792407934079440795407964079740798407994080040801408024080340804408054080640807408084080940810408114081240813408144081540816408174081840819408204082140822408234082440825408264082740828408294083040831408324083340834408354083640837408384083940840408414084240843408444084540846408474084840849408504085140852408534085440855408564085740858408594086040861408624086340864408654086640867408684086940870408714087240873408744087540876408774087840879408804088140882408834088440885408864088740888408894089040891408924089340894408954089640897408984089940900409014090240903409044090540906409074090840909409104091140912409134091440915409164091740918409194092040921409224092340924409254092640927409284092940930409314093240933409344093540936409374093840939409404094140942409434094440945409464094740948409494095040951409524095340954409554095640957409584095940960409614096240963409644096540966409674096840969409704097140972409734097440975409764097740978409794098040981409824098340984409854098640987409884098940990409914099240993409944099540996409974099840999410004100141002410034100441005410064100741008410094101041011410124101341014410154101641017410184101941020410214102241023410244102541026410274102841029410304103141032410334103441035410364103741038410394104041041410424104341044410454104641047410484104941050410514105241053410544105541056410574105841059410604106141062410634106441065410664106741068410694107041071410724107341074410754107641077410784107941080410814108241083410844108541086410874108841089410904109141092410934109441095410964109741098410994110041101411024110341104411054110641107411084110941110411114111241113411144111541116411174111841119411204112141122411234112441125411264112741128411294113041131411324113341134411354113641137411384113941140411414114241143411444114541146411474114841149411504115141152411534115441155411564115741158411594116041161411624116341164411654116641167411684116941170411714117241173411744117541176411774117841179411804118141182411834118441185411864118741188411894119041191411924119341194411954119641197411984119941200412014120241203412044120541206412074120841209412104121141212412134121441215412164121741218412194122041221412224122341224412254122641227412284122941230412314123241233412344123541236412374123841239412404124141242412434124441245412464124741248412494125041251412524125341254412554125641257412584125941260412614126241263412644126541266412674126841269412704127141272412734127441275412764127741278412794128041281412824128341284412854128641287412884128941290412914129241293412944129541296412974129841299413004130141302413034130441305413064130741308413094131041311413124131341314413154131641317413184131941320413214132241323413244132541326413274132841329413304133141332413334133441335413364133741338413394134041341413424134341344413454134641347413484134941350413514135241353413544135541356413574135841359413604136141362413634136441365413664136741368413694137041371413724137341374413754137641377413784137941380413814138241383413844138541386413874138841389413904139141392413934139441395413964139741398413994140041401414024140341404414054140641407414084140941410414114141241413414144141541416414174141841419414204142141422414234142441425414264142741428414294143041431414324143341434414354143641437414384143941440414414144241443414444144541446414474144841449414504145141452414534145441455414564145741458414594146041461414624146341464414654146641467414684146941470414714147241473414744147541476414774147841479414804148141482414834148441485414864148741488414894149041491414924149341494414954149641497414984149941500415014150241503415044150541506415074150841509415104151141512415134151441515415164151741518415194152041521415224152341524415254152641527415284152941530415314153241533415344153541536415374153841539415404154141542415434154441545415464154741548415494155041551415524155341554415554155641557415584155941560415614156241563415644156541566415674156841569415704157141572415734157441575415764157741578415794158041581415824158341584415854158641587415884158941590415914159241593415944159541596415974159841599416004160141602416034160441605416064160741608416094161041611416124161341614416154161641617416184161941620416214162241623416244162541626416274162841629416304163141632416334163441635416364163741638416394164041641416424164341644416454164641647416484164941650416514165241653416544165541656416574165841659416604166141662416634166441665416664166741668416694167041671416724167341674416754167641677416784167941680416814168241683416844168541686416874168841689416904169141692416934169441695416964169741698416994170041701417024170341704417054170641707417084170941710417114171241713417144171541716417174171841719417204172141722417234172441725417264172741728417294173041731417324173341734417354173641737417384173941740417414174241743417444174541746417474174841749417504175141752417534175441755417564175741758417594176041761417624176341764417654176641767417684176941770417714177241773417744177541776417774177841779417804178141782417834178441785417864178741788417894179041791417924179341794417954179641797417984179941800418014180241803418044180541806418074180841809418104181141812418134181441815418164181741818418194182041821418224182341824418254182641827418284182941830418314183241833418344183541836418374183841839418404184141842418434184441845418464184741848418494185041851418524185341854418554185641857418584185941860418614186241863418644186541866418674186841869418704187141872418734187441875418764187741878418794188041881418824188341884418854188641887418884188941890418914189241893418944189541896418974189841899419004190141902419034190441905419064190741908419094191041911419124191341914419154191641917419184191941920419214192241923419244192541926419274192841929419304193141932419334193441935419364193741938419394194041941419424194341944419454194641947419484194941950419514195241953419544195541956419574195841959419604196141962419634196441965419664196741968419694197041971419724197341974419754197641977419784197941980419814198241983419844198541986419874198841989419904199141992419934199441995419964199741998419994200042001420024200342004420054200642007420084200942010420114201242013420144201542016420174201842019420204202142022420234202442025420264202742028420294203042031420324203342034420354203642037420384203942040420414204242043420444204542046420474204842049420504205142052420534205442055420564205742058420594206042061420624206342064420654206642067420684206942070420714207242073420744207542076420774207842079420804208142082420834208442085420864208742088420894209042091420924209342094420954209642097420984209942100421014210242103421044210542106421074210842109421104211142112421134211442115421164211742118421194212042121421224212342124421254212642127421284212942130421314213242133421344213542136421374213842139421404214142142421434214442145421464214742148421494215042151421524215342154421554215642157421584215942160421614216242163421644216542166421674216842169421704217142172421734217442175421764217742178421794218042181421824218342184421854218642187421884218942190421914219242193421944219542196421974219842199422004220142202422034220442205422064220742208422094221042211422124221342214422154221642217422184221942220422214222242223422244222542226422274222842229422304223142232422334223442235422364223742238422394224042241422424224342244422454224642247422484224942250422514225242253422544225542256422574225842259422604226142262422634226442265422664226742268422694227042271422724227342274422754227642277422784227942280422814228242283422844228542286422874228842289422904229142292422934229442295422964229742298422994230042301423024230342304423054230642307423084230942310423114231242313423144231542316423174231842319423204232142322423234232442325423264232742328423294233042331423324233342334423354233642337423384233942340423414234242343423444234542346423474234842349423504235142352423534235442355423564235742358423594236042361423624236342364423654236642367423684236942370423714237242373423744237542376423774237842379423804238142382423834238442385423864238742388423894239042391423924239342394423954239642397423984239942400424014240242403424044240542406424074240842409424104241142412424134241442415424164241742418424194242042421424224242342424424254242642427424284242942430424314243242433424344243542436424374243842439424404244142442424434244442445424464244742448424494245042451424524245342454424554245642457424584245942460424614246242463424644246542466424674246842469424704247142472424734247442475424764247742478424794248042481424824248342484424854248642487424884248942490424914249242493424944249542496424974249842499425004250142502425034250442505425064250742508425094251042511425124251342514425154251642517425184251942520425214252242523425244252542526425274252842529425304253142532425334253442535425364253742538425394254042541425424254342544425454254642547425484254942550425514255242553425544255542556425574255842559425604256142562425634256442565425664256742568425694257042571425724257342574425754257642577425784257942580425814258242583425844258542586425874258842589425904259142592425934259442595425964259742598425994260042601426024260342604426054260642607426084260942610426114261242613426144261542616426174261842619426204262142622426234262442625426264262742628426294263042631426324263342634426354263642637426384263942640426414264242643426444264542646426474264842649426504265142652426534265442655426564265742658426594266042661426624266342664426654266642667426684266942670426714267242673426744267542676426774267842679426804268142682426834268442685426864268742688426894269042691426924269342694426954269642697426984269942700427014270242703427044270542706427074270842709427104271142712427134271442715427164271742718427194272042721427224272342724427254272642727427284272942730427314273242733427344273542736427374273842739427404274142742427434274442745427464274742748427494275042751427524275342754427554275642757427584275942760427614276242763427644276542766427674276842769427704277142772427734277442775427764277742778427794278042781427824278342784427854278642787427884278942790427914279242793427944279542796427974279842799428004280142802428034280442805428064280742808428094281042811428124281342814428154281642817428184281942820428214282242823428244282542826428274282842829428304283142832428334283442835428364283742838428394284042841428424284342844428454284642847428484284942850428514285242853428544285542856428574285842859428604286142862428634286442865428664286742868428694287042871428724287342874428754287642877428784287942880428814288242883428844288542886428874288842889428904289142892428934289442895428964289742898428994290042901429024290342904429054290642907429084290942910429114291242913429144291542916429174291842919429204292142922429234292442925429264292742928429294293042931429324293342934429354293642937429384293942940429414294242943429444294542946429474294842949429504295142952429534295442955429564295742958429594296042961429624296342964429654296642967429684296942970429714297242973429744297542976429774297842979429804298142982429834298442985429864298742988429894299042991429924299342994429954299642997429984299943000430014300243003430044300543006430074300843009430104301143012430134301443015430164301743018430194302043021430224302343024430254302643027430284302943030430314303243033430344303543036430374303843039430404304143042430434304443045430464304743048430494305043051430524305343054430554305643057430584305943060430614306243063430644306543066430674306843069430704307143072430734307443075430764307743078430794308043081430824308343084430854308643087430884308943090430914309243093430944309543096430974309843099431004310143102431034310443105431064310743108431094311043111431124311343114431154311643117431184311943120431214312243123431244312543126431274312843129431304313143132431334313443135431364313743138431394314043141431424314343144431454314643147431484314943150431514315243153431544315543156431574315843159431604316143162431634316443165431664316743168431694317043171431724317343174431754317643177431784317943180431814318243183431844318543186431874318843189431904319143192431934319443195431964319743198431994320043201432024320343204432054320643207432084320943210432114321243213432144321543216432174321843219432204322143222432234322443225432264322743228432294323043231432324323343234432354323643237432384323943240432414324243243432444324543246432474324843249432504325143252432534325443255432564325743258432594326043261432624326343264432654326643267432684326943270432714327243273432744327543276432774327843279432804328143282432834328443285432864328743288432894329043291432924329343294432954329643297432984329943300433014330243303433044330543306433074330843309433104331143312433134331443315433164331743318433194332043321433224332343324433254332643327433284332943330433314333243333433344333543336433374333843339433404334143342433434334443345433464334743348433494335043351433524335343354433554335643357433584335943360433614336243363433644336543366433674336843369433704337143372433734337443375433764337743378433794338043381433824338343384433854338643387433884338943390433914339243393433944339543396433974339843399434004340143402434034340443405434064340743408434094341043411434124341343414434154341643417434184341943420434214342243423434244342543426434274342843429434304343143432434334343443435434364343743438434394344043441434424344343444434454344643447434484344943450434514345243453434544345543456434574345843459434604346143462434634346443465434664346743468434694347043471434724347343474434754347643477434784347943480434814348243483434844348543486434874348843489434904349143492434934349443495434964349743498434994350043501435024350343504435054350643507435084350943510435114351243513435144351543516435174351843519435204352143522435234352443525435264352743528435294353043531435324353343534435354353643537435384353943540435414354243543435444354543546435474354843549435504355143552435534355443555435564355743558435594356043561435624356343564435654356643567435684356943570435714357243573435744357543576435774357843579435804358143582435834358443585435864358743588435894359043591435924359343594435954359643597435984359943600436014360243603436044360543606436074360843609436104361143612436134361443615436164361743618436194362043621436224362343624436254362643627436284362943630436314363243633436344363543636436374363843639436404364143642436434364443645436464364743648436494365043651436524365343654436554365643657436584365943660436614366243663436644366543666436674366843669436704367143672436734367443675436764367743678436794368043681436824368343684436854368643687436884368943690436914369243693436944369543696436974369843699437004370143702437034370443705437064370743708437094371043711437124371343714437154371643717437184371943720437214372243723437244372543726437274372843729437304373143732437334373443735437364373743738437394374043741437424374343744437454374643747437484374943750437514375243753437544375543756437574375843759437604376143762437634376443765437664376743768437694377043771437724377343774437754377643777437784377943780437814378243783437844378543786437874378843789437904379143792437934379443795437964379743798437994380043801438024380343804438054380643807438084380943810438114381243813438144381543816438174381843819438204382143822438234382443825438264382743828438294383043831438324383343834438354383643837438384383943840438414384243843438444384543846438474384843849438504385143852438534385443855438564385743858438594386043861438624386343864438654386643867438684386943870438714387243873438744387543876438774387843879438804388143882438834388443885438864388743888438894389043891438924389343894438954389643897438984389943900439014390243903439044390543906439074390843909439104391143912439134391443915439164391743918439194392043921439224392343924439254392643927439284392943930439314393243933439344393543936439374393843939439404394143942439434394443945439464394743948439494395043951439524395343954439554395643957439584395943960439614396243963439644396543966439674396843969439704397143972439734397443975439764397743978439794398043981439824398343984439854398643987439884398943990439914399243993439944399543996439974399843999440004400144002440034400444005440064400744008440094401044011440124401344014440154401644017440184401944020440214402244023440244402544026440274402844029440304403144032440334403444035440364403744038440394404044041440424404344044440454404644047440484404944050440514405244053440544405544056440574405844059440604406144062440634406444065440664406744068440694407044071440724407344074440754407644077440784407944080440814408244083440844408544086440874408844089440904409144092440934409444095440964409744098440994410044101441024410344104441054410644107441084410944110441114411244113441144411544116441174411844119441204412144122441234412444125441264412744128441294413044131441324413344134441354413644137441384413944140441414414244143441444414544146441474414844149441504415144152441534415444155441564415744158441594416044161441624416344164441654416644167441684416944170441714417244173441744417544176441774417844179441804418144182441834418444185441864418744188441894419044191441924419344194441954419644197441984419944200442014420244203442044420544206442074420844209442104421144212442134421444215442164421744218442194422044221442224422344224442254422644227442284422944230442314423244233442344423544236442374423844239442404424144242442434424444245442464424744248442494425044251442524425344254442554425644257442584425944260442614426244263442644426544266442674426844269442704427144272442734427444275442764427744278442794428044281442824428344284442854428644287442884428944290442914429244293442944429544296442974429844299443004430144302443034430444305443064430744308443094431044311443124431344314443154431644317443184431944320443214432244323443244432544326443274432844329443304433144332443334433444335443364433744338443394434044341443424434344344443454434644347443484434944350443514435244353443544435544356443574435844359443604436144362443634436444365443664436744368443694437044371443724437344374443754437644377443784437944380443814438244383443844438544386443874438844389443904439144392443934439444395443964439744398443994440044401444024440344404444054440644407444084440944410444114441244413444144441544416444174441844419444204442144422444234442444425444264442744428444294443044431444324443344434444354443644437444384443944440444414444244443444444444544446444474444844449444504445144452444534445444455444564445744458444594446044461444624446344464444654446644467444684446944470444714447244473444744447544476444774447844479444804448144482444834448444485444864448744488444894449044491444924449344494444954449644497444984449944500445014450244503445044450544506445074450844509445104451144512445134451444515445164451744518445194452044521445224452344524445254452644527445284452944530445314453244533445344453544536445374453844539445404454144542445434454444545445464454744548445494455044551445524455344554445554455644557445584455944560445614456244563445644456544566445674456844569445704457144572445734457444575445764457744578445794458044581445824458344584445854458644587445884458944590445914459244593445944459544596445974459844599446004460144602446034460444605446064460744608446094461044611446124461344614446154461644617446184461944620446214462244623446244462544626446274462844629446304463144632446334463444635446364463744638446394464044641446424464344644446454464644647446484464944650446514465244653446544465544656446574465844659446604466144662446634466444665446664466744668446694467044671446724467344674446754467644677446784467944680446814468244683446844468544686446874468844689446904469144692446934469444695446964469744698446994470044701447024470344704447054470644707447084470944710447114471244713447144471544716447174471844719447204472144722447234472444725447264472744728447294473044731447324473344734447354473644737447384473944740447414474244743447444474544746447474474844749447504475144752447534475444755447564475744758447594476044761447624476344764447654476644767447684476944770447714477244773447744477544776447774477844779447804478144782447834478444785447864478744788447894479044791447924479344794447954479644797447984479944800448014480244803448044480544806448074480844809448104481144812448134481444815448164481744818448194482044821448224482344824448254482644827448284482944830448314483244833448344483544836448374483844839448404484144842448434484444845448464484744848448494485044851448524485344854448554485644857448584485944860448614486244863448644486544866448674486844869448704487144872448734487444875448764487744878448794488044881448824488344884448854488644887448884488944890448914489244893448944489544896448974489844899449004490144902449034490444905449064490744908449094491044911449124491344914449154491644917449184491944920449214492244923449244492544926449274492844929449304493144932449334493444935449364493744938449394494044941449424494344944449454494644947449484494944950449514495244953449544495544956449574495844959449604496144962449634496444965449664496744968449694497044971449724497344974449754497644977449784497944980449814498244983449844498544986449874498844989449904499144992449934499444995449964499744998449994500045001450024500345004450054500645007450084500945010450114501245013450144501545016450174501845019450204502145022450234502445025450264502745028450294503045031450324503345034450354503645037450384503945040450414504245043450444504545046450474504845049450504505145052450534505445055450564505745058450594506045061450624506345064450654506645067450684506945070450714507245073450744507545076450774507845079450804508145082450834508445085450864508745088450894509045091450924509345094450954509645097450984509945100451014510245103451044510545106451074510845109451104511145112451134511445115451164511745118451194512045121451224512345124451254512645127451284512945130451314513245133451344513545136451374513845139451404514145142451434514445145451464514745148451494515045151451524515345154451554515645157451584515945160451614516245163451644516545166451674516845169451704517145172451734517445175451764517745178451794518045181451824518345184451854518645187451884518945190451914519245193451944519545196451974519845199452004520145202452034520445205452064520745208452094521045211452124521345214452154521645217452184521945220452214522245223452244522545226452274522845229452304523145232452334523445235452364523745238452394524045241452424524345244452454524645247452484524945250452514525245253452544525545256452574525845259452604526145262452634526445265452664526745268452694527045271452724527345274452754527645277452784527945280452814528245283452844528545286452874528845289452904529145292452934529445295452964529745298452994530045301453024530345304453054530645307453084530945310453114531245313453144531545316453174531845319453204532145322453234532445325453264532745328453294533045331453324533345334453354533645337453384533945340453414534245343453444534545346453474534845349453504535145352453534535445355453564535745358453594536045361453624536345364453654536645367453684536945370453714537245373453744537545376453774537845379453804538145382453834538445385453864538745388453894539045391453924539345394453954539645397453984539945400454014540245403454044540545406454074540845409454104541145412454134541445415454164541745418454194542045421454224542345424454254542645427454284542945430454314543245433454344543545436454374543845439454404544145442454434544445445454464544745448454494545045451454524545345454454554545645457454584545945460454614546245463454644546545466454674546845469454704547145472454734547445475454764547745478454794548045481454824548345484454854548645487454884548945490454914549245493454944549545496454974549845499455004550145502455034550445505455064550745508455094551045511455124551345514455154551645517455184551945520455214552245523455244552545526455274552845529455304553145532455334553445535455364553745538455394554045541455424554345544455454554645547455484554945550455514555245553455544555545556455574555845559455604556145562455634556445565455664556745568455694557045571455724557345574455754557645577455784557945580455814558245583455844558545586455874558845589455904559145592455934559445595455964559745598455994560045601456024560345604456054560645607456084560945610456114561245613456144561545616456174561845619456204562145622456234562445625456264562745628456294563045631456324563345634456354563645637456384563945640456414564245643456444564545646456474564845649456504565145652456534565445655456564565745658456594566045661456624566345664456654566645667456684566945670456714567245673456744567545676456774567845679456804568145682456834568445685456864568745688456894569045691456924569345694456954569645697456984569945700457014570245703457044570545706457074570845709457104571145712457134571445715457164571745718457194572045721457224572345724457254572645727457284572945730457314573245733457344573545736457374573845739457404574145742457434574445745457464574745748457494575045751457524575345754457554575645757457584575945760457614576245763457644576545766457674576845769457704577145772457734577445775457764577745778457794578045781457824578345784457854578645787457884578945790457914579245793457944579545796457974579845799458004580145802458034580445805458064580745808458094581045811458124581345814458154581645817458184581945820458214582245823458244582545826458274582845829458304583145832458334583445835458364583745838458394584045841458424584345844458454584645847458484584945850458514585245853458544585545856458574585845859458604586145862458634586445865458664586745868458694587045871458724587345874458754587645877458784587945880458814588245883458844588545886458874588845889458904589145892458934589445895458964589745898458994590045901459024590345904459054590645907459084590945910459114591245913459144591545916459174591845919459204592145922459234592445925459264592745928459294593045931459324593345934459354593645937459384593945940459414594245943459444594545946459474594845949459504595145952459534595445955459564595745958459594596045961459624596345964459654596645967459684596945970459714597245973459744597545976459774597845979459804598145982459834598445985459864598745988459894599045991459924599345994459954599645997459984599946000460014600246003460044600546006460074600846009460104601146012460134601446015460164601746018460194602046021460224602346024460254602646027460284602946030460314603246033460344603546036460374603846039460404604146042460434604446045460464604746048460494605046051460524605346054460554605646057460584605946060460614606246063460644606546066460674606846069460704607146072460734607446075460764607746078460794608046081460824608346084460854608646087460884608946090460914609246093460944609546096460974609846099461004610146102461034610446105461064610746108461094611046111461124611346114461154611646117461184611946120461214612246123461244612546126461274612846129461304613146132461334613446135461364613746138461394614046141461424614346144461454614646147461484614946150461514615246153461544615546156461574615846159461604616146162461634616446165461664616746168461694617046171461724617346174461754617646177461784617946180461814618246183461844618546186461874618846189461904619146192461934619446195461964619746198461994620046201462024620346204462054620646207462084620946210462114621246213462144621546216462174621846219462204622146222462234622446225462264622746228462294623046231462324623346234462354623646237462384623946240462414624246243462444624546246462474624846249462504625146252462534625446255462564625746258462594626046261462624626346264462654626646267462684626946270462714627246273462744627546276462774627846279462804628146282462834628446285462864628746288462894629046291462924629346294462954629646297462984629946300463014630246303463044630546306463074630846309463104631146312463134631446315463164631746318463194632046321463224632346324463254632646327463284632946330463314633246333463344633546336463374633846339463404634146342463434634446345463464634746348463494635046351463524635346354463554635646357463584635946360463614636246363463644636546366463674636846369463704637146372463734637446375463764637746378463794638046381463824638346384463854638646387463884638946390463914639246393463944639546396463974639846399464004640146402464034640446405464064640746408464094641046411464124641346414464154641646417464184641946420464214642246423464244642546426464274642846429464304643146432464334643446435464364643746438464394644046441464424644346444464454644646447464484644946450464514645246453464544645546456464574645846459464604646146462464634646446465464664646746468464694647046471464724647346474464754647646477464784647946480464814648246483464844648546486464874648846489464904649146492464934649446495464964649746498464994650046501465024650346504465054650646507465084650946510465114651246513465144651546516465174651846519465204652146522465234652446525465264652746528465294653046531465324653346534465354653646537465384653946540465414654246543465444654546546465474654846549465504655146552465534655446555465564655746558465594656046561465624656346564465654656646567465684656946570465714657246573465744657546576465774657846579465804658146582465834658446585465864658746588465894659046591465924659346594465954659646597465984659946600466014660246603466044660546606466074660846609466104661146612466134661446615466164661746618466194662046621466224662346624466254662646627466284662946630466314663246633466344663546636466374663846639466404664146642466434664446645466464664746648466494665046651466524665346654466554665646657466584665946660466614666246663466644666546666466674666846669466704667146672466734667446675466764667746678466794668046681466824668346684466854668646687466884668946690466914669246693466944669546696466974669846699467004670146702467034670446705467064670746708467094671046711467124671346714467154671646717467184671946720467214672246723467244672546726467274672846729467304673146732467334673446735467364673746738467394674046741467424674346744467454674646747467484674946750467514675246753467544675546756467574675846759467604676146762467634676446765467664676746768467694677046771467724677346774467754677646777467784677946780467814678246783467844678546786467874678846789467904679146792467934679446795467964679746798467994680046801468024680346804468054680646807468084680946810468114681246813468144681546816468174681846819468204682146822468234682446825468264682746828468294683046831468324683346834468354683646837468384683946840468414684246843468444684546846468474684846849468504685146852468534685446855468564685746858468594686046861468624686346864468654686646867468684686946870468714687246873468744687546876468774687846879468804688146882468834688446885468864688746888468894689046891468924689346894468954689646897468984689946900469014690246903469044690546906469074690846909469104691146912469134691446915469164691746918469194692046921469224692346924469254692646927469284692946930469314693246933469344693546936469374693846939469404694146942469434694446945469464694746948469494695046951469524695346954469554695646957469584695946960469614696246963469644696546966469674696846969469704697146972469734697446975469764697746978469794698046981469824698346984469854698646987469884698946990469914699246993469944699546996469974699846999470004700147002470034700447005470064700747008470094701047011470124701347014470154701647017470184701947020470214702247023470244702547026470274702847029470304703147032470334703447035470364703747038470394704047041470424704347044470454704647047470484704947050470514705247053470544705547056470574705847059470604706147062470634706447065470664706747068470694707047071470724707347074470754707647077470784707947080470814708247083470844708547086470874708847089470904709147092470934709447095470964709747098470994710047101471024710347104471054710647107471084710947110471114711247113471144711547116471174711847119471204712147122471234712447125471264712747128471294713047131471324713347134471354713647137471384713947140471414714247143471444714547146471474714847149471504715147152471534715447155471564715747158471594716047161471624716347164471654716647167471684716947170471714717247173471744717547176471774717847179471804718147182471834718447185471864718747188471894719047191471924719347194471954719647197471984719947200472014720247203472044720547206472074720847209472104721147212472134721447215472164721747218472194722047221472224722347224472254722647227472284722947230472314723247233472344723547236472374723847239472404724147242472434724447245472464724747248472494725047251472524725347254472554725647257472584725947260472614726247263472644726547266472674726847269472704727147272472734727447275472764727747278472794728047281472824728347284472854728647287472884728947290472914729247293472944729547296472974729847299473004730147302473034730447305473064730747308473094731047311473124731347314473154731647317473184731947320473214732247323473244732547326473274732847329473304733147332473334733447335473364733747338473394734047341473424734347344473454734647347473484734947350473514735247353473544735547356473574735847359473604736147362473634736447365473664736747368473694737047371473724737347374473754737647377473784737947380473814738247383473844738547386473874738847389473904739147392473934739447395473964739747398473994740047401474024740347404474054740647407474084740947410474114741247413474144741547416474174741847419474204742147422474234742447425474264742747428474294743047431474324743347434474354743647437474384743947440474414744247443474444744547446474474744847449474504745147452474534745447455474564745747458474594746047461474624746347464474654746647467474684746947470474714747247473474744747547476474774747847479474804748147482474834748447485474864748747488474894749047491474924749347494474954749647497474984749947500475014750247503475044750547506475074750847509475104751147512475134751447515475164751747518475194752047521475224752347524475254752647527475284752947530475314753247533475344753547536475374753847539475404754147542475434754447545475464754747548475494755047551475524755347554475554755647557475584755947560475614756247563475644756547566475674756847569475704757147572475734757447575475764757747578475794758047581475824758347584475854758647587475884758947590475914759247593475944759547596475974759847599476004760147602476034760447605476064760747608476094761047611476124761347614476154761647617476184761947620476214762247623476244762547626476274762847629476304763147632476334763447635476364763747638476394764047641476424764347644476454764647647476484764947650476514765247653476544765547656476574765847659476604766147662476634766447665476664766747668476694767047671476724767347674476754767647677476784767947680476814768247683476844768547686476874768847689476904769147692476934769447695476964769747698476994770047701477024770347704477054770647707477084770947710477114771247713477144771547716477174771847719477204772147722477234772447725477264772747728477294773047731477324773347734477354773647737477384773947740477414774247743477444774547746477474774847749477504775147752477534775447755477564775747758477594776047761477624776347764477654776647767477684776947770477714777247773477744777547776477774777847779477804778147782477834778447785477864778747788477894779047791477924779347794477954779647797477984779947800478014780247803478044780547806478074780847809478104781147812478134781447815478164781747818478194782047821478224782347824478254782647827478284782947830478314783247833478344783547836478374783847839478404784147842478434784447845478464784747848478494785047851478524785347854478554785647857478584785947860478614786247863478644786547866478674786847869478704787147872478734787447875478764787747878478794788047881478824788347884478854788647887478884788947890478914789247893478944789547896478974789847899479004790147902479034790447905479064790747908479094791047911479124791347914479154791647917479184791947920479214792247923479244792547926479274792847929479304793147932479334793447935479364793747938479394794047941479424794347944479454794647947479484794947950479514795247953479544795547956479574795847959479604796147962479634796447965479664796747968479694797047971479724797347974479754797647977479784797947980479814798247983479844798547986479874798847989479904799147992479934799447995479964799747998479994800048001480024800348004480054800648007480084800948010480114801248013480144801548016480174801848019480204802148022480234802448025480264802748028480294803048031480324803348034480354803648037480384803948040480414804248043480444804548046480474804848049480504805148052480534805448055480564805748058480594806048061480624806348064480654806648067480684806948070480714807248073480744807548076480774807848079480804808148082480834808448085480864808748088480894809048091480924809348094480954809648097480984809948100481014810248103481044810548106481074810848109481104811148112481134811448115481164811748118481194812048121481224812348124481254812648127481284812948130481314813248133481344813548136481374813848139481404814148142481434814448145481464814748148481494815048151481524815348154481554815648157481584815948160481614816248163481644816548166481674816848169481704817148172481734817448175481764817748178481794818048181481824818348184481854818648187481884818948190481914819248193481944819548196481974819848199482004820148202482034820448205482064820748208482094821048211482124821348214482154821648217482184821948220482214822248223482244822548226482274822848229482304823148232482334823448235482364823748238482394824048241482424824348244482454824648247482484824948250482514825248253482544825548256482574825848259482604826148262482634826448265482664826748268482694827048271482724827348274482754827648277482784827948280482814828248283482844828548286482874828848289482904829148292482934829448295482964829748298482994830048301483024830348304483054830648307483084830948310483114831248313483144831548316483174831848319483204832148322483234832448325483264832748328483294833048331483324833348334483354833648337483384833948340483414834248343483444834548346483474834848349483504835148352483534835448355483564835748358483594836048361483624836348364483654836648367483684836948370483714837248373483744837548376483774837848379483804838148382483834838448385483864838748388483894839048391483924839348394483954839648397483984839948400484014840248403484044840548406484074840848409484104841148412484134841448415484164841748418484194842048421484224842348424484254842648427484284842948430484314843248433484344843548436484374843848439484404844148442484434844448445484464844748448484494845048451484524845348454484554845648457484584845948460484614846248463484644846548466484674846848469484704847148472484734847448475484764847748478484794848048481484824848348484484854848648487484884848948490484914849248493484944849548496484974849848499485004850148502485034850448505485064850748508485094851048511485124851348514485154851648517485184851948520485214852248523485244852548526485274852848529485304853148532485334853448535485364853748538485394854048541485424854348544485454854648547485484854948550485514855248553485544855548556485574855848559485604856148562485634856448565485664856748568485694857048571485724857348574485754857648577485784857948580485814858248583485844858548586485874858848589485904859148592485934859448595485964859748598485994860048601486024860348604486054860648607486084860948610486114861248613486144861548616486174861848619486204862148622486234862448625486264862748628486294863048631486324863348634486354863648637486384863948640486414864248643486444864548646486474864848649486504865148652486534865448655486564865748658486594866048661486624866348664486654866648667486684866948670486714867248673486744867548676486774867848679486804868148682486834868448685486864868748688486894869048691486924869348694486954869648697486984869948700487014870248703487044870548706487074870848709487104871148712487134871448715487164871748718487194872048721487224872348724487254872648727487284872948730487314873248733487344873548736487374873848739487404874148742487434874448745487464874748748487494875048751487524875348754487554875648757487584875948760487614876248763487644876548766487674876848769487704877148772487734877448775487764877748778487794878048781487824878348784487854878648787487884878948790487914879248793487944879548796487974879848799488004880148802488034880448805488064880748808488094881048811488124881348814488154881648817488184881948820488214882248823488244882548826488274882848829488304883148832488334883448835488364883748838488394884048841488424884348844488454884648847488484884948850488514885248853488544885548856488574885848859488604886148862488634886448865488664886748868488694887048871488724887348874488754887648877488784887948880488814888248883488844888548886488874888848889488904889148892488934889448895488964889748898488994890048901489024890348904489054890648907489084890948910489114891248913489144891548916489174891848919489204892148922489234892448925489264892748928489294893048931489324893348934489354893648937489384893948940489414894248943489444894548946489474894848949489504895148952489534895448955489564895748958489594896048961489624896348964489654896648967489684896948970489714897248973489744897548976489774897848979489804898148982489834898448985489864898748988489894899048991489924899348994489954899648997489984899949000490014900249003490044900549006490074900849009490104901149012490134901449015490164901749018490194902049021490224902349024490254902649027490284902949030490314903249033490344903549036490374903849039490404904149042490434904449045490464904749048490494905049051490524905349054490554905649057490584905949060490614906249063490644906549066490674906849069490704907149072490734907449075490764907749078490794908049081490824908349084490854908649087490884908949090490914909249093490944909549096490974909849099491004910149102491034910449105491064910749108491094911049111491124911349114491154911649117491184911949120491214912249123491244912549126491274912849129491304913149132491334913449135491364913749138491394914049141491424914349144491454914649147491484914949150491514915249153491544915549156491574915849159491604916149162491634916449165491664916749168491694917049171491724917349174491754917649177491784917949180491814918249183491844918549186491874918849189491904919149192491934919449195491964919749198491994920049201492024920349204492054920649207492084920949210492114921249213492144921549216492174921849219492204922149222492234922449225492264922749228492294923049231492324923349234492354923649237492384923949240492414924249243492444924549246492474924849249492504925149252492534925449255492564925749258492594926049261492624926349264492654926649267492684926949270492714927249273492744927549276492774927849279492804928149282492834928449285492864928749288492894929049291492924929349294492954929649297492984929949300493014930249303493044930549306493074930849309493104931149312493134931449315493164931749318493194932049321493224932349324493254932649327493284932949330493314933249333493344933549336493374933849339493404934149342493434934449345493464934749348493494935049351493524935349354493554935649357493584935949360493614936249363493644936549366493674936849369493704937149372493734937449375493764937749378493794938049381493824938349384493854938649387493884938949390493914939249393493944939549396493974939849399494004940149402494034940449405494064940749408494094941049411494124941349414494154941649417494184941949420494214942249423494244942549426494274942849429494304943149432494334943449435494364943749438494394944049441494424944349444494454944649447494484944949450494514945249453494544945549456494574945849459494604946149462494634946449465494664946749468494694947049471494724947349474494754947649477494784947949480494814948249483494844948549486494874948849489494904949149492494934949449495494964949749498494994950049501495024950349504495054950649507495084950949510495114951249513495144951549516495174951849519495204952149522495234952449525495264952749528495294953049531495324953349534495354953649537495384953949540495414954249543495444954549546495474954849549495504955149552495534955449555495564955749558495594956049561495624956349564495654956649567495684956949570495714957249573495744957549576495774957849579495804958149582495834958449585495864958749588495894959049591495924959349594495954959649597495984959949600496014960249603496044960549606496074960849609496104961149612496134961449615496164961749618496194962049621496224962349624496254962649627496284962949630496314963249633496344963549636496374963849639496404964149642496434964449645496464964749648496494965049651496524965349654496554965649657496584965949660496614966249663496644966549666496674966849669496704967149672496734967449675496764967749678496794968049681496824968349684496854968649687496884968949690496914969249693496944969549696496974969849699497004970149702497034970449705497064970749708497094971049711497124971349714497154971649717497184971949720497214972249723497244972549726497274972849729497304973149732497334973449735497364973749738497394974049741497424974349744497454974649747497484974949750497514975249753497544975549756497574975849759497604976149762497634976449765497664976749768497694977049771497724977349774497754977649777497784977949780497814978249783497844978549786497874978849789497904979149792497934979449795497964979749798497994980049801498024980349804498054980649807498084980949810498114981249813498144981549816498174981849819498204982149822498234982449825498264982749828498294983049831498324983349834498354983649837498384983949840498414984249843498444984549846498474984849849498504985149852498534985449855498564985749858498594986049861498624986349864498654986649867498684986949870498714987249873498744987549876498774987849879498804988149882498834988449885498864988749888498894989049891498924989349894498954989649897498984989949900499014990249903499044990549906499074990849909499104991149912499134991449915499164991749918499194992049921499224992349924499254992649927499284992949930499314993249933499344993549936499374993849939499404994149942499434994449945499464994749948499494995049951499524995349954499554995649957499584995949960499614996249963499644996549966499674996849969499704997149972499734997449975499764997749978499794998049981499824998349984499854998649987499884998949990499914999249993499944999549996499974999849999500005000150002500035000450005500065000750008500095001050011500125001350014500155001650017500185001950020500215002250023500245002550026500275002850029500305003150032500335003450035500365003750038500395004050041500425004350044500455004650047500485004950050500515005250053500545005550056500575005850059500605006150062500635006450065500665006750068500695007050071500725007350074500755007650077500785007950080500815008250083500845008550086500875008850089500905009150092500935009450095500965009750098500995010050101501025010350104501055010650107501085010950110501115011250113501145011550116501175011850119501205012150122501235012450125501265012750128501295013050131501325013350134501355013650137501385013950140501415014250143501445014550146501475014850149501505015150152501535015450155501565015750158501595016050161501625016350164501655016650167501685016950170501715017250173501745017550176501775017850179501805018150182501835018450185501865018750188501895019050191501925019350194501955019650197501985019950200502015020250203502045020550206502075020850209502105021150212502135021450215502165021750218502195022050221502225022350224502255022650227502285022950230502315023250233502345023550236502375023850239502405024150242502435024450245502465024750248502495025050251502525025350254502555025650257502585025950260502615026250263502645026550266502675026850269502705027150272502735027450275502765027750278502795028050281502825028350284502855028650287502885028950290502915029250293502945029550296502975029850299503005030150302503035030450305503065030750308503095031050311503125031350314503155031650317503185031950320503215032250323503245032550326503275032850329503305033150332503335033450335503365033750338503395034050341503425034350344503455034650347503485034950350503515035250353503545035550356503575035850359503605036150362503635036450365503665036750368503695037050371503725037350374503755037650377503785037950380503815038250383503845038550386503875038850389503905039150392503935039450395503965039750398503995040050401504025040350404504055040650407504085040950410504115041250413504145041550416504175041850419504205042150422504235042450425504265042750428504295043050431504325043350434504355043650437504385043950440504415044250443504445044550446504475044850449504505045150452504535045450455504565045750458504595046050461504625046350464504655046650467504685046950470504715047250473504745047550476504775047850479504805048150482504835048450485504865048750488504895049050491504925049350494504955049650497504985049950500505015050250503505045050550506505075050850509505105051150512505135051450515505165051750518505195052050521505225052350524505255052650527505285052950530505315053250533505345053550536505375053850539505405054150542505435054450545505465054750548505495055050551505525055350554505555055650557505585055950560505615056250563505645056550566505675056850569505705057150572505735057450575505765057750578505795058050581505825058350584505855058650587505885058950590505915059250593505945059550596505975059850599506005060150602506035060450605506065060750608506095061050611506125061350614506155061650617506185061950620506215062250623506245062550626506275062850629506305063150632506335063450635506365063750638506395064050641506425064350644506455064650647506485064950650506515065250653506545065550656506575065850659506605066150662506635066450665506665066750668506695067050671506725067350674506755067650677506785067950680506815068250683506845068550686506875068850689506905069150692506935069450695506965069750698506995070050701507025070350704507055070650707507085070950710507115071250713507145071550716507175071850719507205072150722507235072450725507265072750728507295073050731507325073350734507355073650737507385073950740507415074250743507445074550746507475074850749507505075150752507535075450755507565075750758507595076050761507625076350764507655076650767507685076950770507715077250773507745077550776507775077850779507805078150782507835078450785507865078750788507895079050791507925079350794507955079650797507985079950800508015080250803508045080550806508075080850809508105081150812508135081450815508165081750818508195082050821508225082350824508255082650827508285082950830508315083250833508345083550836508375083850839508405084150842508435084450845508465084750848508495085050851508525085350854508555085650857508585085950860508615086250863508645086550866508675086850869508705087150872508735087450875508765087750878508795088050881508825088350884508855088650887508885088950890508915089250893508945089550896508975089850899509005090150902509035090450905509065090750908509095091050911509125091350914509155091650917509185091950920509215092250923509245092550926509275092850929509305093150932509335093450935509365093750938509395094050941509425094350944509455094650947509485094950950509515095250953509545095550956509575095850959509605096150962509635096450965509665096750968509695097050971509725097350974509755097650977509785097950980509815098250983509845098550986509875098850989509905099150992509935099450995509965099750998509995100051001510025100351004510055100651007510085100951010510115101251013510145101551016510175101851019510205102151022510235102451025510265102751028510295103051031510325103351034510355103651037510385103951040510415104251043510445104551046510475104851049510505105151052510535105451055510565105751058510595106051061510625106351064510655106651067510685106951070510715107251073510745107551076510775107851079510805108151082510835108451085510865108751088510895109051091510925109351094510955109651097510985109951100511015110251103511045110551106511075110851109511105111151112511135111451115511165111751118511195112051121511225112351124511255112651127511285112951130511315113251133511345113551136511375113851139511405114151142511435114451145511465114751148511495115051151511525115351154511555115651157511585115951160511615116251163511645116551166511675116851169511705117151172511735117451175511765117751178511795118051181511825118351184511855118651187511885118951190511915119251193511945119551196511975119851199512005120151202512035120451205512065120751208512095121051211512125121351214512155121651217512185121951220512215122251223512245122551226512275122851229512305123151232512335123451235512365123751238512395124051241512425124351244512455124651247512485124951250512515125251253512545125551256512575125851259512605126151262512635126451265512665126751268512695127051271512725127351274512755127651277512785127951280512815128251283512845128551286512875128851289512905129151292512935129451295512965129751298512995130051301513025130351304513055130651307513085130951310513115131251313513145131551316513175131851319513205132151322513235132451325513265132751328513295133051331513325133351334513355133651337513385133951340513415134251343513445134551346513475134851349513505135151352513535135451355513565135751358513595136051361513625136351364513655136651367513685136951370513715137251373513745137551376513775137851379513805138151382513835138451385513865138751388513895139051391513925139351394513955139651397513985139951400514015140251403514045140551406514075140851409514105141151412514135141451415514165141751418514195142051421514225142351424514255142651427514285142951430514315143251433514345143551436514375143851439514405144151442514435144451445514465144751448514495145051451514525145351454514555145651457514585145951460514615146251463514645146551466514675146851469514705147151472514735147451475514765147751478514795148051481514825148351484514855148651487514885148951490514915149251493514945149551496514975149851499515005150151502515035150451505515065150751508515095151051511515125151351514515155151651517515185151951520515215152251523515245152551526515275152851529515305153151532515335153451535515365153751538515395154051541515425154351544515455154651547515485154951550515515155251553515545155551556515575155851559515605156151562515635156451565515665156751568515695157051571515725157351574515755157651577515785157951580515815158251583515845158551586515875158851589515905159151592515935159451595515965159751598515995160051601516025160351604516055160651607516085160951610516115161251613516145161551616516175161851619516205162151622516235162451625516265162751628516295163051631516325163351634516355163651637516385163951640516415164251643516445164551646516475164851649516505165151652516535165451655516565165751658516595166051661516625166351664516655166651667516685166951670516715167251673516745167551676516775167851679516805168151682516835168451685516865168751688516895169051691516925169351694516955169651697516985169951700517015170251703517045170551706517075170851709517105171151712517135171451715517165171751718517195172051721517225172351724517255172651727517285172951730517315173251733517345173551736517375173851739517405174151742517435174451745517465174751748517495175051751517525175351754517555175651757517585175951760517615176251763517645176551766517675176851769517705177151772517735177451775517765177751778517795178051781517825178351784517855178651787517885178951790517915179251793517945179551796517975179851799518005180151802518035180451805518065180751808518095181051811518125181351814518155181651817518185181951820518215182251823518245182551826518275182851829518305183151832518335183451835518365183751838518395184051841518425184351844518455184651847518485184951850518515185251853518545185551856518575185851859518605186151862518635186451865518665186751868518695187051871518725187351874518755187651877518785187951880518815188251883518845188551886518875188851889518905189151892518935189451895518965189751898518995190051901519025190351904519055190651907519085190951910519115191251913519145191551916519175191851919519205192151922519235192451925519265192751928519295193051931519325193351934519355193651937519385193951940519415194251943519445194551946519475194851949519505195151952519535195451955519565195751958519595196051961519625196351964519655196651967519685196951970519715197251973519745197551976519775197851979519805198151982519835198451985519865198751988519895199051991519925199351994519955199651997519985199952000520015200252003520045200552006520075200852009520105201152012520135201452015520165201752018520195202052021520225202352024520255202652027520285202952030520315203252033520345203552036520375203852039520405204152042520435204452045520465204752048520495205052051520525205352054520555205652057520585205952060520615206252063520645206552066520675206852069520705207152072520735207452075520765207752078520795208052081520825208352084520855208652087520885208952090520915209252093520945209552096520975209852099521005210152102521035210452105521065210752108521095211052111521125211352114521155211652117521185211952120521215212252123521245212552126521275212852129521305213152132521335213452135521365213752138521395214052141521425214352144521455214652147521485214952150521515215252153521545215552156521575215852159521605216152162521635216452165521665216752168521695217052171521725217352174521755217652177521785217952180521815218252183521845218552186521875218852189521905219152192521935219452195521965219752198521995220052201522025220352204522055220652207522085220952210522115221252213522145221552216522175221852219522205222152222522235222452225522265222752228522295223052231522325223352234522355223652237522385223952240522415224252243522445224552246522475224852249522505225152252522535225452255522565225752258522595226052261522625226352264522655226652267522685226952270522715227252273522745227552276522775227852279522805228152282522835228452285522865228752288522895229052291522925229352294522955229652297522985229952300523015230252303523045230552306523075230852309523105231152312523135231452315523165231752318523195232052321523225232352324523255232652327523285232952330523315233252333523345233552336523375233852339523405234152342523435234452345523465234752348523495235052351523525235352354523555235652357523585235952360523615236252363523645236552366523675236852369523705237152372523735237452375523765237752378523795238052381523825238352384523855238652387523885238952390523915239252393523945239552396523975239852399524005240152402524035240452405524065240752408524095241052411524125241352414524155241652417524185241952420524215242252423524245242552426524275242852429524305243152432524335243452435524365243752438524395244052441524425244352444524455244652447524485244952450524515245252453524545245552456524575245852459524605246152462524635246452465524665246752468524695247052471524725247352474524755247652477524785247952480524815248252483524845248552486524875248852489524905249152492524935249452495524965249752498524995250052501525025250352504525055250652507525085250952510525115251252513525145251552516525175251852519525205252152522525235252452525525265252752528525295253052531525325253352534525355253652537525385253952540525415254252543525445254552546525475254852549525505255152552525535255452555525565255752558525595256052561525625256352564525655256652567525685256952570525715257252573525745257552576525775257852579525805258152582525835258452585525865258752588525895259052591525925259352594525955259652597525985259952600526015260252603526045260552606526075260852609526105261152612526135261452615526165261752618526195262052621526225262352624526255262652627526285262952630526315263252633526345263552636526375263852639526405264152642526435264452645526465264752648526495265052651526525265352654526555265652657526585265952660526615266252663526645266552666526675266852669526705267152672526735267452675526765267752678526795268052681526825268352684526855268652687526885268952690526915269252693526945269552696526975269852699527005270152702527035270452705527065270752708527095271052711527125271352714527155271652717527185271952720527215272252723527245272552726527275272852729527305273152732527335273452735527365273752738527395274052741527425274352744527455274652747527485274952750527515275252753527545275552756527575275852759527605276152762527635276452765527665276752768527695277052771527725277352774527755277652777527785277952780527815278252783527845278552786527875278852789527905279152792527935279452795527965279752798527995280052801528025280352804528055280652807528085280952810528115281252813528145281552816528175281852819528205282152822528235282452825528265282752828528295283052831528325283352834528355283652837528385283952840528415284252843528445284552846528475284852849528505285152852528535285452855528565285752858528595286052861528625286352864528655286652867528685286952870528715287252873528745287552876528775287852879528805288152882528835288452885528865288752888528895289052891528925289352894528955289652897528985289952900529015290252903529045290552906529075290852909529105291152912529135291452915529165291752918529195292052921529225292352924529255292652927529285292952930529315293252933529345293552936529375293852939529405294152942529435294452945529465294752948529495295052951529525295352954529555295652957529585295952960529615296252963529645296552966529675296852969529705297152972529735297452975529765297752978529795298052981529825298352984529855298652987529885298952990529915299252993529945299552996529975299852999530005300153002530035300453005530065300753008530095301053011530125301353014530155301653017530185301953020530215302253023530245302553026530275302853029530305303153032530335303453035530365303753038530395304053041530425304353044530455304653047530485304953050530515305253053530545305553056530575305853059530605306153062530635306453065530665306753068530695307053071530725307353074530755307653077530785307953080530815308253083530845308553086530875308853089530905309153092530935309453095530965309753098530995310053101531025310353104531055310653107531085310953110531115311253113531145311553116531175311853119531205312153122531235312453125531265312753128531295313053131531325313353134531355313653137531385313953140531415314253143531445314553146531475314853149531505315153152531535315453155531565315753158531595316053161531625316353164531655316653167531685316953170531715317253173531745317553176531775317853179531805318153182531835318453185531865318753188531895319053191531925319353194531955319653197531985319953200532015320253203532045320553206532075320853209532105321153212532135321453215532165321753218532195322053221532225322353224532255322653227532285322953230532315323253233532345323553236532375323853239532405324153242532435324453245532465324753248532495325053251532525325353254532555325653257532585325953260532615326253263532645326553266532675326853269532705327153272532735327453275532765327753278532795328053281532825328353284532855328653287532885328953290532915329253293532945329553296532975329853299533005330153302533035330453305533065330753308533095331053311533125331353314533155331653317533185331953320533215332253323533245332553326533275332853329533305333153332533335333453335533365333753338533395334053341533425334353344533455334653347533485334953350533515335253353533545335553356533575335853359533605336153362533635336453365533665336753368533695337053371533725337353374533755337653377533785337953380533815338253383533845338553386533875338853389533905339153392533935339453395533965339753398533995340053401534025340353404534055340653407534085340953410534115341253413534145341553416534175341853419534205342153422534235342453425534265342753428534295343053431534325343353434534355343653437534385343953440534415344253443534445344553446534475344853449534505345153452534535345453455534565345753458534595346053461534625346353464534655346653467534685346953470534715347253473534745347553476534775347853479534805348153482534835348453485534865348753488534895349053491534925349353494534955349653497534985349953500535015350253503535045350553506535075350853509535105351153512535135351453515535165351753518535195352053521535225352353524535255352653527535285352953530535315353253533535345353553536535375353853539535405354153542535435354453545535465354753548535495355053551535525355353554535555355653557535585355953560535615356253563535645356553566535675356853569535705357153572535735357453575535765357753578535795358053581535825358353584535855358653587535885358953590535915359253593535945359553596535975359853599536005360153602536035360453605536065360753608536095361053611536125361353614536155361653617536185361953620536215362253623536245362553626536275362853629536305363153632536335363453635536365363753638536395364053641536425364353644536455364653647536485364953650536515365253653536545365553656536575365853659536605366153662536635366453665536665366753668536695367053671536725367353674536755367653677536785367953680536815368253683536845368553686536875368853689536905369153692536935369453695536965369753698536995370053701537025370353704537055370653707537085370953710537115371253713537145371553716537175371853719537205372153722537235372453725537265372753728537295373053731537325373353734537355373653737537385373953740537415374253743537445374553746537475374853749537505375153752537535375453755537565375753758537595376053761537625376353764537655376653767537685376953770537715377253773537745377553776537775377853779537805378153782537835378453785537865378753788537895379053791537925379353794537955379653797537985379953800538015380253803538045380553806538075380853809538105381153812538135381453815538165381753818538195382053821538225382353824538255382653827538285382953830538315383253833538345383553836538375383853839538405384153842538435384453845538465384753848538495385053851538525385353854538555385653857538585385953860538615386253863538645386553866538675386853869538705387153872538735387453875538765387753878538795388053881538825388353884538855388653887538885388953890538915389253893538945389553896538975389853899539005390153902539035390453905539065390753908539095391053911539125391353914539155391653917539185391953920539215392253923539245392553926539275392853929539305393153932539335393453935539365393753938539395394053941539425394353944539455394653947539485394953950539515395253953539545395553956539575395853959539605396153962539635396453965539665396753968539695397053971539725397353974539755397653977539785397953980539815398253983539845398553986539875398853989539905399153992539935399453995539965399753998539995400054001540025400354004540055400654007540085400954010540115401254013540145401554016540175401854019540205402154022540235402454025540265402754028540295403054031540325403354034540355403654037540385403954040540415404254043540445404554046540475404854049540505405154052540535405454055540565405754058540595406054061540625406354064540655406654067540685406954070540715407254073540745407554076540775407854079540805408154082540835408454085540865408754088540895409054091540925409354094540955409654097540985409954100541015410254103541045410554106541075410854109541105411154112541135411454115541165411754118541195412054121541225412354124541255412654127541285412954130541315413254133541345413554136541375413854139541405414154142541435414454145541465414754148541495415054151541525415354154541555415654157541585415954160541615416254163541645416554166541675416854169541705417154172541735417454175541765417754178541795418054181541825418354184541855418654187541885418954190541915419254193541945419554196541975419854199542005420154202542035420454205542065420754208542095421054211542125421354214542155421654217542185421954220542215422254223542245422554226542275422854229542305423154232542335423454235542365423754238542395424054241542425424354244542455424654247542485424954250542515425254253542545425554256542575425854259542605426154262542635426454265542665426754268542695427054271542725427354274542755427654277542785427954280542815428254283542845428554286542875428854289542905429154292542935429454295542965429754298542995430054301543025430354304543055430654307543085430954310543115431254313543145431554316543175431854319543205432154322543235432454325543265432754328543295433054331543325433354334543355433654337543385433954340543415434254343543445434554346543475434854349543505435154352543535435454355543565435754358543595436054361543625436354364543655436654367543685436954370543715437254373543745437554376543775437854379543805438154382543835438454385543865438754388543895439054391543925439354394543955439654397543985439954400544015440254403544045440554406544075440854409544105441154412544135441454415544165441754418544195442054421544225442354424544255442654427544285442954430544315443254433544345443554436544375443854439544405444154442544435444454445544465444754448544495445054451544525445354454544555445654457544585445954460544615446254463544645446554466544675446854469544705447154472544735447454475544765447754478544795448054481544825448354484544855448654487544885448954490544915449254493544945449554496544975449854499545005450154502545035450454505545065450754508545095451054511545125451354514545155451654517545185451954520545215452254523545245452554526545275452854529545305453154532545335453454535545365453754538545395454054541545425454354544545455454654547545485454954550545515455254553545545455554556545575455854559545605456154562545635456454565545665456754568545695457054571545725457354574545755457654577545785457954580545815458254583545845458554586545875458854589545905459154592545935459454595545965459754598545995460054601546025460354604546055460654607546085460954610546115461254613546145461554616546175461854619546205462154622546235462454625546265462754628546295463054631546325463354634546355463654637546385463954640546415464254643546445464554646546475464854649546505465154652546535465454655546565465754658546595466054661546625466354664546655466654667546685466954670546715467254673546745467554676546775467854679546805468154682546835468454685546865468754688546895469054691546925469354694546955469654697546985469954700547015470254703547045470554706547075470854709547105471154712547135471454715547165471754718547195472054721547225472354724547255472654727547285472954730547315473254733547345473554736547375473854739547405474154742547435474454745547465474754748547495475054751547525475354754547555475654757547585475954760547615476254763547645476554766547675476854769547705477154772547735477454775547765477754778547795478054781547825478354784547855478654787547885478954790547915479254793547945479554796547975479854799548005480154802548035480454805548065480754808548095481054811548125481354814548155481654817548185481954820548215482254823548245482554826548275482854829548305483154832548335483454835548365483754838548395484054841548425484354844548455484654847548485484954850548515485254853548545485554856548575485854859548605486154862548635486454865548665486754868548695487054871548725487354874548755487654877548785487954880548815488254883548845488554886548875488854889548905489154892548935489454895548965489754898548995490054901549025490354904549055490654907549085490954910549115491254913549145491554916549175491854919549205492154922549235492454925549265492754928549295493054931549325493354934549355493654937549385493954940549415494254943549445494554946549475494854949549505495154952549535495454955549565495754958549595496054961549625496354964549655496654967549685496954970549715497254973549745497554976549775497854979549805498154982549835498454985549865498754988549895499054991549925499354994549955499654997549985499955000550015500255003550045500555006550075500855009550105501155012550135501455015550165501755018550195502055021550225502355024550255502655027550285502955030550315503255033550345503555036550375503855039550405504155042550435504455045550465504755048550495505055051550525505355054550555505655057550585505955060550615506255063550645506555066550675506855069550705507155072550735507455075550765507755078550795508055081550825508355084550855508655087550885508955090550915509255093550945509555096550975509855099551005510155102551035510455105551065510755108551095511055111551125511355114551155511655117551185511955120551215512255123551245512555126551275512855129551305513155132551335513455135551365513755138551395514055141551425514355144551455514655147551485514955150551515515255153551545515555156551575515855159551605516155162551635516455165551665516755168551695517055171551725517355174551755517655177551785517955180551815518255183551845518555186551875518855189551905519155192551935519455195551965519755198551995520055201552025520355204552055520655207552085520955210552115521255213552145521555216552175521855219552205522155222552235522455225552265522755228552295523055231552325523355234552355523655237552385523955240552415524255243552445524555246552475524855249552505525155252552535525455255552565525755258552595526055261552625526355264552655526655267552685526955270552715527255273552745527555276552775527855279552805528155282552835528455285552865528755288552895529055291552925529355294552955529655297552985529955300553015530255303553045530555306553075530855309553105531155312553135531455315553165531755318553195532055321553225532355324553255532655327553285532955330553315533255333553345533555336553375533855339553405534155342553435534455345553465534755348553495535055351553525535355354553555535655357553585535955360553615536255363553645536555366553675536855369553705537155372553735537455375553765537755378553795538055381553825538355384553855538655387553885538955390553915539255393553945539555396553975539855399554005540155402554035540455405554065540755408554095541055411554125541355414554155541655417554185541955420554215542255423554245542555426554275542855429554305543155432554335543455435554365543755438554395544055441554425544355444554455544655447554485544955450554515545255453554545545555456554575545855459554605546155462554635546455465554665546755468554695547055471554725547355474554755547655477554785547955480554815548255483554845548555486554875548855489554905549155492554935549455495554965549755498554995550055501555025550355504555055550655507555085550955510555115551255513555145551555516555175551855519555205552155522555235552455525555265552755528555295553055531555325553355534555355553655537555385553955540555415554255543555445554555546555475554855549555505555155552555535555455555555565555755558555595556055561555625556355564555655556655567555685556955570555715557255573555745557555576555775557855579555805558155582555835558455585555865558755588555895559055591555925559355594555955559655597555985559955600556015560255603556045560555606556075560855609556105561155612556135561455615556165561755618556195562055621556225562355624556255562655627556285562955630556315563255633556345563555636556375563855639556405564155642556435564455645556465564755648556495565055651556525565355654556555565655657556585565955660556615566255663556645566555666556675566855669556705567155672556735567455675556765567755678556795568055681556825568355684556855568655687556885568955690556915569255693556945569555696556975569855699557005570155702557035570455705557065570755708557095571055711557125571355714557155571655717557185571955720557215572255723557245572555726557275572855729557305573155732557335573455735557365573755738557395574055741557425574355744557455574655747557485574955750557515575255753557545575555756557575575855759557605576155762557635576455765557665576755768557695577055771557725577355774557755577655777557785577955780557815578255783557845578555786557875578855789557905579155792557935579455795557965579755798557995580055801558025580355804558055580655807558085580955810558115581255813558145581555816558175581855819558205582155822558235582455825558265582755828558295583055831558325583355834558355583655837558385583955840558415584255843558445584555846558475584855849558505585155852558535585455855558565585755858558595586055861558625586355864558655586655867558685586955870558715587255873558745587555876558775587855879558805588155882558835588455885558865588755888558895589055891558925589355894558955589655897558985589955900559015590255903559045590555906559075590855909559105591155912559135591455915559165591755918559195592055921559225592355924559255592655927559285592955930559315593255933559345593555936559375593855939559405594155942559435594455945559465594755948559495595055951559525595355954559555595655957559585595955960559615596255963559645596555966559675596855969559705597155972559735597455975559765597755978559795598055981559825598355984559855598655987559885598955990559915599255993559945599555996559975599855999560005600156002560035600456005560065600756008560095601056011560125601356014560155601656017560185601956020560215602256023560245602556026560275602856029560305603156032560335603456035560365603756038560395604056041560425604356044560455604656047560485604956050560515605256053560545605556056560575605856059560605606156062560635606456065560665606756068560695607056071560725607356074560755607656077560785607956080560815608256083560845608556086560875608856089560905609156092560935609456095560965609756098560995610056101561025610356104561055610656107561085610956110561115611256113561145611556116561175611856119561205612156122561235612456125561265612756128561295613056131561325613356134561355613656137561385613956140561415614256143561445614556146561475614856149561505615156152561535615456155561565615756158561595616056161561625616356164561655616656167561685616956170561715617256173561745617556176561775617856179561805618156182561835618456185561865618756188561895619056191561925619356194561955619656197561985619956200562015620256203562045620556206562075620856209562105621156212562135621456215562165621756218562195622056221562225622356224562255622656227562285622956230562315623256233562345623556236562375623856239562405624156242562435624456245562465624756248562495625056251562525625356254562555625656257562585625956260562615626256263562645626556266562675626856269562705627156272562735627456275562765627756278562795628056281562825628356284562855628656287562885628956290562915629256293562945629556296562975629856299563005630156302563035630456305563065630756308563095631056311563125631356314563155631656317563185631956320563215632256323563245632556326563275632856329563305633156332563335633456335563365633756338563395634056341563425634356344563455634656347563485634956350563515635256353563545635556356563575635856359563605636156362563635636456365563665636756368563695637056371563725637356374563755637656377563785637956380563815638256383563845638556386563875638856389563905639156392563935639456395563965639756398563995640056401564025640356404564055640656407564085640956410564115641256413564145641556416564175641856419564205642156422564235642456425564265642756428564295643056431564325643356434564355643656437564385643956440564415644256443564445644556446564475644856449564505645156452564535645456455564565645756458564595646056461564625646356464564655646656467564685646956470564715647256473564745647556476564775647856479564805648156482564835648456485564865648756488564895649056491564925649356494564955649656497564985649956500565015650256503565045650556506565075650856509565105651156512565135651456515565165651756518565195652056521565225652356524565255652656527565285652956530565315653256533565345653556536565375653856539565405654156542565435654456545565465654756548565495655056551565525655356554565555655656557565585655956560565615656256563565645656556566565675656856569565705657156572565735657456575565765657756578565795658056581565825658356584565855658656587565885658956590565915659256593565945659556596565975659856599566005660156602566035660456605566065660756608566095661056611566125661356614566155661656617566185661956620566215662256623566245662556626566275662856629566305663156632566335663456635566365663756638566395664056641566425664356644566455664656647566485664956650566515665256653566545665556656566575665856659566605666156662566635666456665566665666756668566695667056671566725667356674566755667656677566785667956680566815668256683566845668556686566875668856689566905669156692566935669456695566965669756698566995670056701567025670356704567055670656707567085670956710567115671256713567145671556716567175671856719567205672156722567235672456725567265672756728567295673056731567325673356734567355673656737567385673956740567415674256743567445674556746567475674856749567505675156752567535675456755567565675756758567595676056761567625676356764567655676656767567685676956770567715677256773567745677556776567775677856779567805678156782567835678456785567865678756788567895679056791567925679356794567955679656797567985679956800568015680256803568045680556806568075680856809568105681156812568135681456815568165681756818568195682056821568225682356824568255682656827568285682956830568315683256833568345683556836568375683856839568405684156842568435684456845568465684756848568495685056851568525685356854568555685656857568585685956860568615686256863568645686556866568675686856869568705687156872568735687456875568765687756878568795688056881568825688356884568855688656887568885688956890568915689256893568945689556896568975689856899569005690156902569035690456905569065690756908569095691056911569125691356914569155691656917569185691956920569215692256923569245692556926569275692856929569305693156932569335693456935569365693756938569395694056941569425694356944569455694656947569485694956950569515695256953569545695556956569575695856959569605696156962569635696456965569665696756968569695697056971569725697356974569755697656977569785697956980569815698256983569845698556986569875698856989569905699156992569935699456995569965699756998569995700057001570025700357004570055700657007570085700957010570115701257013570145701557016570175701857019570205702157022570235702457025570265702757028570295703057031570325703357034570355703657037570385703957040570415704257043570445704557046570475704857049570505705157052570535705457055570565705757058570595706057061570625706357064570655706657067570685706957070570715707257073570745707557076570775707857079570805708157082570835708457085570865708757088570895709057091570925709357094570955709657097570985709957100571015710257103571045710557106571075710857109571105711157112571135711457115571165711757118571195712057121571225712357124571255712657127571285712957130571315713257133571345713557136571375713857139571405714157142571435714457145571465714757148571495715057151571525715357154571555715657157571585715957160571615716257163571645716557166571675716857169571705717157172571735717457175571765717757178571795718057181571825718357184571855718657187571885718957190571915719257193571945719557196571975719857199572005720157202572035720457205572065720757208572095721057211572125721357214572155721657217572185721957220572215722257223572245722557226572275722857229572305723157232572335723457235572365723757238572395724057241572425724357244572455724657247572485724957250572515725257253572545725557256572575725857259572605726157262572635726457265572665726757268572695727057271572725727357274572755727657277572785727957280572815728257283572845728557286572875728857289572905729157292572935729457295572965729757298572995730057301573025730357304573055730657307573085730957310573115731257313573145731557316573175731857319573205732157322573235732457325573265732757328573295733057331573325733357334573355733657337573385733957340573415734257343573445734557346573475734857349573505735157352573535735457355573565735757358573595736057361573625736357364573655736657367573685736957370573715737257373573745737557376573775737857379573805738157382573835738457385573865738757388573895739057391573925739357394573955739657397573985739957400574015740257403574045740557406574075740857409574105741157412574135741457415574165741757418574195742057421574225742357424574255742657427574285742957430574315743257433574345743557436574375743857439574405744157442574435744457445574465744757448574495745057451574525745357454574555745657457574585745957460574615746257463574645746557466574675746857469574705747157472574735747457475574765747757478574795748057481574825748357484574855748657487574885748957490574915749257493574945749557496574975749857499575005750157502575035750457505575065750757508575095751057511575125751357514575155751657517575185751957520575215752257523575245752557526575275752857529575305753157532575335753457535575365753757538575395754057541575425754357544575455754657547575485754957550575515755257553575545755557556575575755857559575605756157562575635756457565575665756757568575695757057571575725757357574575755757657577575785757957580575815758257583575845758557586575875758857589575905759157592575935759457595575965759757598575995760057601576025760357604576055760657607576085760957610576115761257613576145761557616576175761857619576205762157622576235762457625576265762757628576295763057631576325763357634576355763657637576385763957640576415764257643576445764557646576475764857649576505765157652576535765457655576565765757658576595766057661576625766357664576655766657667576685766957670576715767257673576745767557676576775767857679576805768157682576835768457685576865768757688576895769057691576925769357694576955769657697576985769957700577015770257703577045770557706577075770857709577105771157712577135771457715577165771757718577195772057721577225772357724577255772657727577285772957730577315773257733577345773557736577375773857739577405774157742577435774457745577465774757748577495775057751577525775357754577555775657757577585775957760577615776257763577645776557766577675776857769577705777157772577735777457775577765777757778577795778057781577825778357784577855778657787577885778957790577915779257793577945779557796577975779857799578005780157802578035780457805578065780757808578095781057811578125781357814578155781657817578185781957820578215782257823578245782557826578275782857829578305783157832578335783457835578365783757838578395784057841578425784357844578455784657847578485784957850578515785257853578545785557856578575785857859578605786157862578635786457865578665786757868578695787057871578725787357874578755787657877578785787957880578815788257883578845788557886578875788857889578905789157892578935789457895578965789757898578995790057901579025790357904579055790657907579085790957910579115791257913579145791557916579175791857919579205792157922579235792457925579265792757928579295793057931579325793357934579355793657937579385793957940579415794257943579445794557946579475794857949579505795157952579535795457955579565795757958579595796057961579625796357964579655796657967579685796957970579715797257973579745797557976579775797857979579805798157982579835798457985579865798757988579895799057991579925799357994579955799657997579985799958000580015800258003580045800558006580075800858009580105801158012580135801458015580165801758018580195802058021580225802358024580255802658027580285802958030580315803258033580345803558036580375803858039580405804158042580435804458045580465804758048580495805058051580525805358054580555805658057580585805958060580615806258063580645806558066580675806858069580705807158072580735807458075580765807758078580795808058081580825808358084580855808658087580885808958090580915809258093580945809558096580975809858099581005810158102581035810458105581065810758108581095811058111581125811358114581155811658117581185811958120581215812258123581245812558126581275812858129581305813158132581335813458135581365813758138581395814058141581425814358144581455814658147581485814958150581515815258153581545815558156581575815858159581605816158162581635816458165581665816758168581695817058171581725817358174581755817658177581785817958180581815818258183581845818558186581875818858189581905819158192581935819458195581965819758198581995820058201582025820358204582055820658207582085820958210582115821258213582145821558216582175821858219582205822158222582235822458225582265822758228582295823058231582325823358234582355823658237582385823958240582415824258243582445824558246582475824858249582505825158252582535825458255582565825758258582595826058261582625826358264582655826658267582685826958270582715827258273582745827558276582775827858279582805828158282582835828458285582865828758288582895829058291582925829358294582955829658297582985829958300583015830258303583045830558306583075830858309583105831158312583135831458315583165831758318583195832058321583225832358324583255832658327583285832958330583315833258333583345833558336583375833858339583405834158342583435834458345583465834758348583495835058351583525835358354583555835658357583585835958360583615836258363583645836558366583675836858369583705837158372583735837458375583765837758378583795838058381583825838358384583855838658387583885838958390583915839258393583945839558396583975839858399584005840158402584035840458405584065840758408584095841058411584125841358414584155841658417584185841958420584215842258423584245842558426584275842858429584305843158432584335843458435584365843758438584395844058441584425844358444584455844658447584485844958450584515845258453584545845558456584575845858459584605846158462584635846458465584665846758468584695847058471584725847358474584755847658477584785847958480584815848258483584845848558486584875848858489584905849158492584935849458495584965849758498584995850058501585025850358504585055850658507585085850958510585115851258513585145851558516585175851858519585205852158522585235852458525585265852758528585295853058531585325853358534585355853658537585385853958540585415854258543585445854558546585475854858549585505855158552585535855458555585565855758558585595856058561585625856358564585655856658567585685856958570585715857258573585745857558576585775857858579585805858158582585835858458585585865858758588585895859058591585925859358594585955859658597585985859958600586015860258603586045860558606586075860858609586105861158612586135861458615586165861758618586195862058621586225862358624586255862658627586285862958630586315863258633586345863558636586375863858639586405864158642586435864458645586465864758648586495865058651586525865358654586555865658657586585865958660586615866258663586645866558666586675866858669586705867158672586735867458675586765867758678586795868058681586825868358684586855868658687586885868958690586915869258693586945869558696586975869858699587005870158702587035870458705587065870758708587095871058711587125871358714587155871658717587185871958720587215872258723587245872558726587275872858729587305873158732587335873458735587365873758738587395874058741587425874358744587455874658747587485874958750587515875258753587545875558756587575875858759587605876158762587635876458765587665876758768587695877058771587725877358774587755877658777587785877958780587815878258783587845878558786587875878858789587905879158792587935879458795587965879758798587995880058801588025880358804588055880658807588085880958810588115881258813588145881558816588175881858819588205882158822588235882458825588265882758828588295883058831588325883358834588355883658837588385883958840588415884258843588445884558846588475884858849588505885158852588535885458855588565885758858588595886058861588625886358864588655886658867588685886958870588715887258873588745887558876588775887858879588805888158882588835888458885588865888758888588895889058891588925889358894588955889658897588985889958900589015890258903589045890558906589075890858909589105891158912589135891458915589165891758918589195892058921589225892358924589255892658927589285892958930589315893258933589345893558936589375893858939589405894158942589435894458945589465894758948589495895058951589525895358954589555895658957589585895958960589615896258963589645896558966589675896858969589705897158972589735897458975589765897758978589795898058981589825898358984589855898658987589885898958990589915899258993589945899558996589975899858999590005900159002590035900459005590065900759008590095901059011590125901359014590155901659017590185901959020590215902259023590245902559026590275902859029590305903159032590335903459035590365903759038590395904059041590425904359044590455904659047590485904959050590515905259053590545905559056590575905859059590605906159062590635906459065590665906759068590695907059071590725907359074590755907659077590785907959080590815908259083590845908559086590875908859089590905909159092590935909459095590965909759098590995910059101591025910359104591055910659107591085910959110591115911259113591145911559116591175911859119591205912159122591235912459125591265912759128591295913059131591325913359134591355913659137591385913959140591415914259143591445914559146591475914859149591505915159152591535915459155591565915759158591595916059161591625916359164591655916659167591685916959170591715917259173591745917559176591775917859179591805918159182591835918459185591865918759188591895919059191591925919359194591955919659197591985919959200592015920259203592045920559206592075920859209592105921159212592135921459215592165921759218592195922059221592225922359224592255922659227592285922959230592315923259233592345923559236592375923859239592405924159242592435924459245592465924759248592495925059251592525925359254592555925659257592585925959260592615926259263592645926559266592675926859269592705927159272592735927459275592765927759278592795928059281592825928359284592855928659287592885928959290592915929259293592945929559296592975929859299593005930159302593035930459305593065930759308593095931059311593125931359314593155931659317593185931959320593215932259323593245932559326593275932859329593305933159332593335933459335593365933759338593395934059341593425934359344593455934659347593485934959350593515935259353593545935559356593575935859359593605936159362593635936459365593665936759368593695937059371593725937359374593755937659377593785937959380593815938259383593845938559386593875938859389593905939159392593935939459395593965939759398593995940059401594025940359404594055940659407594085940959410594115941259413594145941559416594175941859419594205942159422594235942459425594265942759428594295943059431594325943359434594355943659437594385943959440594415944259443594445944559446594475944859449594505945159452594535945459455594565945759458594595946059461594625946359464594655946659467594685946959470594715947259473594745947559476594775947859479594805948159482594835948459485594865948759488594895949059491594925949359494594955949659497594985949959500595015950259503595045950559506595075950859509595105951159512595135951459515595165951759518595195952059521595225952359524595255952659527595285952959530595315953259533595345953559536595375953859539595405954159542595435954459545595465954759548595495955059551595525955359554595555955659557595585955959560595615956259563595645956559566595675956859569595705957159572595735957459575595765957759578595795958059581595825958359584595855958659587595885958959590595915959259593595945959559596595975959859599596005960159602596035960459605596065960759608596095961059611596125961359614596155961659617596185961959620596215962259623596245962559626596275962859629596305963159632596335963459635596365963759638596395964059641596425964359644596455964659647596485964959650596515965259653596545965559656596575965859659596605966159662596635966459665596665966759668596695967059671596725967359674596755967659677596785967959680596815968259683596845968559686596875968859689596905969159692596935969459695596965969759698596995970059701597025970359704597055970659707597085970959710597115971259713597145971559716597175971859719597205972159722597235972459725597265972759728597295973059731597325973359734597355973659737597385973959740597415974259743597445974559746597475974859749597505975159752597535975459755597565975759758597595976059761597625976359764597655976659767597685976959770597715977259773597745977559776597775977859779597805978159782597835978459785597865978759788597895979059791597925979359794597955979659797597985979959800598015980259803598045980559806598075980859809598105981159812598135981459815598165981759818598195982059821598225982359824598255982659827598285982959830598315983259833598345983559836598375983859839598405984159842598435984459845598465984759848598495985059851598525985359854598555985659857598585985959860598615986259863598645986559866598675986859869598705987159872598735987459875598765987759878598795988059881598825988359884598855988659887598885988959890598915989259893598945989559896598975989859899599005990159902599035990459905599065990759908599095991059911599125991359914599155991659917599185991959920599215992259923599245992559926599275992859929599305993159932599335993459935599365993759938599395994059941599425994359944599455994659947599485994959950599515995259953599545995559956599575995859959599605996159962599635996459965599665996759968599695997059971599725997359974599755997659977599785997959980599815998259983599845998559986599875998859989599905999159992599935999459995599965999759998599996000060001600026000360004600056000660007600086000960010600116001260013600146001560016600176001860019600206002160022600236002460025600266002760028600296003060031600326003360034600356003660037600386003960040600416004260043600446004560046600476004860049600506005160052600536005460055600566005760058600596006060061600626006360064600656006660067600686006960070600716007260073600746007560076600776007860079600806008160082600836008460085600866008760088600896009060091600926009360094600956009660097600986009960100601016010260103601046010560106601076010860109601106011160112601136011460115601166011760118601196012060121601226012360124601256012660127601286012960130601316013260133601346013560136601376013860139601406014160142601436014460145601466014760148601496015060151601526015360154601556015660157601586015960160601616016260163601646016560166601676016860169601706017160172601736017460175601766017760178601796018060181601826018360184601856018660187601886018960190601916019260193601946019560196601976019860199602006020160202602036020460205602066020760208602096021060211602126021360214602156021660217602186021960220602216022260223602246022560226602276022860229602306023160232602336023460235602366023760238602396024060241602426024360244602456024660247602486024960250602516025260253602546025560256602576025860259602606026160262602636026460265602666026760268602696027060271602726027360274602756027660277602786027960280602816028260283602846028560286602876028860289602906029160292602936029460295602966029760298602996030060301603026030360304603056030660307603086030960310603116031260313603146031560316603176031860319603206032160322603236032460325603266032760328603296033060331603326033360334603356033660337603386033960340603416034260343603446034560346603476034860349603506035160352603536035460355603566035760358603596036060361603626036360364603656036660367603686036960370603716037260373603746037560376603776037860379603806038160382603836038460385603866038760388603896039060391603926039360394603956039660397603986039960400604016040260403604046040560406604076040860409604106041160412604136041460415604166041760418604196042060421604226042360424604256042660427604286042960430604316043260433604346043560436604376043860439604406044160442604436044460445604466044760448604496045060451604526045360454604556045660457604586045960460604616046260463604646046560466604676046860469604706047160472604736047460475604766047760478604796048060481604826048360484604856048660487604886048960490604916049260493604946049560496604976049860499605006050160502605036050460505605066050760508605096051060511605126051360514605156051660517605186051960520605216052260523605246052560526605276052860529605306053160532605336053460535605366053760538605396054060541605426054360544605456054660547605486054960550605516055260553605546055560556605576055860559605606056160562605636056460565605666056760568605696057060571605726057360574605756057660577605786057960580605816058260583605846058560586605876058860589605906059160592605936059460595605966059760598605996060060601606026060360604606056060660607606086060960610606116061260613606146061560616606176061860619606206062160622606236062460625606266062760628606296063060631606326063360634606356063660637606386063960640606416064260643606446064560646606476064860649606506065160652606536065460655606566065760658606596066060661606626066360664606656066660667606686066960670606716067260673606746067560676606776067860679606806068160682606836068460685606866068760688606896069060691606926069360694606956069660697606986069960700607016070260703607046070560706607076070860709607106071160712607136071460715607166071760718607196072060721607226072360724607256072660727607286072960730607316073260733607346073560736607376073860739607406074160742607436074460745607466074760748607496075060751607526075360754607556075660757607586075960760607616076260763607646076560766607676076860769607706077160772607736077460775607766077760778607796078060781607826078360784607856078660787607886078960790607916079260793607946079560796607976079860799608006080160802608036080460805608066080760808608096081060811608126081360814608156081660817608186081960820608216082260823608246082560826608276082860829608306083160832608336083460835608366083760838608396084060841608426084360844608456084660847608486084960850608516085260853608546085560856608576085860859608606086160862608636086460865608666086760868608696087060871608726087360874608756087660877608786087960880608816088260883608846088560886608876088860889608906089160892608936089460895608966089760898608996090060901609026090360904609056090660907609086090960910609116091260913609146091560916609176091860919609206092160922609236092460925609266092760928609296093060931609326093360934609356093660937609386093960940609416094260943609446094560946609476094860949609506095160952609536095460955609566095760958609596096060961609626096360964609656096660967609686096960970609716097260973609746097560976609776097860979609806098160982609836098460985609866098760988609896099060991609926099360994609956099660997609986099961000610016100261003610046100561006610076100861009610106101161012610136101461015610166101761018610196102061021610226102361024610256102661027610286102961030610316103261033610346103561036610376103861039610406104161042610436104461045610466104761048610496105061051610526105361054610556105661057610586105961060610616106261063610646106561066610676106861069610706107161072610736107461075610766107761078610796108061081610826108361084610856108661087610886108961090610916109261093610946109561096610976109861099611006110161102611036110461105611066110761108611096111061111611126111361114611156111661117611186111961120611216112261123611246112561126611276112861129611306113161132611336113461135611366113761138611396114061141611426114361144611456114661147611486114961150611516115261153611546115561156611576115861159611606116161162611636116461165611666116761168611696117061171611726117361174611756117661177611786117961180611816118261183611846118561186611876118861189611906119161192611936119461195611966119761198611996120061201612026120361204612056120661207612086120961210612116121261213612146121561216612176121861219612206122161222612236122461225612266122761228612296123061231612326123361234612356123661237612386123961240612416124261243612446124561246612476124861249612506125161252612536125461255612566125761258612596126061261612626126361264612656126661267612686126961270612716127261273612746127561276612776127861279612806128161282612836128461285612866128761288612896129061291612926129361294612956129661297612986129961300613016130261303613046130561306613076130861309613106131161312613136131461315613166131761318613196132061321613226132361324613256132661327613286132961330613316133261333613346133561336613376133861339613406134161342613436134461345613466134761348613496135061351613526135361354613556135661357613586135961360613616136261363613646136561366613676136861369613706137161372613736137461375613766137761378613796138061381613826138361384613856138661387613886138961390613916139261393613946139561396613976139861399614006140161402614036140461405614066140761408614096141061411614126141361414614156141661417614186141961420614216142261423614246142561426614276142861429614306143161432614336143461435614366143761438614396144061441614426144361444614456144661447614486144961450614516145261453614546145561456614576145861459614606146161462614636146461465614666146761468614696147061471614726147361474614756147661477614786147961480614816148261483614846148561486614876148861489614906149161492614936149461495614966149761498614996150061501615026150361504615056150661507615086150961510615116151261513615146151561516615176151861519615206152161522615236152461525615266152761528615296153061531615326153361534615356153661537615386153961540615416154261543615446154561546615476154861549615506155161552615536155461555615566155761558615596156061561615626156361564615656156661567615686156961570615716157261573615746157561576615776157861579615806158161582615836158461585615866158761588615896159061591615926159361594615956159661597615986159961600616016160261603616046160561606616076160861609616106161161612616136161461615616166161761618616196162061621616226162361624616256162661627616286162961630616316163261633616346163561636616376163861639616406164161642616436164461645616466164761648616496165061651616526165361654616556165661657616586165961660616616166261663616646166561666616676166861669616706167161672616736167461675616766167761678616796168061681616826168361684616856168661687616886168961690616916169261693616946169561696616976169861699617006170161702617036170461705617066170761708617096171061711617126171361714617156171661717617186171961720617216172261723617246172561726617276172861729617306173161732617336173461735617366173761738617396174061741617426174361744617456174661747617486174961750617516175261753617546175561756617576175861759617606176161762617636176461765617666176761768617696177061771617726177361774617756177661777617786177961780617816178261783617846178561786617876178861789617906179161792617936179461795617966179761798617996180061801618026180361804618056180661807618086180961810618116181261813618146181561816618176181861819618206182161822618236182461825618266182761828618296183061831618326183361834618356183661837618386183961840618416184261843618446184561846618476184861849618506185161852618536185461855618566185761858618596186061861618626186361864618656186661867618686186961870618716187261873618746187561876618776187861879618806188161882618836188461885618866188761888618896189061891618926189361894618956189661897618986189961900619016190261903619046190561906619076190861909619106191161912619136191461915619166191761918619196192061921619226192361924619256192661927619286192961930619316193261933619346193561936619376193861939619406194161942619436194461945619466194761948619496195061951619526195361954619556195661957619586195961960619616196261963619646196561966619676196861969619706197161972619736197461975619766197761978619796198061981619826198361984619856198661987619886198961990619916199261993619946199561996619976199861999620006200162002620036200462005620066200762008620096201062011620126201362014620156201662017620186201962020620216202262023620246202562026620276202862029620306203162032620336203462035620366203762038620396204062041620426204362044620456204662047620486204962050620516205262053620546205562056620576205862059620606206162062620636206462065620666206762068620696207062071620726207362074620756207662077620786207962080620816208262083620846208562086620876208862089620906209162092620936209462095620966209762098620996210062101621026210362104621056210662107621086210962110621116211262113621146211562116621176211862119621206212162122621236212462125621266212762128621296213062131621326213362134621356213662137621386213962140621416214262143621446214562146621476214862149621506215162152621536215462155621566215762158621596216062161621626216362164621656216662167621686216962170621716217262173621746217562176621776217862179621806218162182621836218462185621866218762188621896219062191621926219362194621956219662197621986219962200622016220262203622046220562206622076220862209622106221162212622136221462215622166221762218622196222062221622226222362224622256222662227622286222962230622316223262233622346223562236622376223862239622406224162242622436224462245622466224762248622496225062251622526225362254622556225662257622586225962260622616226262263622646226562266622676226862269622706227162272622736227462275622766227762278622796228062281622826228362284622856228662287622886228962290622916229262293622946229562296622976229862299623006230162302623036230462305623066230762308623096231062311623126231362314623156231662317623186231962320623216232262323623246232562326623276232862329623306233162332623336233462335623366233762338623396234062341623426234362344623456234662347623486234962350623516235262353623546235562356623576235862359623606236162362623636236462365623666236762368623696237062371623726237362374623756237662377623786237962380623816238262383623846238562386623876238862389623906239162392623936239462395623966239762398623996240062401624026240362404624056240662407624086240962410624116241262413624146241562416624176241862419624206242162422624236242462425624266242762428624296243062431624326243362434624356243662437624386243962440624416244262443624446244562446624476244862449624506245162452624536245462455624566245762458624596246062461624626246362464624656246662467624686246962470624716247262473624746247562476624776247862479624806248162482624836248462485624866248762488624896249062491624926249362494624956249662497624986249962500625016250262503625046250562506625076250862509625106251162512625136251462515625166251762518625196252062521625226252362524625256252662527625286252962530625316253262533625346253562536625376253862539625406254162542625436254462545625466254762548625496255062551625526255362554625556255662557625586255962560625616256262563625646256562566625676256862569625706257162572625736257462575625766257762578625796258062581625826258362584625856258662587625886258962590625916259262593625946259562596625976259862599626006260162602626036260462605626066260762608626096261062611626126261362614626156261662617626186261962620626216262262623626246262562626626276262862629626306263162632626336263462635626366263762638626396264062641626426264362644626456264662647626486264962650626516265262653626546265562656626576265862659626606266162662626636266462665626666266762668626696267062671626726267362674626756267662677626786267962680626816268262683626846268562686626876268862689626906269162692626936269462695626966269762698626996270062701627026270362704627056270662707627086270962710627116271262713627146271562716627176271862719627206272162722627236272462725627266272762728627296273062731627326273362734627356273662737627386273962740627416274262743627446274562746627476274862749627506275162752627536275462755627566275762758627596276062761627626276362764627656276662767627686276962770627716277262773627746277562776627776277862779627806278162782627836278462785627866278762788627896279062791627926279362794627956279662797627986279962800628016280262803628046280562806628076280862809628106281162812628136281462815628166281762818628196282062821628226282362824628256282662827628286282962830628316283262833628346283562836628376283862839628406284162842628436284462845628466284762848628496285062851628526285362854628556285662857628586285962860628616286262863628646286562866628676286862869628706287162872628736287462875628766287762878628796288062881628826288362884628856288662887628886288962890628916289262893628946289562896628976289862899629006290162902629036290462905629066290762908629096291062911629126291362914629156291662917629186291962920629216292262923629246292562926629276292862929629306293162932629336293462935629366293762938629396294062941629426294362944629456294662947629486294962950629516295262953629546295562956629576295862959629606296162962629636296462965629666296762968629696297062971629726297362974629756297662977629786297962980629816298262983629846298562986629876298862989629906299162992629936299462995629966299762998629996300063001630026300363004630056300663007630086300963010630116301263013630146301563016630176301863019630206302163022630236302463025630266302763028630296303063031630326303363034630356303663037630386303963040630416304263043630446304563046630476304863049630506305163052630536305463055630566305763058630596306063061630626306363064630656306663067630686306963070630716307263073630746307563076630776307863079630806308163082630836308463085630866308763088630896309063091630926309363094630956309663097630986309963100631016310263103631046310563106631076310863109631106311163112631136311463115631166311763118631196312063121631226312363124631256312663127631286312963130631316313263133631346313563136631376313863139631406314163142631436314463145631466314763148631496315063151631526315363154631556315663157631586315963160631616316263163631646316563166631676316863169631706317163172631736317463175631766317763178631796318063181631826318363184631856318663187631886318963190631916319263193631946319563196631976319863199632006320163202632036320463205632066320763208632096321063211632126321363214632156321663217632186321963220632216322263223632246322563226632276322863229632306323163232632336323463235632366323763238632396324063241632426324363244632456324663247632486324963250632516325263253632546325563256632576325863259632606326163262632636326463265632666326763268632696327063271632726327363274632756327663277632786327963280632816328263283632846328563286632876328863289632906329163292632936329463295632966329763298632996330063301633026330363304633056330663307633086330963310633116331263313633146331563316633176331863319633206332163322633236332463325633266332763328633296333063331633326333363334633356333663337633386333963340633416334263343633446334563346633476334863349633506335163352633536335463355633566335763358633596336063361633626336363364633656336663367633686336963370633716337263373633746337563376633776337863379633806338163382633836338463385633866338763388633896339063391633926339363394633956339663397633986339963400634016340263403634046340563406634076340863409634106341163412634136341463415634166341763418634196342063421634226342363424634256342663427634286342963430634316343263433634346343563436634376343863439634406344163442634436344463445634466344763448634496345063451634526345363454634556345663457634586345963460634616346263463634646346563466634676346863469634706347163472634736347463475634766347763478634796348063481634826348363484634856348663487634886348963490634916349263493634946349563496634976349863499635006350163502635036350463505635066350763508635096351063511635126351363514635156351663517635186351963520635216352263523635246352563526635276352863529635306353163532635336353463535635366353763538635396354063541635426354363544635456354663547635486354963550635516355263553635546355563556635576355863559635606356163562635636356463565635666356763568635696357063571635726357363574635756357663577635786357963580635816358263583635846358563586635876358863589635906359163592635936359463595635966359763598635996360063601636026360363604636056360663607636086360963610636116361263613636146361563616636176361863619636206362163622636236362463625636266362763628636296363063631636326363363634636356363663637636386363963640636416364263643636446364563646636476364863649636506365163652636536365463655636566365763658636596366063661636626366363664636656366663667636686366963670636716367263673636746367563676636776367863679636806368163682636836368463685636866368763688636896369063691636926369363694636956369663697636986369963700637016370263703637046370563706637076370863709637106371163712637136371463715637166371763718637196372063721637226372363724637256372663727637286372963730637316373263733637346373563736637376373863739637406374163742637436374463745637466374763748637496375063751637526375363754637556375663757637586375963760637616376263763637646376563766637676376863769637706377163772637736377463775637766377763778637796378063781637826378363784637856378663787637886378963790637916379263793637946379563796637976379863799638006380163802638036380463805638066380763808638096381063811638126381363814638156381663817638186381963820638216382263823638246382563826638276382863829638306383163832638336383463835638366383763838638396384063841638426384363844638456384663847638486384963850638516385263853638546385563856638576385863859638606386163862638636386463865638666386763868638696387063871638726387363874638756387663877638786387963880638816388263883638846388563886638876388863889638906389163892638936389463895638966389763898638996390063901639026390363904639056390663907639086390963910639116391263913639146391563916639176391863919639206392163922639236392463925639266392763928639296393063931639326393363934639356393663937639386393963940639416394263943639446394563946639476394863949639506395163952639536395463955639566395763958639596396063961639626396363964639656396663967639686396963970639716397263973639746397563976639776397863979639806398163982639836398463985639866398763988639896399063991639926399363994639956399663997639986399964000640016400264003640046400564006640076400864009640106401164012640136401464015640166401764018640196402064021640226402364024640256402664027640286402964030640316403264033640346403564036640376403864039640406404164042640436404464045640466404764048640496405064051640526405364054640556405664057640586405964060640616406264063640646406564066640676406864069640706407164072640736407464075640766407764078640796408064081640826408364084640856408664087640886408964090640916409264093640946409564096640976409864099641006410164102641036410464105641066410764108641096411064111641126411364114641156411664117641186411964120641216412264123641246412564126641276412864129641306413164132641336413464135641366413764138641396414064141641426414364144641456414664147641486414964150641516415264153641546415564156641576415864159641606416164162641636416464165641666416764168641696417064171641726417364174641756417664177641786417964180641816418264183641846418564186641876418864189641906419164192641936419464195641966419764198641996420064201642026420364204642056420664207642086420964210642116421264213642146421564216642176421864219642206422164222642236422464225642266422764228642296423064231642326423364234642356423664237642386423964240642416424264243642446424564246642476424864249642506425164252642536425464255642566425764258642596426064261642626426364264642656426664267642686426964270642716427264273642746427564276642776427864279642806428164282642836428464285642866428764288642896429064291642926429364294642956429664297642986429964300643016430264303643046430564306643076430864309643106431164312643136431464315643166431764318643196432064321643226432364324643256432664327643286432964330643316433264333643346433564336643376433864339643406434164342643436434464345643466434764348643496435064351643526435364354643556435664357643586435964360643616436264363643646436564366643676436864369643706437164372643736437464375643766437764378643796438064381643826438364384643856438664387643886438964390643916439264393643946439564396643976439864399644006440164402644036440464405644066440764408644096441064411644126441364414644156441664417644186441964420644216442264423644246442564426644276442864429644306443164432644336443464435644366443764438644396444064441644426444364444644456444664447644486444964450644516445264453644546445564456644576445864459644606446164462644636446464465644666446764468644696447064471644726447364474644756447664477644786447964480644816448264483644846448564486644876448864489644906449164492644936449464495644966449764498644996450064501645026450364504645056450664507645086450964510645116451264513645146451564516645176451864519645206452164522645236452464525645266452764528645296453064531645326453364534645356453664537645386453964540645416454264543645446454564546645476454864549645506455164552645536455464555645566455764558645596456064561645626456364564645656456664567645686456964570645716457264573645746457564576645776457864579645806458164582645836458464585645866458764588645896459064591645926459364594645956459664597645986459964600646016460264603646046460564606646076460864609646106461164612646136461464615646166461764618646196462064621646226462364624646256462664627646286462964630646316463264633646346463564636646376463864639646406464164642646436464464645646466464764648646496465064651646526465364654646556465664657646586465964660646616466264663646646466564666646676466864669646706467164672646736467464675646766467764678646796468064681646826468364684646856468664687646886468964690646916469264693646946469564696646976469864699647006470164702647036470464705647066470764708647096471064711647126471364714647156471664717647186471964720647216472264723647246472564726647276472864729647306473164732647336473464735647366473764738647396474064741647426474364744647456474664747647486474964750647516475264753647546475564756647576475864759647606476164762647636476464765647666476764768647696477064771647726477364774647756477664777647786477964780647816478264783647846478564786647876478864789647906479164792647936479464795647966479764798647996480064801648026480364804648056480664807648086480964810648116481264813648146481564816648176481864819648206482164822648236482464825648266482764828648296483064831648326483364834648356483664837648386483964840648416484264843648446484564846648476484864849648506485164852648536485464855648566485764858648596486064861648626486364864648656486664867648686486964870648716487264873648746487564876648776487864879648806488164882648836488464885648866488764888648896489064891648926489364894648956489664897648986489964900649016490264903649046490564906649076490864909649106491164912649136491464915649166491764918649196492064921649226492364924649256492664927649286492964930649316493264933649346493564936649376493864939649406494164942649436494464945649466494764948649496495064951649526495364954649556495664957649586495964960649616496264963649646496564966649676496864969649706497164972649736497464975649766497764978649796498064981649826498364984649856498664987649886498964990649916499264993649946499564996649976499864999650006500165002650036500465005650066500765008650096501065011650126501365014650156501665017650186501965020650216502265023650246502565026650276502865029650306503165032650336503465035650366503765038650396504065041650426504365044650456504665047650486504965050650516505265053650546505565056650576505865059650606506165062650636506465065650666506765068650696507065071650726507365074650756507665077650786507965080650816508265083650846508565086650876508865089650906509165092650936509465095650966509765098650996510065101651026510365104651056510665107651086510965110651116511265113651146511565116651176511865119651206512165122651236512465125651266512765128651296513065131651326513365134651356513665137651386513965140651416514265143651446514565146651476514865149651506515165152651536515465155651566515765158651596516065161651626516365164651656516665167651686516965170651716517265173651746517565176651776517865179651806518165182651836518465185651866518765188651896519065191651926519365194651956519665197651986519965200652016520265203652046520565206652076520865209652106521165212652136521465215652166521765218652196522065221652226522365224652256522665227652286522965230652316523265233652346523565236652376523865239652406524165242652436524465245652466524765248652496525065251652526525365254652556525665257652586525965260652616526265263652646526565266652676526865269652706527165272652736527465275652766527765278652796528065281652826528365284652856528665287652886528965290652916529265293652946529565296652976529865299653006530165302653036530465305653066530765308653096531065311653126531365314653156531665317653186531965320653216532265323653246532565326653276532865329653306533165332653336533465335653366533765338653396534065341653426534365344653456534665347653486534965350653516535265353653546535565356653576535865359653606536165362653636536465365653666536765368653696537065371653726537365374653756537665377653786537965380653816538265383653846538565386653876538865389653906539165392653936539465395653966539765398653996540065401654026540365404654056540665407654086540965410654116541265413654146541565416654176541865419654206542165422654236542465425654266542765428654296543065431654326543365434654356543665437654386543965440654416544265443654446544565446654476544865449654506545165452654536545465455654566545765458654596546065461654626546365464654656546665467654686546965470654716547265473654746547565476654776547865479654806548165482654836548465485654866548765488654896549065491654926549365494654956549665497654986549965500655016550265503655046550565506655076550865509655106551165512655136551465515655166551765518655196552065521655226552365524655256552665527655286552965530655316553265533655346553565536655376553865539655406554165542655436554465545655466554765548655496555065551655526555365554655556555665557655586555965560655616556265563655646556565566655676556865569655706557165572655736557465575655766557765578655796558065581655826558365584655856558665587655886558965590655916559265593655946559565596655976559865599656006560165602656036560465605656066560765608656096561065611656126561365614656156561665617656186561965620656216562265623656246562565626656276562865629656306563165632656336563465635656366563765638656396564065641656426564365644656456564665647656486564965650656516565265653656546565565656656576565865659656606566165662656636566465665656666566765668656696567065671656726567365674656756567665677656786567965680656816568265683656846568565686656876568865689656906569165692656936569465695656966569765698656996570065701657026570365704657056570665707657086570965710657116571265713657146571565716657176571865719657206572165722657236572465725657266572765728657296573065731657326573365734657356573665737657386573965740657416574265743657446574565746657476574865749657506575165752657536575465755657566575765758657596576065761657626576365764657656576665767657686576965770657716577265773657746577565776657776577865779657806578165782657836578465785657866578765788657896579065791657926579365794657956579665797657986579965800658016580265803658046580565806658076580865809658106581165812658136581465815658166581765818658196582065821658226582365824658256582665827658286582965830658316583265833658346583565836658376583865839658406584165842658436584465845658466584765848658496585065851658526585365854658556585665857658586585965860658616586265863658646586565866658676586865869658706587165872658736587465875658766587765878658796588065881658826588365884658856588665887658886588965890658916589265893658946589565896658976589865899659006590165902659036590465905659066590765908659096591065911659126591365914659156591665917659186591965920659216592265923659246592565926659276592865929659306593165932659336593465935659366593765938659396594065941659426594365944659456594665947659486594965950659516595265953659546595565956659576595865959659606596165962659636596465965659666596765968659696597065971659726597365974659756597665977659786597965980659816598265983659846598565986659876598865989659906599165992659936599465995659966599765998659996600066001660026600366004660056600666007660086600966010660116601266013660146601566016660176601866019660206602166022660236602466025660266602766028660296603066031660326603366034660356603666037660386603966040660416604266043660446604566046660476604866049660506605166052660536605466055660566605766058660596606066061660626606366064660656606666067660686606966070660716607266073660746607566076660776607866079660806608166082660836608466085660866608766088660896609066091660926609366094660956609666097660986609966100661016610266103661046610566106661076610866109661106611166112661136611466115661166611766118661196612066121661226612366124661256612666127661286612966130661316613266133661346613566136661376613866139661406614166142661436614466145661466614766148661496615066151661526615366154661556615666157661586615966160661616616266163661646616566166661676616866169661706617166172661736617466175661766617766178661796618066181661826618366184661856618666187661886618966190661916619266193661946619566196661976619866199662006620166202662036620466205662066620766208662096621066211662126621366214662156621666217662186621966220662216622266223662246622566226662276622866229662306623166232662336623466235662366623766238662396624066241662426624366244662456624666247662486624966250662516625266253662546625566256662576625866259662606626166262662636626466265662666626766268662696627066271662726627366274662756627666277662786627966280662816628266283662846628566286662876628866289662906629166292662936629466295662966629766298662996630066301663026630366304663056630666307663086630966310663116631266313663146631566316663176631866319663206632166322663236632466325663266632766328663296633066331663326633366334663356633666337663386633966340663416634266343663446634566346663476634866349663506635166352663536635466355663566635766358663596636066361663626636366364663656636666367663686636966370663716637266373663746637566376663776637866379663806638166382663836638466385663866638766388663896639066391663926639366394663956639666397663986639966400664016640266403664046640566406664076640866409664106641166412664136641466415664166641766418664196642066421664226642366424664256642666427664286642966430664316643266433664346643566436664376643866439664406644166442664436644466445664466644766448664496645066451664526645366454664556645666457664586645966460664616646266463664646646566466664676646866469664706647166472664736647466475664766647766478664796648066481664826648366484664856648666487664886648966490664916649266493664946649566496664976649866499665006650166502665036650466505665066650766508665096651066511665126651366514665156651666517665186651966520665216652266523665246652566526665276652866529665306653166532665336653466535665366653766538665396654066541665426654366544665456654666547665486654966550665516655266553665546655566556665576655866559665606656166562665636656466565665666656766568665696657066571665726657366574665756657666577665786657966580665816658266583665846658566586665876658866589665906659166592665936659466595665966659766598665996660066601666026660366604666056660666607666086660966610666116661266613666146661566616666176661866619666206662166622666236662466625666266662766628666296663066631666326663366634666356663666637666386663966640666416664266643666446664566646666476664866649666506665166652666536665466655666566665766658666596666066661666626666366664666656666666667666686666966670666716667266673666746667566676666776667866679666806668166682666836668466685666866668766688666896669066691666926669366694666956669666697666986669966700667016670266703667046670566706667076670866709667106671166712667136671466715667166671766718667196672066721667226672366724667256672666727667286672966730667316673266733667346673566736667376673866739667406674166742667436674466745667466674766748667496675066751667526675366754667556675666757667586675966760667616676266763667646676566766667676676866769667706677166772667736677466775667766677766778667796678066781667826678366784667856678666787667886678966790667916679266793667946679566796667976679866799668006680166802668036680466805668066680766808668096681066811668126681366814668156681666817668186681966820668216682266823668246682566826668276682866829668306683166832668336683466835668366683766838668396684066841668426684366844668456684666847668486684966850668516685266853668546685566856668576685866859668606686166862668636686466865668666686766868668696687066871668726687366874668756687666877668786687966880668816688266883668846688566886668876688866889668906689166892668936689466895668966689766898668996690066901669026690366904669056690666907669086690966910669116691266913669146691566916669176691866919669206692166922669236692466925669266692766928669296693066931669326693366934669356693666937669386693966940669416694266943669446694566946669476694866949669506695166952669536695466955669566695766958669596696066961669626696366964669656696666967669686696966970669716697266973669746697566976669776697866979669806698166982669836698466985669866698766988669896699066991669926699366994669956699666997669986699967000670016700267003670046700567006670076700867009670106701167012670136701467015670166701767018670196702067021670226702367024670256702667027670286702967030670316703267033670346703567036670376703867039670406704167042670436704467045670466704767048670496705067051670526705367054670556705667057670586705967060670616706267063670646706567066670676706867069670706707167072670736707467075670766707767078670796708067081670826708367084670856708667087670886708967090670916709267093670946709567096670976709867099671006710167102671036710467105671066710767108671096711067111671126711367114671156711667117671186711967120671216712267123671246712567126671276712867129671306713167132671336713467135671366713767138671396714067141671426714367144671456714667147671486714967150671516715267153671546715567156671576715867159671606716167162671636716467165671666716767168671696717067171671726717367174671756717667177671786717967180671816718267183671846718567186671876718867189671906719167192671936719467195671966719767198671996720067201672026720367204672056720667207672086720967210672116721267213672146721567216672176721867219672206722167222672236722467225672266722767228672296723067231672326723367234672356723667237672386723967240672416724267243672446724567246672476724867249672506725167252672536725467255672566725767258672596726067261672626726367264672656726667267672686726967270672716727267273672746727567276672776727867279672806728167282672836728467285672866728767288672896729067291672926729367294672956729667297672986729967300673016730267303673046730567306673076730867309673106731167312673136731467315673166731767318673196732067321673226732367324673256732667327673286732967330673316733267333673346733567336673376733867339673406734167342673436734467345673466734767348673496735067351673526735367354673556735667357673586735967360673616736267363673646736567366673676736867369673706737167372673736737467375673766737767378673796738067381673826738367384673856738667387673886738967390673916739267393673946739567396673976739867399674006740167402674036740467405674066740767408674096741067411674126741367414674156741667417674186741967420674216742267423674246742567426674276742867429674306743167432674336743467435674366743767438674396744067441674426744367444674456744667447674486744967450674516745267453674546745567456674576745867459674606746167462674636746467465674666746767468674696747067471674726747367474674756747667477674786747967480674816748267483674846748567486674876748867489674906749167492674936749467495674966749767498674996750067501675026750367504675056750667507675086750967510675116751267513675146751567516675176751867519675206752167522675236752467525675266752767528675296753067531675326753367534675356753667537675386753967540675416754267543675446754567546675476754867549675506755167552675536755467555675566755767558675596756067561675626756367564675656756667567675686756967570675716757267573675746757567576675776757867579675806758167582675836758467585675866758767588675896759067591675926759367594675956759667597675986759967600676016760267603676046760567606676076760867609676106761167612676136761467615676166761767618676196762067621676226762367624676256762667627676286762967630676316763267633676346763567636676376763867639676406764167642676436764467645676466764767648676496765067651676526765367654676556765667657676586765967660676616766267663676646766567666676676766867669676706767167672676736767467675676766767767678676796768067681676826768367684676856768667687676886768967690676916769267693676946769567696676976769867699677006770167702677036770467705677066770767708677096771067711677126771367714677156771667717677186771967720677216772267723677246772567726677276772867729677306773167732677336773467735677366773767738677396774067741677426774367744677456774667747677486774967750677516775267753677546775567756677576775867759677606776167762677636776467765677666776767768677696777067771677726777367774677756777667777677786777967780677816778267783677846778567786677876778867789677906779167792677936779467795677966779767798677996780067801678026780367804678056780667807678086780967810678116781267813678146781567816678176781867819678206782167822678236782467825678266782767828678296783067831678326783367834678356783667837678386783967840678416784267843678446784567846678476784867849678506785167852678536785467855678566785767858678596786067861678626786367864678656786667867678686786967870678716787267873678746787567876678776787867879678806788167882678836788467885678866788767888678896789067891678926789367894678956789667897678986789967900679016790267903679046790567906679076790867909679106791167912679136791467915679166791767918679196792067921679226792367924679256792667927679286792967930679316793267933679346793567936679376793867939679406794167942679436794467945679466794767948679496795067951679526795367954679556795667957679586795967960679616796267963679646796567966679676796867969679706797167972679736797467975679766797767978679796798067981679826798367984679856798667987679886798967990679916799267993679946799567996679976799867999680006800168002680036800468005680066800768008680096801068011680126801368014680156801668017680186801968020680216802268023680246802568026680276802868029680306803168032680336803468035680366803768038680396804068041680426804368044680456804668047680486804968050680516805268053680546805568056680576805868059680606806168062680636806468065680666806768068680696807068071680726807368074680756807668077680786807968080680816808268083680846808568086680876808868089680906809168092680936809468095680966809768098680996810068101681026810368104681056810668107681086810968110681116811268113681146811568116681176811868119681206812168122681236812468125681266812768128681296813068131681326813368134681356813668137681386813968140681416814268143681446814568146681476814868149681506815168152681536815468155681566815768158681596816068161681626816368164681656816668167681686816968170681716817268173681746817568176681776817868179681806818168182681836818468185681866818768188681896819068191681926819368194681956819668197681986819968200682016820268203682046820568206682076820868209682106821168212682136821468215682166821768218682196822068221682226822368224682256822668227682286822968230682316823268233682346823568236682376823868239682406824168242682436824468245682466824768248682496825068251682526825368254682556825668257682586825968260682616826268263682646826568266682676826868269682706827168272682736827468275682766827768278682796828068281682826828368284682856828668287682886828968290682916829268293682946829568296682976829868299683006830168302683036830468305683066830768308683096831068311683126831368314683156831668317683186831968320683216832268323683246832568326683276832868329683306833168332683336833468335683366833768338683396834068341683426834368344683456834668347683486834968350683516835268353683546835568356683576835868359683606836168362683636836468365683666836768368683696837068371683726837368374683756837668377683786837968380683816838268383683846838568386683876838868389683906839168392683936839468395683966839768398683996840068401684026840368404684056840668407684086840968410684116841268413684146841568416684176841868419684206842168422684236842468425684266842768428684296843068431684326843368434684356843668437684386843968440684416844268443684446844568446684476844868449684506845168452684536845468455684566845768458684596846068461684626846368464684656846668467684686846968470684716847268473684746847568476684776847868479684806848168482684836848468485684866848768488684896849068491684926849368494684956849668497684986849968500685016850268503685046850568506685076850868509685106851168512685136851468515685166851768518685196852068521685226852368524685256852668527685286852968530685316853268533685346853568536685376853868539685406854168542685436854468545685466854768548685496855068551685526855368554685556855668557685586855968560685616856268563685646856568566685676856868569685706857168572685736857468575685766857768578685796858068581685826858368584685856858668587685886858968590685916859268593685946859568596685976859868599686006860168602686036860468605686066860768608686096861068611686126861368614686156861668617686186861968620686216862268623686246862568626686276862868629686306863168632686336863468635686366863768638686396864068641686426864368644686456864668647686486864968650686516865268653686546865568656686576865868659686606866168662686636866468665686666866768668686696867068671686726867368674686756867668677686786867968680686816868268683686846868568686686876868868689686906869168692686936869468695686966869768698686996870068701687026870368704687056870668707687086870968710687116871268713687146871568716687176871868719687206872168722687236872468725687266872768728687296873068731687326873368734687356873668737687386873968740687416874268743687446874568746687476874868749687506875168752687536875468755687566875768758687596876068761687626876368764687656876668767687686876968770687716877268773687746877568776687776877868779687806878168782687836878468785687866878768788687896879068791687926879368794687956879668797687986879968800688016880268803688046880568806688076880868809688106881168812688136881468815688166881768818688196882068821688226882368824688256882668827688286882968830688316883268833688346883568836688376883868839688406884168842688436884468845688466884768848688496885068851688526885368854688556885668857688586885968860688616886268863688646886568866688676886868869688706887168872688736887468875688766887768878688796888068881688826888368884688856888668887688886888968890688916889268893688946889568896688976889868899689006890168902689036890468905689066890768908689096891068911689126891368914689156891668917689186891968920689216892268923689246892568926689276892868929689306893168932689336893468935689366893768938689396894068941689426894368944689456894668947689486894968950689516895268953689546895568956689576895868959689606896168962689636896468965689666896768968689696897068971689726897368974689756897668977689786897968980689816898268983689846898568986689876898868989689906899168992689936899468995689966899768998689996900069001690026900369004690056900669007690086900969010690116901269013690146901569016690176901869019690206902169022690236902469025690266902769028690296903069031690326903369034690356903669037690386903969040690416904269043690446904569046690476904869049690506905169052690536905469055690566905769058690596906069061690626906369064690656906669067690686906969070690716907269073690746907569076690776907869079690806908169082690836908469085690866908769088690896909069091690926909369094690956909669097690986909969100691016910269103691046910569106691076910869109691106911169112691136911469115691166911769118691196912069121691226912369124691256912669127691286912969130691316913269133691346913569136691376913869139691406914169142691436914469145691466914769148691496915069151691526915369154691556915669157691586915969160691616916269163691646916569166691676916869169691706917169172691736917469175691766917769178691796918069181691826918369184691856918669187691886918969190691916919269193691946919569196691976919869199692006920169202692036920469205692066920769208692096921069211692126921369214692156921669217692186921969220692216922269223692246922569226692276922869229692306923169232692336923469235692366923769238692396924069241692426924369244692456924669247692486924969250692516925269253692546925569256692576925869259692606926169262692636926469265692666926769268692696927069271692726927369274692756927669277692786927969280692816928269283692846928569286692876928869289692906929169292692936929469295692966929769298692996930069301693026930369304693056930669307693086930969310693116931269313693146931569316693176931869319693206932169322693236932469325693266932769328693296933069331693326933369334693356933669337693386933969340693416934269343693446934569346693476934869349693506935169352693536935469355693566935769358693596936069361693626936369364693656936669367693686936969370693716937269373693746937569376693776937869379693806938169382693836938469385693866938769388693896939069391693926939369394693956939669397693986939969400694016940269403694046940569406694076940869409694106941169412694136941469415694166941769418694196942069421694226942369424694256942669427694286942969430694316943269433694346943569436694376943869439694406944169442694436944469445694466944769448694496945069451694526945369454694556945669457694586945969460694616946269463694646946569466694676946869469694706947169472694736947469475694766947769478694796948069481694826948369484694856948669487694886948969490694916949269493694946949569496694976949869499695006950169502695036950469505695066950769508695096951069511695126951369514695156951669517695186951969520695216952269523695246952569526695276952869529695306953169532695336953469535695366953769538695396954069541695426954369544695456954669547695486954969550695516955269553695546955569556695576955869559695606956169562695636956469565695666956769568695696957069571695726957369574695756957669577695786957969580695816958269583695846958569586695876958869589695906959169592695936959469595695966959769598695996960069601696026960369604696056960669607696086960969610696116961269613696146961569616696176961869619696206962169622696236962469625696266962769628696296963069631696326963369634696356963669637696386963969640696416964269643696446964569646696476964869649696506965169652696536965469655696566965769658696596966069661696626966369664696656966669667696686966969670696716967269673696746967569676696776967869679696806968169682696836968469685696866968769688696896969069691696926969369694696956969669697696986969969700697016970269703697046970569706697076970869709697106971169712697136971469715697166971769718697196972069721697226972369724697256972669727697286972969730697316973269733697346973569736697376973869739697406974169742697436974469745697466974769748697496975069751697526975369754697556975669757697586975969760697616976269763697646976569766697676976869769697706977169772697736977469775697766977769778697796978069781697826978369784697856978669787697886978969790697916979269793697946979569796697976979869799698006980169802698036980469805698066980769808698096981069811698126981369814698156981669817698186981969820698216982269823698246982569826698276982869829698306983169832698336983469835698366983769838698396984069841698426984369844698456984669847698486984969850698516985269853698546985569856698576985869859698606986169862698636986469865698666986769868698696987069871698726987369874698756987669877698786987969880698816988269883698846988569886698876988869889698906989169892698936989469895698966989769898698996990069901699026990369904699056990669907699086990969910699116991269913699146991569916699176991869919699206992169922699236992469925699266992769928699296993069931699326993369934699356993669937699386993969940699416994269943699446994569946699476994869949699506995169952699536995469955699566995769958699596996069961699626996369964699656996669967699686996969970699716997269973699746997569976699776997869979699806998169982699836998469985699866998769988699896999069991699926999369994699956999669997699986999970000700017000270003700047000570006700077000870009700107001170012700137001470015700167001770018700197002070021700227002370024700257002670027700287002970030700317003270033700347003570036700377003870039700407004170042700437004470045700467004770048700497005070051700527005370054700557005670057700587005970060700617006270063700647006570066700677006870069700707007170072700737007470075700767007770078700797008070081700827008370084700857008670087700887008970090700917009270093700947009570096700977009870099701007010170102701037010470105701067010770108701097011070111701127011370114701157011670117701187011970120701217012270123701247012570126701277012870129701307013170132701337013470135701367013770138701397014070141701427014370144701457014670147701487014970150701517015270153701547015570156701577015870159701607016170162701637016470165701667016770168701697017070171701727017370174701757017670177701787017970180701817018270183701847018570186701877018870189701907019170192701937019470195701967019770198701997020070201702027020370204702057020670207702087020970210702117021270213702147021570216702177021870219702207022170222702237022470225702267022770228702297023070231702327023370234702357023670237702387023970240702417024270243702447024570246702477024870249702507025170252702537025470255702567025770258702597026070261702627026370264702657026670267702687026970270702717027270273702747027570276702777027870279702807028170282702837028470285702867028770288702897029070291702927029370294702957029670297702987029970300703017030270303703047030570306703077030870309703107031170312703137031470315703167031770318703197032070321703227032370324703257032670327703287032970330703317033270333703347033570336703377033870339703407034170342703437034470345703467034770348703497035070351703527035370354703557035670357703587035970360703617036270363703647036570366703677036870369703707037170372703737037470375703767037770378703797038070381703827038370384703857038670387703887038970390703917039270393703947039570396703977039870399704007040170402704037040470405704067040770408704097041070411704127041370414704157041670417704187041970420704217042270423704247042570426704277042870429704307043170432704337043470435704367043770438704397044070441704427044370444704457044670447704487044970450704517045270453704547045570456704577045870459704607046170462704637046470465704667046770468704697047070471704727047370474704757047670477704787047970480704817048270483704847048570486704877048870489704907049170492704937049470495704967049770498704997050070501705027050370504705057050670507705087050970510705117051270513705147051570516705177051870519705207052170522705237052470525705267052770528705297053070531705327053370534705357053670537705387053970540705417054270543705447054570546705477054870549705507055170552705537055470555705567055770558705597056070561705627056370564705657056670567705687056970570705717057270573705747057570576705777057870579705807058170582705837058470585705867058770588705897059070591705927059370594705957059670597705987059970600706017060270603706047060570606706077060870609706107061170612706137061470615706167061770618706197062070621706227062370624706257062670627706287062970630706317063270633706347063570636706377063870639706407064170642706437064470645706467064770648706497065070651706527065370654706557065670657706587065970660706617066270663706647066570666706677066870669706707067170672706737067470675706767067770678706797068070681706827068370684706857068670687706887068970690706917069270693706947069570696706977069870699707007070170702707037070470705707067070770708707097071070711707127071370714707157071670717707187071970720707217072270723707247072570726707277072870729707307073170732707337073470735707367073770738707397074070741707427074370744707457074670747707487074970750707517075270753707547075570756707577075870759707607076170762707637076470765707667076770768707697077070771707727077370774707757077670777707787077970780707817078270783707847078570786707877078870789707907079170792707937079470795707967079770798707997080070801708027080370804708057080670807708087080970810708117081270813708147081570816708177081870819708207082170822708237082470825708267082770828708297083070831708327083370834708357083670837708387083970840708417084270843708447084570846708477084870849708507085170852708537085470855708567085770858708597086070861708627086370864708657086670867708687086970870708717087270873708747087570876708777087870879708807088170882708837088470885708867088770888708897089070891708927089370894708957089670897708987089970900709017090270903709047090570906709077090870909709107091170912709137091470915709167091770918709197092070921709227092370924709257092670927709287092970930709317093270933709347093570936709377093870939709407094170942709437094470945709467094770948709497095070951709527095370954709557095670957709587095970960709617096270963709647096570966709677096870969709707097170972709737097470975709767097770978709797098070981709827098370984709857098670987709887098970990709917099270993709947099570996709977099870999710007100171002710037100471005710067100771008710097101071011710127101371014710157101671017710187101971020710217102271023710247102571026710277102871029710307103171032710337103471035710367103771038710397104071041710427104371044710457104671047710487104971050710517105271053710547105571056710577105871059710607106171062710637106471065710667106771068710697107071071710727107371074710757107671077710787107971080710817108271083710847108571086710877108871089710907109171092710937109471095710967109771098710997110071101711027110371104711057110671107711087110971110711117111271113711147111571116711177111871119711207112171122711237112471125711267112771128711297113071131711327113371134711357113671137711387113971140711417114271143711447114571146711477114871149711507115171152711537115471155711567115771158711597116071161711627116371164711657116671167711687116971170711717117271173711747117571176711777117871179711807118171182711837118471185711867118771188711897119071191711927119371194711957119671197711987119971200712017120271203712047120571206712077120871209712107121171212712137121471215712167121771218712197122071221712227122371224712257122671227712287122971230712317123271233712347123571236712377123871239712407124171242712437124471245712467124771248712497125071251712527125371254712557125671257712587125971260712617126271263712647126571266712677126871269712707127171272712737127471275712767127771278712797128071281712827128371284712857128671287712887128971290712917129271293712947129571296712977129871299713007130171302713037130471305713067130771308713097131071311713127131371314713157131671317713187131971320713217132271323713247132571326713277132871329713307133171332713337133471335713367133771338713397134071341713427134371344713457134671347713487134971350713517135271353713547135571356713577135871359713607136171362713637136471365713667136771368713697137071371713727137371374713757137671377713787137971380713817138271383713847138571386713877138871389713907139171392713937139471395713967139771398713997140071401714027140371404714057140671407714087140971410714117141271413714147141571416714177141871419714207142171422714237142471425714267142771428714297143071431714327143371434714357143671437714387143971440714417144271443714447144571446714477144871449714507145171452714537145471455714567145771458714597146071461714627146371464714657146671467714687146971470714717147271473714747147571476714777147871479714807148171482714837148471485714867148771488714897149071491714927149371494714957149671497714987149971500715017150271503715047150571506715077150871509715107151171512715137151471515715167151771518715197152071521715227152371524715257152671527715287152971530715317153271533715347153571536715377153871539715407154171542715437154471545715467154771548715497155071551715527155371554715557155671557715587155971560715617156271563715647156571566715677156871569715707157171572715737157471575715767157771578715797158071581715827158371584715857158671587715887158971590715917159271593715947159571596715977159871599716007160171602716037160471605716067160771608716097161071611716127161371614716157161671617716187161971620716217162271623716247162571626716277162871629716307163171632716337163471635716367163771638716397164071641716427164371644716457164671647716487164971650716517165271653716547165571656716577165871659716607166171662716637166471665716667166771668716697167071671716727167371674716757167671677716787167971680716817168271683716847168571686716877168871689716907169171692716937169471695716967169771698716997170071701717027170371704717057170671707717087170971710717117171271713717147171571716717177171871719717207172171722717237172471725717267172771728717297173071731717327173371734717357173671737717387173971740717417174271743717447174571746717477174871749717507175171752717537175471755717567175771758717597176071761717627176371764717657176671767717687176971770717717177271773717747177571776717777177871779717807178171782717837178471785717867178771788717897179071791717927179371794717957179671797717987179971800718017180271803718047180571806718077180871809718107181171812718137181471815718167181771818718197182071821718227182371824718257182671827718287182971830718317183271833718347183571836718377183871839718407184171842718437184471845718467184771848718497185071851718527185371854718557185671857718587185971860718617186271863718647186571866718677186871869718707187171872718737187471875718767187771878718797188071881718827188371884718857188671887718887188971890718917189271893718947189571896718977189871899719007190171902719037190471905719067190771908719097191071911719127191371914719157191671917719187191971920719217192271923719247192571926719277192871929719307193171932719337193471935719367193771938719397194071941719427194371944719457194671947719487194971950719517195271953719547195571956719577195871959719607196171962719637196471965719667196771968719697197071971719727197371974719757197671977719787197971980719817198271983719847198571986719877198871989719907199171992719937199471995719967199771998719997200072001720027200372004720057200672007720087200972010720117201272013720147201572016720177201872019720207202172022720237202472025720267202772028720297203072031720327203372034720357203672037720387203972040720417204272043720447204572046720477204872049720507205172052720537205472055720567205772058720597206072061720627206372064720657206672067720687206972070720717207272073720747207572076720777207872079720807208172082720837208472085720867208772088720897209072091720927209372094720957209672097720987209972100721017210272103721047210572106721077210872109721107211172112721137211472115721167211772118721197212072121721227212372124721257212672127721287212972130721317213272133721347213572136721377213872139721407214172142721437214472145721467214772148721497215072151721527215372154721557215672157721587215972160721617216272163721647216572166721677216872169721707217172172721737217472175721767217772178721797218072181721827218372184721857218672187721887218972190721917219272193721947219572196721977219872199722007220172202722037220472205722067220772208722097221072211722127221372214722157221672217722187221972220722217222272223722247222572226722277222872229722307223172232722337223472235722367223772238722397224072241722427224372244722457224672247722487224972250722517225272253722547225572256722577225872259722607226172262722637226472265722667226772268722697227072271722727227372274722757227672277722787227972280722817228272283722847228572286722877228872289722907229172292722937229472295722967229772298722997230072301723027230372304723057230672307723087230972310723117231272313723147231572316723177231872319723207232172322723237232472325723267232772328723297233072331723327233372334723357233672337723387233972340723417234272343723447234572346723477234872349723507235172352723537235472355723567235772358723597236072361723627236372364723657236672367723687236972370723717237272373723747237572376723777237872379723807238172382723837238472385723867238772388723897239072391723927239372394723957239672397723987239972400724017240272403724047240572406724077240872409724107241172412724137241472415724167241772418724197242072421724227242372424724257242672427724287242972430724317243272433724347243572436724377243872439724407244172442724437244472445724467244772448724497245072451724527245372454724557245672457724587245972460724617246272463724647246572466724677246872469724707247172472724737247472475724767247772478724797248072481724827248372484724857248672487724887248972490724917249272493724947249572496724977249872499725007250172502725037250472505725067250772508725097251072511725127251372514725157251672517725187251972520725217252272523725247252572526725277252872529725307253172532725337253472535725367253772538725397254072541725427254372544725457254672547725487254972550725517255272553725547255572556725577255872559725607256172562725637256472565725667256772568725697257072571725727257372574725757257672577725787257972580725817258272583725847258572586725877258872589725907259172592725937259472595725967259772598725997260072601726027260372604726057260672607726087260972610726117261272613726147261572616726177261872619726207262172622726237262472625726267262772628726297263072631726327263372634726357263672637726387263972640726417264272643726447264572646726477264872649726507265172652726537265472655726567265772658726597266072661726627266372664726657266672667726687266972670726717267272673726747267572676726777267872679726807268172682726837268472685726867268772688726897269072691726927269372694726957269672697726987269972700727017270272703727047270572706727077270872709727107271172712727137271472715727167271772718727197272072721727227272372724727257272672727727287272972730727317273272733727347273572736727377273872739727407274172742727437274472745727467274772748727497275072751727527275372754727557275672757727587275972760727617276272763727647276572766727677276872769727707277172772727737277472775727767277772778727797278072781727827278372784727857278672787727887278972790727917279272793727947279572796727977279872799728007280172802728037280472805728067280772808728097281072811728127281372814728157281672817728187281972820728217282272823728247282572826728277282872829728307283172832728337283472835728367283772838728397284072841728427284372844728457284672847728487284972850728517285272853728547285572856728577285872859728607286172862728637286472865728667286772868728697287072871728727287372874728757287672877728787287972880728817288272883728847288572886728877288872889728907289172892728937289472895728967289772898728997290072901729027290372904729057290672907729087290972910729117291272913729147291572916729177291872919729207292172922729237292472925729267292772928729297293072931729327293372934729357293672937729387293972940729417294272943729447294572946729477294872949729507295172952729537295472955729567295772958729597296072961729627296372964729657296672967729687296972970729717297272973729747297572976729777297872979729807298172982729837298472985729867298772988729897299072991729927299372994729957299672997729987299973000730017300273003730047300573006730077300873009730107301173012730137301473015730167301773018730197302073021730227302373024730257302673027730287302973030730317303273033730347303573036730377303873039730407304173042730437304473045730467304773048730497305073051730527305373054730557305673057730587305973060730617306273063730647306573066730677306873069730707307173072730737307473075730767307773078730797308073081730827308373084730857308673087730887308973090730917309273093730947309573096730977309873099731007310173102731037310473105731067310773108731097311073111731127311373114731157311673117731187311973120731217312273123731247312573126731277312873129731307313173132731337313473135731367313773138731397314073141731427314373144731457314673147731487314973150731517315273153731547315573156731577315873159731607316173162731637316473165731667316773168731697317073171731727317373174731757317673177731787317973180731817318273183731847318573186731877318873189731907319173192731937319473195731967319773198731997320073201732027320373204732057320673207732087320973210732117321273213732147321573216732177321873219732207322173222732237322473225732267322773228732297323073231732327323373234732357323673237732387323973240732417324273243732447324573246732477324873249732507325173252732537325473255732567325773258732597326073261732627326373264732657326673267732687326973270732717327273273732747327573276732777327873279732807328173282732837328473285732867328773288732897329073291732927329373294732957329673297732987329973300733017330273303733047330573306733077330873309733107331173312733137331473315733167331773318733197332073321733227332373324733257332673327733287332973330733317333273333733347333573336733377333873339733407334173342733437334473345733467334773348733497335073351733527335373354733557335673357733587335973360733617336273363733647336573366733677336873369733707337173372733737337473375733767337773378733797338073381733827338373384733857338673387733887338973390733917339273393733947339573396733977339873399734007340173402734037340473405734067340773408734097341073411734127341373414734157341673417734187341973420734217342273423734247342573426734277342873429734307343173432734337343473435734367343773438734397344073441734427344373444734457344673447734487344973450734517345273453734547345573456734577345873459734607346173462734637346473465734667346773468734697347073471734727347373474734757347673477734787347973480734817348273483734847348573486734877348873489734907349173492734937349473495734967349773498734997350073501735027350373504735057350673507735087350973510735117351273513735147351573516735177351873519735207352173522735237352473525735267352773528735297353073531735327353373534735357353673537735387353973540735417354273543735447354573546735477354873549735507355173552735537355473555735567355773558735597356073561735627356373564735657356673567735687356973570735717357273573735747357573576735777357873579735807358173582735837358473585735867358773588735897359073591735927359373594735957359673597735987359973600736017360273603736047360573606736077360873609736107361173612736137361473615736167361773618736197362073621736227362373624736257362673627736287362973630736317363273633736347363573636736377363873639736407364173642736437364473645736467364773648736497365073651736527365373654736557365673657736587365973660736617366273663736647366573666736677366873669736707367173672736737367473675736767367773678736797368073681736827368373684736857368673687736887368973690736917369273693736947369573696736977369873699737007370173702737037370473705737067370773708737097371073711737127371373714737157371673717737187371973720737217372273723737247372573726737277372873729737307373173732737337373473735737367373773738737397374073741737427374373744737457374673747737487374973750737517375273753737547375573756737577375873759737607376173762737637376473765737667376773768737697377073771737727377373774737757377673777737787377973780737817378273783737847378573786737877378873789737907379173792737937379473795737967379773798737997380073801738027380373804738057380673807738087380973810738117381273813738147381573816738177381873819738207382173822738237382473825738267382773828738297383073831738327383373834738357383673837738387383973840738417384273843738447384573846738477384873849738507385173852738537385473855738567385773858738597386073861738627386373864738657386673867738687386973870738717387273873738747387573876738777387873879738807388173882738837388473885738867388773888738897389073891738927389373894738957389673897738987389973900739017390273903739047390573906739077390873909739107391173912739137391473915739167391773918739197392073921739227392373924739257392673927739287392973930739317393273933739347393573936739377393873939739407394173942739437394473945739467394773948739497395073951739527395373954739557395673957739587395973960739617396273963739647396573966739677396873969739707397173972739737397473975739767397773978739797398073981739827398373984739857398673987739887398973990739917399273993739947399573996739977399873999740007400174002740037400474005740067400774008740097401074011740127401374014740157401674017740187401974020740217402274023740247402574026740277402874029740307403174032740337403474035740367403774038740397404074041740427404374044740457404674047740487404974050740517405274053740547405574056740577405874059740607406174062740637406474065740667406774068740697407074071740727407374074740757407674077740787407974080740817408274083740847408574086740877408874089740907409174092740937409474095740967409774098740997410074101741027410374104741057410674107741087410974110741117411274113741147411574116741177411874119741207412174122741237412474125741267412774128741297413074131741327413374134741357413674137741387413974140741417414274143741447414574146741477414874149741507415174152741537415474155741567415774158741597416074161741627416374164741657416674167741687416974170741717417274173741747417574176741777417874179741807418174182741837418474185741867418774188741897419074191741927419374194741957419674197741987419974200742017420274203742047420574206742077420874209742107421174212742137421474215742167421774218742197422074221742227422374224742257422674227742287422974230742317423274233742347423574236742377423874239742407424174242742437424474245742467424774248742497425074251742527425374254742557425674257742587425974260742617426274263742647426574266742677426874269742707427174272742737427474275742767427774278742797428074281742827428374284742857428674287742887428974290742917429274293742947429574296742977429874299743007430174302743037430474305743067430774308743097431074311743127431374314743157431674317743187431974320743217432274323743247432574326743277432874329743307433174332743337433474335743367433774338743397434074341743427434374344743457434674347743487434974350743517435274353743547435574356743577435874359743607436174362743637436474365743667436774368743697437074371743727437374374743757437674377743787437974380743817438274383743847438574386743877438874389743907439174392743937439474395743967439774398743997440074401744027440374404744057440674407744087440974410744117441274413744147441574416744177441874419744207442174422744237442474425744267442774428744297443074431744327443374434744357443674437744387443974440744417444274443744447444574446744477444874449744507445174452744537445474455744567445774458744597446074461744627446374464744657446674467744687446974470744717447274473744747447574476744777447874479744807448174482744837448474485744867448774488744897449074491744927449374494744957449674497744987449974500745017450274503745047450574506745077450874509745107451174512745137451474515745167451774518745197452074521745227452374524745257452674527745287452974530745317453274533745347453574536745377453874539745407454174542745437454474545745467454774548745497455074551745527455374554745557455674557745587455974560745617456274563745647456574566745677456874569745707457174572745737457474575745767457774578745797458074581745827458374584745857458674587745887458974590745917459274593745947459574596745977459874599746007460174602746037460474605746067460774608746097461074611746127461374614746157461674617746187461974620746217462274623746247462574626746277462874629746307463174632746337463474635746367463774638746397464074641746427464374644746457464674647746487464974650746517465274653746547465574656746577465874659746607466174662746637466474665746667466774668746697467074671746727467374674746757467674677746787467974680746817468274683746847468574686746877468874689746907469174692746937469474695746967469774698746997470074701747027470374704747057470674707747087470974710747117471274713747147471574716747177471874719747207472174722747237472474725747267472774728747297473074731747327473374734747357473674737747387473974740747417474274743747447474574746747477474874749747507475174752747537475474755747567475774758747597476074761747627476374764747657476674767747687476974770747717477274773747747477574776747777477874779747807478174782747837478474785747867478774788747897479074791747927479374794747957479674797747987479974800748017480274803748047480574806748077480874809748107481174812748137481474815748167481774818748197482074821748227482374824748257482674827748287482974830748317483274833748347483574836748377483874839748407484174842748437484474845748467484774848748497485074851748527485374854748557485674857748587485974860748617486274863748647486574866748677486874869748707487174872748737487474875748767487774878748797488074881748827488374884748857488674887748887488974890748917489274893748947489574896748977489874899749007490174902749037490474905749067490774908749097491074911749127491374914749157491674917749187491974920749217492274923749247492574926749277492874929749307493174932749337493474935749367493774938749397494074941749427494374944749457494674947749487494974950749517495274953749547495574956749577495874959749607496174962749637496474965749667496774968749697497074971749727497374974749757497674977749787497974980749817498274983749847498574986749877498874989749907499174992749937499474995749967499774998749997500075001750027500375004750057500675007750087500975010750117501275013750147501575016750177501875019750207502175022750237502475025750267502775028750297503075031750327503375034750357503675037750387503975040750417504275043750447504575046750477504875049750507505175052750537505475055750567505775058750597506075061750627506375064750657506675067750687506975070750717507275073750747507575076750777507875079750807508175082750837508475085750867508775088750897509075091750927509375094750957509675097750987509975100751017510275103751047510575106751077510875109751107511175112751137511475115751167511775118751197512075121751227512375124751257512675127751287512975130751317513275133751347513575136751377513875139751407514175142751437514475145751467514775148751497515075151751527515375154751557515675157751587515975160751617516275163751647516575166751677516875169751707517175172751737517475175751767517775178751797518075181751827518375184751857518675187751887518975190751917519275193751947519575196751977519875199752007520175202752037520475205752067520775208752097521075211752127521375214752157521675217752187521975220752217522275223752247522575226752277522875229752307523175232752337523475235752367523775238752397524075241752427524375244752457524675247752487524975250752517525275253752547525575256752577525875259752607526175262752637526475265752667526775268752697527075271752727527375274752757527675277752787527975280752817528275283752847528575286752877528875289752907529175292752937529475295752967529775298752997530075301753027530375304753057530675307753087530975310753117531275313753147531575316753177531875319753207532175322753237532475325753267532775328753297533075331753327533375334753357533675337753387533975340753417534275343753447534575346753477534875349753507535175352753537535475355753567535775358753597536075361753627536375364753657536675367753687536975370753717537275373753747537575376753777537875379753807538175382753837538475385753867538775388753897539075391753927539375394753957539675397753987539975400754017540275403754047540575406754077540875409754107541175412754137541475415754167541775418754197542075421754227542375424754257542675427754287542975430754317543275433754347543575436754377543875439754407544175442754437544475445754467544775448754497545075451754527545375454754557545675457754587545975460754617546275463754647546575466754677546875469754707547175472754737547475475754767547775478754797548075481754827548375484754857548675487754887548975490754917549275493754947549575496754977549875499755007550175502755037550475505755067550775508755097551075511755127551375514755157551675517755187551975520755217552275523755247552575526755277552875529755307553175532755337553475535755367553775538755397554075541755427554375544755457554675547755487554975550755517555275553755547555575556755577555875559755607556175562755637556475565755667556775568755697557075571755727557375574755757557675577755787557975580755817558275583755847558575586755877558875589755907559175592755937559475595755967559775598755997560075601756027560375604756057560675607756087560975610756117561275613756147561575616756177561875619756207562175622756237562475625756267562775628756297563075631756327563375634756357563675637756387563975640756417564275643756447564575646756477564875649756507565175652756537565475655756567565775658756597566075661756627566375664756657566675667756687566975670756717567275673756747567575676756777567875679756807568175682756837568475685756867568775688756897569075691756927569375694756957569675697756987569975700757017570275703757047570575706757077570875709757107571175712757137571475715757167571775718757197572075721757227572375724757257572675727757287572975730757317573275733757347573575736757377573875739757407574175742757437574475745757467574775748757497575075751757527575375754757557575675757757587575975760757617576275763757647576575766757677576875769757707577175772757737577475775757767577775778757797578075781757827578375784757857578675787757887578975790757917579275793757947579575796757977579875799758007580175802758037580475805758067580775808758097581075811758127581375814758157581675817758187581975820758217582275823758247582575826758277582875829758307583175832758337583475835758367583775838758397584075841758427584375844758457584675847758487584975850758517585275853758547585575856758577585875859758607586175862758637586475865758667586775868758697587075871758727587375874758757587675877758787587975880758817588275883758847588575886758877588875889758907589175892758937589475895758967589775898758997590075901759027590375904759057590675907759087590975910759117591275913759147591575916759177591875919759207592175922759237592475925759267592775928759297593075931759327593375934759357593675937759387593975940759417594275943759447594575946759477594875949759507595175952759537595475955759567595775958759597596075961759627596375964759657596675967759687596975970759717597275973759747597575976759777597875979759807598175982759837598475985759867598775988759897599075991759927599375994759957599675997759987599976000760017600276003760047600576006760077600876009760107601176012760137601476015760167601776018760197602076021760227602376024760257602676027760287602976030760317603276033760347603576036760377603876039760407604176042760437604476045760467604776048760497605076051760527605376054760557605676057760587605976060760617606276063760647606576066760677606876069760707607176072760737607476075760767607776078760797608076081760827608376084760857608676087760887608976090760917609276093760947609576096760977609876099761007610176102761037610476105761067610776108761097611076111761127611376114761157611676117761187611976120761217612276123761247612576126761277612876129761307613176132761337613476135761367613776138761397614076141761427614376144761457614676147761487614976150761517615276153761547615576156761577615876159761607616176162761637616476165761667616776168761697617076171761727617376174761757617676177761787617976180761817618276183761847618576186761877618876189761907619176192761937619476195761967619776198761997620076201762027620376204762057620676207762087620976210762117621276213762147621576216762177621876219762207622176222762237622476225762267622776228762297623076231762327623376234762357623676237762387623976240762417624276243762447624576246762477624876249762507625176252762537625476255762567625776258762597626076261762627626376264762657626676267762687626976270762717627276273762747627576276762777627876279762807628176282762837628476285762867628776288762897629076291762927629376294762957629676297762987629976300763017630276303763047630576306763077630876309763107631176312763137631476315763167631776318763197632076321763227632376324763257632676327763287632976330763317633276333763347633576336763377633876339763407634176342763437634476345763467634776348763497635076351763527635376354763557635676357763587635976360763617636276363763647636576366763677636876369763707637176372763737637476375763767637776378763797638076381763827638376384763857638676387763887638976390763917639276393763947639576396763977639876399764007640176402764037640476405764067640776408764097641076411764127641376414764157641676417764187641976420764217642276423764247642576426764277642876429764307643176432764337643476435764367643776438764397644076441764427644376444764457644676447764487644976450764517645276453764547645576456764577645876459764607646176462764637646476465764667646776468764697647076471764727647376474764757647676477764787647976480764817648276483764847648576486764877648876489764907649176492764937649476495764967649776498764997650076501765027650376504765057650676507765087650976510765117651276513765147651576516765177651876519765207652176522765237652476525765267652776528765297653076531765327653376534765357653676537765387653976540765417654276543765447654576546765477654876549765507655176552765537655476555765567655776558765597656076561765627656376564765657656676567765687656976570765717657276573765747657576576765777657876579765807658176582765837658476585765867658776588765897659076591765927659376594765957659676597765987659976600766017660276603766047660576606766077660876609766107661176612766137661476615766167661776618766197662076621766227662376624766257662676627766287662976630766317663276633766347663576636766377663876639766407664176642766437664476645766467664776648766497665076651766527665376654766557665676657766587665976660766617666276663766647666576666766677666876669766707667176672766737667476675766767667776678766797668076681766827668376684766857668676687766887668976690766917669276693766947669576696766977669876699767007670176702767037670476705767067670776708767097671076711767127671376714767157671676717767187671976720767217672276723767247672576726767277672876729767307673176732767337673476735767367673776738767397674076741767427674376744767457674676747767487674976750767517675276753767547675576756767577675876759767607676176762767637676476765767667676776768767697677076771767727677376774767757677676777767787677976780767817678276783767847678576786767877678876789767907679176792767937679476795767967679776798767997680076801768027680376804768057680676807768087680976810768117681276813768147681576816768177681876819768207682176822768237682476825768267682776828768297683076831768327683376834768357683676837768387683976840768417684276843768447684576846768477684876849768507685176852768537685476855768567685776858768597686076861768627686376864768657686676867768687686976870768717687276873768747687576876768777687876879768807688176882768837688476885768867688776888768897689076891768927689376894768957689676897768987689976900769017690276903769047690576906769077690876909769107691176912769137691476915769167691776918769197692076921769227692376924769257692676927769287692976930769317693276933769347693576936769377693876939769407694176942769437694476945769467694776948769497695076951769527695376954769557695676957769587695976960769617696276963769647696576966769677696876969769707697176972769737697476975769767697776978769797698076981769827698376984769857698676987769887698976990769917699276993769947699576996769977699876999770007700177002770037700477005770067700777008770097701077011770127701377014770157701677017770187701977020770217702277023770247702577026770277702877029770307703177032770337703477035770367703777038770397704077041770427704377044770457704677047770487704977050770517705277053770547705577056770577705877059770607706177062770637706477065770667706777068770697707077071770727707377074770757707677077770787707977080770817708277083770847708577086770877708877089770907709177092770937709477095770967709777098770997710077101771027710377104771057710677107771087710977110771117711277113771147711577116771177711877119771207712177122771237712477125771267712777128771297713077131771327713377134771357713677137771387713977140771417714277143771447714577146771477714877149771507715177152771537715477155771567715777158771597716077161771627716377164771657716677167771687716977170771717717277173771747717577176771777717877179771807718177182771837718477185771867718777188771897719077191771927719377194771957719677197771987719977200772017720277203772047720577206772077720877209772107721177212772137721477215772167721777218772197722077221772227722377224772257722677227772287722977230772317723277233772347723577236772377723877239772407724177242772437724477245772467724777248772497725077251772527725377254772557725677257772587725977260772617726277263772647726577266772677726877269772707727177272772737727477275772767727777278772797728077281772827728377284772857728677287772887728977290772917729277293772947729577296772977729877299773007730177302773037730477305773067730777308773097731077311773127731377314773157731677317773187731977320773217732277323773247732577326773277732877329773307733177332773337733477335773367733777338773397734077341773427734377344773457734677347773487734977350773517735277353773547735577356773577735877359773607736177362773637736477365773667736777368773697737077371773727737377374773757737677377773787737977380773817738277383773847738577386773877738877389773907739177392773937739477395773967739777398773997740077401774027740377404774057740677407774087740977410774117741277413774147741577416774177741877419774207742177422774237742477425774267742777428774297743077431774327743377434774357743677437774387743977440774417744277443774447744577446774477744877449774507745177452774537745477455774567745777458774597746077461774627746377464774657746677467774687746977470774717747277473774747747577476774777747877479774807748177482774837748477485774867748777488774897749077491774927749377494774957749677497774987749977500775017750277503775047750577506775077750877509775107751177512775137751477515775167751777518775197752077521775227752377524775257752677527775287752977530775317753277533775347753577536775377753877539775407754177542775437754477545775467754777548775497755077551775527755377554775557755677557775587755977560775617756277563775647756577566775677756877569775707757177572775737757477575775767757777578775797758077581775827758377584775857758677587775887758977590775917759277593775947759577596775977759877599776007760177602776037760477605776067760777608776097761077611776127761377614776157761677617776187761977620776217762277623776247762577626776277762877629776307763177632776337763477635776367763777638776397764077641776427764377644776457764677647776487764977650776517765277653776547765577656776577765877659776607766177662776637766477665776667766777668776697767077671776727767377674776757767677677776787767977680776817768277683776847768577686776877768877689776907769177692776937769477695776967769777698776997770077701777027770377704777057770677707777087770977710777117771277713777147771577716777177771877719777207772177722777237772477725777267772777728777297773077731777327773377734777357773677737777387773977740777417774277743777447774577746777477774877749777507775177752777537775477755777567775777758777597776077761777627776377764777657776677767777687776977770777717777277773777747777577776777777777877779777807778177782777837778477785777867778777788777897779077791777927779377794777957779677797777987779977800778017780277803778047780577806778077780877809778107781177812778137781477815778167781777818778197782077821778227782377824778257782677827778287782977830778317783277833778347783577836778377783877839778407784177842778437784477845778467784777848778497785077851778527785377854778557785677857778587785977860778617786277863778647786577866778677786877869778707787177872778737787477875778767787777878778797788077881778827788377884778857788677887778887788977890778917789277893778947789577896778977789877899779007790177902779037790477905779067790777908779097791077911779127791377914779157791677917779187791977920779217792277923779247792577926779277792877929779307793177932779337793477935779367793777938779397794077941779427794377944779457794677947779487794977950779517795277953779547795577956779577795877959779607796177962779637796477965779667796777968779697797077971779727797377974779757797677977779787797977980779817798277983779847798577986779877798877989779907799177992779937799477995779967799777998779997800078001780027800378004780057800678007780087800978010780117801278013780147801578016780177801878019780207802178022780237802478025780267802778028780297803078031780327803378034780357803678037780387803978040780417804278043780447804578046780477804878049780507805178052780537805478055780567805778058780597806078061780627806378064780657806678067780687806978070780717807278073780747807578076780777807878079780807808178082780837808478085780867808778088780897809078091780927809378094780957809678097780987809978100781017810278103781047810578106781077810878109781107811178112781137811478115781167811778118781197812078121781227812378124781257812678127781287812978130781317813278133781347813578136781377813878139781407814178142781437814478145781467814778148781497815078151781527815378154781557815678157781587815978160781617816278163781647816578166781677816878169781707817178172781737817478175781767817778178781797818078181781827818378184781857818678187781887818978190781917819278193781947819578196781977819878199782007820178202782037820478205782067820778208782097821078211782127821378214782157821678217782187821978220782217822278223782247822578226782277822878229782307823178232782337823478235782367823778238782397824078241782427824378244782457824678247782487824978250782517825278253782547825578256782577825878259782607826178262782637826478265782667826778268782697827078271782727827378274782757827678277782787827978280782817828278283782847828578286782877828878289782907829178292782937829478295782967829778298782997830078301783027830378304783057830678307783087830978310783117831278313783147831578316783177831878319783207832178322783237832478325783267832778328783297833078331783327833378334783357833678337783387833978340783417834278343783447834578346783477834878349783507835178352783537835478355783567835778358783597836078361783627836378364783657836678367783687836978370783717837278373783747837578376783777837878379783807838178382783837838478385783867838778388783897839078391783927839378394783957839678397783987839978400784017840278403784047840578406784077840878409784107841178412784137841478415784167841778418784197842078421784227842378424784257842678427784287842978430784317843278433784347843578436784377843878439784407844178442784437844478445784467844778448784497845078451784527845378454784557845678457784587845978460784617846278463784647846578466784677846878469784707847178472784737847478475784767847778478784797848078481784827848378484784857848678487784887848978490784917849278493784947849578496784977849878499785007850178502785037850478505785067850778508785097851078511785127851378514785157851678517785187851978520785217852278523785247852578526785277852878529785307853178532785337853478535785367853778538785397854078541785427854378544785457854678547785487854978550785517855278553785547855578556785577855878559785607856178562785637856478565785667856778568785697857078571785727857378574785757857678577785787857978580785817858278583785847858578586785877858878589785907859178592785937859478595785967859778598785997860078601786027860378604786057860678607786087860978610786117861278613786147861578616786177861878619786207862178622786237862478625786267862778628786297863078631786327863378634786357863678637786387863978640786417864278643786447864578646786477864878649786507865178652786537865478655786567865778658786597866078661786627866378664786657866678667786687866978670786717867278673786747867578676786777867878679786807868178682786837868478685786867868778688786897869078691786927869378694786957869678697786987869978700787017870278703787047870578706787077870878709787107871178712787137871478715787167871778718787197872078721787227872378724787257872678727787287872978730787317873278733787347873578736787377873878739787407874178742787437874478745787467874778748787497875078751787527875378754787557875678757787587875978760787617876278763787647876578766787677876878769787707877178772787737877478775787767877778778787797878078781787827878378784787857878678787787887878978790787917879278793787947879578796787977879878799788007880178802788037880478805788067880778808788097881078811788127881378814788157881678817788187881978820788217882278823788247882578826788277882878829788307883178832788337883478835788367883778838788397884078841788427884378844788457884678847788487884978850788517885278853788547885578856788577885878859788607886178862788637886478865788667886778868788697887078871788727887378874788757887678877788787887978880788817888278883788847888578886788877888878889788907889178892788937889478895788967889778898788997890078901789027890378904789057890678907789087890978910789117891278913789147891578916789177891878919789207892178922789237892478925789267892778928789297893078931789327893378934789357893678937789387893978940789417894278943789447894578946789477894878949789507895178952789537895478955789567895778958789597896078961789627896378964789657896678967789687896978970789717897278973789747897578976789777897878979789807898178982789837898478985789867898778988789897899078991789927899378994789957899678997789987899979000790017900279003790047900579006790077900879009790107901179012790137901479015790167901779018790197902079021790227902379024790257902679027790287902979030790317903279033790347903579036790377903879039790407904179042790437904479045790467904779048790497905079051790527905379054790557905679057790587905979060790617906279063790647906579066790677906879069790707907179072790737907479075790767907779078790797908079081790827908379084790857908679087790887908979090790917909279093790947909579096790977909879099791007910179102791037910479105791067910779108791097911079111791127911379114791157911679117791187911979120791217912279123791247912579126791277912879129791307913179132791337913479135791367913779138791397914079141791427914379144791457914679147791487914979150791517915279153791547915579156791577915879159791607916179162791637916479165791667916779168791697917079171791727917379174791757917679177791787917979180791817918279183791847918579186791877918879189791907919179192791937919479195791967919779198791997920079201792027920379204792057920679207792087920979210792117921279213792147921579216792177921879219792207922179222792237922479225792267922779228792297923079231792327923379234792357923679237792387923979240792417924279243792447924579246792477924879249792507925179252792537925479255792567925779258792597926079261792627926379264792657926679267792687926979270792717927279273792747927579276792777927879279792807928179282792837928479285792867928779288792897929079291792927929379294792957929679297792987929979300793017930279303793047930579306793077930879309793107931179312793137931479315793167931779318793197932079321793227932379324793257932679327793287932979330793317933279333793347933579336793377933879339793407934179342793437934479345793467934779348793497935079351793527935379354793557935679357793587935979360793617936279363793647936579366793677936879369793707937179372793737937479375793767937779378793797938079381793827938379384793857938679387793887938979390793917939279393793947939579396793977939879399794007940179402794037940479405794067940779408794097941079411794127941379414794157941679417794187941979420794217942279423794247942579426794277942879429794307943179432794337943479435794367943779438794397944079441794427944379444794457944679447794487944979450794517945279453794547945579456794577945879459794607946179462794637946479465794667946779468794697947079471794727947379474794757947679477794787947979480794817948279483794847948579486794877948879489794907949179492794937949479495794967949779498794997950079501795027950379504795057950679507795087950979510795117951279513795147951579516795177951879519795207952179522795237952479525795267952779528795297953079531795327953379534795357953679537795387953979540795417954279543795447954579546795477954879549795507955179552795537955479555795567955779558795597956079561795627956379564795657956679567795687956979570795717957279573795747957579576795777957879579795807958179582795837958479585795867958779588795897959079591795927959379594795957959679597795987959979600796017960279603796047960579606796077960879609796107961179612796137961479615796167961779618796197962079621796227962379624796257962679627796287962979630796317963279633796347963579636796377963879639796407964179642796437964479645796467964779648796497965079651796527965379654796557965679657796587965979660796617966279663796647966579666796677966879669796707967179672796737967479675796767967779678796797968079681796827968379684796857968679687796887968979690796917969279693796947969579696796977969879699797007970179702797037970479705797067970779708797097971079711797127971379714797157971679717797187971979720797217972279723797247972579726797277972879729797307973179732797337973479735797367973779738797397974079741797427974379744797457974679747797487974979750797517975279753797547975579756797577975879759797607976179762797637976479765797667976779768797697977079771797727977379774797757977679777797787977979780797817978279783797847978579786797877978879789797907979179792797937979479795797967979779798797997980079801798027980379804798057980679807798087980979810798117981279813798147981579816798177981879819798207982179822798237982479825798267982779828798297983079831798327983379834798357983679837798387983979840798417984279843798447984579846798477984879849798507985179852798537985479855798567985779858798597986079861798627986379864798657986679867798687986979870798717987279873798747987579876798777987879879798807988179882798837988479885798867988779888798897989079891798927989379894798957989679897798987989979900799017990279903799047990579906799077990879909799107991179912799137991479915799167991779918799197992079921799227992379924799257992679927799287992979930799317993279933799347993579936799377993879939799407994179942799437994479945799467994779948799497995079951799527995379954799557995679957799587995979960799617996279963799647996579966799677996879969799707997179972799737997479975799767997779978799797998079981799827998379984799857998679987799887998979990799917999279993799947999579996799977999879999800008000180002800038000480005800068000780008800098001080011800128001380014800158001680017800188001980020800218002280023800248002580026800278002880029800308003180032800338003480035800368003780038800398004080041800428004380044800458004680047800488004980050800518005280053800548005580056800578005880059800608006180062800638006480065800668006780068800698007080071800728007380074800758007680077800788007980080800818008280083800848008580086800878008880089800908009180092800938009480095800968009780098800998010080101801028010380104801058010680107801088010980110801118011280113801148011580116801178011880119801208012180122801238012480125801268012780128801298013080131801328013380134801358013680137801388013980140801418014280143801448014580146801478014880149801508015180152801538015480155801568015780158801598016080161801628016380164801658016680167801688016980170801718017280173801748017580176801778017880179801808018180182801838018480185801868018780188801898019080191801928019380194801958019680197801988019980200802018020280203802048020580206802078020880209802108021180212802138021480215802168021780218802198022080221802228022380224802258022680227802288022980230802318023280233802348023580236802378023880239802408024180242802438024480245802468024780248802498025080251802528025380254802558025680257802588025980260802618026280263802648026580266802678026880269802708027180272802738027480275802768027780278802798028080281802828028380284802858028680287802888028980290802918029280293802948029580296802978029880299803008030180302803038030480305803068030780308803098031080311803128031380314803158031680317803188031980320803218032280323803248032580326803278032880329803308033180332803338033480335803368033780338803398034080341803428034380344803458034680347803488034980350803518035280353803548035580356803578035880359803608036180362803638036480365803668036780368803698037080371803728037380374803758037680377803788037980380803818038280383803848038580386803878038880389803908039180392803938039480395803968039780398803998040080401804028040380404804058040680407804088040980410804118041280413804148041580416804178041880419804208042180422804238042480425804268042780428804298043080431804328043380434804358043680437804388043980440804418044280443804448044580446804478044880449804508045180452804538045480455804568045780458804598046080461804628046380464804658046680467804688046980470804718047280473804748047580476804778047880479804808048180482804838048480485804868048780488804898049080491804928049380494804958049680497804988049980500805018050280503805048050580506805078050880509805108051180512805138051480515805168051780518805198052080521805228052380524805258052680527805288052980530805318053280533805348053580536805378053880539805408054180542805438054480545805468054780548805498055080551805528055380554805558055680557805588055980560805618056280563805648056580566805678056880569805708057180572805738057480575805768057780578805798058080581805828058380584805858058680587805888058980590805918059280593805948059580596805978059880599806008060180602806038060480605806068060780608806098061080611806128061380614806158061680617806188061980620806218062280623806248062580626806278062880629806308063180632806338063480635806368063780638806398064080641806428064380644806458064680647806488064980650806518065280653806548065580656806578065880659806608066180662806638066480665806668066780668806698067080671806728067380674806758067680677806788067980680806818068280683806848068580686806878068880689806908069180692806938069480695806968069780698806998070080701807028070380704807058070680707807088070980710807118071280713807148071580716807178071880719807208072180722807238072480725807268072780728807298073080731807328073380734807358073680737807388073980740807418074280743807448074580746807478074880749807508075180752807538075480755807568075780758807598076080761807628076380764807658076680767807688076980770807718077280773807748077580776807778077880779807808078180782807838078480785807868078780788807898079080791807928079380794807958079680797807988079980800808018080280803808048080580806808078080880809808108081180812808138081480815808168081780818808198082080821808228082380824808258082680827808288082980830808318083280833808348083580836808378083880839808408084180842808438084480845808468084780848808498085080851808528085380854808558085680857808588085980860808618086280863808648086580866808678086880869808708087180872808738087480875808768087780878808798088080881808828088380884808858088680887808888088980890808918089280893808948089580896808978089880899809008090180902809038090480905809068090780908809098091080911809128091380914809158091680917809188091980920809218092280923809248092580926809278092880929809308093180932809338093480935809368093780938809398094080941809428094380944809458094680947809488094980950809518095280953809548095580956809578095880959809608096180962809638096480965809668096780968809698097080971809728097380974809758097680977809788097980980809818098280983809848098580986809878098880989809908099180992809938099480995809968099780998809998100081001810028100381004810058100681007810088100981010810118101281013810148101581016810178101881019810208102181022810238102481025810268102781028810298103081031810328103381034810358103681037810388103981040810418104281043810448104581046810478104881049810508105181052810538105481055810568105781058810598106081061810628106381064810658106681067810688106981070810718107281073810748107581076810778107881079810808108181082810838108481085810868108781088810898109081091810928109381094810958109681097810988109981100811018110281103811048110581106811078110881109811108111181112811138111481115811168111781118811198112081121811228112381124811258112681127811288112981130811318113281133811348113581136811378113881139811408114181142811438114481145811468114781148811498115081151811528115381154811558115681157811588115981160811618116281163811648116581166811678116881169811708117181172811738117481175811768117781178811798118081181811828118381184811858118681187811888118981190811918119281193811948119581196811978119881199812008120181202812038120481205812068120781208812098121081211812128121381214812158121681217812188121981220812218122281223812248122581226812278122881229812308123181232812338123481235812368123781238812398124081241812428124381244812458124681247812488124981250812518125281253812548125581256812578125881259812608126181262812638126481265812668126781268812698127081271812728127381274812758127681277812788127981280812818128281283812848128581286812878128881289812908129181292812938129481295812968129781298812998130081301813028130381304813058130681307813088130981310813118131281313813148131581316813178131881319813208132181322813238132481325813268132781328813298133081331813328133381334813358133681337813388133981340813418134281343813448134581346813478134881349813508135181352813538135481355813568135781358813598136081361813628136381364813658136681367813688136981370813718137281373813748137581376813778137881379813808138181382813838138481385813868138781388813898139081391813928139381394813958139681397813988139981400814018140281403814048140581406814078140881409814108141181412814138141481415814168141781418814198142081421814228142381424814258142681427814288142981430814318143281433814348143581436814378143881439814408144181442814438144481445814468144781448814498145081451814528145381454814558145681457814588145981460814618146281463814648146581466814678146881469814708147181472814738147481475814768147781478814798148081481814828148381484814858148681487814888148981490814918149281493814948149581496814978149881499815008150181502815038150481505815068150781508815098151081511815128151381514815158151681517815188151981520815218152281523815248152581526815278152881529815308153181532815338153481535815368153781538815398154081541815428154381544815458154681547815488154981550815518155281553815548155581556815578155881559815608156181562815638156481565815668156781568815698157081571815728157381574815758157681577815788157981580815818158281583815848158581586815878158881589815908159181592815938159481595815968159781598815998160081601816028160381604816058160681607816088160981610816118161281613816148161581616816178161881619816208162181622816238162481625816268162781628816298163081631816328163381634816358163681637816388163981640816418164281643816448164581646816478164881649816508165181652816538165481655816568165781658816598166081661816628166381664816658166681667816688166981670816718167281673816748167581676816778167881679816808168181682816838168481685816868168781688816898169081691816928169381694816958169681697816988169981700817018170281703817048170581706817078170881709817108171181712817138171481715817168171781718817198172081721817228172381724817258172681727817288172981730817318173281733817348173581736817378173881739817408174181742817438174481745817468174781748817498175081751817528175381754817558175681757817588175981760817618176281763817648176581766817678176881769817708177181772817738177481775817768177781778817798178081781817828178381784817858178681787817888178981790817918179281793817948179581796817978179881799818008180181802818038180481805818068180781808818098181081811818128181381814818158181681817818188181981820818218182281823818248182581826818278182881829818308183181832818338183481835818368183781838818398184081841818428184381844818458184681847818488184981850818518185281853818548185581856818578185881859818608186181862818638186481865818668186781868818698187081871818728187381874818758187681877818788187981880818818188281883818848188581886818878188881889818908189181892818938189481895818968189781898818998190081901819028190381904819058190681907819088190981910819118191281913819148191581916819178191881919819208192181922819238192481925819268192781928819298193081931819328193381934819358193681937819388193981940819418194281943819448194581946819478194881949819508195181952819538195481955819568195781958819598196081961819628196381964819658196681967819688196981970819718197281973819748197581976819778197881979819808198181982819838198481985819868198781988819898199081991819928199381994819958199681997819988199982000820018200282003820048200582006820078200882009820108201182012820138201482015820168201782018820198202082021820228202382024820258202682027820288202982030820318203282033820348203582036820378203882039820408204182042820438204482045820468204782048820498205082051820528205382054820558205682057820588205982060820618206282063820648206582066820678206882069820708207182072820738207482075820768207782078820798208082081820828208382084820858208682087820888208982090820918209282093820948209582096820978209882099821008210182102821038210482105821068210782108821098211082111821128211382114821158211682117821188211982120821218212282123821248212582126821278212882129821308213182132821338213482135821368213782138821398214082141821428214382144821458214682147821488214982150821518215282153821548215582156821578215882159821608216182162821638216482165821668216782168821698217082171821728217382174821758217682177821788217982180821818218282183821848218582186821878218882189821908219182192821938219482195821968219782198821998220082201822028220382204822058220682207822088220982210822118221282213822148221582216822178221882219822208222182222822238222482225822268222782228822298223082231822328223382234822358223682237822388223982240822418224282243822448224582246822478224882249822508225182252822538225482255822568225782258822598226082261822628226382264822658226682267822688226982270822718227282273822748227582276822778227882279822808228182282822838228482285822868228782288822898229082291822928229382294822958229682297822988229982300823018230282303823048230582306823078230882309823108231182312823138231482315823168231782318823198232082321823228232382324823258232682327823288232982330823318233282333823348233582336823378233882339823408234182342823438234482345823468234782348823498235082351823528235382354823558235682357823588235982360823618236282363823648236582366823678236882369823708237182372823738237482375823768237782378823798238082381823828238382384823858238682387823888238982390823918239282393823948239582396823978239882399824008240182402824038240482405824068240782408824098241082411824128241382414824158241682417824188241982420824218242282423824248242582426824278242882429824308243182432824338243482435824368243782438824398244082441824428244382444824458244682447824488244982450824518245282453824548245582456824578245882459824608246182462824638246482465824668246782468824698247082471824728247382474824758247682477824788247982480824818248282483824848248582486824878248882489824908249182492824938249482495824968249782498824998250082501825028250382504825058250682507825088250982510825118251282513825148251582516825178251882519825208252182522825238252482525825268252782528825298253082531825328253382534825358253682537825388253982540825418254282543825448254582546825478254882549825508255182552825538255482555825568255782558825598256082561825628256382564825658256682567825688256982570825718257282573825748257582576825778257882579825808258182582825838258482585825868258782588825898259082591825928259382594825958259682597825988259982600826018260282603826048260582606826078260882609826108261182612826138261482615826168261782618826198262082621826228262382624826258262682627826288262982630826318263282633826348263582636826378263882639826408264182642826438264482645826468264782648826498265082651826528265382654826558265682657826588265982660826618266282663826648266582666826678266882669826708267182672826738267482675826768267782678826798268082681826828268382684826858268682687826888268982690826918269282693826948269582696826978269882699827008270182702827038270482705827068270782708827098271082711827128271382714827158271682717827188271982720827218272282723827248272582726827278272882729827308273182732827338273482735827368273782738827398274082741827428274382744827458274682747827488274982750827518275282753827548275582756827578275882759827608276182762827638276482765827668276782768827698277082771827728277382774827758277682777827788277982780827818278282783827848278582786827878278882789827908279182792827938279482795827968279782798827998280082801828028280382804828058280682807828088280982810828118281282813828148281582816828178281882819828208282182822828238282482825828268282782828828298283082831828328283382834828358283682837828388283982840828418284282843828448284582846828478284882849828508285182852828538285482855828568285782858828598286082861828628286382864828658286682867828688286982870828718287282873828748287582876828778287882879828808288182882828838288482885828868288782888828898289082891828928289382894828958289682897828988289982900829018290282903829048290582906829078290882909829108291182912829138291482915829168291782918829198292082921829228292382924829258292682927829288292982930829318293282933829348293582936829378293882939829408294182942829438294482945829468294782948829498295082951829528295382954829558295682957829588295982960829618296282963829648296582966829678296882969829708297182972829738297482975829768297782978829798298082981829828298382984829858298682987829888298982990829918299282993829948299582996829978299882999830008300183002830038300483005830068300783008830098301083011830128301383014830158301683017830188301983020830218302283023830248302583026830278302883029830308303183032830338303483035830368303783038830398304083041830428304383044830458304683047830488304983050830518305283053830548305583056830578305883059830608306183062830638306483065830668306783068830698307083071830728307383074830758307683077830788307983080830818308283083830848308583086830878308883089830908309183092830938309483095830968309783098830998310083101831028310383104831058310683107831088310983110831118311283113831148311583116831178311883119831208312183122831238312483125831268312783128831298313083131831328313383134831358313683137831388313983140831418314283143831448314583146831478314883149831508315183152831538315483155831568315783158831598316083161831628316383164831658316683167831688316983170831718317283173831748317583176831778317883179831808318183182831838318483185831868318783188831898319083191831928319383194831958319683197831988319983200832018320283203832048320583206832078320883209832108321183212832138321483215832168321783218832198322083221832228322383224832258322683227832288322983230832318323283233832348323583236832378323883239832408324183242832438324483245832468324783248832498325083251832528325383254832558325683257832588325983260832618326283263832648326583266832678326883269832708327183272832738327483275832768327783278832798328083281832828328383284832858328683287832888328983290832918329283293832948329583296832978329883299833008330183302833038330483305833068330783308833098331083311833128331383314833158331683317833188331983320833218332283323833248332583326833278332883329833308333183332833338333483335833368333783338833398334083341833428334383344833458334683347833488334983350833518335283353833548335583356833578335883359833608336183362833638336483365833668336783368833698337083371833728337383374833758337683377833788337983380833818338283383833848338583386833878338883389833908339183392833938339483395833968339783398833998340083401834028340383404834058340683407834088340983410834118341283413834148341583416834178341883419834208342183422834238342483425834268342783428834298343083431834328343383434834358343683437834388343983440834418344283443834448344583446834478344883449834508345183452834538345483455834568345783458834598346083461834628346383464834658346683467834688346983470834718347283473834748347583476834778347883479834808348183482834838348483485834868348783488834898349083491834928349383494834958349683497834988349983500835018350283503835048350583506835078350883509835108351183512835138351483515835168351783518835198352083521835228352383524835258352683527835288352983530835318353283533835348353583536835378353883539835408354183542835438354483545835468354783548835498355083551835528355383554835558355683557835588355983560835618356283563835648356583566835678356883569835708357183572835738357483575835768357783578835798358083581835828358383584835858358683587835888358983590835918359283593835948359583596835978359883599836008360183602836038360483605836068360783608836098361083611836128361383614836158361683617836188361983620836218362283623836248362583626836278362883629836308363183632836338363483635836368363783638836398364083641836428364383644836458364683647836488364983650836518365283653836548365583656836578365883659836608366183662836638366483665836668366783668836698367083671836728367383674836758367683677836788367983680836818368283683836848368583686836878368883689836908369183692836938369483695836968369783698836998370083701837028370383704837058370683707837088370983710837118371283713837148371583716837178371883719837208372183722837238372483725837268372783728837298373083731837328373383734837358373683737837388373983740837418374283743837448374583746837478374883749837508375183752837538375483755837568375783758837598376083761837628376383764837658376683767837688376983770837718377283773837748377583776837778377883779837808378183782837838378483785837868378783788837898379083791837928379383794837958379683797837988379983800838018380283803838048380583806838078380883809838108381183812838138381483815838168381783818838198382083821838228382383824838258382683827838288382983830838318383283833838348383583836838378383883839838408384183842838438384483845838468384783848838498385083851838528385383854838558385683857838588385983860838618386283863838648386583866838678386883869838708387183872838738387483875838768387783878838798388083881838828388383884838858388683887838888388983890838918389283893838948389583896838978389883899839008390183902839038390483905839068390783908839098391083911839128391383914839158391683917839188391983920839218392283923839248392583926839278392883929839308393183932839338393483935839368393783938839398394083941839428394383944839458394683947839488394983950839518395283953839548395583956839578395883959839608396183962839638396483965839668396783968839698397083971839728397383974839758397683977839788397983980839818398283983839848398583986839878398883989839908399183992839938399483995839968399783998839998400084001840028400384004840058400684007840088400984010840118401284013840148401584016840178401884019840208402184022840238402484025840268402784028840298403084031840328403384034840358403684037840388403984040840418404284043840448404584046840478404884049840508405184052840538405484055840568405784058840598406084061840628406384064840658406684067840688406984070840718407284073840748407584076840778407884079840808408184082840838408484085840868408784088840898409084091840928409384094840958409684097840988409984100841018410284103841048410584106841078410884109841108411184112841138411484115841168411784118841198412084121841228412384124841258412684127841288412984130841318413284133841348413584136841378413884139841408414184142841438414484145841468414784148841498415084151841528415384154841558415684157841588415984160841618416284163841648416584166841678416884169841708417184172841738417484175841768417784178841798418084181841828418384184841858418684187841888418984190841918419284193841948419584196841978419884199842008420184202842038420484205842068420784208842098421084211842128421384214842158421684217842188421984220842218422284223842248422584226842278422884229842308423184232842338423484235842368423784238842398424084241842428424384244842458424684247842488424984250842518425284253842548425584256842578425884259842608426184262842638426484265842668426784268842698427084271842728427384274842758427684277842788427984280842818428284283842848428584286842878428884289842908429184292842938429484295842968429784298842998430084301843028430384304843058430684307843088430984310843118431284313843148431584316843178431884319843208432184322843238432484325843268432784328843298433084331843328433384334843358433684337843388433984340843418434284343843448434584346843478434884349843508435184352843538435484355843568435784358843598436084361843628436384364843658436684367843688436984370843718437284373843748437584376843778437884379843808438184382843838438484385843868438784388843898439084391843928439384394843958439684397843988439984400844018440284403844048440584406844078440884409844108441184412844138441484415844168441784418844198442084421844228442384424844258442684427844288442984430844318443284433844348443584436844378443884439844408444184442844438444484445844468444784448844498445084451844528445384454844558445684457844588445984460844618446284463844648446584466844678446884469844708447184472844738447484475844768447784478844798448084481844828448384484844858448684487844888448984490844918449284493844948449584496844978449884499845008450184502845038450484505845068450784508845098451084511845128451384514845158451684517845188451984520845218452284523845248452584526845278452884529845308453184532845338453484535845368453784538845398454084541845428454384544845458454684547845488454984550845518455284553845548455584556845578455884559845608456184562845638456484565845668456784568845698457084571845728457384574845758457684577845788457984580845818458284583845848458584586845878458884589845908459184592845938459484595845968459784598845998460084601846028460384604846058460684607846088460984610846118461284613846148461584616846178461884619846208462184622846238462484625846268462784628846298463084631846328463384634846358463684637846388463984640846418464284643846448464584646846478464884649846508465184652846538465484655846568465784658846598466084661846628466384664846658466684667846688466984670846718467284673846748467584676846778467884679846808468184682846838468484685846868468784688846898469084691846928469384694846958469684697846988469984700847018470284703847048470584706847078470884709847108471184712847138471484715847168471784718847198472084721847228472384724847258472684727847288472984730847318473284733847348473584736847378473884739847408474184742847438474484745847468474784748847498475084751847528475384754847558475684757847588475984760847618476284763847648476584766847678476884769847708477184772847738477484775847768477784778847798478084781847828478384784847858478684787847888478984790847918479284793847948479584796847978479884799848008480184802848038480484805848068480784808848098481084811848128481384814848158481684817848188481984820848218482284823848248482584826848278482884829848308483184832848338483484835848368483784838848398484084841848428484384844848458484684847848488484984850848518485284853848548485584856848578485884859848608486184862848638486484865848668486784868848698487084871848728487384874848758487684877848788487984880848818488284883848848488584886848878488884889848908489184892848938489484895848968489784898848998490084901849028490384904849058490684907849088490984910849118491284913849148491584916849178491884919849208492184922849238492484925849268492784928849298493084931849328493384934849358493684937849388493984940849418494284943849448494584946849478494884949849508495184952849538495484955849568495784958849598496084961849628496384964849658496684967849688496984970849718497284973849748497584976849778497884979849808498184982849838498484985849868498784988849898499084991849928499384994849958499684997849988499985000850018500285003850048500585006850078500885009850108501185012850138501485015850168501785018850198502085021850228502385024850258502685027850288502985030850318503285033850348503585036850378503885039850408504185042850438504485045850468504785048850498505085051850528505385054850558505685057850588505985060850618506285063850648506585066850678506885069850708507185072850738507485075850768507785078850798508085081850828508385084850858508685087850888508985090850918509285093850948509585096850978509885099851008510185102851038510485105851068510785108851098511085111851128511385114851158511685117851188511985120851218512285123851248512585126851278512885129851308513185132851338513485135851368513785138851398514085141851428514385144851458514685147851488514985150851518515285153851548515585156851578515885159851608516185162851638516485165851668516785168851698517085171851728517385174851758517685177851788517985180851818518285183851848518585186851878518885189851908519185192851938519485195851968519785198851998520085201852028520385204852058520685207852088520985210852118521285213852148521585216852178521885219852208522185222852238522485225852268522785228852298523085231852328523385234852358523685237852388523985240852418524285243852448524585246852478524885249852508525185252852538525485255852568525785258852598526085261852628526385264852658526685267852688526985270852718527285273852748527585276852778527885279852808528185282852838528485285852868528785288852898529085291852928529385294852958529685297852988529985300853018530285303853048530585306853078530885309853108531185312853138531485315853168531785318853198532085321853228532385324853258532685327853288532985330853318533285333853348533585336853378533885339853408534185342853438534485345853468534785348853498535085351853528535385354853558535685357853588535985360853618536285363853648536585366853678536885369853708537185372853738537485375853768537785378853798538085381853828538385384853858538685387853888538985390853918539285393853948539585396853978539885399854008540185402854038540485405854068540785408854098541085411854128541385414854158541685417854188541985420854218542285423854248542585426854278542885429854308543185432854338543485435854368543785438854398544085441854428544385444854458544685447854488544985450854518545285453854548545585456854578545885459854608546185462854638546485465854668546785468854698547085471854728547385474854758547685477854788547985480854818548285483854848548585486854878548885489854908549185492854938549485495854968549785498854998550085501855028550385504855058550685507855088550985510855118551285513855148551585516855178551885519855208552185522855238552485525855268552785528855298553085531855328553385534855358553685537855388553985540855418554285543855448554585546855478554885549855508555185552855538555485555855568555785558855598556085561855628556385564855658556685567855688556985570855718557285573855748557585576855778557885579855808558185582855838558485585855868558785588855898559085591855928559385594855958559685597855988559985600856018560285603856048560585606856078560885609856108561185612856138561485615856168561785618856198562085621856228562385624856258562685627856288562985630856318563285633856348563585636856378563885639856408564185642856438564485645856468564785648856498565085651856528565385654856558565685657856588565985660856618566285663856648566585666856678566885669856708567185672856738567485675856768567785678856798568085681856828568385684856858568685687856888568985690856918569285693856948569585696856978569885699857008570185702857038570485705857068570785708857098571085711857128571385714857158571685717857188571985720857218572285723857248572585726857278572885729857308573185732857338573485735857368573785738857398574085741857428574385744857458574685747857488574985750857518575285753857548575585756857578575885759857608576185762857638576485765857668576785768857698577085771857728577385774857758577685777857788577985780857818578285783857848578585786857878578885789857908579185792857938579485795857968579785798857998580085801858028580385804858058580685807858088580985810858118581285813858148581585816858178581885819858208582185822858238582485825858268582785828858298583085831858328583385834858358583685837858388583985840858418584285843858448584585846858478584885849858508585185852858538585485855858568585785858858598586085861858628586385864858658586685867858688586985870858718587285873858748587585876858778587885879858808588185882858838588485885858868588785888858898589085891858928589385894858958589685897858988589985900859018590285903859048590585906859078590885909859108591185912859138591485915859168591785918859198592085921859228592385924859258592685927859288592985930859318593285933859348593585936859378593885939859408594185942859438594485945859468594785948859498595085951859528595385954859558595685957859588595985960859618596285963859648596585966859678596885969859708597185972859738597485975859768597785978859798598085981859828598385984859858598685987859888598985990859918599285993859948599585996859978599885999860008600186002860038600486005860068600786008860098601086011860128601386014860158601686017860188601986020860218602286023860248602586026860278602886029860308603186032860338603486035860368603786038860398604086041860428604386044860458604686047860488604986050860518605286053860548605586056860578605886059860608606186062860638606486065860668606786068860698607086071860728607386074860758607686077860788607986080860818608286083860848608586086860878608886089860908609186092860938609486095860968609786098860998610086101861028610386104861058610686107861088610986110861118611286113861148611586116861178611886119861208612186122861238612486125861268612786128861298613086131861328613386134861358613686137861388613986140861418614286143861448614586146861478614886149861508615186152861538615486155861568615786158861598616086161861628616386164861658616686167861688616986170861718617286173861748617586176861778617886179861808618186182861838618486185861868618786188861898619086191861928619386194861958619686197861988619986200862018620286203862048620586206862078620886209862108621186212862138621486215862168621786218862198622086221862228622386224862258622686227862288622986230862318623286233862348623586236862378623886239862408624186242862438624486245862468624786248862498625086251862528625386254862558625686257862588625986260862618626286263862648626586266862678626886269862708627186272862738627486275862768627786278862798628086281862828628386284862858628686287862888628986290862918629286293862948629586296862978629886299863008630186302863038630486305863068630786308863098631086311863128631386314863158631686317863188631986320863218632286323863248632586326863278632886329863308633186332863338633486335863368633786338863398634086341863428634386344863458634686347863488634986350863518635286353863548635586356863578635886359863608636186362863638636486365863668636786368863698637086371863728637386374863758637686377863788637986380863818638286383863848638586386863878638886389863908639186392863938639486395863968639786398863998640086401864028640386404864058640686407864088640986410864118641286413864148641586416864178641886419864208642186422864238642486425864268642786428864298643086431864328643386434864358643686437864388643986440864418644286443864448644586446864478644886449864508645186452864538645486455864568645786458864598646086461864628646386464864658646686467864688646986470864718647286473864748647586476864778647886479864808648186482864838648486485864868648786488864898649086491864928649386494864958649686497864988649986500865018650286503865048650586506865078650886509865108651186512865138651486515865168651786518865198652086521865228652386524865258652686527865288652986530865318653286533865348653586536865378653886539865408654186542865438654486545865468654786548865498655086551865528655386554865558655686557865588655986560865618656286563865648656586566865678656886569865708657186572865738657486575865768657786578865798658086581865828658386584865858658686587865888658986590865918659286593865948659586596865978659886599866008660186602866038660486605866068660786608866098661086611866128661386614866158661686617866188661986620866218662286623866248662586626866278662886629866308663186632866338663486635866368663786638866398664086641866428664386644866458664686647866488664986650866518665286653866548665586656866578665886659866608666186662866638666486665866668666786668866698667086671866728667386674866758667686677866788667986680866818668286683866848668586686866878668886689866908669186692866938669486695866968669786698866998670086701867028670386704867058670686707867088670986710867118671286713867148671586716867178671886719867208672186722867238672486725867268672786728867298673086731867328673386734867358673686737867388673986740867418674286743867448674586746867478674886749867508675186752867538675486755867568675786758867598676086761867628676386764867658676686767867688676986770867718677286773867748677586776867778677886779867808678186782867838678486785867868678786788867898679086791867928679386794867958679686797867988679986800868018680286803868048680586806868078680886809868108681186812868138681486815868168681786818868198682086821868228682386824868258682686827868288682986830868318683286833868348683586836868378683886839868408684186842868438684486845868468684786848868498685086851868528685386854868558685686857868588685986860868618686286863868648686586866868678686886869868708687186872868738687486875868768687786878868798688086881868828688386884868858688686887868888688986890868918689286893868948689586896868978689886899869008690186902869038690486905869068690786908869098691086911869128691386914869158691686917869188691986920869218692286923869248692586926869278692886929869308693186932869338693486935869368693786938869398694086941869428694386944869458694686947869488694986950869518695286953869548695586956869578695886959869608696186962869638696486965869668696786968869698697086971869728697386974869758697686977869788697986980869818698286983869848698586986869878698886989869908699186992869938699486995869968699786998869998700087001870028700387004870058700687007870088700987010870118701287013870148701587016870178701887019870208702187022870238702487025870268702787028870298703087031870328703387034870358703687037870388703987040870418704287043870448704587046870478704887049870508705187052870538705487055870568705787058870598706087061870628706387064870658706687067870688706987070870718707287073870748707587076870778707887079870808708187082870838708487085870868708787088870898709087091870928709387094870958709687097870988709987100871018710287103871048710587106871078710887109871108711187112871138711487115871168711787118871198712087121871228712387124871258712687127871288712987130871318713287133871348713587136871378713887139871408714187142871438714487145871468714787148871498715087151871528715387154871558715687157871588715987160871618716287163871648716587166871678716887169871708717187172871738717487175871768717787178871798718087181871828718387184871858718687187871888718987190871918719287193871948719587196871978719887199872008720187202872038720487205872068720787208872098721087211872128721387214872158721687217872188721987220872218722287223872248722587226872278722887229872308723187232872338723487235872368723787238872398724087241872428724387244872458724687247872488724987250872518725287253872548725587256872578725887259872608726187262872638726487265872668726787268872698727087271872728727387274872758727687277872788727987280872818728287283872848728587286872878728887289872908729187292872938729487295872968729787298872998730087301873028730387304873058730687307873088730987310873118731287313873148731587316873178731887319873208732187322873238732487325873268732787328873298733087331873328733387334873358733687337873388733987340873418734287343873448734587346873478734887349873508735187352873538735487355873568735787358873598736087361873628736387364873658736687367873688736987370873718737287373873748737587376873778737887379873808738187382873838738487385873868738787388873898739087391873928739387394873958739687397873988739987400874018740287403874048740587406874078740887409874108741187412874138741487415874168741787418874198742087421874228742387424874258742687427874288742987430874318743287433874348743587436874378743887439874408744187442874438744487445874468744787448874498745087451874528745387454874558745687457874588745987460874618746287463874648746587466874678746887469874708747187472874738747487475874768747787478874798748087481874828748387484874858748687487874888748987490874918749287493874948749587496874978749887499875008750187502875038750487505875068750787508875098751087511875128751387514875158751687517875188751987520875218752287523875248752587526875278752887529875308753187532875338753487535875368753787538875398754087541875428754387544875458754687547875488754987550875518755287553875548755587556875578755887559875608756187562875638756487565875668756787568875698757087571875728757387574875758757687577875788757987580875818758287583875848758587586875878758887589875908759187592875938759487595875968759787598875998760087601876028760387604876058760687607876088760987610876118761287613876148761587616876178761887619876208762187622876238762487625876268762787628876298763087631876328763387634876358763687637876388763987640876418764287643876448764587646876478764887649876508765187652876538765487655876568765787658876598766087661876628766387664876658766687667876688766987670876718767287673876748767587676876778767887679876808768187682876838768487685876868768787688876898769087691876928769387694876958769687697876988769987700877018770287703877048770587706877078770887709877108771187712877138771487715877168771787718877198772087721877228772387724877258772687727877288772987730877318773287733877348773587736877378773887739877408774187742877438774487745877468774787748877498775087751877528775387754877558775687757877588775987760877618776287763877648776587766877678776887769877708777187772877738777487775877768777787778877798778087781877828778387784877858778687787877888778987790877918779287793877948779587796877978779887799878008780187802878038780487805878068780787808878098781087811878128781387814878158781687817878188781987820878218782287823878248782587826878278782887829878308783187832878338783487835878368783787838878398784087841878428784387844878458784687847878488784987850878518785287853878548785587856878578785887859878608786187862878638786487865878668786787868878698787087871878728787387874878758787687877878788787987880878818788287883878848788587886878878788887889878908789187892878938789487895878968789787898878998790087901879028790387904879058790687907879088790987910879118791287913879148791587916879178791887919879208792187922879238792487925879268792787928879298793087931879328793387934879358793687937879388793987940879418794287943879448794587946879478794887949879508795187952879538795487955879568795787958879598796087961879628796387964879658796687967879688796987970879718797287973879748797587976879778797887979879808798187982879838798487985879868798787988879898799087991879928799387994879958799687997879988799988000880018800288003880048800588006880078800888009880108801188012880138801488015880168801788018880198802088021880228802388024880258802688027880288802988030880318803288033880348803588036880378803888039880408804188042880438804488045880468804788048880498805088051880528805388054880558805688057880588805988060880618806288063880648806588066880678806888069880708807188072880738807488075880768807788078880798808088081880828808388084880858808688087880888808988090880918809288093880948809588096880978809888099881008810188102881038810488105881068810788108881098811088111881128811388114881158811688117881188811988120881218812288123881248812588126881278812888129881308813188132881338813488135881368813788138881398814088141881428814388144881458814688147881488814988150881518815288153881548815588156881578815888159881608816188162881638816488165881668816788168881698817088171881728817388174881758817688177881788817988180881818818288183881848818588186881878818888189881908819188192881938819488195881968819788198881998820088201882028820388204882058820688207882088820988210882118821288213882148821588216882178821888219882208822188222882238822488225882268822788228882298823088231882328823388234882358823688237882388823988240882418824288243882448824588246882478824888249882508825188252882538825488255882568825788258882598826088261882628826388264882658826688267882688826988270882718827288273882748827588276882778827888279882808828188282882838828488285882868828788288882898829088291882928829388294882958829688297882988829988300883018830288303883048830588306883078830888309883108831188312883138831488315883168831788318883198832088321883228832388324883258832688327883288832988330883318833288333883348833588336883378833888339883408834188342883438834488345883468834788348883498835088351883528835388354883558835688357883588835988360883618836288363883648836588366883678836888369883708837188372883738837488375883768837788378883798838088381883828838388384883858838688387883888838988390883918839288393883948839588396883978839888399884008840188402884038840488405884068840788408884098841088411884128841388414884158841688417884188841988420884218842288423884248842588426884278842888429884308843188432884338843488435884368843788438884398844088441884428844388444884458844688447884488844988450884518845288453884548845588456884578845888459884608846188462884638846488465884668846788468884698847088471884728847388474884758847688477884788847988480884818848288483884848848588486884878848888489884908849188492884938849488495884968849788498884998850088501885028850388504885058850688507885088850988510885118851288513885148851588516885178851888519885208852188522885238852488525885268852788528885298853088531885328853388534885358853688537885388853988540885418854288543885448854588546885478854888549885508855188552885538855488555885568855788558885598856088561885628856388564885658856688567885688856988570885718857288573885748857588576885778857888579885808858188582885838858488585885868858788588885898859088591885928859388594885958859688597885988859988600886018860288603886048860588606886078860888609886108861188612886138861488615886168861788618886198862088621886228862388624886258862688627886288862988630886318863288633886348863588636886378863888639886408864188642886438864488645886468864788648886498865088651886528865388654886558865688657886588865988660886618866288663886648866588666886678866888669886708867188672886738867488675886768867788678886798868088681886828868388684886858868688687886888868988690886918869288693886948869588696886978869888699887008870188702887038870488705887068870788708887098871088711887128871388714887158871688717887188871988720887218872288723887248872588726887278872888729887308873188732887338873488735887368873788738887398874088741887428874388744887458874688747887488874988750887518875288753887548875588756887578875888759887608876188762887638876488765887668876788768887698877088771887728877388774887758877688777887788877988780887818878288783887848878588786887878878888789887908879188792887938879488795887968879788798887998880088801888028880388804888058880688807888088880988810888118881288813888148881588816888178881888819888208882188822888238882488825888268882788828888298883088831888328883388834888358883688837888388883988840888418884288843888448884588846888478884888849888508885188852888538885488855888568885788858888598886088861888628886388864888658886688867888688886988870888718887288873888748887588876888778887888879888808888188882888838888488885888868888788888888898889088891888928889388894888958889688897888988889988900889018890288903889048890588906889078890888909889108891188912889138891488915889168891788918889198892088921889228892388924889258892688927889288892988930889318893288933889348893588936889378893888939889408894188942889438894488945889468894788948889498895088951889528895388954889558895688957889588895988960889618896288963889648896588966889678896888969889708897188972889738897488975889768897788978889798898088981889828898388984889858898688987889888898988990889918899288993889948899588996889978899888999890008900189002890038900489005890068900789008890098901089011890128901389014890158901689017890188901989020890218902289023890248902589026890278902889029890308903189032890338903489035890368903789038890398904089041890428904389044890458904689047890488904989050890518905289053890548905589056890578905889059890608906189062890638906489065890668906789068890698907089071890728907389074890758907689077890788907989080890818908289083890848908589086890878908889089890908909189092890938909489095890968909789098890998910089101891028910389104891058910689107891088910989110891118911289113891148911589116891178911889119891208912189122891238912489125891268912789128891298913089131891328913389134891358913689137891388913989140891418914289143891448914589146891478914889149891508915189152891538915489155891568915789158891598916089161891628916389164891658916689167891688916989170891718917289173891748917589176891778917889179891808918189182891838918489185891868918789188891898919089191891928919389194891958919689197891988919989200892018920289203892048920589206892078920889209892108921189212892138921489215892168921789218892198922089221892228922389224892258922689227892288922989230892318923289233892348923589236892378923889239892408924189242892438924489245892468924789248892498925089251892528925389254892558925689257892588925989260892618926289263892648926589266892678926889269892708927189272892738927489275892768927789278892798928089281892828928389284892858928689287892888928989290892918929289293892948929589296892978929889299893008930189302893038930489305893068930789308893098931089311893128931389314893158931689317893188931989320893218932289323893248932589326893278932889329893308933189332893338933489335893368933789338893398934089341893428934389344893458934689347893488934989350893518935289353893548935589356893578935889359893608936189362893638936489365893668936789368893698937089371893728937389374893758937689377893788937989380893818938289383893848938589386893878938889389893908939189392893938939489395893968939789398893998940089401894028940389404894058940689407894088940989410894118941289413894148941589416894178941889419894208942189422894238942489425894268942789428894298943089431894328943389434894358943689437894388943989440894418944289443894448944589446894478944889449894508945189452894538945489455894568945789458894598946089461894628946389464894658946689467894688946989470894718947289473894748947589476894778947889479894808948189482894838948489485894868948789488894898949089491894928949389494894958949689497894988949989500895018950289503895048950589506895078950889509895108951189512895138951489515895168951789518895198952089521895228952389524895258952689527895288952989530895318953289533895348953589536895378953889539895408954189542895438954489545895468954789548895498955089551895528955389554895558955689557895588955989560895618956289563895648956589566895678956889569895708957189572895738957489575895768957789578895798958089581895828958389584895858958689587895888958989590895918959289593895948959589596895978959889599896008960189602896038960489605896068960789608896098961089611896128961389614896158961689617896188961989620896218962289623896248962589626896278962889629896308963189632896338963489635896368963789638896398964089641896428964389644896458964689647896488964989650896518965289653896548965589656896578965889659896608966189662896638966489665896668966789668896698967089671896728967389674896758967689677896788967989680896818968289683896848968589686896878968889689896908969189692896938969489695896968969789698896998970089701897028970389704897058970689707897088970989710897118971289713897148971589716897178971889719897208972189722897238972489725897268972789728897298973089731897328973389734897358973689737897388973989740897418974289743897448974589746897478974889749897508975189752897538975489755897568975789758897598976089761897628976389764897658976689767897688976989770897718977289773897748977589776897778977889779897808978189782897838978489785897868978789788897898979089791897928979389794897958979689797897988979989800898018980289803898048980589806898078980889809898108981189812898138981489815898168981789818898198982089821898228982389824898258982689827898288982989830898318983289833898348983589836898378983889839898408984189842898438984489845898468984789848898498985089851898528985389854898558985689857898588985989860898618986289863898648986589866898678986889869898708987189872898738987489875898768987789878898798988089881898828988389884898858988689887898888988989890898918989289893898948989589896898978989889899899008990189902899038990489905899068990789908899098991089911899128991389914899158991689917899188991989920899218992289923899248992589926899278992889929899308993189932899338993489935899368993789938899398994089941899428994389944899458994689947899488994989950899518995289953899548995589956899578995889959899608996189962899638996489965899668996789968899698997089971899728997389974899758997689977899788997989980899818998289983899848998589986899878998889989899908999189992899938999489995899968999789998899999000090001900029000390004900059000690007900089000990010900119001290013900149001590016900179001890019900209002190022900239002490025900269002790028900299003090031900329003390034900359003690037900389003990040900419004290043900449004590046900479004890049900509005190052900539005490055900569005790058900599006090061900629006390064900659006690067900689006990070900719007290073900749007590076900779007890079900809008190082900839008490085900869008790088900899009090091900929009390094900959009690097900989009990100901019010290103901049010590106901079010890109901109011190112901139011490115901169011790118901199012090121901229012390124901259012690127901289012990130901319013290133901349013590136901379013890139901409014190142901439014490145901469014790148901499015090151901529015390154901559015690157901589015990160901619016290163901649016590166901679016890169901709017190172901739017490175901769017790178901799018090181901829018390184901859018690187901889018990190901919019290193901949019590196901979019890199902009020190202902039020490205902069020790208902099021090211902129021390214902159021690217902189021990220902219022290223902249022590226902279022890229902309023190232902339023490235902369023790238902399024090241902429024390244902459024690247902489024990250902519025290253902549025590256902579025890259902609026190262902639026490265902669026790268902699027090271902729027390274902759027690277902789027990280902819028290283902849028590286902879028890289902909029190292902939029490295902969029790298902999030090301903029030390304903059030690307903089030990310903119031290313903149031590316903179031890319903209032190322903239032490325903269032790328903299033090331903329033390334903359033690337903389033990340903419034290343903449034590346903479034890349903509035190352903539035490355903569035790358903599036090361903629036390364903659036690367903689036990370903719037290373903749037590376903779037890379903809038190382903839038490385903869038790388903899039090391903929039390394903959039690397903989039990400904019040290403904049040590406904079040890409904109041190412904139041490415904169041790418904199042090421904229042390424904259042690427904289042990430904319043290433904349043590436904379043890439904409044190442904439044490445904469044790448904499045090451904529045390454904559045690457904589045990460904619046290463904649046590466904679046890469904709047190472904739047490475904769047790478904799048090481904829048390484904859048690487904889048990490904919049290493904949049590496904979049890499905009050190502905039050490505905069050790508905099051090511905129051390514905159051690517905189051990520905219052290523905249052590526905279052890529905309053190532905339053490535905369053790538905399054090541905429054390544905459054690547905489054990550905519055290553905549055590556905579055890559905609056190562905639056490565905669056790568905699057090571905729057390574905759057690577905789057990580905819058290583905849058590586905879058890589905909059190592905939059490595905969059790598905999060090601906029060390604906059060690607906089060990610906119061290613906149061590616906179061890619906209062190622906239062490625906269062790628906299063090631906329063390634906359063690637906389063990640906419064290643906449064590646906479064890649906509065190652906539065490655906569065790658906599066090661906629066390664906659066690667906689066990670906719067290673906749067590676906779067890679906809068190682906839068490685906869068790688906899069090691906929069390694906959069690697906989069990700907019070290703907049070590706907079070890709907109071190712907139071490715907169071790718907199072090721907229072390724907259072690727907289072990730907319073290733907349073590736907379073890739907409074190742907439074490745907469074790748907499075090751907529075390754907559075690757907589075990760907619076290763907649076590766907679076890769907709077190772907739077490775907769077790778907799078090781907829078390784907859078690787907889078990790907919079290793907949079590796907979079890799908009080190802908039080490805908069080790808908099081090811908129081390814908159081690817908189081990820908219082290823908249082590826908279082890829908309083190832908339083490835908369083790838908399084090841908429084390844908459084690847908489084990850908519085290853908549085590856908579085890859908609086190862908639086490865908669086790868908699087090871908729087390874908759087690877908789087990880908819088290883908849088590886908879088890889908909089190892908939089490895908969089790898908999090090901909029090390904909059090690907909089090990910909119091290913909149091590916909179091890919909209092190922909239092490925909269092790928909299093090931909329093390934909359093690937909389093990940909419094290943909449094590946909479094890949909509095190952909539095490955909569095790958909599096090961909629096390964909659096690967909689096990970909719097290973909749097590976909779097890979909809098190982909839098490985909869098790988909899099090991909929099390994909959099690997909989099991000910019100291003910049100591006910079100891009910109101191012910139101491015910169101791018910199102091021910229102391024910259102691027910289102991030910319103291033910349103591036910379103891039910409104191042910439104491045910469104791048910499105091051910529105391054910559105691057910589105991060910619106291063910649106591066910679106891069910709107191072910739107491075910769107791078910799108091081910829108391084910859108691087910889108991090910919109291093910949109591096910979109891099911009110191102911039110491105911069110791108911099111091111911129111391114911159111691117911189111991120911219112291123911249112591126911279112891129911309113191132911339113491135911369113791138911399114091141911429114391144911459114691147911489114991150911519115291153911549115591156911579115891159911609116191162911639116491165911669116791168911699117091171911729117391174911759117691177911789117991180911819118291183911849118591186911879118891189911909119191192911939119491195911969119791198911999120091201912029120391204912059120691207912089120991210912119121291213912149121591216912179121891219912209122191222912239122491225912269122791228912299123091231912329123391234912359123691237912389123991240912419124291243912449124591246912479124891249912509125191252912539125491255912569125791258912599126091261912629126391264912659126691267912689126991270912719127291273912749127591276912779127891279912809128191282912839128491285912869128791288912899129091291912929129391294912959129691297912989129991300913019130291303913049130591306913079130891309913109131191312913139131491315913169131791318913199132091321913229132391324913259132691327913289132991330913319133291333913349133591336913379133891339913409134191342913439134491345913469134791348913499135091351913529135391354913559135691357913589135991360913619136291363913649136591366913679136891369913709137191372913739137491375913769137791378913799138091381913829138391384913859138691387913889138991390913919139291393913949139591396913979139891399914009140191402914039140491405914069140791408914099141091411914129141391414914159141691417914189141991420914219142291423914249142591426914279142891429914309143191432914339143491435914369143791438914399144091441914429144391444914459144691447914489144991450914519145291453914549145591456914579145891459914609146191462914639146491465914669146791468914699147091471914729147391474914759147691477914789147991480914819148291483914849148591486914879148891489914909149191492914939149491495914969149791498914999150091501915029150391504915059150691507915089150991510915119151291513915149151591516915179151891519915209152191522915239152491525915269152791528915299153091531915329153391534915359153691537915389153991540915419154291543915449154591546915479154891549915509155191552915539155491555915569155791558915599156091561915629156391564915659156691567915689156991570915719157291573915749157591576915779157891579915809158191582915839158491585915869158791588915899159091591915929159391594915959159691597915989159991600916019160291603916049160591606916079160891609916109161191612916139161491615916169161791618916199162091621916229162391624916259162691627916289162991630916319163291633916349163591636916379163891639916409164191642916439164491645916469164791648916499165091651916529165391654916559165691657916589165991660916619166291663916649166591666916679166891669916709167191672916739167491675916769167791678916799168091681916829168391684916859168691687916889168991690916919169291693916949169591696916979169891699917009170191702917039170491705917069170791708917099171091711917129171391714917159171691717917189171991720917219172291723917249172591726917279172891729917309173191732917339173491735917369173791738917399174091741917429174391744917459174691747917489174991750917519175291753917549175591756917579175891759917609176191762917639176491765917669176791768917699177091771917729177391774917759177691777917789177991780917819178291783917849178591786917879178891789917909179191792917939179491795917969179791798917999180091801918029180391804918059180691807918089180991810918119181291813918149181591816918179181891819918209182191822918239182491825918269182791828918299183091831918329183391834918359183691837918389183991840918419184291843918449184591846918479184891849918509185191852918539185491855918569185791858918599186091861918629186391864918659186691867918689186991870918719187291873918749187591876918779187891879918809188191882918839188491885918869188791888918899189091891918929189391894918959189691897918989189991900919019190291903919049190591906919079190891909919109191191912919139191491915919169191791918919199192091921919229192391924919259192691927919289192991930919319193291933919349193591936919379193891939919409194191942919439194491945919469194791948919499195091951919529195391954919559195691957919589195991960919619196291963919649196591966919679196891969919709197191972919739197491975919769197791978919799198091981919829198391984919859198691987919889198991990919919199291993919949199591996919979199891999920009200192002920039200492005920069200792008920099201092011920129201392014920159201692017920189201992020920219202292023920249202592026920279202892029920309203192032920339203492035920369203792038920399204092041920429204392044920459204692047920489204992050920519205292053920549205592056920579205892059920609206192062920639206492065920669206792068920699207092071920729207392074920759207692077920789207992080920819208292083920849208592086920879208892089920909209192092920939209492095920969209792098920999210092101921029210392104921059210692107921089210992110921119211292113921149211592116921179211892119921209212192122921239212492125921269212792128921299213092131921329213392134921359213692137921389213992140921419214292143921449214592146921479214892149921509215192152921539215492155921569215792158921599216092161921629216392164921659216692167921689216992170921719217292173921749217592176921779217892179921809218192182921839218492185921869218792188921899219092191921929219392194921959219692197921989219992200922019220292203922049220592206922079220892209922109221192212922139221492215922169221792218922199222092221922229222392224922259222692227922289222992230922319223292233922349223592236922379223892239922409224192242922439224492245922469224792248922499225092251922529225392254922559225692257922589225992260922619226292263922649226592266922679226892269922709227192272922739227492275922769227792278922799228092281922829228392284922859228692287922889228992290922919229292293922949229592296922979229892299923009230192302923039230492305923069230792308923099231092311923129231392314923159231692317923189231992320923219232292323923249232592326923279232892329923309233192332923339233492335923369233792338923399234092341923429234392344923459234692347923489234992350923519235292353923549235592356923579235892359923609236192362923639236492365923669236792368923699237092371923729237392374923759237692377923789237992380923819238292383923849238592386923879238892389923909239192392923939239492395923969239792398923999240092401924029240392404924059240692407924089240992410924119241292413924149241592416924179241892419924209242192422924239242492425924269242792428924299243092431924329243392434924359243692437924389243992440924419244292443924449244592446924479244892449924509245192452924539245492455924569245792458924599246092461924629246392464924659246692467924689246992470924719247292473924749247592476924779247892479924809248192482924839248492485924869248792488924899249092491924929249392494924959249692497924989249992500925019250292503925049250592506925079250892509925109251192512925139251492515925169251792518925199252092521925229252392524925259252692527925289252992530925319253292533925349253592536925379253892539925409254192542925439254492545925469254792548925499255092551925529255392554925559255692557925589255992560925619256292563925649256592566925679256892569925709257192572925739257492575925769257792578925799258092581925829258392584925859258692587925889258992590925919259292593925949259592596925979259892599926009260192602926039260492605926069260792608926099261092611926129261392614926159261692617926189261992620926219262292623926249262592626926279262892629926309263192632926339263492635926369263792638926399264092641926429264392644926459264692647926489264992650926519265292653926549265592656926579265892659926609266192662926639266492665926669266792668926699267092671926729267392674926759267692677926789267992680926819268292683926849268592686926879268892689926909269192692926939269492695926969269792698926999270092701927029270392704927059270692707927089270992710927119271292713927149271592716927179271892719927209272192722927239272492725927269272792728927299273092731927329273392734927359273692737927389273992740927419274292743927449274592746927479274892749927509275192752927539275492755927569275792758927599276092761927629276392764927659276692767927689276992770927719277292773927749277592776927779277892779927809278192782927839278492785927869278792788927899279092791927929279392794927959279692797927989279992800928019280292803928049280592806928079280892809928109281192812928139281492815928169281792818928199282092821928229282392824928259282692827928289282992830928319283292833928349283592836928379283892839928409284192842928439284492845928469284792848928499285092851928529285392854928559285692857928589285992860928619286292863928649286592866928679286892869928709287192872928739287492875928769287792878928799288092881928829288392884928859288692887928889288992890928919289292893928949289592896928979289892899929009290192902929039290492905929069290792908929099291092911929129291392914929159291692917929189291992920929219292292923929249292592926929279292892929929309293192932929339293492935929369293792938929399294092941929429294392944929459294692947929489294992950929519295292953929549295592956929579295892959929609296192962929639296492965929669296792968929699297092971929729297392974929759297692977929789297992980929819298292983929849298592986929879298892989929909299192992929939299492995929969299792998929999300093001930029300393004930059300693007930089300993010930119301293013930149301593016930179301893019930209302193022930239302493025930269302793028930299303093031930329303393034930359303693037930389303993040930419304293043930449304593046930479304893049930509305193052930539305493055930569305793058930599306093061930629306393064930659306693067930689306993070930719307293073930749307593076930779307893079930809308193082930839308493085930869308793088930899309093091930929309393094930959309693097930989309993100931019310293103931049310593106931079310893109931109311193112931139311493115931169311793118931199312093121931229312393124931259312693127931289312993130931319313293133931349313593136931379313893139931409314193142931439314493145931469314793148931499315093151931529315393154931559315693157931589315993160931619316293163931649316593166931679316893169931709317193172931739317493175931769317793178931799318093181931829318393184931859318693187931889318993190931919319293193931949319593196931979319893199932009320193202932039320493205932069320793208932099321093211932129321393214932159321693217932189321993220932219322293223932249322593226932279322893229932309323193232932339323493235932369323793238932399324093241932429324393244932459324693247932489324993250932519325293253932549325593256932579325893259932609326193262932639326493265932669326793268932699327093271932729327393274932759327693277932789327993280932819328293283932849328593286932879328893289932909329193292932939329493295932969329793298932999330093301933029330393304933059330693307933089330993310933119331293313933149331593316933179331893319933209332193322933239332493325933269332793328933299333093331933329333393334933359333693337933389333993340933419334293343933449334593346933479334893349933509335193352933539335493355933569335793358933599336093361933629336393364933659336693367933689336993370933719337293373933749337593376933779337893379933809338193382933839338493385933869338793388933899339093391933929339393394933959339693397933989339993400934019340293403934049340593406934079340893409934109341193412934139341493415934169341793418934199342093421934229342393424934259342693427934289342993430934319343293433934349343593436934379343893439934409344193442934439344493445934469344793448934499345093451934529345393454934559345693457934589345993460934619346293463934649346593466934679346893469934709347193472934739347493475934769347793478934799348093481934829348393484934859348693487934889348993490934919349293493934949349593496934979349893499935009350193502935039350493505935069350793508935099351093511935129351393514935159351693517935189351993520935219352293523935249352593526935279352893529935309353193532935339353493535935369353793538935399354093541935429354393544935459354693547935489354993550935519355293553935549355593556935579355893559935609356193562935639356493565935669356793568935699357093571935729357393574935759357693577935789357993580935819358293583935849358593586935879358893589935909359193592935939359493595935969359793598935999360093601936029360393604936059360693607936089360993610936119361293613936149361593616936179361893619936209362193622936239362493625936269362793628936299363093631936329363393634936359363693637936389363993640936419364293643936449364593646936479364893649936509365193652936539365493655936569365793658936599366093661936629366393664936659366693667936689366993670936719367293673936749367593676936779367893679936809368193682936839368493685936869368793688936899369093691936929369393694936959369693697936989369993700937019370293703937049370593706937079370893709937109371193712937139371493715937169371793718937199372093721937229372393724937259372693727937289372993730937319373293733937349373593736937379373893739937409374193742937439374493745937469374793748937499375093751937529375393754937559375693757937589375993760937619376293763937649376593766937679376893769937709377193772937739377493775937769377793778937799378093781937829378393784937859378693787937889378993790937919379293793937949379593796937979379893799938009380193802938039380493805938069380793808938099381093811938129381393814938159381693817938189381993820938219382293823938249382593826938279382893829938309383193832938339383493835938369383793838938399384093841938429384393844938459384693847938489384993850938519385293853938549385593856938579385893859938609386193862938639386493865938669386793868938699387093871938729387393874938759387693877938789387993880938819388293883938849388593886938879388893889938909389193892938939389493895938969389793898938999390093901939029390393904939059390693907939089390993910939119391293913939149391593916939179391893919939209392193922939239392493925939269392793928939299393093931939329393393934939359393693937939389393993940939419394293943939449394593946939479394893949939509395193952939539395493955939569395793958939599396093961939629396393964939659396693967939689396993970939719397293973939749397593976939779397893979939809398193982939839398493985939869398793988939899399093991939929399393994939959399693997939989399994000940019400294003940049400594006940079400894009940109401194012940139401494015940169401794018940199402094021940229402394024940259402694027940289402994030940319403294033940349403594036940379403894039940409404194042940439404494045940469404794048940499405094051940529405394054940559405694057940589405994060940619406294063940649406594066940679406894069940709407194072940739407494075940769407794078940799408094081940829408394084940859408694087940889408994090940919409294093940949409594096940979409894099941009410194102941039410494105941069410794108941099411094111941129411394114941159411694117941189411994120941219412294123941249412594126941279412894129941309413194132941339413494135941369413794138941399414094141941429414394144941459414694147941489414994150941519415294153941549415594156941579415894159941609416194162941639416494165941669416794168941699417094171941729417394174941759417694177941789417994180941819418294183941849418594186941879418894189941909419194192941939419494195941969419794198941999420094201942029420394204942059420694207942089420994210942119421294213942149421594216942179421894219942209422194222942239422494225942269422794228942299423094231942329423394234942359423694237942389423994240942419424294243942449424594246942479424894249942509425194252942539425494255942569425794258942599426094261942629426394264942659426694267942689426994270942719427294273942749427594276942779427894279942809428194282942839428494285942869428794288942899429094291942929429394294942959429694297942989429994300 |
- ../build/bt6702/stm32bt6702/stm32bt6702.elf: file format elf32-littlearm
- Sections:
- Idx Name Size VMA LMA File off Algn
- 0 .isr_vector 00000188 08020000 08020000 00008000 2**0
- CONTENTS, ALLOC, LOAD, READONLY, DATA
- 1 .text 00025a6c 08020188 08020188 00008188 2**3
- CONTENTS, ALLOC, LOAD, READONLY, CODE
- 2 .ARM 00000008 08045bf4 08045bf4 0002dbf4 2**2
- CONTENTS, ALLOC, LOAD, READONLY, DATA
- 3 .init_array 00000004 08045bfc 08045bfc 0002dbfc 2**2
- CONTENTS, ALLOC, LOAD, DATA
- 4 .fini_array 00000004 08045c00 08045c00 0002dc00 2**2
- CONTENTS, ALLOC, LOAD, DATA
- 5 .data 00000ab4 20000000 08045c04 00030000 2**2
- CONTENTS, ALLOC, LOAD, DATA
- 6 .fill 00079944 080466b8 080466b8 000366b8 2**0
- CONTENTS, ALLOC, LOAD, DATA
- 7 .crc 00000004 080bfffc 080bfffc 000afffc 2**2
- CONTENTS, ALLOC, LOAD, DATA
- 8 .bss 00012f98 20000ab4 080466b8 000b0ab4 2**2
- ALLOC
- 9 ._user_heap_stack 00000200 20013a4c 08059650 000b0ab4 2**0
- ALLOC
- 10 .memory_b1_text 0000f000 10000000 10000000 000b0000 2**0
- ALLOC
- 11 .ARM.attributes 0000002f 00000000 00000000 000b0000 2**0
- CONTENTS, READONLY
- 12 .debug_info 00055307 00000000 00000000 000b002f 2**0
- CONTENTS, READONLY, DEBUGGING
- 13 .debug_abbrev 0000d6d4 00000000 00000000 00105336 2**0
- CONTENTS, READONLY, DEBUGGING
- 14 .debug_loc 0002810c 00000000 00000000 00112a0a 2**0
- CONTENTS, READONLY, DEBUGGING
- 15 .debug_aranges 000032e0 00000000 00000000 0013ab18 2**3
- CONTENTS, READONLY, DEBUGGING
- 16 .debug_ranges 00003c40 00000000 00000000 0013ddf8 2**3
- CONTENTS, READONLY, DEBUGGING
- 17 .debug_macro 00021afa 00000000 00000000 00141a38 2**0
- CONTENTS, READONLY, DEBUGGING
- 18 .debug_line 00028106 00000000 00000000 00163532 2**0
- CONTENTS, READONLY, DEBUGGING
- 19 .debug_str 000823cc 00000000 00000000 0018b638 2**0
- CONTENTS, READONLY, DEBUGGING
- 20 .comment 00000030 00000000 00000000 0020da04 2**0
- CONTENTS, READONLY
- 21 .debug_frame 000089c0 00000000 00000000 0020da34 2**2
- CONTENTS, READONLY, DEBUGGING
- Disassembly of section .text:
- 08020188 <deregister_tm_clones>:
- 8020188: b508 push {r3, lr}
- 802018a: f640 20b4 movw r0, #2740 ; 0xab4
- 802018e: 4b07 ldr r3, [pc, #28] ; (80201ac <deregister_tm_clones+0x24>)
- 8020190: f2c2 0000 movt r0, #8192 ; 0x2000
- 8020194: 1a1b subs r3, r3, r0
- 8020196: 2b06 cmp r3, #6
- 8020198: d800 bhi.n 802019c <deregister_tm_clones+0x14>
- 802019a: bd08 pop {r3, pc}
- 802019c: f240 0300 movw r3, #0
- 80201a0: f2c0 0300 movt r3, #0
- 80201a4: 2b00 cmp r3, #0
- 80201a6: d0f8 beq.n 802019a <deregister_tm_clones+0x12>
- 80201a8: 4798 blx r3
- 80201aa: e7f6 b.n 802019a <deregister_tm_clones+0x12>
- 80201ac: 20000ab7 .word 0x20000ab7
- 080201b0 <register_tm_clones>:
- 80201b0: b508 push {r3, lr}
- 80201b2: f640 20b4 movw r0, #2740 ; 0xab4
- 80201b6: f640 23b4 movw r3, #2740 ; 0xab4
- 80201ba: f2c2 0000 movt r0, #8192 ; 0x2000
- 80201be: f2c2 0300 movt r3, #8192 ; 0x2000
- 80201c2: 1a1b subs r3, r3, r0
- 80201c4: 109b asrs r3, r3, #2
- 80201c6: eb03 73d3 add.w r3, r3, r3, lsr #31
- 80201ca: 1059 asrs r1, r3, #1
- 80201cc: d100 bne.n 80201d0 <register_tm_clones+0x20>
- 80201ce: bd08 pop {r3, pc}
- 80201d0: f240 0200 movw r2, #0
- 80201d4: f2c0 0200 movt r2, #0
- 80201d8: 2a00 cmp r2, #0
- 80201da: d0f8 beq.n 80201ce <register_tm_clones+0x1e>
- 80201dc: 4790 blx r2
- 80201de: e7f6 b.n 80201ce <register_tm_clones+0x1e>
- 080201e0 <__do_global_dtors_aux>:
- 80201e0: b510 push {r4, lr}
- 80201e2: f640 24b4 movw r4, #2740 ; 0xab4
- 80201e6: f2c2 0400 movt r4, #8192 ; 0x2000
- 80201ea: 7823 ldrb r3, [r4, #0]
- 80201ec: b973 cbnz r3, 802020c <__do_global_dtors_aux+0x2c>
- 80201ee: f7ff ffcb bl 8020188 <deregister_tm_clones>
- 80201f2: f240 0300 movw r3, #0
- 80201f6: f2c0 0300 movt r3, #0
- 80201fa: b12b cbz r3, 8020208 <__do_global_dtors_aux+0x28>
- 80201fc: f645 30dc movw r0, #23516 ; 0x5bdc
- 8020200: f6c0 0004 movt r0, #2052 ; 0x804
- 8020204: f3af 8000 nop.w
- 8020208: 2301 movs r3, #1
- 802020a: 7023 strb r3, [r4, #0]
- 802020c: bd10 pop {r4, pc}
- 802020e: bf00 nop
- 08020210 <frame_dummy>:
- 8020210: b508 push {r3, lr}
- 8020212: f240 0300 movw r3, #0
- 8020216: f2c0 0300 movt r3, #0
- 802021a: b14b cbz r3, 8020230 <frame_dummy+0x20>
- 802021c: f645 30dc movw r0, #23516 ; 0x5bdc
- 8020220: f640 21b8 movw r1, #2744 ; 0xab8
- 8020224: f6c0 0004 movt r0, #2052 ; 0x804
- 8020228: f2c2 0100 movt r1, #8192 ; 0x2000
- 802022c: f3af 8000 nop.w
- 8020230: f640 20b4 movw r0, #2740 ; 0xab4
- 8020234: f2c2 0000 movt r0, #8192 ; 0x2000
- 8020238: 6803 ldr r3, [r0, #0]
- 802023a: b12b cbz r3, 8020248 <frame_dummy+0x38>
- 802023c: f240 0300 movw r3, #0
- 8020240: f2c0 0300 movt r3, #0
- 8020244: b103 cbz r3, 8020248 <frame_dummy+0x38>
- 8020246: 4798 blx r3
- 8020248: e8bd 4008 ldmia.w sp!, {r3, lr}
- 802024c: f7ff bfb0 b.w 80201b0 <register_tm_clones>
- 08020250 <__aeabi_drsub>:
- 8020250: f081 4100 eor.w r1, r1, #2147483648 ; 0x80000000
- 8020254: e002 b.n 802025c <__adddf3>
- 8020256: bf00 nop
- 08020258 <__aeabi_dsub>:
- 8020258: f083 4300 eor.w r3, r3, #2147483648 ; 0x80000000
- 0802025c <__adddf3>:
- 802025c: b530 push {r4, r5, lr}
- 802025e: ea4f 0441 mov.w r4, r1, lsl #1
- 8020262: ea4f 0543 mov.w r5, r3, lsl #1
- 8020266: ea94 0f05 teq r4, r5
- 802026a: bf08 it eq
- 802026c: ea90 0f02 teqeq r0, r2
- 8020270: bf1f itttt ne
- 8020272: ea54 0c00 orrsne.w ip, r4, r0
- 8020276: ea55 0c02 orrsne.w ip, r5, r2
- 802027a: ea7f 5c64 mvnsne.w ip, r4, asr #21
- 802027e: ea7f 5c65 mvnsne.w ip, r5, asr #21
- 8020282: f000 80e2 beq.w 802044a <__adddf3+0x1ee>
- 8020286: ea4f 5454 mov.w r4, r4, lsr #21
- 802028a: ebd4 5555 rsbs r5, r4, r5, lsr #21
- 802028e: bfb8 it lt
- 8020290: 426d neglt r5, r5
- 8020292: dd0c ble.n 80202ae <__adddf3+0x52>
- 8020294: 442c add r4, r5
- 8020296: ea80 0202 eor.w r2, r0, r2
- 802029a: ea81 0303 eor.w r3, r1, r3
- 802029e: ea82 0000 eor.w r0, r2, r0
- 80202a2: ea83 0101 eor.w r1, r3, r1
- 80202a6: ea80 0202 eor.w r2, r0, r2
- 80202aa: ea81 0303 eor.w r3, r1, r3
- 80202ae: 2d36 cmp r5, #54 ; 0x36
- 80202b0: bf88 it hi
- 80202b2: bd30 pophi {r4, r5, pc}
- 80202b4: f011 4f00 tst.w r1, #2147483648 ; 0x80000000
- 80202b8: ea4f 3101 mov.w r1, r1, lsl #12
- 80202bc: f44f 1c80 mov.w ip, #1048576 ; 0x100000
- 80202c0: ea4c 3111 orr.w r1, ip, r1, lsr #12
- 80202c4: d002 beq.n 80202cc <__adddf3+0x70>
- 80202c6: 4240 negs r0, r0
- 80202c8: eb61 0141 sbc.w r1, r1, r1, lsl #1
- 80202cc: f013 4f00 tst.w r3, #2147483648 ; 0x80000000
- 80202d0: ea4f 3303 mov.w r3, r3, lsl #12
- 80202d4: ea4c 3313 orr.w r3, ip, r3, lsr #12
- 80202d8: d002 beq.n 80202e0 <__adddf3+0x84>
- 80202da: 4252 negs r2, r2
- 80202dc: eb63 0343 sbc.w r3, r3, r3, lsl #1
- 80202e0: ea94 0f05 teq r4, r5
- 80202e4: f000 80a7 beq.w 8020436 <__adddf3+0x1da>
- 80202e8: f1a4 0401 sub.w r4, r4, #1
- 80202ec: f1d5 0e20 rsbs lr, r5, #32
- 80202f0: db0d blt.n 802030e <__adddf3+0xb2>
- 80202f2: fa02 fc0e lsl.w ip, r2, lr
- 80202f6: fa22 f205 lsr.w r2, r2, r5
- 80202fa: 1880 adds r0, r0, r2
- 80202fc: f141 0100 adc.w r1, r1, #0
- 8020300: fa03 f20e lsl.w r2, r3, lr
- 8020304: 1880 adds r0, r0, r2
- 8020306: fa43 f305 asr.w r3, r3, r5
- 802030a: 4159 adcs r1, r3
- 802030c: e00e b.n 802032c <__adddf3+0xd0>
- 802030e: f1a5 0520 sub.w r5, r5, #32
- 8020312: f10e 0e20 add.w lr, lr, #32
- 8020316: 2a01 cmp r2, #1
- 8020318: fa03 fc0e lsl.w ip, r3, lr
- 802031c: bf28 it cs
- 802031e: f04c 0c02 orrcs.w ip, ip, #2
- 8020322: fa43 f305 asr.w r3, r3, r5
- 8020326: 18c0 adds r0, r0, r3
- 8020328: eb51 71e3 adcs.w r1, r1, r3, asr #31
- 802032c: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000
- 8020330: d507 bpl.n 8020342 <__adddf3+0xe6>
- 8020332: f04f 0e00 mov.w lr, #0
- 8020336: f1dc 0c00 rsbs ip, ip, #0
- 802033a: eb7e 0000 sbcs.w r0, lr, r0
- 802033e: eb6e 0101 sbc.w r1, lr, r1
- 8020342: f5b1 1f80 cmp.w r1, #1048576 ; 0x100000
- 8020346: d31b bcc.n 8020380 <__adddf3+0x124>
- 8020348: f5b1 1f00 cmp.w r1, #2097152 ; 0x200000
- 802034c: d30c bcc.n 8020368 <__adddf3+0x10c>
- 802034e: 0849 lsrs r1, r1, #1
- 8020350: ea5f 0030 movs.w r0, r0, rrx
- 8020354: ea4f 0c3c mov.w ip, ip, rrx
- 8020358: f104 0401 add.w r4, r4, #1
- 802035c: ea4f 5244 mov.w r2, r4, lsl #21
- 8020360: f512 0f80 cmn.w r2, #4194304 ; 0x400000
- 8020364: f080 809a bcs.w 802049c <__adddf3+0x240>
- 8020368: f1bc 4f00 cmp.w ip, #2147483648 ; 0x80000000
- 802036c: bf08 it eq
- 802036e: ea5f 0c50 movseq.w ip, r0, lsr #1
- 8020372: f150 0000 adcs.w r0, r0, #0
- 8020376: eb41 5104 adc.w r1, r1, r4, lsl #20
- 802037a: ea41 0105 orr.w r1, r1, r5
- 802037e: bd30 pop {r4, r5, pc}
- 8020380: ea5f 0c4c movs.w ip, ip, lsl #1
- 8020384: 4140 adcs r0, r0
- 8020386: eb41 0101 adc.w r1, r1, r1
- 802038a: f411 1f80 tst.w r1, #1048576 ; 0x100000
- 802038e: f1a4 0401 sub.w r4, r4, #1
- 8020392: d1e9 bne.n 8020368 <__adddf3+0x10c>
- 8020394: f091 0f00 teq r1, #0
- 8020398: bf04 itt eq
- 802039a: 4601 moveq r1, r0
- 802039c: 2000 moveq r0, #0
- 802039e: fab1 f381 clz r3, r1
- 80203a2: bf08 it eq
- 80203a4: 3320 addeq r3, #32
- 80203a6: f1a3 030b sub.w r3, r3, #11
- 80203aa: f1b3 0220 subs.w r2, r3, #32
- 80203ae: da0c bge.n 80203ca <__adddf3+0x16e>
- 80203b0: 320c adds r2, #12
- 80203b2: dd08 ble.n 80203c6 <__adddf3+0x16a>
- 80203b4: f102 0c14 add.w ip, r2, #20
- 80203b8: f1c2 020c rsb r2, r2, #12
- 80203bc: fa01 f00c lsl.w r0, r1, ip
- 80203c0: fa21 f102 lsr.w r1, r1, r2
- 80203c4: e00c b.n 80203e0 <__adddf3+0x184>
- 80203c6: f102 0214 add.w r2, r2, #20
- 80203ca: bfd8 it le
- 80203cc: f1c2 0c20 rsble ip, r2, #32
- 80203d0: fa01 f102 lsl.w r1, r1, r2
- 80203d4: fa20 fc0c lsr.w ip, r0, ip
- 80203d8: bfdc itt le
- 80203da: ea41 010c orrle.w r1, r1, ip
- 80203de: 4090 lslle r0, r2
- 80203e0: 1ae4 subs r4, r4, r3
- 80203e2: bfa2 ittt ge
- 80203e4: eb01 5104 addge.w r1, r1, r4, lsl #20
- 80203e8: 4329 orrge r1, r5
- 80203ea: bd30 popge {r4, r5, pc}
- 80203ec: ea6f 0404 mvn.w r4, r4
- 80203f0: 3c1f subs r4, #31
- 80203f2: da1c bge.n 802042e <__adddf3+0x1d2>
- 80203f4: 340c adds r4, #12
- 80203f6: dc0e bgt.n 8020416 <__adddf3+0x1ba>
- 80203f8: f104 0414 add.w r4, r4, #20
- 80203fc: f1c4 0220 rsb r2, r4, #32
- 8020400: fa20 f004 lsr.w r0, r0, r4
- 8020404: fa01 f302 lsl.w r3, r1, r2
- 8020408: ea40 0003 orr.w r0, r0, r3
- 802040c: fa21 f304 lsr.w r3, r1, r4
- 8020410: ea45 0103 orr.w r1, r5, r3
- 8020414: bd30 pop {r4, r5, pc}
- 8020416: f1c4 040c rsb r4, r4, #12
- 802041a: f1c4 0220 rsb r2, r4, #32
- 802041e: fa20 f002 lsr.w r0, r0, r2
- 8020422: fa01 f304 lsl.w r3, r1, r4
- 8020426: ea40 0003 orr.w r0, r0, r3
- 802042a: 4629 mov r1, r5
- 802042c: bd30 pop {r4, r5, pc}
- 802042e: fa21 f004 lsr.w r0, r1, r4
- 8020432: 4629 mov r1, r5
- 8020434: bd30 pop {r4, r5, pc}
- 8020436: f094 0f00 teq r4, #0
- 802043a: f483 1380 eor.w r3, r3, #1048576 ; 0x100000
- 802043e: bf06 itte eq
- 8020440: f481 1180 eoreq.w r1, r1, #1048576 ; 0x100000
- 8020444: 3401 addeq r4, #1
- 8020446: 3d01 subne r5, #1
- 8020448: e74e b.n 80202e8 <__adddf3+0x8c>
- 802044a: ea7f 5c64 mvns.w ip, r4, asr #21
- 802044e: bf18 it ne
- 8020450: ea7f 5c65 mvnsne.w ip, r5, asr #21
- 8020454: d029 beq.n 80204aa <__adddf3+0x24e>
- 8020456: ea94 0f05 teq r4, r5
- 802045a: bf08 it eq
- 802045c: ea90 0f02 teqeq r0, r2
- 8020460: d005 beq.n 802046e <__adddf3+0x212>
- 8020462: ea54 0c00 orrs.w ip, r4, r0
- 8020466: bf04 itt eq
- 8020468: 4619 moveq r1, r3
- 802046a: 4610 moveq r0, r2
- 802046c: bd30 pop {r4, r5, pc}
- 802046e: ea91 0f03 teq r1, r3
- 8020472: bf1e ittt ne
- 8020474: 2100 movne r1, #0
- 8020476: 2000 movne r0, #0
- 8020478: bd30 popne {r4, r5, pc}
- 802047a: ea5f 5c54 movs.w ip, r4, lsr #21
- 802047e: d105 bne.n 802048c <__adddf3+0x230>
- 8020480: 0040 lsls r0, r0, #1
- 8020482: 4149 adcs r1, r1
- 8020484: bf28 it cs
- 8020486: f041 4100 orrcs.w r1, r1, #2147483648 ; 0x80000000
- 802048a: bd30 pop {r4, r5, pc}
- 802048c: f514 0480 adds.w r4, r4, #4194304 ; 0x400000
- 8020490: bf3c itt cc
- 8020492: f501 1180 addcc.w r1, r1, #1048576 ; 0x100000
- 8020496: bd30 popcc {r4, r5, pc}
- 8020498: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000
- 802049c: f045 41fe orr.w r1, r5, #2130706432 ; 0x7f000000
- 80204a0: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000
- 80204a4: f04f 0000 mov.w r0, #0
- 80204a8: bd30 pop {r4, r5, pc}
- 80204aa: ea7f 5c64 mvns.w ip, r4, asr #21
- 80204ae: bf1a itte ne
- 80204b0: 4619 movne r1, r3
- 80204b2: 4610 movne r0, r2
- 80204b4: ea7f 5c65 mvnseq.w ip, r5, asr #21
- 80204b8: bf1c itt ne
- 80204ba: 460b movne r3, r1
- 80204bc: 4602 movne r2, r0
- 80204be: ea50 3401 orrs.w r4, r0, r1, lsl #12
- 80204c2: bf06 itte eq
- 80204c4: ea52 3503 orrseq.w r5, r2, r3, lsl #12
- 80204c8: ea91 0f03 teqeq r1, r3
- 80204cc: f441 2100 orrne.w r1, r1, #524288 ; 0x80000
- 80204d0: bd30 pop {r4, r5, pc}
- 80204d2: bf00 nop
- 080204d4 <__aeabi_ui2d>:
- 80204d4: f090 0f00 teq r0, #0
- 80204d8: bf04 itt eq
- 80204da: 2100 moveq r1, #0
- 80204dc: 4770 bxeq lr
- 80204de: b530 push {r4, r5, lr}
- 80204e0: f44f 6480 mov.w r4, #1024 ; 0x400
- 80204e4: f104 0432 add.w r4, r4, #50 ; 0x32
- 80204e8: f04f 0500 mov.w r5, #0
- 80204ec: f04f 0100 mov.w r1, #0
- 80204f0: e750 b.n 8020394 <__adddf3+0x138>
- 80204f2: bf00 nop
- 080204f4 <__aeabi_i2d>:
- 80204f4: f090 0f00 teq r0, #0
- 80204f8: bf04 itt eq
- 80204fa: 2100 moveq r1, #0
- 80204fc: 4770 bxeq lr
- 80204fe: b530 push {r4, r5, lr}
- 8020500: f44f 6480 mov.w r4, #1024 ; 0x400
- 8020504: f104 0432 add.w r4, r4, #50 ; 0x32
- 8020508: f010 4500 ands.w r5, r0, #2147483648 ; 0x80000000
- 802050c: bf48 it mi
- 802050e: 4240 negmi r0, r0
- 8020510: f04f 0100 mov.w r1, #0
- 8020514: e73e b.n 8020394 <__adddf3+0x138>
- 8020516: bf00 nop
- 08020518 <__aeabi_f2d>:
- 8020518: 0042 lsls r2, r0, #1
- 802051a: ea4f 01e2 mov.w r1, r2, asr #3
- 802051e: ea4f 0131 mov.w r1, r1, rrx
- 8020522: ea4f 7002 mov.w r0, r2, lsl #28
- 8020526: bf1f itttt ne
- 8020528: f012 437f andsne.w r3, r2, #4278190080 ; 0xff000000
- 802052c: f093 4f7f teqne r3, #4278190080 ; 0xff000000
- 8020530: f081 5160 eorne.w r1, r1, #939524096 ; 0x38000000
- 8020534: 4770 bxne lr
- 8020536: f092 0f00 teq r2, #0
- 802053a: bf14 ite ne
- 802053c: f093 4f7f teqne r3, #4278190080 ; 0xff000000
- 8020540: 4770 bxeq lr
- 8020542: b530 push {r4, r5, lr}
- 8020544: f44f 7460 mov.w r4, #896 ; 0x380
- 8020548: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000
- 802054c: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000
- 8020550: e720 b.n 8020394 <__adddf3+0x138>
- 8020552: bf00 nop
- 08020554 <__aeabi_ul2d>:
- 8020554: ea50 0201 orrs.w r2, r0, r1
- 8020558: bf08 it eq
- 802055a: 4770 bxeq lr
- 802055c: b530 push {r4, r5, lr}
- 802055e: f04f 0500 mov.w r5, #0
- 8020562: e00a b.n 802057a <__aeabi_l2d+0x16>
- 08020564 <__aeabi_l2d>:
- 8020564: ea50 0201 orrs.w r2, r0, r1
- 8020568: bf08 it eq
- 802056a: 4770 bxeq lr
- 802056c: b530 push {r4, r5, lr}
- 802056e: f011 4500 ands.w r5, r1, #2147483648 ; 0x80000000
- 8020572: d502 bpl.n 802057a <__aeabi_l2d+0x16>
- 8020574: 4240 negs r0, r0
- 8020576: eb61 0141 sbc.w r1, r1, r1, lsl #1
- 802057a: f44f 6480 mov.w r4, #1024 ; 0x400
- 802057e: f104 0432 add.w r4, r4, #50 ; 0x32
- 8020582: ea5f 5c91 movs.w ip, r1, lsr #22
- 8020586: f43f aedc beq.w 8020342 <__adddf3+0xe6>
- 802058a: f04f 0203 mov.w r2, #3
- 802058e: ea5f 0cdc movs.w ip, ip, lsr #3
- 8020592: bf18 it ne
- 8020594: 3203 addne r2, #3
- 8020596: ea5f 0cdc movs.w ip, ip, lsr #3
- 802059a: bf18 it ne
- 802059c: 3203 addne r2, #3
- 802059e: eb02 02dc add.w r2, r2, ip, lsr #3
- 80205a2: f1c2 0320 rsb r3, r2, #32
- 80205a6: fa00 fc03 lsl.w ip, r0, r3
- 80205aa: fa20 f002 lsr.w r0, r0, r2
- 80205ae: fa01 fe03 lsl.w lr, r1, r3
- 80205b2: ea40 000e orr.w r0, r0, lr
- 80205b6: fa21 f102 lsr.w r1, r1, r2
- 80205ba: 4414 add r4, r2
- 80205bc: e6c1 b.n 8020342 <__adddf3+0xe6>
- 80205be: bf00 nop
- 080205c0 <__aeabi_dmul>:
- 80205c0: b570 push {r4, r5, r6, lr}
- 80205c2: f04f 0cff mov.w ip, #255 ; 0xff
- 80205c6: f44c 6ce0 orr.w ip, ip, #1792 ; 0x700
- 80205ca: ea1c 5411 ands.w r4, ip, r1, lsr #20
- 80205ce: bf1d ittte ne
- 80205d0: ea1c 5513 andsne.w r5, ip, r3, lsr #20
- 80205d4: ea94 0f0c teqne r4, ip
- 80205d8: ea95 0f0c teqne r5, ip
- 80205dc: f000 f8de bleq 802079c <__aeabi_dmul+0x1dc>
- 80205e0: 442c add r4, r5
- 80205e2: ea81 0603 eor.w r6, r1, r3
- 80205e6: ea21 514c bic.w r1, r1, ip, lsl #21
- 80205ea: ea23 534c bic.w r3, r3, ip, lsl #21
- 80205ee: ea50 3501 orrs.w r5, r0, r1, lsl #12
- 80205f2: bf18 it ne
- 80205f4: ea52 3503 orrsne.w r5, r2, r3, lsl #12
- 80205f8: f441 1180 orr.w r1, r1, #1048576 ; 0x100000
- 80205fc: f443 1380 orr.w r3, r3, #1048576 ; 0x100000
- 8020600: d038 beq.n 8020674 <__aeabi_dmul+0xb4>
- 8020602: fba0 ce02 umull ip, lr, r0, r2
- 8020606: f04f 0500 mov.w r5, #0
- 802060a: fbe1 e502 umlal lr, r5, r1, r2
- 802060e: f006 4200 and.w r2, r6, #2147483648 ; 0x80000000
- 8020612: fbe0 e503 umlal lr, r5, r0, r3
- 8020616: f04f 0600 mov.w r6, #0
- 802061a: fbe1 5603 umlal r5, r6, r1, r3
- 802061e: f09c 0f00 teq ip, #0
- 8020622: bf18 it ne
- 8020624: f04e 0e01 orrne.w lr, lr, #1
- 8020628: f1a4 04ff sub.w r4, r4, #255 ; 0xff
- 802062c: f5b6 7f00 cmp.w r6, #512 ; 0x200
- 8020630: f564 7440 sbc.w r4, r4, #768 ; 0x300
- 8020634: d204 bcs.n 8020640 <__aeabi_dmul+0x80>
- 8020636: ea5f 0e4e movs.w lr, lr, lsl #1
- 802063a: 416d adcs r5, r5
- 802063c: eb46 0606 adc.w r6, r6, r6
- 8020640: ea42 21c6 orr.w r1, r2, r6, lsl #11
- 8020644: ea41 5155 orr.w r1, r1, r5, lsr #21
- 8020648: ea4f 20c5 mov.w r0, r5, lsl #11
- 802064c: ea40 505e orr.w r0, r0, lr, lsr #21
- 8020650: ea4f 2ece mov.w lr, lr, lsl #11
- 8020654: f1b4 0cfd subs.w ip, r4, #253 ; 0xfd
- 8020658: bf88 it hi
- 802065a: f5bc 6fe0 cmphi.w ip, #1792 ; 0x700
- 802065e: d81e bhi.n 802069e <__aeabi_dmul+0xde>
- 8020660: f1be 4f00 cmp.w lr, #2147483648 ; 0x80000000
- 8020664: bf08 it eq
- 8020666: ea5f 0e50 movseq.w lr, r0, lsr #1
- 802066a: f150 0000 adcs.w r0, r0, #0
- 802066e: eb41 5104 adc.w r1, r1, r4, lsl #20
- 8020672: bd70 pop {r4, r5, r6, pc}
- 8020674: f006 4600 and.w r6, r6, #2147483648 ; 0x80000000
- 8020678: ea46 0101 orr.w r1, r6, r1
- 802067c: ea40 0002 orr.w r0, r0, r2
- 8020680: ea81 0103 eor.w r1, r1, r3
- 8020684: ebb4 045c subs.w r4, r4, ip, lsr #1
- 8020688: bfc2 ittt gt
- 802068a: ebd4 050c rsbsgt r5, r4, ip
- 802068e: ea41 5104 orrgt.w r1, r1, r4, lsl #20
- 8020692: bd70 popgt {r4, r5, r6, pc}
- 8020694: f441 1180 orr.w r1, r1, #1048576 ; 0x100000
- 8020698: f04f 0e00 mov.w lr, #0
- 802069c: 3c01 subs r4, #1
- 802069e: f300 80ab bgt.w 80207f8 <__aeabi_dmul+0x238>
- 80206a2: f114 0f36 cmn.w r4, #54 ; 0x36
- 80206a6: bfde ittt le
- 80206a8: 2000 movle r0, #0
- 80206aa: f001 4100 andle.w r1, r1, #2147483648 ; 0x80000000
- 80206ae: bd70 pople {r4, r5, r6, pc}
- 80206b0: f1c4 0400 rsb r4, r4, #0
- 80206b4: 3c20 subs r4, #32
- 80206b6: da35 bge.n 8020724 <__aeabi_dmul+0x164>
- 80206b8: 340c adds r4, #12
- 80206ba: dc1b bgt.n 80206f4 <__aeabi_dmul+0x134>
- 80206bc: f104 0414 add.w r4, r4, #20
- 80206c0: f1c4 0520 rsb r5, r4, #32
- 80206c4: fa00 f305 lsl.w r3, r0, r5
- 80206c8: fa20 f004 lsr.w r0, r0, r4
- 80206cc: fa01 f205 lsl.w r2, r1, r5
- 80206d0: ea40 0002 orr.w r0, r0, r2
- 80206d4: f001 4200 and.w r2, r1, #2147483648 ; 0x80000000
- 80206d8: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000
- 80206dc: eb10 70d3 adds.w r0, r0, r3, lsr #31
- 80206e0: fa21 f604 lsr.w r6, r1, r4
- 80206e4: eb42 0106 adc.w r1, r2, r6
- 80206e8: ea5e 0e43 orrs.w lr, lr, r3, lsl #1
- 80206ec: bf08 it eq
- 80206ee: ea20 70d3 biceq.w r0, r0, r3, lsr #31
- 80206f2: bd70 pop {r4, r5, r6, pc}
- 80206f4: f1c4 040c rsb r4, r4, #12
- 80206f8: f1c4 0520 rsb r5, r4, #32
- 80206fc: fa00 f304 lsl.w r3, r0, r4
- 8020700: fa20 f005 lsr.w r0, r0, r5
- 8020704: fa01 f204 lsl.w r2, r1, r4
- 8020708: ea40 0002 orr.w r0, r0, r2
- 802070c: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000
- 8020710: eb10 70d3 adds.w r0, r0, r3, lsr #31
- 8020714: f141 0100 adc.w r1, r1, #0
- 8020718: ea5e 0e43 orrs.w lr, lr, r3, lsl #1
- 802071c: bf08 it eq
- 802071e: ea20 70d3 biceq.w r0, r0, r3, lsr #31
- 8020722: bd70 pop {r4, r5, r6, pc}
- 8020724: f1c4 0520 rsb r5, r4, #32
- 8020728: fa00 f205 lsl.w r2, r0, r5
- 802072c: ea4e 0e02 orr.w lr, lr, r2
- 8020730: fa20 f304 lsr.w r3, r0, r4
- 8020734: fa01 f205 lsl.w r2, r1, r5
- 8020738: ea43 0302 orr.w r3, r3, r2
- 802073c: fa21 f004 lsr.w r0, r1, r4
- 8020740: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000
- 8020744: fa21 f204 lsr.w r2, r1, r4
- 8020748: ea20 0002 bic.w r0, r0, r2
- 802074c: eb00 70d3 add.w r0, r0, r3, lsr #31
- 8020750: ea5e 0e43 orrs.w lr, lr, r3, lsl #1
- 8020754: bf08 it eq
- 8020756: ea20 70d3 biceq.w r0, r0, r3, lsr #31
- 802075a: bd70 pop {r4, r5, r6, pc}
- 802075c: f094 0f00 teq r4, #0
- 8020760: d10f bne.n 8020782 <__aeabi_dmul+0x1c2>
- 8020762: f001 4600 and.w r6, r1, #2147483648 ; 0x80000000
- 8020766: 0040 lsls r0, r0, #1
- 8020768: eb41 0101 adc.w r1, r1, r1
- 802076c: f411 1f80 tst.w r1, #1048576 ; 0x100000
- 8020770: bf08 it eq
- 8020772: 3c01 subeq r4, #1
- 8020774: d0f7 beq.n 8020766 <__aeabi_dmul+0x1a6>
- 8020776: ea41 0106 orr.w r1, r1, r6
- 802077a: f095 0f00 teq r5, #0
- 802077e: bf18 it ne
- 8020780: 4770 bxne lr
- 8020782: f003 4600 and.w r6, r3, #2147483648 ; 0x80000000
- 8020786: 0052 lsls r2, r2, #1
- 8020788: eb43 0303 adc.w r3, r3, r3
- 802078c: f413 1f80 tst.w r3, #1048576 ; 0x100000
- 8020790: bf08 it eq
- 8020792: 3d01 subeq r5, #1
- 8020794: d0f7 beq.n 8020786 <__aeabi_dmul+0x1c6>
- 8020796: ea43 0306 orr.w r3, r3, r6
- 802079a: 4770 bx lr
- 802079c: ea94 0f0c teq r4, ip
- 80207a0: ea0c 5513 and.w r5, ip, r3, lsr #20
- 80207a4: bf18 it ne
- 80207a6: ea95 0f0c teqne r5, ip
- 80207aa: d00c beq.n 80207c6 <__aeabi_dmul+0x206>
- 80207ac: ea50 0641 orrs.w r6, r0, r1, lsl #1
- 80207b0: bf18 it ne
- 80207b2: ea52 0643 orrsne.w r6, r2, r3, lsl #1
- 80207b6: d1d1 bne.n 802075c <__aeabi_dmul+0x19c>
- 80207b8: ea81 0103 eor.w r1, r1, r3
- 80207bc: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000
- 80207c0: f04f 0000 mov.w r0, #0
- 80207c4: bd70 pop {r4, r5, r6, pc}
- 80207c6: ea50 0641 orrs.w r6, r0, r1, lsl #1
- 80207ca: bf06 itte eq
- 80207cc: 4610 moveq r0, r2
- 80207ce: 4619 moveq r1, r3
- 80207d0: ea52 0643 orrsne.w r6, r2, r3, lsl #1
- 80207d4: d019 beq.n 802080a <__aeabi_dmul+0x24a>
- 80207d6: ea94 0f0c teq r4, ip
- 80207da: d102 bne.n 80207e2 <__aeabi_dmul+0x222>
- 80207dc: ea50 3601 orrs.w r6, r0, r1, lsl #12
- 80207e0: d113 bne.n 802080a <__aeabi_dmul+0x24a>
- 80207e2: ea95 0f0c teq r5, ip
- 80207e6: d105 bne.n 80207f4 <__aeabi_dmul+0x234>
- 80207e8: ea52 3603 orrs.w r6, r2, r3, lsl #12
- 80207ec: bf1c itt ne
- 80207ee: 4610 movne r0, r2
- 80207f0: 4619 movne r1, r3
- 80207f2: d10a bne.n 802080a <__aeabi_dmul+0x24a>
- 80207f4: ea81 0103 eor.w r1, r1, r3
- 80207f8: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000
- 80207fc: f041 41fe orr.w r1, r1, #2130706432 ; 0x7f000000
- 8020800: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000
- 8020804: f04f 0000 mov.w r0, #0
- 8020808: bd70 pop {r4, r5, r6, pc}
- 802080a: f041 41fe orr.w r1, r1, #2130706432 ; 0x7f000000
- 802080e: f441 0178 orr.w r1, r1, #16252928 ; 0xf80000
- 8020812: bd70 pop {r4, r5, r6, pc}
- 08020814 <__aeabi_ddiv>:
- 8020814: b570 push {r4, r5, r6, lr}
- 8020816: f04f 0cff mov.w ip, #255 ; 0xff
- 802081a: f44c 6ce0 orr.w ip, ip, #1792 ; 0x700
- 802081e: ea1c 5411 ands.w r4, ip, r1, lsr #20
- 8020822: bf1d ittte ne
- 8020824: ea1c 5513 andsne.w r5, ip, r3, lsr #20
- 8020828: ea94 0f0c teqne r4, ip
- 802082c: ea95 0f0c teqne r5, ip
- 8020830: f000 f8a7 bleq 8020982 <__aeabi_ddiv+0x16e>
- 8020834: eba4 0405 sub.w r4, r4, r5
- 8020838: ea81 0e03 eor.w lr, r1, r3
- 802083c: ea52 3503 orrs.w r5, r2, r3, lsl #12
- 8020840: ea4f 3101 mov.w r1, r1, lsl #12
- 8020844: f000 8088 beq.w 8020958 <__aeabi_ddiv+0x144>
- 8020848: ea4f 3303 mov.w r3, r3, lsl #12
- 802084c: f04f 5580 mov.w r5, #268435456 ; 0x10000000
- 8020850: ea45 1313 orr.w r3, r5, r3, lsr #4
- 8020854: ea43 6312 orr.w r3, r3, r2, lsr #24
- 8020858: ea4f 2202 mov.w r2, r2, lsl #8
- 802085c: ea45 1511 orr.w r5, r5, r1, lsr #4
- 8020860: ea45 6510 orr.w r5, r5, r0, lsr #24
- 8020864: ea4f 2600 mov.w r6, r0, lsl #8
- 8020868: f00e 4100 and.w r1, lr, #2147483648 ; 0x80000000
- 802086c: 429d cmp r5, r3
- 802086e: bf08 it eq
- 8020870: 4296 cmpeq r6, r2
- 8020872: f144 04fd adc.w r4, r4, #253 ; 0xfd
- 8020876: f504 7440 add.w r4, r4, #768 ; 0x300
- 802087a: d202 bcs.n 8020882 <__aeabi_ddiv+0x6e>
- 802087c: 085b lsrs r3, r3, #1
- 802087e: ea4f 0232 mov.w r2, r2, rrx
- 8020882: 1ab6 subs r6, r6, r2
- 8020884: eb65 0503 sbc.w r5, r5, r3
- 8020888: 085b lsrs r3, r3, #1
- 802088a: ea4f 0232 mov.w r2, r2, rrx
- 802088e: f44f 1080 mov.w r0, #1048576 ; 0x100000
- 8020892: f44f 2c00 mov.w ip, #524288 ; 0x80000
- 8020896: ebb6 0e02 subs.w lr, r6, r2
- 802089a: eb75 0e03 sbcs.w lr, r5, r3
- 802089e: bf22 ittt cs
- 80208a0: 1ab6 subcs r6, r6, r2
- 80208a2: 4675 movcs r5, lr
- 80208a4: ea40 000c orrcs.w r0, r0, ip
- 80208a8: 085b lsrs r3, r3, #1
- 80208aa: ea4f 0232 mov.w r2, r2, rrx
- 80208ae: ebb6 0e02 subs.w lr, r6, r2
- 80208b2: eb75 0e03 sbcs.w lr, r5, r3
- 80208b6: bf22 ittt cs
- 80208b8: 1ab6 subcs r6, r6, r2
- 80208ba: 4675 movcs r5, lr
- 80208bc: ea40 005c orrcs.w r0, r0, ip, lsr #1
- 80208c0: 085b lsrs r3, r3, #1
- 80208c2: ea4f 0232 mov.w r2, r2, rrx
- 80208c6: ebb6 0e02 subs.w lr, r6, r2
- 80208ca: eb75 0e03 sbcs.w lr, r5, r3
- 80208ce: bf22 ittt cs
- 80208d0: 1ab6 subcs r6, r6, r2
- 80208d2: 4675 movcs r5, lr
- 80208d4: ea40 009c orrcs.w r0, r0, ip, lsr #2
- 80208d8: 085b lsrs r3, r3, #1
- 80208da: ea4f 0232 mov.w r2, r2, rrx
- 80208de: ebb6 0e02 subs.w lr, r6, r2
- 80208e2: eb75 0e03 sbcs.w lr, r5, r3
- 80208e6: bf22 ittt cs
- 80208e8: 1ab6 subcs r6, r6, r2
- 80208ea: 4675 movcs r5, lr
- 80208ec: ea40 00dc orrcs.w r0, r0, ip, lsr #3
- 80208f0: ea55 0e06 orrs.w lr, r5, r6
- 80208f4: d018 beq.n 8020928 <__aeabi_ddiv+0x114>
- 80208f6: ea4f 1505 mov.w r5, r5, lsl #4
- 80208fa: ea45 7516 orr.w r5, r5, r6, lsr #28
- 80208fe: ea4f 1606 mov.w r6, r6, lsl #4
- 8020902: ea4f 03c3 mov.w r3, r3, lsl #3
- 8020906: ea43 7352 orr.w r3, r3, r2, lsr #29
- 802090a: ea4f 02c2 mov.w r2, r2, lsl #3
- 802090e: ea5f 1c1c movs.w ip, ip, lsr #4
- 8020912: d1c0 bne.n 8020896 <__aeabi_ddiv+0x82>
- 8020914: f411 1f80 tst.w r1, #1048576 ; 0x100000
- 8020918: d10b bne.n 8020932 <__aeabi_ddiv+0x11e>
- 802091a: ea41 0100 orr.w r1, r1, r0
- 802091e: f04f 0000 mov.w r0, #0
- 8020922: f04f 4c00 mov.w ip, #2147483648 ; 0x80000000
- 8020926: e7b6 b.n 8020896 <__aeabi_ddiv+0x82>
- 8020928: f411 1f80 tst.w r1, #1048576 ; 0x100000
- 802092c: bf04 itt eq
- 802092e: 4301 orreq r1, r0
- 8020930: 2000 moveq r0, #0
- 8020932: f1b4 0cfd subs.w ip, r4, #253 ; 0xfd
- 8020936: bf88 it hi
- 8020938: f5bc 6fe0 cmphi.w ip, #1792 ; 0x700
- 802093c: f63f aeaf bhi.w 802069e <__aeabi_dmul+0xde>
- 8020940: ebb5 0c03 subs.w ip, r5, r3
- 8020944: bf04 itt eq
- 8020946: ebb6 0c02 subseq.w ip, r6, r2
- 802094a: ea5f 0c50 movseq.w ip, r0, lsr #1
- 802094e: f150 0000 adcs.w r0, r0, #0
- 8020952: eb41 5104 adc.w r1, r1, r4, lsl #20
- 8020956: bd70 pop {r4, r5, r6, pc}
- 8020958: f00e 4e00 and.w lr, lr, #2147483648 ; 0x80000000
- 802095c: ea4e 3111 orr.w r1, lr, r1, lsr #12
- 8020960: eb14 045c adds.w r4, r4, ip, lsr #1
- 8020964: bfc2 ittt gt
- 8020966: ebd4 050c rsbsgt r5, r4, ip
- 802096a: ea41 5104 orrgt.w r1, r1, r4, lsl #20
- 802096e: bd70 popgt {r4, r5, r6, pc}
- 8020970: f441 1180 orr.w r1, r1, #1048576 ; 0x100000
- 8020974: f04f 0e00 mov.w lr, #0
- 8020978: 3c01 subs r4, #1
- 802097a: e690 b.n 802069e <__aeabi_dmul+0xde>
- 802097c: ea45 0e06 orr.w lr, r5, r6
- 8020980: e68d b.n 802069e <__aeabi_dmul+0xde>
- 8020982: ea0c 5513 and.w r5, ip, r3, lsr #20
- 8020986: ea94 0f0c teq r4, ip
- 802098a: bf08 it eq
- 802098c: ea95 0f0c teqeq r5, ip
- 8020990: f43f af3b beq.w 802080a <__aeabi_dmul+0x24a>
- 8020994: ea94 0f0c teq r4, ip
- 8020998: d10a bne.n 80209b0 <__aeabi_ddiv+0x19c>
- 802099a: ea50 3401 orrs.w r4, r0, r1, lsl #12
- 802099e: f47f af34 bne.w 802080a <__aeabi_dmul+0x24a>
- 80209a2: ea95 0f0c teq r5, ip
- 80209a6: f47f af25 bne.w 80207f4 <__aeabi_dmul+0x234>
- 80209aa: 4610 mov r0, r2
- 80209ac: 4619 mov r1, r3
- 80209ae: e72c b.n 802080a <__aeabi_dmul+0x24a>
- 80209b0: ea95 0f0c teq r5, ip
- 80209b4: d106 bne.n 80209c4 <__aeabi_ddiv+0x1b0>
- 80209b6: ea52 3503 orrs.w r5, r2, r3, lsl #12
- 80209ba: f43f aefd beq.w 80207b8 <__aeabi_dmul+0x1f8>
- 80209be: 4610 mov r0, r2
- 80209c0: 4619 mov r1, r3
- 80209c2: e722 b.n 802080a <__aeabi_dmul+0x24a>
- 80209c4: ea50 0641 orrs.w r6, r0, r1, lsl #1
- 80209c8: bf18 it ne
- 80209ca: ea52 0643 orrsne.w r6, r2, r3, lsl #1
- 80209ce: f47f aec5 bne.w 802075c <__aeabi_dmul+0x19c>
- 80209d2: ea50 0441 orrs.w r4, r0, r1, lsl #1
- 80209d6: f47f af0d bne.w 80207f4 <__aeabi_dmul+0x234>
- 80209da: ea52 0543 orrs.w r5, r2, r3, lsl #1
- 80209de: f47f aeeb bne.w 80207b8 <__aeabi_dmul+0x1f8>
- 80209e2: e712 b.n 802080a <__aeabi_dmul+0x24a>
- 080209e4 <__gedf2>:
- 80209e4: f04f 3cff mov.w ip, #4294967295
- 80209e8: e006 b.n 80209f8 <__cmpdf2+0x4>
- 80209ea: bf00 nop
- 080209ec <__ledf2>:
- 80209ec: f04f 0c01 mov.w ip, #1
- 80209f0: e002 b.n 80209f8 <__cmpdf2+0x4>
- 80209f2: bf00 nop
- 080209f4 <__cmpdf2>:
- 80209f4: f04f 0c01 mov.w ip, #1
- 80209f8: f84d cd04 str.w ip, [sp, #-4]!
- 80209fc: ea4f 0c41 mov.w ip, r1, lsl #1
- 8020a00: ea7f 5c6c mvns.w ip, ip, asr #21
- 8020a04: ea4f 0c43 mov.w ip, r3, lsl #1
- 8020a08: bf18 it ne
- 8020a0a: ea7f 5c6c mvnsne.w ip, ip, asr #21
- 8020a0e: d01b beq.n 8020a48 <__cmpdf2+0x54>
- 8020a10: b001 add sp, #4
- 8020a12: ea50 0c41 orrs.w ip, r0, r1, lsl #1
- 8020a16: bf0c ite eq
- 8020a18: ea52 0c43 orrseq.w ip, r2, r3, lsl #1
- 8020a1c: ea91 0f03 teqne r1, r3
- 8020a20: bf02 ittt eq
- 8020a22: ea90 0f02 teqeq r0, r2
- 8020a26: 2000 moveq r0, #0
- 8020a28: 4770 bxeq lr
- 8020a2a: f110 0f00 cmn.w r0, #0
- 8020a2e: ea91 0f03 teq r1, r3
- 8020a32: bf58 it pl
- 8020a34: 4299 cmppl r1, r3
- 8020a36: bf08 it eq
- 8020a38: 4290 cmpeq r0, r2
- 8020a3a: bf2c ite cs
- 8020a3c: 17d8 asrcs r0, r3, #31
- 8020a3e: ea6f 70e3 mvncc.w r0, r3, asr #31
- 8020a42: f040 0001 orr.w r0, r0, #1
- 8020a46: 4770 bx lr
- 8020a48: ea4f 0c41 mov.w ip, r1, lsl #1
- 8020a4c: ea7f 5c6c mvns.w ip, ip, asr #21
- 8020a50: d102 bne.n 8020a58 <__cmpdf2+0x64>
- 8020a52: ea50 3c01 orrs.w ip, r0, r1, lsl #12
- 8020a56: d107 bne.n 8020a68 <__cmpdf2+0x74>
- 8020a58: ea4f 0c43 mov.w ip, r3, lsl #1
- 8020a5c: ea7f 5c6c mvns.w ip, ip, asr #21
- 8020a60: d1d6 bne.n 8020a10 <__cmpdf2+0x1c>
- 8020a62: ea52 3c03 orrs.w ip, r2, r3, lsl #12
- 8020a66: d0d3 beq.n 8020a10 <__cmpdf2+0x1c>
- 8020a68: f85d 0b04 ldr.w r0, [sp], #4
- 8020a6c: 4770 bx lr
- 8020a6e: bf00 nop
- 08020a70 <__aeabi_cdrcmple>:
- 8020a70: 4684 mov ip, r0
- 8020a72: 4610 mov r0, r2
- 8020a74: 4662 mov r2, ip
- 8020a76: 468c mov ip, r1
- 8020a78: 4619 mov r1, r3
- 8020a7a: 4663 mov r3, ip
- 8020a7c: e000 b.n 8020a80 <__aeabi_cdcmpeq>
- 8020a7e: bf00 nop
- 08020a80 <__aeabi_cdcmpeq>:
- 8020a80: b501 push {r0, lr}
- 8020a82: f7ff ffb7 bl 80209f4 <__cmpdf2>
- 8020a86: 2800 cmp r0, #0
- 8020a88: bf48 it mi
- 8020a8a: f110 0f00 cmnmi.w r0, #0
- 8020a8e: bd01 pop {r0, pc}
- 08020a90 <__aeabi_dcmpeq>:
- 8020a90: f84d ed08 str.w lr, [sp, #-8]!
- 8020a94: f7ff fff4 bl 8020a80 <__aeabi_cdcmpeq>
- 8020a98: bf0c ite eq
- 8020a9a: 2001 moveq r0, #1
- 8020a9c: 2000 movne r0, #0
- 8020a9e: f85d fb08 ldr.w pc, [sp], #8
- 8020aa2: bf00 nop
- 08020aa4 <__aeabi_dcmplt>:
- 8020aa4: f84d ed08 str.w lr, [sp, #-8]!
- 8020aa8: f7ff ffea bl 8020a80 <__aeabi_cdcmpeq>
- 8020aac: bf34 ite cc
- 8020aae: 2001 movcc r0, #1
- 8020ab0: 2000 movcs r0, #0
- 8020ab2: f85d fb08 ldr.w pc, [sp], #8
- 8020ab6: bf00 nop
- 08020ab8 <__aeabi_dcmple>:
- 8020ab8: f84d ed08 str.w lr, [sp, #-8]!
- 8020abc: f7ff ffe0 bl 8020a80 <__aeabi_cdcmpeq>
- 8020ac0: bf94 ite ls
- 8020ac2: 2001 movls r0, #1
- 8020ac4: 2000 movhi r0, #0
- 8020ac6: f85d fb08 ldr.w pc, [sp], #8
- 8020aca: bf00 nop
- 08020acc <__aeabi_dcmpge>:
- 8020acc: f84d ed08 str.w lr, [sp, #-8]!
- 8020ad0: f7ff ffce bl 8020a70 <__aeabi_cdrcmple>
- 8020ad4: bf94 ite ls
- 8020ad6: 2001 movls r0, #1
- 8020ad8: 2000 movhi r0, #0
- 8020ada: f85d fb08 ldr.w pc, [sp], #8
- 8020ade: bf00 nop
- 08020ae0 <__aeabi_dcmpgt>:
- 8020ae0: f84d ed08 str.w lr, [sp, #-8]!
- 8020ae4: f7ff ffc4 bl 8020a70 <__aeabi_cdrcmple>
- 8020ae8: bf34 ite cc
- 8020aea: 2001 movcc r0, #1
- 8020aec: 2000 movcs r0, #0
- 8020aee: f85d fb08 ldr.w pc, [sp], #8
- 8020af2: bf00 nop
- 08020af4 <__aeabi_d2iz>:
- 8020af4: ea4f 0241 mov.w r2, r1, lsl #1
- 8020af8: f512 1200 adds.w r2, r2, #2097152 ; 0x200000
- 8020afc: d215 bcs.n 8020b2a <__aeabi_d2iz+0x36>
- 8020afe: d511 bpl.n 8020b24 <__aeabi_d2iz+0x30>
- 8020b00: f46f 7378 mvn.w r3, #992 ; 0x3e0
- 8020b04: ebb3 5262 subs.w r2, r3, r2, asr #21
- 8020b08: d912 bls.n 8020b30 <__aeabi_d2iz+0x3c>
- 8020b0a: ea4f 23c1 mov.w r3, r1, lsl #11
- 8020b0e: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000
- 8020b12: ea43 5350 orr.w r3, r3, r0, lsr #21
- 8020b16: f011 4f00 tst.w r1, #2147483648 ; 0x80000000
- 8020b1a: fa23 f002 lsr.w r0, r3, r2
- 8020b1e: bf18 it ne
- 8020b20: 4240 negne r0, r0
- 8020b22: 4770 bx lr
- 8020b24: f04f 0000 mov.w r0, #0
- 8020b28: 4770 bx lr
- 8020b2a: ea50 3001 orrs.w r0, r0, r1, lsl #12
- 8020b2e: d105 bne.n 8020b3c <__aeabi_d2iz+0x48>
- 8020b30: f011 4000 ands.w r0, r1, #2147483648 ; 0x80000000
- 8020b34: bf08 it eq
- 8020b36: f06f 4000 mvneq.w r0, #2147483648 ; 0x80000000
- 8020b3a: 4770 bx lr
- 8020b3c: f04f 0000 mov.w r0, #0
- 8020b40: 4770 bx lr
- 8020b42: bf00 nop
- 08020b44 <__aeabi_d2uiz>:
- 8020b44: 004a lsls r2, r1, #1
- 8020b46: d211 bcs.n 8020b6c <__aeabi_d2uiz+0x28>
- 8020b48: f512 1200 adds.w r2, r2, #2097152 ; 0x200000
- 8020b4c: d211 bcs.n 8020b72 <__aeabi_d2uiz+0x2e>
- 8020b4e: d50d bpl.n 8020b6c <__aeabi_d2uiz+0x28>
- 8020b50: f46f 7378 mvn.w r3, #992 ; 0x3e0
- 8020b54: ebb3 5262 subs.w r2, r3, r2, asr #21
- 8020b58: d40e bmi.n 8020b78 <__aeabi_d2uiz+0x34>
- 8020b5a: ea4f 23c1 mov.w r3, r1, lsl #11
- 8020b5e: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000
- 8020b62: ea43 5350 orr.w r3, r3, r0, lsr #21
- 8020b66: fa23 f002 lsr.w r0, r3, r2
- 8020b6a: 4770 bx lr
- 8020b6c: f04f 0000 mov.w r0, #0
- 8020b70: 4770 bx lr
- 8020b72: ea50 3001 orrs.w r0, r0, r1, lsl #12
- 8020b76: d102 bne.n 8020b7e <__aeabi_d2uiz+0x3a>
- 8020b78: f04f 30ff mov.w r0, #4294967295
- 8020b7c: 4770 bx lr
- 8020b7e: f04f 0000 mov.w r0, #0
- 8020b82: 4770 bx lr
- 08020b84 <__aeabi_d2f>:
- 8020b84: ea4f 0241 mov.w r2, r1, lsl #1
- 8020b88: f1b2 43e0 subs.w r3, r2, #1879048192 ; 0x70000000
- 8020b8c: bf24 itt cs
- 8020b8e: f5b3 1c00 subscs.w ip, r3, #2097152 ; 0x200000
- 8020b92: f1dc 5cfe rsbscs ip, ip, #532676608 ; 0x1fc00000
- 8020b96: d90d bls.n 8020bb4 <__aeabi_d2f+0x30>
- 8020b98: f001 4c00 and.w ip, r1, #2147483648 ; 0x80000000
- 8020b9c: ea4f 02c0 mov.w r2, r0, lsl #3
- 8020ba0: ea4c 7050 orr.w r0, ip, r0, lsr #29
- 8020ba4: f1b2 4f00 cmp.w r2, #2147483648 ; 0x80000000
- 8020ba8: eb40 0083 adc.w r0, r0, r3, lsl #2
- 8020bac: bf08 it eq
- 8020bae: f020 0001 biceq.w r0, r0, #1
- 8020bb2: 4770 bx lr
- 8020bb4: f011 4f80 tst.w r1, #1073741824 ; 0x40000000
- 8020bb8: d121 bne.n 8020bfe <__aeabi_d2f+0x7a>
- 8020bba: f113 7238 adds.w r2, r3, #48234496 ; 0x2e00000
- 8020bbe: bfbc itt lt
- 8020bc0: f001 4000 andlt.w r0, r1, #2147483648 ; 0x80000000
- 8020bc4: 4770 bxlt lr
- 8020bc6: f441 1180 orr.w r1, r1, #1048576 ; 0x100000
- 8020bca: ea4f 5252 mov.w r2, r2, lsr #21
- 8020bce: f1c2 0218 rsb r2, r2, #24
- 8020bd2: f1c2 0c20 rsb ip, r2, #32
- 8020bd6: fa10 f30c lsls.w r3, r0, ip
- 8020bda: fa20 f002 lsr.w r0, r0, r2
- 8020bde: bf18 it ne
- 8020be0: f040 0001 orrne.w r0, r0, #1
- 8020be4: ea4f 23c1 mov.w r3, r1, lsl #11
- 8020be8: ea4f 23d3 mov.w r3, r3, lsr #11
- 8020bec: fa03 fc0c lsl.w ip, r3, ip
- 8020bf0: ea40 000c orr.w r0, r0, ip
- 8020bf4: fa23 f302 lsr.w r3, r3, r2
- 8020bf8: ea4f 0343 mov.w r3, r3, lsl #1
- 8020bfc: e7cc b.n 8020b98 <__aeabi_d2f+0x14>
- 8020bfe: ea7f 5362 mvns.w r3, r2, asr #21
- 8020c02: d107 bne.n 8020c14 <__aeabi_d2f+0x90>
- 8020c04: ea50 3301 orrs.w r3, r0, r1, lsl #12
- 8020c08: bf1e ittt ne
- 8020c0a: f04f 40fe movne.w r0, #2130706432 ; 0x7f000000
- 8020c0e: f440 0040 orrne.w r0, r0, #12582912 ; 0xc00000
- 8020c12: 4770 bxne lr
- 8020c14: f001 4000 and.w r0, r1, #2147483648 ; 0x80000000
- 8020c18: f040 40fe orr.w r0, r0, #2130706432 ; 0x7f000000
- 8020c1c: f440 0000 orr.w r0, r0, #8388608 ; 0x800000
- 8020c20: 4770 bx lr
- 8020c22: bf00 nop
- 08020c24 <__aeabi_frsub>:
- 8020c24: f080 4000 eor.w r0, r0, #2147483648 ; 0x80000000
- 8020c28: e002 b.n 8020c30 <__addsf3>
- 8020c2a: bf00 nop
- 08020c2c <__aeabi_fsub>:
- 8020c2c: f081 4100 eor.w r1, r1, #2147483648 ; 0x80000000
- 08020c30 <__addsf3>:
- 8020c30: 0042 lsls r2, r0, #1
- 8020c32: bf1f itttt ne
- 8020c34: ea5f 0341 movsne.w r3, r1, lsl #1
- 8020c38: ea92 0f03 teqne r2, r3
- 8020c3c: ea7f 6c22 mvnsne.w ip, r2, asr #24
- 8020c40: ea7f 6c23 mvnsne.w ip, r3, asr #24
- 8020c44: d06a beq.n 8020d1c <__addsf3+0xec>
- 8020c46: ea4f 6212 mov.w r2, r2, lsr #24
- 8020c4a: ebd2 6313 rsbs r3, r2, r3, lsr #24
- 8020c4e: bfc1 itttt gt
- 8020c50: 18d2 addgt r2, r2, r3
- 8020c52: 4041 eorgt r1, r0
- 8020c54: 4048 eorgt r0, r1
- 8020c56: 4041 eorgt r1, r0
- 8020c58: bfb8 it lt
- 8020c5a: 425b neglt r3, r3
- 8020c5c: 2b19 cmp r3, #25
- 8020c5e: bf88 it hi
- 8020c60: 4770 bxhi lr
- 8020c62: f010 4f00 tst.w r0, #2147483648 ; 0x80000000
- 8020c66: f440 0000 orr.w r0, r0, #8388608 ; 0x800000
- 8020c6a: f020 407f bic.w r0, r0, #4278190080 ; 0xff000000
- 8020c6e: bf18 it ne
- 8020c70: 4240 negne r0, r0
- 8020c72: f011 4f00 tst.w r1, #2147483648 ; 0x80000000
- 8020c76: f441 0100 orr.w r1, r1, #8388608 ; 0x800000
- 8020c7a: f021 417f bic.w r1, r1, #4278190080 ; 0xff000000
- 8020c7e: bf18 it ne
- 8020c80: 4249 negne r1, r1
- 8020c82: ea92 0f03 teq r2, r3
- 8020c86: d03f beq.n 8020d08 <__addsf3+0xd8>
- 8020c88: f1a2 0201 sub.w r2, r2, #1
- 8020c8c: fa41 fc03 asr.w ip, r1, r3
- 8020c90: eb10 000c adds.w r0, r0, ip
- 8020c94: f1c3 0320 rsb r3, r3, #32
- 8020c98: fa01 f103 lsl.w r1, r1, r3
- 8020c9c: f000 4300 and.w r3, r0, #2147483648 ; 0x80000000
- 8020ca0: d502 bpl.n 8020ca8 <__addsf3+0x78>
- 8020ca2: 4249 negs r1, r1
- 8020ca4: eb60 0040 sbc.w r0, r0, r0, lsl #1
- 8020ca8: f5b0 0f00 cmp.w r0, #8388608 ; 0x800000
- 8020cac: d313 bcc.n 8020cd6 <__addsf3+0xa6>
- 8020cae: f1b0 7f80 cmp.w r0, #16777216 ; 0x1000000
- 8020cb2: d306 bcc.n 8020cc2 <__addsf3+0x92>
- 8020cb4: 0840 lsrs r0, r0, #1
- 8020cb6: ea4f 0131 mov.w r1, r1, rrx
- 8020cba: f102 0201 add.w r2, r2, #1
- 8020cbe: 2afe cmp r2, #254 ; 0xfe
- 8020cc0: d251 bcs.n 8020d66 <__addsf3+0x136>
- 8020cc2: f1b1 4f00 cmp.w r1, #2147483648 ; 0x80000000
- 8020cc6: eb40 50c2 adc.w r0, r0, r2, lsl #23
- 8020cca: bf08 it eq
- 8020ccc: f020 0001 biceq.w r0, r0, #1
- 8020cd0: ea40 0003 orr.w r0, r0, r3
- 8020cd4: 4770 bx lr
- 8020cd6: 0049 lsls r1, r1, #1
- 8020cd8: eb40 0000 adc.w r0, r0, r0
- 8020cdc: f410 0f00 tst.w r0, #8388608 ; 0x800000
- 8020ce0: f1a2 0201 sub.w r2, r2, #1
- 8020ce4: d1ed bne.n 8020cc2 <__addsf3+0x92>
- 8020ce6: fab0 fc80 clz ip, r0
- 8020cea: f1ac 0c08 sub.w ip, ip, #8
- 8020cee: ebb2 020c subs.w r2, r2, ip
- 8020cf2: fa00 f00c lsl.w r0, r0, ip
- 8020cf6: bfaa itet ge
- 8020cf8: eb00 50c2 addge.w r0, r0, r2, lsl #23
- 8020cfc: 4252 neglt r2, r2
- 8020cfe: 4318 orrge r0, r3
- 8020d00: bfbc itt lt
- 8020d02: 40d0 lsrlt r0, r2
- 8020d04: 4318 orrlt r0, r3
- 8020d06: 4770 bx lr
- 8020d08: f092 0f00 teq r2, #0
- 8020d0c: f481 0100 eor.w r1, r1, #8388608 ; 0x800000
- 8020d10: bf06 itte eq
- 8020d12: f480 0000 eoreq.w r0, r0, #8388608 ; 0x800000
- 8020d16: 3201 addeq r2, #1
- 8020d18: 3b01 subne r3, #1
- 8020d1a: e7b5 b.n 8020c88 <__addsf3+0x58>
- 8020d1c: ea4f 0341 mov.w r3, r1, lsl #1
- 8020d20: ea7f 6c22 mvns.w ip, r2, asr #24
- 8020d24: bf18 it ne
- 8020d26: ea7f 6c23 mvnsne.w ip, r3, asr #24
- 8020d2a: d021 beq.n 8020d70 <__addsf3+0x140>
- 8020d2c: ea92 0f03 teq r2, r3
- 8020d30: d004 beq.n 8020d3c <__addsf3+0x10c>
- 8020d32: f092 0f00 teq r2, #0
- 8020d36: bf08 it eq
- 8020d38: 4608 moveq r0, r1
- 8020d3a: 4770 bx lr
- 8020d3c: ea90 0f01 teq r0, r1
- 8020d40: bf1c itt ne
- 8020d42: 2000 movne r0, #0
- 8020d44: 4770 bxne lr
- 8020d46: f012 4f7f tst.w r2, #4278190080 ; 0xff000000
- 8020d4a: d104 bne.n 8020d56 <__addsf3+0x126>
- 8020d4c: 0040 lsls r0, r0, #1
- 8020d4e: bf28 it cs
- 8020d50: f040 4000 orrcs.w r0, r0, #2147483648 ; 0x80000000
- 8020d54: 4770 bx lr
- 8020d56: f112 7200 adds.w r2, r2, #33554432 ; 0x2000000
- 8020d5a: bf3c itt cc
- 8020d5c: f500 0000 addcc.w r0, r0, #8388608 ; 0x800000
- 8020d60: 4770 bxcc lr
- 8020d62: f000 4300 and.w r3, r0, #2147483648 ; 0x80000000
- 8020d66: f043 40fe orr.w r0, r3, #2130706432 ; 0x7f000000
- 8020d6a: f440 0000 orr.w r0, r0, #8388608 ; 0x800000
- 8020d6e: 4770 bx lr
- 8020d70: ea7f 6222 mvns.w r2, r2, asr #24
- 8020d74: bf16 itet ne
- 8020d76: 4608 movne r0, r1
- 8020d78: ea7f 6323 mvnseq.w r3, r3, asr #24
- 8020d7c: 4601 movne r1, r0
- 8020d7e: 0242 lsls r2, r0, #9
- 8020d80: bf06 itte eq
- 8020d82: ea5f 2341 movseq.w r3, r1, lsl #9
- 8020d86: ea90 0f01 teqeq r0, r1
- 8020d8a: f440 0080 orrne.w r0, r0, #4194304 ; 0x400000
- 8020d8e: 4770 bx lr
- 08020d90 <__aeabi_ui2f>:
- 8020d90: f04f 0300 mov.w r3, #0
- 8020d94: e004 b.n 8020da0 <__aeabi_i2f+0x8>
- 8020d96: bf00 nop
- 08020d98 <__aeabi_i2f>:
- 8020d98: f010 4300 ands.w r3, r0, #2147483648 ; 0x80000000
- 8020d9c: bf48 it mi
- 8020d9e: 4240 negmi r0, r0
- 8020da0: ea5f 0c00 movs.w ip, r0
- 8020da4: bf08 it eq
- 8020da6: 4770 bxeq lr
- 8020da8: f043 4396 orr.w r3, r3, #1258291200 ; 0x4b000000
- 8020dac: 4601 mov r1, r0
- 8020dae: f04f 0000 mov.w r0, #0
- 8020db2: e01c b.n 8020dee <__aeabi_l2f+0x2a>
- 08020db4 <__aeabi_ul2f>:
- 8020db4: ea50 0201 orrs.w r2, r0, r1
- 8020db8: bf08 it eq
- 8020dba: 4770 bxeq lr
- 8020dbc: f04f 0300 mov.w r3, #0
- 8020dc0: e00a b.n 8020dd8 <__aeabi_l2f+0x14>
- 8020dc2: bf00 nop
- 08020dc4 <__aeabi_l2f>:
- 8020dc4: ea50 0201 orrs.w r2, r0, r1
- 8020dc8: bf08 it eq
- 8020dca: 4770 bxeq lr
- 8020dcc: f011 4300 ands.w r3, r1, #2147483648 ; 0x80000000
- 8020dd0: d502 bpl.n 8020dd8 <__aeabi_l2f+0x14>
- 8020dd2: 4240 negs r0, r0
- 8020dd4: eb61 0141 sbc.w r1, r1, r1, lsl #1
- 8020dd8: ea5f 0c01 movs.w ip, r1
- 8020ddc: bf02 ittt eq
- 8020dde: 4684 moveq ip, r0
- 8020de0: 4601 moveq r1, r0
- 8020de2: 2000 moveq r0, #0
- 8020de4: f043 43b6 orr.w r3, r3, #1526726656 ; 0x5b000000
- 8020de8: bf08 it eq
- 8020dea: f1a3 5380 subeq.w r3, r3, #268435456 ; 0x10000000
- 8020dee: f5a3 0300 sub.w r3, r3, #8388608 ; 0x800000
- 8020df2: fabc f28c clz r2, ip
- 8020df6: 3a08 subs r2, #8
- 8020df8: eba3 53c2 sub.w r3, r3, r2, lsl #23
- 8020dfc: db10 blt.n 8020e20 <__aeabi_l2f+0x5c>
- 8020dfe: fa01 fc02 lsl.w ip, r1, r2
- 8020e02: 4463 add r3, ip
- 8020e04: fa00 fc02 lsl.w ip, r0, r2
- 8020e08: f1c2 0220 rsb r2, r2, #32
- 8020e0c: f1bc 4f00 cmp.w ip, #2147483648 ; 0x80000000
- 8020e10: fa20 f202 lsr.w r2, r0, r2
- 8020e14: eb43 0002 adc.w r0, r3, r2
- 8020e18: bf08 it eq
- 8020e1a: f020 0001 biceq.w r0, r0, #1
- 8020e1e: 4770 bx lr
- 8020e20: f102 0220 add.w r2, r2, #32
- 8020e24: fa01 fc02 lsl.w ip, r1, r2
- 8020e28: f1c2 0220 rsb r2, r2, #32
- 8020e2c: ea50 004c orrs.w r0, r0, ip, lsl #1
- 8020e30: fa21 f202 lsr.w r2, r1, r2
- 8020e34: eb43 0002 adc.w r0, r3, r2
- 8020e38: bf08 it eq
- 8020e3a: ea20 70dc biceq.w r0, r0, ip, lsr #31
- 8020e3e: 4770 bx lr
- 08020e40 <__gesf2>:
- 8020e40: f04f 3cff mov.w ip, #4294967295
- 8020e44: e006 b.n 8020e54 <__cmpsf2+0x4>
- 8020e46: bf00 nop
- 08020e48 <__lesf2>:
- 8020e48: f04f 0c01 mov.w ip, #1
- 8020e4c: e002 b.n 8020e54 <__cmpsf2+0x4>
- 8020e4e: bf00 nop
- 08020e50 <__cmpsf2>:
- 8020e50: f04f 0c01 mov.w ip, #1
- 8020e54: f84d cd04 str.w ip, [sp, #-4]!
- 8020e58: ea4f 0240 mov.w r2, r0, lsl #1
- 8020e5c: ea4f 0341 mov.w r3, r1, lsl #1
- 8020e60: ea7f 6c22 mvns.w ip, r2, asr #24
- 8020e64: bf18 it ne
- 8020e66: ea7f 6c23 mvnsne.w ip, r3, asr #24
- 8020e6a: d011 beq.n 8020e90 <__cmpsf2+0x40>
- 8020e6c: b001 add sp, #4
- 8020e6e: ea52 0c53 orrs.w ip, r2, r3, lsr #1
- 8020e72: bf18 it ne
- 8020e74: ea90 0f01 teqne r0, r1
- 8020e78: bf58 it pl
- 8020e7a: ebb2 0003 subspl.w r0, r2, r3
- 8020e7e: bf88 it hi
- 8020e80: 17c8 asrhi r0, r1, #31
- 8020e82: bf38 it cc
- 8020e84: ea6f 70e1 mvncc.w r0, r1, asr #31
- 8020e88: bf18 it ne
- 8020e8a: f040 0001 orrne.w r0, r0, #1
- 8020e8e: 4770 bx lr
- 8020e90: ea7f 6c22 mvns.w ip, r2, asr #24
- 8020e94: d102 bne.n 8020e9c <__cmpsf2+0x4c>
- 8020e96: ea5f 2c40 movs.w ip, r0, lsl #9
- 8020e9a: d105 bne.n 8020ea8 <__cmpsf2+0x58>
- 8020e9c: ea7f 6c23 mvns.w ip, r3, asr #24
- 8020ea0: d1e4 bne.n 8020e6c <__cmpsf2+0x1c>
- 8020ea2: ea5f 2c41 movs.w ip, r1, lsl #9
- 8020ea6: d0e1 beq.n 8020e6c <__cmpsf2+0x1c>
- 8020ea8: f85d 0b04 ldr.w r0, [sp], #4
- 8020eac: 4770 bx lr
- 8020eae: bf00 nop
- 08020eb0 <__aeabi_cfrcmple>:
- 8020eb0: 4684 mov ip, r0
- 8020eb2: 4608 mov r0, r1
- 8020eb4: 4661 mov r1, ip
- 8020eb6: e7ff b.n 8020eb8 <__aeabi_cfcmpeq>
- 08020eb8 <__aeabi_cfcmpeq>:
- 8020eb8: b50f push {r0, r1, r2, r3, lr}
- 8020eba: f7ff ffc9 bl 8020e50 <__cmpsf2>
- 8020ebe: 2800 cmp r0, #0
- 8020ec0: bf48 it mi
- 8020ec2: f110 0f00 cmnmi.w r0, #0
- 8020ec6: bd0f pop {r0, r1, r2, r3, pc}
- 08020ec8 <__aeabi_fcmpeq>:
- 8020ec8: f84d ed08 str.w lr, [sp, #-8]!
- 8020ecc: f7ff fff4 bl 8020eb8 <__aeabi_cfcmpeq>
- 8020ed0: bf0c ite eq
- 8020ed2: 2001 moveq r0, #1
- 8020ed4: 2000 movne r0, #0
- 8020ed6: f85d fb08 ldr.w pc, [sp], #8
- 8020eda: bf00 nop
- 08020edc <__aeabi_fcmplt>:
- 8020edc: f84d ed08 str.w lr, [sp, #-8]!
- 8020ee0: f7ff ffea bl 8020eb8 <__aeabi_cfcmpeq>
- 8020ee4: bf34 ite cc
- 8020ee6: 2001 movcc r0, #1
- 8020ee8: 2000 movcs r0, #0
- 8020eea: f85d fb08 ldr.w pc, [sp], #8
- 8020eee: bf00 nop
- 08020ef0 <__aeabi_fcmple>:
- 8020ef0: f84d ed08 str.w lr, [sp, #-8]!
- 8020ef4: f7ff ffe0 bl 8020eb8 <__aeabi_cfcmpeq>
- 8020ef8: bf94 ite ls
- 8020efa: 2001 movls r0, #1
- 8020efc: 2000 movhi r0, #0
- 8020efe: f85d fb08 ldr.w pc, [sp], #8
- 8020f02: bf00 nop
- 08020f04 <__aeabi_fcmpge>:
- 8020f04: f84d ed08 str.w lr, [sp, #-8]!
- 8020f08: f7ff ffd2 bl 8020eb0 <__aeabi_cfrcmple>
- 8020f0c: bf94 ite ls
- 8020f0e: 2001 movls r0, #1
- 8020f10: 2000 movhi r0, #0
- 8020f12: f85d fb08 ldr.w pc, [sp], #8
- 8020f16: bf00 nop
- 08020f18 <__aeabi_fcmpgt>:
- 8020f18: f84d ed08 str.w lr, [sp, #-8]!
- 8020f1c: f7ff ffc8 bl 8020eb0 <__aeabi_cfrcmple>
- 8020f20: bf34 ite cc
- 8020f22: 2001 movcc r0, #1
- 8020f24: 2000 movcs r0, #0
- 8020f26: f85d fb08 ldr.w pc, [sp], #8
- 8020f2a: bf00 nop
- 08020f2c <__aeabi_uldivmod>:
- 8020f2c: b94b cbnz r3, 8020f42 <__aeabi_uldivmod+0x16>
- 8020f2e: b942 cbnz r2, 8020f42 <__aeabi_uldivmod+0x16>
- 8020f30: 2900 cmp r1, #0
- 8020f32: bf08 it eq
- 8020f34: 2800 cmpeq r0, #0
- 8020f36: d002 beq.n 8020f3e <__aeabi_uldivmod+0x12>
- 8020f38: f04f 31ff mov.w r1, #4294967295
- 8020f3c: 4608 mov r0, r1
- 8020f3e: f000 b83b b.w 8020fb8 <__aeabi_idiv0>
- 8020f42: b082 sub sp, #8
- 8020f44: 46ec mov ip, sp
- 8020f46: e92d 5000 stmdb sp!, {ip, lr}
- 8020f4a: f000 f81d bl 8020f88 <__gnu_uldivmod_helper>
- 8020f4e: f8dd e004 ldr.w lr, [sp, #4]
- 8020f52: b002 add sp, #8
- 8020f54: bc0c pop {r2, r3}
- 8020f56: 4770 bx lr
- 08020f58 <__gnu_ldivmod_helper>:
- 8020f58: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- 8020f5c: 4690 mov r8, r2
- 8020f5e: 4699 mov r9, r3
- 8020f60: 4606 mov r6, r0
- 8020f62: 460f mov r7, r1
- 8020f64: f000 f82a bl 8020fbc <__divdi3>
- 8020f68: 9b08 ldr r3, [sp, #32]
- 8020f6a: fba8 4500 umull r4, r5, r8, r0
- 8020f6e: fb08 f801 mul.w r8, r8, r1
- 8020f72: fb00 8209 mla r2, r0, r9, r8
- 8020f76: 1955 adds r5, r2, r5
- 8020f78: 1b34 subs r4, r6, r4
- 8020f7a: eb67 0505 sbc.w r5, r7, r5
- 8020f7e: e9c3 4500 strd r4, r5, [r3]
- 8020f82: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
- 8020f86: bf00 nop
- 08020f88 <__gnu_uldivmod_helper>:
- 8020f88: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8020f8c: 4690 mov r8, r2
- 8020f8e: 4606 mov r6, r0
- 8020f90: 460f mov r7, r1
- 8020f92: 461d mov r5, r3
- 8020f94: f000 f9c8 bl 8021328 <__udivdi3>
- 8020f98: fb00 f305 mul.w r3, r0, r5
- 8020f9c: fba0 4508 umull r4, r5, r0, r8
- 8020fa0: fb08 3801 mla r8, r8, r1, r3
- 8020fa4: 9b06 ldr r3, [sp, #24]
- 8020fa6: 4445 add r5, r8
- 8020fa8: 1b34 subs r4, r6, r4
- 8020faa: eb67 0505 sbc.w r5, r7, r5
- 8020fae: e9c3 4500 strd r4, r5, [r3]
- 8020fb2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 8020fb6: bf00 nop
- 08020fb8 <__aeabi_idiv0>:
- 8020fb8: 4770 bx lr
- 8020fba: bf00 nop
- 08020fbc <__divdi3>:
- 8020fbc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8020fc0: 2500 movs r5, #0
- 8020fc2: 2900 cmp r1, #0
- 8020fc4: b085 sub sp, #20
- 8020fc6: 461c mov r4, r3
- 8020fc8: f2c0 8149 blt.w 802125e <__divdi3+0x2a2>
- 8020fcc: 2c00 cmp r4, #0
- 8020fce: f2c0 8141 blt.w 8021254 <__divdi3+0x298>
- 8020fd2: 468c mov ip, r1
- 8020fd4: 460f mov r7, r1
- 8020fd6: 4682 mov sl, r0
- 8020fd8: 4691 mov r9, r2
- 8020fda: 4614 mov r4, r2
- 8020fdc: 4606 mov r6, r0
- 8020fde: 4619 mov r1, r3
- 8020fe0: 2b00 cmp r3, #0
- 8020fe2: d14b bne.n 802107c <__divdi3+0xc0>
- 8020fe4: 4562 cmp r2, ip
- 8020fe6: d959 bls.n 802109c <__divdi3+0xe0>
- 8020fe8: fab2 f382 clz r3, r2
- 8020fec: b143 cbz r3, 8021000 <__divdi3+0x44>
- 8020fee: f1c3 0220 rsb r2, r3, #32
- 8020ff2: fa0c f703 lsl.w r7, ip, r3
- 8020ff6: fa20 f202 lsr.w r2, r0, r2
- 8020ffa: 409c lsls r4, r3
- 8020ffc: 4317 orrs r7, r2
- 8020ffe: 409e lsls r6, r3
- 8021000: ea4f 4814 mov.w r8, r4, lsr #16
- 8021004: 4638 mov r0, r7
- 8021006: 4641 mov r1, r8
- 8021008: fa1f f984 uxth.w r9, r4
- 802100c: f000 fb18 bl 8021640 <__aeabi_uidiv>
- 8021010: 4641 mov r1, r8
- 8021012: 4682 mov sl, r0
- 8021014: 4638 mov r0, r7
- 8021016: f000 fc41 bl 802189c <__aeabi_uidivmod>
- 802101a: 0c33 lsrs r3, r6, #16
- 802101c: fb09 f00a mul.w r0, r9, sl
- 8021020: ea43 4101 orr.w r1, r3, r1, lsl #16
- 8021024: 4288 cmp r0, r1
- 8021026: d90a bls.n 802103e <__divdi3+0x82>
- 8021028: 1909 adds r1, r1, r4
- 802102a: f10a 32ff add.w r2, sl, #4294967295
- 802102e: d205 bcs.n 802103c <__divdi3+0x80>
- 8021030: 4288 cmp r0, r1
- 8021032: bf84 itt hi
- 8021034: f1aa 0a02 subhi.w sl, sl, #2
- 8021038: 1909 addhi r1, r1, r4
- 802103a: d800 bhi.n 802103e <__divdi3+0x82>
- 802103c: 4692 mov sl, r2
- 802103e: ebc0 0b01 rsb fp, r0, r1
- 8021042: 4641 mov r1, r8
- 8021044: 4658 mov r0, fp
- 8021046: b2b6 uxth r6, r6
- 8021048: f000 fafa bl 8021640 <__aeabi_uidiv>
- 802104c: 4641 mov r1, r8
- 802104e: 4607 mov r7, r0
- 8021050: 4658 mov r0, fp
- 8021052: f000 fc23 bl 802189c <__aeabi_uidivmod>
- 8021056: fb09 f907 mul.w r9, r9, r7
- 802105a: ea46 4101 orr.w r1, r6, r1, lsl #16
- 802105e: 4589 cmp r9, r1
- 8021060: d907 bls.n 8021072 <__divdi3+0xb6>
- 8021062: 1e7b subs r3, r7, #1
- 8021064: 190c adds r4, r1, r4
- 8021066: f080 8157 bcs.w 8021318 <__divdi3+0x35c>
- 802106a: 3f02 subs r7, #2
- 802106c: 45a1 cmp r9, r4
- 802106e: f240 8153 bls.w 8021318 <__divdi3+0x35c>
- 8021072: ea47 400a orr.w r0, r7, sl, lsl #16
- 8021076: f04f 0800 mov.w r8, #0
- 802107a: e004 b.n 8021086 <__divdi3+0xca>
- 802107c: 4563 cmp r3, ip
- 802107e: d958 bls.n 8021132 <__divdi3+0x176>
- 8021080: f04f 0800 mov.w r8, #0
- 8021084: 4640 mov r0, r8
- 8021086: 4602 mov r2, r0
- 8021088: 4643 mov r3, r8
- 802108a: b115 cbz r5, 8021092 <__divdi3+0xd6>
- 802108c: 4252 negs r2, r2
- 802108e: eb63 0343 sbc.w r3, r3, r3, lsl #1
- 8021092: 4610 mov r0, r2
- 8021094: 4619 mov r1, r3
- 8021096: b005 add sp, #20
- 8021098: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 802109c: b922 cbnz r2, 80210a8 <__divdi3+0xec>
- 802109e: 2001 movs r0, #1
- 80210a0: 4611 mov r1, r2
- 80210a2: f000 facd bl 8021640 <__aeabi_uidiv>
- 80210a6: 4604 mov r4, r0
- 80210a8: fab4 f384 clz r3, r4
- 80210ac: 2b00 cmp r3, #0
- 80210ae: f040 80dc bne.w 802126a <__divdi3+0x2ae>
- 80210b2: 1b3f subs r7, r7, r4
- 80210b4: ea4f 4914 mov.w r9, r4, lsr #16
- 80210b8: fa1f fa84 uxth.w sl, r4
- 80210bc: f04f 0801 mov.w r8, #1
- 80210c0: 4649 mov r1, r9
- 80210c2: 4638 mov r0, r7
- 80210c4: f000 fabc bl 8021640 <__aeabi_uidiv>
- 80210c8: 4649 mov r1, r9
- 80210ca: 4683 mov fp, r0
- 80210cc: 4638 mov r0, r7
- 80210ce: f000 fbe5 bl 802189c <__aeabi_uidivmod>
- 80210d2: 0c33 lsrs r3, r6, #16
- 80210d4: fb0a f00b mul.w r0, sl, fp
- 80210d8: ea43 4101 orr.w r1, r3, r1, lsl #16
- 80210dc: 4288 cmp r0, r1
- 80210de: d90b bls.n 80210f8 <__divdi3+0x13c>
- 80210e0: 1909 adds r1, r1, r4
- 80210e2: f10b 33ff add.w r3, fp, #4294967295
- 80210e6: f080 8115 bcs.w 8021314 <__divdi3+0x358>
- 80210ea: 4288 cmp r0, r1
- 80210ec: bf84 itt hi
- 80210ee: f1ab 0b02 subhi.w fp, fp, #2
- 80210f2: 1909 addhi r1, r1, r4
- 80210f4: f240 810e bls.w 8021314 <__divdi3+0x358>
- 80210f8: 1a0b subs r3, r1, r0
- 80210fa: 4649 mov r1, r9
- 80210fc: 4618 mov r0, r3
- 80210fe: 9301 str r3, [sp, #4]
- 8021100: f000 fa9e bl 8021640 <__aeabi_uidiv>
- 8021104: 9b01 ldr r3, [sp, #4]
- 8021106: 4649 mov r1, r9
- 8021108: b2b6 uxth r6, r6
- 802110a: 4607 mov r7, r0
- 802110c: 4618 mov r0, r3
- 802110e: f000 fbc5 bl 802189c <__aeabi_uidivmod>
- 8021112: fb0a fa07 mul.w sl, sl, r7
- 8021116: ea46 4101 orr.w r1, r6, r1, lsl #16
- 802111a: 458a cmp sl, r1
- 802111c: d906 bls.n 802112c <__divdi3+0x170>
- 802111e: 1e7b subs r3, r7, #1
- 8021120: 190c adds r4, r1, r4
- 8021122: d202 bcs.n 802112a <__divdi3+0x16e>
- 8021124: 3f02 subs r7, #2
- 8021126: 45a2 cmp sl, r4
- 8021128: d800 bhi.n 802112c <__divdi3+0x170>
- 802112a: 461f mov r7, r3
- 802112c: ea47 400b orr.w r0, r7, fp, lsl #16
- 8021130: e7a9 b.n 8021086 <__divdi3+0xca>
- 8021132: fab3 f483 clz r4, r3
- 8021136: 2c00 cmp r4, #0
- 8021138: f000 80e4 beq.w 8021304 <__divdi3+0x348>
- 802113c: f1c4 0320 rsb r3, r4, #32
- 8021140: fa01 f104 lsl.w r1, r1, r4
- 8021144: fa22 fa03 lsr.w sl, r2, r3
- 8021148: fa2c fb03 lsr.w fp, ip, r3
- 802114c: ea4a 0a01 orr.w sl, sl, r1
- 8021150: fa20 f803 lsr.w r8, r0, r3
- 8021154: fa0c fc04 lsl.w ip, ip, r4
- 8021158: 4658 mov r0, fp
- 802115a: ea4f 471a mov.w r7, sl, lsr #16
- 802115e: ea48 080c orr.w r8, r8, ip
- 8021162: 4639 mov r1, r7
- 8021164: fa02 f904 lsl.w r9, r2, r4
- 8021168: f8cd 900c str.w r9, [sp, #12]
- 802116c: f000 fa68 bl 8021640 <__aeabi_uidiv>
- 8021170: 4639 mov r1, r7
- 8021172: 4681 mov r9, r0
- 8021174: 4658 mov r0, fp
- 8021176: f000 fb91 bl 802189c <__aeabi_uidivmod>
- 802117a: fa1f fc8a uxth.w ip, sl
- 802117e: ea4f 4318 mov.w r3, r8, lsr #16
- 8021182: fb0c f009 mul.w r0, ip, r9
- 8021186: ea43 4301 orr.w r3, r3, r1, lsl #16
- 802118a: 4298 cmp r0, r3
- 802118c: d90c bls.n 80211a8 <__divdi3+0x1ec>
- 802118e: eb13 030a adds.w r3, r3, sl
- 8021192: f109 31ff add.w r1, r9, #4294967295
- 8021196: f080 80c3 bcs.w 8021320 <__divdi3+0x364>
- 802119a: 4298 cmp r0, r3
- 802119c: bf84 itt hi
- 802119e: f1a9 0902 subhi.w r9, r9, #2
- 80211a2: 4453 addhi r3, sl
- 80211a4: f240 80bc bls.w 8021320 <__divdi3+0x364>
- 80211a8: 1a1b subs r3, r3, r0
- 80211aa: 4639 mov r1, r7
- 80211ac: 4618 mov r0, r3
- 80211ae: f8cd c008 str.w ip, [sp, #8]
- 80211b2: 9301 str r3, [sp, #4]
- 80211b4: f000 fa44 bl 8021640 <__aeabi_uidiv>
- 80211b8: 9b01 ldr r3, [sp, #4]
- 80211ba: 4639 mov r1, r7
- 80211bc: fa1f f888 uxth.w r8, r8
- 80211c0: 4683 mov fp, r0
- 80211c2: 4618 mov r0, r3
- 80211c4: f000 fb6a bl 802189c <__aeabi_uidivmod>
- 80211c8: f8dd c008 ldr.w ip, [sp, #8]
- 80211cc: fb0c f30b mul.w r3, ip, fp
- 80211d0: ea48 4101 orr.w r1, r8, r1, lsl #16
- 80211d4: 428b cmp r3, r1
- 80211d6: d90c bls.n 80211f2 <__divdi3+0x236>
- 80211d8: eb11 010a adds.w r1, r1, sl
- 80211dc: f10b 30ff add.w r0, fp, #4294967295
- 80211e0: f080 809c bcs.w 802131c <__divdi3+0x360>
- 80211e4: 428b cmp r3, r1
- 80211e6: bf84 itt hi
- 80211e8: f1ab 0b02 subhi.w fp, fp, #2
- 80211ec: 4451 addhi r1, sl
- 80211ee: f240 8095 bls.w 802131c <__divdi3+0x360>
- 80211f2: 9f03 ldr r7, [sp, #12]
- 80211f4: ea4b 4009 orr.w r0, fp, r9, lsl #16
- 80211f8: 1ac9 subs r1, r1, r3
- 80211fa: fa1f fc80 uxth.w ip, r0
- 80211fe: b2ba uxth r2, r7
- 8021200: ea4f 4917 mov.w r9, r7, lsr #16
- 8021204: 0c07 lsrs r7, r0, #16
- 8021206: fb02 f80c mul.w r8, r2, ip
- 802120a: fb02 f207 mul.w r2, r2, r7
- 802120e: fb09 230c mla r3, r9, ip, r2
- 8021212: fb09 f907 mul.w r9, r9, r7
- 8021216: eb03 4318 add.w r3, r3, r8, lsr #16
- 802121a: 429a cmp r2, r3
- 802121c: bf88 it hi
- 802121e: f509 3980 addhi.w r9, r9, #65536 ; 0x10000
- 8021222: eb09 4913 add.w r9, r9, r3, lsr #16
- 8021226: 4549 cmp r1, r9
- 8021228: d310 bcc.n 802124c <__divdi3+0x290>
- 802122a: fa1f f888 uxth.w r8, r8
- 802122e: bf14 ite ne
- 8021230: 2200 movne r2, #0
- 8021232: 2201 moveq r2, #1
- 8021234: fa06 f404 lsl.w r4, r6, r4
- 8021238: eb08 4303 add.w r3, r8, r3, lsl #16
- 802123c: 429c cmp r4, r3
- 802123e: bf2c ite cs
- 8021240: 2300 movcs r3, #0
- 8021242: f002 0301 andcc.w r3, r2, #1
- 8021246: 2b00 cmp r3, #0
- 8021248: f43f af15 beq.w 8021076 <__divdi3+0xba>
- 802124c: 3801 subs r0, #1
- 802124e: f04f 0800 mov.w r8, #0
- 8021252: e718 b.n 8021086 <__divdi3+0xca>
- 8021254: 4252 negs r2, r2
- 8021256: eb63 0343 sbc.w r3, r3, r3, lsl #1
- 802125a: 43ed mvns r5, r5
- 802125c: e6b9 b.n 8020fd2 <__divdi3+0x16>
- 802125e: 4240 negs r0, r0
- 8021260: eb61 0141 sbc.w r1, r1, r1, lsl #1
- 8021264: f04f 35ff mov.w r5, #4294967295
- 8021268: e6b0 b.n 8020fcc <__divdi3+0x10>
- 802126a: 409c lsls r4, r3
- 802126c: f1c3 0b20 rsb fp, r3, #32
- 8021270: fa27 f80b lsr.w r8, r7, fp
- 8021274: fa07 f703 lsl.w r7, r7, r3
- 8021278: ea4f 4914 mov.w r9, r4, lsr #16
- 802127c: 4640 mov r0, r8
- 802127e: 4649 mov r1, r9
- 8021280: fa26 fb0b lsr.w fp, r6, fp
- 8021284: 409e lsls r6, r3
- 8021286: f000 f9db bl 8021640 <__aeabi_uidiv>
- 802128a: 4649 mov r1, r9
- 802128c: fa1f fa84 uxth.w sl, r4
- 8021290: ea4b 0b07 orr.w fp, fp, r7
- 8021294: 4603 mov r3, r0
- 8021296: 4640 mov r0, r8
- 8021298: 9301 str r3, [sp, #4]
- 802129a: f000 faff bl 802189c <__aeabi_uidivmod>
- 802129e: 9b01 ldr r3, [sp, #4]
- 80212a0: ea4f 421b mov.w r2, fp, lsr #16
- 80212a4: fb0a f003 mul.w r0, sl, r3
- 80212a8: ea42 4101 orr.w r1, r2, r1, lsl #16
- 80212ac: 4288 cmp r0, r1
- 80212ae: d906 bls.n 80212be <__divdi3+0x302>
- 80212b0: 1e5a subs r2, r3, #1
- 80212b2: 1909 adds r1, r1, r4
- 80212b4: d236 bcs.n 8021324 <__divdi3+0x368>
- 80212b6: 4288 cmp r0, r1
- 80212b8: d934 bls.n 8021324 <__divdi3+0x368>
- 80212ba: 3b02 subs r3, #2
- 80212bc: 1909 adds r1, r1, r4
- 80212be: 1a0f subs r7, r1, r0
- 80212c0: 4649 mov r1, r9
- 80212c2: 4638 mov r0, r7
- 80212c4: 9301 str r3, [sp, #4]
- 80212c6: f000 f9bb bl 8021640 <__aeabi_uidiv>
- 80212ca: 4649 mov r1, r9
- 80212cc: fa1f fb8b uxth.w fp, fp
- 80212d0: 4680 mov r8, r0
- 80212d2: 4638 mov r0, r7
- 80212d4: f000 fae2 bl 802189c <__aeabi_uidivmod>
- 80212d8: 9b01 ldr r3, [sp, #4]
- 80212da: fb0a f708 mul.w r7, sl, r8
- 80212de: ea4b 4101 orr.w r1, fp, r1, lsl #16
- 80212e2: 428f cmp r7, r1
- 80212e4: d90a bls.n 80212fc <__divdi3+0x340>
- 80212e6: 1909 adds r1, r1, r4
- 80212e8: f108 32ff add.w r2, r8, #4294967295
- 80212ec: d205 bcs.n 80212fa <__divdi3+0x33e>
- 80212ee: 428f cmp r7, r1
- 80212f0: bf84 itt hi
- 80212f2: f1a8 0802 subhi.w r8, r8, #2
- 80212f6: 1909 addhi r1, r1, r4
- 80212f8: d800 bhi.n 80212fc <__divdi3+0x340>
- 80212fa: 4690 mov r8, r2
- 80212fc: 1bcf subs r7, r1, r7
- 80212fe: ea48 4803 orr.w r8, r8, r3, lsl #16
- 8021302: e6dd b.n 80210c0 <__divdi3+0x104>
- 8021304: 2001 movs r0, #1
- 8021306: 4563 cmp r3, ip
- 8021308: bf28 it cs
- 802130a: 4552 cmpcs r2, sl
- 802130c: 46a0 mov r8, r4
- 802130e: f67f aeba bls.w 8021086 <__divdi3+0xca>
- 8021312: e6b5 b.n 8021080 <__divdi3+0xc4>
- 8021314: 469b mov fp, r3
- 8021316: e6ef b.n 80210f8 <__divdi3+0x13c>
- 8021318: 461f mov r7, r3
- 802131a: e6aa b.n 8021072 <__divdi3+0xb6>
- 802131c: 4683 mov fp, r0
- 802131e: e768 b.n 80211f2 <__divdi3+0x236>
- 8021320: 4689 mov r9, r1
- 8021322: e741 b.n 80211a8 <__divdi3+0x1ec>
- 8021324: 4613 mov r3, r2
- 8021326: e7ca b.n 80212be <__divdi3+0x302>
- 08021328 <__udivdi3>:
- 8021328: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 802132c: 4606 mov r6, r0
- 802132e: b083 sub sp, #12
- 8021330: 460d mov r5, r1
- 8021332: 4614 mov r4, r2
- 8021334: 4607 mov r7, r0
- 8021336: 4688 mov r8, r1
- 8021338: 2b00 cmp r3, #0
- 802133a: d14a bne.n 80213d2 <__udivdi3+0xaa>
- 802133c: 428a cmp r2, r1
- 802133e: d955 bls.n 80213ec <__udivdi3+0xc4>
- 8021340: fab2 f382 clz r3, r2
- 8021344: b14b cbz r3, 802135a <__udivdi3+0x32>
- 8021346: f1c3 0220 rsb r2, r3, #32
- 802134a: fa01 f803 lsl.w r8, r1, r3
- 802134e: fa20 f202 lsr.w r2, r0, r2
- 8021352: 409c lsls r4, r3
- 8021354: ea42 0808 orr.w r8, r2, r8
- 8021358: 409f lsls r7, r3
- 802135a: 0c25 lsrs r5, r4, #16
- 802135c: 4640 mov r0, r8
- 802135e: 4629 mov r1, r5
- 8021360: fa1f fa84 uxth.w sl, r4
- 8021364: f000 f96c bl 8021640 <__aeabi_uidiv>
- 8021368: 4629 mov r1, r5
- 802136a: 4681 mov r9, r0
- 802136c: 4640 mov r0, r8
- 802136e: f000 fa95 bl 802189c <__aeabi_uidivmod>
- 8021372: 0c3b lsrs r3, r7, #16
- 8021374: fb0a f009 mul.w r0, sl, r9
- 8021378: ea43 4101 orr.w r1, r3, r1, lsl #16
- 802137c: 4288 cmp r0, r1
- 802137e: d90a bls.n 8021396 <__udivdi3+0x6e>
- 8021380: 1909 adds r1, r1, r4
- 8021382: f109 32ff add.w r2, r9, #4294967295
- 8021386: d205 bcs.n 8021394 <__udivdi3+0x6c>
- 8021388: 4288 cmp r0, r1
- 802138a: bf84 itt hi
- 802138c: f1a9 0902 subhi.w r9, r9, #2
- 8021390: 1909 addhi r1, r1, r4
- 8021392: d800 bhi.n 8021396 <__udivdi3+0x6e>
- 8021394: 4691 mov r9, r2
- 8021396: ebc0 0801 rsb r8, r0, r1
- 802139a: 4629 mov r1, r5
- 802139c: 4640 mov r0, r8
- 802139e: b2bf uxth r7, r7
- 80213a0: f000 f94e bl 8021640 <__aeabi_uidiv>
- 80213a4: 4629 mov r1, r5
- 80213a6: 4606 mov r6, r0
- 80213a8: 4640 mov r0, r8
- 80213aa: f000 fa77 bl 802189c <__aeabi_uidivmod>
- 80213ae: fb0a fa06 mul.w sl, sl, r6
- 80213b2: ea47 4101 orr.w r1, r7, r1, lsl #16
- 80213b6: 458a cmp sl, r1
- 80213b8: d907 bls.n 80213ca <__udivdi3+0xa2>
- 80213ba: 1e73 subs r3, r6, #1
- 80213bc: 190c adds r4, r1, r4
- 80213be: f080 8122 bcs.w 8021606 <__udivdi3+0x2de>
- 80213c2: 3e02 subs r6, #2
- 80213c4: 45a2 cmp sl, r4
- 80213c6: f240 811e bls.w 8021606 <__udivdi3+0x2de>
- 80213ca: ea46 4009 orr.w r0, r6, r9, lsl #16
- 80213ce: 2600 movs r6, #0
- 80213d0: e058 b.n 8021484 <__udivdi3+0x15c>
- 80213d2: 428b cmp r3, r1
- 80213d4: d854 bhi.n 8021480 <__udivdi3+0x158>
- 80213d6: fab3 f483 clz r4, r3
- 80213da: 2c00 cmp r4, #0
- 80213dc: d156 bne.n 802148c <__udivdi3+0x164>
- 80213de: 428b cmp r3, r1
- 80213e0: bf28 it cs
- 80213e2: 4282 cmpcs r2, r0
- 80213e4: d84c bhi.n 8021480 <__udivdi3+0x158>
- 80213e6: 4626 mov r6, r4
- 80213e8: 2001 movs r0, #1
- 80213ea: e04b b.n 8021484 <__udivdi3+0x15c>
- 80213ec: b922 cbnz r2, 80213f8 <__udivdi3+0xd0>
- 80213ee: 2001 movs r0, #1
- 80213f0: 4611 mov r1, r2
- 80213f2: f000 f925 bl 8021640 <__aeabi_uidiv>
- 80213f6: 4604 mov r4, r0
- 80213f8: fab4 f384 clz r3, r4
- 80213fc: 2b00 cmp r3, #0
- 80213fe: f040 80b9 bne.w 8021574 <__udivdi3+0x24c>
- 8021402: 1b2d subs r5, r5, r4
- 8021404: ea4f 4814 mov.w r8, r4, lsr #16
- 8021408: fa1f fa84 uxth.w sl, r4
- 802140c: 2601 movs r6, #1
- 802140e: 4641 mov r1, r8
- 8021410: 4628 mov r0, r5
- 8021412: f000 f915 bl 8021640 <__aeabi_uidiv>
- 8021416: 4641 mov r1, r8
- 8021418: 4681 mov r9, r0
- 802141a: 4628 mov r0, r5
- 802141c: f000 fa3e bl 802189c <__aeabi_uidivmod>
- 8021420: 0c3b lsrs r3, r7, #16
- 8021422: fb0a f009 mul.w r0, sl, r9
- 8021426: ea43 4101 orr.w r1, r3, r1, lsl #16
- 802142a: 4288 cmp r0, r1
- 802142c: d90b bls.n 8021446 <__udivdi3+0x11e>
- 802142e: 1909 adds r1, r1, r4
- 8021430: f109 33ff add.w r3, r9, #4294967295
- 8021434: f080 80e9 bcs.w 802160a <__udivdi3+0x2e2>
- 8021438: 4288 cmp r0, r1
- 802143a: bf84 itt hi
- 802143c: f1a9 0902 subhi.w r9, r9, #2
- 8021440: 1909 addhi r1, r1, r4
- 8021442: f240 80e2 bls.w 802160a <__udivdi3+0x2e2>
- 8021446: ebc0 0b01 rsb fp, r0, r1
- 802144a: 4641 mov r1, r8
- 802144c: 4658 mov r0, fp
- 802144e: b2bf uxth r7, r7
- 8021450: f000 f8f6 bl 8021640 <__aeabi_uidiv>
- 8021454: 4641 mov r1, r8
- 8021456: 4605 mov r5, r0
- 8021458: 4658 mov r0, fp
- 802145a: f000 fa1f bl 802189c <__aeabi_uidivmod>
- 802145e: fb0a fa05 mul.w sl, sl, r5
- 8021462: ea47 4101 orr.w r1, r7, r1, lsl #16
- 8021466: 458a cmp sl, r1
- 8021468: d907 bls.n 802147a <__udivdi3+0x152>
- 802146a: 1e6b subs r3, r5, #1
- 802146c: 190c adds r4, r1, r4
- 802146e: f080 80ce bcs.w 802160e <__udivdi3+0x2e6>
- 8021472: 3d02 subs r5, #2
- 8021474: 45a2 cmp sl, r4
- 8021476: f240 80ca bls.w 802160e <__udivdi3+0x2e6>
- 802147a: ea45 4009 orr.w r0, r5, r9, lsl #16
- 802147e: e001 b.n 8021484 <__udivdi3+0x15c>
- 8021480: 2600 movs r6, #0
- 8021482: 4630 mov r0, r6
- 8021484: 4631 mov r1, r6
- 8021486: b003 add sp, #12
- 8021488: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 802148c: f1c4 0120 rsb r1, r4, #32
- 8021490: fa03 f304 lsl.w r3, r3, r4
- 8021494: fa22 f801 lsr.w r8, r2, r1
- 8021498: fa25 f701 lsr.w r7, r5, r1
- 802149c: ea48 0803 orr.w r8, r8, r3
- 80214a0: fa20 f101 lsr.w r1, r0, r1
- 80214a4: fa05 f504 lsl.w r5, r5, r4
- 80214a8: 4638 mov r0, r7
- 80214aa: ea4f 4918 mov.w r9, r8, lsr #16
- 80214ae: 430d orrs r5, r1
- 80214b0: 4649 mov r1, r9
- 80214b2: fa02 f204 lsl.w r2, r2, r4
- 80214b6: 9201 str r2, [sp, #4]
- 80214b8: f000 f8c2 bl 8021640 <__aeabi_uidiv>
- 80214bc: 4649 mov r1, r9
- 80214be: 4682 mov sl, r0
- 80214c0: 4638 mov r0, r7
- 80214c2: f000 f9eb bl 802189c <__aeabi_uidivmod>
- 80214c6: fa1f f288 uxth.w r2, r8
- 80214ca: 0c2f lsrs r7, r5, #16
- 80214cc: fb02 f00a mul.w r0, r2, sl
- 80214d0: ea47 4701 orr.w r7, r7, r1, lsl #16
- 80214d4: 42b8 cmp r0, r7
- 80214d6: d906 bls.n 80214e6 <__udivdi3+0x1be>
- 80214d8: eb17 0708 adds.w r7, r7, r8
- 80214dc: f10a 31ff add.w r1, sl, #4294967295
- 80214e0: f0c0 809f bcc.w 8021622 <__udivdi3+0x2fa>
- 80214e4: 468a mov sl, r1
- 80214e6: 1a3f subs r7, r7, r0
- 80214e8: 4649 mov r1, r9
- 80214ea: 4638 mov r0, r7
- 80214ec: 9200 str r2, [sp, #0]
- 80214ee: f000 f8a7 bl 8021640 <__aeabi_uidiv>
- 80214f2: 4649 mov r1, r9
- 80214f4: b2ad uxth r5, r5
- 80214f6: 4683 mov fp, r0
- 80214f8: 4638 mov r0, r7
- 80214fa: f000 f9cf bl 802189c <__aeabi_uidivmod>
- 80214fe: 9a00 ldr r2, [sp, #0]
- 8021500: fb02 f70b mul.w r7, r2, fp
- 8021504: ea45 4101 orr.w r1, r5, r1, lsl #16
- 8021508: 428f cmp r7, r1
- 802150a: d905 bls.n 8021518 <__udivdi3+0x1f0>
- 802150c: eb11 0108 adds.w r1, r1, r8
- 8021510: f10b 32ff add.w r2, fp, #4294967295
- 8021514: d37d bcc.n 8021612 <__udivdi3+0x2ea>
- 8021516: 4693 mov fp, r2
- 8021518: 9b01 ldr r3, [sp, #4]
- 802151a: ea4b 400a orr.w r0, fp, sl, lsl #16
- 802151e: 1bc9 subs r1, r1, r7
- 8021520: ea4f 4c10 mov.w ip, r0, lsr #16
- 8021524: b29d uxth r5, r3
- 8021526: ea4f 4a13 mov.w sl, r3, lsr #16
- 802152a: b283 uxth r3, r0
- 802152c: fb05 f203 mul.w r2, r5, r3
- 8021530: fb05 f50c mul.w r5, r5, ip
- 8021534: fb0a 5303 mla r3, sl, r3, r5
- 8021538: fb0a fa0c mul.w sl, sl, ip
- 802153c: eb03 4312 add.w r3, r3, r2, lsr #16
- 8021540: 429d cmp r5, r3
- 8021542: bf88 it hi
- 8021544: f50a 3a80 addhi.w sl, sl, #65536 ; 0x10000
- 8021548: eb0a 4a13 add.w sl, sl, r3, lsr #16
- 802154c: 4551 cmp r1, sl
- 802154e: d30e bcc.n 802156e <__udivdi3+0x246>
- 8021550: b292 uxth r2, r2
- 8021552: bf14 ite ne
- 8021554: 2100 movne r1, #0
- 8021556: 2101 moveq r1, #1
- 8021558: fa06 f604 lsl.w r6, r6, r4
- 802155c: eb02 4303 add.w r3, r2, r3, lsl #16
- 8021560: 429e cmp r6, r3
- 8021562: bf2c ite cs
- 8021564: 2600 movcs r6, #0
- 8021566: f001 0601 andcc.w r6, r1, #1
- 802156a: 2e00 cmp r6, #0
- 802156c: d08a beq.n 8021484 <__udivdi3+0x15c>
- 802156e: 3801 subs r0, #1
- 8021570: 2600 movs r6, #0
- 8021572: e787 b.n 8021484 <__udivdi3+0x15c>
- 8021574: 409c lsls r4, r3
- 8021576: f1c3 0220 rsb r2, r3, #32
- 802157a: fa25 fa02 lsr.w sl, r5, r2
- 802157e: fa26 f902 lsr.w r9, r6, r2
- 8021582: ea4f 4814 mov.w r8, r4, lsr #16
- 8021586: 4650 mov r0, sl
- 8021588: 4641 mov r1, r8
- 802158a: fa05 f503 lsl.w r5, r5, r3
- 802158e: fa06 f703 lsl.w r7, r6, r3
- 8021592: f000 f855 bl 8021640 <__aeabi_uidiv>
- 8021596: 4641 mov r1, r8
- 8021598: ea49 0905 orr.w r9, r9, r5
- 802159c: 4683 mov fp, r0
- 802159e: 4650 mov r0, sl
- 80215a0: f000 f97c bl 802189c <__aeabi_uidivmod>
- 80215a4: fa1f fa84 uxth.w sl, r4
- 80215a8: ea4f 4319 mov.w r3, r9, lsr #16
- 80215ac: fb0a f00b mul.w r0, sl, fp
- 80215b0: ea43 4101 orr.w r1, r3, r1, lsl #16
- 80215b4: 4288 cmp r0, r1
- 80215b6: d909 bls.n 80215cc <__udivdi3+0x2a4>
- 80215b8: 1909 adds r1, r1, r4
- 80215ba: f10b 33ff add.w r3, fp, #4294967295
- 80215be: d238 bcs.n 8021632 <__udivdi3+0x30a>
- 80215c0: 4288 cmp r0, r1
- 80215c2: bf84 itt hi
- 80215c4: f1ab 0b02 subhi.w fp, fp, #2
- 80215c8: 1909 addhi r1, r1, r4
- 80215ca: d932 bls.n 8021632 <__udivdi3+0x30a>
- 80215cc: 1a0d subs r5, r1, r0
- 80215ce: 4641 mov r1, r8
- 80215d0: 4628 mov r0, r5
- 80215d2: fa1f f989 uxth.w r9, r9
- 80215d6: f000 f833 bl 8021640 <__aeabi_uidiv>
- 80215da: 4641 mov r1, r8
- 80215dc: 4606 mov r6, r0
- 80215de: 4628 mov r0, r5
- 80215e0: f000 f95c bl 802189c <__aeabi_uidivmod>
- 80215e4: fb0a f506 mul.w r5, sl, r6
- 80215e8: ea49 4101 orr.w r1, r9, r1, lsl #16
- 80215ec: 428d cmp r5, r1
- 80215ee: d906 bls.n 80215fe <__udivdi3+0x2d6>
- 80215f0: 1e73 subs r3, r6, #1
- 80215f2: 1909 adds r1, r1, r4
- 80215f4: d21f bcs.n 8021636 <__udivdi3+0x30e>
- 80215f6: 428d cmp r5, r1
- 80215f8: d91d bls.n 8021636 <__udivdi3+0x30e>
- 80215fa: 3e02 subs r6, #2
- 80215fc: 1909 adds r1, r1, r4
- 80215fe: 1b4d subs r5, r1, r5
- 8021600: ea46 460b orr.w r6, r6, fp, lsl #16
- 8021604: e703 b.n 802140e <__udivdi3+0xe6>
- 8021606: 461e mov r6, r3
- 8021608: e6df b.n 80213ca <__udivdi3+0xa2>
- 802160a: 4699 mov r9, r3
- 802160c: e71b b.n 8021446 <__udivdi3+0x11e>
- 802160e: 461d mov r5, r3
- 8021610: e733 b.n 802147a <__udivdi3+0x152>
- 8021612: 428f cmp r7, r1
- 8021614: bf84 itt hi
- 8021616: f1ab 0b02 subhi.w fp, fp, #2
- 802161a: 4441 addhi r1, r8
- 802161c: f63f af7c bhi.w 8021518 <__udivdi3+0x1f0>
- 8021620: e779 b.n 8021516 <__udivdi3+0x1ee>
- 8021622: 42b8 cmp r0, r7
- 8021624: bf84 itt hi
- 8021626: f1aa 0a02 subhi.w sl, sl, #2
- 802162a: 4447 addhi r7, r8
- 802162c: f63f af5b bhi.w 80214e6 <__udivdi3+0x1be>
- 8021630: e758 b.n 80214e4 <__udivdi3+0x1bc>
- 8021632: 469b mov fp, r3
- 8021634: e7ca b.n 80215cc <__udivdi3+0x2a4>
- 8021636: 461e mov r6, r3
- 8021638: e7e1 b.n 80215fe <__udivdi3+0x2d6>
- 802163a: bf00 nop
- 802163c: 0000 movs r0, r0
- 802163e: 0000 movs r0, r0
- 08021640 <__aeabi_uidiv>:
- 8021640: 1e4a subs r2, r1, #1
- 8021642: bf08 it eq
- 8021644: 4770 bxeq lr
- 8021646: f0c0 8124 bcc.w 8021892 <__aeabi_uidiv+0x252>
- 802164a: 4288 cmp r0, r1
- 802164c: f240 8116 bls.w 802187c <__aeabi_uidiv+0x23c>
- 8021650: 4211 tst r1, r2
- 8021652: f000 8117 beq.w 8021884 <__aeabi_uidiv+0x244>
- 8021656: fab0 f380 clz r3, r0
- 802165a: fab1 f281 clz r2, r1
- 802165e: eba2 0303 sub.w r3, r2, r3
- 8021662: f1c3 031f rsb r3, r3, #31
- 8021666: a204 add r2, pc, #16 ; (adr r2, 8021678 <__aeabi_uidiv+0x38>)
- 8021668: eb02 1303 add.w r3, r2, r3, lsl #4
- 802166c: f04f 0200 mov.w r2, #0
- 8021670: 469f mov pc, r3
- 8021672: bf00 nop
- 8021674: f3af 8000 nop.w
- 8021678: ebb0 7fc1 cmp.w r0, r1, lsl #31
- 802167c: bf00 nop
- 802167e: eb42 0202 adc.w r2, r2, r2
- 8021682: bf28 it cs
- 8021684: eba0 70c1 subcs.w r0, r0, r1, lsl #31
- 8021688: ebb0 7f81 cmp.w r0, r1, lsl #30
- 802168c: bf00 nop
- 802168e: eb42 0202 adc.w r2, r2, r2
- 8021692: bf28 it cs
- 8021694: eba0 7081 subcs.w r0, r0, r1, lsl #30
- 8021698: ebb0 7f41 cmp.w r0, r1, lsl #29
- 802169c: bf00 nop
- 802169e: eb42 0202 adc.w r2, r2, r2
- 80216a2: bf28 it cs
- 80216a4: eba0 7041 subcs.w r0, r0, r1, lsl #29
- 80216a8: ebb0 7f01 cmp.w r0, r1, lsl #28
- 80216ac: bf00 nop
- 80216ae: eb42 0202 adc.w r2, r2, r2
- 80216b2: bf28 it cs
- 80216b4: eba0 7001 subcs.w r0, r0, r1, lsl #28
- 80216b8: ebb0 6fc1 cmp.w r0, r1, lsl #27
- 80216bc: bf00 nop
- 80216be: eb42 0202 adc.w r2, r2, r2
- 80216c2: bf28 it cs
- 80216c4: eba0 60c1 subcs.w r0, r0, r1, lsl #27
- 80216c8: ebb0 6f81 cmp.w r0, r1, lsl #26
- 80216cc: bf00 nop
- 80216ce: eb42 0202 adc.w r2, r2, r2
- 80216d2: bf28 it cs
- 80216d4: eba0 6081 subcs.w r0, r0, r1, lsl #26
- 80216d8: ebb0 6f41 cmp.w r0, r1, lsl #25
- 80216dc: bf00 nop
- 80216de: eb42 0202 adc.w r2, r2, r2
- 80216e2: bf28 it cs
- 80216e4: eba0 6041 subcs.w r0, r0, r1, lsl #25
- 80216e8: ebb0 6f01 cmp.w r0, r1, lsl #24
- 80216ec: bf00 nop
- 80216ee: eb42 0202 adc.w r2, r2, r2
- 80216f2: bf28 it cs
- 80216f4: eba0 6001 subcs.w r0, r0, r1, lsl #24
- 80216f8: ebb0 5fc1 cmp.w r0, r1, lsl #23
- 80216fc: bf00 nop
- 80216fe: eb42 0202 adc.w r2, r2, r2
- 8021702: bf28 it cs
- 8021704: eba0 50c1 subcs.w r0, r0, r1, lsl #23
- 8021708: ebb0 5f81 cmp.w r0, r1, lsl #22
- 802170c: bf00 nop
- 802170e: eb42 0202 adc.w r2, r2, r2
- 8021712: bf28 it cs
- 8021714: eba0 5081 subcs.w r0, r0, r1, lsl #22
- 8021718: ebb0 5f41 cmp.w r0, r1, lsl #21
- 802171c: bf00 nop
- 802171e: eb42 0202 adc.w r2, r2, r2
- 8021722: bf28 it cs
- 8021724: eba0 5041 subcs.w r0, r0, r1, lsl #21
- 8021728: ebb0 5f01 cmp.w r0, r1, lsl #20
- 802172c: bf00 nop
- 802172e: eb42 0202 adc.w r2, r2, r2
- 8021732: bf28 it cs
- 8021734: eba0 5001 subcs.w r0, r0, r1, lsl #20
- 8021738: ebb0 4fc1 cmp.w r0, r1, lsl #19
- 802173c: bf00 nop
- 802173e: eb42 0202 adc.w r2, r2, r2
- 8021742: bf28 it cs
- 8021744: eba0 40c1 subcs.w r0, r0, r1, lsl #19
- 8021748: ebb0 4f81 cmp.w r0, r1, lsl #18
- 802174c: bf00 nop
- 802174e: eb42 0202 adc.w r2, r2, r2
- 8021752: bf28 it cs
- 8021754: eba0 4081 subcs.w r0, r0, r1, lsl #18
- 8021758: ebb0 4f41 cmp.w r0, r1, lsl #17
- 802175c: bf00 nop
- 802175e: eb42 0202 adc.w r2, r2, r2
- 8021762: bf28 it cs
- 8021764: eba0 4041 subcs.w r0, r0, r1, lsl #17
- 8021768: ebb0 4f01 cmp.w r0, r1, lsl #16
- 802176c: bf00 nop
- 802176e: eb42 0202 adc.w r2, r2, r2
- 8021772: bf28 it cs
- 8021774: eba0 4001 subcs.w r0, r0, r1, lsl #16
- 8021778: ebb0 3fc1 cmp.w r0, r1, lsl #15
- 802177c: bf00 nop
- 802177e: eb42 0202 adc.w r2, r2, r2
- 8021782: bf28 it cs
- 8021784: eba0 30c1 subcs.w r0, r0, r1, lsl #15
- 8021788: ebb0 3f81 cmp.w r0, r1, lsl #14
- 802178c: bf00 nop
- 802178e: eb42 0202 adc.w r2, r2, r2
- 8021792: bf28 it cs
- 8021794: eba0 3081 subcs.w r0, r0, r1, lsl #14
- 8021798: ebb0 3f41 cmp.w r0, r1, lsl #13
- 802179c: bf00 nop
- 802179e: eb42 0202 adc.w r2, r2, r2
- 80217a2: bf28 it cs
- 80217a4: eba0 3041 subcs.w r0, r0, r1, lsl #13
- 80217a8: ebb0 3f01 cmp.w r0, r1, lsl #12
- 80217ac: bf00 nop
- 80217ae: eb42 0202 adc.w r2, r2, r2
- 80217b2: bf28 it cs
- 80217b4: eba0 3001 subcs.w r0, r0, r1, lsl #12
- 80217b8: ebb0 2fc1 cmp.w r0, r1, lsl #11
- 80217bc: bf00 nop
- 80217be: eb42 0202 adc.w r2, r2, r2
- 80217c2: bf28 it cs
- 80217c4: eba0 20c1 subcs.w r0, r0, r1, lsl #11
- 80217c8: ebb0 2f81 cmp.w r0, r1, lsl #10
- 80217cc: bf00 nop
- 80217ce: eb42 0202 adc.w r2, r2, r2
- 80217d2: bf28 it cs
- 80217d4: eba0 2081 subcs.w r0, r0, r1, lsl #10
- 80217d8: ebb0 2f41 cmp.w r0, r1, lsl #9
- 80217dc: bf00 nop
- 80217de: eb42 0202 adc.w r2, r2, r2
- 80217e2: bf28 it cs
- 80217e4: eba0 2041 subcs.w r0, r0, r1, lsl #9
- 80217e8: ebb0 2f01 cmp.w r0, r1, lsl #8
- 80217ec: bf00 nop
- 80217ee: eb42 0202 adc.w r2, r2, r2
- 80217f2: bf28 it cs
- 80217f4: eba0 2001 subcs.w r0, r0, r1, lsl #8
- 80217f8: ebb0 1fc1 cmp.w r0, r1, lsl #7
- 80217fc: bf00 nop
- 80217fe: eb42 0202 adc.w r2, r2, r2
- 8021802: bf28 it cs
- 8021804: eba0 10c1 subcs.w r0, r0, r1, lsl #7
- 8021808: ebb0 1f81 cmp.w r0, r1, lsl #6
- 802180c: bf00 nop
- 802180e: eb42 0202 adc.w r2, r2, r2
- 8021812: bf28 it cs
- 8021814: eba0 1081 subcs.w r0, r0, r1, lsl #6
- 8021818: ebb0 1f41 cmp.w r0, r1, lsl #5
- 802181c: bf00 nop
- 802181e: eb42 0202 adc.w r2, r2, r2
- 8021822: bf28 it cs
- 8021824: eba0 1041 subcs.w r0, r0, r1, lsl #5
- 8021828: ebb0 1f01 cmp.w r0, r1, lsl #4
- 802182c: bf00 nop
- 802182e: eb42 0202 adc.w r2, r2, r2
- 8021832: bf28 it cs
- 8021834: eba0 1001 subcs.w r0, r0, r1, lsl #4
- 8021838: ebb0 0fc1 cmp.w r0, r1, lsl #3
- 802183c: bf00 nop
- 802183e: eb42 0202 adc.w r2, r2, r2
- 8021842: bf28 it cs
- 8021844: eba0 00c1 subcs.w r0, r0, r1, lsl #3
- 8021848: ebb0 0f81 cmp.w r0, r1, lsl #2
- 802184c: bf00 nop
- 802184e: eb42 0202 adc.w r2, r2, r2
- 8021852: bf28 it cs
- 8021854: eba0 0081 subcs.w r0, r0, r1, lsl #2
- 8021858: ebb0 0f41 cmp.w r0, r1, lsl #1
- 802185c: bf00 nop
- 802185e: eb42 0202 adc.w r2, r2, r2
- 8021862: bf28 it cs
- 8021864: eba0 0041 subcs.w r0, r0, r1, lsl #1
- 8021868: ebb0 0f01 cmp.w r0, r1
- 802186c: bf00 nop
- 802186e: eb42 0202 adc.w r2, r2, r2
- 8021872: bf28 it cs
- 8021874: eba0 0001 subcs.w r0, r0, r1
- 8021878: 4610 mov r0, r2
- 802187a: 4770 bx lr
- 802187c: bf0c ite eq
- 802187e: 2001 moveq r0, #1
- 8021880: 2000 movne r0, #0
- 8021882: 4770 bx lr
- 8021884: fab1 f281 clz r2, r1
- 8021888: f1c2 021f rsb r2, r2, #31
- 802188c: fa20 f002 lsr.w r0, r0, r2
- 8021890: 4770 bx lr
- 8021892: b108 cbz r0, 8021898 <__aeabi_uidiv+0x258>
- 8021894: f04f 30ff mov.w r0, #4294967295
- 8021898: f7ff bb8e b.w 8020fb8 <__aeabi_idiv0>
- 0802189c <__aeabi_uidivmod>:
- 802189c: 2900 cmp r1, #0
- 802189e: d0f8 beq.n 8021892 <__aeabi_uidiv+0x252>
- 80218a0: e92d 4003 stmdb sp!, {r0, r1, lr}
- 80218a4: f7ff fecc bl 8021640 <__aeabi_uidiv>
- 80218a8: e8bd 4006 ldmia.w sp!, {r1, r2, lr}
- 80218ac: fb02 f300 mul.w r3, r2, r0
- 80218b0: eba1 0103 sub.w r1, r1, r3
- 80218b4: 4770 bx lr
- 80218b6: bf00 nop
- 080218b8 <atof>:
- 80218b8: 2100 movs r1, #0
- 80218ba: f001 bde7 b.w 802348c <strtod>
- 80218be: bf00 nop
- 080218c0 <atoi>:
- 80218c0: 2100 movs r1, #0
- 80218c2: 220a movs r2, #10
- 80218c4: f001 bee2 b.w 802368c <strtol>
- 080218c8 <_atoi_r>:
- 80218c8: 2200 movs r2, #0
- 80218ca: 230a movs r3, #10
- 80218cc: f001 be3c b.w 8023548 <_strtol_r>
- 080218d0 <__libc_init_array>:
- 80218d0: b570 push {r4, r5, r6, lr}
- 80218d2: f645 36fc movw r6, #23548 ; 0x5bfc
- 80218d6: f645 35fc movw r5, #23548 ; 0x5bfc
- 80218da: f6c0 0604 movt r6, #2052 ; 0x804
- 80218de: f6c0 0504 movt r5, #2052 ; 0x804
- 80218e2: 1b76 subs r6, r6, r5
- 80218e4: 10b6 asrs r6, r6, #2
- 80218e6: d007 beq.n 80218f8 <__libc_init_array+0x28>
- 80218e8: 3d04 subs r5, #4
- 80218ea: 2400 movs r4, #0
- 80218ec: f855 3f04 ldr.w r3, [r5, #4]!
- 80218f0: 3401 adds r4, #1
- 80218f2: 4798 blx r3
- 80218f4: 42a6 cmp r6, r4
- 80218f6: d1f9 bne.n 80218ec <__libc_init_array+0x1c>
- 80218f8: f645 4600 movw r6, #23552 ; 0x5c00
- 80218fc: f645 35fc movw r5, #23548 ; 0x5bfc
- 8021900: f6c0 0604 movt r6, #2052 ; 0x804
- 8021904: f6c0 0504 movt r5, #2052 ; 0x804
- 8021908: 1b76 subs r6, r6, r5
- 802190a: f024 f967 bl 8045bdc <_init>
- 802190e: 10b6 asrs r6, r6, #2
- 8021910: d008 beq.n 8021924 <__libc_init_array+0x54>
- 8021912: 3d04 subs r5, #4
- 8021914: 2400 movs r4, #0
- 8021916: f855 3f04 ldr.w r3, [r5, #4]!
- 802191a: 3401 adds r4, #1
- 802191c: 4798 blx r3
- 802191e: 42a6 cmp r6, r4
- 8021920: d1f9 bne.n 8021916 <__libc_init_array+0x46>
- 8021922: bd70 pop {r4, r5, r6, pc}
- 8021924: bd70 pop {r4, r5, r6, pc}
- 8021926: bf00 nop
- 08021928 <memcmp>:
- 8021928: 2a03 cmp r2, #3
- 802192a: b470 push {r4, r5, r6}
- 802192c: d922 bls.n 8021974 <memcmp+0x4c>
- 802192e: ea41 0300 orr.w r3, r1, r0
- 8021932: 079b lsls r3, r3, #30
- 8021934: d013 beq.n 802195e <memcmp+0x36>
- 8021936: 7805 ldrb r5, [r0, #0]
- 8021938: 3a01 subs r2, #1
- 802193a: 780c ldrb r4, [r1, #0]
- 802193c: 2300 movs r3, #0
- 802193e: 42a5 cmp r5, r4
- 8021940: d006 beq.n 8021950 <memcmp+0x28>
- 8021942: e01b b.n 802197c <memcmp+0x54>
- 8021944: f810 5f01 ldrb.w r5, [r0, #1]!
- 8021948: f811 4f01 ldrb.w r4, [r1, #1]!
- 802194c: 42a5 cmp r5, r4
- 802194e: d115 bne.n 802197c <memcmp+0x54>
- 8021950: 4293 cmp r3, r2
- 8021952: f103 0301 add.w r3, r3, #1
- 8021956: d1f5 bne.n 8021944 <memcmp+0x1c>
- 8021958: 2000 movs r0, #0
- 802195a: bc70 pop {r4, r5, r6}
- 802195c: 4770 bx lr
- 802195e: 460c mov r4, r1
- 8021960: 4603 mov r3, r0
- 8021962: 3104 adds r1, #4
- 8021964: 3004 adds r0, #4
- 8021966: 681e ldr r6, [r3, #0]
- 8021968: 6825 ldr r5, [r4, #0]
- 802196a: 42ae cmp r6, r5
- 802196c: d108 bne.n 8021980 <memcmp+0x58>
- 802196e: 3a04 subs r2, #4
- 8021970: 2a03 cmp r2, #3
- 8021972: d8f4 bhi.n 802195e <memcmp+0x36>
- 8021974: 2a00 cmp r2, #0
- 8021976: d1de bne.n 8021936 <memcmp+0xe>
- 8021978: 4610 mov r0, r2
- 802197a: e7ee b.n 802195a <memcmp+0x32>
- 802197c: 1b28 subs r0, r5, r4
- 802197e: e7ec b.n 802195a <memcmp+0x32>
- 8021980: 4621 mov r1, r4
- 8021982: 4618 mov r0, r3
- 8021984: 2a00 cmp r2, #0
- 8021986: d1d6 bne.n 8021936 <memcmp+0xe>
- 8021988: e7f6 b.n 8021978 <memcmp+0x50>
- 802198a: bf00 nop
- 0802198c <memcpy>:
- 802198c: 2a03 cmp r2, #3
- 802198e: e92d 0ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp}
- 8021992: d809 bhi.n 80219a8 <memcpy+0x1c>
- 8021994: b12a cbz r2, 80219a2 <memcpy+0x16>
- 8021996: 2300 movs r3, #0
- 8021998: 5ccc ldrb r4, [r1, r3]
- 802199a: 54c4 strb r4, [r0, r3]
- 802199c: 3301 adds r3, #1
- 802199e: 4293 cmp r3, r2
- 80219a0: d1fa bne.n 8021998 <memcpy+0xc>
- 80219a2: e8bd 0ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp}
- 80219a6: 4770 bx lr
- 80219a8: 0783 lsls r3, r0, #30
- 80219aa: 4402 add r2, r0
- 80219ac: d00e beq.n 80219cc <memcpy+0x40>
- 80219ae: 1c44 adds r4, r0, #1
- 80219b0: 1c4d adds r5, r1, #1
- 80219b2: f815 7c01 ldrb.w r7, [r5, #-1]
- 80219b6: f004 0603 and.w r6, r4, #3
- 80219ba: 4623 mov r3, r4
- 80219bc: 3401 adds r4, #1
- 80219be: 4629 mov r1, r5
- 80219c0: 3501 adds r5, #1
- 80219c2: f804 7c02 strb.w r7, [r4, #-2]
- 80219c6: 2e00 cmp r6, #0
- 80219c8: d1f3 bne.n 80219b2 <memcpy+0x26>
- 80219ca: e000 b.n 80219ce <memcpy+0x42>
- 80219cc: 4603 mov r3, r0
- 80219ce: f011 0403 ands.w r4, r1, #3
- 80219d2: d06d beq.n 8021ab0 <memcpy+0x124>
- 80219d4: 1ad7 subs r7, r2, r3
- 80219d6: 1b0d subs r5, r1, r4
- 80219d8: 2f03 cmp r7, #3
- 80219da: 682e ldr r6, [r5, #0]
- 80219dc: dd19 ble.n 8021a12 <memcpy+0x86>
- 80219de: f1c4 0c04 rsb ip, r4, #4
- 80219e2: ea4f 08c4 mov.w r8, r4, lsl #3
- 80219e6: 1d1c adds r4, r3, #4
- 80219e8: ea4f 0ccc mov.w ip, ip, lsl #3
- 80219ec: f855 7f04 ldr.w r7, [r5, #4]!
- 80219f0: ebc4 0902 rsb r9, r4, r2
- 80219f4: 4623 mov r3, r4
- 80219f6: 3104 adds r1, #4
- 80219f8: 3404 adds r4, #4
- 80219fa: f1b9 0f03 cmp.w r9, #3
- 80219fe: fa26 fa08 lsr.w sl, r6, r8
- 8021a02: fa07 fb0c lsl.w fp, r7, ip
- 8021a06: 463e mov r6, r7
- 8021a08: ea4b 070a orr.w r7, fp, sl
- 8021a0c: f844 7c08 str.w r7, [r4, #-8]
- 8021a10: dcec bgt.n 80219ec <memcpy+0x60>
- 8021a12: 429a cmp r2, r3
- 8021a14: d9c5 bls.n 80219a2 <memcpy+0x16>
- 8021a16: 3301 adds r3, #1
- 8021a18: 3101 adds r1, #1
- 8021a1a: 3201 adds r2, #1
- 8021a1c: f811 4c01 ldrb.w r4, [r1, #-1]
- 8021a20: 3301 adds r3, #1
- 8021a22: 3101 adds r1, #1
- 8021a24: 4293 cmp r3, r2
- 8021a26: f803 4c02 strb.w r4, [r3, #-2]
- 8021a2a: d1f7 bne.n 8021a1c <memcpy+0x90>
- 8021a2c: e7b9 b.n 80219a2 <memcpy+0x16>
- 8021a2e: 680c ldr r4, [r1, #0]
- 8021a30: 3340 adds r3, #64 ; 0x40
- 8021a32: 3140 adds r1, #64 ; 0x40
- 8021a34: f843 4c40 str.w r4, [r3, #-64]
- 8021a38: f851 4c3c ldr.w r4, [r1, #-60]
- 8021a3c: f843 4c3c str.w r4, [r3, #-60]
- 8021a40: f851 4c38 ldr.w r4, [r1, #-56]
- 8021a44: f843 4c38 str.w r4, [r3, #-56]
- 8021a48: f851 4c34 ldr.w r4, [r1, #-52]
- 8021a4c: f843 4c34 str.w r4, [r3, #-52]
- 8021a50: f851 4c30 ldr.w r4, [r1, #-48]
- 8021a54: f843 4c30 str.w r4, [r3, #-48]
- 8021a58: f851 4c2c ldr.w r4, [r1, #-44]
- 8021a5c: f843 4c2c str.w r4, [r3, #-44]
- 8021a60: f851 4c28 ldr.w r4, [r1, #-40]
- 8021a64: f843 4c28 str.w r4, [r3, #-40]
- 8021a68: f851 4c24 ldr.w r4, [r1, #-36]
- 8021a6c: f843 4c24 str.w r4, [r3, #-36]
- 8021a70: f851 4c20 ldr.w r4, [r1, #-32]
- 8021a74: f843 4c20 str.w r4, [r3, #-32]
- 8021a78: f851 4c1c ldr.w r4, [r1, #-28]
- 8021a7c: f843 4c1c str.w r4, [r3, #-28]
- 8021a80: f851 4c18 ldr.w r4, [r1, #-24]
- 8021a84: f843 4c18 str.w r4, [r3, #-24]
- 8021a88: f851 4c14 ldr.w r4, [r1, #-20]
- 8021a8c: f843 4c14 str.w r4, [r3, #-20]
- 8021a90: f851 4c10 ldr.w r4, [r1, #-16]
- 8021a94: f843 4c10 str.w r4, [r3, #-16]
- 8021a98: f851 4c0c ldr.w r4, [r1, #-12]
- 8021a9c: f843 4c0c str.w r4, [r3, #-12]
- 8021aa0: f851 4c08 ldr.w r4, [r1, #-8]
- 8021aa4: f843 4c08 str.w r4, [r3, #-8]
- 8021aa8: f851 4c04 ldr.w r4, [r1, #-4]
- 8021aac: f843 4c04 str.w r4, [r3, #-4]
- 8021ab0: 1ad4 subs r4, r2, r3
- 8021ab2: 2c3f cmp r4, #63 ; 0x3f
- 8021ab4: dcbb bgt.n 8021a2e <memcpy+0xa2>
- 8021ab6: e011 b.n 8021adc <memcpy+0x150>
- 8021ab8: 680c ldr r4, [r1, #0]
- 8021aba: 3310 adds r3, #16
- 8021abc: 3110 adds r1, #16
- 8021abe: f843 4c10 str.w r4, [r3, #-16]
- 8021ac2: f851 4c0c ldr.w r4, [r1, #-12]
- 8021ac6: f843 4c0c str.w r4, [r3, #-12]
- 8021aca: f851 4c08 ldr.w r4, [r1, #-8]
- 8021ace: f843 4c08 str.w r4, [r3, #-8]
- 8021ad2: f851 4c04 ldr.w r4, [r1, #-4]
- 8021ad6: f843 4c04 str.w r4, [r3, #-4]
- 8021ada: 1ad4 subs r4, r2, r3
- 8021adc: 2c0f cmp r4, #15
- 8021ade: dceb bgt.n 8021ab8 <memcpy+0x12c>
- 8021ae0: 2c03 cmp r4, #3
- 8021ae2: dd96 ble.n 8021a12 <memcpy+0x86>
- 8021ae4: 1d1c adds r4, r3, #4
- 8021ae6: 1d0d adds r5, r1, #4
- 8021ae8: f855 7c04 ldr.w r7, [r5, #-4]
- 8021aec: 1b16 subs r6, r2, r4
- 8021aee: 4623 mov r3, r4
- 8021af0: 4629 mov r1, r5
- 8021af2: 3404 adds r4, #4
- 8021af4: 3504 adds r5, #4
- 8021af6: 2e03 cmp r6, #3
- 8021af8: f844 7c08 str.w r7, [r4, #-8]
- 8021afc: dcf4 bgt.n 8021ae8 <memcpy+0x15c>
- 8021afe: e788 b.n 8021a12 <memcpy+0x86>
- 08021b00 <memset>:
- 8021b00: 2a03 cmp r2, #3
- 8021b02: b2c9 uxtb r1, r1
- 8021b04: b470 push {r4, r5, r6}
- 8021b06: d808 bhi.n 8021b1a <memset+0x1a>
- 8021b08: b12a cbz r2, 8021b16 <memset+0x16>
- 8021b0a: 4603 mov r3, r0
- 8021b0c: 1812 adds r2, r2, r0
- 8021b0e: f803 1b01 strb.w r1, [r3], #1
- 8021b12: 4293 cmp r3, r2
- 8021b14: d1fb bne.n 8021b0e <memset+0xe>
- 8021b16: bc70 pop {r4, r5, r6}
- 8021b18: 4770 bx lr
- 8021b1a: 0783 lsls r3, r0, #30
- 8021b1c: 4402 add r2, r0
- 8021b1e: d009 beq.n 8021b34 <memset+0x34>
- 8021b20: 1c44 adds r4, r0, #1
- 8021b22: f004 0503 and.w r5, r4, #3
- 8021b26: 4623 mov r3, r4
- 8021b28: f804 1c01 strb.w r1, [r4, #-1]
- 8021b2c: 3401 adds r4, #1
- 8021b2e: 2d00 cmp r5, #0
- 8021b30: d1f7 bne.n 8021b22 <memset+0x22>
- 8021b32: e000 b.n 8021b36 <memset+0x36>
- 8021b34: 4603 mov r3, r0
- 8021b36: 1ad5 subs r5, r2, r3
- 8021b38: eb01 2401 add.w r4, r1, r1, lsl #8
- 8021b3c: 2d3f cmp r5, #63 ; 0x3f
- 8021b3e: eb04 4404 add.w r4, r4, r4, lsl #16
- 8021b42: dd2c ble.n 8021b9e <memset+0x9e>
- 8021b44: 601c str r4, [r3, #0]
- 8021b46: 3340 adds r3, #64 ; 0x40
- 8021b48: 1ad5 subs r5, r2, r3
- 8021b4a: f843 4c3c str.w r4, [r3, #-60]
- 8021b4e: 2d3f cmp r5, #63 ; 0x3f
- 8021b50: f843 4c38 str.w r4, [r3, #-56]
- 8021b54: f843 4c34 str.w r4, [r3, #-52]
- 8021b58: f843 4c30 str.w r4, [r3, #-48]
- 8021b5c: f843 4c2c str.w r4, [r3, #-44]
- 8021b60: f843 4c28 str.w r4, [r3, #-40]
- 8021b64: f843 4c24 str.w r4, [r3, #-36]
- 8021b68: f843 4c20 str.w r4, [r3, #-32]
- 8021b6c: f843 4c1c str.w r4, [r3, #-28]
- 8021b70: f843 4c18 str.w r4, [r3, #-24]
- 8021b74: f843 4c14 str.w r4, [r3, #-20]
- 8021b78: f843 4c10 str.w r4, [r3, #-16]
- 8021b7c: f843 4c0c str.w r4, [r3, #-12]
- 8021b80: f843 4c08 str.w r4, [r3, #-8]
- 8021b84: f843 4c04 str.w r4, [r3, #-4]
- 8021b88: dcdc bgt.n 8021b44 <memset+0x44>
- 8021b8a: e008 b.n 8021b9e <memset+0x9e>
- 8021b8c: 601c str r4, [r3, #0]
- 8021b8e: 3310 adds r3, #16
- 8021b90: 1ad5 subs r5, r2, r3
- 8021b92: f843 4c0c str.w r4, [r3, #-12]
- 8021b96: f843 4c08 str.w r4, [r3, #-8]
- 8021b9a: f843 4c04 str.w r4, [r3, #-4]
- 8021b9e: 2d0f cmp r5, #15
- 8021ba0: dcf4 bgt.n 8021b8c <memset+0x8c>
- 8021ba2: 2d03 cmp r5, #3
- 8021ba4: dd08 ble.n 8021bb8 <memset+0xb8>
- 8021ba6: 1d1d adds r5, r3, #4
- 8021ba8: 1b56 subs r6, r2, r5
- 8021baa: f845 4c04 str.w r4, [r5, #-4]
- 8021bae: 2e03 cmp r6, #3
- 8021bb0: 462b mov r3, r5
- 8021bb2: f105 0504 add.w r5, r5, #4
- 8021bb6: dcf7 bgt.n 8021ba8 <memset+0xa8>
- 8021bb8: 429a cmp r2, r3
- 8021bba: d9ac bls.n 8021b16 <memset+0x16>
- 8021bbc: 3301 adds r3, #1
- 8021bbe: 3201 adds r2, #1
- 8021bc0: f803 1c01 strb.w r1, [r3, #-1]
- 8021bc4: 3301 adds r3, #1
- 8021bc6: 4293 cmp r3, r2
- 8021bc8: d1fa bne.n 8021bc0 <memset+0xc0>
- 8021bca: e7a4 b.n 8021b16 <memset+0x16>
- 08021bcc <strcat>:
- 8021bcc: 0783 lsls r3, r0, #30
- 8021bce: b570 push {r4, r5, r6, lr}
- 8021bd0: 4606 mov r6, r0
- 8021bd2: d114 bne.n 8021bfe <strcat+0x32>
- 8021bd4: 6803 ldr r3, [r0, #0]
- 8021bd6: f1a3 3201 sub.w r2, r3, #16843009 ; 0x1010101
- 8021bda: ea22 0303 bic.w r3, r2, r3
- 8021bde: f013 3f80 tst.w r3, #2155905152 ; 0x80808080
- 8021be2: d10c bne.n 8021bfe <strcat+0x32>
- 8021be4: 1d03 adds r3, r0, #4
- 8021be6: 461a mov r2, r3
- 8021be8: f853 4b04 ldr.w r4, [r3], #4
- 8021bec: f1a4 3501 sub.w r5, r4, #16843009 ; 0x1010101
- 8021bf0: ea25 0404 bic.w r4, r5, r4
- 8021bf4: f014 3f80 tst.w r4, #2155905152 ; 0x80808080
- 8021bf8: d0f5 beq.n 8021be6 <strcat+0x1a>
- 8021bfa: 4610 mov r0, r2
- 8021bfc: e000 b.n 8021c00 <strcat+0x34>
- 8021bfe: 4630 mov r0, r6
- 8021c00: 7803 ldrb r3, [r0, #0]
- 8021c02: b12b cbz r3, 8021c10 <strcat+0x44>
- 8021c04: 1c43 adds r3, r0, #1
- 8021c06: 4618 mov r0, r3
- 8021c08: 3301 adds r3, #1
- 8021c0a: 7804 ldrb r4, [r0, #0]
- 8021c0c: 2c00 cmp r4, #0
- 8021c0e: d1fa bne.n 8021c06 <strcat+0x3a>
- 8021c10: f000 f8f0 bl 8021df4 <strcpy>
- 8021c14: 4630 mov r0, r6
- 8021c16: bd70 pop {r4, r5, r6, pc}
- 08021c18 <strcmp>:
- 8021c18: ea80 0201 eor.w r2, r0, r1
- 8021c1c: f012 0f03 tst.w r2, #3
- 8021c20: f040 803a bne.w 8021c98 <strcmp_unaligned>
- 8021c24: f010 0203 ands.w r2, r0, #3
- 8021c28: f020 0003 bic.w r0, r0, #3
- 8021c2c: f021 0103 bic.w r1, r1, #3
- 8021c30: f850 cb04 ldr.w ip, [r0], #4
- 8021c34: bf08 it eq
- 8021c36: f851 3b04 ldreq.w r3, [r1], #4
- 8021c3a: d00d beq.n 8021c58 <strcmp+0x40>
- 8021c3c: f082 0203 eor.w r2, r2, #3
- 8021c40: ea4f 02c2 mov.w r2, r2, lsl #3
- 8021c44: f06f 437f mvn.w r3, #4278190080 ; 0xff000000
- 8021c48: fa23 f202 lsr.w r2, r3, r2
- 8021c4c: f851 3b04 ldr.w r3, [r1], #4
- 8021c50: ea4c 0c02 orr.w ip, ip, r2
- 8021c54: ea43 0302 orr.w r3, r3, r2
- 8021c58: f1ac 3201 sub.w r2, ip, #16843009 ; 0x1010101
- 8021c5c: 459c cmp ip, r3
- 8021c5e: bf01 itttt eq
- 8021c60: ea22 020c biceq.w r2, r2, ip
- 8021c64: f012 3f80 tsteq.w r2, #2155905152 ; 0x80808080
- 8021c68: f850 cb04 ldreq.w ip, [r0], #4
- 8021c6c: f851 3b04 ldreq.w r3, [r1], #4
- 8021c70: d0f2 beq.n 8021c58 <strcmp+0x40>
- 8021c72: ea4f 600c mov.w r0, ip, lsl #24
- 8021c76: ea4f 2c1c mov.w ip, ip, lsr #8
- 8021c7a: 2801 cmp r0, #1
- 8021c7c: bf28 it cs
- 8021c7e: ebb0 6f03 cmpcs.w r0, r3, lsl #24
- 8021c82: bf08 it eq
- 8021c84: 0a1b lsreq r3, r3, #8
- 8021c86: d0f4 beq.n 8021c72 <strcmp+0x5a>
- 8021c88: f003 03ff and.w r3, r3, #255 ; 0xff
- 8021c8c: ea4f 6010 mov.w r0, r0, lsr #24
- 8021c90: eba0 0003 sub.w r0, r0, r3
- 8021c94: 4770 bx lr
- 8021c96: bf00 nop
- 08021c98 <strcmp_unaligned>:
- 8021c98: f010 0f03 tst.w r0, #3
- 8021c9c: d00a beq.n 8021cb4 <strcmp_unaligned+0x1c>
- 8021c9e: f810 2b01 ldrb.w r2, [r0], #1
- 8021ca2: f811 3b01 ldrb.w r3, [r1], #1
- 8021ca6: 2a01 cmp r2, #1
- 8021ca8: bf28 it cs
- 8021caa: 429a cmpcs r2, r3
- 8021cac: d0f4 beq.n 8021c98 <strcmp_unaligned>
- 8021cae: eba2 0003 sub.w r0, r2, r3
- 8021cb2: 4770 bx lr
- 8021cb4: f84d 5d04 str.w r5, [sp, #-4]!
- 8021cb8: f84d 4d04 str.w r4, [sp, #-4]!
- 8021cbc: f04f 0201 mov.w r2, #1
- 8021cc0: ea42 2202 orr.w r2, r2, r2, lsl #8
- 8021cc4: ea42 4202 orr.w r2, r2, r2, lsl #16
- 8021cc8: f001 0c03 and.w ip, r1, #3
- 8021ccc: f021 0103 bic.w r1, r1, #3
- 8021cd0: f850 4b04 ldr.w r4, [r0], #4
- 8021cd4: f851 5b04 ldr.w r5, [r1], #4
- 8021cd8: f1bc 0f02 cmp.w ip, #2
- 8021cdc: d026 beq.n 8021d2c <strcmp_unaligned+0x94>
- 8021cde: d84b bhi.n 8021d78 <strcmp_unaligned+0xe0>
- 8021ce0: f024 4c7f bic.w ip, r4, #4278190080 ; 0xff000000
- 8021ce4: ebbc 2f15 cmp.w ip, r5, lsr #8
- 8021ce8: eba4 0302 sub.w r3, r4, r2
- 8021cec: ea23 0304 bic.w r3, r3, r4
- 8021cf0: d10d bne.n 8021d0e <strcmp_unaligned+0x76>
- 8021cf2: ea13 13c2 ands.w r3, r3, r2, lsl #7
- 8021cf6: bf08 it eq
- 8021cf8: f851 5b04 ldreq.w r5, [r1], #4
- 8021cfc: d10a bne.n 8021d14 <strcmp_unaligned+0x7c>
- 8021cfe: ea8c 0c04 eor.w ip, ip, r4
- 8021d02: ebbc 6f05 cmp.w ip, r5, lsl #24
- 8021d06: d10c bne.n 8021d22 <strcmp_unaligned+0x8a>
- 8021d08: f850 4b04 ldr.w r4, [r0], #4
- 8021d0c: e7e8 b.n 8021ce0 <strcmp_unaligned+0x48>
- 8021d0e: ea4f 2515 mov.w r5, r5, lsr #8
- 8021d12: e05c b.n 8021dce <strcmp_unaligned+0x136>
- 8021d14: f033 437f bics.w r3, r3, #4278190080 ; 0xff000000
- 8021d18: d152 bne.n 8021dc0 <strcmp_unaligned+0x128>
- 8021d1a: 780d ldrb r5, [r1, #0]
- 8021d1c: ea4f 6c14 mov.w ip, r4, lsr #24
- 8021d20: e055 b.n 8021dce <strcmp_unaligned+0x136>
- 8021d22: ea4f 6c14 mov.w ip, r4, lsr #24
- 8021d26: f005 05ff and.w r5, r5, #255 ; 0xff
- 8021d2a: e050 b.n 8021dce <strcmp_unaligned+0x136>
- 8021d2c: ea4f 4c04 mov.w ip, r4, lsl #16
- 8021d30: eba4 0302 sub.w r3, r4, r2
- 8021d34: ea4f 4c1c mov.w ip, ip, lsr #16
- 8021d38: ea23 0304 bic.w r3, r3, r4
- 8021d3c: ebbc 4f15 cmp.w ip, r5, lsr #16
- 8021d40: d117 bne.n 8021d72 <strcmp_unaligned+0xda>
- 8021d42: ea13 13c2 ands.w r3, r3, r2, lsl #7
- 8021d46: bf08 it eq
- 8021d48: f851 5b04 ldreq.w r5, [r1], #4
- 8021d4c: d107 bne.n 8021d5e <strcmp_unaligned+0xc6>
- 8021d4e: ea8c 0c04 eor.w ip, ip, r4
- 8021d52: ebbc 4f05 cmp.w ip, r5, lsl #16
- 8021d56: d108 bne.n 8021d6a <strcmp_unaligned+0xd2>
- 8021d58: f850 4b04 ldr.w r4, [r0], #4
- 8021d5c: e7e6 b.n 8021d2c <strcmp_unaligned+0x94>
- 8021d5e: 041b lsls r3, r3, #16
- 8021d60: d12e bne.n 8021dc0 <strcmp_unaligned+0x128>
- 8021d62: 880d ldrh r5, [r1, #0]
- 8021d64: ea4f 4c14 mov.w ip, r4, lsr #16
- 8021d68: e031 b.n 8021dce <strcmp_unaligned+0x136>
- 8021d6a: ea4f 4505 mov.w r5, r5, lsl #16
- 8021d6e: ea4f 4c14 mov.w ip, r4, lsr #16
- 8021d72: ea4f 4515 mov.w r5, r5, lsr #16
- 8021d76: e02a b.n 8021dce <strcmp_unaligned+0x136>
- 8021d78: f004 0cff and.w ip, r4, #255 ; 0xff
- 8021d7c: ebbc 6f15 cmp.w ip, r5, lsr #24
- 8021d80: eba4 0302 sub.w r3, r4, r2
- 8021d84: ea23 0304 bic.w r3, r3, r4
- 8021d88: d10d bne.n 8021da6 <strcmp_unaligned+0x10e>
- 8021d8a: ea13 13c2 ands.w r3, r3, r2, lsl #7
- 8021d8e: bf08 it eq
- 8021d90: f851 5b04 ldreq.w r5, [r1], #4
- 8021d94: d10a bne.n 8021dac <strcmp_unaligned+0x114>
- 8021d96: ea8c 0c04 eor.w ip, ip, r4
- 8021d9a: ebbc 2f05 cmp.w ip, r5, lsl #8
- 8021d9e: d10a bne.n 8021db6 <strcmp_unaligned+0x11e>
- 8021da0: f850 4b04 ldr.w r4, [r0], #4
- 8021da4: e7e8 b.n 8021d78 <strcmp_unaligned+0xe0>
- 8021da6: ea4f 6515 mov.w r5, r5, lsr #24
- 8021daa: e010 b.n 8021dce <strcmp_unaligned+0x136>
- 8021dac: f014 0fff tst.w r4, #255 ; 0xff
- 8021db0: d006 beq.n 8021dc0 <strcmp_unaligned+0x128>
- 8021db2: f851 5b04 ldr.w r5, [r1], #4
- 8021db6: ea4f 2c14 mov.w ip, r4, lsr #8
- 8021dba: f025 457f bic.w r5, r5, #4278190080 ; 0xff000000
- 8021dbe: e006 b.n 8021dce <strcmp_unaligned+0x136>
- 8021dc0: f04f 0000 mov.w r0, #0
- 8021dc4: f85d 4b04 ldr.w r4, [sp], #4
- 8021dc8: f85d 5b04 ldr.w r5, [sp], #4
- 8021dcc: 4770 bx lr
- 8021dce: f00c 02ff and.w r2, ip, #255 ; 0xff
- 8021dd2: f005 00ff and.w r0, r5, #255 ; 0xff
- 8021dd6: 2801 cmp r0, #1
- 8021dd8: bf28 it cs
- 8021dda: 4290 cmpcs r0, r2
- 8021ddc: bf04 itt eq
- 8021dde: ea4f 2c1c moveq.w ip, ip, lsr #8
- 8021de2: 0a2d lsreq r5, r5, #8
- 8021de4: d0f3 beq.n 8021dce <strcmp_unaligned+0x136>
- 8021de6: eba2 0000 sub.w r0, r2, r0
- 8021dea: f85d 4b04 ldr.w r4, [sp], #4
- 8021dee: f85d 5b04 ldr.w r5, [sp], #4
- 8021df2: 4770 bx lr
- 08021df4 <strcpy>:
- 8021df4: ea80 0201 eor.w r2, r0, r1
- 8021df8: 4684 mov ip, r0
- 8021dfa: f012 0f03 tst.w r2, #3
- 8021dfe: d14f bne.n 8021ea0 <strcpy+0xac>
- 8021e00: f011 0f03 tst.w r1, #3
- 8021e04: d132 bne.n 8021e6c <strcpy+0x78>
- 8021e06: f84d 4d04 str.w r4, [sp, #-4]!
- 8021e0a: f011 0f04 tst.w r1, #4
- 8021e0e: f851 3b04 ldr.w r3, [r1], #4
- 8021e12: d00b beq.n 8021e2c <strcpy+0x38>
- 8021e14: f1a3 3201 sub.w r2, r3, #16843009 ; 0x1010101
- 8021e18: 439a bics r2, r3
- 8021e1a: f012 3f80 tst.w r2, #2155905152 ; 0x80808080
- 8021e1e: bf04 itt eq
- 8021e20: f84c 3b04 streq.w r3, [ip], #4
- 8021e24: f851 3b04 ldreq.w r3, [r1], #4
- 8021e28: d116 bne.n 8021e58 <strcpy+0x64>
- 8021e2a: bf00 nop
- 8021e2c: f851 4b04 ldr.w r4, [r1], #4
- 8021e30: f1a3 3201 sub.w r2, r3, #16843009 ; 0x1010101
- 8021e34: 439a bics r2, r3
- 8021e36: f012 3f80 tst.w r2, #2155905152 ; 0x80808080
- 8021e3a: f1a4 3201 sub.w r2, r4, #16843009 ; 0x1010101
- 8021e3e: d10b bne.n 8021e58 <strcpy+0x64>
- 8021e40: f84c 3b04 str.w r3, [ip], #4
- 8021e44: 43a2 bics r2, r4
- 8021e46: f012 3f80 tst.w r2, #2155905152 ; 0x80808080
- 8021e4a: bf04 itt eq
- 8021e4c: f851 3b04 ldreq.w r3, [r1], #4
- 8021e50: f84c 4b04 streq.w r4, [ip], #4
- 8021e54: d0ea beq.n 8021e2c <strcpy+0x38>
- 8021e56: 4623 mov r3, r4
- 8021e58: f80c 3b01 strb.w r3, [ip], #1
- 8021e5c: f013 0fff tst.w r3, #255 ; 0xff
- 8021e60: ea4f 2333 mov.w r3, r3, ror #8
- 8021e64: d1f8 bne.n 8021e58 <strcpy+0x64>
- 8021e66: f85d 4b04 ldr.w r4, [sp], #4
- 8021e6a: 4770 bx lr
- 8021e6c: f011 0f01 tst.w r1, #1
- 8021e70: d006 beq.n 8021e80 <strcpy+0x8c>
- 8021e72: f811 2b01 ldrb.w r2, [r1], #1
- 8021e76: f80c 2b01 strb.w r2, [ip], #1
- 8021e7a: 2a00 cmp r2, #0
- 8021e7c: bf08 it eq
- 8021e7e: 4770 bxeq lr
- 8021e80: f011 0f02 tst.w r1, #2
- 8021e84: d0bf beq.n 8021e06 <strcpy+0x12>
- 8021e86: f831 2b02 ldrh.w r2, [r1], #2
- 8021e8a: f012 0fff tst.w r2, #255 ; 0xff
- 8021e8e: bf16 itet ne
- 8021e90: f82c 2b02 strhne.w r2, [ip], #2
- 8021e94: f88c 2000 strbeq.w r2, [ip]
- 8021e98: f412 4f7f tstne.w r2, #65280 ; 0xff00
- 8021e9c: d1b3 bne.n 8021e06 <strcpy+0x12>
- 8021e9e: 4770 bx lr
- 8021ea0: f811 2b01 ldrb.w r2, [r1], #1
- 8021ea4: f80c 2b01 strb.w r2, [ip], #1
- 8021ea8: 2a00 cmp r2, #0
- 8021eaa: d1f9 bne.n 8021ea0 <strcpy+0xac>
- 8021eac: 4770 bx lr
- 8021eae: bf00 nop
- 08021eb0 <strlen>:
- 8021eb0: f020 0103 bic.w r1, r0, #3
- 8021eb4: f010 0003 ands.w r0, r0, #3
- 8021eb8: f1c0 0000 rsb r0, r0, #0
- 8021ebc: f851 3b04 ldr.w r3, [r1], #4
- 8021ec0: f100 0c04 add.w ip, r0, #4
- 8021ec4: ea4f 0ccc mov.w ip, ip, lsl #3
- 8021ec8: f06f 0200 mvn.w r2, #0
- 8021ecc: bf1c itt ne
- 8021ece: fa22 f20c lsrne.w r2, r2, ip
- 8021ed2: 4313 orrne r3, r2
- 8021ed4: f04f 0c01 mov.w ip, #1
- 8021ed8: ea4c 2c0c orr.w ip, ip, ip, lsl #8
- 8021edc: ea4c 4c0c orr.w ip, ip, ip, lsl #16
- 8021ee0: eba3 020c sub.w r2, r3, ip
- 8021ee4: ea22 0203 bic.w r2, r2, r3
- 8021ee8: ea12 12cc ands.w r2, r2, ip, lsl #7
- 8021eec: bf04 itt eq
- 8021eee: f851 3b04 ldreq.w r3, [r1], #4
- 8021ef2: 3004 addeq r0, #4
- 8021ef4: d0f4 beq.n 8021ee0 <strlen+0x30>
- 8021ef6: f013 0fff tst.w r3, #255 ; 0xff
- 8021efa: bf1f itttt ne
- 8021efc: 3001 addne r0, #1
- 8021efe: f413 4f7f tstne.w r3, #65280 ; 0xff00
- 8021f02: 3001 addne r0, #1
- 8021f04: f413 0f7f tstne.w r3, #16711680 ; 0xff0000
- 8021f08: bf18 it ne
- 8021f0a: 3001 addne r0, #1
- 8021f0c: 4770 bx lr
- 8021f0e: bf00 nop
- 08021f10 <strncat>:
- 8021f10: 0783 lsls r3, r0, #30
- 8021f12: b470 push {r4, r5, r6}
- 8021f14: d113 bne.n 8021f3e <strncat+0x2e>
- 8021f16: 6803 ldr r3, [r0, #0]
- 8021f18: f1a3 3401 sub.w r4, r3, #16843009 ; 0x1010101
- 8021f1c: ea24 0303 bic.w r3, r4, r3
- 8021f20: f013 3f80 tst.w r3, #2155905152 ; 0x80808080
- 8021f24: d10b bne.n 8021f3e <strncat+0x2e>
- 8021f26: 1d03 adds r3, r0, #4
- 8021f28: 461d mov r5, r3
- 8021f2a: f853 4b04 ldr.w r4, [r3], #4
- 8021f2e: f1a4 3601 sub.w r6, r4, #16843009 ; 0x1010101
- 8021f32: ea26 0404 bic.w r4, r6, r4
- 8021f36: f014 3f80 tst.w r4, #2155905152 ; 0x80808080
- 8021f3a: d0f5 beq.n 8021f28 <strncat+0x18>
- 8021f3c: e000 b.n 8021f40 <strncat+0x30>
- 8021f3e: 4605 mov r5, r0
- 8021f40: 782b ldrb r3, [r5, #0]
- 8021f42: b12b cbz r3, 8021f50 <strncat+0x40>
- 8021f44: 1c6b adds r3, r5, #1
- 8021f46: 461d mov r5, r3
- 8021f48: 3301 adds r3, #1
- 8021f4a: 782c ldrb r4, [r5, #0]
- 8021f4c: 2c00 cmp r4, #0
- 8021f4e: d1fa bne.n 8021f46 <strncat+0x36>
- 8021f50: 3901 subs r1, #1
- 8021f52: 3d01 subs r5, #1
- 8021f54: 1e53 subs r3, r2, #1
- 8021f56: b15a cbz r2, 8021f70 <strncat+0x60>
- 8021f58: f811 4f01 ldrb.w r4, [r1, #1]!
- 8021f5c: 461a mov r2, r3
- 8021f5e: f805 4f01 strb.w r4, [r5, #1]!
- 8021f62: b12c cbz r4, 8021f70 <strncat+0x60>
- 8021f64: 2b00 cmp r3, #0
- 8021f66: d1f5 bne.n 8021f54 <strncat+0x44>
- 8021f68: 706b strb r3, [r5, #1]
- 8021f6a: 1e53 subs r3, r2, #1
- 8021f6c: 2a00 cmp r2, #0
- 8021f6e: d1f3 bne.n 8021f58 <strncat+0x48>
- 8021f70: bc70 pop {r4, r5, r6}
- 8021f72: 4770 bx lr
- 08021f74 <strncmp>:
- 8021f74: b470 push {r4, r5, r6}
- 8021f76: 2a00 cmp r2, #0
- 8021f78: d045 beq.n 8022006 <strncmp+0x92>
- 8021f7a: ea41 0300 orr.w r3, r1, r0
- 8021f7e: f013 0303 ands.w r3, r3, #3
- 8021f82: d129 bne.n 8021fd8 <strncmp+0x64>
- 8021f84: 2a03 cmp r2, #3
- 8021f86: d927 bls.n 8021fd8 <strncmp+0x64>
- 8021f88: 6805 ldr r5, [r0, #0]
- 8021f8a: 680c ldr r4, [r1, #0]
- 8021f8c: 42a5 cmp r5, r4
- 8021f8e: d123 bne.n 8021fd8 <strncmp+0x64>
- 8021f90: 1f14 subs r4, r2, #4
- 8021f92: d03a beq.n 802200a <strncmp+0x96>
- 8021f94: f1a5 3201 sub.w r2, r5, #16843009 ; 0x1010101
- 8021f98: ea22 0505 bic.w r5, r2, r5
- 8021f9c: f015 3f80 tst.w r5, #2155905152 ; 0x80808080
- 8021fa0: d00d beq.n 8021fbe <strncmp+0x4a>
- 8021fa2: e03a b.n 802201a <strncmp+0xa6>
- 8021fa4: 685b ldr r3, [r3, #4]
- 8021fa6: 686a ldr r2, [r5, #4]
- 8021fa8: f1a3 3501 sub.w r5, r3, #16843009 ; 0x1010101
- 8021fac: 4293 cmp r3, r2
- 8021fae: ea25 0503 bic.w r5, r5, r3
- 8021fb2: d12e bne.n 8022012 <strncmp+0x9e>
- 8021fb4: 3c04 subs r4, #4
- 8021fb6: d028 beq.n 802200a <strncmp+0x96>
- 8021fb8: f015 3f80 tst.w r5, #2155905152 ; 0x80808080
- 8021fbc: d127 bne.n 802200e <strncmp+0x9a>
- 8021fbe: 460d mov r5, r1
- 8021fc0: 4603 mov r3, r0
- 8021fc2: 3104 adds r1, #4
- 8021fc4: 3004 adds r0, #4
- 8021fc6: 2c03 cmp r4, #3
- 8021fc8: d8ec bhi.n 8021fa4 <strncmp+0x30>
- 8021fca: 1e66 subs r6, r4, #1
- 8021fcc: b92c cbnz r4, 8021fda <strncmp+0x66>
- 8021fce: 791c ldrb r4, [r3, #4]
- 8021fd0: 792a ldrb r2, [r5, #4]
- 8021fd2: 1aa0 subs r0, r4, r2
- 8021fd4: bc70 pop {r4, r5, r6}
- 8021fd6: 4770 bx lr
- 8021fd8: 1e56 subs r6, r2, #1
- 8021fda: 7804 ldrb r4, [r0, #0]
- 8021fdc: 780a ldrb r2, [r1, #0]
- 8021fde: 4294 cmp r4, r2
- 8021fe0: d1f7 bne.n 8021fd2 <strncmp+0x5e>
- 8021fe2: b1c6 cbz r6, 8022016 <strncmp+0xa2>
- 8021fe4: b18c cbz r4, 802200a <strncmp+0x96>
- 8021fe6: 3601 adds r6, #1
- 8021fe8: 1c8b adds r3, r1, #2
- 8021fea: 1989 adds r1, r1, r6
- 8021fec: e004 b.n 8021ff8 <strncmp+0x84>
- 8021fee: 428b cmp r3, r1
- 8021ff0: f103 0301 add.w r3, r3, #1
- 8021ff4: d00b beq.n 802200e <strncmp+0x9a>
- 8021ff6: b144 cbz r4, 802200a <strncmp+0x96>
- 8021ff8: f813 2c01 ldrb.w r2, [r3, #-1]
- 8021ffc: f810 4f01 ldrb.w r4, [r0, #1]!
- 8022000: 4294 cmp r4, r2
- 8022002: d0f4 beq.n 8021fee <strncmp+0x7a>
- 8022004: e7e5 b.n 8021fd2 <strncmp+0x5e>
- 8022006: 4610 mov r0, r2
- 8022008: e7e4 b.n 8021fd4 <strncmp+0x60>
- 802200a: 4620 mov r0, r4
- 802200c: e7e2 b.n 8021fd4 <strncmp+0x60>
- 802200e: 2000 movs r0, #0
- 8022010: e7e0 b.n 8021fd4 <strncmp+0x60>
- 8022012: 1e66 subs r6, r4, #1
- 8022014: e7e1 b.n 8021fda <strncmp+0x66>
- 8022016: 4630 mov r0, r6
- 8022018: e7dc b.n 8021fd4 <strncmp+0x60>
- 802201a: 4618 mov r0, r3
- 802201c: e7da b.n 8021fd4 <strncmp+0x60>
- 802201e: bf00 nop
- 08022020 <strncpy>:
- 8022020: ea41 0300 orr.w r3, r1, r0
- 8022024: f013 0f03 tst.w r3, #3
- 8022028: 4603 mov r3, r0
- 802202a: b470 push {r4, r5, r6}
- 802202c: d025 beq.n 802207a <strncpy+0x5a>
- 802202e: b1aa cbz r2, 802205c <strncpy+0x3c>
- 8022030: 780c ldrb r4, [r1, #0]
- 8022032: 3a01 subs r2, #1
- 8022034: f803 4b01 strb.w r4, [r3], #1
- 8022038: b14c cbz r4, 802204e <strncpy+0x2e>
- 802203a: 461c mov r4, r3
- 802203c: b172 cbz r2, 802205c <strncpy+0x3c>
- 802203e: f811 5f01 ldrb.w r5, [r1, #1]!
- 8022042: 3a01 subs r2, #1
- 8022044: f804 5b01 strb.w r5, [r4], #1
- 8022048: 4623 mov r3, r4
- 802204a: 2d00 cmp r5, #0
- 802204c: d1f6 bne.n 802203c <strncpy+0x1c>
- 802204e: b12a cbz r2, 802205c <strncpy+0x3c>
- 8022050: 189a adds r2, r3, r2
- 8022052: 2100 movs r1, #0
- 8022054: f803 1b01 strb.w r1, [r3], #1
- 8022058: 4293 cmp r3, r2
- 802205a: d1fb bne.n 8022054 <strncpy+0x34>
- 802205c: bc70 pop {r4, r5, r6}
- 802205e: 4770 bx lr
- 8022060: 460e mov r6, r1
- 8022062: f851 4b04 ldr.w r4, [r1], #4
- 8022066: f1a4 3501 sub.w r5, r4, #16843009 ; 0x1010101
- 802206a: ea25 0504 bic.w r5, r5, r4
- 802206e: f015 3f80 tst.w r5, #2155905152 ; 0x80808080
- 8022072: d105 bne.n 8022080 <strncpy+0x60>
- 8022074: 3a04 subs r2, #4
- 8022076: f843 4b04 str.w r4, [r3], #4
- 802207a: 2a03 cmp r2, #3
- 802207c: d8f0 bhi.n 8022060 <strncpy+0x40>
- 802207e: e7d6 b.n 802202e <strncpy+0xe>
- 8022080: 4631 mov r1, r6
- 8022082: e7d4 b.n 802202e <strncpy+0xe>
- 08022084 <strpbrk>:
- 8022084: b4f0 push {r4, r5, r6, r7}
- 8022086: 7804 ldrb r4, [r0, #0]
- 8022088: 2c00 cmp r4, #0
- 802208a: d021 beq.n 80220d0 <strpbrk+0x4c>
- 802208c: 780f ldrb r7, [r1, #0]
- 802208e: 4606 mov r6, r0
- 8022090: 4630 mov r0, r6
- 8022092: b1af cbz r7, 80220c0 <strpbrk+0x3c>
- 8022094: 42a7 cmp r7, r4
- 8022096: d019 beq.n 80220cc <strpbrk+0x48>
- 8022098: 1c4b adds r3, r1, #1
- 802209a: e001 b.n 80220a0 <strpbrk+0x1c>
- 802209c: 4294 cmp r4, r2
- 802209e: d009 beq.n 80220b4 <strpbrk+0x30>
- 80220a0: 461d mov r5, r3
- 80220a2: f813 2b01 ldrb.w r2, [r3], #1
- 80220a6: 2a00 cmp r2, #0
- 80220a8: d1f8 bne.n 802209c <strpbrk+0x18>
- 80220aa: 7844 ldrb r4, [r0, #1]
- 80220ac: 3601 adds r6, #1
- 80220ae: 2c00 cmp r4, #0
- 80220b0: d1ee bne.n 8022090 <strpbrk+0xc>
- 80220b2: 782a ldrb r2, [r5, #0]
- 80220b4: 2a00 cmp r2, #0
- 80220b6: bf14 ite ne
- 80220b8: 4630 movne r0, r6
- 80220ba: 2000 moveq r0, #0
- 80220bc: bcf0 pop {r4, r5, r6, r7}
- 80220be: 4770 bx lr
- 80220c0: 7844 ldrb r4, [r0, #1]
- 80220c2: 460d mov r5, r1
- 80220c4: 3601 adds r6, #1
- 80220c6: 2c00 cmp r4, #0
- 80220c8: d1e2 bne.n 8022090 <strpbrk+0xc>
- 80220ca: e7f2 b.n 80220b2 <strpbrk+0x2e>
- 80220cc: 463a mov r2, r7
- 80220ce: e7f1 b.n 80220b4 <strpbrk+0x30>
- 80220d0: 4620 mov r0, r4
- 80220d2: e7f3 b.n 80220bc <strpbrk+0x38>
- 080220d4 <critical_factorization>:
- 80220d4: e92d 07f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl}
- 80220d8: 2701 movs r7, #1
- 80220da: 463c mov r4, r7
- 80220dc: 2500 movs r5, #0
- 80220de: f04f 36ff mov.w r6, #4294967295
- 80220e2: 1963 adds r3, r4, r5
- 80220e4: eb00 0c06 add.w ip, r0, r6
- 80220e8: 428b cmp r3, r1
- 80220ea: d20d bcs.n 8022108 <critical_factorization+0x34>
- 80220ec: f81c c004 ldrb.w ip, [ip, r4]
- 80220f0: f810 8003 ldrb.w r8, [r0, r3]
- 80220f4: 45e0 cmp r8, ip
- 80220f6: d22e bcs.n 8022156 <critical_factorization+0x82>
- 80220f8: 2401 movs r4, #1
- 80220fa: 461d mov r5, r3
- 80220fc: 1b9f subs r7, r3, r6
- 80220fe: 1963 adds r3, r4, r5
- 8022100: 428b cmp r3, r1
- 8022102: eb00 0c06 add.w ip, r0, r6
- 8022106: d3f1 bcc.n 80220ec <critical_factorization+0x18>
- 8022108: f04f 0a01 mov.w sl, #1
- 802210c: 2500 movs r5, #0
- 802210e: 4654 mov r4, sl
- 8022110: f04f 3cff mov.w ip, #4294967295
- 8022114: 6017 str r7, [r2, #0]
- 8022116: 1963 adds r3, r4, r5
- 8022118: eb00 080c add.w r8, r0, ip
- 802211c: 4299 cmp r1, r3
- 802211e: d90e bls.n 802213e <critical_factorization+0x6a>
- 8022120: f818 8004 ldrb.w r8, [r8, r4]
- 8022124: f810 9003 ldrb.w r9, [r0, r3]
- 8022128: 45c1 cmp r9, r8
- 802212a: d91a bls.n 8022162 <critical_factorization+0x8e>
- 802212c: 2401 movs r4, #1
- 802212e: 461d mov r5, r3
- 8022130: ebcc 0a03 rsb sl, ip, r3
- 8022134: 1963 adds r3, r4, r5
- 8022136: 4299 cmp r1, r3
- 8022138: eb00 080c add.w r8, r0, ip
- 802213c: d8f0 bhi.n 8022120 <critical_factorization+0x4c>
- 802213e: f10c 0001 add.w r0, ip, #1
- 8022142: 3601 adds r6, #1
- 8022144: 42b0 cmp r0, r6
- 8022146: bf3c itt cc
- 8022148: 46ba movcc sl, r7
- 802214a: 4630 movcc r0, r6
- 802214c: f8c2 a000 str.w sl, [r2]
- 8022150: e8bd 07f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl}
- 8022154: 4770 bx lr
- 8022156: d00b beq.n 8022170 <critical_factorization+0x9c>
- 8022158: 2701 movs r7, #1
- 802215a: 462e mov r6, r5
- 802215c: 463c mov r4, r7
- 802215e: 19ed adds r5, r5, r7
- 8022160: e7bf b.n 80220e2 <critical_factorization+0xe>
- 8022162: d009 beq.n 8022178 <critical_factorization+0xa4>
- 8022164: f04f 0a01 mov.w sl, #1
- 8022168: 46ac mov ip, r5
- 802216a: 4654 mov r4, sl
- 802216c: 4455 add r5, sl
- 802216e: e7d2 b.n 8022116 <critical_factorization+0x42>
- 8022170: 42bc cmp r4, r7
- 8022172: d005 beq.n 8022180 <critical_factorization+0xac>
- 8022174: 3401 adds r4, #1
- 8022176: e7b4 b.n 80220e2 <critical_factorization+0xe>
- 8022178: 4554 cmp r4, sl
- 802217a: d005 beq.n 8022188 <critical_factorization+0xb4>
- 802217c: 3401 adds r4, #1
- 802217e: e7ca b.n 8022116 <critical_factorization+0x42>
- 8022180: 4627 mov r7, r4
- 8022182: 461d mov r5, r3
- 8022184: 2401 movs r4, #1
- 8022186: e7ac b.n 80220e2 <critical_factorization+0xe>
- 8022188: 46a2 mov sl, r4
- 802218a: 461d mov r5, r3
- 802218c: 2401 movs r4, #1
- 802218e: e7c2 b.n 8022116 <critical_factorization+0x42>
- 08022190 <two_way_long_needle>:
- 8022190: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8022194: f2ad 4d24 subw sp, sp, #1060 ; 0x424
- 8022198: 4616 mov r6, r2
- 802219a: 4680 mov r8, r0
- 802219c: 460c mov r4, r1
- 802219e: 4610 mov r0, r2
- 80221a0: 4619 mov r1, r3
- 80221a2: aa07 add r2, sp, #28
- 80221a4: 461d mov r5, r3
- 80221a6: f7ff ff95 bl 80220d4 <critical_factorization>
- 80221aa: ab07 add r3, sp, #28
- 80221ac: f20d 421c addw r2, sp, #1052 ; 0x41c
- 80221b0: 9003 str r0, [sp, #12]
- 80221b2: f843 5f04 str.w r5, [r3, #4]!
- 80221b6: 4293 cmp r3, r2
- 80221b8: d1fb bne.n 80221b2 <two_way_long_needle+0x22>
- 80221ba: 1e6f subs r7, r5, #1
- 80221bc: 2300 movs r3, #0
- 80221be: a808 add r0, sp, #32
- 80221c0: b135 cbz r5, 80221d0 <two_way_long_needle+0x40>
- 80221c2: 5cf2 ldrb r2, [r6, r3]
- 80221c4: 1af9 subs r1, r7, r3
- 80221c6: 3301 adds r3, #1
- 80221c8: 42ab cmp r3, r5
- 80221ca: f840 1022 str.w r1, [r0, r2, lsl #2]
- 80221ce: d1f8 bne.n 80221c2 <two_way_long_needle+0x32>
- 80221d0: 9907 ldr r1, [sp, #28]
- 80221d2: 4630 mov r0, r6
- 80221d4: 9a03 ldr r2, [sp, #12]
- 80221d6: 1871 adds r1, r6, r1
- 80221d8: f7ff fba6 bl 8021928 <memcmp>
- 80221dc: 2800 cmp r0, #0
- 80221de: d17f bne.n 80222e0 <two_way_long_needle+0x150>
- 80221e0: f8dd c00c ldr.w ip, [sp, #12]
- 80221e4: 4622 mov r2, r4
- 80221e6: 4682 mov sl, r0
- 80221e8: 1e6f subs r7, r5, #1
- 80221ea: f10c 3cff add.w ip, ip, #4294967295
- 80221ee: f8cd c008 str.w ip, [sp, #8]
- 80221f2: 44b4 add ip, r6
- 80221f4: f8cd c014 str.w ip, [sp, #20]
- 80221f8: f8dd c00c ldr.w ip, [sp, #12]
- 80221fc: 4604 mov r4, r0
- 80221fe: 9501 str r5, [sp, #4]
- 8022200: f1cc 0c01 rsb ip, ip, #1
- 8022204: f8cd c010 str.w ip, [sp, #16]
- 8022208: e009 b.n 802221e <two_way_long_needle+0x8e>
- 802220a: b134 cbz r4, 802221a <two_way_long_needle+0x8a>
- 802220c: 9a07 ldr r2, [sp, #28]
- 802220e: 4293 cmp r3, r2
- 8022210: bf3e ittt cc
- 8022212: 4604 movcc r4, r0
- 8022214: 9901 ldrcc r1, [sp, #4]
- 8022216: ebc2 0301 rsbcc r3, r2, r1
- 802221a: 449a add sl, r3
- 802221c: 462a mov r2, r5
- 802221e: 9b01 ldr r3, [sp, #4]
- 8022220: eb08 0002 add.w r0, r8, r2
- 8022224: 2100 movs r1, #0
- 8022226: eb0a 0503 add.w r5, sl, r3
- 802222a: 1aaa subs r2, r5, r2
- 802222c: f002 fa90 bl 8024750 <memchr>
- 8022230: 2800 cmp r0, #0
- 8022232: d14f bne.n 80222d4 <two_way_long_needle+0x144>
- 8022234: 2d00 cmp r5, #0
- 8022236: d04d beq.n 80222d4 <two_way_long_needle+0x144>
- 8022238: eb08 0305 add.w r3, r8, r5
- 802223c: a908 add r1, sp, #32
- 802223e: f813 3c01 ldrb.w r3, [r3, #-1]
- 8022242: f851 3023 ldr.w r3, [r1, r3, lsl #2]
- 8022246: 2b00 cmp r3, #0
- 8022248: d1df bne.n 802220a <two_way_long_needle+0x7a>
- 802224a: 9a03 ldr r2, [sp, #12]
- 802224c: 4294 cmp r4, r2
- 802224e: bf28 it cs
- 8022250: 4622 movcs r2, r4
- 8022252: 42ba cmp r2, r7
- 8022254: d211 bcs.n 802227a <two_way_long_needle+0xea>
- 8022256: eb08 030a add.w r3, r8, sl
- 802225a: f816 c002 ldrb.w ip, [r6, r2]
- 802225e: 18b1 adds r1, r6, r2
- 8022260: 5c98 ldrb r0, [r3, r2]
- 8022262: 4584 cmp ip, r0
- 8022264: d006 beq.n 8022274 <two_way_long_needle+0xe4>
- 8022266: e02f b.n 80222c8 <two_way_long_needle+0x138>
- 8022268: f811 0f01 ldrb.w r0, [r1, #1]!
- 802226c: f813 c002 ldrb.w ip, [r3, r2]
- 8022270: 4584 cmp ip, r0
- 8022272: d129 bne.n 80222c8 <two_way_long_needle+0x138>
- 8022274: 3201 adds r2, #1
- 8022276: 42ba cmp r2, r7
- 8022278: d3f6 bcc.n 8022268 <two_way_long_needle+0xd8>
- 802227a: 9b03 ldr r3, [sp, #12]
- 802227c: 9802 ldr r0, [sp, #8]
- 802227e: 429c cmp r4, r3
- 8022280: bf28 it cs
- 8022282: 4618 movcs r0, r3
- 8022284: d218 bcs.n 80222b8 <two_way_long_needle+0x128>
- 8022286: f8dd c008 ldr.w ip, [sp, #8]
- 802228a: eb08 030a add.w r3, r8, sl
- 802228e: f816 100c ldrb.w r1, [r6, ip]
- 8022292: f813 200c ldrb.w r2, [r3, ip]
- 8022296: 4291 cmp r1, r2
- 8022298: f040 8085 bne.w 80223a6 <two_way_long_needle+0x216>
- 802229c: 9a05 ldr r2, [sp, #20]
- 802229e: eb06 0b04 add.w fp, r6, r4
- 80222a2: e006 b.n 80222b2 <two_way_long_needle+0x122>
- 80222a4: f813 c001 ldrb.w ip, [r3, r1]
- 80222a8: f812 9d01 ldrb.w r9, [r2, #-1]!
- 80222ac: 45e1 cmp r9, ip
- 80222ae: d103 bne.n 80222b8 <two_way_long_needle+0x128>
- 80222b0: 4608 mov r0, r1
- 80222b2: 1e41 subs r1, r0, #1
- 80222b4: 455a cmp r2, fp
- 80222b6: d1f5 bne.n 80222a4 <two_way_long_needle+0x114>
- 80222b8: 3401 adds r4, #1
- 80222ba: 4284 cmp r4, r0
- 80222bc: d875 bhi.n 80223aa <two_way_long_needle+0x21a>
- 80222be: 9c07 ldr r4, [sp, #28]
- 80222c0: 9b01 ldr r3, [sp, #4]
- 80222c2: 44a2 add sl, r4
- 80222c4: 1b1c subs r4, r3, r4
- 80222c6: e7a9 b.n 802221c <two_way_long_needle+0x8c>
- 80222c8: f8dd c010 ldr.w ip, [sp, #16]
- 80222cc: 2400 movs r4, #0
- 80222ce: 44e2 add sl, ip
- 80222d0: 4492 add sl, r2
- 80222d2: e7a3 b.n 802221c <two_way_long_needle+0x8c>
- 80222d4: 2000 movs r0, #0
- 80222d6: b009 add sp, #36 ; 0x24
- 80222d8: f50d 6d80 add.w sp, sp, #1024 ; 0x400
- 80222dc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 80222e0: f8dd c00c ldr.w ip, [sp, #12]
- 80222e4: f04f 0a00 mov.w sl, #0
- 80222e8: f8dd b00c ldr.w fp, [sp, #12]
- 80222ec: f10d 0920 add.w r9, sp, #32
- 80222f0: ebcc 0305 rsb r3, ip, r5
- 80222f4: 1e6f subs r7, r5, #1
- 80222f6: 4563 cmp r3, ip
- 80222f8: bf38 it cc
- 80222fa: 4663 movcc r3, ip
- 80222fc: 4622 mov r2, r4
- 80222fe: 3301 adds r3, #1
- 8022300: 9307 str r3, [sp, #28]
- 8022302: f10c 33ff add.w r3, ip, #4294967295
- 8022306: 9301 str r3, [sp, #4]
- 8022308: 9b03 ldr r3, [sp, #12]
- 802230a: 44b4 add ip, r6
- 802230c: f8cd c008 str.w ip, [sp, #8]
- 8022310: f1c3 0301 rsb r3, r3, #1
- 8022314: 9304 str r3, [sp, #16]
- 8022316: eb0a 0405 add.w r4, sl, r5
- 802231a: eb08 0002 add.w r0, r8, r2
- 802231e: 2100 movs r1, #0
- 8022320: 1aa2 subs r2, r4, r2
- 8022322: f002 fa15 bl 8024750 <memchr>
- 8022326: 2800 cmp r0, #0
- 8022328: d1d4 bne.n 80222d4 <two_way_long_needle+0x144>
- 802232a: 2c00 cmp r4, #0
- 802232c: d0d2 beq.n 80222d4 <two_way_long_needle+0x144>
- 802232e: eb08 0304 add.w r3, r8, r4
- 8022332: f813 3c01 ldrb.w r3, [r3, #-1]
- 8022336: f859 3023 ldr.w r3, [r9, r3, lsl #2]
- 802233a: bb63 cbnz r3, 8022396 <two_way_long_needle+0x206>
- 802233c: 45bb cmp fp, r7
- 802233e: eb08 000a add.w r0, r8, sl
- 8022342: d215 bcs.n 8022370 <two_way_long_needle+0x1e0>
- 8022344: f8dd c008 ldr.w ip, [sp, #8]
- 8022348: f810 300b ldrb.w r3, [r0, fp]
- 802234c: f89c 2000 ldrb.w r2, [ip]
- 8022350: 429a cmp r2, r3
- 8022352: bf18 it ne
- 8022354: 465b movne r3, fp
- 8022356: d121 bne.n 802239c <two_way_long_needle+0x20c>
- 8022358: 9a02 ldr r2, [sp, #8]
- 802235a: 465b mov r3, fp
- 802235c: e005 b.n 802236a <two_way_long_needle+0x1da>
- 802235e: f812 1f01 ldrb.w r1, [r2, #1]!
- 8022362: f810 c003 ldrb.w ip, [r0, r3]
- 8022366: 458c cmp ip, r1
- 8022368: d118 bne.n 802239c <two_way_long_needle+0x20c>
- 802236a: 3301 adds r3, #1
- 802236c: 42bb cmp r3, r7
- 802236e: d3f6 bcc.n 802235e <two_way_long_needle+0x1ce>
- 8022370: 9b01 ldr r3, [sp, #4]
- 8022372: 1c5a adds r2, r3, #1
- 8022374: d0af beq.n 80222d6 <two_way_long_needle+0x146>
- 8022376: f8dd c004 ldr.w ip, [sp, #4]
- 802237a: f816 100c ldrb.w r1, [r6, ip]
- 802237e: f810 200c ldrb.w r2, [r0, ip]
- 8022382: 4291 cmp r1, r2
- 8022384: d106 bne.n 8022394 <two_way_long_needle+0x204>
- 8022386: f113 33ff adds.w r3, r3, #4294967295
- 802238a: d3a4 bcc.n 80222d6 <two_way_long_needle+0x146>
- 802238c: 5cf1 ldrb r1, [r6, r3]
- 802238e: 5cc2 ldrb r2, [r0, r3]
- 8022390: 4291 cmp r1, r2
- 8022392: d0f8 beq.n 8022386 <two_way_long_needle+0x1f6>
- 8022394: 9b07 ldr r3, [sp, #28]
- 8022396: 449a add sl, r3
- 8022398: 4622 mov r2, r4
- 802239a: e7bc b.n 8022316 <two_way_long_needle+0x186>
- 802239c: f8dd c010 ldr.w ip, [sp, #16]
- 80223a0: 44e2 add sl, ip
- 80223a2: 449a add sl, r3
- 80223a4: e7f8 b.n 8022398 <two_way_long_needle+0x208>
- 80223a6: 9803 ldr r0, [sp, #12]
- 80223a8: e786 b.n 80222b8 <two_way_long_needle+0x128>
- 80223aa: eb08 000a add.w r0, r8, sl
- 80223ae: e792 b.n 80222d6 <two_way_long_needle+0x146>
- 080223b0 <strstr>:
- 80223b0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 80223b4: 4680 mov r8, r0
- 80223b6: 7803 ldrb r3, [r0, #0]
- 80223b8: b087 sub sp, #28
- 80223ba: 460e mov r6, r1
- 80223bc: 2b00 cmp r3, #0
- 80223be: f000 80f7 beq.w 80225b0 <strstr+0x200>
- 80223c2: 780a ldrb r2, [r1, #0]
- 80223c4: b19a cbz r2, 80223ee <strstr+0x3e>
- 80223c6: 4684 mov ip, r0
- 80223c8: 3101 adds r1, #1
- 80223ca: 2701 movs r7, #1
- 80223cc: e002 b.n 80223d4 <strstr+0x24>
- 80223ce: f811 2b01 ldrb.w r2, [r1], #1
- 80223d2: b15a cbz r2, 80223ec <strstr+0x3c>
- 80223d4: 4293 cmp r3, r2
- 80223d6: bf14 ite ne
- 80223d8: 2700 movne r7, #0
- 80223da: f007 0701 andeq.w r7, r7, #1
- 80223de: f81c 3f01 ldrb.w r3, [ip, #1]!
- 80223e2: 460d mov r5, r1
- 80223e4: 2b00 cmp r3, #0
- 80223e6: d1f2 bne.n 80223ce <strstr+0x1e>
- 80223e8: 782b ldrb r3, [r5, #0]
- 80223ea: bb03 cbnz r3, 802242e <strstr+0x7e>
- 80223ec: b11f cbz r7, 80223f6 <strstr+0x46>
- 80223ee: 4640 mov r0, r8
- 80223f0: b007 add sp, #28
- 80223f2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 80223f6: f108 0001 add.w r0, r8, #1
- 80223fa: 7831 ldrb r1, [r6, #0]
- 80223fc: f002 fe92 bl 8025124 <strchr>
- 8022400: 1bad subs r5, r5, r6
- 8022402: 2d01 cmp r5, #1
- 8022404: bf18 it ne
- 8022406: 2800 cmpne r0, #0
- 8022408: 4607 mov r7, r0
- 802240a: bf08 it eq
- 802240c: 4680 moveq r8, r0
- 802240e: d0ee beq.n 80223ee <strstr+0x3e>
- 8022410: 44a8 add r8, r5
- 8022412: 4540 cmp r0, r8
- 8022414: bf94 ite ls
- 8022416: ebc0 0408 rsbls r4, r0, r8
- 802241a: 2401 movhi r4, #1
- 802241c: 2d1f cmp r5, #31
- 802241e: d909 bls.n 8022434 <strstr+0x84>
- 8022420: 4621 mov r1, r4
- 8022422: 4632 mov r2, r6
- 8022424: 462b mov r3, r5
- 8022426: f7ff feb3 bl 8022190 <two_way_long_needle>
- 802242a: 4680 mov r8, r0
- 802242c: e7df b.n 80223ee <strstr+0x3e>
- 802242e: f04f 0800 mov.w r8, #0
- 8022432: e7dc b.n 80223ee <strstr+0x3e>
- 8022434: 4629 mov r1, r5
- 8022436: aa05 add r2, sp, #20
- 8022438: 4630 mov r0, r6
- 802243a: f7ff fe4b bl 80220d4 <critical_factorization>
- 802243e: 9905 ldr r1, [sp, #20]
- 8022440: 1871 adds r1, r6, r1
- 8022442: 9001 str r0, [sp, #4]
- 8022444: 4630 mov r0, r6
- 8022446: 9a01 ldr r2, [sp, #4]
- 8022448: f7ff fa6e bl 8021928 <memcmp>
- 802244c: 2800 cmp r0, #0
- 802244e: d152 bne.n 80224f6 <strstr+0x146>
- 8022450: 9b01 ldr r3, [sp, #4]
- 8022452: 4683 mov fp, r0
- 8022454: 4680 mov r8, r0
- 8022456: 3b01 subs r3, #1
- 8022458: 9300 str r3, [sp, #0]
- 802245a: 18f3 adds r3, r6, r3
- 802245c: 9303 str r3, [sp, #12]
- 802245e: 9b01 ldr r3, [sp, #4]
- 8022460: f1c3 0301 rsb r3, r3, #1
- 8022464: 9302 str r3, [sp, #8]
- 8022466: 4622 mov r2, r4
- 8022468: eb08 0405 add.w r4, r8, r5
- 802246c: 18b8 adds r0, r7, r2
- 802246e: 2100 movs r1, #0
- 8022470: 1aa2 subs r2, r4, r2
- 8022472: f002 f96d bl 8024750 <memchr>
- 8022476: 2800 cmp r0, #0
- 8022478: d1d9 bne.n 802242e <strstr+0x7e>
- 802247a: 2c00 cmp r4, #0
- 802247c: d0d7 beq.n 802242e <strstr+0x7e>
- 802247e: 9b01 ldr r3, [sp, #4]
- 8022480: 459b cmp fp, r3
- 8022482: bf28 it cs
- 8022484: 465b movcs r3, fp
- 8022486: 429d cmp r5, r3
- 8022488: d913 bls.n 80224b2 <strstr+0x102>
- 802248a: 18f9 adds r1, r7, r3
- 802248c: 5cf0 ldrb r0, [r6, r3]
- 802248e: 18f2 adds r2, r6, r3
- 8022490: f811 1008 ldrb.w r1, [r1, r8]
- 8022494: 4288 cmp r0, r1
- 8022496: f040 8085 bne.w 80225a4 <strstr+0x1f4>
- 802249a: eb07 0c08 add.w ip, r7, r8
- 802249e: e005 b.n 80224ac <strstr+0xfc>
- 80224a0: f812 1f01 ldrb.w r1, [r2, #1]!
- 80224a4: f81c 0003 ldrb.w r0, [ip, r3]
- 80224a8: 4288 cmp r0, r1
- 80224aa: d17b bne.n 80225a4 <strstr+0x1f4>
- 80224ac: 3301 adds r3, #1
- 80224ae: 429d cmp r5, r3
- 80224b0: d8f6 bhi.n 80224a0 <strstr+0xf0>
- 80224b2: e89d 000a ldmia.w sp, {r1, r3}
- 80224b6: 455b cmp r3, fp
- 80224b8: d97d bls.n 80225b6 <strstr+0x206>
- 80224ba: eb07 0908 add.w r9, r7, r8
- 80224be: 5c72 ldrb r2, [r6, r1]
- 80224c0: f819 3001 ldrb.w r3, [r9, r1]
- 80224c4: 429a cmp r2, r3
- 80224c6: d176 bne.n 80225b6 <strstr+0x206>
- 80224c8: 9b03 ldr r3, [sp, #12]
- 80224ca: eb06 0a0b add.w sl, r6, fp
- 80224ce: e006 b.n 80224de <strstr+0x12e>
- 80224d0: f819 0002 ldrb.w r0, [r9, r2]
- 80224d4: f813 cd01 ldrb.w ip, [r3, #-1]!
- 80224d8: 4584 cmp ip, r0
- 80224da: d103 bne.n 80224e4 <strstr+0x134>
- 80224dc: 4611 mov r1, r2
- 80224de: 1e4a subs r2, r1, #1
- 80224e0: 4553 cmp r3, sl
- 80224e2: d1f5 bne.n 80224d0 <strstr+0x120>
- 80224e4: f10b 0b01 add.w fp, fp, #1
- 80224e8: 458b cmp fp, r1
- 80224ea: d866 bhi.n 80225ba <strstr+0x20a>
- 80224ec: 9b05 ldr r3, [sp, #20]
- 80224ee: 4498 add r8, r3
- 80224f0: ebc3 0b05 rsb fp, r3, r5
- 80224f4: e7b7 b.n 8022466 <strstr+0xb6>
- 80224f6: 9801 ldr r0, [sp, #4]
- 80224f8: f04f 0b00 mov.w fp, #0
- 80224fc: 4622 mov r2, r4
- 80224fe: 1a2b subs r3, r5, r0
- 8022500: eb06 0900 add.w r9, r6, r0
- 8022504: f100 38ff add.w r8, r0, #4294967295
- 8022508: 4682 mov sl, r0
- 802250a: 4283 cmp r3, r0
- 802250c: bf38 it cc
- 802250e: 4603 movcc r3, r0
- 8022510: 1839 adds r1, r7, r0
- 8022512: 3301 adds r3, #1
- 8022514: 9100 str r1, [sp, #0]
- 8022516: 9305 str r3, [sp, #20]
- 8022518: f1c0 0301 rsb r3, r0, #1
- 802251c: 9302 str r3, [sp, #8]
- 802251e: eb0b 0405 add.w r4, fp, r5
- 8022522: 18b8 adds r0, r7, r2
- 8022524: 2100 movs r1, #0
- 8022526: 1aa2 subs r2, r4, r2
- 8022528: f002 f912 bl 8024750 <memchr>
- 802252c: 2800 cmp r0, #0
- 802252e: f47f af7e bne.w 802242e <strstr+0x7e>
- 8022532: 2c00 cmp r4, #0
- 8022534: f43f af7b beq.w 802242e <strstr+0x7e>
- 8022538: 4555 cmp r5, sl
- 802253a: bf98 it ls
- 802253c: eb07 000b addls.w r0, r7, fp
- 8022540: d914 bls.n 802256c <strstr+0x1bc>
- 8022542: 9800 ldr r0, [sp, #0]
- 8022544: f899 2000 ldrb.w r2, [r9]
- 8022548: f810 300b ldrb.w r3, [r0, fp]
- 802254c: 429a cmp r2, r3
- 802254e: d124 bne.n 802259a <strstr+0x1ea>
- 8022550: 464a mov r2, r9
- 8022552: 4653 mov r3, sl
- 8022554: eb07 000b add.w r0, r7, fp
- 8022558: e005 b.n 8022566 <strstr+0x1b6>
- 802255a: f812 1f01 ldrb.w r1, [r2, #1]!
- 802255e: f810 c003 ldrb.w ip, [r0, r3]
- 8022562: 458c cmp ip, r1
- 8022564: d11a bne.n 802259c <strstr+0x1ec>
- 8022566: 3301 adds r3, #1
- 8022568: 429d cmp r5, r3
- 802256a: d8f6 bhi.n 802255a <strstr+0x1aa>
- 802256c: f1b8 3fff cmp.w r8, #4294967295
- 8022570: 4643 mov r3, r8
- 8022572: f43f af5a beq.w 802242a <strstr+0x7a>
- 8022576: f816 1008 ldrb.w r1, [r6, r8]
- 802257a: f810 2008 ldrb.w r2, [r0, r8]
- 802257e: 4291 cmp r1, r2
- 8022580: d107 bne.n 8022592 <strstr+0x1e2>
- 8022582: f113 33ff adds.w r3, r3, #4294967295
- 8022586: f4ff af50 bcc.w 802242a <strstr+0x7a>
- 802258a: 5cf1 ldrb r1, [r6, r3]
- 802258c: 5cc2 ldrb r2, [r0, r3]
- 802258e: 4291 cmp r1, r2
- 8022590: d0f7 beq.n 8022582 <strstr+0x1d2>
- 8022592: 9b05 ldr r3, [sp, #20]
- 8022594: 449b add fp, r3
- 8022596: 4622 mov r2, r4
- 8022598: e7c1 b.n 802251e <strstr+0x16e>
- 802259a: 4653 mov r3, sl
- 802259c: 9a02 ldr r2, [sp, #8]
- 802259e: 4493 add fp, r2
- 80225a0: 449b add fp, r3
- 80225a2: e7f8 b.n 8022596 <strstr+0x1e6>
- 80225a4: 9902 ldr r1, [sp, #8]
- 80225a6: f04f 0b00 mov.w fp, #0
- 80225aa: 4488 add r8, r1
- 80225ac: 4498 add r8, r3
- 80225ae: e75a b.n 8022466 <strstr+0xb6>
- 80225b0: 460d mov r5, r1
- 80225b2: 2701 movs r7, #1
- 80225b4: e718 b.n 80223e8 <strstr+0x38>
- 80225b6: 9901 ldr r1, [sp, #4]
- 80225b8: e794 b.n 80224e4 <strstr+0x134>
- 80225ba: 44b8 add r8, r7
- 80225bc: e717 b.n 80223ee <strstr+0x3e>
- 80225be: bf00 nop
- 080225c0 <_strtod_r>:
- 80225c0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 80225c4: b09d sub sp, #116 ; 0x74
- 80225c6: 468c mov ip, r1
- 80225c8: 4683 mov fp, r0
- 80225ca: 9210 str r2, [sp, #64] ; 0x40
- 80225cc: 4662 mov r2, ip
- 80225ce: 2000 movs r0, #0
- 80225d0: 2100 movs r1, #0
- 80225d2: f8cd c05c str.w ip, [sp, #92] ; 0x5c
- 80225d6: e9cd 0106 strd r0, r1, [sp, #24]
- 80225da: 4611 mov r1, r2
- 80225dc: f812 3b01 ldrb.w r3, [r2], #1
- 80225e0: 2b2d cmp r3, #45 ; 0x2d
- 80225e2: f200 8147 bhi.w 8022874 <_strtod_r+0x2b4>
- 80225e6: e8df f013 tbh [pc, r3, lsl #1]
- 80225ea: 0131 .short 0x0131
- 80225ec: 01450145 .word 0x01450145
- 80225f0: 01450145 .word 0x01450145
- 80225f4: 01450145 .word 0x01450145
- 80225f8: 01450145 .word 0x01450145
- 80225fc: 01640164 .word 0x01640164
- 8022600: 01640164 .word 0x01640164
- 8022604: 01450164 .word 0x01450164
- 8022608: 01450145 .word 0x01450145
- 802260c: 01450145 .word 0x01450145
- 8022610: 01450145 .word 0x01450145
- 8022614: 01450145 .word 0x01450145
- 8022618: 01450145 .word 0x01450145
- 802261c: 01450145 .word 0x01450145
- 8022620: 01450145 .word 0x01450145
- 8022624: 01450145 .word 0x01450145
- 8022628: 01640145 .word 0x01640145
- 802262c: 01450145 .word 0x01450145
- 8022630: 01450145 .word 0x01450145
- 8022634: 01450145 .word 0x01450145
- 8022638: 01450145 .word 0x01450145
- 802263c: 01450145 .word 0x01450145
- 8022640: 0145012e .word 0x0145012e
- 8022644: 002e .short 0x002e
- 8022646: 2501 movs r5, #1
- 8022648: 9512 str r5, [sp, #72] ; 0x48
- 802264a: 1c4e adds r6, r1, #1
- 802264c: 9617 str r6, [sp, #92] ; 0x5c
- 802264e: 784b ldrb r3, [r1, #1]
- 8022650: 4699 mov r9, r3
- 8022652: 469a mov sl, r3
- 8022654: 2b00 cmp r3, #0
- 8022656: f000 80fc beq.w 8022852 <_strtod_r+0x292>
- 802265a: 2b30 cmp r3, #48 ; 0x30
- 802265c: bf18 it ne
- 802265e: f04f 0900 movne.w r9, #0
- 8022662: f000 8110 beq.w 8022886 <_strtod_r+0x2c6>
- 8022666: 2b2f cmp r3, #47 ; 0x2f
- 8022668: 461d mov r5, r3
- 802266a: f04f 0a00 mov.w sl, #0
- 802266e: f340 84f9 ble.w 8023064 <_strtod_r+0xaa4>
- 8022672: 2b39 cmp r3, #57 ; 0x39
- 8022674: f300 84f6 bgt.w 8023064 <_strtod_r+0xaa4>
- 8022678: 1c72 adds r2, r6, #1
- 802267a: 4657 mov r7, sl
- 802267c: 4654 mov r4, sl
- 802267e: e001 b.n 8022684 <_strtod_r+0xc4>
- 8022680: 2b39 cmp r3, #57 ; 0x39
- 8022682: dc18 bgt.n 80226b6 <_strtod_r+0xf6>
- 8022684: eb07 0187 add.w r1, r7, r7, lsl #2
- 8022688: 2c08 cmp r4, #8
- 802268a: eb03 0141 add.w r1, r3, r1, lsl #1
- 802268e: bfd8 it le
- 8022690: f1a1 0730 suble.w r7, r1, #48 ; 0x30
- 8022694: dd07 ble.n 80226a6 <_strtod_r+0xe6>
- 8022696: eb0a 018a add.w r1, sl, sl, lsl #2
- 802269a: 2c0f cmp r4, #15
- 802269c: eb03 0341 add.w r3, r3, r1, lsl #1
- 80226a0: bfd8 it le
- 80226a2: f1a3 0a30 suble.w sl, r3, #48 ; 0x30
- 80226a6: 9217 str r2, [sp, #92] ; 0x5c
- 80226a8: 4690 mov r8, r2
- 80226aa: f812 3b01 ldrb.w r3, [r2], #1
- 80226ae: 3401 adds r4, #1
- 80226b0: 2b2f cmp r3, #47 ; 0x2f
- 80226b2: 461d mov r5, r3
- 80226b4: dce4 bgt.n 8022680 <_strtod_r+0xc0>
- 80226b6: 4658 mov r0, fp
- 80226b8: f8cd c010 str.w ip, [sp, #16]
- 80226bc: f001 fd5a bl 8024174 <_localeconv_r>
- 80226c0: 6801 ldr r1, [r0, #0]
- 80226c2: 4658 mov r0, fp
- 80226c4: 9105 str r1, [sp, #20]
- 80226c6: f001 fd55 bl 8024174 <_localeconv_r>
- 80226ca: 6800 ldr r0, [r0, #0]
- 80226cc: f7ff fbf0 bl 8021eb0 <strlen>
- 80226d0: 9905 ldr r1, [sp, #20]
- 80226d2: 4602 mov r2, r0
- 80226d4: 4640 mov r0, r8
- 80226d6: f7ff fc4d bl 8021f74 <strncmp>
- 80226da: f8dd c010 ldr.w ip, [sp, #16]
- 80226de: 4680 mov r8, r0
- 80226e0: 2800 cmp r0, #0
- 80226e2: f000 8142 beq.w 802296a <_strtod_r+0x3aa>
- 80226e6: 2000 movs r0, #0
- 80226e8: 46a0 mov r8, r4
- 80226ea: 4601 mov r1, r0
- 80226ec: 9009 str r0, [sp, #36] ; 0x24
- 80226ee: f025 0320 bic.w r3, r5, #32
- 80226f2: 2b45 cmp r3, #69 ; 0x45
- 80226f4: f040 80df bne.w 80228b6 <_strtod_r+0x2f6>
- 80226f8: ea48 0300 orr.w r3, r8, r0
- 80226fc: ea53 0309 orrs.w r3, r3, r9
- 8022700: f000 811d beq.w 802293e <_strtod_r+0x37e>
- 8022704: f8dd c05c ldr.w ip, [sp, #92] ; 0x5c
- 8022708: f10c 0301 add.w r3, ip, #1
- 802270c: 9317 str r3, [sp, #92] ; 0x5c
- 802270e: f89c 5001 ldrb.w r5, [ip, #1]
- 8022712: 2d2b cmp r5, #43 ; 0x2b
- 8022714: f000 84ab beq.w 802306e <_strtod_r+0xaae>
- 8022718: 2d2d cmp r5, #45 ; 0x2d
- 802271a: f000 833d beq.w 8022d98 <_strtod_r+0x7d8>
- 802271e: 2200 movs r2, #0
- 8022720: 920a str r2, [sp, #40] ; 0x28
- 8022722: f1a5 0330 sub.w r3, r5, #48 ; 0x30
- 8022726: 2b09 cmp r3, #9
- 8022728: f200 842c bhi.w 8022f84 <_strtod_r+0x9c4>
- 802272c: 2d30 cmp r5, #48 ; 0x30
- 802272e: d106 bne.n 802273e <_strtod_r+0x17e>
- 8022730: 9b17 ldr r3, [sp, #92] ; 0x5c
- 8022732: 3301 adds r3, #1
- 8022734: 9317 str r3, [sp, #92] ; 0x5c
- 8022736: f813 5b01 ldrb.w r5, [r3], #1
- 802273a: 2d30 cmp r5, #48 ; 0x30
- 802273c: d0fa beq.n 8022734 <_strtod_r+0x174>
- 802273e: f1a5 0331 sub.w r3, r5, #49 ; 0x31
- 8022742: 2b08 cmp r3, #8
- 8022744: f200 80b7 bhi.w 80228b6 <_strtod_r+0x2f6>
- 8022748: 9a17 ldr r2, [sp, #92] ; 0x5c
- 802274a: 3d30 subs r5, #48 ; 0x30
- 802274c: 950d str r5, [sp, #52] ; 0x34
- 802274e: 1c53 adds r3, r2, #1
- 8022750: 9317 str r3, [sp, #92] ; 0x5c
- 8022752: 7855 ldrb r5, [r2, #1]
- 8022754: 920b str r2, [sp, #44] ; 0x2c
- 8022756: 2d2f cmp r5, #47 ; 0x2f
- 8022758: dd16 ble.n 8022788 <_strtod_r+0x1c8>
- 802275a: 2d39 cmp r5, #57 ; 0x39
- 802275c: dc14 bgt.n 8022788 <_strtod_r+0x1c8>
- 802275e: 1c93 adds r3, r2, #2
- 8022760: 910c str r1, [sp, #48] ; 0x30
- 8022762: 9a0d ldr r2, [sp, #52] ; 0x34
- 8022764: e001 b.n 802276a <_strtod_r+0x1aa>
- 8022766: 2d39 cmp r5, #57 ; 0x39
- 8022768: dc0b bgt.n 8022782 <_strtod_r+0x1c2>
- 802276a: 9317 str r3, [sp, #92] ; 0x5c
- 802276c: 4619 mov r1, r3
- 802276e: eb02 0282 add.w r2, r2, r2, lsl #2
- 8022772: 3301 adds r3, #1
- 8022774: eb05 0242 add.w r2, r5, r2, lsl #1
- 8022778: f813 5c01 ldrb.w r5, [r3, #-1]
- 802277c: 3a30 subs r2, #48 ; 0x30
- 802277e: 2d2f cmp r5, #47 ; 0x2f
- 8022780: dcf1 bgt.n 8022766 <_strtod_r+0x1a6>
- 8022782: 460b mov r3, r1
- 8022784: 990c ldr r1, [sp, #48] ; 0x30
- 8022786: 920d str r2, [sp, #52] ; 0x34
- 8022788: 9a0b ldr r2, [sp, #44] ; 0x2c
- 802278a: 1a9b subs r3, r3, r2
- 802278c: 2b08 cmp r3, #8
- 802278e: bfc8 it gt
- 8022790: f644 621f movwgt r2, #19999 ; 0x4e1f
- 8022794: dc05 bgt.n 80227a2 <_strtod_r+0x1e2>
- 8022796: 9a0d ldr r2, [sp, #52] ; 0x34
- 8022798: f644 631f movw r3, #19999 ; 0x4e1f
- 802279c: 429a cmp r2, r3
- 802279e: bfa8 it ge
- 80227a0: 461a movge r2, r3
- 80227a2: 9b0a ldr r3, [sp, #40] ; 0x28
- 80227a4: b103 cbz r3, 80227a8 <_strtod_r+0x1e8>
- 80227a6: 4252 negs r2, r2
- 80227a8: f1b8 0f00 cmp.w r8, #0
- 80227ac: f000 8088 beq.w 80228c0 <_strtod_r+0x300>
- 80227b0: 9d09 ldr r5, [sp, #36] ; 0x24
- 80227b2: 4638 mov r0, r7
- 80227b4: 2c00 cmp r4, #0
- 80227b6: bf08 it eq
- 80227b8: 4644 moveq r4, r8
- 80227ba: 940a str r4, [sp, #40] ; 0x28
- 80227bc: 1b52 subs r2, r2, r5
- 80227be: 9209 str r2, [sp, #36] ; 0x24
- 80227c0: f7fd fe88 bl 80204d4 <__aeabi_ui2d>
- 80227c4: f1b8 0f10 cmp.w r8, #16
- 80227c8: bfb4 ite lt
- 80227ca: 46c1 movlt r9, r8
- 80227cc: f04f 0910 movge.w r9, #16
- 80227d0: f1b9 0f09 cmp.w r9, #9
- 80227d4: 4602 mov r2, r0
- 80227d6: 460b mov r3, r1
- 80227d8: e9cd 2306 strd r2, r3, [sp, #24]
- 80227dc: dd16 ble.n 802280c <_strtod_r+0x24c>
- 80227de: f249 7340 movw r3, #38720 ; 0x9740
- 80227e2: f6c0 0303 movt r3, #2051 ; 0x803
- 80227e6: eb03 03c9 add.w r3, r3, r9, lsl #3
- 80227ea: e953 2312 ldrd r2, r3, [r3, #-72] ; 0x48
- 80227ee: f7fd fee7 bl 80205c0 <__aeabi_dmul>
- 80227f2: 4604 mov r4, r0
- 80227f4: 4650 mov r0, sl
- 80227f6: 460d mov r5, r1
- 80227f8: f7fd fe6c bl 80204d4 <__aeabi_ui2d>
- 80227fc: 4602 mov r2, r0
- 80227fe: 460b mov r3, r1
- 8022800: 4620 mov r0, r4
- 8022802: 4629 mov r1, r5
- 8022804: f7fd fd2a bl 802025c <__adddf3>
- 8022808: e9cd 0106 strd r0, r1, [sp, #24]
- 802280c: f1b8 0f0f cmp.w r8, #15
- 8022810: f300 80f2 bgt.w 80229f8 <_strtod_r+0x438>
- 8022814: 9c09 ldr r4, [sp, #36] ; 0x24
- 8022816: 2c00 cmp r4, #0
- 8022818: f000 80a2 beq.w 8022960 <_strtod_r+0x3a0>
- 802281c: f340 8591 ble.w 8023342 <_strtod_r+0xd82>
- 8022820: 9d09 ldr r5, [sp, #36] ; 0x24
- 8022822: 2d16 cmp r5, #22
- 8022824: f300 8545 bgt.w 80232b2 <_strtod_r+0xcf2>
- 8022828: f249 7140 movw r1, #38720 ; 0x9740
- 802282c: e9dd 2306 ldrd r2, r3, [sp, #24]
- 8022830: f6c0 0103 movt r1, #2051 ; 0x803
- 8022834: eb01 01c5 add.w r1, r1, r5, lsl #3
- 8022838: e9d1 0100 ldrd r0, r1, [r1]
- 802283c: f7fd fec0 bl 80205c0 <__aeabi_dmul>
- 8022840: 4681 mov r9, r0
- 8022842: 468a mov sl, r1
- 8022844: e009 b.n 802285a <_strtod_r+0x29a>
- 8022846: 2400 movs r4, #0
- 8022848: 9412 str r4, [sp, #72] ; 0x48
- 802284a: e6fe b.n 802264a <_strtod_r+0x8a>
- 802284c: f04f 0900 mov.w r9, #0
- 8022850: 46ca mov sl, r9
- 8022852: 2400 movs r4, #0
- 8022854: f8cd c05c str.w ip, [sp, #92] ; 0x5c
- 8022858: 9412 str r4, [sp, #72] ; 0x48
- 802285a: 9c10 ldr r4, [sp, #64] ; 0x40
- 802285c: b10c cbz r4, 8022862 <_strtod_r+0x2a2>
- 802285e: 9b17 ldr r3, [sp, #92] ; 0x5c
- 8022860: 6023 str r3, [r4, #0]
- 8022862: 9d12 ldr r5, [sp, #72] ; 0x48
- 8022864: b10d cbz r5, 802286a <_strtod_r+0x2aa>
- 8022866: f10a 4a00 add.w sl, sl, #2147483648 ; 0x80000000
- 802286a: 4648 mov r0, r9
- 802286c: 4651 mov r1, sl
- 802286e: b01d add sp, #116 ; 0x74
- 8022870: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8022874: 2500 movs r5, #0
- 8022876: 2b30 cmp r3, #48 ; 0x30
- 8022878: 460e mov r6, r1
- 802287a: 9512 str r5, [sp, #72] ; 0x48
- 802287c: bf18 it ne
- 802287e: f04f 0900 movne.w r9, #0
- 8022882: f47f aef0 bne.w 8022666 <_strtod_r+0xa6>
- 8022886: 7873 ldrb r3, [r6, #1]
- 8022888: 2b58 cmp r3, #88 ; 0x58
- 802288a: f000 8383 beq.w 8022f94 <_strtod_r+0x9d4>
- 802288e: 1c72 adds r2, r6, #1
- 8022890: 2b78 cmp r3, #120 ; 0x78
- 8022892: f000 837f beq.w 8022f94 <_strtod_r+0x9d4>
- 8022896: 4616 mov r6, r2
- 8022898: 9217 str r2, [sp, #92] ; 0x5c
- 802289a: f812 3b01 ldrb.w r3, [r2], #1
- 802289e: 2b30 cmp r3, #48 ; 0x30
- 80228a0: d0f9 beq.n 8022896 <_strtod_r+0x2d6>
- 80228a2: f04f 0901 mov.w r9, #1
- 80228a6: 2b00 cmp r3, #0
- 80228a8: f47f aedd bne.w 8022666 <_strtod_r+0xa6>
- 80228ac: 4699 mov r9, r3
- 80228ae: 469a mov sl, r3
- 80228b0: e7d3 b.n 802285a <_strtod_r+0x29a>
- 80228b2: 9217 str r2, [sp, #92] ; 0x5c
- 80228b4: e691 b.n 80225da <_strtod_r+0x1a>
- 80228b6: 2200 movs r2, #0
- 80228b8: f1b8 0f00 cmp.w r8, #0
- 80228bc: f47f af78 bne.w 80227b0 <_strtod_r+0x1f0>
- 80228c0: ea50 0009 orrs.w r0, r0, r9
- 80228c4: d14c bne.n 8022960 <_strtod_r+0x3a0>
- 80228c6: 2900 cmp r1, #0
- 80228c8: d139 bne.n 802293e <_strtod_r+0x37e>
- 80228ca: 3d49 subs r5, #73 ; 0x49
- 80228cc: 2d25 cmp r5, #37 ; 0x25
- 80228ce: d836 bhi.n 802293e <_strtod_r+0x37e>
- 80228d0: e8df f015 tbh [pc, r5, lsl #1]
- 80228d4: 0035026a .word 0x0035026a
- 80228d8: 00350035 .word 0x00350035
- 80228dc: 00260035 .word 0x00260035
- 80228e0: 00350035 .word 0x00350035
- 80228e4: 00350035 .word 0x00350035
- 80228e8: 00350035 .word 0x00350035
- 80228ec: 00350035 .word 0x00350035
- 80228f0: 00350035 .word 0x00350035
- 80228f4: 00350035 .word 0x00350035
- 80228f8: 00350035 .word 0x00350035
- 80228fc: 00350035 .word 0x00350035
- 8022900: 00350035 .word 0x00350035
- 8022904: 00350035 .word 0x00350035
- 8022908: 00350035 .word 0x00350035
- 802290c: 00350035 .word 0x00350035
- 8022910: 00350035 .word 0x00350035
- 8022914: 0035026a .word 0x0035026a
- 8022918: 00350035 .word 0x00350035
- 802291c: 00260035 .word 0x00260035
- 8022920: 4853 ldr r0, [pc, #332] ; (8022a70 <_strtod_r+0x4b0>)
- 8022922: 9a17 ldr r2, [sp, #92] ; 0x5c
- 8022924: f810 1f01 ldrb.w r1, [r0, #1]!
- 8022928: 4613 mov r3, r2
- 802292a: b169 cbz r1, 8022948 <_strtod_r+0x388>
- 802292c: 785b ldrb r3, [r3, #1]
- 802292e: 3201 adds r2, #1
- 8022930: 2b40 cmp r3, #64 ; 0x40
- 8022932: dd02 ble.n 802293a <_strtod_r+0x37a>
- 8022934: 2b5a cmp r3, #90 ; 0x5a
- 8022936: bfd8 it le
- 8022938: 3320 addle r3, #32
- 802293a: 428b cmp r3, r1
- 802293c: d0f2 beq.n 8022924 <_strtod_r+0x364>
- 802293e: f8dd 9018 ldr.w r9, [sp, #24]
- 8022942: f8dd a01c ldr.w sl, [sp, #28]
- 8022946: e784 b.n 8022852 <_strtod_r+0x292>
- 8022948: 1c53 adds r3, r2, #1
- 802294a: 9317 str r3, [sp, #92] ; 0x5c
- 802294c: 7853 ldrb r3, [r2, #1]
- 802294e: 2b28 cmp r3, #40 ; 0x28
- 8022950: f000 8575 beq.w 802343e <_strtod_r+0xe7e>
- 8022954: 2300 movs r3, #0
- 8022956: 9306 str r3, [sp, #24]
- 8022958: 461c mov r4, r3
- 802295a: f6cf 74f8 movt r4, #65528 ; 0xfff8
- 802295e: 9407 str r4, [sp, #28]
- 8022960: f8dd 9018 ldr.w r9, [sp, #24]
- 8022964: f8dd a01c ldr.w sl, [sp, #28]
- 8022968: e777 b.n 802285a <_strtod_r+0x29a>
- 802296a: 4658 mov r0, fp
- 802296c: 9d17 ldr r5, [sp, #92] ; 0x5c
- 802296e: f001 fc01 bl 8024174 <_localeconv_r>
- 8022972: 6800 ldr r0, [r0, #0]
- 8022974: f7ff fa9c bl 8021eb0 <strlen>
- 8022978: f8dd c010 ldr.w ip, [sp, #16]
- 802297c: 182b adds r3, r5, r0
- 802297e: 9317 str r3, [sp, #92] ; 0x5c
- 8022980: 5c2d ldrb r5, [r5, r0]
- 8022982: 2c00 cmp r4, #0
- 8022984: f040 819b bne.w 8022cbe <_strtod_r+0x6fe>
- 8022988: 2d30 cmp r5, #48 ; 0x30
- 802298a: 4620 mov r0, r4
- 802298c: d105 bne.n 802299a <_strtod_r+0x3da>
- 802298e: 3301 adds r3, #1
- 8022990: 9317 str r3, [sp, #92] ; 0x5c
- 8022992: 3001 adds r0, #1
- 8022994: 781d ldrb r5, [r3, #0]
- 8022996: 2d30 cmp r5, #48 ; 0x30
- 8022998: d0f9 beq.n 802298e <_strtod_r+0x3ce>
- 802299a: f1a5 0331 sub.w r3, r5, #49 ; 0x31
- 802299e: 2b08 cmp r3, #8
- 80229a0: f200 819a bhi.w 8022cd8 <_strtod_r+0x718>
- 80229a4: 9e17 ldr r6, [sp, #92] ; 0x5c
- 80229a6: f04f 0800 mov.w r8, #0
- 80229aa: 9009 str r0, [sp, #36] ; 0x24
- 80229ac: f1a5 0130 sub.w r1, r5, #48 ; 0x30
- 80229b0: 2001 movs r0, #1
- 80229b2: 960a str r6, [sp, #40] ; 0x28
- 80229b4: 2900 cmp r1, #0
- 80229b6: f000 836c beq.w 8023092 <_strtod_r+0xad2>
- 80229ba: 9a09 ldr r2, [sp, #36] ; 0x24
- 80229bc: 2801 cmp r0, #1
- 80229be: 4402 add r2, r0
- 80229c0: 9209 str r2, [sp, #36] ; 0x24
- 80229c2: f000 8532 beq.w 802342a <_strtod_r+0xe6a>
- 80229c6: eb08 0200 add.w r2, r8, r0
- 80229ca: 4643 mov r3, r8
- 80229cc: 3a01 subs r2, #1
- 80229ce: f8cd 802c str.w r8, [sp, #44] ; 0x2c
- 80229d2: 4690 mov r8, r2
- 80229d4: e003 b.n 80229de <_strtod_r+0x41e>
- 80229d6: 006f lsls r7, r5, #1
- 80229d8: 4543 cmp r3, r8
- 80229da: f000 834b beq.w 8023074 <_strtod_r+0xab4>
- 80229de: 3301 adds r3, #1
- 80229e0: eb07 0587 add.w r5, r7, r7, lsl #2
- 80229e4: 1e5a subs r2, r3, #1
- 80229e6: 2a08 cmp r2, #8
- 80229e8: ddf5 ble.n 80229d6 <_strtod_r+0x416>
- 80229ea: eb0a 028a add.w r2, sl, sl, lsl #2
- 80229ee: 2b10 cmp r3, #16
- 80229f0: bfd8 it le
- 80229f2: ea4f 0a42 movle.w sl, r2, lsl #1
- 80229f6: e7ef b.n 80229d8 <_strtod_r+0x418>
- 80229f8: 9d09 ldr r5, [sp, #36] ; 0x24
- 80229fa: ebc9 0908 rsb r9, r9, r8
- 80229fe: eb05 0409 add.w r4, r5, r9
- 8022a02: 2c00 cmp r4, #0
- 8022a04: f340 83de ble.w 80231c4 <_strtod_r+0xc04>
- 8022a08: f014 000f ands.w r0, r4, #15
- 8022a0c: d00d beq.n 8022a2a <_strtod_r+0x46a>
- 8022a0e: f249 7140 movw r1, #38720 ; 0x9740
- 8022a12: e9dd 2306 ldrd r2, r3, [sp, #24]
- 8022a16: f6c0 0103 movt r1, #2051 ; 0x803
- 8022a1a: eb01 01c0 add.w r1, r1, r0, lsl #3
- 8022a1e: e9d1 0100 ldrd r0, r1, [r1]
- 8022a22: f7fd fdcd bl 80205c0 <__aeabi_dmul>
- 8022a26: e9cd 0106 strd r0, r1, [sp, #24]
- 8022a2a: f034 040f bics.w r4, r4, #15
- 8022a2e: f040 815f bne.w 8022cf0 <_strtod_r+0x730>
- 8022a32: f8dd 9018 ldr.w r9, [sp, #24]
- 8022a36: f8dd a01c ldr.w sl, [sp, #28]
- 8022a3a: 940b str r4, [sp, #44] ; 0x2c
- 8022a3c: 9700 str r7, [sp, #0]
- 8022a3e: 4658 mov r0, fp
- 8022a40: 4631 mov r1, r6
- 8022a42: 9a0a ldr r2, [sp, #40] ; 0x28
- 8022a44: 4643 mov r3, r8
- 8022a46: f001 ff67 bl 8024918 <__s2b>
- 8022a4a: 9d09 ldr r5, [sp, #36] ; 0x24
- 8022a4c: 2d00 cmp r5, #0
- 8022a4e: 9011 str r0, [sp, #68] ; 0x44
- 8022a50: f2c0 8472 blt.w 8023338 <_strtod_r+0xd78>
- 8022a54: 2400 movs r4, #0
- 8022a56: 940d str r4, [sp, #52] ; 0x34
- 8022a58: 9d09 ldr r5, [sp, #36] ; 0x24
- 8022a5a: 9c11 ldr r4, [sp, #68] ; 0x44
- 8022a5c: ea25 75e5 bic.w r5, r5, r5, asr #31
- 8022a60: f8cd 9024 str.w r9, [sp, #36] ; 0x24
- 8022a64: 340c adds r4, #12
- 8022a66: 950e str r5, [sp, #56] ; 0x38
- 8022a68: 9413 str r4, [sp, #76] ; 0x4c
- 8022a6a: f8cd a028 str.w sl, [sp, #40] ; 0x28
- 8022a6e: e073 b.n 8022b58 <_strtod_r+0x598>
- 8022a70: 08045ba7 .word 0x08045ba7
- 8022a74: 9b0f ldr r3, [sp, #60] ; 0x3c
- 8022a76: 2b00 cmp r3, #0
- 8022a78: f000 81a8 beq.w 8022dcc <_strtod_r+0x80c>
- 8022a7c: f04f 0900 mov.w r9, #0
- 8022a80: 2500 movs r5, #0
- 8022a82: f8dd c01c ldr.w ip, [sp, #28]
- 8022a86: 2400 movs r4, #0
- 8022a88: f6c3 75f0 movt r5, #16368 ; 0x3ff0
- 8022a8c: f6c3 79f0 movt r9, #16368 ; 0x3ff0
- 8022a90: f8cd 8030 str.w r8, [sp, #48] ; 0x30
- 8022a94: f04f 0800 mov.w r8, #0
- 8022a98: 4643 mov r3, r8
- 8022a9a: f6c7 78f0 movt r8, #32752 ; 0x7ff0
- 8022a9e: f6c7 73e0 movt r3, #32736 ; 0x7fe0
- 8022aa2: ea0c 0808 and.w r8, ip, r8
- 8022aa6: 4598 cmp r8, r3
- 8022aa8: f000 81c5 beq.w 8022e36 <_strtod_r+0x876>
- 8022aac: 9a0b ldr r2, [sp, #44] ; 0x2c
- 8022aae: f1b8 6fd4 cmp.w r8, #111149056 ; 0x6a00000
- 8022ab2: bf8c ite hi
- 8022ab4: 2300 movhi r3, #0
- 8022ab6: 2301 movls r3, #1
- 8022ab8: 2a00 cmp r2, #0
- 8022aba: bf08 it eq
- 8022abc: 2300 moveq r3, #0
- 8022abe: b1eb cbz r3, 8022afc <_strtod_r+0x53c>
- 8022ac0: 980c ldr r0, [sp, #48] ; 0x30
- 8022ac2: 4649 mov r1, r9
- 8022ac4: a388 add r3, pc, #544 ; (adr r3, 8022ce8 <_strtod_r+0x728>)
- 8022ac6: e9d3 2300 ldrd r2, r3, [r3]
- 8022aca: f7fd fff5 bl 8020ab8 <__aeabi_dcmple>
- 8022ace: b188 cbz r0, 8022af4 <_strtod_r+0x534>
- 8022ad0: 980c ldr r0, [sp, #48] ; 0x30
- 8022ad2: 4649 mov r1, r9
- 8022ad4: f7fe f836 bl 8020b44 <__aeabi_d2uiz>
- 8022ad8: 2800 cmp r0, #0
- 8022ada: f000 8246 beq.w 8022f6a <_strtod_r+0x9aa>
- 8022ade: f7fd fcf9 bl 80204d4 <__aeabi_ui2d>
- 8022ae2: 4689 mov r9, r1
- 8022ae4: 900c str r0, [sp, #48] ; 0x30
- 8022ae6: 9c0f ldr r4, [sp, #60] ; 0x3c
- 8022ae8: f109 4300 add.w r3, r9, #2147483648 ; 0x80000000
- 8022aec: b104 cbz r4, 8022af0 <_strtod_r+0x530>
- 8022aee: 464b mov r3, r9
- 8022af0: 9c0c ldr r4, [sp, #48] ; 0x30
- 8022af2: 461d mov r5, r3
- 8022af4: f105 63d6 add.w r3, r5, #112197632 ; 0x6b00000
- 8022af8: ebc8 0503 rsb r5, r8, r3
- 8022afc: 9809 ldr r0, [sp, #36] ; 0x24
- 8022afe: 990a ldr r1, [sp, #40] ; 0x28
- 8022b00: f002 f98a bl 8024e18 <__ulp>
- 8022b04: 4602 mov r2, r0
- 8022b06: 460b mov r3, r1
- 8022b08: 4620 mov r0, r4
- 8022b0a: 4629 mov r1, r5
- 8022b0c: f7fd fd58 bl 80205c0 <__aeabi_dmul>
- 8022b10: 4602 mov r2, r0
- 8022b12: 460b mov r3, r1
- 8022b14: 9809 ldr r0, [sp, #36] ; 0x24
- 8022b16: 990a ldr r1, [sp, #40] ; 0x28
- 8022b18: f7fd fba0 bl 802025c <__adddf3>
- 8022b1c: e9cd 0106 strd r0, r1, [sp, #24]
- 8022b20: 9c07 ldr r4, [sp, #28]
- 8022b22: 9009 str r0, [sp, #36] ; 0x24
- 8022b24: 910a str r1, [sp, #40] ; 0x28
- 8022b26: 9d0b ldr r5, [sp, #44] ; 0x2c
- 8022b28: b935 cbnz r5, 8022b38 <_strtod_r+0x578>
- 8022b2a: 2300 movs r3, #0
- 8022b2c: f6c7 73f0 movt r3, #32752 ; 0x7ff0
- 8022b30: 4023 ands r3, r4
- 8022b32: 4598 cmp r8, r3
- 8022b34: f000 81bc beq.w 8022eb0 <_strtod_r+0x8f0>
- 8022b38: 4658 mov r0, fp
- 8022b3a: 9918 ldr r1, [sp, #96] ; 0x60
- 8022b3c: f001 fe8c bl 8024858 <_Bfree>
- 8022b40: 4658 mov r0, fp
- 8022b42: 4651 mov r1, sl
- 8022b44: f001 fe88 bl 8024858 <_Bfree>
- 8022b48: 4658 mov r0, fp
- 8022b4a: 4639 mov r1, r7
- 8022b4c: f001 fe84 bl 8024858 <_Bfree>
- 8022b50: 4658 mov r0, fp
- 8022b52: 4631 mov r1, r6
- 8022b54: f001 fe80 bl 8024858 <_Bfree>
- 8022b58: 9c11 ldr r4, [sp, #68] ; 0x44
- 8022b5a: 4658 mov r0, fp
- 8022b5c: ad16 add r5, sp, #88 ; 0x58
- 8022b5e: 6861 ldr r1, [r4, #4]
- 8022b60: f001 fe44 bl 80247ec <_Balloc>
- 8022b64: 6923 ldr r3, [r4, #16]
- 8022b66: 9913 ldr r1, [sp, #76] ; 0x4c
- 8022b68: 1c9a adds r2, r3, #2
- 8022b6a: 0092 lsls r2, r2, #2
- 8022b6c: 4682 mov sl, r0
- 8022b6e: 300c adds r0, #12
- 8022b70: f7fe ff0c bl 802198c <memcpy>
- 8022b74: 9a09 ldr r2, [sp, #36] ; 0x24
- 8022b76: 9b0a ldr r3, [sp, #40] ; 0x28
- 8022b78: a819 add r0, sp, #100 ; 0x64
- 8022b7a: 9500 str r5, [sp, #0]
- 8022b7c: 9001 str r0, [sp, #4]
- 8022b7e: 4658 mov r0, fp
- 8022b80: f002 f9c4 bl 8024f0c <__d2b>
- 8022b84: 2101 movs r1, #1
- 8022b86: 9018 str r0, [sp, #96] ; 0x60
- 8022b88: 4658 mov r0, fp
- 8022b8a: f001 ff5d bl 8024a48 <__i2b>
- 8022b8e: 9a16 ldr r2, [sp, #88] ; 0x58
- 8022b90: 9b19 ldr r3, [sp, #100] ; 0x64
- 8022b92: f46f 717f mvn.w r1, #1020 ; 0x3fc
- 8022b96: 2a00 cmp r2, #0
- 8022b98: bfaa itet ge
- 8022b9a: 9d0d ldrge r5, [sp, #52] ; 0x34
- 8022b9c: 9c0e ldrlt r4, [sp, #56] ; 0x38
- 8022b9e: 18ac addge r4, r5, r2
- 8022ba0: 9d0b ldr r5, [sp, #44] ; 0x2c
- 8022ba2: 4607 mov r7, r0
- 8022ba4: bfb8 it lt
- 8022ba6: ebc2 0004 rsblt r0, r2, r4
- 8022baa: ebc5 0202 rsb r2, r5, r2
- 8022bae: bfb8 it lt
- 8022bb0: 9c0d ldrlt r4, [sp, #52] ; 0x34
- 8022bb2: eb02 0503 add.w r5, r2, r3
- 8022bb6: bfa8 it ge
- 8022bb8: 980e ldrge r0, [sp, #56] ; 0x38
- 8022bba: 428d cmp r5, r1
- 8022bbc: 990d ldr r1, [sp, #52] ; 0x34
- 8022bbe: bfb4 ite lt
- 8022bc0: f202 4333 addwlt r3, r2, #1075 ; 0x433
- 8022bc4: f1c3 0336 rsbge r3, r3, #54 ; 0x36
- 8022bc8: 18e6 adds r6, r4, r3
- 8022bca: 18c3 adds r3, r0, r3
- 8022bcc: 980b ldr r0, [sp, #44] ; 0x2c
- 8022bce: 181d adds r5, r3, r0
- 8022bd0: 42a6 cmp r6, r4
- 8022bd2: bfb4 ite lt
- 8022bd4: 4633 movlt r3, r6
- 8022bd6: 4623 movge r3, r4
- 8022bd8: 42ab cmp r3, r5
- 8022bda: bfa8 it ge
- 8022bdc: 462b movge r3, r5
- 8022bde: 2b00 cmp r3, #0
- 8022be0: bfc2 ittt gt
- 8022be2: ebc3 0606 rsbgt r6, r3, r6
- 8022be6: ebc3 0505 rsbgt r5, r3, r5
- 8022bea: ebc3 0404 rsbgt r4, r3, r4
- 8022bee: b189 cbz r1, 8022c14 <_strtod_r+0x654>
- 8022bf0: 460a mov r2, r1
- 8022bf2: 4658 mov r0, fp
- 8022bf4: 4639 mov r1, r7
- 8022bf6: f001 ffcf bl 8024b98 <__pow5mult>
- 8022bfa: 9a18 ldr r2, [sp, #96] ; 0x60
- 8022bfc: 4607 mov r7, r0
- 8022bfe: 4658 mov r0, fp
- 8022c00: 4639 mov r1, r7
- 8022c02: f001 ff2b bl 8024a5c <__multiply>
- 8022c06: 9918 ldr r1, [sp, #96] ; 0x60
- 8022c08: 4680 mov r8, r0
- 8022c0a: 4658 mov r0, fp
- 8022c0c: f001 fe24 bl 8024858 <_Bfree>
- 8022c10: f8cd 8060 str.w r8, [sp, #96] ; 0x60
- 8022c14: 2e00 cmp r6, #0
- 8022c16: dd05 ble.n 8022c24 <_strtod_r+0x664>
- 8022c18: 4658 mov r0, fp
- 8022c1a: 9918 ldr r1, [sp, #96] ; 0x60
- 8022c1c: 4632 mov r2, r6
- 8022c1e: f002 f80d bl 8024c3c <__lshift>
- 8022c22: 9018 str r0, [sp, #96] ; 0x60
- 8022c24: 9a0e ldr r2, [sp, #56] ; 0x38
- 8022c26: b122 cbz r2, 8022c32 <_strtod_r+0x672>
- 8022c28: 4651 mov r1, sl
- 8022c2a: 4658 mov r0, fp
- 8022c2c: f001 ffb4 bl 8024b98 <__pow5mult>
- 8022c30: 4682 mov sl, r0
- 8022c32: 2d00 cmp r5, #0
- 8022c34: dd05 ble.n 8022c42 <_strtod_r+0x682>
- 8022c36: 4651 mov r1, sl
- 8022c38: 4658 mov r0, fp
- 8022c3a: 462a mov r2, r5
- 8022c3c: f001 fffe bl 8024c3c <__lshift>
- 8022c40: 4682 mov sl, r0
- 8022c42: 2c00 cmp r4, #0
- 8022c44: dd05 ble.n 8022c52 <_strtod_r+0x692>
- 8022c46: 4639 mov r1, r7
- 8022c48: 4658 mov r0, fp
- 8022c4a: 4622 mov r2, r4
- 8022c4c: f001 fff6 bl 8024c3c <__lshift>
- 8022c50: 4607 mov r7, r0
- 8022c52: 9918 ldr r1, [sp, #96] ; 0x60
- 8022c54: 4652 mov r2, sl
- 8022c56: 4658 mov r0, fp
- 8022c58: f04f 0800 mov.w r8, #0
- 8022c5c: f002 f866 bl 8024d2c <__mdiff>
- 8022c60: 4639 mov r1, r7
- 8022c62: 68c4 ldr r4, [r0, #12]
- 8022c64: 4606 mov r6, r0
- 8022c66: f8c0 800c str.w r8, [r0, #12]
- 8022c6a: 940f str r4, [sp, #60] ; 0x3c
- 8022c6c: f002 f840 bl 8024cf0 <__mcmp>
- 8022c70: 4540 cmp r0, r8
- 8022c72: f2c0 8213 blt.w 802309c <_strtod_r+0xadc>
- 8022c76: f000 8261 beq.w 802313c <_strtod_r+0xb7c>
- 8022c7a: 4630 mov r0, r6
- 8022c7c: 4639 mov r1, r7
- 8022c7e: f002 f9a3 bl 8024fc8 <__ratio>
- 8022c82: 2200 movs r2, #0
- 8022c84: f04f 4380 mov.w r3, #1073741824 ; 0x40000000
- 8022c88: 4604 mov r4, r0
- 8022c8a: 460d mov r5, r1
- 8022c8c: f7fd ff14 bl 8020ab8 <__aeabi_dcmple>
- 8022c90: 2800 cmp r0, #0
- 8022c92: f47f aeef bne.w 8022a74 <_strtod_r+0x4b4>
- 8022c96: 2300 movs r3, #0
- 8022c98: 4620 mov r0, r4
- 8022c9a: f6c3 73e0 movt r3, #16352 ; 0x3fe0
- 8022c9e: 4629 mov r1, r5
- 8022ca0: 2200 movs r2, #0
- 8022ca2: f7fd fc8d bl 80205c0 <__aeabi_dmul>
- 8022ca6: 9c0f ldr r4, [sp, #60] ; 0x3c
- 8022ca8: 900c str r0, [sp, #48] ; 0x30
- 8022caa: 4689 mov r9, r1
- 8022cac: f101 4300 add.w r3, r1, #2147483648 ; 0x80000000
- 8022cb0: b104 cbz r4, 8022cb4 <_strtod_r+0x6f4>
- 8022cb2: 460b mov r3, r1
- 8022cb4: 9c0c ldr r4, [sp, #48] ; 0x30
- 8022cb6: 461d mov r5, r3
- 8022cb8: f8dd c01c ldr.w ip, [sp, #28]
- 8022cbc: e6ea b.n 8022a94 <_strtod_r+0x4d4>
- 8022cbe: 4640 mov r0, r8
- 8022cc0: 46a0 mov r8, r4
- 8022cc2: 9009 str r0, [sp, #36] ; 0x24
- 8022cc4: f1a5 0130 sub.w r1, r5, #48 ; 0x30
- 8022cc8: 2909 cmp r1, #9
- 8022cca: d803 bhi.n 8022cd4 <_strtod_r+0x714>
- 8022ccc: 9a17 ldr r2, [sp, #92] ; 0x5c
- 8022cce: 3001 adds r0, #1
- 8022cd0: 920a str r2, [sp, #40] ; 0x28
- 8022cd2: e66f b.n 80229b4 <_strtod_r+0x3f4>
- 8022cd4: 2101 movs r1, #1
- 8022cd6: e50a b.n 80226ee <_strtod_r+0x12e>
- 8022cd8: f04f 0800 mov.w r8, #0
- 8022cdc: 2101 movs r1, #1
- 8022cde: f8cd 8024 str.w r8, [sp, #36] ; 0x24
- 8022ce2: e504 b.n 80226ee <_strtod_r+0x12e>
- 8022ce4: f3af 8000 nop.w
- 8022ce8: ffc00000 .word 0xffc00000
- 8022cec: 41dfffff .word 0x41dfffff
- 8022cf0: f5b4 7f9a cmp.w r4, #308 ; 0x134
- 8022cf4: f300 8258 bgt.w 80231a8 <_strtod_r+0xbe8>
- 8022cf8: 1124 asrs r4, r4, #4
- 8022cfa: f649 0a30 movw sl, #38960 ; 0x9830
- 8022cfe: 2c01 cmp r4, #1
- 8022d00: f340 8398 ble.w 8023434 <_strtod_r+0xe74>
- 8022d04: f6c0 0a03 movt sl, #2051 ; 0x803
- 8022d08: e9dd 2306 ldrd r2, r3, [sp, #24]
- 8022d0c: f04f 0900 mov.w r9, #0
- 8022d10: 4655 mov r5, sl
- 8022d12: f014 0f01 tst.w r4, #1
- 8022d16: 4610 mov r0, r2
- 8022d18: 4619 mov r1, r3
- 8022d1a: ea4f 0464 mov.w r4, r4, asr #1
- 8022d1e: f109 0901 add.w r9, r9, #1
- 8022d22: d005 beq.n 8022d30 <_strtod_r+0x770>
- 8022d24: e9d5 2300 ldrd r2, r3, [r5]
- 8022d28: f7fd fc4a bl 80205c0 <__aeabi_dmul>
- 8022d2c: 4602 mov r2, r0
- 8022d2e: 460b mov r3, r1
- 8022d30: 3508 adds r5, #8
- 8022d32: 2c01 cmp r4, #1
- 8022d34: dced bgt.n 8022d12 <_strtod_r+0x752>
- 8022d36: 4610 mov r0, r2
- 8022d38: 4619 mov r1, r3
- 8022d3a: e9cd 0106 strd r0, r1, [sp, #24]
- 8022d3e: 9907 ldr r1, [sp, #28]
- 8022d40: eb0a 09c9 add.w r9, sl, r9, lsl #3
- 8022d44: f1a1 7154 sub.w r1, r1, #55574528 ; 0x3500000
- 8022d48: 9107 str r1, [sp, #28]
- 8022d4a: e9dd 2306 ldrd r2, r3, [sp, #24]
- 8022d4e: e9d9 0100 ldrd r0, r1, [r9]
- 8022d52: f7fd fc35 bl 80205c0 <__aeabi_dmul>
- 8022d56: 2300 movs r3, #0
- 8022d58: 2200 movs r2, #0
- 8022d5a: f6c7 73f0 movt r3, #32752 ; 0x7ff0
- 8022d5e: f6c7 42a0 movt r2, #31904 ; 0x7ca0
- 8022d62: e9cd 0106 strd r0, r1, [sp, #24]
- 8022d66: 9907 ldr r1, [sp, #28]
- 8022d68: 400b ands r3, r1
- 8022d6a: 4293 cmp r3, r2
- 8022d6c: f200 821c bhi.w 80231a8 <_strtod_r+0xbe8>
- 8022d70: 2200 movs r2, #0
- 8022d72: f6c7 4290 movt r2, #31888 ; 0x7c90
- 8022d76: 4293 cmp r3, r2
- 8022d78: f240 8305 bls.w 8023386 <_strtod_r+0xdc6>
- 8022d7c: f64f 72ff movw r2, #65535 ; 0xffff
- 8022d80: f04f 30ff mov.w r0, #4294967295
- 8022d84: 4615 mov r5, r2
- 8022d86: 2400 movs r4, #0
- 8022d88: f6c7 75ef movt r5, #32751 ; 0x7fef
- 8022d8c: 940b str r4, [sp, #44] ; 0x2c
- 8022d8e: 9507 str r5, [sp, #28]
- 8022d90: 4681 mov r9, r0
- 8022d92: 9006 str r0, [sp, #24]
- 8022d94: 46aa mov sl, r5
- 8022d96: e651 b.n 8022a3c <_strtod_r+0x47c>
- 8022d98: 2301 movs r3, #1
- 8022d9a: 930a str r3, [sp, #40] ; 0x28
- 8022d9c: f10c 0302 add.w r3, ip, #2
- 8022da0: 9317 str r3, [sp, #92] ; 0x5c
- 8022da2: f89c 5002 ldrb.w r5, [ip, #2]
- 8022da6: e4bc b.n 8022722 <_strtod_r+0x162>
- 8022da8: 48ab ldr r0, [pc, #684] ; (8023058 <_strtod_r+0xa98>)
- 8022daa: 9a17 ldr r2, [sp, #92] ; 0x5c
- 8022dac: f810 1f01 ldrb.w r1, [r0, #1]!
- 8022db0: 4613 mov r3, r2
- 8022db2: 2900 cmp r1, #0
- 8022db4: f000 8311 beq.w 80233da <_strtod_r+0xe1a>
- 8022db8: 785b ldrb r3, [r3, #1]
- 8022dba: 3201 adds r2, #1
- 8022dbc: 2b40 cmp r3, #64 ; 0x40
- 8022dbe: dd02 ble.n 8022dc6 <_strtod_r+0x806>
- 8022dc0: 2b5a cmp r3, #90 ; 0x5a
- 8022dc2: bfd8 it le
- 8022dc4: 3320 addle r3, #32
- 8022dc6: 428b cmp r3, r1
- 8022dc8: d0f0 beq.n 8022dac <_strtod_r+0x7ec>
- 8022dca: e5b8 b.n 802293e <_strtod_r+0x37e>
- 8022dcc: 9b06 ldr r3, [sp, #24]
- 8022dce: f8dd c01c ldr.w ip, [sp, #28]
- 8022dd2: 2b00 cmp r3, #0
- 8022dd4: f040 80a6 bne.w 8022f24 <_strtod_r+0x964>
- 8022dd8: f3cc 0313 ubfx r3, ip, #0, #20
- 8022ddc: bb03 cbnz r3, 8022e20 <_strtod_r+0x860>
- 8022dde: 2300 movs r3, #0
- 8022de0: 4620 mov r0, r4
- 8022de2: 4629 mov r1, r5
- 8022de4: 2200 movs r2, #0
- 8022de6: f6c3 73f0 movt r3, #16368 ; 0x3ff0
- 8022dea: f8cd c010 str.w ip, [sp, #16]
- 8022dee: f7fd fe59 bl 8020aa4 <__aeabi_dcmplt>
- 8022df2: f8dd c010 ldr.w ip, [sp, #16]
- 8022df6: 2800 cmp r0, #0
- 8022df8: f040 8246 bne.w 8023288 <_strtod_r+0xcc8>
- 8022dfc: 2300 movs r3, #0
- 8022dfe: 2200 movs r2, #0
- 8022e00: f6c3 73e0 movt r3, #16352 ; 0x3fe0
- 8022e04: 4620 mov r0, r4
- 8022e06: 4629 mov r1, r5
- 8022e08: f7fd fbda bl 80205c0 <__aeabi_dmul>
- 8022e0c: f8dd c010 ldr.w ip, [sp, #16]
- 8022e10: 4689 mov r9, r1
- 8022e12: 4602 mov r2, r0
- 8022e14: f101 4300 add.w r3, r1, #2147483648 ; 0x80000000
- 8022e18: 900c str r0, [sp, #48] ; 0x30
- 8022e1a: 4614 mov r4, r2
- 8022e1c: 461d mov r5, r3
- 8022e1e: e639 b.n 8022a94 <_strtod_r+0x4d4>
- 8022e20: f04f 0900 mov.w r9, #0
- 8022e24: 2500 movs r5, #0
- 8022e26: f8cd 9030 str.w r9, [sp, #48] ; 0x30
- 8022e2a: 2400 movs r4, #0
- 8022e2c: f6cb 75f0 movt r5, #49136 ; 0xbff0
- 8022e30: f6c3 79f0 movt r9, #16368 ; 0x3ff0
- 8022e34: e62e b.n 8022a94 <_strtod_r+0x4d4>
- 8022e36: f1ac 7c54 sub.w ip, ip, #55574528 ; 0x3500000
- 8022e3a: 9a09 ldr r2, [sp, #36] ; 0x24
- 8022e3c: f8cd c01c str.w ip, [sp, #28]
- 8022e40: 9b0a ldr r3, [sp, #40] ; 0x28
- 8022e42: e9dd 0106 ldrd r0, r1, [sp, #24]
- 8022e46: e9cd 4502 strd r4, r5, [sp, #8]
- 8022e4a: 4614 mov r4, r2
- 8022e4c: 461d mov r5, r3
- 8022e4e: e9cd 4514 strd r4, r5, [sp, #80] ; 0x50
- 8022e52: f001 ffe1 bl 8024e18 <__ulp>
- 8022e56: 4602 mov r2, r0
- 8022e58: 460b mov r3, r1
- 8022e5a: e9dd 0102 ldrd r0, r1, [sp, #8]
- 8022e5e: f7fd fbaf bl 80205c0 <__aeabi_dmul>
- 8022e62: 4602 mov r2, r0
- 8022e64: 460b mov r3, r1
- 8022e66: e9dd 0106 ldrd r0, r1, [sp, #24]
- 8022e6a: f7fd f9f7 bl 802025c <__adddf3>
- 8022e6e: 2300 movs r3, #0
- 8022e70: f6c7 73f0 movt r3, #32752 ; 0x7ff0
- 8022e74: f64f 72ff movw r2, #65535 ; 0xffff
- 8022e78: f6c7 429f movt r2, #31903 ; 0x7c9f
- 8022e7c: e9cd 0106 strd r0, r1, [sp, #24]
- 8022e80: 9c07 ldr r4, [sp, #28]
- 8022e82: 4023 ands r3, r4
- 8022e84: 4293 cmp r3, r2
- 8022e86: d976 bls.n 8022f76 <_strtod_r+0x9b6>
- 8022e88: f64f 73ff movw r3, #65535 ; 0xffff
- 8022e8c: 9d15 ldr r5, [sp, #84] ; 0x54
- 8022e8e: f6c7 73ef movt r3, #32751 ; 0x7fef
- 8022e92: 429d cmp r5, r3
- 8022e94: f000 8177 beq.w 8023186 <_strtod_r+0xbc6>
- 8022e98: f64f 71ff movw r1, #65535 ; 0xffff
- 8022e9c: f04f 33ff mov.w r3, #4294967295
- 8022ea0: 460a mov r2, r1
- 8022ea2: 9306 str r3, [sp, #24]
- 8022ea4: f6c7 72ef movt r2, #32751 ; 0x7fef
- 8022ea8: 9309 str r3, [sp, #36] ; 0x24
- 8022eaa: 9207 str r2, [sp, #28]
- 8022eac: 920a str r2, [sp, #40] ; 0x28
- 8022eae: e643 b.n 8022b38 <_strtod_r+0x578>
- 8022eb0: 4649 mov r1, r9
- 8022eb2: 980c ldr r0, [sp, #48] ; 0x30
- 8022eb4: f7fd fe1e bl 8020af4 <__aeabi_d2iz>
- 8022eb8: f7fd fb1c bl 80204f4 <__aeabi_i2d>
- 8022ebc: 4602 mov r2, r0
- 8022ebe: 460b mov r3, r1
- 8022ec0: 980c ldr r0, [sp, #48] ; 0x30
- 8022ec2: 4649 mov r1, r9
- 8022ec4: f7fd f9c8 bl 8020258 <__aeabi_dsub>
- 8022ec8: 9d0f ldr r5, [sp, #60] ; 0x3c
- 8022eca: 4680 mov r8, r0
- 8022ecc: 4689 mov r9, r1
- 8022ece: 2d00 cmp r5, #0
- 8022ed0: d137 bne.n 8022f42 <_strtod_r+0x982>
- 8022ed2: 9a06 ldr r2, [sp, #24]
- 8022ed4: 2a00 cmp r2, #0
- 8022ed6: d134 bne.n 8022f42 <_strtod_r+0x982>
- 8022ed8: f3c4 0413 ubfx r4, r4, #0, #20
- 8022edc: 2c00 cmp r4, #0
- 8022ede: d130 bne.n 8022f42 <_strtod_r+0x982>
- 8022ee0: a357 add r3, pc, #348 ; (adr r3, 8023040 <_strtod_r+0xa80>)
- 8022ee2: e9d3 2300 ldrd r2, r3, [r3]
- 8022ee6: f7fd fddd bl 8020aa4 <__aeabi_dcmplt>
- 8022eea: 2800 cmp r0, #0
- 8022eec: f43f ae24 beq.w 8022b38 <_strtod_r+0x578>
- 8022ef0: 4654 mov r4, sl
- 8022ef2: f8dd 9024 ldr.w r9, [sp, #36] ; 0x24
- 8022ef6: f8dd a028 ldr.w sl, [sp, #40] ; 0x28
- 8022efa: 4658 mov r0, fp
- 8022efc: 9918 ldr r1, [sp, #96] ; 0x60
- 8022efe: f001 fcab bl 8024858 <_Bfree>
- 8022f02: 4658 mov r0, fp
- 8022f04: 4621 mov r1, r4
- 8022f06: f001 fca7 bl 8024858 <_Bfree>
- 8022f0a: 4658 mov r0, fp
- 8022f0c: 4639 mov r1, r7
- 8022f0e: f001 fca3 bl 8024858 <_Bfree>
- 8022f12: 4658 mov r0, fp
- 8022f14: 9911 ldr r1, [sp, #68] ; 0x44
- 8022f16: f001 fc9f bl 8024858 <_Bfree>
- 8022f1a: 4658 mov r0, fp
- 8022f1c: 4631 mov r1, r6
- 8022f1e: f001 fc9b bl 8024858 <_Bfree>
- 8022f22: e49a b.n 802285a <_strtod_r+0x29a>
- 8022f24: 2b01 cmp r3, #1
- 8022f26: f47f af7b bne.w 8022e20 <_strtod_r+0x860>
- 8022f2a: 4661 mov r1, ip
- 8022f2c: 2900 cmp r1, #0
- 8022f2e: f47f af77 bne.w 8022e20 <_strtod_r+0x860>
- 8022f32: 4654 mov r4, sl
- 8022f34: f04f 0900 mov.w r9, #0
- 8022f38: 46ca mov sl, r9
- 8022f3a: 2322 movs r3, #34 ; 0x22
- 8022f3c: f8cb 3000 str.w r3, [fp]
- 8022f40: e7db b.n 8022efa <_strtod_r+0x93a>
- 8022f42: 4640 mov r0, r8
- 8022f44: 4649 mov r1, r9
- 8022f46: a340 add r3, pc, #256 ; (adr r3, 8023048 <_strtod_r+0xa88>)
- 8022f48: e9d3 2300 ldrd r2, r3, [r3]
- 8022f4c: f7fd fdaa bl 8020aa4 <__aeabi_dcmplt>
- 8022f50: 2800 cmp r0, #0
- 8022f52: d1cd bne.n 8022ef0 <_strtod_r+0x930>
- 8022f54: 4640 mov r0, r8
- 8022f56: 4649 mov r1, r9
- 8022f58: a33d add r3, pc, #244 ; (adr r3, 8023050 <_strtod_r+0xa90>)
- 8022f5a: e9d3 2300 ldrd r2, r3, [r3]
- 8022f5e: f7fd fdbf bl 8020ae0 <__aeabi_dcmpgt>
- 8022f62: 2800 cmp r0, #0
- 8022f64: f43f ade8 beq.w 8022b38 <_strtod_r+0x578>
- 8022f68: e7c2 b.n 8022ef0 <_strtod_r+0x930>
- 8022f6a: f04f 0900 mov.w r9, #0
- 8022f6e: 900c str r0, [sp, #48] ; 0x30
- 8022f70: f6c3 79f0 movt r9, #16368 ; 0x3ff0
- 8022f74: e5b7 b.n 8022ae6 <_strtod_r+0x526>
- 8022f76: 9906 ldr r1, [sp, #24]
- 8022f78: f104 7454 add.w r4, r4, #55574528 ; 0x3500000
- 8022f7c: 9407 str r4, [sp, #28]
- 8022f7e: 940a str r4, [sp, #40] ; 0x28
- 8022f80: 9109 str r1, [sp, #36] ; 0x24
- 8022f82: e5d0 b.n 8022b26 <_strtod_r+0x566>
- 8022f84: f8cd c05c str.w ip, [sp, #92] ; 0x5c
- 8022f88: 2200 movs r2, #0
- 8022f8a: f1b8 0f00 cmp.w r8, #0
- 8022f8e: f47f ac0f bne.w 80227b0 <_strtod_r+0x1f0>
- 8022f92: e495 b.n 80228c0 <_strtod_r+0x300>
- 8022f94: 9d12 ldr r5, [sp, #72] ; 0x48
- 8022f96: f240 0404 movw r4, #4
- 8022f9a: f2c2 0400 movt r4, #8192 ; 0x2000
- 8022f9e: ab18 add r3, sp, #96 ; 0x60
- 8022fa0: 4658 mov r0, fp
- 8022fa2: e88d 0028 stmia.w sp, {r3, r5}
- 8022fa6: a917 add r1, sp, #92 ; 0x5c
- 8022fa8: 4622 mov r2, r4
- 8022faa: ab19 add r3, sp, #100 ; 0x64
- 8022fac: f000 fd1c bl 80239e8 <__gethex>
- 8022fb0: f010 0707 ands.w r7, r0, #7
- 8022fb4: 4605 mov r5, r0
- 8022fb6: bf04 itt eq
- 8022fb8: 46b9 moveq r9, r7
- 8022fba: 46ca moveq sl, r9
- 8022fbc: f43f ac4d beq.w 802285a <_strtod_r+0x29a>
- 8022fc0: 2f06 cmp r7, #6
- 8022fc2: f000 816f beq.w 80232a4 <_strtod_r+0xce4>
- 8022fc6: 9a18 ldr r2, [sp, #96] ; 0x60
- 8022fc8: b13a cbz r2, 8022fda <_strtod_r+0xa1a>
- 8022fca: 6821 ldr r1, [r4, #0]
- 8022fcc: a81a add r0, sp, #104 ; 0x68
- 8022fce: f002 f845 bl 802505c <__copybits>
- 8022fd2: 4658 mov r0, fp
- 8022fd4: 9918 ldr r1, [sp, #96] ; 0x60
- 8022fd6: f001 fc3f bl 8024858 <_Bfree>
- 8022fda: 9b19 ldr r3, [sp, #100] ; 0x64
- 8022fdc: 2f06 cmp r7, #6
- 8022fde: d80b bhi.n 8022ff8 <_strtod_r+0xa38>
- 8022fe0: e8df f007 tbb [pc, r7]
- 8022fe4: 141b203c .word 0x141b203c
- 8022fe8: 2004 .short 0x2004
- 8022fea: 3c .byte 0x3c
- 8022feb: 00 .byte 0x00
- 8022fec: f06f 4400 mvn.w r4, #2147483648 ; 0x80000000
- 8022ff0: f04f 30ff mov.w r0, #4294967295
- 8022ff4: 9407 str r4, [sp, #28]
- 8022ff6: 9006 str r0, [sp, #24]
- 8022ff8: 072b lsls r3, r5, #28
- 8022ffa: f57f acb1 bpl.w 8022960 <_strtod_r+0x3a0>
- 8022ffe: 9907 ldr r1, [sp, #28]
- 8023000: f8dd 9018 ldr.w r9, [sp, #24]
- 8023004: f041 4300 orr.w r3, r1, #2147483648 ; 0x80000000
- 8023008: 469a mov sl, r3
- 802300a: e426 b.n 802285a <_strtod_r+0x29a>
- 802300c: 2100 movs r1, #0
- 802300e: 9106 str r1, [sp, #24]
- 8023010: 460a mov r2, r1
- 8023012: f6c7 72f0 movt r2, #32752 ; 0x7ff0
- 8023016: 9207 str r2, [sp, #28]
- 8023018: e7ee b.n 8022ff8 <_strtod_r+0xa38>
- 802301a: 9b1a ldr r3, [sp, #104] ; 0x68
- 802301c: 9c1b ldr r4, [sp, #108] ; 0x6c
- 802301e: 9306 str r3, [sp, #24]
- 8023020: 9407 str r4, [sp, #28]
- 8023022: e7e9 b.n 8022ff8 <_strtod_r+0xa38>
- 8023024: 981a ldr r0, [sp, #104] ; 0x68
- 8023026: f203 4333 addw r3, r3, #1075 ; 0x433
- 802302a: 9a1b ldr r2, [sp, #108] ; 0x6c
- 802302c: f422 1280 bic.w r2, r2, #1048576 ; 0x100000
- 8023030: 9006 str r0, [sp, #24]
- 8023032: ea42 5203 orr.w r2, r2, r3, lsl #20
- 8023036: 9207 str r2, [sp, #28]
- 8023038: e7de b.n 8022ff8 <_strtod_r+0xa38>
- 802303a: bf00 nop
- 802303c: f3af 8000 nop.w
- 8023040: 94a03595 .word 0x94a03595
- 8023044: 3fcfffff .word 0x3fcfffff
- 8023048: 94a03595 .word 0x94a03595
- 802304c: 3fdfffff .word 0x3fdfffff
- 8023050: 35afe535 .word 0x35afe535
- 8023054: 3fe00000 .word 0x3fe00000
- 8023058: 08045b9b .word 0x08045b9b
- 802305c: 2100 movs r1, #0
- 802305e: 9107 str r1, [sp, #28]
- 8023060: 9106 str r1, [sp, #24]
- 8023062: e7c9 b.n 8022ff8 <_strtod_r+0xa38>
- 8023064: 46b0 mov r8, r6
- 8023066: 4657 mov r7, sl
- 8023068: 4654 mov r4, sl
- 802306a: f7ff bb24 b.w 80226b6 <_strtod_r+0xf6>
- 802306e: 2300 movs r3, #0
- 8023070: 930a str r3, [sp, #40] ; 0x28
- 8023072: e693 b.n 8022d9c <_strtod_r+0x7dc>
- 8023074: f8dd 802c ldr.w r8, [sp, #44] ; 0x2c
- 8023078: eb08 0300 add.w r3, r8, r0
- 802307c: 3b01 subs r3, #1
- 802307e: 2b08 cmp r3, #8
- 8023080: f103 0801 add.w r8, r3, #1
- 8023084: f300 8172 bgt.w 802336c <_strtod_r+0xdac>
- 8023088: eb07 0787 add.w r7, r7, r7, lsl #2
- 802308c: 2000 movs r0, #0
- 802308e: eb01 0747 add.w r7, r1, r7, lsl #1
- 8023092: 9d0a ldr r5, [sp, #40] ; 0x28
- 8023094: 1c6b adds r3, r5, #1
- 8023096: 9317 str r3, [sp, #92] ; 0x5c
- 8023098: 786d ldrb r5, [r5, #1]
- 802309a: e613 b.n 8022cc4 <_strtod_r+0x704>
- 802309c: 9d0f ldr r5, [sp, #60] ; 0x3c
- 802309e: 4654 mov r4, sl
- 80230a0: bb7d cbnz r5, 8023102 <_strtod_r+0xb42>
- 80230a2: 9806 ldr r0, [sp, #24]
- 80230a4: bb68 cbnz r0, 8023102 <_strtod_r+0xb42>
- 80230a6: 9a07 ldr r2, [sp, #28]
- 80230a8: f3c2 0313 ubfx r3, r2, #0, #20
- 80230ac: bb4b cbnz r3, 8023102 <_strtod_r+0xb42>
- 80230ae: 4643 mov r3, r8
- 80230b0: f6c7 73f0 movt r3, #32752 ; 0x7ff0
- 80230b4: 4013 ands r3, r2
- 80230b6: f1b3 6fd6 cmp.w r3, #112197632 ; 0x6b00000
- 80230ba: d922 bls.n 8023102 <_strtod_r+0xb42>
- 80230bc: 6973 ldr r3, [r6, #20]
- 80230be: b913 cbnz r3, 80230c6 <_strtod_r+0xb06>
- 80230c0: 6933 ldr r3, [r6, #16]
- 80230c2: 2b01 cmp r3, #1
- 80230c4: dd1d ble.n 8023102 <_strtod_r+0xb42>
- 80230c6: 4631 mov r1, r6
- 80230c8: 2201 movs r2, #1
- 80230ca: 4658 mov r0, fp
- 80230cc: f001 fdb6 bl 8024c3c <__lshift>
- 80230d0: 4639 mov r1, r7
- 80230d2: 4606 mov r6, r0
- 80230d4: f001 fe0c bl 8024cf0 <__mcmp>
- 80230d8: 2800 cmp r0, #0
- 80230da: dd12 ble.n 8023102 <_strtod_r+0xb42>
- 80230dc: 9d0b ldr r5, [sp, #44] ; 0x2c
- 80230de: 2d00 cmp r5, #0
- 80230e0: f040 8195 bne.w 802340e <_strtod_r+0xe4e>
- 80230e4: 9807 ldr r0, [sp, #28]
- 80230e6: f020 4300 bic.w r3, r0, #2147483648 ; 0x80000000
- 80230ea: 0d1b lsrs r3, r3, #20
- 80230ec: 051b lsls r3, r3, #20
- 80230ee: f5a3 1380 sub.w r3, r3, #1048576 ; 0x100000
- 80230f2: f04f 32ff mov.w r2, #4294967295
- 80230f6: 9206 str r2, [sp, #24]
- 80230f8: ea6f 5313 mvn.w r3, r3, lsr #20
- 80230fc: ea6f 5303 mvn.w r3, r3, lsl #20
- 8023100: 9307 str r3, [sp, #28]
- 8023102: 9d0b ldr r5, [sp, #44] ; 0x2c
- 8023104: 2d00 cmp r5, #0
- 8023106: f000 80c8 beq.w 802329a <_strtod_r+0xcda>
- 802310a: 2200 movs r2, #0
- 802310c: 2300 movs r3, #0
- 802310e: f6c3 1250 movt r2, #14672 ; 0x3950
- 8023112: 9314 str r3, [sp, #80] ; 0x50
- 8023114: 9215 str r2, [sp, #84] ; 0x54
- 8023116: e9dd 0106 ldrd r0, r1, [sp, #24]
- 802311a: e9dd 2314 ldrd r2, r3, [sp, #80] ; 0x50
- 802311e: f7fd fa4f bl 80205c0 <__aeabi_dmul>
- 8023122: e9cd 0106 strd r0, r1, [sp, #24]
- 8023126: 468a mov sl, r1
- 8023128: 9907 ldr r1, [sp, #28]
- 802312a: 4681 mov r9, r0
- 802312c: 2900 cmp r1, #0
- 802312e: f47f aee4 bne.w 8022efa <_strtod_r+0x93a>
- 8023132: 9a06 ldr r2, [sp, #24]
- 8023134: 2a00 cmp r2, #0
- 8023136: f47f aee0 bne.w 8022efa <_strtod_r+0x93a>
- 802313a: e6fe b.n 8022f3a <_strtod_r+0x97a>
- 802313c: 9d0f ldr r5, [sp, #60] ; 0x3c
- 802313e: 4654 mov r4, sl
- 8023140: f8dd 9024 ldr.w r9, [sp, #36] ; 0x24
- 8023144: f8dd a028 ldr.w sl, [sp, #40] ; 0x28
- 8023148: 2d00 cmp r5, #0
- 802314a: f000 80d3 beq.w 80232f4 <_strtod_r+0xd34>
- 802314e: 9b07 ldr r3, [sp, #28]
- 8023150: f64f 72ff movw r2, #65535 ; 0xffff
- 8023154: f2c0 020f movt r2, #15
- 8023158: f023 417f bic.w r1, r3, #4278190080 ; 0xff000000
- 802315c: f421 0170 bic.w r1, r1, #15728640 ; 0xf00000
- 8023160: 4291 cmp r1, r2
- 8023162: 9906 ldr r1, [sp, #24]
- 8023164: f000 8119 beq.w 802339a <_strtod_r+0xdda>
- 8023168: 07cb lsls r3, r1, #31
- 802316a: d5ca bpl.n 8023102 <_strtod_r+0xb42>
- 802316c: 4648 mov r0, r9
- 802316e: 4651 mov r1, sl
- 8023170: f001 fe52 bl 8024e18 <__ulp>
- 8023174: 4602 mov r2, r0
- 8023176: 460b mov r3, r1
- 8023178: 4648 mov r0, r9
- 802317a: 4651 mov r1, sl
- 802317c: f7fd f86e bl 802025c <__adddf3>
- 8023180: e9cd 0106 strd r0, r1, [sp, #24]
- 8023184: e7bd b.n 8023102 <_strtod_r+0xb42>
- 8023186: 9814 ldr r0, [sp, #80] ; 0x50
- 8023188: 3001 adds r0, #1
- 802318a: f47f ae85 bne.w 8022e98 <_strtod_r+0x8d8>
- 802318e: 2000 movs r0, #0
- 8023190: 4654 mov r4, sl
- 8023192: 4601 mov r1, r0
- 8023194: 2322 movs r3, #34 ; 0x22
- 8023196: f6c7 71f0 movt r1, #32752 ; 0x7ff0
- 802319a: f8cb 3000 str.w r3, [fp]
- 802319e: 9107 str r1, [sp, #28]
- 80231a0: 4681 mov r9, r0
- 80231a2: 9006 str r0, [sp, #24]
- 80231a4: 468a mov sl, r1
- 80231a6: e6a8 b.n 8022efa <_strtod_r+0x93a>
- 80231a8: 2300 movs r3, #0
- 80231aa: 2500 movs r5, #0
- 80231ac: 461c mov r4, r3
- 80231ae: 9506 str r5, [sp, #24]
- 80231b0: f6c7 74f0 movt r4, #32752 ; 0x7ff0
- 80231b4: 2322 movs r3, #34 ; 0x22
- 80231b6: 9407 str r4, [sp, #28]
- 80231b8: 46a9 mov r9, r5
- 80231ba: f8cb 3000 str.w r3, [fp]
- 80231be: 46a2 mov sl, r4
- 80231c0: f7ff bb4b b.w 802285a <_strtod_r+0x29a>
- 80231c4: f43f ac35 beq.w 8022a32 <_strtod_r+0x472>
- 80231c8: 4264 negs r4, r4
- 80231ca: f014 020f ands.w r2, r4, #15
- 80231ce: d00d beq.n 80231ec <_strtod_r+0xc2c>
- 80231d0: f249 7340 movw r3, #38720 ; 0x9740
- 80231d4: e9dd 0106 ldrd r0, r1, [sp, #24]
- 80231d8: f6c0 0303 movt r3, #2051 ; 0x803
- 80231dc: eb03 03c2 add.w r3, r3, r2, lsl #3
- 80231e0: e9d3 2300 ldrd r2, r3, [r3]
- 80231e4: f7fd fb16 bl 8020814 <__aeabi_ddiv>
- 80231e8: e9cd 0106 strd r0, r1, [sp, #24]
- 80231ec: 1124 asrs r4, r4, #4
- 80231ee: f43f ac20 beq.w 8022a32 <_strtod_r+0x472>
- 80231f2: 2c1f cmp r4, #31
- 80231f4: dc40 bgt.n 8023278 <_strtod_r+0xcb8>
- 80231f6: f014 0f10 tst.w r4, #16
- 80231fa: bf14 ite ne
- 80231fc: 256a movne r5, #106 ; 0x6a
- 80231fe: 2500 moveq r5, #0
- 8023200: 2c00 cmp r4, #0
- 8023202: 950b str r5, [sp, #44] ; 0x2c
- 8023204: dd17 ble.n 8023236 <_strtod_r+0xc76>
- 8023206: f249 7508 movw r5, #38664 ; 0x9708
- 802320a: e9dd 2306 ldrd r2, r3, [sp, #24]
- 802320e: f6c0 0503 movt r5, #2051 ; 0x803
- 8023212: f014 0f01 tst.w r4, #1
- 8023216: 4610 mov r0, r2
- 8023218: 4619 mov r1, r3
- 802321a: d005 beq.n 8023228 <_strtod_r+0xc68>
- 802321c: e9d5 2300 ldrd r2, r3, [r5]
- 8023220: f7fd f9ce bl 80205c0 <__aeabi_dmul>
- 8023224: 4602 mov r2, r0
- 8023226: 460b mov r3, r1
- 8023228: 3508 adds r5, #8
- 802322a: 1064 asrs r4, r4, #1
- 802322c: d1f1 bne.n 8023212 <_strtod_r+0xc52>
- 802322e: 4610 mov r0, r2
- 8023230: 4619 mov r1, r3
- 8023232: e9cd 0106 strd r0, r1, [sp, #24]
- 8023236: 9c0b ldr r4, [sp, #44] ; 0x2c
- 8023238: b18c cbz r4, 802325e <_strtod_r+0xc9e>
- 802323a: 9a07 ldr r2, [sp, #28]
- 802323c: f3c2 530a ubfx r3, r2, #20, #11
- 8023240: f1c3 036b rsb r3, r3, #107 ; 0x6b
- 8023244: 2b00 cmp r3, #0
- 8023246: dd0a ble.n 802325e <_strtod_r+0xc9e>
- 8023248: 2b1f cmp r3, #31
- 802324a: f340 810a ble.w 8023462 <_strtod_r+0xea2>
- 802324e: 2100 movs r1, #0
- 8023250: 2b34 cmp r3, #52 ; 0x34
- 8023252: 9106 str r1, [sp, #24]
- 8023254: f340 810d ble.w 8023472 <_strtod_r+0xeb2>
- 8023258: f04f 725c mov.w r2, #57671680 ; 0x3700000
- 802325c: 9207 str r2, [sp, #28]
- 802325e: 9d06 ldr r5, [sp, #24]
- 8023260: 2200 movs r2, #0
- 8023262: 9c07 ldr r4, [sp, #28]
- 8023264: 2300 movs r3, #0
- 8023266: 4628 mov r0, r5
- 8023268: 46a9 mov r9, r5
- 802326a: 4621 mov r1, r4
- 802326c: 46a2 mov sl, r4
- 802326e: f7fd fc0f bl 8020a90 <__aeabi_dcmpeq>
- 8023272: 2800 cmp r0, #0
- 8023274: f43f abe2 beq.w 8022a3c <_strtod_r+0x47c>
- 8023278: f04f 0900 mov.w r9, #0
- 802327c: 2322 movs r3, #34 ; 0x22
- 802327e: 46ca mov sl, r9
- 8023280: f8cb 3000 str.w r3, [fp]
- 8023284: f7ff bae9 b.w 802285a <_strtod_r+0x29a>
- 8023288: 9a0f ldr r2, [sp, #60] ; 0x3c
- 802328a: 2300 movs r3, #0
- 802328c: 4699 mov r9, r3
- 802328e: f6cb 73e0 movt r3, #49120 ; 0xbfe0
- 8023292: f6c3 79e0 movt r9, #16352 ; 0x3fe0
- 8023296: 920c str r2, [sp, #48] ; 0x30
- 8023298: e5bf b.n 8022e1a <_strtod_r+0x85a>
- 802329a: f8dd 9018 ldr.w r9, [sp, #24]
- 802329e: f8dd a01c ldr.w sl, [sp, #28]
- 80232a2: e62a b.n 8022efa <_strtod_r+0x93a>
- 80232a4: f04f 0900 mov.w r9, #0
- 80232a8: 3601 adds r6, #1
- 80232aa: 46ca mov sl, r9
- 80232ac: 9617 str r6, [sp, #92] ; 0x5c
- 80232ae: f7ff bad4 b.w 802285a <_strtod_r+0x29a>
- 80232b2: 9c09 ldr r4, [sp, #36] ; 0x24
- 80232b4: f1c8 0325 rsb r3, r8, #37 ; 0x25
- 80232b8: 429c cmp r4, r3
- 80232ba: f73f ab9d bgt.w 80229f8 <_strtod_r+0x438>
- 80232be: f1c8 080f rsb r8, r8, #15
- 80232c2: f249 7440 movw r4, #38720 ; 0x9740
- 80232c6: f6c0 0403 movt r4, #2051 ; 0x803
- 80232ca: e9dd 2306 ldrd r2, r3, [sp, #24]
- 80232ce: eb04 01c8 add.w r1, r4, r8, lsl #3
- 80232d2: e9d1 0100 ldrd r0, r1, [r1]
- 80232d6: f7fd f973 bl 80205c0 <__aeabi_dmul>
- 80232da: 9d09 ldr r5, [sp, #36] ; 0x24
- 80232dc: ebc8 0805 rsb r8, r8, r5
- 80232e0: eb04 04c8 add.w r4, r4, r8, lsl #3
- 80232e4: e9d4 2300 ldrd r2, r3, [r4]
- 80232e8: f7fd f96a bl 80205c0 <__aeabi_dmul>
- 80232ec: 4681 mov r9, r0
- 80232ee: 468a mov sl, r1
- 80232f0: f7ff bab3 b.w 802285a <_strtod_r+0x29a>
- 80232f4: 9907 ldr r1, [sp, #28]
- 80232f6: f3c1 0313 ubfx r3, r1, #0, #20
- 80232fa: 2b00 cmp r3, #0
- 80232fc: d141 bne.n 8023382 <_strtod_r+0xdc2>
- 80232fe: 9b06 ldr r3, [sp, #24]
- 8023300: 2b00 cmp r3, #0
- 8023302: f43f aeeb beq.w 80230dc <_strtod_r+0xb1c>
- 8023306: 07da lsls r2, r3, #31
- 8023308: f57f aefb bpl.w 8023102 <_strtod_r+0xb42>
- 802330c: 4648 mov r0, r9
- 802330e: 4651 mov r1, sl
- 8023310: f001 fd82 bl 8024e18 <__ulp>
- 8023314: 4602 mov r2, r0
- 8023316: 460b mov r3, r1
- 8023318: 4648 mov r0, r9
- 802331a: 4651 mov r1, sl
- 802331c: f7fc ff9c bl 8020258 <__aeabi_dsub>
- 8023320: 4602 mov r2, r0
- 8023322: 460b mov r3, r1
- 8023324: e9cd 2306 strd r2, r3, [sp, #24]
- 8023328: 2200 movs r2, #0
- 802332a: 2300 movs r3, #0
- 802332c: f7fd fbb0 bl 8020a90 <__aeabi_dcmpeq>
- 8023330: 2800 cmp r0, #0
- 8023332: f47f adff bne.w 8022f34 <_strtod_r+0x974>
- 8023336: e6e4 b.n 8023102 <_strtod_r+0xb42>
- 8023338: 9d09 ldr r5, [sp, #36] ; 0x24
- 802333a: 426d negs r5, r5
- 802333c: 950d str r5, [sp, #52] ; 0x34
- 802333e: f7ff bb8b b.w 8022a58 <_strtod_r+0x498>
- 8023342: 9c09 ldr r4, [sp, #36] ; 0x24
- 8023344: f114 0f16 cmn.w r4, #22
- 8023348: f6ff ab56 blt.w 80229f8 <_strtod_r+0x438>
- 802334c: f249 7340 movw r3, #38720 ; 0x9740
- 8023350: e9dd 0106 ldrd r0, r1, [sp, #24]
- 8023354: f6c0 0303 movt r3, #2051 ; 0x803
- 8023358: eba3 03c4 sub.w r3, r3, r4, lsl #3
- 802335c: e9d3 2300 ldrd r2, r3, [r3]
- 8023360: f7fd fa58 bl 8020814 <__aeabi_ddiv>
- 8023364: 4681 mov r9, r0
- 8023366: 468a mov sl, r1
- 8023368: f7ff ba77 b.w 802285a <_strtod_r+0x29a>
- 802336c: 2000 movs r0, #0
- 802336e: f1b8 0f10 cmp.w r8, #16
- 8023372: f73f ae8e bgt.w 8023092 <_strtod_r+0xad2>
- 8023376: eb0a 0a8a add.w sl, sl, sl, lsl #2
- 802337a: 2000 movs r0, #0
- 802337c: eb01 0a4a add.w sl, r1, sl, lsl #1
- 8023380: e687 b.n 8023092 <_strtod_r+0xad2>
- 8023382: 9b06 ldr r3, [sp, #24]
- 8023384: e7bf b.n 8023306 <_strtod_r+0xd46>
- 8023386: f101 7154 add.w r1, r1, #55574528 ; 0x3500000
- 802338a: 2400 movs r4, #0
- 802338c: 9107 str r1, [sp, #28]
- 802338e: 468a mov sl, r1
- 8023390: 940b str r4, [sp, #44] ; 0x2c
- 8023392: f8dd 9018 ldr.w r9, [sp, #24]
- 8023396: f7ff bb51 b.w 8022a3c <_strtod_r+0x47c>
- 802339a: 9d0b ldr r5, [sp, #44] ; 0x2c
- 802339c: b1d5 cbz r5, 80233d4 <_strtod_r+0xe14>
- 802339e: 2200 movs r2, #0
- 80233a0: f6c7 72f0 movt r2, #32752 ; 0x7ff0
- 80233a4: 401a ands r2, r3
- 80233a6: f1b2 6fd4 cmp.w r2, #111149056 ; 0x6a00000
- 80233aa: d813 bhi.n 80233d4 <_strtod_r+0xe14>
- 80233ac: 0d12 lsrs r2, r2, #20
- 80233ae: f04f 30ff mov.w r0, #4294967295
- 80233b2: f1c2 026b rsb r2, r2, #107 ; 0x6b
- 80233b6: fa00 f202 lsl.w r2, r0, r2
- 80233ba: 4291 cmp r1, r2
- 80233bc: f47f aed4 bne.w 8023168 <_strtod_r+0xba8>
- 80233c0: 2200 movs r2, #0
- 80233c2: 2000 movs r0, #0
- 80233c4: f6c7 72f0 movt r2, #32752 ; 0x7ff0
- 80233c8: 9006 str r0, [sp, #24]
- 80233ca: 401a ands r2, r3
- 80233cc: f502 1280 add.w r2, r2, #1048576 ; 0x100000
- 80233d0: 9207 str r2, [sp, #28]
- 80233d2: e696 b.n 8023102 <_strtod_r+0xb42>
- 80233d4: f04f 32ff mov.w r2, #4294967295
- 80233d8: e7ef b.n 80233ba <_strtod_r+0xdfa>
- 80233da: 4c2a ldr r4, [pc, #168] ; (8023484 <_strtod_r+0xec4>)
- 80233dc: 4611 mov r1, r2
- 80233de: 9217 str r2, [sp, #92] ; 0x5c
- 80233e0: f814 0f01 ldrb.w r0, [r4, #1]!
- 80233e4: 460b mov r3, r1
- 80233e6: b310 cbz r0, 802342e <_strtod_r+0xe6e>
- 80233e8: 785b ldrb r3, [r3, #1]
- 80233ea: 3101 adds r1, #1
- 80233ec: 2b40 cmp r3, #64 ; 0x40
- 80233ee: dd02 ble.n 80233f6 <_strtod_r+0xe36>
- 80233f0: 2b5a cmp r3, #90 ; 0x5a
- 80233f2: bfd8 it le
- 80233f4: 3320 addle r3, #32
- 80233f6: 4283 cmp r3, r0
- 80233f8: d0f2 beq.n 80233e0 <_strtod_r+0xe20>
- 80233fa: 3201 adds r2, #1
- 80233fc: 9217 str r2, [sp, #92] ; 0x5c
- 80233fe: 2500 movs r5, #0
- 8023400: 9506 str r5, [sp, #24]
- 8023402: 4628 mov r0, r5
- 8023404: f6c7 70f0 movt r0, #32752 ; 0x7ff0
- 8023408: 9007 str r0, [sp, #28]
- 802340a: f7ff baa9 b.w 8022960 <_strtod_r+0x3a0>
- 802340e: 9907 ldr r1, [sp, #28]
- 8023410: f021 4300 bic.w r3, r1, #2147483648 ; 0x80000000
- 8023414: 0d1b lsrs r3, r3, #20
- 8023416: 051b lsls r3, r3, #20
- 8023418: f1b3 6fd6 cmp.w r3, #112197632 ; 0x6b00000
- 802341c: f63f ae67 bhi.w 80230ee <_strtod_r+0xb2e>
- 8023420: f1b3 7f5c cmp.w r3, #57671680 ; 0x3700000
- 8023424: f63f ae71 bhi.w 802310a <_strtod_r+0xb4a>
- 8023428: e584 b.n 8022f34 <_strtod_r+0x974>
- 802342a: 4643 mov r3, r8
- 802342c: e627 b.n 802307e <_strtod_r+0xabe>
- 802342e: 3101 adds r1, #1
- 8023430: 9117 str r1, [sp, #92] ; 0x5c
- 8023432: e7e4 b.n 80233fe <_strtod_r+0xe3e>
- 8023434: f04f 0900 mov.w r9, #0
- 8023438: f6c0 0a03 movt sl, #2051 ; 0x803
- 802343c: e47f b.n 8022d3e <_strtod_r+0x77e>
- 802343e: a817 add r0, sp, #92 ; 0x5c
- 8023440: 4911 ldr r1, [pc, #68] ; (8023488 <_strtod_r+0xec8>)
- 8023442: aa1a add r2, sp, #104 ; 0x68
- 8023444: f000 fd7e bl 8023f44 <__hexnan>
- 8023448: 2805 cmp r0, #5
- 802344a: f47f aa83 bne.w 8022954 <_strtod_r+0x394>
- 802344e: 9b1b ldr r3, [sp, #108] ; 0x6c
- 8023450: 9a1a ldr r2, [sp, #104] ; 0x68
- 8023452: f043 43ff orr.w r3, r3, #2139095040 ; 0x7f800000
- 8023456: f443 03e0 orr.w r3, r3, #7340032 ; 0x700000
- 802345a: 9307 str r3, [sp, #28]
- 802345c: 9206 str r2, [sp, #24]
- 802345e: f7ff ba7f b.w 8022960 <_strtod_r+0x3a0>
- 8023462: f04f 32ff mov.w r2, #4294967295
- 8023466: 9c06 ldr r4, [sp, #24]
- 8023468: fa02 f303 lsl.w r3, r2, r3
- 802346c: 401c ands r4, r3
- 802346e: 9406 str r4, [sp, #24]
- 8023470: e6f5 b.n 802325e <_strtod_r+0xc9e>
- 8023472: f04f 31ff mov.w r1, #4294967295
- 8023476: 3b20 subs r3, #32
- 8023478: fa01 f303 lsl.w r3, r1, r3
- 802347c: 4013 ands r3, r2
- 802347e: 9307 str r3, [sp, #28]
- 8023480: e6ed b.n 802325e <_strtod_r+0xc9e>
- 8023482: bf00 nop
- 8023484: 08045b9f .word 0x08045b9f
- 8023488: 20000018 .word 0x20000018
- 0802348c <strtod>:
- 802348c: f240 032c movw r3, #44 ; 0x2c
- 8023490: 460a mov r2, r1
- 8023492: f2c2 0300 movt r3, #8192 ; 0x2000
- 8023496: 4601 mov r1, r0
- 8023498: 6818 ldr r0, [r3, #0]
- 802349a: f7ff b891 b.w 80225c0 <_strtod_r>
- 802349e: bf00 nop
- 080234a0 <strtof>:
- 80234a0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- 80234a4: f240 062c movw r6, #44 ; 0x2c
- 80234a8: f2c2 0600 movt r6, #8192 ; 0x2000
- 80234ac: 460a mov r2, r1
- 80234ae: 4601 mov r1, r0
- 80234b0: f04f 0801 mov.w r8, #1
- 80234b4: 6830 ldr r0, [r6, #0]
- 80234b6: f7ff f883 bl 80225c0 <_strtod_r>
- 80234ba: 460d mov r5, r1
- 80234bc: 4604 mov r4, r0
- 80234be: f7fd fb61 bl 8020b84 <__aeabi_d2f>
- 80234c2: 2100 movs r1, #0
- 80234c4: 4607 mov r7, r0
- 80234c6: f7fd fcff bl 8020ec8 <__aeabi_fcmpeq>
- 80234ca: b908 cbnz r0, 80234d0 <strtof+0x30>
- 80234cc: f04f 0800 mov.w r8, #0
- 80234d0: 4620 mov r0, r4
- 80234d2: 4629 mov r1, r5
- 80234d4: 2200 movs r2, #0
- 80234d6: 2300 movs r3, #0
- 80234d8: f04f 0901 mov.w r9, #1
- 80234dc: f7fd fad8 bl 8020a90 <__aeabi_dcmpeq>
- 80234e0: b108 cbz r0, 80234e6 <strtof+0x46>
- 80234e2: f04f 0900 mov.w r9, #0
- 80234e6: ea08 0809 and.w r8, r8, r9
- 80234ea: f018 0fff tst.w r8, #255 ; 0xff
- 80234ee: d116 bne.n 802351e <strtof+0x7e>
- 80234f0: f64f 71ff movw r1, #65535 ; 0xffff
- 80234f4: 4638 mov r0, r7
- 80234f6: f6c7 717f movt r1, #32639 ; 0x7f7f
- 80234fa: f7fd fd0d bl 8020f18 <__aeabi_fcmpgt>
- 80234fe: b9a0 cbnz r0, 802352a <strtof+0x8a>
- 8023500: 4638 mov r0, r7
- 8023502: f46f 0100 mvn.w r1, #8388608 ; 0x800000
- 8023506: f7fd fce9 bl 8020edc <__aeabi_fcmplt>
- 802350a: b158 cbz r0, 8023524 <strtof+0x84>
- 802350c: 4620 mov r0, r4
- 802350e: 4629 mov r1, r5
- 8023510: f04f 32ff mov.w r2, #4294967295
- 8023514: f46f 1380 mvn.w r3, #1048576 ; 0x100000
- 8023518: f7fd fac4 bl 8020aa4 <__aeabi_dcmplt>
- 802351c: b910 cbnz r0, 8023524 <strtof+0x84>
- 802351e: 6833 ldr r3, [r6, #0]
- 8023520: 2222 movs r2, #34 ; 0x22
- 8023522: 601a str r2, [r3, #0]
- 8023524: 4638 mov r0, r7
- 8023526: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
- 802352a: f64f 73ff movw r3, #65535 ; 0xffff
- 802352e: 4620 mov r0, r4
- 8023530: 4629 mov r1, r5
- 8023532: f04f 32ff mov.w r2, #4294967295
- 8023536: f6c7 73ef movt r3, #32751 ; 0x7fef
- 802353a: f7fd fad1 bl 8020ae0 <__aeabi_dcmpgt>
- 802353e: 2800 cmp r0, #0
- 8023540: d0ed beq.n 802351e <strtof+0x7e>
- 8023542: e7dd b.n 8023500 <strtof+0x60>
- 8023544: f3af 8000 nop.w
- 08023548 <_strtol_r>:
- 8023548: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 802354c: f240 0400 movw r4, #0
- 8023550: f2c2 0400 movt r4, #8192 ; 0x2000
- 8023554: b085 sub sp, #20
- 8023556: 4699 mov r9, r3
- 8023558: 460b mov r3, r1
- 802355a: f8d4 8000 ldr.w r8, [r4]
- 802355e: 9102 str r1, [sp, #8]
- 8023560: 9003 str r0, [sp, #12]
- 8023562: 461c mov r4, r3
- 8023564: f814 5b01 ldrb.w r5, [r4], #1
- 8023568: eb08 0105 add.w r1, r8, r5
- 802356c: 4623 mov r3, r4
- 802356e: 7849 ldrb r1, [r1, #1]
- 8023570: f001 0108 and.w r1, r1, #8
- 8023574: b2c9 uxtb r1, r1
- 8023576: 2900 cmp r1, #0
- 8023578: d1f3 bne.n 8023562 <_strtol_r+0x1a>
- 802357a: 2d2d cmp r5, #45 ; 0x2d
- 802357c: d07b beq.n 8023676 <_strtol_r+0x12e>
- 802357e: 2d2b cmp r5, #43 ; 0x2b
- 8023580: bf05 ittet eq
- 8023582: 4624 moveq r4, r4
- 8023584: 460b moveq r3, r1
- 8023586: 460b movne r3, r1
- 8023588: f814 5b01 ldrbeq.w r5, [r4], #1
- 802358c: f039 0110 bics.w r1, r9, #16
- 8023590: d112 bne.n 80235b8 <_strtol_r+0x70>
- 8023592: f1d9 0001 rsbs r0, r9, #1
- 8023596: bf38 it cc
- 8023598: 2000 movcc r0, #0
- 802359a: 2d30 cmp r5, #48 ; 0x30
- 802359c: d004 beq.n 80235a8 <_strtol_r+0x60>
- 802359e: b158 cbz r0, 80235b8 <_strtol_r+0x70>
- 80235a0: f04f 090a mov.w r9, #10
- 80235a4: 46cb mov fp, r9
- 80235a6: e008 b.n 80235ba <_strtol_r+0x72>
- 80235a8: 7821 ldrb r1, [r4, #0]
- 80235aa: f001 01df and.w r1, r1, #223 ; 0xdf
- 80235ae: 2958 cmp r1, #88 ; 0x58
- 80235b0: d065 beq.n 802367e <_strtol_r+0x136>
- 80235b2: b108 cbz r0, 80235b8 <_strtol_r+0x70>
- 80235b4: f04f 0908 mov.w r9, #8
- 80235b8: 46cb mov fp, r9
- 80235ba: 2b00 cmp r3, #0
- 80235bc: 4659 mov r1, fp
- 80235be: bf0c ite eq
- 80235c0: f06f 4600 mvneq.w r6, #2147483648 ; 0x80000000
- 80235c4: f04f 4600 movne.w r6, #2147483648 ; 0x80000000
- 80235c8: e88d 000c stmia.w sp, {r2, r3}
- 80235cc: 4630 mov r0, r6
- 80235ce: 2700 movs r7, #0
- 80235d0: f7fe f964 bl 802189c <__aeabi_uidivmod>
- 80235d4: 4630 mov r0, r6
- 80235d6: 468a mov sl, r1
- 80235d8: 4659 mov r1, fp
- 80235da: f7fe f831 bl 8021640 <__aeabi_uidiv>
- 80235de: 46bc mov ip, r7
- 80235e0: e89d 000c ldmia.w sp, {r2, r3}
- 80235e4: e016 b.n 8023614 <_strtol_r+0xcc>
- 80235e6: 3d30 subs r5, #48 ; 0x30
- 80235e8: 45a9 cmp r9, r5
- 80235ea: dd25 ble.n 8023638 <_strtol_r+0xf0>
- 80235ec: 4584 cmp ip, r0
- 80235ee: bf94 ite ls
- 80235f0: 2100 movls r1, #0
- 80235f2: 2101 movhi r1, #1
- 80235f4: ea51 77d7 orrs.w r7, r1, r7, lsr #31
- 80235f8: d129 bne.n 802364e <_strtol_r+0x106>
- 80235fa: 4555 cmp r5, sl
- 80235fc: bfd4 ite le
- 80235fe: 2100 movle r1, #0
- 8023600: 2101 movgt r1, #1
- 8023602: 4584 cmp ip, r0
- 8023604: bf18 it ne
- 8023606: 2100 movne r1, #0
- 8023608: bb09 cbnz r1, 802364e <_strtol_r+0x106>
- 802360a: fb0b 5c0c mla ip, fp, ip, r5
- 802360e: 2701 movs r7, #1
- 8023610: f814 5b01 ldrb.w r5, [r4], #1
- 8023614: eb08 0105 add.w r1, r8, r5
- 8023618: 7849 ldrb r1, [r1, #1]
- 802361a: f001 0604 and.w r6, r1, #4
- 802361e: b2f6 uxtb r6, r6
- 8023620: 2e00 cmp r6, #0
- 8023622: d1e0 bne.n 80235e6 <_strtol_r+0x9e>
- 8023624: f011 0103 ands.w r1, r1, #3
- 8023628: d006 beq.n 8023638 <_strtol_r+0xf0>
- 802362a: 2901 cmp r1, #1
- 802362c: bf14 ite ne
- 802362e: 2157 movne r1, #87 ; 0x57
- 8023630: 2137 moveq r1, #55 ; 0x37
- 8023632: 1a6d subs r5, r5, r1
- 8023634: 45a9 cmp r9, r5
- 8023636: dcd9 bgt.n 80235ec <_strtol_r+0xa4>
- 8023638: 1c79 adds r1, r7, #1
- 802363a: d00b beq.n 8023654 <_strtol_r+0x10c>
- 802363c: b9c3 cbnz r3, 8023670 <_strtol_r+0x128>
- 802363e: 4660 mov r0, ip
- 8023640: b112 cbz r2, 8023648 <_strtol_r+0x100>
- 8023642: b997 cbnz r7, 802366a <_strtol_r+0x122>
- 8023644: 9b02 ldr r3, [sp, #8]
- 8023646: 6013 str r3, [r2, #0]
- 8023648: b005 add sp, #20
- 802364a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 802364e: f04f 37ff mov.w r7, #4294967295
- 8023652: e7dd b.n 8023610 <_strtol_r+0xc8>
- 8023654: 9903 ldr r1, [sp, #12]
- 8023656: 2b00 cmp r3, #0
- 8023658: bf0c ite eq
- 802365a: f06f 4000 mvneq.w r0, #2147483648 ; 0x80000000
- 802365e: f04f 4000 movne.w r0, #2147483648 ; 0x80000000
- 8023662: 2322 movs r3, #34 ; 0x22
- 8023664: 600b str r3, [r1, #0]
- 8023666: 2a00 cmp r2, #0
- 8023668: d0ee beq.n 8023648 <_strtol_r+0x100>
- 802366a: 3c01 subs r4, #1
- 802366c: 9402 str r4, [sp, #8]
- 802366e: e7e9 b.n 8023644 <_strtol_r+0xfc>
- 8023670: f1cc 0c00 rsb ip, ip, #0
- 8023674: e7e3 b.n 802363e <_strtol_r+0xf6>
- 8023676: f814 5b01 ldrb.w r5, [r4], #1
- 802367a: 2301 movs r3, #1
- 802367c: e786 b.n 802358c <_strtol_r+0x44>
- 802367e: f04f 0910 mov.w r9, #16
- 8023682: 7865 ldrb r5, [r4, #1]
- 8023684: 46cb mov fp, r9
- 8023686: 3402 adds r4, #2
- 8023688: e797 b.n 80235ba <_strtol_r+0x72>
- 802368a: bf00 nop
- 0802368c <strtol>:
- 802368c: b430 push {r4, r5}
- 802368e: f240 042c movw r4, #44 ; 0x2c
- 8023692: f2c2 0400 movt r4, #8192 ; 0x2000
- 8023696: 460d mov r5, r1
- 8023698: 4613 mov r3, r2
- 802369a: 4601 mov r1, r0
- 802369c: 462a mov r2, r5
- 802369e: 6820 ldr r0, [r4, #0]
- 80236a0: bc30 pop {r4, r5}
- 80236a2: f7ff bf51 b.w 8023548 <_strtol_r>
- 80236a6: bf00 nop
- 080236a8 <_malloc_trim_r>:
- 80236a8: b5f8 push {r3, r4, r5, r6, r7, lr}
- 80236aa: f240 149c movw r4, #412 ; 0x19c
- 80236ae: f2c2 0400 movt r4, #8192 ; 0x2000
- 80236b2: 460f mov r7, r1
- 80236b4: 4605 mov r5, r0
- 80236b6: f001 f895 bl 80247e4 <__malloc_lock>
- 80236ba: 68a3 ldr r3, [r4, #8]
- 80236bc: 685e ldr r6, [r3, #4]
- 80236be: f026 0603 bic.w r6, r6, #3
- 80236c2: f606 73ef addw r3, r6, #4079 ; 0xfef
- 80236c6: 1bdf subs r7, r3, r7
- 80236c8: 0b3f lsrs r7, r7, #12
- 80236ca: 3f01 subs r7, #1
- 80236cc: 033f lsls r7, r7, #12
- 80236ce: f5b7 5f80 cmp.w r7, #4096 ; 0x1000
- 80236d2: db07 blt.n 80236e4 <_malloc_trim_r+0x3c>
- 80236d4: 2100 movs r1, #0
- 80236d6: 4628 mov r0, r5
- 80236d8: f001 fd10 bl 80250fc <_sbrk_r>
- 80236dc: 68a3 ldr r3, [r4, #8]
- 80236de: 199b adds r3, r3, r6
- 80236e0: 4298 cmp r0, r3
- 80236e2: d004 beq.n 80236ee <_malloc_trim_r+0x46>
- 80236e4: 4628 mov r0, r5
- 80236e6: f001 f87f bl 80247e8 <__malloc_unlock>
- 80236ea: 2000 movs r0, #0
- 80236ec: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 80236ee: 4279 negs r1, r7
- 80236f0: 4628 mov r0, r5
- 80236f2: f001 fd03 bl 80250fc <_sbrk_r>
- 80236f6: 3001 adds r0, #1
- 80236f8: d010 beq.n 802371c <_malloc_trim_r+0x74>
- 80236fa: f640 23d4 movw r3, #2772 ; 0xad4
- 80236fe: 68a1 ldr r1, [r4, #8]
- 8023700: f2c2 0300 movt r3, #8192 ; 0x2000
- 8023704: 1bf6 subs r6, r6, r7
- 8023706: 4628 mov r0, r5
- 8023708: f046 0601 orr.w r6, r6, #1
- 802370c: 681a ldr r2, [r3, #0]
- 802370e: 604e str r6, [r1, #4]
- 8023710: 1bd7 subs r7, r2, r7
- 8023712: 601f str r7, [r3, #0]
- 8023714: f001 f868 bl 80247e8 <__malloc_unlock>
- 8023718: 2001 movs r0, #1
- 802371a: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 802371c: 2100 movs r1, #0
- 802371e: 4628 mov r0, r5
- 8023720: f001 fcec bl 80250fc <_sbrk_r>
- 8023724: 68a3 ldr r3, [r4, #8]
- 8023726: 1ac2 subs r2, r0, r3
- 8023728: 2a0f cmp r2, #15
- 802372a: dddb ble.n 80236e4 <_malloc_trim_r+0x3c>
- 802372c: f240 54a4 movw r4, #1444 ; 0x5a4
- 8023730: f640 21d4 movw r1, #2772 ; 0xad4
- 8023734: f2c2 0400 movt r4, #8192 ; 0x2000
- 8023738: f2c2 0100 movt r1, #8192 ; 0x2000
- 802373c: f042 0201 orr.w r2, r2, #1
- 8023740: 605a str r2, [r3, #4]
- 8023742: 6823 ldr r3, [r4, #0]
- 8023744: 1ac0 subs r0, r0, r3
- 8023746: 6008 str r0, [r1, #0]
- 8023748: e7cc b.n 80236e4 <_malloc_trim_r+0x3c>
- 802374a: bf00 nop
- 0802374c <_free_r>:
- 802374c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8023750: 460e mov r6, r1
- 8023752: 4680 mov r8, r0
- 8023754: 2900 cmp r1, #0
- 8023756: d05c beq.n 8023812 <_free_r+0xc6>
- 8023758: f001 f844 bl 80247e4 <__malloc_lock>
- 802375c: f240 159c movw r5, #412 ; 0x19c
- 8023760: f856 1c04 ldr.w r1, [r6, #-4]
- 8023764: f2c2 0500 movt r5, #8192 ; 0x2000
- 8023768: f1a6 0408 sub.w r4, r6, #8
- 802376c: f021 0301 bic.w r3, r1, #1
- 8023770: 68af ldr r7, [r5, #8]
- 8023772: 18e2 adds r2, r4, r3
- 8023774: 4297 cmp r7, r2
- 8023776: 6850 ldr r0, [r2, #4]
- 8023778: f020 0003 bic.w r0, r0, #3
- 802377c: d067 beq.n 802384e <_free_r+0x102>
- 802377e: f011 0101 ands.w r1, r1, #1
- 8023782: 6050 str r0, [r2, #4]
- 8023784: d035 beq.n 80237f2 <_free_r+0xa6>
- 8023786: 2100 movs r1, #0
- 8023788: 1816 adds r6, r2, r0
- 802378a: 6876 ldr r6, [r6, #4]
- 802378c: f016 0f01 tst.w r6, #1
- 8023790: d106 bne.n 80237a0 <_free_r+0x54>
- 8023792: 181b adds r3, r3, r0
- 8023794: 6890 ldr r0, [r2, #8]
- 8023796: 2900 cmp r1, #0
- 8023798: d04d beq.n 8023836 <_free_r+0xea>
- 802379a: 68d2 ldr r2, [r2, #12]
- 802379c: 60c2 str r2, [r0, #12]
- 802379e: 6090 str r0, [r2, #8]
- 80237a0: f043 0201 orr.w r2, r3, #1
- 80237a4: 50e3 str r3, [r4, r3]
- 80237a6: 6062 str r2, [r4, #4]
- 80237a8: b9f1 cbnz r1, 80237e8 <_free_r+0x9c>
- 80237aa: f5b3 7f00 cmp.w r3, #512 ; 0x200
- 80237ae: d332 bcc.n 8023816 <_free_r+0xca>
- 80237b0: 0a5a lsrs r2, r3, #9
- 80237b2: 2a04 cmp r2, #4
- 80237b4: d86c bhi.n 8023890 <_free_r+0x144>
- 80237b6: 0998 lsrs r0, r3, #6
- 80237b8: 3038 adds r0, #56 ; 0x38
- 80237ba: 0041 lsls r1, r0, #1
- 80237bc: eb05 0581 add.w r5, r5, r1, lsl #2
- 80237c0: f240 119c movw r1, #412 ; 0x19c
- 80237c4: f2c2 0100 movt r1, #8192 ; 0x2000
- 80237c8: 68aa ldr r2, [r5, #8]
- 80237ca: 42aa cmp r2, r5
- 80237cc: d06b beq.n 80238a6 <_free_r+0x15a>
- 80237ce: 6851 ldr r1, [r2, #4]
- 80237d0: f021 0103 bic.w r1, r1, #3
- 80237d4: 428b cmp r3, r1
- 80237d6: d202 bcs.n 80237de <_free_r+0x92>
- 80237d8: 6892 ldr r2, [r2, #8]
- 80237da: 4295 cmp r5, r2
- 80237dc: d1f7 bne.n 80237ce <_free_r+0x82>
- 80237de: 68d3 ldr r3, [r2, #12]
- 80237e0: 60e3 str r3, [r4, #12]
- 80237e2: 60a2 str r2, [r4, #8]
- 80237e4: 60d4 str r4, [r2, #12]
- 80237e6: 609c str r4, [r3, #8]
- 80237e8: 4640 mov r0, r8
- 80237ea: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
- 80237ee: f000 bffb b.w 80247e8 <__malloc_unlock>
- 80237f2: f856 6c08 ldr.w r6, [r6, #-8]
- 80237f6: f105 0c08 add.w ip, r5, #8
- 80237fa: 1ba4 subs r4, r4, r6
- 80237fc: 199b adds r3, r3, r6
- 80237fe: 68a6 ldr r6, [r4, #8]
- 8023800: 4566 cmp r6, ip
- 8023802: d043 beq.n 802388c <_free_r+0x140>
- 8023804: f8d4 c00c ldr.w ip, [r4, #12]
- 8023808: f8c6 c00c str.w ip, [r6, #12]
- 802380c: f8cc 6008 str.w r6, [ip, #8]
- 8023810: e7ba b.n 8023788 <_free_r+0x3c>
- 8023812: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 8023816: 08db lsrs r3, r3, #3
- 8023818: 2101 movs r1, #1
- 802381a: 6868 ldr r0, [r5, #4]
- 802381c: eb05 02c3 add.w r2, r5, r3, lsl #3
- 8023820: 109b asrs r3, r3, #2
- 8023822: fa01 f303 lsl.w r3, r1, r3
- 8023826: 60e2 str r2, [r4, #12]
- 8023828: 6891 ldr r1, [r2, #8]
- 802382a: 4318 orrs r0, r3
- 802382c: 6068 str r0, [r5, #4]
- 802382e: 60a1 str r1, [r4, #8]
- 8023830: 60cc str r4, [r1, #12]
- 8023832: 6094 str r4, [r2, #8]
- 8023834: e7d8 b.n 80237e8 <_free_r+0x9c>
- 8023836: 4e29 ldr r6, [pc, #164] ; (80238dc <_free_r+0x190>)
- 8023838: 42b0 cmp r0, r6
- 802383a: d1ae bne.n 802379a <_free_r+0x4e>
- 802383c: 616c str r4, [r5, #20]
- 802383e: f043 0201 orr.w r2, r3, #1
- 8023842: 612c str r4, [r5, #16]
- 8023844: 60e0 str r0, [r4, #12]
- 8023846: 60a0 str r0, [r4, #8]
- 8023848: 6062 str r2, [r4, #4]
- 802384a: 50e3 str r3, [r4, r3]
- 802384c: e7cc b.n 80237e8 <_free_r+0x9c>
- 802384e: 18c0 adds r0, r0, r3
- 8023850: 07cb lsls r3, r1, #31
- 8023852: d407 bmi.n 8023864 <_free_r+0x118>
- 8023854: f856 3c08 ldr.w r3, [r6, #-8]
- 8023858: 1ae4 subs r4, r4, r3
- 802385a: 18c0 adds r0, r0, r3
- 802385c: 68a2 ldr r2, [r4, #8]
- 802385e: 68e3 ldr r3, [r4, #12]
- 8023860: 60d3 str r3, [r2, #12]
- 8023862: 609a str r2, [r3, #8]
- 8023864: f240 52a8 movw r2, #1448 ; 0x5a8
- 8023868: f040 0301 orr.w r3, r0, #1
- 802386c: f2c2 0200 movt r2, #8192 ; 0x2000
- 8023870: 6063 str r3, [r4, #4]
- 8023872: 60ac str r4, [r5, #8]
- 8023874: 6813 ldr r3, [r2, #0]
- 8023876: 4298 cmp r0, r3
- 8023878: d3b6 bcc.n 80237e8 <_free_r+0x9c>
- 802387a: f640 23d0 movw r3, #2768 ; 0xad0
- 802387e: 4640 mov r0, r8
- 8023880: f2c2 0300 movt r3, #8192 ; 0x2000
- 8023884: 6819 ldr r1, [r3, #0]
- 8023886: f7ff ff0f bl 80236a8 <_malloc_trim_r>
- 802388a: e7ad b.n 80237e8 <_free_r+0x9c>
- 802388c: 2101 movs r1, #1
- 802388e: e77b b.n 8023788 <_free_r+0x3c>
- 8023890: f102 005b add.w r0, r2, #91 ; 0x5b
- 8023894: 0041 lsls r1, r0, #1
- 8023896: 2a14 cmp r2, #20
- 8023898: d990 bls.n 80237bc <_free_r+0x70>
- 802389a: 2a54 cmp r2, #84 ; 0x54
- 802389c: d80c bhi.n 80238b8 <_free_r+0x16c>
- 802389e: 0b18 lsrs r0, r3, #12
- 80238a0: 306e adds r0, #110 ; 0x6e
- 80238a2: 0041 lsls r1, r0, #1
- 80238a4: e78a b.n 80237bc <_free_r+0x70>
- 80238a6: 2601 movs r6, #1
- 80238a8: 684d ldr r5, [r1, #4]
- 80238aa: 1080 asrs r0, r0, #2
- 80238ac: 4613 mov r3, r2
- 80238ae: fa06 f000 lsl.w r0, r6, r0
- 80238b2: 4305 orrs r5, r0
- 80238b4: 604d str r5, [r1, #4]
- 80238b6: e793 b.n 80237e0 <_free_r+0x94>
- 80238b8: f5b2 7faa cmp.w r2, #340 ; 0x154
- 80238bc: d803 bhi.n 80238c6 <_free_r+0x17a>
- 80238be: 0bd8 lsrs r0, r3, #15
- 80238c0: 3077 adds r0, #119 ; 0x77
- 80238c2: 0041 lsls r1, r0, #1
- 80238c4: e77a b.n 80237bc <_free_r+0x70>
- 80238c6: f240 5154 movw r1, #1364 ; 0x554
- 80238ca: 428a cmp r2, r1
- 80238cc: d803 bhi.n 80238d6 <_free_r+0x18a>
- 80238ce: 0c98 lsrs r0, r3, #18
- 80238d0: 307c adds r0, #124 ; 0x7c
- 80238d2: 0041 lsls r1, r0, #1
- 80238d4: e772 b.n 80237bc <_free_r+0x70>
- 80238d6: 21fc movs r1, #252 ; 0xfc
- 80238d8: 207e movs r0, #126 ; 0x7e
- 80238da: e76f b.n 80237bc <_free_r+0x70>
- 80238dc: 200001a4 .word 0x200001a4
- 080238e0 <rshift>:
- 80238e0: 6902 ldr r2, [r0, #16]
- 80238e2: 114b asrs r3, r1, #5
- 80238e4: e92d 01f0 stmdb sp!, {r4, r5, r6, r7, r8}
- 80238e8: 4293 cmp r3, r2
- 80238ea: f100 0714 add.w r7, r0, #20
- 80238ee: da2d bge.n 802394c <rshift+0x6c>
- 80238f0: 3304 adds r3, #4
- 80238f2: eb00 0282 add.w r2, r0, r2, lsl #2
- 80238f6: 3214 adds r2, #20
- 80238f8: f011 011f ands.w r1, r1, #31
- 80238fc: eb00 0383 add.w r3, r0, r3, lsl #2
- 8023900: f103 0c04 add.w ip, r3, #4
- 8023904: d029 beq.n 802395a <rshift+0x7a>
- 8023906: 685c ldr r4, [r3, #4]
- 8023908: f10c 0304 add.w r3, ip, #4
- 802390c: 429a cmp r2, r3
- 802390e: f1c1 0820 rsb r8, r1, #32
- 8023912: fa24 f401 lsr.w r4, r4, r1
- 8023916: d938 bls.n 802398a <rshift+0xaa>
- 8023918: 463d mov r5, r7
- 802391a: 681e ldr r6, [r3, #0]
- 802391c: fa06 f608 lsl.w r6, r6, r8
- 8023920: 4334 orrs r4, r6
- 8023922: f845 4b04 str.w r4, [r5], #4
- 8023926: f853 4b04 ldr.w r4, [r3], #4
- 802392a: 429a cmp r2, r3
- 802392c: fa24 f401 lsr.w r4, r4, r1
- 8023930: d8f3 bhi.n 802391a <rshift+0x3a>
- 8023932: ebcc 0302 rsb r3, ip, r2
- 8023936: 3b05 subs r3, #5
- 8023938: f023 0303 bic.w r3, r3, #3
- 802393c: 18c3 adds r3, r0, r3
- 802393e: 3318 adds r3, #24
- 8023940: 601c str r4, [r3, #0]
- 8023942: b1e4 cbz r4, 802397e <rshift+0x9e>
- 8023944: 3304 adds r3, #4
- 8023946: 1bdf subs r7, r3, r7
- 8023948: 10bf asrs r7, r7, #2
- 802394a: e01a b.n 8023982 <rshift+0xa2>
- 802394c: 2300 movs r3, #0
- 802394e: 6103 str r3, [r0, #16]
- 8023950: 2300 movs r3, #0
- 8023952: 6143 str r3, [r0, #20]
- 8023954: e8bd 01f0 ldmia.w sp!, {r4, r5, r6, r7, r8}
- 8023958: 4770 bx lr
- 802395a: 4562 cmp r2, ip
- 802395c: bf84 itt hi
- 802395e: 4663 movhi r3, ip
- 8023960: 4639 movhi r1, r7
- 8023962: d9f3 bls.n 802394c <rshift+0x6c>
- 8023964: f853 4b04 ldr.w r4, [r3], #4
- 8023968: 429a cmp r2, r3
- 802396a: f841 4b04 str.w r4, [r1], #4
- 802396e: d8f9 bhi.n 8023964 <rshift+0x84>
- 8023970: ea6f 030c mvn.w r3, ip
- 8023974: 189b adds r3, r3, r2
- 8023976: f023 0303 bic.w r3, r3, #3
- 802397a: 18c3 adds r3, r0, r3
- 802397c: 3318 adds r3, #24
- 802397e: 1bdf subs r7, r3, r7
- 8023980: 10bf asrs r7, r7, #2
- 8023982: 6107 str r7, [r0, #16]
- 8023984: 2f00 cmp r7, #0
- 8023986: d1e5 bne.n 8023954 <rshift+0x74>
- 8023988: e7e2 b.n 8023950 <rshift+0x70>
- 802398a: 463b mov r3, r7
- 802398c: e7d8 b.n 8023940 <rshift+0x60>
- 802398e: bf00 nop
- 08023990 <__hexdig_init>:
- 8023990: f645 30bc movw r0, #23484 ; 0x5bbc
- 8023994: f643 134c movw r3, #14668 ; 0x394c
- 8023998: f6c0 0004 movt r0, #2052 ; 0x804
- 802399c: 2110 movs r1, #16
- 802399e: 2230 movs r2, #48 ; 0x30
- 80239a0: f2c2 0301 movt r3, #8193 ; 0x2001
- 80239a4: 5499 strb r1, [r3, r2]
- 80239a6: 3101 adds r1, #1
- 80239a8: f810 2f01 ldrb.w r2, [r0, #1]!
- 80239ac: b2c9 uxtb r1, r1
- 80239ae: 2a00 cmp r2, #0
- 80239b0: d1f8 bne.n 80239a4 <__hexdig_init+0x14>
- 80239b2: f645 30b4 movw r0, #23476 ; 0x5bb4
- 80239b6: 211a movs r1, #26
- 80239b8: f6c0 0004 movt r0, #2052 ; 0x804
- 80239bc: 2261 movs r2, #97 ; 0x61
- 80239be: 5499 strb r1, [r3, r2]
- 80239c0: 3101 adds r1, #1
- 80239c2: f810 2f01 ldrb.w r2, [r0, #1]!
- 80239c6: b2c9 uxtb r1, r1
- 80239c8: 2a00 cmp r2, #0
- 80239ca: d1f8 bne.n 80239be <__hexdig_init+0x2e>
- 80239cc: f645 30ac movw r0, #23468 ; 0x5bac
- 80239d0: 211a movs r1, #26
- 80239d2: f6c0 0004 movt r0, #2052 ; 0x804
- 80239d6: 2241 movs r2, #65 ; 0x41
- 80239d8: 5499 strb r1, [r3, r2]
- 80239da: 3101 adds r1, #1
- 80239dc: f810 2f01 ldrb.w r2, [r0, #1]!
- 80239e0: b2c9 uxtb r1, r1
- 80239e2: 2a00 cmp r2, #0
- 80239e4: d1f8 bne.n 80239d8 <__hexdig_init+0x48>
- 80239e6: 4770 bx lr
- 080239e8 <__gethex>:
- 80239e8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 80239ec: b08b sub sp, #44 ; 0x2c
- 80239ee: 4688 mov r8, r1
- 80239f0: f643 164c movw r6, #14668 ; 0x394c
- 80239f4: 9206 str r2, [sp, #24]
- 80239f6: f2c2 0601 movt r6, #8193 ; 0x2001
- 80239fa: 9309 str r3, [sp, #36] ; 0x24
- 80239fc: 9007 str r0, [sp, #28]
- 80239fe: f000 fbb9 bl 8024174 <_localeconv_r>
- 8023a02: 6800 ldr r0, [r0, #0]
- 8023a04: 9002 str r0, [sp, #8]
- 8023a06: f7fe fa53 bl 8021eb0 <strlen>
- 8023a0a: 9b02 ldr r3, [sp, #8]
- 8023a0c: 181a adds r2, r3, r0
- 8023a0e: f896 3030 ldrb.w r3, [r6, #48] ; 0x30
- 8023a12: 9003 str r0, [sp, #12]
- 8023a14: f812 ac01 ldrb.w sl, [r2, #-1]
- 8023a18: 2b00 cmp r3, #0
- 8023a1a: f000 810e beq.w 8023c3a <__gethex+0x252>
- 8023a1e: f8d8 3000 ldr.w r3, [r8]
- 8023a22: 1c9d adds r5, r3, #2
- 8023a24: 789a ldrb r2, [r3, #2]
- 8023a26: 2a30 cmp r2, #48 ; 0x30
- 8023a28: f040 8200 bne.w 8023e2c <__gethex+0x444>
- 8023a2c: 3303 adds r3, #3
- 8023a2e: 2700 movs r7, #0
- 8023a30: 461d mov r5, r3
- 8023a32: f813 2b01 ldrb.w r2, [r3], #1
- 8023a36: 3701 adds r7, #1
- 8023a38: 2a30 cmp r2, #48 ; 0x30
- 8023a3a: d0f9 beq.n 8023a30 <__gethex+0x48>
- 8023a3c: f816 b002 ldrb.w fp, [r6, r2]
- 8023a40: f643 194c movw r9, #14668 ; 0x394c
- 8023a44: f2c2 0901 movt r9, #8193 ; 0x2001
- 8023a48: f1bb 0f00 cmp.w fp, #0
- 8023a4c: f000 80f8 beq.w 8023c40 <__gethex+0x258>
- 8023a50: 782b ldrb r3, [r5, #0]
- 8023a52: f04f 0b00 mov.w fp, #0
- 8023a56: f819 4003 ldrb.w r4, [r9, r3]
- 8023a5a: 2c00 cmp r4, #0
- 8023a5c: f000 8200 beq.w 8023e60 <__gethex+0x478>
- 8023a60: 1c6a adds r2, r5, #1
- 8023a62: 4614 mov r4, r2
- 8023a64: 3201 adds r2, #1
- 8023a66: 7823 ldrb r3, [r4, #0]
- 8023a68: 5cf3 ldrb r3, [r6, r3]
- 8023a6a: 2b00 cmp r3, #0
- 8023a6c: d1f9 bne.n 8023a62 <__gethex+0x7a>
- 8023a6e: 4699 mov r9, r3
- 8023a70: 4620 mov r0, r4
- 8023a72: 9902 ldr r1, [sp, #8]
- 8023a74: 9a03 ldr r2, [sp, #12]
- 8023a76: f7fe fa7d bl 8021f74 <strncmp>
- 8023a7a: b1e8 cbz r0, 8023ab8 <__gethex+0xd0>
- 8023a7c: 7823 ldrb r3, [r4, #0]
- 8023a7e: f1bb 0f00 cmp.w fp, #0
- 8023a82: f000 81c1 beq.w 8023e08 <__gethex+0x420>
- 8023a86: ebc4 0b0b rsb fp, r4, fp
- 8023a8a: ea4f 028b mov.w r2, fp, lsl #2
- 8023a8e: 9205 str r2, [sp, #20]
- 8023a90: 2b50 cmp r3, #80 ; 0x50
- 8023a92: f000 809b beq.w 8023bcc <__gethex+0x1e4>
- 8023a96: 2b70 cmp r3, #112 ; 0x70
- 8023a98: f000 8098 beq.w 8023bcc <__gethex+0x1e4>
- 8023a9c: 4622 mov r2, r4
- 8023a9e: f8c8 2000 str.w r2, [r8]
- 8023aa2: f1b9 0f00 cmp.w r9, #0
- 8023aa6: d00d beq.n 8023ac4 <__gethex+0xdc>
- 8023aa8: 2f00 cmp r7, #0
- 8023aaa: bf0c ite eq
- 8023aac: 2706 moveq r7, #6
- 8023aae: 2700 movne r7, #0
- 8023ab0: 4638 mov r0, r7
- 8023ab2: b00b add sp, #44 ; 0x2c
- 8023ab4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8023ab8: f1bb 0f00 cmp.w fp, #0
- 8023abc: f000 81be beq.w 8023e3c <__gethex+0x454>
- 8023ac0: 7823 ldrb r3, [r4, #0]
- 8023ac2: e7e0 b.n 8023a86 <__gethex+0x9e>
- 8023ac4: 1b63 subs r3, r4, r5
- 8023ac6: 4649 mov r1, r9
- 8023ac8: 3b01 subs r3, #1
- 8023aca: 2b07 cmp r3, #7
- 8023acc: dd03 ble.n 8023ad6 <__gethex+0xee>
- 8023ace: 105b asrs r3, r3, #1
- 8023ad0: 3101 adds r1, #1
- 8023ad2: 2b07 cmp r3, #7
- 8023ad4: dcfb bgt.n 8023ace <__gethex+0xe6>
- 8023ad6: 9807 ldr r0, [sp, #28]
- 8023ad8: f000 fe88 bl 80247ec <_Balloc>
- 8023adc: 42a5 cmp r5, r4
- 8023ade: f100 0314 add.w r3, r0, #20
- 8023ae2: 9004 str r0, [sp, #16]
- 8023ae4: 9308 str r3, [sp, #32]
- 8023ae6: f080 81db bcs.w 8023ea0 <__gethex+0x4b8>
- 8023aea: 469b mov fp, r3
- 8023aec: 9b03 ldr r3, [sp, #12]
- 8023aee: f04f 0800 mov.w r8, #0
- 8023af2: 4647 mov r7, r8
- 8023af4: f1c3 0c01 rsb ip, r3, #1
- 8023af8: e00f b.n 8023b1a <__gethex+0x132>
- 8023afa: 2f20 cmp r7, #32
- 8023afc: d05f beq.n 8023bbe <__gethex+0x1d6>
- 8023afe: 463a mov r2, r7
- 8023b00: 3704 adds r7, #4
- 8023b02: f814 3c01 ldrb.w r3, [r4, #-1]
- 8023b06: 464c mov r4, r9
- 8023b08: 42a5 cmp r5, r4
- 8023b0a: 5cf3 ldrb r3, [r6, r3]
- 8023b0c: f003 030f and.w r3, r3, #15
- 8023b10: fa03 f302 lsl.w r3, r3, r2
- 8023b14: ea48 0803 orr.w r8, r8, r3
- 8023b18: d219 bcs.n 8023b4e <__gethex+0x166>
- 8023b1a: f814 3c01 ldrb.w r3, [r4, #-1]
- 8023b1e: f104 39ff add.w r9, r4, #4294967295
- 8023b22: 4553 cmp r3, sl
- 8023b24: d1e9 bne.n 8023afa <__gethex+0x112>
- 8023b26: eb09 030c add.w r3, r9, ip
- 8023b2a: 429d cmp r5, r3
- 8023b2c: d8e5 bhi.n 8023afa <__gethex+0x112>
- 8023b2e: 4618 mov r0, r3
- 8023b30: 9902 ldr r1, [sp, #8]
- 8023b32: 9a03 ldr r2, [sp, #12]
- 8023b34: 9301 str r3, [sp, #4]
- 8023b36: f8cd c000 str.w ip, [sp]
- 8023b3a: f7fe fa1b bl 8021f74 <strncmp>
- 8023b3e: 9b01 ldr r3, [sp, #4]
- 8023b40: f8dd c000 ldr.w ip, [sp]
- 8023b44: 2800 cmp r0, #0
- 8023b46: d1d8 bne.n 8023afa <__gethex+0x112>
- 8023b48: 461c mov r4, r3
- 8023b4a: 42a5 cmp r5, r4
- 8023b4c: d3e5 bcc.n 8023b1a <__gethex+0x132>
- 8023b4e: 9b08 ldr r3, [sp, #32]
- 8023b50: 4640 mov r0, r8
- 8023b52: f84b 8b04 str.w r8, [fp], #4
- 8023b56: 9904 ldr r1, [sp, #16]
- 8023b58: ebc3 0b0b rsb fp, r3, fp
- 8023b5c: ea4f 03ab mov.w r3, fp, asr #2
- 8023b60: 610b str r3, [r1, #16]
- 8023b62: 015d lsls r5, r3, #5
- 8023b64: f000 ff24 bl 80249b0 <__hi0bits>
- 8023b68: 9a06 ldr r2, [sp, #24]
- 8023b6a: 6814 ldr r4, [r2, #0]
- 8023b6c: 1a28 subs r0, r5, r0
- 8023b6e: 42a0 cmp r0, r4
- 8023b70: f300 8125 bgt.w 8023dbe <__gethex+0x3d6>
- 8023b74: f2c0 814b blt.w 8023e0e <__gethex+0x426>
- 8023b78: 2500 movs r5, #0
- 8023b7a: 9806 ldr r0, [sp, #24]
- 8023b7c: 9905 ldr r1, [sp, #20]
- 8023b7e: 6883 ldr r3, [r0, #8]
- 8023b80: 4299 cmp r1, r3
- 8023b82: f300 80f6 bgt.w 8023d72 <__gethex+0x38a>
- 8023b86: 9806 ldr r0, [sp, #24]
- 8023b88: 9905 ldr r1, [sp, #20]
- 8023b8a: 6843 ldr r3, [r0, #4]
- 8023b8c: 4299 cmp r1, r3
- 8023b8e: f280 8100 bge.w 8023d92 <__gethex+0x3aa>
- 8023b92: 1a5e subs r6, r3, r1
- 8023b94: 42b4 cmp r4, r6
- 8023b96: dc76 bgt.n 8023c86 <__gethex+0x29e>
- 8023b98: 68c2 ldr r2, [r0, #12]
- 8023b9a: 2a02 cmp r2, #2
- 8023b9c: f000 816f beq.w 8023e7e <__gethex+0x496>
- 8023ba0: 2a03 cmp r2, #3
- 8023ba2: f000 8198 beq.w 8023ed6 <__gethex+0x4ee>
- 8023ba6: 2a01 cmp r2, #1
- 8023ba8: f000 8186 beq.w 8023eb8 <__gethex+0x4d0>
- 8023bac: 9807 ldr r0, [sp, #28]
- 8023bae: 2750 movs r7, #80 ; 0x50
- 8023bb0: 9904 ldr r1, [sp, #16]
- 8023bb2: f000 fe51 bl 8024858 <_Bfree>
- 8023bb6: 9814 ldr r0, [sp, #80] ; 0x50
- 8023bb8: 2300 movs r3, #0
- 8023bba: 6003 str r3, [r0, #0]
- 8023bbc: e778 b.n 8023ab0 <__gethex+0xc8>
- 8023bbe: f84b 8b04 str.w r8, [fp], #4
- 8023bc2: f04f 0800 mov.w r8, #0
- 8023bc6: 2704 movs r7, #4
- 8023bc8: 4642 mov r2, r8
- 8023bca: e79a b.n 8023b02 <__gethex+0x11a>
- 8023bcc: 7863 ldrb r3, [r4, #1]
- 8023bce: 2b2b cmp r3, #43 ; 0x2b
- 8023bd0: f000 80f2 beq.w 8023db8 <__gethex+0x3d0>
- 8023bd4: 2b2d cmp r3, #45 ; 0x2d
- 8023bd6: f000 80ea beq.w 8023dae <__gethex+0x3c6>
- 8023bda: 1c60 adds r0, r4, #1
- 8023bdc: f04f 0b00 mov.w fp, #0
- 8023be0: 5cf1 ldrb r1, [r6, r3]
- 8023be2: f643 134c movw r3, #14668 ; 0x394c
- 8023be6: f2c2 0301 movt r3, #8193 ; 0x2001
- 8023bea: 2900 cmp r1, #0
- 8023bec: f43f af56 beq.w 8023a9c <__gethex+0xb4>
- 8023bf0: 2919 cmp r1, #25
- 8023bf2: f73f af53 bgt.w 8023a9c <__gethex+0xb4>
- 8023bf6: f890 c001 ldrb.w ip, [r0, #1]
- 8023bfa: 3910 subs r1, #16
- 8023bfc: 1c42 adds r2, r0, #1
- 8023bfe: f813 300c ldrb.w r3, [r3, ip]
- 8023c02: b193 cbz r3, 8023c2a <__gethex+0x242>
- 8023c04: 2b19 cmp r3, #25
- 8023c06: dc10 bgt.n 8023c2a <__gethex+0x242>
- 8023c08: 3002 adds r0, #2
- 8023c0a: e001 b.n 8023c10 <__gethex+0x228>
- 8023c0c: 2b19 cmp r3, #25
- 8023c0e: dc0c bgt.n 8023c2a <__gethex+0x242>
- 8023c10: 4602 mov r2, r0
- 8023c12: eb01 0181 add.w r1, r1, r1, lsl #2
- 8023c16: 3001 adds r0, #1
- 8023c18: f892 c000 ldrb.w ip, [r2]
- 8023c1c: eb03 0141 add.w r1, r3, r1, lsl #1
- 8023c20: 3910 subs r1, #16
- 8023c22: f816 300c ldrb.w r3, [r6, ip]
- 8023c26: 2b00 cmp r3, #0
- 8023c28: d1f0 bne.n 8023c0c <__gethex+0x224>
- 8023c2a: f1bb 0f00 cmp.w fp, #0
- 8023c2e: d000 beq.n 8023c32 <__gethex+0x24a>
- 8023c30: 4249 negs r1, r1
- 8023c32: 9b05 ldr r3, [sp, #20]
- 8023c34: 185b adds r3, r3, r1
- 8023c36: 9305 str r3, [sp, #20]
- 8023c38: e731 b.n 8023a9e <__gethex+0xb6>
- 8023c3a: f7ff fea9 bl 8023990 <__hexdig_init>
- 8023c3e: e6ee b.n 8023a1e <__gethex+0x36>
- 8023c40: 4628 mov r0, r5
- 8023c42: 9902 ldr r1, [sp, #8]
- 8023c44: 9a03 ldr r2, [sp, #12]
- 8023c46: f7fe f995 bl 8021f74 <strncmp>
- 8023c4a: 2800 cmp r0, #0
- 8023c4c: f040 809a bne.w 8023d84 <__gethex+0x39c>
- 8023c50: 9803 ldr r0, [sp, #12]
- 8023c52: 182c adds r4, r5, r0
- 8023c54: 5c2b ldrb r3, [r5, r0]
- 8023c56: f819 2003 ldrb.w r2, [r9, r3]
- 8023c5a: 2a00 cmp r2, #0
- 8023c5c: f000 80e8 beq.w 8023e30 <__gethex+0x448>
- 8023c60: 2b30 cmp r3, #48 ; 0x30
- 8023c62: f040 8108 bne.w 8023e76 <__gethex+0x48e>
- 8023c66: 1c63 adds r3, r4, #1
- 8023c68: 461d mov r5, r3
- 8023c6a: f813 2b01 ldrb.w r2, [r3], #1
- 8023c6e: 2a30 cmp r2, #48 ; 0x30
- 8023c70: d0fa beq.n 8023c68 <__gethex+0x280>
- 8023c72: 5cb3 ldrb r3, [r6, r2]
- 8023c74: 2b00 cmp r3, #0
- 8023c76: f040 80ff bne.w 8023e78 <__gethex+0x490>
- 8023c7a: f04f 0901 mov.w r9, #1
- 8023c7e: 46a3 mov fp, r4
- 8023c80: 464f mov r7, r9
- 8023c82: 462c mov r4, r5
- 8023c84: e6f4 b.n 8023a70 <__gethex+0x88>
- 8023c86: 1e77 subs r7, r6, #1
- 8023c88: 2d00 cmp r5, #0
- 8023c8a: f040 80e7 bne.w 8023e5c <__gethex+0x474>
- 8023c8e: 2f00 cmp r7, #0
- 8023c90: dd04 ble.n 8023c9c <__gethex+0x2b4>
- 8023c92: 9804 ldr r0, [sp, #16]
- 8023c94: 4639 mov r1, r7
- 8023c96: f001 fa05 bl 80250a4 <__any_on>
- 8023c9a: 4605 mov r5, r0
- 8023c9c: 9908 ldr r1, [sp, #32]
- 8023c9e: 117b asrs r3, r7, #5
- 8023ca0: 2201 movs r2, #1
- 8023ca2: f007 071f and.w r7, r7, #31
- 8023ca6: 9804 ldr r0, [sp, #16]
- 8023ca8: 1ba4 subs r4, r4, r6
- 8023caa: f851 3023 ldr.w r3, [r1, r3, lsl #2]
- 8023cae: fa02 f207 lsl.w r2, r2, r7
- 8023cb2: 4631 mov r1, r6
- 8023cb4: 421a tst r2, r3
- 8023cb6: bf18 it ne
- 8023cb8: f045 0502 orrne.w r5, r5, #2
- 8023cbc: f7ff fe10 bl 80238e0 <rshift>
- 8023cc0: 9b06 ldr r3, [sp, #24]
- 8023cc2: 2702 movs r7, #2
- 8023cc4: 685b ldr r3, [r3, #4]
- 8023cc6: 9305 str r3, [sp, #20]
- 8023cc8: 2d00 cmp r5, #0
- 8023cca: d069 beq.n 8023da0 <__gethex+0x3b8>
- 8023ccc: 9806 ldr r0, [sp, #24]
- 8023cce: 68c3 ldr r3, [r0, #12]
- 8023cd0: 2b02 cmp r3, #2
- 8023cd2: f000 80ea beq.w 8023eaa <__gethex+0x4c2>
- 8023cd6: 2b03 cmp r3, #3
- 8023cd8: d05d beq.n 8023d96 <__gethex+0x3ae>
- 8023cda: 2b01 cmp r3, #1
- 8023cdc: d15e bne.n 8023d9c <__gethex+0x3b4>
- 8023cde: 07aa lsls r2, r5, #30
- 8023ce0: d55c bpl.n 8023d9c <__gethex+0x3b4>
- 8023ce2: 9908 ldr r1, [sp, #32]
- 8023ce4: 680b ldr r3, [r1, #0]
- 8023ce6: 432b orrs r3, r5
- 8023ce8: 07db lsls r3, r3, #31
- 8023cea: d557 bpl.n 8023d9c <__gethex+0x3b4>
- 8023cec: 9b04 ldr r3, [sp, #16]
- 8023cee: 2600 movs r6, #0
- 8023cf0: 9904 ldr r1, [sp, #16]
- 8023cf2: 691d ldr r5, [r3, #16]
- 8023cf4: 9b08 ldr r3, [sp, #32]
- 8023cf6: eb01 0085 add.w r0, r1, r5, lsl #2
- 8023cfa: 3014 adds r0, #20
- 8023cfc: 4619 mov r1, r3
- 8023cfe: f853 2b04 ldr.w r2, [r3], #4
- 8023d02: f1b2 3fff cmp.w r2, #4294967295
- 8023d06: f040 80eb bne.w 8023ee0 <__gethex+0x4f8>
- 8023d0a: 4298 cmp r0, r3
- 8023d0c: f843 6c04 str.w r6, [r3, #-4]
- 8023d10: d8f4 bhi.n 8023cfc <__gethex+0x314>
- 8023d12: 9a04 ldr r2, [sp, #16]
- 8023d14: 6893 ldr r3, [r2, #8]
- 8023d16: 429d cmp r5, r3
- 8023d18: bfb8 it lt
- 8023d1a: 462b movlt r3, r5
- 8023d1c: f280 80f9 bge.w 8023f12 <__gethex+0x52a>
- 8023d20: 9904 ldr r1, [sp, #16]
- 8023d22: eb01 0283 add.w r2, r1, r3, lsl #2
- 8023d26: 3301 adds r3, #1
- 8023d28: 610b str r3, [r1, #16]
- 8023d2a: 2301 movs r3, #1
- 8023d2c: 6153 str r3, [r2, #20]
- 8023d2e: 2f02 cmp r7, #2
- 8023d30: f000 80d9 beq.w 8023ee6 <__gethex+0x4fe>
- 8023d34: 9904 ldr r1, [sp, #16]
- 8023d36: 690b ldr r3, [r1, #16]
- 8023d38: 429d cmp r5, r3
- 8023d3a: db0e blt.n 8023d5a <__gethex+0x372>
- 8023d3c: f014 041f ands.w r4, r4, #31
- 8023d40: f000 80ac beq.w 8023e9c <__gethex+0x4b4>
- 8023d44: 9b04 ldr r3, [sp, #16]
- 8023d46: eb03 0585 add.w r5, r3, r5, lsl #2
- 8023d4a: 6928 ldr r0, [r5, #16]
- 8023d4c: f000 fe30 bl 80249b0 <__hi0bits>
- 8023d50: f1c4 0320 rsb r3, r4, #32
- 8023d54: 4298 cmp r0, r3
- 8023d56: f280 80a1 bge.w 8023e9c <__gethex+0x4b4>
- 8023d5a: 9804 ldr r0, [sp, #16]
- 8023d5c: 2101 movs r1, #1
- 8023d5e: f7ff fdbf bl 80238e0 <rshift>
- 8023d62: 9a06 ldr r2, [sp, #24]
- 8023d64: 9805 ldr r0, [sp, #20]
- 8023d66: 6893 ldr r3, [r2, #8]
- 8023d68: 3001 adds r0, #1
- 8023d6a: 9005 str r0, [sp, #20]
- 8023d6c: 4298 cmp r0, r3
- 8023d6e: f340 8095 ble.w 8023e9c <__gethex+0x4b4>
- 8023d72: 9807 ldr r0, [sp, #28]
- 8023d74: 27a3 movs r7, #163 ; 0xa3
- 8023d76: 9904 ldr r1, [sp, #16]
- 8023d78: f000 fd6e bl 8024858 <_Bfree>
- 8023d7c: 9a14 ldr r2, [sp, #80] ; 0x50
- 8023d7e: 2300 movs r3, #0
- 8023d80: 6013 str r3, [r2, #0]
- 8023d82: e695 b.n 8023ab0 <__gethex+0xc8>
- 8023d84: 782b ldrb r3, [r5, #0]
- 8023d86: 462c mov r4, r5
- 8023d88: f8cd b014 str.w fp, [sp, #20]
- 8023d8c: f04f 0901 mov.w r9, #1
- 8023d90: e67e b.n 8023a90 <__gethex+0xa8>
- 8023d92: 2701 movs r7, #1
- 8023d94: e798 b.n 8023cc8 <__gethex+0x2e0>
- 8023d96: 9b15 ldr r3, [sp, #84] ; 0x54
- 8023d98: 2b00 cmp r3, #0
- 8023d9a: d1a7 bne.n 8023cec <__gethex+0x304>
- 8023d9c: f047 0710 orr.w r7, r7, #16
- 8023da0: 9b04 ldr r3, [sp, #16]
- 8023da2: 9814 ldr r0, [sp, #80] ; 0x50
- 8023da4: 6003 str r3, [r0, #0]
- 8023da6: 9b05 ldr r3, [sp, #20]
- 8023da8: 9809 ldr r0, [sp, #36] ; 0x24
- 8023daa: 6003 str r3, [r0, #0]
- 8023dac: e680 b.n 8023ab0 <__gethex+0xc8>
- 8023dae: f04f 0b01 mov.w fp, #1
- 8023db2: 78a3 ldrb r3, [r4, #2]
- 8023db4: 1ca0 adds r0, r4, #2
- 8023db6: e713 b.n 8023be0 <__gethex+0x1f8>
- 8023db8: f04f 0b00 mov.w fp, #0
- 8023dbc: e7f9 b.n 8023db2 <__gethex+0x3ca>
- 8023dbe: 1b06 subs r6, r0, r4
- 8023dc0: 9804 ldr r0, [sp, #16]
- 8023dc2: 4631 mov r1, r6
- 8023dc4: f001 f96e bl 80250a4 <__any_on>
- 8023dc8: 4605 mov r5, r0
- 8023dca: b1a8 cbz r0, 8023df8 <__gethex+0x410>
- 8023dcc: 1e73 subs r3, r6, #1
- 8023dce: 9804 ldr r0, [sp, #16]
- 8023dd0: 2501 movs r5, #1
- 8023dd2: f003 011f and.w r1, r3, #31
- 8023dd6: 115a asrs r2, r3, #5
- 8023dd8: fa05 f101 lsl.w r1, r5, r1
- 8023ddc: eb00 0282 add.w r2, r0, r2, lsl #2
- 8023de0: 6952 ldr r2, [r2, #20]
- 8023de2: 4211 tst r1, r2
- 8023de4: d008 beq.n 8023df8 <__gethex+0x410>
- 8023de6: 42ab cmp r3, r5
- 8023de8: dd05 ble.n 8023df6 <__gethex+0x40e>
- 8023dea: 9804 ldr r0, [sp, #16]
- 8023dec: 1eb1 subs r1, r6, #2
- 8023dee: f001 f959 bl 80250a4 <__any_on>
- 8023df2: 2503 movs r5, #3
- 8023df4: b900 cbnz r0, 8023df8 <__gethex+0x410>
- 8023df6: 2502 movs r5, #2
- 8023df8: 9804 ldr r0, [sp, #16]
- 8023dfa: 4631 mov r1, r6
- 8023dfc: f7ff fd70 bl 80238e0 <rshift>
- 8023e00: 9b05 ldr r3, [sp, #20]
- 8023e02: 199b adds r3, r3, r6
- 8023e04: 9305 str r3, [sp, #20]
- 8023e06: e6b8 b.n 8023b7a <__gethex+0x192>
- 8023e08: f8cd b014 str.w fp, [sp, #20]
- 8023e0c: e640 b.n 8023a90 <__gethex+0xa8>
- 8023e0e: 1a25 subs r5, r4, r0
- 8023e10: 9904 ldr r1, [sp, #16]
- 8023e12: 462a mov r2, r5
- 8023e14: 9807 ldr r0, [sp, #28]
- 8023e16: f000 ff11 bl 8024c3c <__lshift>
- 8023e1a: 9b05 ldr r3, [sp, #20]
- 8023e1c: 1b5b subs r3, r3, r5
- 8023e1e: 2500 movs r5, #0
- 8023e20: 9305 str r3, [sp, #20]
- 8023e22: 9004 str r0, [sp, #16]
- 8023e24: f100 0314 add.w r3, r0, #20
- 8023e28: 9308 str r3, [sp, #32]
- 8023e2a: e6a6 b.n 8023b7a <__gethex+0x192>
- 8023e2c: 2700 movs r7, #0
- 8023e2e: e605 b.n 8023a3c <__gethex+0x54>
- 8023e30: 9205 str r2, [sp, #20]
- 8023e32: f04f 0901 mov.w r9, #1
- 8023e36: e62b b.n 8023a90 <__gethex+0xa8>
- 8023e38: 462c mov r4, r5
- 8023e3a: 4681 mov r9, r0
- 8023e3c: 9903 ldr r1, [sp, #12]
- 8023e3e: eb04 0b01 add.w fp, r4, r1
- 8023e42: 5c63 ldrb r3, [r4, r1]
- 8023e44: 5cf2 ldrb r2, [r6, r3]
- 8023e46: 2a00 cmp r2, #0
- 8023e48: d07a beq.n 8023f40 <__gethex+0x558>
- 8023e4a: f10b 0201 add.w r2, fp, #1
- 8023e4e: 4614 mov r4, r2
- 8023e50: f812 3b01 ldrb.w r3, [r2], #1
- 8023e54: 5cf1 ldrb r1, [r6, r3]
- 8023e56: 2900 cmp r1, #0
- 8023e58: d1f9 bne.n 8023e4e <__gethex+0x466>
- 8023e5a: e614 b.n 8023a86 <__gethex+0x9e>
- 8023e5c: 2501 movs r5, #1
- 8023e5e: e71d b.n 8023c9c <__gethex+0x2b4>
- 8023e60: 4628 mov r0, r5
- 8023e62: 9902 ldr r1, [sp, #8]
- 8023e64: 9a03 ldr r2, [sp, #12]
- 8023e66: f7fe f885 bl 8021f74 <strncmp>
- 8023e6a: 2800 cmp r0, #0
- 8023e6c: d0e4 beq.n 8023e38 <__gethex+0x450>
- 8023e6e: 46a1 mov r9, r4
- 8023e70: 462c mov r4, r5
- 8023e72: 46cb mov fp, r9
- 8023e74: e602 b.n 8023a7c <__gethex+0x94>
- 8023e76: 4625 mov r5, r4
- 8023e78: 46a3 mov fp, r4
- 8023e7a: 2701 movs r7, #1
- 8023e7c: e5f0 b.n 8023a60 <__gethex+0x78>
- 8023e7e: 9815 ldr r0, [sp, #84] ; 0x54
- 8023e80: 2800 cmp r0, #0
- 8023e82: f47f ae93 bne.w 8023bac <__gethex+0x1c4>
- 8023e86: 9a09 ldr r2, [sp, #36] ; 0x24
- 8023e88: 2762 movs r7, #98 ; 0x62
- 8023e8a: 9804 ldr r0, [sp, #16]
- 8023e8c: 9908 ldr r1, [sp, #32]
- 8023e8e: 6013 str r3, [r2, #0]
- 8023e90: 2301 movs r3, #1
- 8023e92: 9a14 ldr r2, [sp, #80] ; 0x50
- 8023e94: 6103 str r3, [r0, #16]
- 8023e96: 600b str r3, [r1, #0]
- 8023e98: 6010 str r0, [r2, #0]
- 8023e9a: e609 b.n 8023ab0 <__gethex+0xc8>
- 8023e9c: 2721 movs r7, #33 ; 0x21
- 8023e9e: e77f b.n 8023da0 <__gethex+0x3b8>
- 8023ea0: f8dd b020 ldr.w fp, [sp, #32]
- 8023ea4: f04f 0800 mov.w r8, #0
- 8023ea8: e651 b.n 8023b4e <__gethex+0x166>
- 8023eaa: 9a15 ldr r2, [sp, #84] ; 0x54
- 8023eac: f1c2 0301 rsb r3, r2, #1
- 8023eb0: 2b00 cmp r3, #0
- 8023eb2: f43f af73 beq.w 8023d9c <__gethex+0x3b4>
- 8023eb6: e719 b.n 8023cec <__gethex+0x304>
- 8023eb8: 42a6 cmp r6, r4
- 8023eba: f47f ae77 bne.w 8023bac <__gethex+0x1c4>
- 8023ebe: 2c01 cmp r4, #1
- 8023ec0: dde1 ble.n 8023e86 <__gethex+0x49e>
- 8023ec2: 9804 ldr r0, [sp, #16]
- 8023ec4: 1e61 subs r1, r4, #1
- 8023ec6: f001 f8ed bl 80250a4 <__any_on>
- 8023eca: 2800 cmp r0, #0
- 8023ecc: f43f ae6e beq.w 8023bac <__gethex+0x1c4>
- 8023ed0: 9a06 ldr r2, [sp, #24]
- 8023ed2: 6853 ldr r3, [r2, #4]
- 8023ed4: e7d7 b.n 8023e86 <__gethex+0x49e>
- 8023ed6: 9915 ldr r1, [sp, #84] ; 0x54
- 8023ed8: 2900 cmp r1, #0
- 8023eda: f43f ae67 beq.w 8023bac <__gethex+0x1c4>
- 8023ede: e7d2 b.n 8023e86 <__gethex+0x49e>
- 8023ee0: 3201 adds r2, #1
- 8023ee2: 600a str r2, [r1, #0]
- 8023ee4: e723 b.n 8023d2e <__gethex+0x346>
- 8023ee6: 9a06 ldr r2, [sp, #24]
- 8023ee8: 2722 movs r7, #34 ; 0x22
- 8023eea: 6813 ldr r3, [r2, #0]
- 8023eec: 3b01 subs r3, #1
- 8023eee: 42a3 cmp r3, r4
- 8023ef0: f47f af56 bne.w 8023da0 <__gethex+0x3b8>
- 8023ef4: 1163 asrs r3, r4, #5
- 8023ef6: 9804 ldr r0, [sp, #16]
- 8023ef8: 2201 movs r2, #1
- 8023efa: f004 041f and.w r4, r4, #31
- 8023efe: eb00 0383 add.w r3, r0, r3, lsl #2
- 8023f02: fa02 f204 lsl.w r2, r2, r4
- 8023f06: 695b ldr r3, [r3, #20]
- 8023f08: 421a tst r2, r3
- 8023f0a: bf14 ite ne
- 8023f0c: 2721 movne r7, #33 ; 0x21
- 8023f0e: 2722 moveq r7, #34 ; 0x22
- 8023f10: e746 b.n 8023da0 <__gethex+0x3b8>
- 8023f12: 6851 ldr r1, [r2, #4]
- 8023f14: 9807 ldr r0, [sp, #28]
- 8023f16: 3101 adds r1, #1
- 8023f18: f000 fc68 bl 80247ec <_Balloc>
- 8023f1c: 4606 mov r6, r0
- 8023f1e: 9804 ldr r0, [sp, #16]
- 8023f20: f100 010c add.w r1, r0, #12
- 8023f24: 6903 ldr r3, [r0, #16]
- 8023f26: f106 000c add.w r0, r6, #12
- 8023f2a: 1c9a adds r2, r3, #2
- 8023f2c: 0092 lsls r2, r2, #2
- 8023f2e: f7fd fd2d bl 802198c <memcpy>
- 8023f32: 9904 ldr r1, [sp, #16]
- 8023f34: 9807 ldr r0, [sp, #28]
- 8023f36: 9604 str r6, [sp, #16]
- 8023f38: f000 fc8e bl 8024858 <_Bfree>
- 8023f3c: 6933 ldr r3, [r6, #16]
- 8023f3e: e6ef b.n 8023d20 <__gethex+0x338>
- 8023f40: 465c mov r4, fp
- 8023f42: e5a0 b.n 8023a86 <__gethex+0x9e>
- 08023f44 <__hexnan>:
- 8023f44: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8023f48: f643 184c movw r8, #14668 ; 0x394c
- 8023f4c: f2c2 0801 movt r8, #8193 ; 0x2001
- 8023f50: b085 sub sp, #20
- 8023f52: 460c mov r4, r1
- 8023f54: 4692 mov sl, r2
- 8023f56: f898 3030 ldrb.w r3, [r8, #48] ; 0x30
- 8023f5a: 9002 str r0, [sp, #8]
- 8023f5c: 2b00 cmp r3, #0
- 8023f5e: f000 80ad beq.w 80240bc <__hexnan+0x178>
- 8023f62: 6823 ldr r3, [r4, #0]
- 8023f64: 115a asrs r2, r3, #5
- 8023f66: f013 031f ands.w r3, r3, #31
- 8023f6a: 9303 str r3, [sp, #12]
- 8023f6c: eb0a 0282 add.w r2, sl, r2, lsl #2
- 8023f70: 9200 str r2, [sp, #0]
- 8023f72: d001 beq.n 8023f78 <__hexnan+0x34>
- 8023f74: 3204 adds r2, #4
- 8023f76: 9200 str r2, [sp, #0]
- 8023f78: 9a00 ldr r2, [sp, #0]
- 8023f7a: 2300 movs r3, #0
- 8023f7c: 4699 mov r9, r3
- 8023f7e: 9900 ldr r1, [sp, #0]
- 8023f80: 46cb mov fp, r9
- 8023f82: 464e mov r6, r9
- 8023f84: f842 3c04 str.w r3, [r2, #-4]
- 8023f88: 3904 subs r1, #4
- 8023f8a: 9b02 ldr r3, [sp, #8]
- 8023f8c: 9101 str r1, [sp, #4]
- 8023f8e: f8dd c004 ldr.w ip, [sp, #4]
- 8023f92: 6819 ldr r1, [r3, #0]
- 8023f94: 4664 mov r4, ip
- 8023f96: 784b ldrb r3, [r1, #1]
- 8023f98: 2b00 cmp r3, #0
- 8023f9a: d033 beq.n 8024004 <__hexnan+0xc0>
- 8023f9c: f818 2003 ldrb.w r2, [r8, r3]
- 8023fa0: 2a00 cmp r2, #0
- 8023fa2: d16f bne.n 8024084 <__hexnan+0x140>
- 8023fa4: 2b20 cmp r3, #32
- 8023fa6: f200 8083 bhi.w 80240b0 <__hexnan+0x16c>
- 8023faa: 455e cmp r6, fp
- 8023fac: dd26 ble.n 8023ffc <__hexnan+0xb8>
- 8023fae: f1b9 0f07 cmp.w r9, #7
- 8023fb2: bfcc ite gt
- 8023fb4: 2300 movgt r3, #0
- 8023fb6: 2301 movle r3, #1
- 8023fb8: 4564 cmp r4, ip
- 8023fba: bf28 it cs
- 8023fbc: 2300 movcs r3, #0
- 8023fbe: b193 cbz r3, 8023fe6 <__hexnan+0xa2>
- 8023fc0: f1c9 0908 rsb r9, r9, #8
- 8023fc4: 6822 ldr r2, [r4, #0]
- 8023fc6: 4623 mov r3, r4
- 8023fc8: ea4f 0989 mov.w r9, r9, lsl #2
- 8023fcc: f1c9 0720 rsb r7, r9, #32
- 8023fd0: 6858 ldr r0, [r3, #4]
- 8023fd2: fa00 f507 lsl.w r5, r0, r7
- 8023fd6: 4315 orrs r5, r2
- 8023fd8: fa20 f209 lsr.w r2, r0, r9
- 8023fdc: 601d str r5, [r3, #0]
- 8023fde: f843 2f04 str.w r2, [r3, #4]!
- 8023fe2: 459c cmp ip, r3
- 8023fe4: d8f4 bhi.n 8023fd0 <__hexnan+0x8c>
- 8023fe6: 4554 cmp r4, sl
- 8023fe8: bf98 it ls
- 8023fea: f04f 0908 movls.w r9, #8
- 8023fee: d905 bls.n 8023ffc <__hexnan+0xb8>
- 8023ff0: 2200 movs r2, #0
- 8023ff2: 3c04 subs r4, #4
- 8023ff4: 6022 str r2, [r4, #0]
- 8023ff6: 46b3 mov fp, r6
- 8023ff8: 46a4 mov ip, r4
- 8023ffa: 4691 mov r9, r2
- 8023ffc: 3101 adds r1, #1
- 8023ffe: 784b ldrb r3, [r1, #1]
- 8024000: 2b00 cmp r3, #0
- 8024002: d1cb bne.n 8023f9c <__hexnan+0x58>
- 8024004: 2e00 cmp r6, #0
- 8024006: d055 beq.n 80240b4 <__hexnan+0x170>
- 8024008: f1b9 0f07 cmp.w r9, #7
- 802400c: bfcc ite gt
- 802400e: 2300 movgt r3, #0
- 8024010: 2301 movle r3, #1
- 8024012: 4564 cmp r4, ip
- 8024014: bf28 it cs
- 8024016: 2300 movcs r3, #0
- 8024018: b193 cbz r3, 8024040 <__hexnan+0xfc>
- 802401a: f1c9 0908 rsb r9, r9, #8
- 802401e: 6822 ldr r2, [r4, #0]
- 8024020: 4623 mov r3, r4
- 8024022: ea4f 0989 mov.w r9, r9, lsl #2
- 8024026: f1c9 0520 rsb r5, r9, #32
- 802402a: 6859 ldr r1, [r3, #4]
- 802402c: fa01 f005 lsl.w r0, r1, r5
- 8024030: 4310 orrs r0, r2
- 8024032: fa21 f209 lsr.w r2, r1, r9
- 8024036: 6018 str r0, [r3, #0]
- 8024038: f843 2f04 str.w r2, [r3, #4]!
- 802403c: 4563 cmp r3, ip
- 802403e: d3f4 bcc.n 802402a <__hexnan+0xe6>
- 8024040: 45a2 cmp sl, r4
- 8024042: d23e bcs.n 80240c2 <__hexnan+0x17e>
- 8024044: 9801 ldr r0, [sp, #4]
- 8024046: 4652 mov r2, sl
- 8024048: f854 1b04 ldr.w r1, [r4], #4
- 802404c: 4613 mov r3, r2
- 802404e: 42a0 cmp r0, r4
- 8024050: f843 1b04 str.w r1, [r3], #4
- 8024054: 461a mov r2, r3
- 8024056: d2f7 bcs.n 8024048 <__hexnan+0x104>
- 8024058: 9901 ldr r1, [sp, #4]
- 802405a: 2200 movs r2, #0
- 802405c: f843 2b04 str.w r2, [r3], #4
- 8024060: 4299 cmp r1, r3
- 8024062: d2fb bcs.n 802405c <__hexnan+0x118>
- 8024064: 9900 ldr r1, [sp, #0]
- 8024066: f851 3c04 ldr.w r3, [r1, #-4]
- 802406a: b94b cbnz r3, 8024080 <__hexnan+0x13c>
- 802406c: 9b01 ldr r3, [sp, #4]
- 802406e: 459a cmp sl, r3
- 8024070: d102 bne.n 8024078 <__hexnan+0x134>
- 8024072: e038 b.n 80240e6 <__hexnan+0x1a2>
- 8024074: 459a cmp sl, r3
- 8024076: d037 beq.n 80240e8 <__hexnan+0x1a4>
- 8024078: f853 2d04 ldr.w r2, [r3, #-4]!
- 802407c: 2a00 cmp r2, #0
- 802407e: d0f9 beq.n 8024074 <__hexnan+0x130>
- 8024080: 2005 movs r0, #5
- 8024082: e018 b.n 80240b6 <__hexnan+0x172>
- 8024084: f109 0901 add.w r9, r9, #1
- 8024088: 3601 adds r6, #1
- 802408a: f1b9 0f08 cmp.w r9, #8
- 802408e: dc07 bgt.n 80240a0 <__hexnan+0x15c>
- 8024090: 6823 ldr r3, [r4, #0]
- 8024092: 011b lsls r3, r3, #4
- 8024094: f002 020f and.w r2, r2, #15
- 8024098: 3101 adds r1, #1
- 802409a: 431a orrs r2, r3
- 802409c: 6022 str r2, [r4, #0]
- 802409e: e7ae b.n 8023ffe <__hexnan+0xba>
- 80240a0: 4554 cmp r4, sl
- 80240a2: d9ab bls.n 8023ffc <__hexnan+0xb8>
- 80240a4: 2300 movs r3, #0
- 80240a6: 3c04 subs r4, #4
- 80240a8: 6023 str r3, [r4, #0]
- 80240aa: f04f 0901 mov.w r9, #1
- 80240ae: e7f1 b.n 8024094 <__hexnan+0x150>
- 80240b0: 2b29 cmp r3, #41 ; 0x29
- 80240b2: d01d beq.n 80240f0 <__hexnan+0x1ac>
- 80240b4: 2004 movs r0, #4
- 80240b6: b005 add sp, #20
- 80240b8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 80240bc: f7ff fc68 bl 8023990 <__hexdig_init>
- 80240c0: e74f b.n 8023f62 <__hexnan+0x1e>
- 80240c2: 9a03 ldr r2, [sp, #12]
- 80240c4: 2a00 cmp r2, #0
- 80240c6: d0cd beq.n 8024064 <__hexnan+0x120>
- 80240c8: 9a00 ldr r2, [sp, #0]
- 80240ca: 9903 ldr r1, [sp, #12]
- 80240cc: f852 3c04 ldr.w r3, [r2, #-4]
- 80240d0: f1c1 0220 rsb r2, r1, #32
- 80240d4: f04f 31ff mov.w r1, #4294967295
- 80240d8: fa21 f202 lsr.w r2, r1, r2
- 80240dc: 4013 ands r3, r2
- 80240de: 9a00 ldr r2, [sp, #0]
- 80240e0: f842 3c04 str.w r3, [r2, #-4]
- 80240e4: e7c1 b.n 802406a <__hexnan+0x126>
- 80240e6: 4653 mov r3, sl
- 80240e8: 2201 movs r2, #1
- 80240ea: 2005 movs r0, #5
- 80240ec: 601a str r2, [r3, #0]
- 80240ee: e7e2 b.n 80240b6 <__hexnan+0x172>
- 80240f0: 9b02 ldr r3, [sp, #8]
- 80240f2: 3102 adds r1, #2
- 80240f4: 6019 str r1, [r3, #0]
- 80240f6: 2e00 cmp r6, #0
- 80240f8: d186 bne.n 8024008 <__hexnan+0xc4>
- 80240fa: e7db b.n 80240b4 <__hexnan+0x170>
- 080240fc <_setlocale_r>:
- 80240fc: b510 push {r4, lr}
- 80240fe: 4614 mov r4, r2
- 8024100: b13a cbz r2, 8024112 <_setlocale_r+0x16>
- 8024102: f645 31cc movw r1, #23500 ; 0x5bcc
- 8024106: 4610 mov r0, r2
- 8024108: f6c0 0104 movt r1, #2052 ; 0x804
- 802410c: f7fd fd84 bl 8021c18 <strcmp>
- 8024110: b920 cbnz r0, 802411c <_setlocale_r+0x20>
- 8024112: f645 30c8 movw r0, #23496 ; 0x5bc8
- 8024116: f6c0 0004 movt r0, #2052 ; 0x804
- 802411a: bd10 pop {r4, pc}
- 802411c: f645 31c8 movw r1, #23496 ; 0x5bc8
- 8024120: 4620 mov r0, r4
- 8024122: f6c0 0104 movt r1, #2052 ; 0x804
- 8024126: f7fd fd77 bl 8021c18 <strcmp>
- 802412a: 2800 cmp r0, #0
- 802412c: d0f1 beq.n 8024112 <_setlocale_r+0x16>
- 802412e: f645 31d4 movw r1, #23508 ; 0x5bd4
- 8024132: 4620 mov r0, r4
- 8024134: f6c0 0104 movt r1, #2052 ; 0x804
- 8024138: f7fd fd6e bl 8021c18 <strcmp>
- 802413c: f645 33c8 movw r3, #23496 ; 0x5bc8
- 8024140: f6c0 0304 movt r3, #2052 ; 0x804
- 8024144: 2800 cmp r0, #0
- 8024146: bf0c ite eq
- 8024148: 4618 moveq r0, r3
- 802414a: 2000 movne r0, #0
- 802414c: bd10 pop {r4, pc}
- 802414e: bf00 nop
- 08024150 <__locale_charset>:
- 8024150: f240 1020 movw r0, #288 ; 0x120
- 8024154: f2c2 0000 movt r0, #8192 ; 0x2000
- 8024158: 4770 bx lr
- 802415a: bf00 nop
- 0802415c <__locale_mb_cur_max>:
- 802415c: f240 1320 movw r3, #288 ; 0x120
- 8024160: f2c2 0300 movt r3, #8192 ; 0x2000
- 8024164: 6a18 ldr r0, [r3, #32]
- 8024166: 4770 bx lr
- 08024168 <__locale_msgcharset>:
- 8024168: 4800 ldr r0, [pc, #0] ; (802416c <__locale_msgcharset+0x4>)
- 802416a: 4770 bx lr
- 802416c: 20000144 .word 0x20000144
- 08024170 <__locale_cjk_lang>:
- 8024170: 2000 movs r0, #0
- 8024172: 4770 bx lr
- 08024174 <_localeconv_r>:
- 8024174: 4800 ldr r0, [pc, #0] ; (8024178 <_localeconv_r+0x4>)
- 8024176: 4770 bx lr
- 8024178: 20000164 .word 0x20000164
- 0802417c <setlocale>:
- 802417c: f240 032c movw r3, #44 ; 0x2c
- 8024180: 460a mov r2, r1
- 8024182: f2c2 0300 movt r3, #8192 ; 0x2000
- 8024186: 4601 mov r1, r0
- 8024188: 6818 ldr r0, [r3, #0]
- 802418a: f7ff bfb7 b.w 80240fc <_setlocale_r>
- 802418e: bf00 nop
- 08024190 <localeconv>:
- 8024190: 4800 ldr r0, [pc, #0] ; (8024194 <localeconv+0x4>)
- 8024192: 4770 bx lr
- 8024194: 20000164 .word 0x20000164
- 08024198 <malloc>:
- 8024198: f240 032c movw r3, #44 ; 0x2c
- 802419c: 4601 mov r1, r0
- 802419e: f2c2 0300 movt r3, #8192 ; 0x2000
- 80241a2: 6818 ldr r0, [r3, #0]
- 80241a4: f000 b808 b.w 80241b8 <_malloc_r>
- 080241a8 <free>:
- 80241a8: f240 032c movw r3, #44 ; 0x2c
- 80241ac: 4601 mov r1, r0
- 80241ae: f2c2 0300 movt r3, #8192 ; 0x2000
- 80241b2: 6818 ldr r0, [r3, #0]
- 80241b4: f7ff baca b.w 802374c <_free_r>
- 080241b8 <_malloc_r>:
- 80241b8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 80241bc: f101 040b add.w r4, r1, #11
- 80241c0: 2c16 cmp r4, #22
- 80241c2: b083 sub sp, #12
- 80241c4: 4607 mov r7, r0
- 80241c6: d930 bls.n 802422a <_malloc_r+0x72>
- 80241c8: f024 0407 bic.w r4, r4, #7
- 80241cc: 0fe3 lsrs r3, r4, #31
- 80241ce: 428c cmp r4, r1
- 80241d0: bf2c ite cs
- 80241d2: 4619 movcs r1, r3
- 80241d4: f043 0101 orrcc.w r1, r3, #1
- 80241d8: 2900 cmp r1, #0
- 80241da: d12f bne.n 802423c <_malloc_r+0x84>
- 80241dc: 4638 mov r0, r7
- 80241de: f000 fb01 bl 80247e4 <__malloc_lock>
- 80241e2: f5b4 7ffc cmp.w r4, #504 ; 0x1f8
- 80241e6: d22e bcs.n 8024246 <_malloc_r+0x8e>
- 80241e8: ea4f 0cd4 mov.w ip, r4, lsr #3
- 80241ec: f240 169c movw r6, #412 ; 0x19c
- 80241f0: f2c2 0600 movt r6, #8192 ; 0x2000
- 80241f4: eb06 02cc add.w r2, r6, ip, lsl #3
- 80241f8: 68d3 ldr r3, [r2, #12]
- 80241fa: 4293 cmp r3, r2
- 80241fc: f000 8211 beq.w 8024622 <_malloc_r+0x46a>
- 8024200: 6859 ldr r1, [r3, #4]
- 8024202: f103 0808 add.w r8, r3, #8
- 8024206: 68da ldr r2, [r3, #12]
- 8024208: 4638 mov r0, r7
- 802420a: f021 0403 bic.w r4, r1, #3
- 802420e: 6899 ldr r1, [r3, #8]
- 8024210: 191b adds r3, r3, r4
- 8024212: 685c ldr r4, [r3, #4]
- 8024214: 60ca str r2, [r1, #12]
- 8024216: f044 0401 orr.w r4, r4, #1
- 802421a: 6091 str r1, [r2, #8]
- 802421c: 605c str r4, [r3, #4]
- 802421e: f000 fae3 bl 80247e8 <__malloc_unlock>
- 8024222: 4640 mov r0, r8
- 8024224: b003 add sp, #12
- 8024226: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 802422a: 2300 movs r3, #0
- 802422c: 2410 movs r4, #16
- 802422e: 428c cmp r4, r1
- 8024230: bf2c ite cs
- 8024232: 4619 movcs r1, r3
- 8024234: f043 0101 orrcc.w r1, r3, #1
- 8024238: 2900 cmp r1, #0
- 802423a: d0cf beq.n 80241dc <_malloc_r+0x24>
- 802423c: 230c movs r3, #12
- 802423e: f04f 0800 mov.w r8, #0
- 8024242: 603b str r3, [r7, #0]
- 8024244: e7ed b.n 8024222 <_malloc_r+0x6a>
- 8024246: ea5f 2c54 movs.w ip, r4, lsr #9
- 802424a: bf04 itt eq
- 802424c: ea4f 0cd4 moveq.w ip, r4, lsr #3
- 8024250: ea4f 054c moveq.w r5, ip, lsl #1
- 8024254: f040 808f bne.w 8024376 <_malloc_r+0x1be>
- 8024258: f240 169c movw r6, #412 ; 0x19c
- 802425c: f2c2 0600 movt r6, #8192 ; 0x2000
- 8024260: eb06 0585 add.w r5, r6, r5, lsl #2
- 8024264: 68eb ldr r3, [r5, #12]
- 8024266: 429d cmp r5, r3
- 8024268: d106 bne.n 8024278 <_malloc_r+0xc0>
- 802426a: e00d b.n 8024288 <_malloc_r+0xd0>
- 802426c: 2a00 cmp r2, #0
- 802426e: f280 8155 bge.w 802451c <_malloc_r+0x364>
- 8024272: 68db ldr r3, [r3, #12]
- 8024274: 429d cmp r5, r3
- 8024276: d007 beq.n 8024288 <_malloc_r+0xd0>
- 8024278: 6859 ldr r1, [r3, #4]
- 802427a: f021 0103 bic.w r1, r1, #3
- 802427e: 1b0a subs r2, r1, r4
- 8024280: 2a0f cmp r2, #15
- 8024282: ddf3 ble.n 802426c <_malloc_r+0xb4>
- 8024284: f10c 3cff add.w ip, ip, #4294967295
- 8024288: f10c 0c01 add.w ip, ip, #1
- 802428c: f240 129c movw r2, #412 ; 0x19c
- 8024290: 6933 ldr r3, [r6, #16]
- 8024292: f2c2 0200 movt r2, #8192 ; 0x2000
- 8024296: f102 0e08 add.w lr, r2, #8
- 802429a: 4573 cmp r3, lr
- 802429c: bf08 it eq
- 802429e: f8d2 9004 ldreq.w r9, [r2, #4]
- 80242a2: d022 beq.n 80242ea <_malloc_r+0x132>
- 80242a4: 6858 ldr r0, [r3, #4]
- 80242a6: f020 0003 bic.w r0, r0, #3
- 80242aa: 1b01 subs r1, r0, r4
- 80242ac: 290f cmp r1, #15
- 80242ae: f300 8184 bgt.w 80245ba <_malloc_r+0x402>
- 80242b2: 2900 cmp r1, #0
- 80242b4: f8c2 e014 str.w lr, [r2, #20]
- 80242b8: f8c2 e010 str.w lr, [r2, #16]
- 80242bc: da66 bge.n 802438c <_malloc_r+0x1d4>
- 80242be: f5b0 7f00 cmp.w r0, #512 ; 0x200
- 80242c2: f080 814e bcs.w 8024562 <_malloc_r+0x3aa>
- 80242c6: 08c1 lsrs r1, r0, #3
- 80242c8: f04f 0801 mov.w r8, #1
- 80242cc: eb02 00c1 add.w r0, r2, r1, lsl #3
- 80242d0: 1089 asrs r1, r1, #2
- 80242d2: fa08 f801 lsl.w r8, r8, r1
- 80242d6: 6851 ldr r1, [r2, #4]
- 80242d8: 6885 ldr r5, [r0, #8]
- 80242da: 60d8 str r0, [r3, #12]
- 80242dc: ea48 0901 orr.w r9, r8, r1
- 80242e0: f8c2 9004 str.w r9, [r2, #4]
- 80242e4: 609d str r5, [r3, #8]
- 80242e6: 60eb str r3, [r5, #12]
- 80242e8: 6083 str r3, [r0, #8]
- 80242ea: 2201 movs r2, #1
- 80242ec: ea4f 03ac mov.w r3, ip, asr #2
- 80242f0: fa02 f303 lsl.w r3, r2, r3
- 80242f4: 454b cmp r3, r9
- 80242f6: d854 bhi.n 80243a2 <_malloc_r+0x1ea>
- 80242f8: ea19 0f03 tst.w r9, r3
- 80242fc: d10d bne.n 802431a <_malloc_r+0x162>
- 80242fe: 4093 lsls r3, r2
- 8024300: f02c 0c03 bic.w ip, ip, #3
- 8024304: ea19 0f03 tst.w r9, r3
- 8024308: f10c 0c04 add.w ip, ip, #4
- 802430c: d105 bne.n 802431a <_malloc_r+0x162>
- 802430e: 005b lsls r3, r3, #1
- 8024310: f10c 0c04 add.w ip, ip, #4
- 8024314: ea19 0f03 tst.w r9, r3
- 8024318: d0f9 beq.n 802430e <_malloc_r+0x156>
- 802431a: eb06 09cc add.w r9, r6, ip, lsl #3
- 802431e: 46e0 mov r8, ip
- 8024320: 4648 mov r0, r9
- 8024322: 68c2 ldr r2, [r0, #12]
- 8024324: 4290 cmp r0, r2
- 8024326: d107 bne.n 8024338 <_malloc_r+0x180>
- 8024328: e15b b.n 80245e2 <_malloc_r+0x42a>
- 802432a: 2900 cmp r1, #0
- 802432c: f280 8183 bge.w 8024636 <_malloc_r+0x47e>
- 8024330: 68d2 ldr r2, [r2, #12]
- 8024332: 4290 cmp r0, r2
- 8024334: f000 8155 beq.w 80245e2 <_malloc_r+0x42a>
- 8024338: 6855 ldr r5, [r2, #4]
- 802433a: f025 0503 bic.w r5, r5, #3
- 802433e: 1b29 subs r1, r5, r4
- 8024340: 290f cmp r1, #15
- 8024342: ddf2 ble.n 802432a <_malloc_r+0x172>
- 8024344: 4690 mov r8, r2
- 8024346: 1913 adds r3, r2, r4
- 8024348: 68d5 ldr r5, [r2, #12]
- 802434a: f044 0001 orr.w r0, r4, #1
- 802434e: f858 4f08 ldr.w r4, [r8, #8]!
- 8024352: f041 0c01 orr.w ip, r1, #1
- 8024356: 6050 str r0, [r2, #4]
- 8024358: 4638 mov r0, r7
- 802435a: f8c3 c004 str.w ip, [r3, #4]
- 802435e: 60e5 str r5, [r4, #12]
- 8024360: 60ac str r4, [r5, #8]
- 8024362: 6173 str r3, [r6, #20]
- 8024364: 6133 str r3, [r6, #16]
- 8024366: f8c3 e00c str.w lr, [r3, #12]
- 802436a: f8c3 e008 str.w lr, [r3, #8]
- 802436e: 5059 str r1, [r3, r1]
- 8024370: f000 fa3a bl 80247e8 <__malloc_unlock>
- 8024374: e755 b.n 8024222 <_malloc_r+0x6a>
- 8024376: f1bc 0f04 cmp.w ip, #4
- 802437a: f200 80de bhi.w 802453a <_malloc_r+0x382>
- 802437e: ea4f 1c94 mov.w ip, r4, lsr #6
- 8024382: f10c 0c38 add.w ip, ip, #56 ; 0x38
- 8024386: ea4f 054c mov.w r5, ip, lsl #1
- 802438a: e765 b.n 8024258 <_malloc_r+0xa0>
- 802438c: 181a adds r2, r3, r0
- 802438e: f103 0808 add.w r8, r3, #8
- 8024392: 4638 mov r0, r7
- 8024394: 6853 ldr r3, [r2, #4]
- 8024396: f043 0301 orr.w r3, r3, #1
- 802439a: 6053 str r3, [r2, #4]
- 802439c: f000 fa24 bl 80247e8 <__malloc_unlock>
- 80243a0: e73f b.n 8024222 <_malloc_r+0x6a>
- 80243a2: 68b5 ldr r5, [r6, #8]
- 80243a4: 686b ldr r3, [r5, #4]
- 80243a6: f023 0a03 bic.w sl, r3, #3
- 80243aa: 4554 cmp r4, sl
- 80243ac: d804 bhi.n 80243b8 <_malloc_r+0x200>
- 80243ae: ebc4 030a rsb r3, r4, sl
- 80243b2: 2b0f cmp r3, #15
- 80243b4: f300 80a4 bgt.w 8024500 <_malloc_r+0x348>
- 80243b8: f640 29d0 movw r9, #2768 ; 0xad0
- 80243bc: f8d6 1408 ldr.w r1, [r6, #1032] ; 0x408
- 80243c0: f2c2 0900 movt r9, #8192 ; 0x2000
- 80243c4: eb05 020a add.w r2, r5, sl
- 80243c8: 3101 adds r1, #1
- 80243ca: f8d9 3000 ldr.w r3, [r9]
- 80243ce: 4423 add r3, r4
- 80243d0: bf08 it eq
- 80243d2: f103 0b10 addeq.w fp, r3, #16
- 80243d6: d006 beq.n 80243e6 <_malloc_r+0x22e>
- 80243d8: f503 5380 add.w r3, r3, #4096 ; 0x1000
- 80243dc: 330f adds r3, #15
- 80243de: f423 637f bic.w r3, r3, #4080 ; 0xff0
- 80243e2: f023 0b0f bic.w fp, r3, #15
- 80243e6: 4638 mov r0, r7
- 80243e8: 4659 mov r1, fp
- 80243ea: 9201 str r2, [sp, #4]
- 80243ec: f000 fe86 bl 80250fc <_sbrk_r>
- 80243f0: 9a01 ldr r2, [sp, #4]
- 80243f2: 1c41 adds r1, r0, #1
- 80243f4: 4680 mov r8, r0
- 80243f6: f000 8168 beq.w 80246ca <_malloc_r+0x512>
- 80243fa: 4282 cmp r2, r0
- 80243fc: f200 8131 bhi.w 8024662 <_malloc_r+0x4aa>
- 8024400: f8d9 3004 ldr.w r3, [r9, #4]
- 8024404: 4542 cmp r2, r8
- 8024406: 445b add r3, fp
- 8024408: f8c9 3004 str.w r3, [r9, #4]
- 802440c: f000 8166 beq.w 80246dc <_malloc_r+0x524>
- 8024410: f8d6 1408 ldr.w r1, [r6, #1032] ; 0x408
- 8024414: f240 109c movw r0, #412 ; 0x19c
- 8024418: f2c2 0000 movt r0, #8192 ; 0x2000
- 802441c: 3101 adds r1, #1
- 802441e: bf17 itett ne
- 8024420: ebc2 0208 rsbne r2, r2, r8
- 8024424: f8c0 8408 streq.w r8, [r0, #1032] ; 0x408
- 8024428: 189b addne r3, r3, r2
- 802442a: f8c9 3004 strne.w r3, [r9, #4]
- 802442e: f018 0307 ands.w r3, r8, #7
- 8024432: 4638 mov r0, r7
- 8024434: bf1f itttt ne
- 8024436: f1c3 0208 rsbne r2, r3, #8
- 802443a: f5c3 5380 rsbne r3, r3, #4096 ; 0x1000
- 802443e: 4490 addne r8, r2
- 8024440: f103 0208 addne.w r2, r3, #8
- 8024444: eb08 030b add.w r3, r8, fp
- 8024448: bf08 it eq
- 802444a: f44f 5280 moveq.w r2, #4096 ; 0x1000
- 802444e: 051b lsls r3, r3, #20
- 8024450: 0d1b lsrs r3, r3, #20
- 8024452: ebc3 0b02 rsb fp, r3, r2
- 8024456: 4659 mov r1, fp
- 8024458: f000 fe50 bl 80250fc <_sbrk_r>
- 802445c: 1c43 adds r3, r0, #1
- 802445e: f000 8149 beq.w 80246f4 <_malloc_r+0x53c>
- 8024462: ebc8 0100 rsb r1, r8, r0
- 8024466: 4459 add r1, fp
- 8024468: f041 0101 orr.w r1, r1, #1
- 802446c: f8d9 3004 ldr.w r3, [r9, #4]
- 8024470: 42b5 cmp r5, r6
- 8024472: f640 22d0 movw r2, #2768 ; 0xad0
- 8024476: f8c6 8008 str.w r8, [r6, #8]
- 802447a: 445b add r3, fp
- 802447c: f2c2 0200 movt r2, #8192 ; 0x2000
- 8024480: f8c8 1004 str.w r1, [r8, #4]
- 8024484: f8c9 3004 str.w r3, [r9, #4]
- 8024488: d018 beq.n 80244bc <_malloc_r+0x304>
- 802448a: f1ba 0f0f cmp.w sl, #15
- 802448e: f240 810b bls.w 80246a8 <_malloc_r+0x4f0>
- 8024492: f1aa 000c sub.w r0, sl, #12
- 8024496: 6869 ldr r1, [r5, #4]
- 8024498: f020 0007 bic.w r0, r0, #7
- 802449c: f04f 0c05 mov.w ip, #5
- 80244a0: eb05 0e00 add.w lr, r5, r0
- 80244a4: 280f cmp r0, #15
- 80244a6: f001 0101 and.w r1, r1, #1
- 80244aa: ea40 0101 orr.w r1, r0, r1
- 80244ae: 6069 str r1, [r5, #4]
- 80244b0: f8ce c004 str.w ip, [lr, #4]
- 80244b4: f8ce c008 str.w ip, [lr, #8]
- 80244b8: f200 8120 bhi.w 80246fc <_malloc_r+0x544>
- 80244bc: f640 22d0 movw r2, #2768 ; 0xad0
- 80244c0: f8d9 102c ldr.w r1, [r9, #44] ; 0x2c
- 80244c4: f2c2 0200 movt r2, #8192 ; 0x2000
- 80244c8: 68b5 ldr r5, [r6, #8]
- 80244ca: 428b cmp r3, r1
- 80244cc: f8d9 1030 ldr.w r1, [r9, #48] ; 0x30
- 80244d0: bf88 it hi
- 80244d2: 62d3 strhi r3, [r2, #44] ; 0x2c
- 80244d4: f640 22d0 movw r2, #2768 ; 0xad0
- 80244d8: f2c2 0200 movt r2, #8192 ; 0x2000
- 80244dc: 428b cmp r3, r1
- 80244de: bf88 it hi
- 80244e0: 6313 strhi r3, [r2, #48] ; 0x30
- 80244e2: 686a ldr r2, [r5, #4]
- 80244e4: f022 0203 bic.w r2, r2, #3
- 80244e8: 4294 cmp r4, r2
- 80244ea: ebc4 0302 rsb r3, r4, r2
- 80244ee: d801 bhi.n 80244f4 <_malloc_r+0x33c>
- 80244f0: 2b0f cmp r3, #15
- 80244f2: dc05 bgt.n 8024500 <_malloc_r+0x348>
- 80244f4: 4638 mov r0, r7
- 80244f6: f04f 0800 mov.w r8, #0
- 80244fa: f000 f975 bl 80247e8 <__malloc_unlock>
- 80244fe: e690 b.n 8024222 <_malloc_r+0x6a>
- 8024500: 192a adds r2, r5, r4
- 8024502: f043 0301 orr.w r3, r3, #1
- 8024506: f044 0401 orr.w r4, r4, #1
- 802450a: 4638 mov r0, r7
- 802450c: 606c str r4, [r5, #4]
- 802450e: f105 0808 add.w r8, r5, #8
- 8024512: 6053 str r3, [r2, #4]
- 8024514: 60b2 str r2, [r6, #8]
- 8024516: f000 f967 bl 80247e8 <__malloc_unlock>
- 802451a: e682 b.n 8024222 <_malloc_r+0x6a>
- 802451c: 1859 adds r1, r3, r1
- 802451e: 68da ldr r2, [r3, #12]
- 8024520: 689c ldr r4, [r3, #8]
- 8024522: 4638 mov r0, r7
- 8024524: 684d ldr r5, [r1, #4]
- 8024526: f103 0808 add.w r8, r3, #8
- 802452a: f045 0501 orr.w r5, r5, #1
- 802452e: 60e2 str r2, [r4, #12]
- 8024530: 6094 str r4, [r2, #8]
- 8024532: 604d str r5, [r1, #4]
- 8024534: f000 f958 bl 80247e8 <__malloc_unlock>
- 8024538: e673 b.n 8024222 <_malloc_r+0x6a>
- 802453a: f1bc 0f14 cmp.w ip, #20
- 802453e: bf9c itt ls
- 8024540: f10c 0c5b addls.w ip, ip, #91 ; 0x5b
- 8024544: ea4f 054c movls.w r5, ip, lsl #1
- 8024548: f67f ae86 bls.w 8024258 <_malloc_r+0xa0>
- 802454c: f1bc 0f54 cmp.w ip, #84 ; 0x54
- 8024550: f200 8093 bhi.w 802467a <_malloc_r+0x4c2>
- 8024554: ea4f 3c14 mov.w ip, r4, lsr #12
- 8024558: f10c 0c6e add.w ip, ip, #110 ; 0x6e
- 802455c: ea4f 054c mov.w r5, ip, lsl #1
- 8024560: e67a b.n 8024258 <_malloc_r+0xa0>
- 8024562: 0a42 lsrs r2, r0, #9
- 8024564: 2a04 cmp r2, #4
- 8024566: d975 bls.n 8024654 <_malloc_r+0x49c>
- 8024568: 2a14 cmp r2, #20
- 802456a: bf9c itt ls
- 802456c: f102 095b addls.w r9, r2, #91 ; 0x5b
- 8024570: ea4f 0549 movls.w r5, r9, lsl #1
- 8024574: d908 bls.n 8024588 <_malloc_r+0x3d0>
- 8024576: 2a54 cmp r2, #84 ; 0x54
- 8024578: f200 80c9 bhi.w 802470e <_malloc_r+0x556>
- 802457c: ea4f 3910 mov.w r9, r0, lsr #12
- 8024580: f109 096e add.w r9, r9, #110 ; 0x6e
- 8024584: ea4f 0549 mov.w r5, r9, lsl #1
- 8024588: eb06 0585 add.w r5, r6, r5, lsl #2
- 802458c: f240 189c movw r8, #412 ; 0x19c
- 8024590: f2c2 0800 movt r8, #8192 ; 0x2000
- 8024594: 68aa ldr r2, [r5, #8]
- 8024596: 42aa cmp r2, r5
- 8024598: d079 beq.n 802468e <_malloc_r+0x4d6>
- 802459a: 6851 ldr r1, [r2, #4]
- 802459c: f021 0103 bic.w r1, r1, #3
- 80245a0: 4288 cmp r0, r1
- 80245a2: d202 bcs.n 80245aa <_malloc_r+0x3f2>
- 80245a4: 6892 ldr r2, [r2, #8]
- 80245a6: 4295 cmp r5, r2
- 80245a8: d1f7 bne.n 802459a <_malloc_r+0x3e2>
- 80245aa: 68d0 ldr r0, [r2, #12]
- 80245ac: f8d6 9004 ldr.w r9, [r6, #4]
- 80245b0: 60d8 str r0, [r3, #12]
- 80245b2: 609a str r2, [r3, #8]
- 80245b4: 60d3 str r3, [r2, #12]
- 80245b6: 6083 str r3, [r0, #8]
- 80245b8: e697 b.n 80242ea <_malloc_r+0x132>
- 80245ba: 191d adds r5, r3, r4
- 80245bc: f041 0601 orr.w r6, r1, #1
- 80245c0: 6155 str r5, [r2, #20]
- 80245c2: f044 0401 orr.w r4, r4, #1
- 80245c6: 6115 str r5, [r2, #16]
- 80245c8: 4638 mov r0, r7
- 80245ca: 605c str r4, [r3, #4]
- 80245cc: f103 0808 add.w r8, r3, #8
- 80245d0: f8c5 e00c str.w lr, [r5, #12]
- 80245d4: f8c5 e008 str.w lr, [r5, #8]
- 80245d8: 606e str r6, [r5, #4]
- 80245da: 5069 str r1, [r5, r1]
- 80245dc: f000 f904 bl 80247e8 <__malloc_unlock>
- 80245e0: e61f b.n 8024222 <_malloc_r+0x6a>
- 80245e2: f108 0801 add.w r8, r8, #1
- 80245e6: 3008 adds r0, #8
- 80245e8: f018 0f03 tst.w r8, #3
- 80245ec: f47f ae99 bne.w 8024322 <_malloc_r+0x16a>
- 80245f0: 464a mov r2, r9
- 80245f2: f01c 0f03 tst.w ip, #3
- 80245f6: f1a2 0108 sub.w r1, r2, #8
- 80245fa: f10c 3cff add.w ip, ip, #4294967295
- 80245fe: f000 809e beq.w 802473e <_malloc_r+0x586>
- 8024602: 6812 ldr r2, [r2, #0]
- 8024604: 428a cmp r2, r1
- 8024606: d0f4 beq.n 80245f2 <_malloc_r+0x43a>
- 8024608: 6872 ldr r2, [r6, #4]
- 802460a: 005b lsls r3, r3, #1
- 802460c: 4293 cmp r3, r2
- 802460e: f63f aec8 bhi.w 80243a2 <_malloc_r+0x1ea>
- 8024612: 2b00 cmp r3, #0
- 8024614: f43f aec5 beq.w 80243a2 <_malloc_r+0x1ea>
- 8024618: 421a tst r2, r3
- 802461a: f000 8095 beq.w 8024748 <_malloc_r+0x590>
- 802461e: 46c4 mov ip, r8
- 8024620: e67b b.n 802431a <_malloc_r+0x162>
- 8024622: f103 0208 add.w r2, r3, #8
- 8024626: 695b ldr r3, [r3, #20]
- 8024628: 429a cmp r2, r3
- 802462a: bf08 it eq
- 802462c: f10c 0c02 addeq.w ip, ip, #2
- 8024630: f43f ae2c beq.w 802428c <_malloc_r+0xd4>
- 8024634: e5e4 b.n 8024200 <_malloc_r+0x48>
- 8024636: 4690 mov r8, r2
- 8024638: 1955 adds r5, r2, r5
- 802463a: 68d3 ldr r3, [r2, #12]
- 802463c: 4638 mov r0, r7
- 802463e: f858 2f08 ldr.w r2, [r8, #8]!
- 8024642: 6869 ldr r1, [r5, #4]
- 8024644: 60d3 str r3, [r2, #12]
- 8024646: f041 0101 orr.w r1, r1, #1
- 802464a: 609a str r2, [r3, #8]
- 802464c: 6069 str r1, [r5, #4]
- 802464e: f000 f8cb bl 80247e8 <__malloc_unlock>
- 8024652: e5e6 b.n 8024222 <_malloc_r+0x6a>
- 8024654: ea4f 1990 mov.w r9, r0, lsr #6
- 8024658: f109 0938 add.w r9, r9, #56 ; 0x38
- 802465c: ea4f 0549 mov.w r5, r9, lsl #1
- 8024660: e792 b.n 8024588 <_malloc_r+0x3d0>
- 8024662: 42b5 cmp r5, r6
- 8024664: f240 139c movw r3, #412 ; 0x19c
- 8024668: f2c2 0300 movt r3, #8192 ; 0x2000
- 802466c: f43f aec8 beq.w 8024400 <_malloc_r+0x248>
- 8024670: 689d ldr r5, [r3, #8]
- 8024672: 686a ldr r2, [r5, #4]
- 8024674: f022 0203 bic.w r2, r2, #3
- 8024678: e736 b.n 80244e8 <_malloc_r+0x330>
- 802467a: f5bc 7faa cmp.w ip, #340 ; 0x154
- 802467e: d819 bhi.n 80246b4 <_malloc_r+0x4fc>
- 8024680: ea4f 3cd4 mov.w ip, r4, lsr #15
- 8024684: f10c 0c77 add.w ip, ip, #119 ; 0x77
- 8024688: ea4f 054c mov.w r5, ip, lsl #1
- 802468c: e5e4 b.n 8024258 <_malloc_r+0xa0>
- 802468e: 2501 movs r5, #1
- 8024690: f8d8 1004 ldr.w r1, [r8, #4]
- 8024694: ea4f 09a9 mov.w r9, r9, asr #2
- 8024698: 4610 mov r0, r2
- 802469a: fa05 f509 lsl.w r5, r5, r9
- 802469e: ea45 0901 orr.w r9, r5, r1
- 80246a2: f8c8 9004 str.w r9, [r8, #4]
- 80246a6: e783 b.n 80245b0 <_malloc_r+0x3f8>
- 80246a8: 2301 movs r3, #1
- 80246aa: 4645 mov r5, r8
- 80246ac: f8c8 3004 str.w r3, [r8, #4]
- 80246b0: 2200 movs r2, #0
- 80246b2: e719 b.n 80244e8 <_malloc_r+0x330>
- 80246b4: f240 5354 movw r3, #1364 ; 0x554
- 80246b8: 459c cmp ip, r3
- 80246ba: d80b bhi.n 80246d4 <_malloc_r+0x51c>
- 80246bc: ea4f 4c94 mov.w ip, r4, lsr #18
- 80246c0: f10c 0c7c add.w ip, ip, #124 ; 0x7c
- 80246c4: ea4f 054c mov.w r5, ip, lsl #1
- 80246c8: e5c6 b.n 8024258 <_malloc_r+0xa0>
- 80246ca: 68b5 ldr r5, [r6, #8]
- 80246cc: 686a ldr r2, [r5, #4]
- 80246ce: f022 0203 bic.w r2, r2, #3
- 80246d2: e709 b.n 80244e8 <_malloc_r+0x330>
- 80246d4: 25fc movs r5, #252 ; 0xfc
- 80246d6: f04f 0c7e mov.w ip, #126 ; 0x7e
- 80246da: e5bd b.n 8024258 <_malloc_r+0xa0>
- 80246dc: 0511 lsls r1, r2, #20
- 80246de: 0d09 lsrs r1, r1, #20
- 80246e0: 2900 cmp r1, #0
- 80246e2: f47f ae95 bne.w 8024410 <_malloc_r+0x258>
- 80246e6: 68b2 ldr r2, [r6, #8]
- 80246e8: eb0b 010a add.w r1, fp, sl
- 80246ec: f041 0101 orr.w r1, r1, #1
- 80246f0: 6051 str r1, [r2, #4]
- 80246f2: e6e3 b.n 80244bc <_malloc_r+0x304>
- 80246f4: 2101 movs r1, #1
- 80246f6: f04f 0b00 mov.w fp, #0
- 80246fa: e6b7 b.n 802446c <_malloc_r+0x2b4>
- 80246fc: 4638 mov r0, r7
- 80246fe: f105 0108 add.w r1, r5, #8
- 8024702: 9201 str r2, [sp, #4]
- 8024704: f7ff f822 bl 802374c <_free_r>
- 8024708: 9a01 ldr r2, [sp, #4]
- 802470a: 6853 ldr r3, [r2, #4]
- 802470c: e6d6 b.n 80244bc <_malloc_r+0x304>
- 802470e: f5b2 7faa cmp.w r2, #340 ; 0x154
- 8024712: d806 bhi.n 8024722 <_malloc_r+0x56a>
- 8024714: ea4f 39d0 mov.w r9, r0, lsr #15
- 8024718: f109 0977 add.w r9, r9, #119 ; 0x77
- 802471c: ea4f 0549 mov.w r5, r9, lsl #1
- 8024720: e732 b.n 8024588 <_malloc_r+0x3d0>
- 8024722: f240 5154 movw r1, #1364 ; 0x554
- 8024726: 25fc movs r5, #252 ; 0xfc
- 8024728: 428a cmp r2, r1
- 802472a: f04f 097e mov.w r9, #126 ; 0x7e
- 802472e: bf9e ittt ls
- 8024730: ea4f 4990 movls.w r9, r0, lsr #18
- 8024734: f109 097c addls.w r9, r9, #124 ; 0x7c
- 8024738: ea4f 0549 movls.w r5, r9, lsl #1
- 802473c: e724 b.n 8024588 <_malloc_r+0x3d0>
- 802473e: 6872 ldr r2, [r6, #4]
- 8024740: ea22 0203 bic.w r2, r2, r3
- 8024744: 6072 str r2, [r6, #4]
- 8024746: e760 b.n 802460a <_malloc_r+0x452>
- 8024748: 005b lsls r3, r3, #1
- 802474a: f108 0804 add.w r8, r8, #4
- 802474e: e763 b.n 8024618 <_malloc_r+0x460>
- 08024750 <memchr>:
- 8024750: 0783 lsls r3, r0, #30
- 8024752: b2c9 uxtb r1, r1
- 8024754: b470 push {r4, r5, r6}
- 8024756: d040 beq.n 80247da <memchr+0x8a>
- 8024758: 1e54 subs r4, r2, #1
- 802475a: 2a00 cmp r2, #0
- 802475c: d03f beq.n 80247de <memchr+0x8e>
- 802475e: 7803 ldrb r3, [r0, #0]
- 8024760: 428b cmp r3, r1
- 8024762: d021 beq.n 80247a8 <memchr+0x58>
- 8024764: 1c43 adds r3, r0, #1
- 8024766: e004 b.n 8024772 <memchr+0x22>
- 8024768: b304 cbz r4, 80247ac <memchr+0x5c>
- 802476a: 7802 ldrb r2, [r0, #0]
- 802476c: 3c01 subs r4, #1
- 802476e: 428a cmp r2, r1
- 8024770: d01a beq.n 80247a8 <memchr+0x58>
- 8024772: f013 0f03 tst.w r3, #3
- 8024776: 4618 mov r0, r3
- 8024778: f103 0301 add.w r3, r3, #1
- 802477c: d1f4 bne.n 8024768 <memchr+0x18>
- 802477e: 2c03 cmp r4, #3
- 8024780: d816 bhi.n 80247b0 <memchr+0x60>
- 8024782: 1e65 subs r5, r4, #1
- 8024784: b194 cbz r4, 80247ac <memchr+0x5c>
- 8024786: 7803 ldrb r3, [r0, #0]
- 8024788: 428b cmp r3, r1
- 802478a: d00d beq.n 80247a8 <memchr+0x58>
- 802478c: 1c42 adds r2, r0, #1
- 802478e: 2300 movs r3, #0
- 8024790: e002 b.n 8024798 <memchr+0x48>
- 8024792: 7804 ldrb r4, [r0, #0]
- 8024794: 428c cmp r4, r1
- 8024796: d007 beq.n 80247a8 <memchr+0x58>
- 8024798: 429d cmp r5, r3
- 802479a: 4610 mov r0, r2
- 802479c: f103 0301 add.w r3, r3, #1
- 80247a0: f102 0201 add.w r2, r2, #1
- 80247a4: d1f5 bne.n 8024792 <memchr+0x42>
- 80247a6: 2000 movs r0, #0
- 80247a8: bc70 pop {r4, r5, r6}
- 80247aa: 4770 bx lr
- 80247ac: 4620 mov r0, r4
- 80247ae: e7fb b.n 80247a8 <memchr+0x58>
- 80247b0: ea41 2601 orr.w r6, r1, r1, lsl #8
- 80247b4: ea46 4606 orr.w r6, r6, r6, lsl #16
- 80247b8: 4602 mov r2, r0
- 80247ba: 3004 adds r0, #4
- 80247bc: 6813 ldr r3, [r2, #0]
- 80247be: 4073 eors r3, r6
- 80247c0: f1a3 3501 sub.w r5, r3, #16843009 ; 0x1010101
- 80247c4: ea25 0303 bic.w r3, r5, r3
- 80247c8: f013 3f80 tst.w r3, #2155905152 ; 0x80808080
- 80247cc: d103 bne.n 80247d6 <memchr+0x86>
- 80247ce: 3c04 subs r4, #4
- 80247d0: 2c03 cmp r4, #3
- 80247d2: d8f1 bhi.n 80247b8 <memchr+0x68>
- 80247d4: e7d5 b.n 8024782 <memchr+0x32>
- 80247d6: 4610 mov r0, r2
- 80247d8: e7d3 b.n 8024782 <memchr+0x32>
- 80247da: 4614 mov r4, r2
- 80247dc: e7cf b.n 802477e <memchr+0x2e>
- 80247de: 4610 mov r0, r2
- 80247e0: e7e2 b.n 80247a8 <memchr+0x58>
- 80247e2: bf00 nop
- 080247e4 <__malloc_lock>:
- 80247e4: 4770 bx lr
- 80247e6: bf00 nop
- 080247e8 <__malloc_unlock>:
- 80247e8: 4770 bx lr
- 80247ea: bf00 nop
- 080247ec <_Balloc>:
- 80247ec: b570 push {r4, r5, r6, lr}
- 80247ee: 4606 mov r6, r0
- 80247f0: 6a44 ldr r4, [r0, #36] ; 0x24
- 80247f2: 460d mov r5, r1
- 80247f4: b15c cbz r4, 802480e <_Balloc+0x22>
- 80247f6: 68e2 ldr r2, [r4, #12]
- 80247f8: b19a cbz r2, 8024822 <_Balloc+0x36>
- 80247fa: f852 0025 ldr.w r0, [r2, r5, lsl #2]
- 80247fe: b1e0 cbz r0, 802483a <_Balloc+0x4e>
- 8024800: 6801 ldr r1, [r0, #0]
- 8024802: f842 1025 str.w r1, [r2, r5, lsl #2]
- 8024806: 2200 movs r2, #0
- 8024808: 6102 str r2, [r0, #16]
- 802480a: 60c2 str r2, [r0, #12]
- 802480c: bd70 pop {r4, r5, r6, pc}
- 802480e: 2010 movs r0, #16
- 8024810: f7ff fcc2 bl 8024198 <malloc>
- 8024814: 2300 movs r3, #0
- 8024816: 4604 mov r4, r0
- 8024818: 6270 str r0, [r6, #36] ; 0x24
- 802481a: 6043 str r3, [r0, #4]
- 802481c: 6083 str r3, [r0, #8]
- 802481e: 6003 str r3, [r0, #0]
- 8024820: 60c3 str r3, [r0, #12]
- 8024822: 2221 movs r2, #33 ; 0x21
- 8024824: 4630 mov r0, r6
- 8024826: 2104 movs r1, #4
- 8024828: f000 fcfc bl 8025224 <_calloc_r>
- 802482c: 6a73 ldr r3, [r6, #36] ; 0x24
- 802482e: 60e0 str r0, [r4, #12]
- 8024830: 68da ldr r2, [r3, #12]
- 8024832: 2a00 cmp r2, #0
- 8024834: d1e1 bne.n 80247fa <_Balloc+0xe>
- 8024836: 2000 movs r0, #0
- 8024838: bd70 pop {r4, r5, r6, pc}
- 802483a: 2301 movs r3, #1
- 802483c: 4630 mov r0, r6
- 802483e: 4619 mov r1, r3
- 8024840: fa03 f405 lsl.w r4, r3, r5
- 8024844: 1d62 adds r2, r4, #5
- 8024846: 0092 lsls r2, r2, #2
- 8024848: f000 fcec bl 8025224 <_calloc_r>
- 802484c: 2800 cmp r0, #0
- 802484e: d0f2 beq.n 8024836 <_Balloc+0x4a>
- 8024850: 6045 str r5, [r0, #4]
- 8024852: 6084 str r4, [r0, #8]
- 8024854: e7d7 b.n 8024806 <_Balloc+0x1a>
- 8024856: bf00 nop
- 08024858 <_Bfree>:
- 8024858: b530 push {r4, r5, lr}
- 802485a: 4604 mov r4, r0
- 802485c: 6a45 ldr r5, [r0, #36] ; 0x24
- 802485e: b083 sub sp, #12
- 8024860: b155 cbz r5, 8024878 <_Bfree+0x20>
- 8024862: b139 cbz r1, 8024874 <_Bfree+0x1c>
- 8024864: 6a63 ldr r3, [r4, #36] ; 0x24
- 8024866: 684a ldr r2, [r1, #4]
- 8024868: 68db ldr r3, [r3, #12]
- 802486a: f853 0022 ldr.w r0, [r3, r2, lsl #2]
- 802486e: 6008 str r0, [r1, #0]
- 8024870: f843 1022 str.w r1, [r3, r2, lsl #2]
- 8024874: b003 add sp, #12
- 8024876: bd30 pop {r4, r5, pc}
- 8024878: 2010 movs r0, #16
- 802487a: 9101 str r1, [sp, #4]
- 802487c: f7ff fc8c bl 8024198 <malloc>
- 8024880: 9901 ldr r1, [sp, #4]
- 8024882: 6260 str r0, [r4, #36] ; 0x24
- 8024884: 6045 str r5, [r0, #4]
- 8024886: 6085 str r5, [r0, #8]
- 8024888: 6005 str r5, [r0, #0]
- 802488a: 60c5 str r5, [r0, #12]
- 802488c: e7e9 b.n 8024862 <_Bfree+0xa>
- 802488e: bf00 nop
- 08024890 <__multadd>:
- 8024890: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- 8024894: 4688 mov r8, r1
- 8024896: f8d1 a010 ldr.w sl, [r1, #16]
- 802489a: b082 sub sp, #8
- 802489c: 4681 mov r9, r0
- 802489e: f101 0514 add.w r5, r1, #20
- 80248a2: 2400 movs r4, #0
- 80248a4: 682f ldr r7, [r5, #0]
- 80248a6: 3401 adds r4, #1
- 80248a8: b2be uxth r6, r7
- 80248aa: 0c3f lsrs r7, r7, #16
- 80248ac: fb02 3606 mla r6, r2, r6, r3
- 80248b0: fb02 f307 mul.w r3, r2, r7
- 80248b4: eb03 4316 add.w r3, r3, r6, lsr #16
- 80248b8: b2b6 uxth r6, r6
- 80248ba: eb06 4603 add.w r6, r6, r3, lsl #16
- 80248be: 0c1b lsrs r3, r3, #16
- 80248c0: 45a2 cmp sl, r4
- 80248c2: f845 6b04 str.w r6, [r5], #4
- 80248c6: dced bgt.n 80248a4 <__multadd+0x14>
- 80248c8: b153 cbz r3, 80248e0 <__multadd+0x50>
- 80248ca: f8d8 2008 ldr.w r2, [r8, #8]
- 80248ce: 4592 cmp sl, r2
- 80248d0: da0a bge.n 80248e8 <__multadd+0x58>
- 80248d2: eb08 028a add.w r2, r8, sl, lsl #2
- 80248d6: f10a 0101 add.w r1, sl, #1
- 80248da: f8c8 1010 str.w r1, [r8, #16]
- 80248de: 6153 str r3, [r2, #20]
- 80248e0: 4640 mov r0, r8
- 80248e2: b002 add sp, #8
- 80248e4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 80248e8: f8d8 1004 ldr.w r1, [r8, #4]
- 80248ec: 4648 mov r0, r9
- 80248ee: 9301 str r3, [sp, #4]
- 80248f0: 3101 adds r1, #1
- 80248f2: f7ff ff7b bl 80247ec <_Balloc>
- 80248f6: f8d8 2010 ldr.w r2, [r8, #16]
- 80248fa: f108 010c add.w r1, r8, #12
- 80248fe: 3202 adds r2, #2
- 8024900: 0092 lsls r2, r2, #2
- 8024902: 4604 mov r4, r0
- 8024904: 300c adds r0, #12
- 8024906: f7fd f841 bl 802198c <memcpy>
- 802490a: 4641 mov r1, r8
- 802490c: 4648 mov r0, r9
- 802490e: 46a0 mov r8, r4
- 8024910: f7ff ffa2 bl 8024858 <_Bfree>
- 8024914: 9b01 ldr r3, [sp, #4]
- 8024916: e7dc b.n 80248d2 <__multadd+0x42>
- 08024918 <__s2b>:
- 8024918: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- 802491c: f648 6539 movw r5, #36409 ; 0x8e39
- 8024920: 461f mov r7, r3
- 8024922: f6c3 05e3 movt r5, #14563 ; 0x38e3
- 8024926: 3308 adds r3, #8
- 8024928: 4606 mov r6, r0
- 802492a: 460c mov r4, r1
- 802492c: 4690 mov r8, r2
- 802492e: fb85 1003 smull r1, r0, r5, r3
- 8024932: 17db asrs r3, r3, #31
- 8024934: ebc3 0060 rsb r0, r3, r0, asr #1
- 8024938: 2801 cmp r0, #1
- 802493a: dd37 ble.n 80249ac <__s2b+0x94>
- 802493c: 2501 movs r5, #1
- 802493e: 2100 movs r1, #0
- 8024940: 006d lsls r5, r5, #1
- 8024942: 3101 adds r1, #1
- 8024944: 42a8 cmp r0, r5
- 8024946: dcfb bgt.n 8024940 <__s2b+0x28>
- 8024948: 4630 mov r0, r6
- 802494a: f7ff ff4f bl 80247ec <_Balloc>
- 802494e: 9b08 ldr r3, [sp, #32]
- 8024950: 6143 str r3, [r0, #20]
- 8024952: 2301 movs r3, #1
- 8024954: f1b8 0f09 cmp.w r8, #9
- 8024958: 4601 mov r1, r0
- 802495a: 6103 str r3, [r0, #16]
- 802495c: dd22 ble.n 80249a4 <__s2b+0x8c>
- 802495e: f104 0909 add.w r9, r4, #9
- 8024962: 4444 add r4, r8
- 8024964: 464d mov r5, r9
- 8024966: f815 3b01 ldrb.w r3, [r5], #1
- 802496a: 220a movs r2, #10
- 802496c: 4630 mov r0, r6
- 802496e: 3b30 subs r3, #48 ; 0x30
- 8024970: f7ff ff8e bl 8024890 <__multadd>
- 8024974: 42a5 cmp r5, r4
- 8024976: 4601 mov r1, r0
- 8024978: d1f5 bne.n 8024966 <__s2b+0x4e>
- 802497a: eb09 0408 add.w r4, r9, r8
- 802497e: 3c08 subs r4, #8
- 8024980: 4547 cmp r7, r8
- 8024982: dd0c ble.n 802499e <__s2b+0x86>
- 8024984: ebc8 0707 rsb r7, r8, r7
- 8024988: 19e7 adds r7, r4, r7
- 802498a: f814 3b01 ldrb.w r3, [r4], #1
- 802498e: 220a movs r2, #10
- 8024990: 4630 mov r0, r6
- 8024992: 3b30 subs r3, #48 ; 0x30
- 8024994: f7ff ff7c bl 8024890 <__multadd>
- 8024998: 42bc cmp r4, r7
- 802499a: 4601 mov r1, r0
- 802499c: d1f5 bne.n 802498a <__s2b+0x72>
- 802499e: 4608 mov r0, r1
- 80249a0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
- 80249a4: 340a adds r4, #10
- 80249a6: f04f 0809 mov.w r8, #9
- 80249aa: e7e9 b.n 8024980 <__s2b+0x68>
- 80249ac: 2100 movs r1, #0
- 80249ae: e7cb b.n 8024948 <__s2b+0x30>
- 080249b0 <__hi0bits>:
- 80249b0: 4603 mov r3, r0
- 80249b2: 2000 movs r0, #0
- 80249b4: 0c1a lsrs r2, r3, #16
- 80249b6: d101 bne.n 80249bc <__hi0bits+0xc>
- 80249b8: 041b lsls r3, r3, #16
- 80249ba: 2010 movs r0, #16
- 80249bc: f013 4f7f tst.w r3, #4278190080 ; 0xff000000
- 80249c0: d101 bne.n 80249c6 <__hi0bits+0x16>
- 80249c2: 3008 adds r0, #8
- 80249c4: 021b lsls r3, r3, #8
- 80249c6: f013 4f70 tst.w r3, #4026531840 ; 0xf0000000
- 80249ca: d101 bne.n 80249d0 <__hi0bits+0x20>
- 80249cc: 3004 adds r0, #4
- 80249ce: 011b lsls r3, r3, #4
- 80249d0: f013 4f40 tst.w r3, #3221225472 ; 0xc0000000
- 80249d4: d101 bne.n 80249da <__hi0bits+0x2a>
- 80249d6: 3002 adds r0, #2
- 80249d8: 009b lsls r3, r3, #2
- 80249da: 2b00 cmp r3, #0
- 80249dc: db02 blt.n 80249e4 <__hi0bits+0x34>
- 80249de: 005b lsls r3, r3, #1
- 80249e0: d401 bmi.n 80249e6 <__hi0bits+0x36>
- 80249e2: 2020 movs r0, #32
- 80249e4: 4770 bx lr
- 80249e6: 3001 adds r0, #1
- 80249e8: 4770 bx lr
- 80249ea: bf00 nop
- 080249ec <__lo0bits>:
- 80249ec: 6803 ldr r3, [r0, #0]
- 80249ee: 4602 mov r2, r0
- 80249f0: f013 0007 ands.w r0, r3, #7
- 80249f4: d007 beq.n 8024a06 <__lo0bits+0x1a>
- 80249f6: 07d9 lsls r1, r3, #31
- 80249f8: d41f bmi.n 8024a3a <__lo0bits+0x4e>
- 80249fa: 0798 lsls r0, r3, #30
- 80249fc: d41f bmi.n 8024a3e <__lo0bits+0x52>
- 80249fe: 089b lsrs r3, r3, #2
- 8024a00: 2002 movs r0, #2
- 8024a02: 6013 str r3, [r2, #0]
- 8024a04: 4770 bx lr
- 8024a06: b299 uxth r1, r3
- 8024a08: b909 cbnz r1, 8024a0e <__lo0bits+0x22>
- 8024a0a: 0c1b lsrs r3, r3, #16
- 8024a0c: 2010 movs r0, #16
- 8024a0e: f013 0fff tst.w r3, #255 ; 0xff
- 8024a12: d101 bne.n 8024a18 <__lo0bits+0x2c>
- 8024a14: 3008 adds r0, #8
- 8024a16: 0a1b lsrs r3, r3, #8
- 8024a18: 0719 lsls r1, r3, #28
- 8024a1a: d101 bne.n 8024a20 <__lo0bits+0x34>
- 8024a1c: 3004 adds r0, #4
- 8024a1e: 091b lsrs r3, r3, #4
- 8024a20: 0799 lsls r1, r3, #30
- 8024a22: d101 bne.n 8024a28 <__lo0bits+0x3c>
- 8024a24: 3002 adds r0, #2
- 8024a26: 089b lsrs r3, r3, #2
- 8024a28: 07d9 lsls r1, r3, #31
- 8024a2a: d404 bmi.n 8024a36 <__lo0bits+0x4a>
- 8024a2c: 085b lsrs r3, r3, #1
- 8024a2e: d101 bne.n 8024a34 <__lo0bits+0x48>
- 8024a30: 2020 movs r0, #32
- 8024a32: 4770 bx lr
- 8024a34: 3001 adds r0, #1
- 8024a36: 6013 str r3, [r2, #0]
- 8024a38: 4770 bx lr
- 8024a3a: 2000 movs r0, #0
- 8024a3c: 4770 bx lr
- 8024a3e: 085b lsrs r3, r3, #1
- 8024a40: 2001 movs r0, #1
- 8024a42: 6013 str r3, [r2, #0]
- 8024a44: 4770 bx lr
- 8024a46: bf00 nop
- 08024a48 <__i2b>:
- 8024a48: b510 push {r4, lr}
- 8024a4a: 460c mov r4, r1
- 8024a4c: 2101 movs r1, #1
- 8024a4e: f7ff fecd bl 80247ec <_Balloc>
- 8024a52: 2201 movs r2, #1
- 8024a54: 6144 str r4, [r0, #20]
- 8024a56: 6102 str r2, [r0, #16]
- 8024a58: bd10 pop {r4, pc}
- 8024a5a: bf00 nop
- 08024a5c <__multiply>:
- 8024a5c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8024a60: 460c mov r4, r1
- 8024a62: 690e ldr r6, [r1, #16]
- 8024a64: b085 sub sp, #20
- 8024a66: 6915 ldr r5, [r2, #16]
- 8024a68: 4617 mov r7, r2
- 8024a6a: 42ae cmp r6, r5
- 8024a6c: da04 bge.n 8024a78 <__multiply+0x1c>
- 8024a6e: 4632 mov r2, r6
- 8024a70: 463c mov r4, r7
- 8024a72: 462e mov r6, r5
- 8024a74: 460f mov r7, r1
- 8024a76: 4615 mov r5, r2
- 8024a78: 68a3 ldr r3, [r4, #8]
- 8024a7a: eb06 0805 add.w r8, r6, r5
- 8024a7e: 6861 ldr r1, [r4, #4]
- 8024a80: 4598 cmp r8, r3
- 8024a82: bfc8 it gt
- 8024a84: 3101 addgt r1, #1
- 8024a86: f7ff feb1 bl 80247ec <_Balloc>
- 8024a8a: eb00 0988 add.w r9, r0, r8, lsl #2
- 8024a8e: f100 0314 add.w r3, r0, #20
- 8024a92: f109 0914 add.w r9, r9, #20
- 8024a96: 9001 str r0, [sp, #4]
- 8024a98: 2000 movs r0, #0
- 8024a9a: 454b cmp r3, r9
- 8024a9c: d203 bcs.n 8024aa6 <__multiply+0x4a>
- 8024a9e: f843 0b04 str.w r0, [r3], #4
- 8024aa2: 4599 cmp r9, r3
- 8024aa4: d8fb bhi.n 8024a9e <__multiply+0x42>
- 8024aa6: eb07 0585 add.w r5, r7, r5, lsl #2
- 8024aaa: eb04 0686 add.w r6, r4, r6, lsl #2
- 8024aae: 3714 adds r7, #20
- 8024ab0: 3514 adds r5, #20
- 8024ab2: 3414 adds r4, #20
- 8024ab4: 3614 adds r6, #20
- 8024ab6: 42af cmp r7, r5
- 8024ab8: d257 bcs.n 8024b6a <__multiply+0x10e>
- 8024aba: 9a01 ldr r2, [sp, #4]
- 8024abc: f8cd 9008 str.w r9, [sp, #8]
- 8024ac0: 46a9 mov r9, r5
- 8024ac2: f8cd 800c str.w r8, [sp, #12]
- 8024ac6: f102 0c18 add.w ip, r2, #24
- 8024aca: 46a0 mov r8, r4
- 8024acc: f857 4b04 ldr.w r4, [r7], #4
- 8024ad0: b2a0 uxth r0, r4
- 8024ad2: b1f0 cbz r0, 8024b12 <__multiply+0xb6>
- 8024ad4: 4642 mov r2, r8
- 8024ad6: f1ac 0304 sub.w r3, ip, #4
- 8024ada: 2400 movs r4, #0
- 8024adc: f852 1b04 ldr.w r1, [r2], #4
- 8024ae0: 681d ldr r5, [r3, #0]
- 8024ae2: fa1f fa81 uxth.w sl, r1
- 8024ae6: 0c09 lsrs r1, r1, #16
- 8024ae8: fa1f fb85 uxth.w fp, r5
- 8024aec: 0c2d lsrs r5, r5, #16
- 8024aee: fb00 ba0a mla sl, r0, sl, fp
- 8024af2: fb00 5101 mla r1, r0, r1, r5
- 8024af6: 4454 add r4, sl
- 8024af8: eb01 4114 add.w r1, r1, r4, lsr #16
- 8024afc: b2a4 uxth r4, r4
- 8024afe: ea44 4501 orr.w r5, r4, r1, lsl #16
- 8024b02: 0c0c lsrs r4, r1, #16
- 8024b04: 4296 cmp r6, r2
- 8024b06: f843 5b04 str.w r5, [r3], #4
- 8024b0a: d8e7 bhi.n 8024adc <__multiply+0x80>
- 8024b0c: 601c str r4, [r3, #0]
- 8024b0e: f857 4c04 ldr.w r4, [r7, #-4]
- 8024b12: 0c24 lsrs r4, r4, #16
- 8024b14: d021 beq.n 8024b5a <__multiply+0xfe>
- 8024b16: f85c 1c04 ldr.w r1, [ip, #-4]
- 8024b1a: 4642 mov r2, r8
- 8024b1c: 4663 mov r3, ip
- 8024b1e: 2500 movs r5, #0
- 8024b20: 4608 mov r0, r1
- 8024b22: f8b2 a000 ldrh.w sl, [r2]
- 8024b26: 0c00 lsrs r0, r0, #16
- 8024b28: b289 uxth r1, r1
- 8024b2a: 469b mov fp, r3
- 8024b2c: fb04 000a mla r0, r4, sl, r0
- 8024b30: 1945 adds r5, r0, r5
- 8024b32: ea41 4105 orr.w r1, r1, r5, lsl #16
- 8024b36: f843 1c04 str.w r1, [r3, #-4]
- 8024b3a: f853 0b04 ldr.w r0, [r3], #4
- 8024b3e: f852 1b04 ldr.w r1, [r2], #4
- 8024b42: fa1f fa80 uxth.w sl, r0
- 8024b46: 0c09 lsrs r1, r1, #16
- 8024b48: fb04 a101 mla r1, r4, r1, sl
- 8024b4c: eb01 4115 add.w r1, r1, r5, lsr #16
- 8024b50: 0c0d lsrs r5, r1, #16
- 8024b52: 4296 cmp r6, r2
- 8024b54: d8e5 bhi.n 8024b22 <__multiply+0xc6>
- 8024b56: f8cb 1000 str.w r1, [fp]
- 8024b5a: 45b9 cmp r9, r7
- 8024b5c: f10c 0c04 add.w ip, ip, #4
- 8024b60: d8b4 bhi.n 8024acc <__multiply+0x70>
- 8024b62: f8dd 9008 ldr.w r9, [sp, #8]
- 8024b66: f8dd 800c ldr.w r8, [sp, #12]
- 8024b6a: f1b8 0f00 cmp.w r8, #0
- 8024b6e: dd0b ble.n 8024b88 <__multiply+0x12c>
- 8024b70: f859 3c04 ldr.w r3, [r9, #-4]
- 8024b74: f1a9 0904 sub.w r9, r9, #4
- 8024b78: b11b cbz r3, 8024b82 <__multiply+0x126>
- 8024b7a: e005 b.n 8024b88 <__multiply+0x12c>
- 8024b7c: f859 3d04 ldr.w r3, [r9, #-4]!
- 8024b80: b913 cbnz r3, 8024b88 <__multiply+0x12c>
- 8024b82: f1b8 0801 subs.w r8, r8, #1
- 8024b86: d1f9 bne.n 8024b7c <__multiply+0x120>
- 8024b88: 9b01 ldr r3, [sp, #4]
- 8024b8a: 4618 mov r0, r3
- 8024b8c: f8c3 8010 str.w r8, [r3, #16]
- 8024b90: b005 add sp, #20
- 8024b92: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8024b96: bf00 nop
- 08024b98 <__pow5mult>:
- 8024b98: f012 0303 ands.w r3, r2, #3
- 8024b9c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8024ba0: 4614 mov r4, r2
- 8024ba2: 4680 mov r8, r0
- 8024ba4: 460f mov r7, r1
- 8024ba6: d128 bne.n 8024bfa <__pow5mult+0x62>
- 8024ba8: 10a4 asrs r4, r4, #2
- 8024baa: d01a beq.n 8024be2 <__pow5mult+0x4a>
- 8024bac: f8d8 5024 ldr.w r5, [r8, #36] ; 0x24
- 8024bb0: 2d00 cmp r5, #0
- 8024bb2: d02e beq.n 8024c12 <__pow5mult+0x7a>
- 8024bb4: 68ae ldr r6, [r5, #8]
- 8024bb6: b92e cbnz r6, 8024bc4 <__pow5mult+0x2c>
- 8024bb8: e036 b.n 8024c28 <__pow5mult+0x90>
- 8024bba: 1064 asrs r4, r4, #1
- 8024bbc: d011 beq.n 8024be2 <__pow5mult+0x4a>
- 8024bbe: 6835 ldr r5, [r6, #0]
- 8024bc0: b195 cbz r5, 8024be8 <__pow5mult+0x50>
- 8024bc2: 462e mov r6, r5
- 8024bc4: 07e0 lsls r0, r4, #31
- 8024bc6: d5f8 bpl.n 8024bba <__pow5mult+0x22>
- 8024bc8: 4639 mov r1, r7
- 8024bca: 4632 mov r2, r6
- 8024bcc: 4640 mov r0, r8
- 8024bce: f7ff ff45 bl 8024a5c <__multiply>
- 8024bd2: 4639 mov r1, r7
- 8024bd4: 4605 mov r5, r0
- 8024bd6: 4640 mov r0, r8
- 8024bd8: f7ff fe3e bl 8024858 <_Bfree>
- 8024bdc: 1064 asrs r4, r4, #1
- 8024bde: 462f mov r7, r5
- 8024be0: d1ed bne.n 8024bbe <__pow5mult+0x26>
- 8024be2: 4638 mov r0, r7
- 8024be4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 8024be8: 4631 mov r1, r6
- 8024bea: 4632 mov r2, r6
- 8024bec: 4640 mov r0, r8
- 8024bee: f7ff ff35 bl 8024a5c <__multiply>
- 8024bf2: 6030 str r0, [r6, #0]
- 8024bf4: 4606 mov r6, r0
- 8024bf6: 6005 str r5, [r0, #0]
- 8024bf8: e7e4 b.n 8024bc4 <__pow5mult+0x2c>
- 8024bfa: f249 7230 movw r2, #38704 ; 0x9730
- 8024bfe: 1e5d subs r5, r3, #1
- 8024c00: f6c0 0203 movt r2, #2051 ; 0x803
- 8024c04: 2300 movs r3, #0
- 8024c06: f852 2025 ldr.w r2, [r2, r5, lsl #2]
- 8024c0a: f7ff fe41 bl 8024890 <__multadd>
- 8024c0e: 4607 mov r7, r0
- 8024c10: e7ca b.n 8024ba8 <__pow5mult+0x10>
- 8024c12: 2010 movs r0, #16
- 8024c14: f7ff fac0 bl 8024198 <malloc>
- 8024c18: 2300 movs r3, #0
- 8024c1a: 4605 mov r5, r0
- 8024c1c: f8c8 0024 str.w r0, [r8, #36] ; 0x24
- 8024c20: 6043 str r3, [r0, #4]
- 8024c22: 6083 str r3, [r0, #8]
- 8024c24: 6003 str r3, [r0, #0]
- 8024c26: 60c3 str r3, [r0, #12]
- 8024c28: 4640 mov r0, r8
- 8024c2a: f240 2171 movw r1, #625 ; 0x271
- 8024c2e: f7ff ff0b bl 8024a48 <__i2b>
- 8024c32: 2300 movs r3, #0
- 8024c34: 60a8 str r0, [r5, #8]
- 8024c36: 4606 mov r6, r0
- 8024c38: 6003 str r3, [r0, #0]
- 8024c3a: e7c3 b.n 8024bc4 <__pow5mult+0x2c>
- 08024c3c <__lshift>:
- 8024c3c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8024c40: 4693 mov fp, r2
- 8024c42: 690a ldr r2, [r1, #16]
- 8024c44: 460f mov r7, r1
- 8024c46: ea4f 156b mov.w r5, fp, asr #5
- 8024c4a: 688b ldr r3, [r1, #8]
- 8024c4c: eb05 0a02 add.w sl, r5, r2
- 8024c50: 4681 mov r9, r0
- 8024c52: f10a 0601 add.w r6, sl, #1
- 8024c56: 6849 ldr r1, [r1, #4]
- 8024c58: 429e cmp r6, r3
- 8024c5a: dd03 ble.n 8024c64 <__lshift+0x28>
- 8024c5c: 005b lsls r3, r3, #1
- 8024c5e: 3101 adds r1, #1
- 8024c60: 429e cmp r6, r3
- 8024c62: dcfb bgt.n 8024c5c <__lshift+0x20>
- 8024c64: 4648 mov r0, r9
- 8024c66: f7ff fdc1 bl 80247ec <_Balloc>
- 8024c6a: 2d00 cmp r5, #0
- 8024c6c: 4680 mov r8, r0
- 8024c6e: f100 0414 add.w r4, r0, #20
- 8024c72: dd0a ble.n 8024c8a <__lshift+0x4e>
- 8024c74: 2300 movs r3, #0
- 8024c76: 461a mov r2, r3
- 8024c78: 3301 adds r3, #1
- 8024c7a: f844 2b04 str.w r2, [r4], #4
- 8024c7e: 42ab cmp r3, r5
- 8024c80: d1fa bne.n 8024c78 <__lshift+0x3c>
- 8024c82: eb08 0383 add.w r3, r8, r3, lsl #2
- 8024c86: f103 0414 add.w r4, r3, #20
- 8024c8a: 6938 ldr r0, [r7, #16]
- 8024c8c: f107 0514 add.w r5, r7, #20
- 8024c90: eb07 0080 add.w r0, r7, r0, lsl #2
- 8024c94: 3014 adds r0, #20
- 8024c96: f01b 0b1f ands.w fp, fp, #31
- 8024c9a: d01c beq.n 8024cd6 <__lshift+0x9a>
- 8024c9c: f1cb 0320 rsb r3, fp, #32
- 8024ca0: 2200 movs r2, #0
- 8024ca2: 6829 ldr r1, [r5, #0]
- 8024ca4: fa01 f10b lsl.w r1, r1, fp
- 8024ca8: 430a orrs r2, r1
- 8024caa: f844 2b04 str.w r2, [r4], #4
- 8024cae: f855 2b04 ldr.w r2, [r5], #4
- 8024cb2: 42a8 cmp r0, r5
- 8024cb4: fa22 f203 lsr.w r2, r2, r3
- 8024cb8: d8f3 bhi.n 8024ca2 <__lshift+0x66>
- 8024cba: 6022 str r2, [r4, #0]
- 8024cbc: b10a cbz r2, 8024cc2 <__lshift+0x86>
- 8024cbe: f10a 0602 add.w r6, sl, #2
- 8024cc2: 4648 mov r0, r9
- 8024cc4: 3e01 subs r6, #1
- 8024cc6: 4639 mov r1, r7
- 8024cc8: f8c8 6010 str.w r6, [r8, #16]
- 8024ccc: f7ff fdc4 bl 8024858 <_Bfree>
- 8024cd0: 4640 mov r0, r8
- 8024cd2: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8024cd6: f855 3b04 ldr.w r3, [r5], #4
- 8024cda: 42a8 cmp r0, r5
- 8024cdc: f844 3b04 str.w r3, [r4], #4
- 8024ce0: d9ef bls.n 8024cc2 <__lshift+0x86>
- 8024ce2: f855 3b04 ldr.w r3, [r5], #4
- 8024ce6: 42a8 cmp r0, r5
- 8024ce8: f844 3b04 str.w r3, [r4], #4
- 8024cec: d8f3 bhi.n 8024cd6 <__lshift+0x9a>
- 8024cee: e7e8 b.n 8024cc2 <__lshift+0x86>
- 08024cf0 <__mcmp>:
- 8024cf0: 4603 mov r3, r0
- 8024cf2: 690a ldr r2, [r1, #16]
- 8024cf4: 6900 ldr r0, [r0, #16]
- 8024cf6: b430 push {r4, r5}
- 8024cf8: 1a80 subs r0, r0, r2
- 8024cfa: d10f bne.n 8024d1c <__mcmp+0x2c>
- 8024cfc: 3204 adds r2, #4
- 8024cfe: f103 0514 add.w r5, r3, #20
- 8024d02: 0092 lsls r2, r2, #2
- 8024d04: 189b adds r3, r3, r2
- 8024d06: 1889 adds r1, r1, r2
- 8024d08: 3304 adds r3, #4
- 8024d0a: 3104 adds r1, #4
- 8024d0c: f853 2d04 ldr.w r2, [r3, #-4]!
- 8024d10: f851 4d04 ldr.w r4, [r1, #-4]!
- 8024d14: 42a2 cmp r2, r4
- 8024d16: d103 bne.n 8024d20 <__mcmp+0x30>
- 8024d18: 429d cmp r5, r3
- 8024d1a: d3f7 bcc.n 8024d0c <__mcmp+0x1c>
- 8024d1c: bc30 pop {r4, r5}
- 8024d1e: 4770 bx lr
- 8024d20: 4294 cmp r4, r2
- 8024d22: bf94 ite ls
- 8024d24: 2001 movls r0, #1
- 8024d26: f04f 30ff movhi.w r0, #4294967295
- 8024d2a: e7f7 b.n 8024d1c <__mcmp+0x2c>
- 08024d2c <__mdiff>:
- 8024d2c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8024d30: 468b mov fp, r1
- 8024d32: 4604 mov r4, r0
- 8024d34: 4611 mov r1, r2
- 8024d36: 4658 mov r0, fp
- 8024d38: 4691 mov r9, r2
- 8024d3a: f7ff ffd9 bl 8024cf0 <__mcmp>
- 8024d3e: 1e05 subs r5, r0, #0
- 8024d40: d061 beq.n 8024e06 <__mdiff+0xda>
- 8024d42: bfbc itt lt
- 8024d44: 465b movlt r3, fp
- 8024d46: 46cb movlt fp, r9
- 8024d48: 4620 mov r0, r4
- 8024d4a: bfb8 it lt
- 8024d4c: 4699 movlt r9, r3
- 8024d4e: f8db 1004 ldr.w r1, [fp, #4]
- 8024d52: bfac ite ge
- 8024d54: f04f 0800 movge.w r8, #0
- 8024d58: f04f 0801 movlt.w r8, #1
- 8024d5c: f7ff fd46 bl 80247ec <_Balloc>
- 8024d60: f8db 7010 ldr.w r7, [fp, #16]
- 8024d64: f109 0514 add.w r5, r9, #20
- 8024d68: f8d9 3010 ldr.w r3, [r9, #16]
- 8024d6c: f10b 0614 add.w r6, fp, #20
- 8024d70: 2400 movs r4, #0
- 8024d72: eb0b 0c87 add.w ip, fp, r7, lsl #2
- 8024d76: eb09 0983 add.w r9, r9, r3, lsl #2
- 8024d7a: f10c 0c14 add.w ip, ip, #20
- 8024d7e: f109 0914 add.w r9, r9, #20
- 8024d82: f100 0a14 add.w sl, r0, #20
- 8024d86: f8c0 800c str.w r8, [r0, #12]
- 8024d8a: f856 8b04 ldr.w r8, [r6], #4
- 8024d8e: 4653 mov r3, sl
- 8024d90: f855 ab04 ldr.w sl, [r5], #4
- 8024d94: 4632 mov r2, r6
- 8024d96: fa1f f188 uxth.w r1, r8
- 8024d9a: 1909 adds r1, r1, r4
- 8024d9c: fa1f fb8a uxth.w fp, sl
- 8024da0: ebcb 0101 rsb r1, fp, r1
- 8024da4: ea4f 441a mov.w r4, sl, lsr #16
- 8024da8: ebc4 4418 rsb r4, r4, r8, lsr #16
- 8024dac: eb04 4421 add.w r4, r4, r1, asr #16
- 8024db0: b289 uxth r1, r1
- 8024db2: ea41 4104 orr.w r1, r1, r4, lsl #16
- 8024db6: 1424 asrs r4, r4, #16
- 8024db8: 45a9 cmp r9, r5
- 8024dba: f843 1b04 str.w r1, [r3], #4
- 8024dbe: 469a mov sl, r3
- 8024dc0: d8e3 bhi.n 8024d8a <__mdiff+0x5e>
- 8024dc2: 45b4 cmp ip, r6
- 8024dc4: 4698 mov r8, r3
- 8024dc6: d914 bls.n 8024df2 <__mdiff+0xc6>
- 8024dc8: f852 5b04 ldr.w r5, [r2], #4
- 8024dcc: b2a9 uxth r1, r5
- 8024dce: 0c2d lsrs r5, r5, #16
- 8024dd0: 190c adds r4, r1, r4
- 8024dd2: eb05 4524 add.w r5, r5, r4, asr #16
- 8024dd6: b2a4 uxth r4, r4
- 8024dd8: ea44 4105 orr.w r1, r4, r5, lsl #16
- 8024ddc: 142c asrs r4, r5, #16
- 8024dde: 4594 cmp ip, r2
- 8024de0: f843 1b04 str.w r1, [r3], #4
- 8024de4: d8f0 bhi.n 8024dc8 <__mdiff+0x9c>
- 8024de6: 43f3 mvns r3, r6
- 8024de8: 4463 add r3, ip
- 8024dea: f023 0303 bic.w r3, r3, #3
- 8024dee: 3304 adds r3, #4
- 8024df0: 4443 add r3, r8
- 8024df2: 3b04 subs r3, #4
- 8024df4: b921 cbnz r1, 8024e00 <__mdiff+0xd4>
- 8024df6: f853 2d04 ldr.w r2, [r3, #-4]!
- 8024dfa: 3f01 subs r7, #1
- 8024dfc: 2a00 cmp r2, #0
- 8024dfe: d0fa beq.n 8024df6 <__mdiff+0xca>
- 8024e00: 6107 str r7, [r0, #16]
- 8024e02: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8024e06: 4620 mov r0, r4
- 8024e08: 4629 mov r1, r5
- 8024e0a: f7ff fcef bl 80247ec <_Balloc>
- 8024e0e: 2301 movs r3, #1
- 8024e10: 6145 str r5, [r0, #20]
- 8024e12: 6103 str r3, [r0, #16]
- 8024e14: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 08024e18 <__ulp>:
- 8024e18: 2300 movs r3, #0
- 8024e1a: f6c7 73f0 movt r3, #32752 ; 0x7ff0
- 8024e1e: 400b ands r3, r1
- 8024e20: f1a3 7350 sub.w r3, r3, #54525952 ; 0x3400000
- 8024e24: 2b00 cmp r3, #0
- 8024e26: dd02 ble.n 8024e2e <__ulp+0x16>
- 8024e28: 4619 mov r1, r3
- 8024e2a: 2000 movs r0, #0
- 8024e2c: 4770 bx lr
- 8024e2e: 425b negs r3, r3
- 8024e30: 2100 movs r1, #0
- 8024e32: 151b asrs r3, r3, #20
- 8024e34: 2b13 cmp r3, #19
- 8024e36: dd0b ble.n 8024e50 <__ulp+0x38>
- 8024e38: 2b32 cmp r3, #50 ; 0x32
- 8024e3a: dd02 ble.n 8024e42 <__ulp+0x2a>
- 8024e3c: 2301 movs r3, #1
- 8024e3e: 4618 mov r0, r3
- 8024e40: 4770 bx lr
- 8024e42: 2201 movs r2, #1
- 8024e44: f1c3 0333 rsb r3, r3, #51 ; 0x33
- 8024e48: fa02 f303 lsl.w r3, r2, r3
- 8024e4c: 4618 mov r0, r3
- 8024e4e: 4770 bx lr
- 8024e50: f44f 2200 mov.w r2, #524288 ; 0x80000
- 8024e54: 2000 movs r0, #0
- 8024e56: fa42 f103 asr.w r1, r2, r3
- 8024e5a: 4770 bx lr
- 08024e5c <__b2d>:
- 8024e5c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- 8024e60: f100 0814 add.w r8, r0, #20
- 8024e64: 6906 ldr r6, [r0, #16]
- 8024e66: 4689 mov r9, r1
- 8024e68: 3604 adds r6, #4
- 8024e6a: eb00 0686 add.w r6, r0, r6, lsl #2
- 8024e6e: 4634 mov r4, r6
- 8024e70: 4637 mov r7, r6
- 8024e72: f854 5b04 ldr.w r5, [r4], #4
- 8024e76: 4628 mov r0, r5
- 8024e78: f7ff fd9a bl 80249b0 <__hi0bits>
- 8024e7c: 280a cmp r0, #10
- 8024e7e: f1c0 0320 rsb r3, r0, #32
- 8024e82: f8c9 3000 str.w r3, [r9]
- 8024e86: dc18 bgt.n 8024eba <__b2d+0x5e>
- 8024e88: 45b0 cmp r8, r6
- 8024e8a: f1c0 010b rsb r1, r0, #11
- 8024e8e: fa25 f701 lsr.w r7, r5, r1
- 8024e92: bf38 it cc
- 8024e94: f854 4c08 ldrcc.w r4, [r4, #-8]
- 8024e98: f047 577f orr.w r7, r7, #1069547520 ; 0x3fc00000
- 8024e9c: f447 1340 orr.w r3, r7, #3145728 ; 0x300000
- 8024ea0: bf34 ite cc
- 8024ea2: fa24 f101 lsrcc.w r1, r4, r1
- 8024ea6: 2100 movcs r1, #0
- 8024ea8: 3015 adds r0, #21
- 8024eaa: fa05 f500 lsl.w r5, r5, r0
- 8024eae: ea41 0205 orr.w r2, r1, r5
- 8024eb2: 4610 mov r0, r2
- 8024eb4: 4619 mov r1, r3
- 8024eb6: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
- 8024eba: 2100 movs r1, #0
- 8024ebc: 45b0 cmp r8, r6
- 8024ebe: d202 bcs.n 8024ec6 <__b2d+0x6a>
- 8024ec0: f854 1c08 ldr.w r1, [r4, #-8]
- 8024ec4: 1f37 subs r7, r6, #4
- 8024ec6: f1b0 040b subs.w r4, r0, #11
- 8024eca: d018 beq.n 8024efe <__b2d+0xa2>
- 8024ecc: fa05 f504 lsl.w r5, r5, r4
- 8024ed0: f1c0 002b rsb r0, r0, #43 ; 0x2b
- 8024ed4: 4547 cmp r7, r8
- 8024ed6: f045 557f orr.w r5, r5, #1069547520 ; 0x3fc00000
- 8024eda: fa21 f600 lsr.w r6, r1, r0
- 8024ede: f445 1540 orr.w r5, r5, #3145728 ; 0x300000
- 8024ee2: ea45 0306 orr.w r3, r5, r6
- 8024ee6: bf88 it hi
- 8024ee8: f857 5c04 ldrhi.w r5, [r7, #-4]
- 8024eec: fa01 f104 lsl.w r1, r1, r4
- 8024ef0: bf8c ite hi
- 8024ef2: fa25 f000 lsrhi.w r0, r5, r0
- 8024ef6: 2000 movls r0, #0
- 8024ef8: ea40 0201 orr.w r2, r0, r1
- 8024efc: e7d9 b.n 8024eb2 <__b2d+0x56>
- 8024efe: f045 557f orr.w r5, r5, #1069547520 ; 0x3fc00000
- 8024f02: 460a mov r2, r1
- 8024f04: f445 1340 orr.w r3, r5, #3145728 ; 0x300000
- 8024f08: e7d3 b.n 8024eb2 <__b2d+0x56>
- 8024f0a: bf00 nop
- 08024f0c <__d2b>:
- 8024f0c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- 8024f10: b083 sub sp, #12
- 8024f12: 2101 movs r1, #1
- 8024f14: 461d mov r5, r3
- 8024f16: 4614 mov r4, r2
- 8024f18: 9f0a ldr r7, [sp, #40] ; 0x28
- 8024f1a: f7ff fc67 bl 80247ec <_Balloc>
- 8024f1e: f3c5 560a ubfx r6, r5, #20, #11
- 8024f22: f025 437f bic.w r3, r5, #4278190080 ; 0xff000000
- 8024f26: 46a9 mov r9, r5
- 8024f28: f423 0370 bic.w r3, r3, #15728640 ; 0xf00000
- 8024f2c: 4680 mov r8, r0
- 8024f2e: b10e cbz r6, 8024f34 <__d2b+0x28>
- 8024f30: f443 1380 orr.w r3, r3, #1048576 ; 0x100000
- 8024f34: 9301 str r3, [sp, #4]
- 8024f36: 2c00 cmp r4, #0
- 8024f38: d024 beq.n 8024f84 <__d2b+0x78>
- 8024f3a: a802 add r0, sp, #8
- 8024f3c: f840 4d08 str.w r4, [r0, #-8]!
- 8024f40: 4668 mov r0, sp
- 8024f42: f7ff fd53 bl 80249ec <__lo0bits>
- 8024f46: 9b01 ldr r3, [sp, #4]
- 8024f48: 2800 cmp r0, #0
- 8024f4a: d131 bne.n 8024fb0 <__d2b+0xa4>
- 8024f4c: 9a00 ldr r2, [sp, #0]
- 8024f4e: f8c8 2014 str.w r2, [r8, #20]
- 8024f52: 2b00 cmp r3, #0
- 8024f54: bf0c ite eq
- 8024f56: 2401 moveq r4, #1
- 8024f58: 2402 movne r4, #2
- 8024f5a: f8c8 3018 str.w r3, [r8, #24]
- 8024f5e: f8c8 4010 str.w r4, [r8, #16]
- 8024f62: b9e6 cbnz r6, 8024f9e <__d2b+0x92>
- 8024f64: eb08 0384 add.w r3, r8, r4, lsl #2
- 8024f68: f2a0 4032 subw r0, r0, #1074 ; 0x432
- 8024f6c: 6038 str r0, [r7, #0]
- 8024f6e: 6918 ldr r0, [r3, #16]
- 8024f70: f7ff fd1e bl 80249b0 <__hi0bits>
- 8024f74: 9b0b ldr r3, [sp, #44] ; 0x2c
- 8024f76: ebc0 1044 rsb r0, r0, r4, lsl #5
- 8024f7a: 6018 str r0, [r3, #0]
- 8024f7c: 4640 mov r0, r8
- 8024f7e: b003 add sp, #12
- 8024f80: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
- 8024f84: a801 add r0, sp, #4
- 8024f86: f7ff fd31 bl 80249ec <__lo0bits>
- 8024f8a: 2301 movs r3, #1
- 8024f8c: 461c mov r4, r3
- 8024f8e: f8c8 3010 str.w r3, [r8, #16]
- 8024f92: 9b01 ldr r3, [sp, #4]
- 8024f94: f8c8 3014 str.w r3, [r8, #20]
- 8024f98: 3020 adds r0, #32
- 8024f9a: 2e00 cmp r6, #0
- 8024f9c: d0e2 beq.n 8024f64 <__d2b+0x58>
- 8024f9e: 9a0b ldr r2, [sp, #44] ; 0x2c
- 8024fa0: f2a6 4933 subw r9, r6, #1075 ; 0x433
- 8024fa4: f1c0 0335 rsb r3, r0, #53 ; 0x35
- 8024fa8: 4448 add r0, r9
- 8024faa: 6038 str r0, [r7, #0]
- 8024fac: 6013 str r3, [r2, #0]
- 8024fae: e7e5 b.n 8024f7c <__d2b+0x70>
- 8024fb0: f1c0 0120 rsb r1, r0, #32
- 8024fb4: 9a00 ldr r2, [sp, #0]
- 8024fb6: fa03 f101 lsl.w r1, r3, r1
- 8024fba: fa23 f300 lsr.w r3, r3, r0
- 8024fbe: 430a orrs r2, r1
- 8024fc0: 9301 str r3, [sp, #4]
- 8024fc2: f8c8 2014 str.w r2, [r8, #20]
- 8024fc6: e7c4 b.n 8024f52 <__d2b+0x46>
- 08024fc8 <__ratio>:
- 8024fc8: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- 8024fcc: b083 sub sp, #12
- 8024fce: 4688 mov r8, r1
- 8024fd0: 4669 mov r1, sp
- 8024fd2: 4606 mov r6, r0
- 8024fd4: f7ff ff42 bl 8024e5c <__b2d>
- 8024fd8: 460d mov r5, r1
- 8024fda: 4604 mov r4, r0
- 8024fdc: a901 add r1, sp, #4
- 8024fde: 4640 mov r0, r8
- 8024fe0: f7ff ff3c bl 8024e5c <__b2d>
- 8024fe4: 462f mov r7, r5
- 8024fe6: 460b mov r3, r1
- 8024fe8: 4602 mov r2, r0
- 8024fea: f8d8 1010 ldr.w r1, [r8, #16]
- 8024fee: 4699 mov r9, r3
- 8024ff0: 6930 ldr r0, [r6, #16]
- 8024ff2: 4626 mov r6, r4
- 8024ff4: 4690 mov r8, r2
- 8024ff6: ebc1 0e00 rsb lr, r1, r0
- 8024ffa: e89d 0003 ldmia.w sp, {r0, r1}
- 8024ffe: 1a40 subs r0, r0, r1
- 8025000: eb00 114e add.w r1, r0, lr, lsl #5
- 8025004: 2900 cmp r1, #0
- 8025006: bfc9 itett gt
- 8025008: eb05 5701 addgt.w r7, r5, r1, lsl #20
- 802500c: eba3 5901 suble.w r9, r3, r1, lsl #20
- 8025010: 4624 movgt r4, r4
- 8025012: 463d movgt r5, r7
- 8025014: bfdc itt le
- 8025016: 4612 movle r2, r2
- 8025018: 464b movle r3, r9
- 802501a: 4620 mov r0, r4
- 802501c: 4629 mov r1, r5
- 802501e: f7fb fbf9 bl 8020814 <__aeabi_ddiv>
- 8025022: b003 add sp, #12
- 8025024: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
- 08025028 <_mprec_log10>:
- 8025028: 2817 cmp r0, #23
- 802502a: b510 push {r4, lr}
- 802502c: 4604 mov r4, r0
- 802502e: dd0c ble.n 802504a <_mprec_log10+0x22>
- 8025030: 2100 movs r1, #0
- 8025032: 2000 movs r0, #0
- 8025034: f6c3 71f0 movt r1, #16368 ; 0x3ff0
- 8025038: 2300 movs r3, #0
- 802503a: 2200 movs r2, #0
- 802503c: f2c4 0324 movt r3, #16420 ; 0x4024
- 8025040: f7fb fabe bl 80205c0 <__aeabi_dmul>
- 8025044: 3c01 subs r4, #1
- 8025046: d1f7 bne.n 8025038 <_mprec_log10+0x10>
- 8025048: bd10 pop {r4, pc}
- 802504a: f249 7330 movw r3, #38704 ; 0x9730
- 802504e: f6c0 0303 movt r3, #2051 ; 0x803
- 8025052: eb03 03c0 add.w r3, r3, r0, lsl #3
- 8025056: e9d3 0104 ldrd r0, r1, [r3, #16]
- 802505a: bd10 pop {r4, pc}
- 0802505c <__copybits>:
- 802505c: b470 push {r4, r5, r6}
- 802505e: 3901 subs r1, #1
- 8025060: 6915 ldr r5, [r2, #16]
- 8025062: f102 0314 add.w r3, r2, #20
- 8025066: 114e asrs r6, r1, #5
- 8025068: 3601 adds r6, #1
- 802506a: eb02 0585 add.w r5, r2, r5, lsl #2
- 802506e: 3514 adds r5, #20
- 8025070: eb00 0686 add.w r6, r0, r6, lsl #2
- 8025074: 42ab cmp r3, r5
- 8025076: d20c bcs.n 8025092 <__copybits+0x36>
- 8025078: 4601 mov r1, r0
- 802507a: f853 4b04 ldr.w r4, [r3], #4
- 802507e: 429d cmp r5, r3
- 8025080: f841 4b04 str.w r4, [r1], #4
- 8025084: d8f9 bhi.n 802507a <__copybits+0x1e>
- 8025086: 1aab subs r3, r5, r2
- 8025088: 3b15 subs r3, #21
- 802508a: f023 0303 bic.w r3, r3, #3
- 802508e: 3304 adds r3, #4
- 8025090: 18c0 adds r0, r0, r3
- 8025092: 4286 cmp r6, r0
- 8025094: d904 bls.n 80250a0 <__copybits+0x44>
- 8025096: 2300 movs r3, #0
- 8025098: f840 3b04 str.w r3, [r0], #4
- 802509c: 4286 cmp r6, r0
- 802509e: d8fb bhi.n 8025098 <__copybits+0x3c>
- 80250a0: bc70 pop {r4, r5, r6}
- 80250a2: 4770 bx lr
- 080250a4 <__any_on>:
- 80250a4: b430 push {r4, r5}
- 80250a6: 114b asrs r3, r1, #5
- 80250a8: 6904 ldr r4, [r0, #16]
- 80250aa: f100 0214 add.w r2, r0, #20
- 80250ae: 429c cmp r4, r3
- 80250b0: bfb8 it lt
- 80250b2: 4623 movlt r3, r4
- 80250b4: db00 blt.n 80250b8 <__any_on+0x14>
- 80250b6: dc11 bgt.n 80250dc <__any_on+0x38>
- 80250b8: 3304 adds r3, #4
- 80250ba: eb00 0083 add.w r0, r0, r3, lsl #2
- 80250be: 1d03 adds r3, r0, #4
- 80250c0: 429a cmp r2, r3
- 80250c2: d218 bcs.n 80250f6 <__any_on+0x52>
- 80250c4: f853 3c04 ldr.w r3, [r3, #-4]
- 80250c8: b92b cbnz r3, 80250d6 <__any_on+0x32>
- 80250ca: 4282 cmp r2, r0
- 80250cc: d213 bcs.n 80250f6 <__any_on+0x52>
- 80250ce: f850 3d04 ldr.w r3, [r0, #-4]!
- 80250d2: 2b00 cmp r3, #0
- 80250d4: d0f9 beq.n 80250ca <__any_on+0x26>
- 80250d6: 2001 movs r0, #1
- 80250d8: bc30 pop {r4, r5}
- 80250da: 4770 bx lr
- 80250dc: f011 011f ands.w r1, r1, #31
- 80250e0: d0ea beq.n 80250b8 <__any_on+0x14>
- 80250e2: eb00 0483 add.w r4, r0, r3, lsl #2
- 80250e6: 6964 ldr r4, [r4, #20]
- 80250e8: fa24 f501 lsr.w r5, r4, r1
- 80250ec: fa05 f101 lsl.w r1, r5, r1
- 80250f0: 42a1 cmp r1, r4
- 80250f2: d1f0 bne.n 80250d6 <__any_on+0x32>
- 80250f4: e7e0 b.n 80250b8 <__any_on+0x14>
- 80250f6: 2000 movs r0, #0
- 80250f8: e7ee b.n 80250d8 <__any_on+0x34>
- 80250fa: bf00 nop
- 080250fc <_sbrk_r>:
- 80250fc: b538 push {r3, r4, r5, lr}
- 80250fe: f643 1448 movw r4, #14664 ; 0x3948
- 8025102: f2c2 0401 movt r4, #8193 ; 0x2001
- 8025106: 4605 mov r5, r0
- 8025108: 4608 mov r0, r1
- 802510a: 2300 movs r3, #0
- 802510c: 6023 str r3, [r4, #0]
- 802510e: f014 fa33 bl 8039578 <_sbrk>
- 8025112: 1c43 adds r3, r0, #1
- 8025114: d000 beq.n 8025118 <_sbrk_r+0x1c>
- 8025116: bd38 pop {r3, r4, r5, pc}
- 8025118: 6823 ldr r3, [r4, #0]
- 802511a: 2b00 cmp r3, #0
- 802511c: d0fb beq.n 8025116 <_sbrk_r+0x1a>
- 802511e: 602b str r3, [r5, #0]
- 8025120: bd38 pop {r3, r4, r5, pc}
- 8025122: bf00 nop
- 08025124 <strchr>:
- 8025124: b2c9 uxtb r1, r1
- 8025126: b4f0 push {r4, r5, r6, r7}
- 8025128: 2900 cmp r1, #0
- 802512a: d04b beq.n 80251c4 <strchr+0xa0>
- 802512c: 0783 lsls r3, r0, #30
- 802512e: d00f beq.n 8025150 <strchr+0x2c>
- 8025130: 7803 ldrb r3, [r0, #0]
- 8025132: 2b00 cmp r3, #0
- 8025134: d073 beq.n 802521e <strchr+0xfa>
- 8025136: 4299 cmp r1, r3
- 8025138: d042 beq.n 80251c0 <strchr+0x9c>
- 802513a: 1c43 adds r3, r0, #1
- 802513c: e005 b.n 802514a <strchr+0x26>
- 802513e: f813 2b01 ldrb.w r2, [r3], #1
- 8025142: 2a00 cmp r2, #0
- 8025144: d03b beq.n 80251be <strchr+0x9a>
- 8025146: 4291 cmp r1, r2
- 8025148: d03a beq.n 80251c0 <strchr+0x9c>
- 802514a: 079a lsls r2, r3, #30
- 802514c: 4618 mov r0, r3
- 802514e: d1f6 bne.n 802513e <strchr+0x1a>
- 8025150: 6803 ldr r3, [r0, #0]
- 8025152: ea41 2701 orr.w r7, r1, r1, lsl #8
- 8025156: f1a3 3201 sub.w r2, r3, #16843009 ; 0x1010101
- 802515a: ea47 4707 orr.w r7, r7, r7, lsl #16
- 802515e: ea22 0203 bic.w r2, r2, r3
- 8025162: f012 3f80 tst.w r2, #2155905152 ; 0x80808080
- 8025166: d11c bne.n 80251a2 <strchr+0x7e>
- 8025168: 407b eors r3, r7
- 802516a: f1a3 3201 sub.w r2, r3, #16843009 ; 0x1010101
- 802516e: ea22 0303 bic.w r3, r2, r3
- 8025172: f013 3f80 tst.w r3, #2155905152 ; 0x80808080
- 8025176: d114 bne.n 80251a2 <strchr+0x7e>
- 8025178: 1d02 adds r2, r0, #4
- 802517a: e002 b.n 8025182 <strchr+0x5e>
- 802517c: f014 3f80 tst.w r4, #2155905152 ; 0x80808080
- 8025180: d10f bne.n 80251a2 <strchr+0x7e>
- 8025182: 4610 mov r0, r2
- 8025184: f852 3b04 ldr.w r3, [r2], #4
- 8025188: f1a3 3601 sub.w r6, r3, #16843009 ; 0x1010101
- 802518c: ea87 0403 eor.w r4, r7, r3
- 8025190: ea26 0303 bic.w r3, r6, r3
- 8025194: f1a4 3501 sub.w r5, r4, #16843009 ; 0x1010101
- 8025198: f013 3f80 tst.w r3, #2155905152 ; 0x80808080
- 802519c: ea25 0404 bic.w r4, r5, r4
- 80251a0: d0ec beq.n 802517c <strchr+0x58>
- 80251a2: 7803 ldrb r3, [r0, #0]
- 80251a4: 2b00 cmp r3, #0
- 80251a6: d03a beq.n 802521e <strchr+0xfa>
- 80251a8: 4299 cmp r1, r3
- 80251aa: d009 beq.n 80251c0 <strchr+0x9c>
- 80251ac: 1c43 adds r3, r0, #1
- 80251ae: e001 b.n 80251b4 <strchr+0x90>
- 80251b0: 4291 cmp r1, r2
- 80251b2: d005 beq.n 80251c0 <strchr+0x9c>
- 80251b4: 4618 mov r0, r3
- 80251b6: f813 2b01 ldrb.w r2, [r3], #1
- 80251ba: 2a00 cmp r2, #0
- 80251bc: d1f8 bne.n 80251b0 <strchr+0x8c>
- 80251be: 4610 mov r0, r2
- 80251c0: bcf0 pop {r4, r5, r6, r7}
- 80251c2: 4770 bx lr
- 80251c4: 0781 lsls r1, r0, #30
- 80251c6: d00d beq.n 80251e4 <strchr+0xc0>
- 80251c8: 7803 ldrb r3, [r0, #0]
- 80251ca: 2b00 cmp r3, #0
- 80251cc: d0f8 beq.n 80251c0 <strchr+0x9c>
- 80251ce: 1c43 adds r3, r0, #1
- 80251d0: e002 b.n 80251d8 <strchr+0xb4>
- 80251d2: 7802 ldrb r2, [r0, #0]
- 80251d4: 2a00 cmp r2, #0
- 80251d6: d0f3 beq.n 80251c0 <strchr+0x9c>
- 80251d8: f013 0f03 tst.w r3, #3
- 80251dc: 4618 mov r0, r3
- 80251de: f103 0301 add.w r3, r3, #1
- 80251e2: d1f6 bne.n 80251d2 <strchr+0xae>
- 80251e4: 6803 ldr r3, [r0, #0]
- 80251e6: f1a3 3201 sub.w r2, r3, #16843009 ; 0x1010101
- 80251ea: ea22 0303 bic.w r3, r2, r3
- 80251ee: f013 3f80 tst.w r3, #2155905152 ; 0x80808080
- 80251f2: d10a bne.n 802520a <strchr+0xe6>
- 80251f4: 1d02 adds r2, r0, #4
- 80251f6: 4610 mov r0, r2
- 80251f8: f852 1b04 ldr.w r1, [r2], #4
- 80251fc: f1a1 3401 sub.w r4, r1, #16843009 ; 0x1010101
- 8025200: ea24 0101 bic.w r1, r4, r1
- 8025204: f011 3f80 tst.w r1, #2155905152 ; 0x80808080
- 8025208: d0f5 beq.n 80251f6 <strchr+0xd2>
- 802520a: 7803 ldrb r3, [r0, #0]
- 802520c: 2b00 cmp r3, #0
- 802520e: d0d7 beq.n 80251c0 <strchr+0x9c>
- 8025210: 1c43 adds r3, r0, #1
- 8025212: 4618 mov r0, r3
- 8025214: 3301 adds r3, #1
- 8025216: 7802 ldrb r2, [r0, #0]
- 8025218: 2a00 cmp r2, #0
- 802521a: d1fa bne.n 8025212 <strchr+0xee>
- 802521c: e7d0 b.n 80251c0 <strchr+0x9c>
- 802521e: 4618 mov r0, r3
- 8025220: e7ce b.n 80251c0 <strchr+0x9c>
- 8025222: bf00 nop
- 08025224 <_calloc_r>:
- 8025224: b510 push {r4, lr}
- 8025226: fb01 f102 mul.w r1, r1, r2
- 802522a: f7fe ffc5 bl 80241b8 <_malloc_r>
- 802522e: 4604 mov r4, r0
- 8025230: b170 cbz r0, 8025250 <_calloc_r+0x2c>
- 8025232: f850 2c04 ldr.w r2, [r0, #-4]
- 8025236: f022 0203 bic.w r2, r2, #3
- 802523a: 3a04 subs r2, #4
- 802523c: 2a24 cmp r2, #36 ; 0x24
- 802523e: d81c bhi.n 802527a <_calloc_r+0x56>
- 8025240: 2a13 cmp r2, #19
- 8025242: bf98 it ls
- 8025244: 4603 movls r3, r0
- 8025246: d805 bhi.n 8025254 <_calloc_r+0x30>
- 8025248: 2200 movs r2, #0
- 802524a: 601a str r2, [r3, #0]
- 802524c: 605a str r2, [r3, #4]
- 802524e: 609a str r2, [r3, #8]
- 8025250: 4620 mov r0, r4
- 8025252: bd10 pop {r4, pc}
- 8025254: 2100 movs r1, #0
- 8025256: 2a1b cmp r2, #27
- 8025258: 6001 str r1, [r0, #0]
- 802525a: bf98 it ls
- 802525c: f100 0308 addls.w r3, r0, #8
- 8025260: 6041 str r1, [r0, #4]
- 8025262: d9f1 bls.n 8025248 <_calloc_r+0x24>
- 8025264: 2a24 cmp r2, #36 ; 0x24
- 8025266: 6081 str r1, [r0, #8]
- 8025268: 60c1 str r1, [r0, #12]
- 802526a: bf11 iteee ne
- 802526c: f100 0310 addne.w r3, r0, #16
- 8025270: 6101 streq r1, [r0, #16]
- 8025272: f100 0318 addeq.w r3, r0, #24
- 8025276: 6141 streq r1, [r0, #20]
- 8025278: e7e6 b.n 8025248 <_calloc_r+0x24>
- 802527a: 2100 movs r1, #0
- 802527c: f7fc fc40 bl 8021b00 <memset>
- 8025280: 4620 mov r0, r4
- 8025282: bd10 pop {r4, pc}
- 08025284 <fabs>:
- 8025284: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000
- 8025288: 4770 bx lr
- 802528a: bf00 nop
- 0802528c <NVIC_PriorityGroupConfig>:
- {
- /* Check the parameters */
- assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
-
- /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
- SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
- 802528c: f040 60bf orr.w r0, r0, #100139008 ; 0x5f80000
- 8025290: 4b02 ldr r3, [pc, #8] ; (802529c <NVIC_PriorityGroupConfig+0x10>)
- 8025292: f440 3000 orr.w r0, r0, #131072 ; 0x20000
- 8025296: 60d8 str r0, [r3, #12]
- 8025298: 4770 bx lr
- 802529a: bf00 nop
- 802529c: e000ed00 .word 0xe000ed00
- 080252a0 <NVIC_Init>:
- /* Check the parameters */
- assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
- assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));
- assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
-
- if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
- 80252a0: 78c3 ldrb r3, [r0, #3]
- 80252a2: b30b cbz r3, 80252e8 <NVIC_Init+0x48>
- {
- /* Compute the Corresponding IRQ Priority --------------------------------*/
- tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
- 80252a4: 4b16 ldr r3, [pc, #88] ; (8025300 <NVIC_Init+0x60>)
- tmppre = (0x4 - tmppriority);
- tmpsub = tmpsub >> tmppriority;
- tmppriority = NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
- 80252a6: 7841 ldrb r1, [r0, #1]
- assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
-
- if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
- {
- /* Compute the Corresponding IRQ Priority --------------------------------*/
- tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
- 80252a8: 68db ldr r3, [r3, #12]
- 80252aa: 43db mvns r3, r3
- 80252ac: f3c3 2302 ubfx r3, r3, #8, #3
- tmppre = (0x4 - tmppriority);
- 80252b0: f1c3 0204 rsb r2, r3, #4
- tmpsub = tmpsub >> tmppriority;
- tmppriority = NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
- 80252b4: b2d2 uxtb r2, r2
- 80252b6: fa01 f202 lsl.w r2, r1, r2
- if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
- {
- /* Compute the Corresponding IRQ Priority --------------------------------*/
- tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
- tmppre = (0x4 - tmppriority);
- tmpsub = tmpsub >> tmppriority;
- 80252ba: 210f movs r1, #15
- 80252bc: fa41 f303 asr.w r3, r1, r3
- tmppriority = NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
- tmppriority |= (uint8_t)(NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub);
- 80252c0: 7881 ldrb r1, [r0, #2]
- /* Compute the Corresponding IRQ Priority --------------------------------*/
- tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
- tmppre = (0x4 - tmppriority);
- tmpsub = tmpsub >> tmppriority;
- tmppriority = NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
- 80252c2: b2d2 uxtb r2, r2
- tmppriority |= (uint8_t)(NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub);
- 80252c4: 400b ands r3, r1
- 80252c6: 431a orrs r2, r3
-
- tmppriority = tmppriority << 0x04;
-
- NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
- 80252c8: 7803 ldrb r3, [r0, #0]
- 80252ca: f103 4360 add.w r3, r3, #3758096384 ; 0xe0000000
- 80252ce: f503 4361 add.w r3, r3, #57600 ; 0xe100
- tmpsub = tmpsub >> tmppriority;
- tmppriority = NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
- tmppriority |= (uint8_t)(NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub);
-
- tmppriority = tmppriority << 0x04;
- 80252d2: 0112 lsls r2, r2, #4
-
- NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
- 80252d4: f883 2300 strb.w r2, [r3, #768] ; 0x300
-
- /* Enable the Selected IRQ Channels --------------------------------------*/
- NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
- 80252d8: 7803 ldrb r3, [r0, #0]
- (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
- 80252da: 2201 movs r2, #1
- tmppriority = tmppriority << 0x04;
-
- NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
-
- /* Enable the Selected IRQ Channels --------------------------------------*/
- NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
- 80252dc: 0959 lsrs r1, r3, #5
- (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
- 80252de: f003 031f and.w r3, r3, #31
- 80252e2: fa02 f303 lsl.w r3, r2, r3
- 80252e6: e007 b.n 80252f8 <NVIC_Init+0x58>
- }
- else
- {
- /* Disable the Selected IRQ Channels -------------------------------------*/
- NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
- 80252e8: 7803 ldrb r3, [r0, #0]
- (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
- 80252ea: 2201 movs r2, #1
- (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
- }
- else
- {
- /* Disable the Selected IRQ Channels -------------------------------------*/
- NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
- 80252ec: 0959 lsrs r1, r3, #5
- (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
- 80252ee: f003 031f and.w r3, r3, #31
- 80252f2: fa02 f303 lsl.w r3, r2, r3
- (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
- }
- else
- {
- /* Disable the Selected IRQ Channels -------------------------------------*/
- NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
- 80252f6: 3120 adds r1, #32
- 80252f8: 4a02 ldr r2, [pc, #8] ; (8025304 <NVIC_Init+0x64>)
- 80252fa: f842 3021 str.w r3, [r2, r1, lsl #2]
- 80252fe: 4770 bx lr
- 8025300: e000ed00 .word 0xe000ed00
- 8025304: e000e100 .word 0xe000e100
- 08025308 <NVIC_SetVectorTable>:
- {
- /* Check the parameters */
- assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
- assert_param(IS_NVIC_OFFSET(Offset));
-
- SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);
- 8025308: f021 4160 bic.w r1, r1, #3758096384 ; 0xe0000000
- 802530c: f021 017f bic.w r1, r1, #127 ; 0x7f
- 8025310: 4b01 ldr r3, [pc, #4] ; (8025318 <NVIC_SetVectorTable+0x10>)
- 8025312: 4308 orrs r0, r1
- 8025314: 6098 str r0, [r3, #8]
- 8025316: 4770 bx lr
- 8025318: e000ed00 .word 0xe000ed00
- 0802531c <CRC_ResetDR>:
- * @retval None
- */
- void CRC_ResetDR(void)
- {
- /* Reset CRC generator */
- CRC->CR = CRC_CR_RESET;
- 802531c: 4b01 ldr r3, [pc, #4] ; (8025324 <CRC_ResetDR+0x8>)
- 802531e: 2201 movs r2, #1
- 8025320: 609a str r2, [r3, #8]
- 8025322: 4770 bx lr
- 8025324: 40023000 .word 0x40023000
- 08025328 <CRC_CalcBlockCRC>:
- * @param pBuffer: pointer to the buffer containing the data to be computed
- * @param BufferLength: length of the buffer to be computed
- * @retval 32-bit CRC
- */
- uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength)
- {
- 8025328: b510 push {r4, lr}
- uint32_t index = 0;
-
- for(index = 0; index < BufferLength; index++)
- 802532a: 2300 movs r3, #0
- 802532c: 4c05 ldr r4, [pc, #20] ; (8025344 <CRC_CalcBlockCRC+0x1c>)
- 802532e: e003 b.n 8025338 <CRC_CalcBlockCRC+0x10>
- {
- CRC->DR = pBuffer[index];
- 8025330: f850 2023 ldr.w r2, [r0, r3, lsl #2]
- */
- uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength)
- {
- uint32_t index = 0;
-
- for(index = 0; index < BufferLength; index++)
- 8025334: 3301 adds r3, #1
- {
- CRC->DR = pBuffer[index];
- 8025336: 6022 str r2, [r4, #0]
- */
- uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength)
- {
- uint32_t index = 0;
-
- for(index = 0; index < BufferLength; index++)
- 8025338: 428b cmp r3, r1
- 802533a: d1f9 bne.n 8025330 <CRC_CalcBlockCRC+0x8>
- {
- CRC->DR = pBuffer[index];
- }
- return (CRC->DR);
- 802533c: 4b01 ldr r3, [pc, #4] ; (8025344 <CRC_CalcBlockCRC+0x1c>)
- 802533e: 6818 ldr r0, [r3, #0]
- }
- 8025340: bd10 pop {r4, pc}
- 8025342: bf00 nop
- 8025344: 40023000 .word 0x40023000
- 08025348 <FLASH_Unlock>:
- * @param None
- * @retval None
- */
- void FLASH_Unlock(void)
- {
- if((FLASH->CR & FLASH_CR_LOCK) != RESET)
- 8025348: 4b04 ldr r3, [pc, #16] ; (802535c <FLASH_Unlock+0x14>)
- 802534a: 691a ldr r2, [r3, #16]
- 802534c: 2a00 cmp r2, #0
- 802534e: da04 bge.n 802535a <FLASH_Unlock+0x12>
- {
- /* Authorize the FLASH Registers access */
- FLASH->KEYR = FLASH_KEY1;
- 8025350: 4a03 ldr r2, [pc, #12] ; (8025360 <FLASH_Unlock+0x18>)
- 8025352: 605a str r2, [r3, #4]
- FLASH->KEYR = FLASH_KEY2;
- 8025354: f102 3288 add.w r2, r2, #2290649224 ; 0x88888888
- 8025358: 605a str r2, [r3, #4]
- 802535a: 4770 bx lr
- 802535c: 40023c00 .word 0x40023c00
- 8025360: 45670123 .word 0x45670123
- 08025364 <FLASH_Lock>:
- * @retval None
- */
- void FLASH_Lock(void)
- {
- /* Set the LOCK Bit to lock the FLASH Registers access */
- FLASH->CR |= FLASH_CR_LOCK;
- 8025364: 4b02 ldr r3, [pc, #8] ; (8025370 <FLASH_Lock+0xc>)
- 8025366: 691a ldr r2, [r3, #16]
- 8025368: f042 4200 orr.w r2, r2, #2147483648 ; 0x80000000
- 802536c: 611a str r2, [r3, #16]
- 802536e: 4770 bx lr
- 8025370: 40023c00 .word 0x40023c00
- 08025374 <FLASH_ClearFlag>:
- {
- /* Check the parameters */
- assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG));
-
- /* Clear the flags */
- FLASH->SR = FLASH_FLAG;
- 8025374: 4b01 ldr r3, [pc, #4] ; (802537c <FLASH_ClearFlag+0x8>)
- 8025376: 60d8 str r0, [r3, #12]
- 8025378: 4770 bx lr
- 802537a: bf00 nop
- 802537c: 40023c00 .word 0x40023c00
- 08025380 <FLASH_GetStatus>:
- */
- FLASH_Status FLASH_GetStatus(void)
- {
- FLASH_Status flashstatus = FLASH_COMPLETE;
-
- if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY)
- 8025380: 4b0b ldr r3, [pc, #44] ; (80253b0 <FLASH_GetStatus+0x30>)
- 8025382: 68da ldr r2, [r3, #12]
- 8025384: 03d0 lsls r0, r2, #15
- 8025386: d40d bmi.n 80253a4 <FLASH_GetStatus+0x24>
- {
- flashstatus = FLASH_BUSY;
- }
- else
- {
- if((FLASH->SR & FLASH_FLAG_WRPERR) != (uint32_t)0x00)
- 8025388: 68da ldr r2, [r3, #12]
- 802538a: 06d1 lsls r1, r2, #27
- 802538c: d40c bmi.n 80253a8 <FLASH_GetStatus+0x28>
- {
- flashstatus = FLASH_ERROR_WRP;
- }
- else
- {
- if((FLASH->SR & (uint32_t)0xEF) != (uint32_t)0x00)
- 802538e: 68da ldr r2, [r3, #12]
- 8025390: f012 0fef tst.w r2, #239 ; 0xef
- 8025394: d10a bne.n 80253ac <FLASH_GetStatus+0x2c>
- {
- flashstatus = FLASH_ERROR_PROGRAM;
- }
- else
- {
- if((FLASH->SR & FLASH_FLAG_OPERR) != (uint32_t)0x00)
- 8025396: 68db ldr r3, [r3, #12]
- 8025398: f013 0f02 tst.w r3, #2
- {
- flashstatus = FLASH_ERROR_OPERATION;
- 802539c: bf0c ite eq
- 802539e: 2008 moveq r0, #8
- 80253a0: 2007 movne r0, #7
- 80253a2: 4770 bx lr
- {
- FLASH_Status flashstatus = FLASH_COMPLETE;
-
- if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY)
- {
- flashstatus = FLASH_BUSY;
- 80253a4: 2001 movs r0, #1
- 80253a6: 4770 bx lr
- }
- else
- {
- if((FLASH->SR & FLASH_FLAG_WRPERR) != (uint32_t)0x00)
- {
- flashstatus = FLASH_ERROR_WRP;
- 80253a8: 2005 movs r0, #5
- 80253aa: 4770 bx lr
- }
- else
- {
- if((FLASH->SR & (uint32_t)0xEF) != (uint32_t)0x00)
- {
- flashstatus = FLASH_ERROR_PROGRAM;
- 80253ac: 2006 movs r0, #6
- }
- }
- }
- /* Return the FLASH Status */
- return flashstatus;
- }
- 80253ae: 4770 bx lr
- 80253b0: 40023c00 .word 0x40023c00
- 080253b4 <FLASH_WaitForLastOperation>:
- * @param None
- * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM,
- * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE.
- */
- FLASH_Status FLASH_WaitForLastOperation(void)
- {
- 80253b4: b507 push {r0, r1, r2, lr}
- __IO FLASH_Status status = FLASH_COMPLETE;
- 80253b6: 2308 movs r3, #8
- 80253b8: f88d 3007 strb.w r3, [sp, #7]
- /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.
- Even if the FLASH operation fails, the BUSY flag will be reset and an error
- flag will be set */
- while(status == FLASH_BUSY)
- {
- status = FLASH_GetStatus();
- 80253bc: f7ff ffe0 bl 8025380 <FLASH_GetStatus>
- 80253c0: f88d 0007 strb.w r0, [sp, #7]
- status = FLASH_GetStatus();
- /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.
- Even if the FLASH operation fails, the BUSY flag will be reset and an error
- flag will be set */
- while(status == FLASH_BUSY)
- 80253c4: f89d 3007 ldrb.w r3, [sp, #7]
- 80253c8: 2b01 cmp r3, #1
- 80253ca: d0f7 beq.n 80253bc <FLASH_WaitForLastOperation+0x8>
- {
- status = FLASH_GetStatus();
- }
- /* Return the operation status */
- return status;
- 80253cc: f89d 0007 ldrb.w r0, [sp, #7]
- }
- 80253d0: bd0e pop {r1, r2, r3, pc}
- 80253d2: 0000 movs r0, r0
- 080253d4 <FLASH_ProgramByte>:
- * @param Data: specifies the data to be programmed.
- * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM,
- * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE.
- */
- FLASH_Status FLASH_ProgramByte(uint32_t Address, uint8_t Data)
- {
- 80253d4: b570 push {r4, r5, r6, lr}
- 80253d6: 4605 mov r5, r0
- 80253d8: 460e mov r6, r1
- /* Check the parameters */
- assert_param(IS_FLASH_ADDRESS(Address));
- /* Wait for last operation to be completed */
- status = FLASH_WaitForLastOperation();
- 80253da: f7ff ffeb bl 80253b4 <FLASH_WaitForLastOperation>
-
- if(status == FLASH_COMPLETE)
- 80253de: 2808 cmp r0, #8
- 80253e0: d111 bne.n 8025406 <FLASH_ProgramByte+0x32>
- {
- /* if the previous operation is completed, proceed to program the new data */
- FLASH->CR &= CR_PSIZE_MASK;
- 80253e2: 4c09 ldr r4, [pc, #36] ; (8025408 <FLASH_ProgramByte+0x34>)
- 80253e4: 6923 ldr r3, [r4, #16]
- 80253e6: f423 7340 bic.w r3, r3, #768 ; 0x300
- 80253ea: 6123 str r3, [r4, #16]
- FLASH->CR |= FLASH_PSIZE_BYTE;
- 80253ec: 6923 ldr r3, [r4, #16]
- 80253ee: 6123 str r3, [r4, #16]
- FLASH->CR |= FLASH_CR_PG;
- 80253f0: 6923 ldr r3, [r4, #16]
- 80253f2: f043 0301 orr.w r3, r3, #1
- 80253f6: 6123 str r3, [r4, #16]
-
- *(__IO uint8_t*)Address = Data;
- 80253f8: 702e strb r6, [r5, #0]
-
- /* Wait for last operation to be completed */
- status = FLASH_WaitForLastOperation();
- 80253fa: f7ff ffdb bl 80253b4 <FLASH_WaitForLastOperation>
- /* if the program operation is completed, disable the PG Bit */
- FLASH->CR &= (~FLASH_CR_PG);
- 80253fe: 6923 ldr r3, [r4, #16]
- 8025400: f023 0301 bic.w r3, r3, #1
- 8025404: 6123 str r3, [r4, #16]
- }
- /* Return the Program Status */
- return status;
- }
- 8025406: bd70 pop {r4, r5, r6, pc}
- 8025408: 40023c00 .word 0x40023c00
- 0802540c <FLASH_ProgramWord>:
- * @param Data: specifies the data to be programmed.
- * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM,
- * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE.
- */
- FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data)
- {
- 802540c: b570 push {r4, r5, r6, lr}
- 802540e: 4605 mov r5, r0
- 8025410: 460e mov r6, r1
- /* Check the parameters */
- assert_param(IS_FLASH_ADDRESS(Address));
- /* Wait for last operation to be completed */
- status = FLASH_WaitForLastOperation();
- 8025412: f7ff ffcf bl 80253b4 <FLASH_WaitForLastOperation>
-
- if(status == FLASH_COMPLETE)
- 8025416: 2808 cmp r0, #8
- 8025418: d113 bne.n 8025442 <FLASH_ProgramWord+0x36>
- {
- /* if the previous operation is completed, proceed to program the new data */
- FLASH->CR &= CR_PSIZE_MASK;
- 802541a: 4c0a ldr r4, [pc, #40] ; (8025444 <FLASH_ProgramWord+0x38>)
- 802541c: 6923 ldr r3, [r4, #16]
- 802541e: f423 7340 bic.w r3, r3, #768 ; 0x300
- 8025422: 6123 str r3, [r4, #16]
- FLASH->CR |= FLASH_PSIZE_WORD;
- 8025424: 6923 ldr r3, [r4, #16]
- 8025426: f443 7300 orr.w r3, r3, #512 ; 0x200
- 802542a: 6123 str r3, [r4, #16]
- FLASH->CR |= FLASH_CR_PG;
- 802542c: 6923 ldr r3, [r4, #16]
- 802542e: f043 0301 orr.w r3, r3, #1
- 8025432: 6123 str r3, [r4, #16]
-
- *(__IO uint32_t*)Address = Data;
- 8025434: 602e str r6, [r5, #0]
-
- /* Wait for last operation to be completed */
- status = FLASH_WaitForLastOperation();
- 8025436: f7ff ffbd bl 80253b4 <FLASH_WaitForLastOperation>
- /* if the program operation is completed, disable the PG Bit */
- FLASH->CR &= (~FLASH_CR_PG);
- 802543a: 6923 ldr r3, [r4, #16]
- 802543c: f023 0301 bic.w r3, r3, #1
- 8025440: 6123 str r3, [r4, #16]
- }
- /* Return the Program Status */
- return status;
- }
- 8025442: bd70 pop {r4, r5, r6, pc}
- 8025444: 40023c00 .word 0x40023c00
- 08025448 <FLASH_EraseSector>:
- *
- * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PROGRAM,
- * FLASH_ERROR_WRP, FLASH_ERROR_OPERATION or FLASH_COMPLETE.
- */
- FLASH_Status FLASH_EraseSector(uint32_t FLASH_Sector, uint8_t VoltageRange)
- {
- 8025448: b570 push {r4, r5, r6, lr}
- 802544a: 4606 mov r6, r0
- /* Check the parameters */
- assert_param(IS_FLASH_SECTOR(FLASH_Sector));
- assert_param(IS_VOLTAGERANGE(VoltageRange));
-
- if(VoltageRange == VoltageRange_1)
- 802544c: b141 cbz r1, 8025460 <FLASH_EraseSector+0x18>
- {
- tmp_psize = FLASH_PSIZE_BYTE;
- }
- else if(VoltageRange == VoltageRange_2)
- 802544e: 2901 cmp r1, #1
- 8025450: d008 beq.n 8025464 <FLASH_EraseSector+0x1c>
- {
- tmp_psize = FLASH_PSIZE_HALF_WORD;
- }
- else if(VoltageRange == VoltageRange_3)
- {
- tmp_psize = FLASH_PSIZE_WORD;
- 8025452: 2902 cmp r1, #2
- 8025454: bf14 ite ne
- 8025456: f44f 7540 movne.w r5, #768 ; 0x300
- 802545a: f44f 7500 moveq.w r5, #512 ; 0x200
- 802545e: e003 b.n 8025468 <FLASH_EraseSector+0x20>
- assert_param(IS_FLASH_SECTOR(FLASH_Sector));
- assert_param(IS_VOLTAGERANGE(VoltageRange));
-
- if(VoltageRange == VoltageRange_1)
- {
- tmp_psize = FLASH_PSIZE_BYTE;
- 8025460: 460d mov r5, r1
- 8025462: e001 b.n 8025468 <FLASH_EraseSector+0x20>
- }
- else if(VoltageRange == VoltageRange_2)
- {
- tmp_psize = FLASH_PSIZE_HALF_WORD;
- 8025464: f44f 7580 mov.w r5, #256 ; 0x100
- else
- {
- tmp_psize = FLASH_PSIZE_DOUBLE_WORD;
- }
- /* Wait for last operation to be completed */
- status = FLASH_WaitForLastOperation();
- 8025468: f7ff ffa4 bl 80253b4 <FLASH_WaitForLastOperation>
-
- if(status == FLASH_COMPLETE)
- 802546c: 2808 cmp r0, #8
- 802546e: d11e bne.n 80254ae <FLASH_EraseSector+0x66>
- {
- /* if the previous operation is completed, proceed to erase the sector */
- FLASH->CR &= CR_PSIZE_MASK;
- 8025470: 4c0f ldr r4, [pc, #60] ; (80254b0 <FLASH_EraseSector+0x68>)
- 8025472: 6923 ldr r3, [r4, #16]
- 8025474: f423 7340 bic.w r3, r3, #768 ; 0x300
- 8025478: 6123 str r3, [r4, #16]
- FLASH->CR |= tmp_psize;
- 802547a: 6921 ldr r1, [r4, #16]
- 802547c: 430d orrs r5, r1
- 802547e: 6125 str r5, [r4, #16]
- FLASH->CR &= SECTOR_MASK;
- 8025480: 6923 ldr r3, [r4, #16]
- 8025482: f023 03f8 bic.w r3, r3, #248 ; 0xf8
- 8025486: 6123 str r3, [r4, #16]
- FLASH->CR |= FLASH_CR_SER | FLASH_Sector;
- 8025488: 6923 ldr r3, [r4, #16]
- 802548a: f043 0302 orr.w r3, r3, #2
- 802548e: 431e orrs r6, r3
- 8025490: 6126 str r6, [r4, #16]
- FLASH->CR |= FLASH_CR_STRT;
- 8025492: 6923 ldr r3, [r4, #16]
- 8025494: f443 3380 orr.w r3, r3, #65536 ; 0x10000
- 8025498: 6123 str r3, [r4, #16]
-
- /* Wait for last operation to be completed */
- status = FLASH_WaitForLastOperation();
- 802549a: f7ff ff8b bl 80253b4 <FLASH_WaitForLastOperation>
-
- /* if the erase operation is completed, disable the SER Bit */
- FLASH->CR &= (~FLASH_CR_SER);
- 802549e: 6923 ldr r3, [r4, #16]
- 80254a0: f023 0302 bic.w r3, r3, #2
- 80254a4: 6123 str r3, [r4, #16]
- FLASH->CR &= SECTOR_MASK;
- 80254a6: 6923 ldr r3, [r4, #16]
- 80254a8: f023 03f8 bic.w r3, r3, #248 ; 0xf8
- 80254ac: 6123 str r3, [r4, #16]
- }
- /* Return the Erase Status */
- return status;
- }
- 80254ae: bd70 pop {r4, r5, r6, pc}
- 80254b0: 40023c00 .word 0x40023c00
- 080254b4 <GPIO_DeInit>:
- * @note By default, The GPIO pins are configured in input floating mode (except JTAG pins).
- * @param GPIOx: where x can be (A..I) to select the GPIO peripheral.
- * @retval None
- */
- void GPIO_DeInit(GPIO_TypeDef* GPIOx)
- {
- 80254b4: b508 push {r3, lr}
- /* Check the parameters */
- assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
- if (GPIOx == GPIOA)
- 80254b6: 4b2c ldr r3, [pc, #176] ; (8025568 <GPIO_DeInit+0xb4>)
- 80254b8: 4298 cmp r0, r3
- 80254ba: d105 bne.n 80254c8 <GPIO_DeInit+0x14>
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, ENABLE);
- 80254bc: 2001 movs r0, #1
- 80254be: 4601 mov r1, r0
- 80254c0: f000 f974 bl 80257ac <RCC_AHB1PeriphResetCmd>
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, DISABLE);
- 80254c4: 2001 movs r0, #1
- 80254c6: e048 b.n 802555a <GPIO_DeInit+0xa6>
- }
- else if (GPIOx == GPIOB)
- 80254c8: 4b28 ldr r3, [pc, #160] ; (802556c <GPIO_DeInit+0xb8>)
- 80254ca: 4298 cmp r0, r3
- 80254cc: d105 bne.n 80254da <GPIO_DeInit+0x26>
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, ENABLE);
- 80254ce: 2002 movs r0, #2
- 80254d0: 2101 movs r1, #1
- 80254d2: f000 f96b bl 80257ac <RCC_AHB1PeriphResetCmd>
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, DISABLE);
- 80254d6: 2002 movs r0, #2
- 80254d8: e03f b.n 802555a <GPIO_DeInit+0xa6>
- }
- else if (GPIOx == GPIOC)
- 80254da: 4b25 ldr r3, [pc, #148] ; (8025570 <GPIO_DeInit+0xbc>)
- 80254dc: 4298 cmp r0, r3
- 80254de: d105 bne.n 80254ec <GPIO_DeInit+0x38>
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, ENABLE);
- 80254e0: 2004 movs r0, #4
- 80254e2: 2101 movs r1, #1
- 80254e4: f000 f962 bl 80257ac <RCC_AHB1PeriphResetCmd>
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, DISABLE);
- 80254e8: 2004 movs r0, #4
- 80254ea: e036 b.n 802555a <GPIO_DeInit+0xa6>
- }
- else if (GPIOx == GPIOD)
- 80254ec: 4b21 ldr r3, [pc, #132] ; (8025574 <GPIO_DeInit+0xc0>)
- 80254ee: 4298 cmp r0, r3
- 80254f0: d105 bne.n 80254fe <GPIO_DeInit+0x4a>
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, ENABLE);
- 80254f2: 2008 movs r0, #8
- 80254f4: 2101 movs r1, #1
- 80254f6: f000 f959 bl 80257ac <RCC_AHB1PeriphResetCmd>
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, DISABLE);
- 80254fa: 2008 movs r0, #8
- 80254fc: e02d b.n 802555a <GPIO_DeInit+0xa6>
- }
- else if (GPIOx == GPIOE)
- 80254fe: 4b1e ldr r3, [pc, #120] ; (8025578 <GPIO_DeInit+0xc4>)
- 8025500: 4298 cmp r0, r3
- 8025502: d105 bne.n 8025510 <GPIO_DeInit+0x5c>
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, ENABLE);
- 8025504: 2010 movs r0, #16
- 8025506: 2101 movs r1, #1
- 8025508: f000 f950 bl 80257ac <RCC_AHB1PeriphResetCmd>
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, DISABLE);
- 802550c: 2010 movs r0, #16
- 802550e: e024 b.n 802555a <GPIO_DeInit+0xa6>
- }
- else if (GPIOx == GPIOF)
- 8025510: 4b1a ldr r3, [pc, #104] ; (802557c <GPIO_DeInit+0xc8>)
- 8025512: 4298 cmp r0, r3
- 8025514: d105 bne.n 8025522 <GPIO_DeInit+0x6e>
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, ENABLE);
- 8025516: 2020 movs r0, #32
- 8025518: 2101 movs r1, #1
- 802551a: f000 f947 bl 80257ac <RCC_AHB1PeriphResetCmd>
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, DISABLE);
- 802551e: 2020 movs r0, #32
- 8025520: e01b b.n 802555a <GPIO_DeInit+0xa6>
- }
- else if (GPIOx == GPIOG)
- 8025522: 4b17 ldr r3, [pc, #92] ; (8025580 <GPIO_DeInit+0xcc>)
- 8025524: 4298 cmp r0, r3
- 8025526: d105 bne.n 8025534 <GPIO_DeInit+0x80>
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, ENABLE);
- 8025528: 2040 movs r0, #64 ; 0x40
- 802552a: 2101 movs r1, #1
- 802552c: f000 f93e bl 80257ac <RCC_AHB1PeriphResetCmd>
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, DISABLE);
- 8025530: 2040 movs r0, #64 ; 0x40
- 8025532: e012 b.n 802555a <GPIO_DeInit+0xa6>
- }
- else if (GPIOx == GPIOH)
- 8025534: 4b13 ldr r3, [pc, #76] ; (8025584 <GPIO_DeInit+0xd0>)
- 8025536: 4298 cmp r0, r3
- 8025538: d105 bne.n 8025546 <GPIO_DeInit+0x92>
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, ENABLE);
- 802553a: 2080 movs r0, #128 ; 0x80
- 802553c: 2101 movs r1, #1
- 802553e: f000 f935 bl 80257ac <RCC_AHB1PeriphResetCmd>
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, DISABLE);
- 8025542: 2080 movs r0, #128 ; 0x80
- 8025544: e009 b.n 802555a <GPIO_DeInit+0xa6>
- }
- else
- {
- if (GPIOx == GPIOI)
- 8025546: 4b10 ldr r3, [pc, #64] ; (8025588 <GPIO_DeInit+0xd4>)
- 8025548: 4298 cmp r0, r3
- 802554a: d10b bne.n 8025564 <GPIO_DeInit+0xb0>
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, ENABLE);
- 802554c: f44f 7080 mov.w r0, #256 ; 0x100
- 8025550: 2101 movs r1, #1
- 8025552: f000 f92b bl 80257ac <RCC_AHB1PeriphResetCmd>
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, DISABLE);
- 8025556: f44f 7080 mov.w r0, #256 ; 0x100
- 802555a: 2100 movs r1, #0
- }
- }
- }
- 802555c: e8bd 4008 ldmia.w sp!, {r3, lr}
- else
- {
- if (GPIOx == GPIOI)
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, ENABLE);
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, DISABLE);
- 8025560: f000 b924 b.w 80257ac <RCC_AHB1PeriphResetCmd>
- 8025564: bd08 pop {r3, pc}
- 8025566: bf00 nop
- 8025568: 40020000 .word 0x40020000
- 802556c: 40020400 .word 0x40020400
- 8025570: 40020800 .word 0x40020800
- 8025574: 40020c00 .word 0x40020c00
- 8025578: 40021000 .word 0x40021000
- 802557c: 40021400 .word 0x40021400
- 8025580: 40021800 .word 0x40021800
- 8025584: 40021c00 .word 0x40021c00
- 8025588: 40022000 .word 0x40022000
- 0802558c <GPIO_Init>:
- * @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that contains
- * the configuration information for the specified GPIO peripheral.
- * @retval None
- */
- void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
- {
- 802558c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- /*-- GPIO Mode Configuration --*/
- for (pinpos = 0x00; pinpos < 0x10; pinpos++)
- {
- pos = ((uint32_t)0x01) << pinpos;
- /* Get the port pins position */
- currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
- 8025590: 680f ldr r7, [r1, #0]
- assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
- assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));
- /* -------------------------Configure the port pins---------------- */
- /*-- GPIO Mode Configuration --*/
- for (pinpos = 0x00; pinpos < 0x10; pinpos++)
- 8025592: 2300 movs r3, #0
- {
- pos = ((uint32_t)0x01) << pinpos;
- 8025594: f04f 0c01 mov.w ip, #1
- /* Get the port pins position */
- currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
- if (currentpin == pos)
- {
- GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2));
- 8025598: f04f 0803 mov.w r8, #3
- /* -------------------------Configure the port pins---------------- */
- /*-- GPIO Mode Configuration --*/
- for (pinpos = 0x00; pinpos < 0x10; pinpos++)
- {
- pos = ((uint32_t)0x01) << pinpos;
- 802559c: fa0c f203 lsl.w r2, ip, r3
- /* Get the port pins position */
- currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
- 80255a0: ea02 0507 and.w r5, r2, r7
- if (currentpin == pos)
- 80255a4: 4295 cmp r5, r2
- 80255a6: d131 bne.n 802560c <GPIO_Init+0x80>
- * @param GPIOx: where x can be (A..I) to select the GPIO peripheral.
- * @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that contains
- * the configuration information for the specified GPIO peripheral.
- * @retval None
- */
- void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
- 80255a8: 005a lsls r2, r3, #1
- /* Get the port pins position */
- currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
- if (currentpin == pos)
- {
- GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2));
- 80255aa: 6806 ldr r6, [r0, #0]
- 80255ac: fa08 f402 lsl.w r4, r8, r2
- 80255b0: 43e4 mvns r4, r4
- 80255b2: 4026 ands r6, r4
- 80255b4: 6006 str r6, [r0, #0]
- GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2));
- 80255b6: 790e ldrb r6, [r1, #4]
- 80255b8: f8d0 9000 ldr.w r9, [r0]
- 80255bc: fa06 fa02 lsl.w sl, r6, r2
- if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF))
- 80255c0: 3e01 subs r6, #1
- currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
- if (currentpin == pos)
- {
- GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2));
- GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2));
- 80255c2: ea4a 0909 orr.w r9, sl, r9
- if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF))
- 80255c6: 2e01 cmp r6, #1
- currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
- if (currentpin == pos)
- {
- GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2));
- GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2));
- 80255c8: f8c0 9000 str.w r9, [r0]
- if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF))
- 80255cc: d815 bhi.n 80255fa <GPIO_Init+0x6e>
- {
- /* Check Speed mode parameters */
- assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
- /* Speed mode configuration */
- GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2));
- 80255ce: 6886 ldr r6, [r0, #8]
- GPIOx->OSPEEDR |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << (pinpos * 2));
- 80255d0: f891 9005 ldrb.w r9, [r1, #5]
- {
- /* Check Speed mode parameters */
- assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
- /* Speed mode configuration */
- GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2));
- 80255d4: 4026 ands r6, r4
- 80255d6: 6086 str r6, [r0, #8]
- GPIOx->OSPEEDR |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << (pinpos * 2));
- 80255d8: 6886 ldr r6, [r0, #8]
- 80255da: fa09 f902 lsl.w r9, r9, r2
- 80255de: ea49 0606 orr.w r6, r9, r6
- 80255e2: 6086 str r6, [r0, #8]
- /* Check Output mode parameters */
- assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType));
- /* Output mode configuration*/
- GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos)) ;
- 80255e4: 6846 ldr r6, [r0, #4]
- 80255e6: ea26 0505 bic.w r5, r6, r5
- 80255ea: 6045 str r5, [r0, #4]
- GPIOx->OTYPER |= (uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos));
- 80255ec: 798d ldrb r5, [r1, #6]
- 80255ee: 6846 ldr r6, [r0, #4]
- 80255f0: fa05 f503 lsl.w r5, r5, r3
-
- temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
- GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
- temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp;
- GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2;
- }
- 80255f4: b2ad uxth r5, r5
- /* Check Output mode parameters */
- assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType));
- /* Output mode configuration*/
- GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos)) ;
- GPIOx->OTYPER |= (uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos));
- 80255f6: 4335 orrs r5, r6
- 80255f8: 6045 str r5, [r0, #4]
- }
- /* Pull-up Pull down resistor configuration*/
- GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2));
- 80255fa: 68c5 ldr r5, [r0, #12]
- 80255fc: 402c ands r4, r5
- 80255fe: 60c4 str r4, [r0, #12]
- GPIOx->PUPDR |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << (pinpos * 2));
- 8025600: 79cd ldrb r5, [r1, #7]
- 8025602: 68c4 ldr r4, [r0, #12]
- 8025604: fa05 f202 lsl.w r2, r5, r2
- 8025608: 4322 orrs r2, r4
- 802560a: 60c2 str r2, [r0, #12]
- assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
- assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));
- /* -------------------------Configure the port pins---------------- */
- /*-- GPIO Mode Configuration --*/
- for (pinpos = 0x00; pinpos < 0x10; pinpos++)
- 802560c: 3301 adds r3, #1
- 802560e: 2b10 cmp r3, #16
- 8025610: d1c4 bne.n 802559c <GPIO_Init+0x10>
- /* Pull-up Pull down resistor configuration*/
- GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2));
- GPIOx->PUPDR |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << (pinpos * 2));
- }
- }
- }
- 8025612: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 08025616 <GPIO_SetBits>:
- {
- /* Check the parameters */
- assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
- assert_param(IS_GPIO_PIN(GPIO_Pin));
- GPIOx->BSRRL = GPIO_Pin;
- 8025616: 8301 strh r1, [r0, #24]
- 8025618: 4770 bx lr
- 0802561a <GPIO_ResetBits>:
- {
- /* Check the parameters */
- assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
- assert_param(IS_GPIO_PIN(GPIO_Pin));
- GPIOx->BSRRH = GPIO_Pin;
- 802561a: 8341 strh r1, [r0, #26]
- 802561c: 4770 bx lr
- 0802561e <GPIO_PinAFConfig>:
- /* Check the parameters */
- assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
- assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
- assert_param(IS_GPIO_AF(GPIO_AF));
-
- temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
- 802561e: f001 0307 and.w r3, r1, #7
- GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
- 8025622: 08c9 lsrs r1, r1, #3
- 8025624: 3108 adds r1, #8
- * @arg GPIO_AF_DCMI: Connect DCMI pins to AF13
- * @arg GPIO_AF_EVENTOUT: Connect EVENTOUT pins to AF15
- * @retval None
- */
- void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
- {
- 8025626: b530 push {r4, r5, lr}
- /* Check the parameters */
- assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
- assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
- assert_param(IS_GPIO_AF(GPIO_AF));
-
- temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
- 8025628: 009b lsls r3, r3, #2
- GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
- 802562a: f850 5021 ldr.w r5, [r0, r1, lsl #2]
- 802562e: 240f movs r4, #15
- 8025630: fa04 f403 lsl.w r4, r4, r3
- 8025634: ea25 0404 bic.w r4, r5, r4
- 8025638: f840 4021 str.w r4, [r0, r1, lsl #2]
- temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp;
- 802563c: f850 4021 ldr.w r4, [r0, r1, lsl #2]
- /* Check the parameters */
- assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
- assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
- assert_param(IS_GPIO_AF(GPIO_AF));
-
- temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
- 8025640: fa02 f203 lsl.w r2, r2, r3
- GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
- temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp;
- 8025644: 4314 orrs r4, r2
- GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2;
- 8025646: f840 4021 str.w r4, [r0, r1, lsl #2]
- 802564a: bd30 pop {r4, r5, pc}
- 0802564c <PWR_BackupAccessCmd>:
- void PWR_BackupAccessCmd(FunctionalState NewState)
- {
- /* Check the parameters */
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- *(__IO uint32_t *) CR_DBP_BB = (uint32_t)NewState;
- 802564c: 4b01 ldr r3, [pc, #4] ; (8025654 <PWR_BackupAccessCmd+0x8>)
- 802564e: 6018 str r0, [r3, #0]
- 8025650: 4770 bx lr
- 8025652: bf00 nop
- 8025654: 420e0020 .word 0x420e0020
- 08025658 <RCC_LSEConfig>:
- /* Check the parameters */
- assert_param(IS_RCC_LSE(RCC_LSE));
- /* Reset LSEON and LSEBYP bits before configuring the LSE ------------------*/
- /* Reset LSEON bit */
- *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF;
- 8025658: 4b06 ldr r3, [pc, #24] ; (8025674 <RCC_LSEConfig+0x1c>)
- 802565a: 2200 movs r2, #0
- /* Reset LSEBYP bit */
- *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF;
- /* Configure LSE (RCC_LSE_OFF is already covered by the code section above) */
- switch (RCC_LSE)
- 802565c: 2801 cmp r0, #1
- /* Check the parameters */
- assert_param(IS_RCC_LSE(RCC_LSE));
- /* Reset LSEON and LSEBYP bits before configuring the LSE ------------------*/
- /* Reset LSEON bit */
- *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF;
- 802565e: 701a strb r2, [r3, #0]
- /* Reset LSEBYP bit */
- *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF;
- 8025660: 701a strb r2, [r3, #0]
- /* Configure LSE (RCC_LSE_OFF is already covered by the code section above) */
- switch (RCC_LSE)
- 8025662: d002 beq.n 802566a <RCC_LSEConfig+0x12>
- 8025664: 2804 cmp r0, #4
- 8025666: d104 bne.n 8025672 <RCC_LSEConfig+0x1a>
- 8025668: e001 b.n 802566e <RCC_LSEConfig+0x16>
- {
- case RCC_LSE_ON:
- /* Set LSEON bit */
- *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_ON;
- 802566a: 7018 strb r0, [r3, #0]
- break;
- 802566c: 4770 bx lr
- case RCC_LSE_Bypass:
- /* Set LSEBYP and LSEON bits */
- *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON;
- 802566e: 2205 movs r2, #5
- 8025670: 701a strb r2, [r3, #0]
- 8025672: 4770 bx lr
- 8025674: 40023870 .word 0x40023870
- 08025678 <RCC_LSICmd>:
- void RCC_LSICmd(FunctionalState NewState)
- {
- /* Check the parameters */
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- *(__IO uint32_t *) CSR_LSION_BB = (uint32_t)NewState;
- 8025678: 4b01 ldr r3, [pc, #4] ; (8025680 <RCC_LSICmd+0x8>)
- 802567a: 6018 str r0, [r3, #0]
- 802567c: 4770 bx lr
- 802567e: bf00 nop
- 8025680: 42470e80 .word 0x42470e80
- 08025684 <RCC_GetClocksFreq>:
- void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
- {
- uint32_t tmp = 0, presc = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
- /* Get SYSCLK source -------------------------------------------------------*/
- tmp = RCC->CFGR & RCC_CFGR_SWS;
- 8025684: 4b1e ldr r3, [pc, #120] ; (8025700 <RCC_GetClocksFreq+0x7c>)
- 8025686: 689a ldr r2, [r3, #8]
- 8025688: f002 020c and.w r2, r2, #12
- switch (tmp)
- 802568c: 2a04 cmp r2, #4
- * configuration based on this function will be incorrect.
- *
- * @retval None
- */
- void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
- {
- 802568e: b510 push {r4, lr}
- uint32_t tmp = 0, presc = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
- /* Get SYSCLK source -------------------------------------------------------*/
- tmp = RCC->CFGR & RCC_CFGR_SWS;
- switch (tmp)
- 8025690: d003 beq.n 802569a <RCC_GetClocksFreq+0x16>
- 8025692: 2a08 cmp r2, #8
- 8025694: d003 beq.n 802569e <RCC_GetClocksFreq+0x1a>
- 8025696: 4b1b ldr r3, [pc, #108] ; (8025704 <RCC_GetClocksFreq+0x80>)
- 8025698: e018 b.n 80256cc <RCC_GetClocksFreq+0x48>
- {
- case 0x00: /* HSI used as system clock source */
- RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
- break;
- case 0x04: /* HSE used as system clock source */
- RCC_Clocks->SYSCLK_Frequency = HSE_VALUE;
- 802569a: 4b1b ldr r3, [pc, #108] ; (8025708 <RCC_GetClocksFreq+0x84>)
- 802569c: e016 b.n 80256cc <RCC_GetClocksFreq+0x48>
- case 0x08: /* PLL used as system clock source */
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN
- SYSCLK = PLL_VCO / PLLP
- */
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
- 802569e: 6859 ldr r1, [r3, #4]
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
- 80256a0: 685a ldr r2, [r3, #4]
-
- if (pllsource != 0)
- 80256a2: f411 0f80 tst.w r1, #4194304 ; 0x400000
- {
- /* HSE used as PLL clock source */
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- 80256a6: 6859 ldr r1, [r3, #4]
- 80256a8: bf14 ite ne
- 80256aa: 4b17 ldrne r3, [pc, #92] ; (8025708 <RCC_GetClocksFreq+0x84>)
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- 80256ac: 4b15 ldreq r3, [pc, #84] ; (8025704 <RCC_GetClocksFreq+0x80>)
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN
- SYSCLK = PLL_VCO / PLLP
- */
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
- 80256ae: f002 023f and.w r2, r2, #63 ; 0x3f
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- 80256b2: fbb3 f3f2 udiv r3, r3, r2
- }
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- 80256b6: 4a12 ldr r2, [pc, #72] ; (8025700 <RCC_GetClocksFreq+0x7c>)
- 80256b8: 6852 ldr r2, [r2, #4]
- 80256ba: f3c2 4201 ubfx r2, r2, #16, #2
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
-
- if (pllsource != 0)
- {
- /* HSE used as PLL clock source */
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- 80256be: f3c1 1188 ubfx r1, r1, #6, #9
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- 80256c2: 3201 adds r2, #1
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- 80256c4: 434b muls r3, r1
- }
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- 80256c6: 0052 lsls r2, r2, #1
- RCC_Clocks->SYSCLK_Frequency = pllvco/pllp;
- 80256c8: fbb3 f3f2 udiv r3, r3, r2
- break;
- }
- /* Compute HCLK, PCLK1 and PCLK2 clocks frequencies ------------------------*/
- /* Get HCLK prescaler */
- tmp = RCC->CFGR & RCC_CFGR_HPRE;
- 80256cc: 490c ldr r1, [pc, #48] ; (8025700 <RCC_GetClocksFreq+0x7c>)
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- RCC_Clocks->SYSCLK_Frequency = pllvco/pllp;
- 80256ce: 6003 str r3, [r0, #0]
- break;
- }
- /* Compute HCLK, PCLK1 and PCLK2 clocks frequencies ------------------------*/
- /* Get HCLK prescaler */
- tmp = RCC->CFGR & RCC_CFGR_HPRE;
- 80256d0: 688b ldr r3, [r1, #8]
- tmp = tmp >> 4;
- presc = APBAHBPrescTable[tmp];
- 80256d2: 4a0e ldr r2, [pc, #56] ; (802570c <RCC_GetClocksFreq+0x88>)
- }
- /* Compute HCLK, PCLK1 and PCLK2 clocks frequencies ------------------------*/
- /* Get HCLK prescaler */
- tmp = RCC->CFGR & RCC_CFGR_HPRE;
- tmp = tmp >> 4;
- 80256d4: f3c3 1303 ubfx r3, r3, #4, #4
- presc = APBAHBPrescTable[tmp];
- 80256d8: 5cd4 ldrb r4, [r2, r3]
- /* HCLK clock frequency */
- RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc;
- 80256da: 6803 ldr r3, [r0, #0]
- 80256dc: fa23 f304 lsr.w r3, r3, r4
- 80256e0: 6043 str r3, [r0, #4]
- /* Get PCLK1 prescaler */
- tmp = RCC->CFGR & RCC_CFGR_PPRE1;
- 80256e2: 688c ldr r4, [r1, #8]
- tmp = tmp >> 10;
- 80256e4: f3c4 2482 ubfx r4, r4, #10, #3
- presc = APBAHBPrescTable[tmp];
- 80256e8: 5d14 ldrb r4, [r2, r4]
- /* PCLK1 clock frequency */
- RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc;
- 80256ea: fa23 f404 lsr.w r4, r3, r4
- 80256ee: 6084 str r4, [r0, #8]
- /* Get PCLK2 prescaler */
- tmp = RCC->CFGR & RCC_CFGR_PPRE2;
- 80256f0: 6889 ldr r1, [r1, #8]
- tmp = tmp >> 13;
- 80256f2: f3c1 3142 ubfx r1, r1, #13, #3
- presc = APBAHBPrescTable[tmp];
- 80256f6: 5c52 ldrb r2, [r2, r1]
- /* PCLK2 clock frequency */
- RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc;
- 80256f8: fa23 f302 lsr.w r3, r3, r2
- 80256fc: 60c3 str r3, [r0, #12]
- 80256fe: bd10 pop {r4, pc}
- 8025700: 40023800 .word 0x40023800
- 8025704: 00f42400 .word 0x00f42400
- 8025708: 017d7840 .word 0x017d7840
- 802570c: 200005ac .word 0x200005ac
- 08025710 <RCC_RTCCLKConfig>:
- uint32_t tmpreg = 0;
- /* Check the parameters */
- assert_param(IS_RCC_RTCCLK_SOURCE(RCC_RTCCLKSource));
- if ((RCC_RTCCLKSource & 0x00000300) == 0x00000300)
- 8025710: f400 7340 and.w r3, r0, #768 ; 0x300
- 8025714: f5b3 7f40 cmp.w r3, #768 ; 0x300
- 8025718: 4b08 ldr r3, [pc, #32] ; (802573c <RCC_RTCCLKConfig+0x2c>)
- 802571a: d108 bne.n 802572e <RCC_RTCCLKConfig+0x1e>
- { /* If HSE is selected as RTC clock source, configure HSE division factor for RTC clock */
- tmpreg = RCC->CFGR;
- 802571c: 6899 ldr r1, [r3, #8]
- /* Clear RTCPRE[4:0] bits */
- tmpreg &= ~RCC_CFGR_RTCPRE;
- /* Configure HSE division factor for RTC clock */
- tmpreg |= (RCC_RTCCLKSource & 0xFFFFCFF);
- 802571e: f020 4270 bic.w r2, r0, #4026531840 ; 0xf0000000
- if ((RCC_RTCCLKSource & 0x00000300) == 0x00000300)
- { /* If HSE is selected as RTC clock source, configure HSE division factor for RTC clock */
- tmpreg = RCC->CFGR;
- /* Clear RTCPRE[4:0] bits */
- tmpreg &= ~RCC_CFGR_RTCPRE;
- 8025722: f421 11f8 bic.w r1, r1, #2031616 ; 0x1f0000
- /* Configure HSE division factor for RTC clock */
- tmpreg |= (RCC_RTCCLKSource & 0xFFFFCFF);
- 8025726: f422 7240 bic.w r2, r2, #768 ; 0x300
- 802572a: 430a orrs r2, r1
- /* Store the new value */
- RCC->CFGR = tmpreg;
- 802572c: 609a str r2, [r3, #8]
- }
-
- /* Select the RTC clock source */
- RCC->BDCR |= (RCC_RTCCLKSource & 0x00000FFF);
- 802572e: 6f1a ldr r2, [r3, #112] ; 0x70
- 8025730: 0500 lsls r0, r0, #20
- 8025732: ea42 5010 orr.w r0, r2, r0, lsr #20
- 8025736: 6718 str r0, [r3, #112] ; 0x70
- 8025738: 4770 bx lr
- 802573a: bf00 nop
- 802573c: 40023800 .word 0x40023800
- 08025740 <RCC_RTCCLKCmd>:
- void RCC_RTCCLKCmd(FunctionalState NewState)
- {
- /* Check the parameters */
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- *(__IO uint32_t *) BDCR_RTCEN_BB = (uint32_t)NewState;
- 8025740: 4b01 ldr r3, [pc, #4] ; (8025748 <RCC_RTCCLKCmd+0x8>)
- 8025742: 6018 str r0, [r3, #0]
- 8025744: 4770 bx lr
- 8025746: bf00 nop
- 8025748: 42470e3c .word 0x42470e3c
- 0802574c <RCC_AHB1PeriphClockCmd>:
- * @param NewState: new state of the specified peripheral clock.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState)
- {
- 802574c: 4b04 ldr r3, [pc, #16] ; (8025760 <RCC_AHB1PeriphClockCmd+0x14>)
- assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
- RCC->AHB1ENR |= RCC_AHB1Periph;
- 802574e: 6b1a ldr r2, [r3, #48] ; 0x30
- {
- /* Check the parameters */
- assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- 8025750: b109 cbz r1, 8025756 <RCC_AHB1PeriphClockCmd+0xa>
- {
- RCC->AHB1ENR |= RCC_AHB1Periph;
- 8025752: 4310 orrs r0, r2
- 8025754: e001 b.n 802575a <RCC_AHB1PeriphClockCmd+0xe>
- }
- else
- {
- RCC->AHB1ENR &= ~RCC_AHB1Periph;
- 8025756: ea22 0000 bic.w r0, r2, r0
- 802575a: 6318 str r0, [r3, #48] ; 0x30
- 802575c: 4770 bx lr
- 802575e: bf00 nop
- 8025760: 40023800 .word 0x40023800
- 08025764 <RCC_AHB2PeriphClockCmd>:
- * @param NewState: new state of the specified peripheral clock.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState)
- {
- 8025764: 4b04 ldr r3, [pc, #16] ; (8025778 <RCC_AHB2PeriphClockCmd+0x14>)
- assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
- RCC->AHB2ENR |= RCC_AHB2Periph;
- 8025766: 6b5a ldr r2, [r3, #52] ; 0x34
- {
- /* Check the parameters */
- assert_param(IS_RCC_AHB2_PERIPH(RCC_AHB2Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- 8025768: b109 cbz r1, 802576e <RCC_AHB2PeriphClockCmd+0xa>
- {
- RCC->AHB2ENR |= RCC_AHB2Periph;
- 802576a: 4310 orrs r0, r2
- 802576c: e001 b.n 8025772 <RCC_AHB2PeriphClockCmd+0xe>
- }
- else
- {
- RCC->AHB2ENR &= ~RCC_AHB2Periph;
- 802576e: ea22 0000 bic.w r0, r2, r0
- 8025772: 6358 str r0, [r3, #52] ; 0x34
- 8025774: 4770 bx lr
- 8025776: bf00 nop
- 8025778: 40023800 .word 0x40023800
- 0802577c <RCC_APB1PeriphClockCmd>:
- * @param NewState: new state of the specified peripheral clock.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
- {
- 802577c: 4b04 ldr r3, [pc, #16] ; (8025790 <RCC_APB1PeriphClockCmd+0x14>)
- assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
- RCC->APB1ENR |= RCC_APB1Periph;
- 802577e: 6c1a ldr r2, [r3, #64] ; 0x40
- {
- /* Check the parameters */
- assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- 8025780: b109 cbz r1, 8025786 <RCC_APB1PeriphClockCmd+0xa>
- {
- RCC->APB1ENR |= RCC_APB1Periph;
- 8025782: 4310 orrs r0, r2
- 8025784: e001 b.n 802578a <RCC_APB1PeriphClockCmd+0xe>
- }
- else
- {
- RCC->APB1ENR &= ~RCC_APB1Periph;
- 8025786: ea22 0000 bic.w r0, r2, r0
- 802578a: 6418 str r0, [r3, #64] ; 0x40
- 802578c: 4770 bx lr
- 802578e: bf00 nop
- 8025790: 40023800 .word 0x40023800
- 08025794 <RCC_APB2PeriphClockCmd>:
- * @param NewState: new state of the specified peripheral clock.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
- {
- 8025794: 4b04 ldr r3, [pc, #16] ; (80257a8 <RCC_APB2PeriphClockCmd+0x14>)
- assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
- RCC->APB2ENR |= RCC_APB2Periph;
- 8025796: 6c5a ldr r2, [r3, #68] ; 0x44
- {
- /* Check the parameters */
- assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- 8025798: b109 cbz r1, 802579e <RCC_APB2PeriphClockCmd+0xa>
- {
- RCC->APB2ENR |= RCC_APB2Periph;
- 802579a: 4310 orrs r0, r2
- 802579c: e001 b.n 80257a2 <RCC_APB2PeriphClockCmd+0xe>
- }
- else
- {
- RCC->APB2ENR &= ~RCC_APB2Periph;
- 802579e: ea22 0000 bic.w r0, r2, r0
- 80257a2: 6458 str r0, [r3, #68] ; 0x44
- 80257a4: 4770 bx lr
- 80257a6: bf00 nop
- 80257a8: 40023800 .word 0x40023800
- 080257ac <RCC_AHB1PeriphResetCmd>:
- * @param NewState: new state of the specified peripheral reset.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void RCC_AHB1PeriphResetCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState)
- {
- 80257ac: 4b04 ldr r3, [pc, #16] ; (80257c0 <RCC_AHB1PeriphResetCmd+0x14>)
- assert_param(IS_RCC_AHB1_RESET_PERIPH(RCC_AHB1Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
- RCC->AHB1RSTR |= RCC_AHB1Periph;
- 80257ae: 691a ldr r2, [r3, #16]
- {
- /* Check the parameters */
- assert_param(IS_RCC_AHB1_RESET_PERIPH(RCC_AHB1Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- 80257b0: b109 cbz r1, 80257b6 <RCC_AHB1PeriphResetCmd+0xa>
- {
- RCC->AHB1RSTR |= RCC_AHB1Periph;
- 80257b2: 4310 orrs r0, r2
- 80257b4: e001 b.n 80257ba <RCC_AHB1PeriphResetCmd+0xe>
- }
- else
- {
- RCC->AHB1RSTR &= ~RCC_AHB1Periph;
- 80257b6: ea22 0000 bic.w r0, r2, r0
- 80257ba: 6118 str r0, [r3, #16]
- 80257bc: 4770 bx lr
- 80257be: bf00 nop
- 80257c0: 40023800 .word 0x40023800
- 080257c4 <RCC_APB1PeriphResetCmd>:
- * @param NewState: new state of the specified peripheral reset.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
- {
- 80257c4: 4b04 ldr r3, [pc, #16] ; (80257d8 <RCC_APB1PeriphResetCmd+0x14>)
- /* Check the parameters */
- assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
- RCC->APB1RSTR |= RCC_APB1Periph;
- 80257c6: 6a1a ldr r2, [r3, #32]
- void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
- {
- /* Check the parameters */
- assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- 80257c8: b109 cbz r1, 80257ce <RCC_APB1PeriphResetCmd+0xa>
- {
- RCC->APB1RSTR |= RCC_APB1Periph;
- 80257ca: 4310 orrs r0, r2
- 80257cc: e001 b.n 80257d2 <RCC_APB1PeriphResetCmd+0xe>
- }
- else
- {
- RCC->APB1RSTR &= ~RCC_APB1Periph;
- 80257ce: ea22 0000 bic.w r0, r2, r0
- 80257d2: 6218 str r0, [r3, #32]
- 80257d4: 4770 bx lr
- 80257d6: bf00 nop
- 80257d8: 40023800 .word 0x40023800
- 080257dc <RCC_APB2PeriphResetCmd>:
- * @param NewState: new state of the specified peripheral reset.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
- {
- 80257dc: 4b04 ldr r3, [pc, #16] ; (80257f0 <RCC_APB2PeriphResetCmd+0x14>)
- /* Check the parameters */
- assert_param(IS_RCC_APB2_RESET_PERIPH(RCC_APB2Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
- RCC->APB2RSTR |= RCC_APB2Periph;
- 80257de: 6a5a ldr r2, [r3, #36] ; 0x24
- void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
- {
- /* Check the parameters */
- assert_param(IS_RCC_APB2_RESET_PERIPH(RCC_APB2Periph));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- 80257e0: b109 cbz r1, 80257e6 <RCC_APB2PeriphResetCmd+0xa>
- {
- RCC->APB2RSTR |= RCC_APB2Periph;
- 80257e2: 4310 orrs r0, r2
- 80257e4: e001 b.n 80257ea <RCC_APB2PeriphResetCmd+0xe>
- }
- else
- {
- RCC->APB2RSTR &= ~RCC_APB2Periph;
- 80257e6: ea22 0000 bic.w r0, r2, r0
- 80257ea: 6258 str r0, [r3, #36] ; 0x24
- 80257ec: 4770 bx lr
- 80257ee: bf00 nop
- 80257f0: 40023800 .word 0x40023800
- 080257f4 <RCC_GetFlagStatus>:
- /* Check the parameters */
- assert_param(IS_RCC_FLAG(RCC_FLAG));
- /* Get the RCC register index */
- tmp = RCC_FLAG >> 5;
- 80257f4: 0943 lsrs r3, r0, #5
- if (tmp == 1) /* The flag to check is in CR register */
- 80257f6: 2b01 cmp r3, #1
- 80257f8: 4a07 ldr r2, [pc, #28] ; (8025818 <RCC_GetFlagStatus+0x24>)
- 80257fa: d101 bne.n 8025800 <RCC_GetFlagStatus+0xc>
- {
- statusreg = RCC->CR;
- 80257fc: 6813 ldr r3, [r2, #0]
- 80257fe: e003 b.n 8025808 <RCC_GetFlagStatus+0x14>
- }
- else if (tmp == 2) /* The flag to check is in BDCR register */
- 8025800: 2b02 cmp r3, #2
- {
- statusreg = RCC->BDCR;
- 8025802: bf0c ite eq
- 8025804: 6f13 ldreq r3, [r2, #112] ; 0x70
- }
- else /* The flag to check is in CSR register */
- {
- statusreg = RCC->CSR;
- 8025806: 6f53 ldrne r3, [r2, #116] ; 0x74
- }
- /* Get the flag position */
- tmp = RCC_FLAG & FLAG_MASK;
- if ((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET)
- 8025808: f000 001f and.w r0, r0, #31
- 802580c: fa23 f000 lsr.w r0, r3, r0
- {
- bitstatus = RESET;
- }
- /* Return the flag status */
- return bitstatus;
- }
- 8025810: f000 0001 and.w r0, r0, #1
- 8025814: 4770 bx lr
- 8025816: bf00 nop
- 8025818: 40023800 .word 0x40023800
- 0802581c <RNG_Cmd>:
- * @param NewState: new state of the RNG peripheral.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void RNG_Cmd(FunctionalState NewState)
- {
- 802581c: 4b04 ldr r3, [pc, #16] ; (8025830 <RNG_Cmd+0x14>)
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- {
- /* Enable the RNG */
- RNG->CR |= RNG_CR_RNGEN;
- 802581e: 681a ldr r2, [r3, #0]
- void RNG_Cmd(FunctionalState NewState)
- {
- /* Check the parameters */
- assert_param(IS_FUNCTIONAL_STATE(NewState));
- if (NewState != DISABLE)
- 8025820: b110 cbz r0, 8025828 <RNG_Cmd+0xc>
- {
- /* Enable the RNG */
- RNG->CR |= RNG_CR_RNGEN;
- 8025822: f042 0204 orr.w r2, r2, #4
- 8025826: e001 b.n 802582c <RNG_Cmd+0x10>
- }
- else
- {
- /* Disable the RNG */
- RNG->CR &= ~RNG_CR_RNGEN;
- 8025828: f022 0204 bic.w r2, r2, #4
- 802582c: 601a str r2, [r3, #0]
- 802582e: 4770 bx lr
- 8025830: 50060800 .word 0x50060800
- 08025834 <RNG_GetRandomNumber>:
- * @retval 32-bit random number.
- */
- uint32_t RNG_GetRandomNumber(void)
- {
- /* Return the 32 bit random number from the DR register */
- return RNG->DR;
- 8025834: 4b01 ldr r3, [pc, #4] ; (802583c <RNG_GetRandomNumber+0x8>)
- 8025836: 6898 ldr r0, [r3, #8]
- }
- 8025838: 4770 bx lr
- 802583a: bf00 nop
- 802583c: 50060800 .word 0x50060800
- 08025840 <RTC_ByteToBcd2>:
- * @param Value: Byte to be converted.
- * @retval Converted byte
- */
- static uint8_t RTC_ByteToBcd2(uint8_t Value)
- {
- uint8_t bcdhigh = 0;
- 8025840: 2300 movs r3, #0
-
- while (Value >= 10)
- 8025842: e003 b.n 802584c <RTC_ByteToBcd2+0xc>
- {
- bcdhigh++;
- 8025844: 3301 adds r3, #1
- Value -= 10;
- 8025846: 380a subs r0, #10
- {
- uint8_t bcdhigh = 0;
-
- while (Value >= 10)
- {
- bcdhigh++;
- 8025848: b2db uxtb r3, r3
- Value -= 10;
- 802584a: b2c0 uxtb r0, r0
- */
- static uint8_t RTC_ByteToBcd2(uint8_t Value)
- {
- uint8_t bcdhigh = 0;
-
- while (Value >= 10)
- 802584c: 2809 cmp r0, #9
- 802584e: d8f9 bhi.n 8025844 <RTC_ByteToBcd2+0x4>
- {
- bcdhigh++;
- Value -= 10;
- }
-
- return ((uint8_t)(bcdhigh << 4) | Value);
- 8025850: ea40 1003 orr.w r0, r0, r3, lsl #4
- }
- 8025854: b2c0 uxtb r0, r0
- 8025856: 4770 bx lr
- 08025858 <RTC_Bcd2ToByte>:
- * @retval Converted word
- */
- static uint8_t RTC_Bcd2ToByte(uint8_t Value)
- {
- uint8_t tmp = 0;
- tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10;
- 8025858: 0902 lsrs r2, r0, #4
- return (tmp + (Value & (uint8_t)0x0F));
- 802585a: f000 030f and.w r3, r0, #15
- 802585e: 200a movs r0, #10
- 8025860: fb00 3002 mla r0, r0, r2, r3
- }
- 8025864: b2c0 uxtb r0, r0
- 8025866: 4770 bx lr
- 08025868 <RTC_EnterInitMode>:
- * @retval An ErrorStatus enumeration value:
- * - SUCCESS: RTC is in Init mode
- * - ERROR: RTC is not in Init mode
- */
- ErrorStatus RTC_EnterInitMode(void)
- {
- 8025868: b082 sub sp, #8
- __IO uint32_t initcounter = 0x00;
- 802586a: 2300 movs r3, #0
- 802586c: 9301 str r3, [sp, #4]
- ErrorStatus status = ERROR;
- uint32_t initstatus = 0x00;
-
- /* Check if the Initialization mode is set */
- if ((RTC->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
- 802586e: 4b0d ldr r3, [pc, #52] ; (80258a4 <RTC_EnterInitMode+0x3c>)
- 8025870: 68da ldr r2, [r3, #12]
- 8025872: 0650 lsls r0, r2, #25
- 8025874: d413 bmi.n 802589e <RTC_EnterInitMode+0x36>
- {
- /* Set the Initialization mode */
- RTC->ISR = (uint32_t)RTC_INIT_MASK;
- 8025876: f04f 32ff mov.w r2, #4294967295
- 802587a: 60da str r2, [r3, #12]
-
- /* Wait till RTC is in INIT state and if Time out is reached exit */
- do
- {
- initstatus = RTC->ISR & RTC_ISR_INITF;
- 802587c: 68da ldr r2, [r3, #12]
- initcounter++;
- 802587e: 9901 ldr r1, [sp, #4]
- 8025880: 3101 adds r1, #1
- 8025882: 9101 str r1, [sp, #4]
- } while((initcounter != INITMODE_TIMEOUT) && (initstatus == 0x00));
- 8025884: 9901 ldr r1, [sp, #4]
- 8025886: f5b1 3f80 cmp.w r1, #65536 ; 0x10000
- RTC->ISR = (uint32_t)RTC_INIT_MASK;
-
- /* Wait till RTC is in INIT state and if Time out is reached exit */
- do
- {
- initstatus = RTC->ISR & RTC_ISR_INITF;
- 802588a: f002 0240 and.w r2, r2, #64 ; 0x40
- initcounter++;
- } while((initcounter != INITMODE_TIMEOUT) && (initstatus == 0x00));
- 802588e: d001 beq.n 8025894 <RTC_EnterInitMode+0x2c>
- 8025890: 2a00 cmp r2, #0
- 8025892: d0f3 beq.n 802587c <RTC_EnterInitMode+0x14>
-
- if ((RTC->ISR & RTC_ISR_INITF) != RESET)
- 8025894: 4b03 ldr r3, [pc, #12] ; (80258a4 <RTC_EnterInitMode+0x3c>)
- 8025896: 68d8 ldr r0, [r3, #12]
- {
- status = SUCCESS;
- 8025898: f3c0 1080 ubfx r0, r0, #6, #1
- 802589c: e000 b.n 80258a0 <RTC_EnterInitMode+0x38>
- status = ERROR;
- }
- }
- else
- {
- status = SUCCESS;
- 802589e: 2001 movs r0, #1
- }
-
- return (status);
- }
- 80258a0: b002 add sp, #8
- 80258a2: 4770 bx lr
- 80258a4: 40002800 .word 0x40002800
- 080258a8 <RTC_ExitInitMode>:
- * @retval None
- */
- void RTC_ExitInitMode(void)
- {
- /* Exit Initialization mode */
- RTC->ISR &= (uint32_t)~RTC_ISR_INIT;
- 80258a8: 4b02 ldr r3, [pc, #8] ; (80258b4 <RTC_ExitInitMode+0xc>)
- 80258aa: 68da ldr r2, [r3, #12]
- 80258ac: f022 0280 bic.w r2, r2, #128 ; 0x80
- 80258b0: 60da str r2, [r3, #12]
- 80258b2: 4770 bx lr
- 80258b4: 40002800 .word 0x40002800
- 080258b8 <RTC_Init>:
- * @retval An ErrorStatus enumeration value:
- * - SUCCESS: RTC registers are initialized
- * - ERROR: RTC registers are not initialized
- */
- ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct)
- {
- 80258b8: b538 push {r3, r4, r5, lr}
- assert_param(IS_RTC_HOUR_FORMAT(RTC_InitStruct->RTC_HourFormat));
- assert_param(IS_RTC_ASYNCH_PREDIV(RTC_InitStruct->RTC_AsynchPrediv));
- assert_param(IS_RTC_SYNCH_PREDIV(RTC_InitStruct->RTC_SynchPrediv));
- /* Disable the write protection for RTC registers */
- RTC->WPR = 0xCA;
- 80258ba: 4c0f ldr r4, [pc, #60] ; (80258f8 <RTC_Init+0x40>)
- 80258bc: 23ca movs r3, #202 ; 0xca
- 80258be: 6263 str r3, [r4, #36] ; 0x24
- RTC->WPR = 0x53;
- 80258c0: 2353 movs r3, #83 ; 0x53
- 80258c2: 6263 str r3, [r4, #36] ; 0x24
- * @retval An ErrorStatus enumeration value:
- * - SUCCESS: RTC registers are initialized
- * - ERROR: RTC registers are not initialized
- */
- ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct)
- {
- 80258c4: 4605 mov r5, r0
- /* Disable the write protection for RTC registers */
- RTC->WPR = 0xCA;
- RTC->WPR = 0x53;
- /* Set Initialization mode */
- if (RTC_EnterInitMode() == ERROR)
- 80258c6: f7ff ffcf bl 8025868 <RTC_EnterInitMode>
- 80258ca: b188 cbz r0, 80258f0 <RTC_Init+0x38>
- status = ERROR;
- }
- else
- {
- /* Clear RTC CR FMT Bit */
- RTC->CR &= ((uint32_t)~(RTC_CR_FMT));
- 80258cc: 68a3 ldr r3, [r4, #8]
- 80258ce: f023 0340 bic.w r3, r3, #64 ; 0x40
- 80258d2: 60a3 str r3, [r4, #8]
- /* Set RTC_CR register */
- RTC->CR |= ((uint32_t)(RTC_InitStruct->RTC_HourFormat));
- 80258d4: 68a2 ldr r2, [r4, #8]
- 80258d6: 682b ldr r3, [r5, #0]
- 80258d8: 4313 orrs r3, r2
- 80258da: 60a3 str r3, [r4, #8]
-
- /* Configure the RTC PRER */
- RTC->PRER = (uint32_t)(RTC_InitStruct->RTC_SynchPrediv);
- 80258dc: 68ab ldr r3, [r5, #8]
- 80258de: 6123 str r3, [r4, #16]
- RTC->PRER |= (uint32_t)(RTC_InitStruct->RTC_AsynchPrediv << 16);
- 80258e0: 6923 ldr r3, [r4, #16]
- 80258e2: 686a ldr r2, [r5, #4]
- 80258e4: ea43 4302 orr.w r3, r3, r2, lsl #16
- 80258e8: 6123 str r3, [r4, #16]
- /* Exit Initialization mode */
- RTC_ExitInitMode();
- 80258ea: f7ff ffdd bl 80258a8 <RTC_ExitInitMode>
- status = SUCCESS;
- 80258ee: 2001 movs r0, #1
- }
- /* Enable the write protection for RTC registers */
- RTC->WPR = 0xFF;
- 80258f0: 4b01 ldr r3, [pc, #4] ; (80258f8 <RTC_Init+0x40>)
- 80258f2: 22ff movs r2, #255 ; 0xff
- 80258f4: 625a str r2, [r3, #36] ; 0x24
-
- return status;
- }
- 80258f6: bd38 pop {r3, r4, r5, pc}
- 80258f8: 40002800 .word 0x40002800
- 080258fc <RTC_WaitForSynchro>:
- * @retval An ErrorStatus enumeration value:
- * - SUCCESS: RTC registers are synchronised
- * - ERROR: RTC registers are not synchronised
- */
- ErrorStatus RTC_WaitForSynchro(void)
- {
- 80258fc: b082 sub sp, #8
- __IO uint32_t synchrocounter = 0;
- 80258fe: 2300 movs r3, #0
- 8025900: 9301 str r3, [sp, #4]
- ErrorStatus status = ERROR;
- uint32_t synchrostatus = 0x00;
- /* Disable the write protection for RTC registers */
- RTC->WPR = 0xCA;
- 8025902: 4b0e ldr r3, [pc, #56] ; (802593c <RTC_WaitForSynchro+0x40>)
- 8025904: 22ca movs r2, #202 ; 0xca
- 8025906: 625a str r2, [r3, #36] ; 0x24
- RTC->WPR = 0x53;
- 8025908: 2253 movs r2, #83 ; 0x53
- 802590a: 625a str r2, [r3, #36] ; 0x24
-
- /* Clear RSF flag */
- RTC->ISR &= (uint32_t)RTC_RSF_MASK;
- 802590c: 68da ldr r2, [r3, #12]
- 802590e: f022 02a0 bic.w r2, r2, #160 ; 0xa0
- 8025912: 60da str r2, [r3, #12]
-
- /* Wait the registers to be synchronised */
- do
- {
- synchrostatus = RTC->ISR & RTC_ISR_RSF;
- 8025914: 68d9 ldr r1, [r3, #12]
- synchrocounter++;
- 8025916: 9a01 ldr r2, [sp, #4]
- 8025918: 3201 adds r2, #1
- 802591a: 9201 str r2, [sp, #4]
- } while((synchrocounter != SYNCHRO_TIMEOUT) && (synchrostatus == 0x00));
- 802591c: 9a01 ldr r2, [sp, #4]
- 802591e: f5b2 3f00 cmp.w r2, #131072 ; 0x20000
- RTC->ISR &= (uint32_t)RTC_RSF_MASK;
-
- /* Wait the registers to be synchronised */
- do
- {
- synchrostatus = RTC->ISR & RTC_ISR_RSF;
- 8025922: f001 0120 and.w r1, r1, #32
- 8025926: 4a05 ldr r2, [pc, #20] ; (802593c <RTC_WaitForSynchro+0x40>)
- synchrocounter++;
- } while((synchrocounter != SYNCHRO_TIMEOUT) && (synchrostatus == 0x00));
- 8025928: d001 beq.n 802592e <RTC_WaitForSynchro+0x32>
- 802592a: 2900 cmp r1, #0
- 802592c: d0f2 beq.n 8025914 <RTC_WaitForSynchro+0x18>
-
- if ((RTC->ISR & RTC_ISR_RSF) != RESET)
- 802592e: 68d0 ldr r0, [r2, #12]
- {
- status = ERROR;
- }
- /* Enable the write protection for RTC registers */
- RTC->WPR = 0xFF;
- 8025930: 23ff movs r3, #255 ; 0xff
- 8025932: 6253 str r3, [r2, #36] ; 0x24
-
- return (status);
- }
- 8025934: f3c0 1040 ubfx r0, r0, #5, #1
- 8025938: b002 add sp, #8
- 802593a: 4770 bx lr
- 802593c: 40002800 .word 0x40002800
- 08025940 <RTC_SetTime>:
- * @retval An ErrorStatus enumeration value:
- * - SUCCESS: RTC Time register is configured
- * - ERROR: RTC Time register is not configured
- */
- ErrorStatus RTC_SetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct)
- {
- 8025940: b5f8 push {r3, r4, r5, r6, r7, lr}
- 8025942: 4b24 ldr r3, [pc, #144] ; (80259d4 <RTC_SetTime+0x94>)
- 8025944: 460c mov r4, r1
- /* Check the parameters */
- assert_param(IS_RTC_FORMAT(RTC_Format));
-
- if (RTC_Format == RTC_Format_BIN)
- {
- if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET)
- 8025946: 689b ldr r3, [r3, #8]
- ErrorStatus status = ERROR;
-
- /* Check the parameters */
- assert_param(IS_RTC_FORMAT(RTC_Format));
-
- if (RTC_Format == RTC_Format_BIN)
- 8025948: b920 cbnz r0, 8025954 <RTC_SetTime+0x14>
- {
- if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET)
- 802594a: f013 0340 ands.w r3, r3, #64 ; 0x40
- 802594e: d12e bne.n 80259ae <RTC_SetTime+0x6e>
- assert_param(IS_RTC_HOUR12(RTC_TimeStruct->RTC_Hours));
- assert_param(IS_RTC_H12(RTC_TimeStruct->RTC_H12));
- }
- else
- {
- RTC_TimeStruct->RTC_H12 = 0x00;
- 8025950: 70cb strb r3, [r1, #3]
- 8025952: e02c b.n 80259ae <RTC_SetTime+0x6e>
- assert_param(IS_RTC_MINUTES(RTC_TimeStruct->RTC_Minutes));
- assert_param(IS_RTC_SECONDS(RTC_TimeStruct->RTC_Seconds));
- }
- else
- {
- if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET)
- 8025954: f013 0340 ands.w r3, r3, #64 ; 0x40
- 8025958: d11e bne.n 8025998 <RTC_SetTime+0x58>
- assert_param(IS_RTC_HOUR12(tmpreg));
- assert_param(IS_RTC_H12(RTC_TimeStruct->RTC_H12));
- }
- else
- {
- RTC_TimeStruct->RTC_H12 = 0x00;
- 802595a: 70cb strb r3, [r1, #3]
- 802595c: e01c b.n 8025998 <RTC_SetTime+0x58>
- ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Seconds)) | \
- (((uint32_t)RTC_TimeStruct->RTC_H12) << 16));
- }
- /* Disable the write protection for RTC registers */
- RTC->WPR = 0xCA;
- 802595e: 4c1d ldr r4, [pc, #116] ; (80259d4 <RTC_SetTime+0x94>)
- 8025960: 23ca movs r3, #202 ; 0xca
- 8025962: 6263 str r3, [r4, #36] ; 0x24
- RTC->WPR = 0x53;
- 8025964: 2353 movs r3, #83 ; 0x53
- 8025966: 6263 str r3, [r4, #36] ; 0x24
- /* Set Initialization mode */
- if (RTC_EnterInitMode() == ERROR)
- 8025968: f7ff ff7e bl 8025868 <RTC_EnterInitMode>
- 802596c: b180 cbz r0, 8025990 <RTC_SetTime+0x50>
- status = ERROR;
- }
- else
- {
- /* Set the RTC_TR register */
- RTC->TR = (uint32_t)(tmpreg & RTC_TR_RESERVED_MASK);
- 802596e: f005 357f and.w r5, r5, #2139062143 ; 0x7f7f7f7f
- 8025972: f025 45fe bic.w r5, r5, #2130706432 ; 0x7f000000
- 8025976: 6025 str r5, [r4, #0]
- /* Exit Initialization mode */
- RTC_ExitInitMode();
- 8025978: f7ff ff96 bl 80258a8 <RTC_ExitInitMode>
- /* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
- if ((RTC->CR & RTC_CR_BYPSHAD) == RESET)
- 802597c: 68a3 ldr r3, [r4, #8]
- 802597e: 0699 lsls r1, r3, #26
- 8025980: d405 bmi.n 802598e <RTC_SetTime+0x4e>
- {
- if (RTC_WaitForSynchro() == ERROR)
- 8025982: f7ff ffbb bl 80258fc <RTC_WaitForSynchro>
- RTC->WPR = 0x53;
- /* Set Initialization mode */
- if (RTC_EnterInitMode() == ERROR)
- {
- status = ERROR;
- 8025986: 3000 adds r0, #0
- 8025988: bf18 it ne
- 802598a: 2001 movne r0, #1
- 802598c: e000 b.n 8025990 <RTC_SetTime+0x50>
- status = SUCCESS;
- }
- }
- else
- {
- status = SUCCESS;
- 802598e: 2001 movs r0, #1
- }
- }
- /* Enable the write protection for RTC registers */
- RTC->WPR = 0xFF;
- 8025990: 4b10 ldr r3, [pc, #64] ; (80259d4 <RTC_SetTime+0x94>)
- 8025992: 22ff movs r2, #255 ; 0xff
- 8025994: 625a str r2, [r3, #36] ; 0x24
- 8025996: bdf8 pop {r3, r4, r5, r6, r7, pc}
-
- /* Check the input parameters format */
- if (RTC_Format != RTC_Format_BIN)
- {
- tmpreg = (((uint32_t)(RTC_TimeStruct->RTC_Hours) << 16) | \
- ((uint32_t)(RTC_TimeStruct->RTC_Minutes) << 8) | \
- 8025998: 7865 ldrb r5, [r4, #1]
- }
-
- /* Check the input parameters format */
- if (RTC_Format != RTC_Format_BIN)
- {
- tmpreg = (((uint32_t)(RTC_TimeStruct->RTC_Hours) << 16) | \
- 802599a: 7823 ldrb r3, [r4, #0]
- ((uint32_t)(RTC_TimeStruct->RTC_Minutes) << 8) | \
- 802599c: 022d lsls r5, r5, #8
- }
-
- /* Check the input parameters format */
- if (RTC_Format != RTC_Format_BIN)
- {
- tmpreg = (((uint32_t)(RTC_TimeStruct->RTC_Hours) << 16) | \
- 802599e: ea45 4503 orr.w r5, r5, r3, lsl #16
- ((uint32_t)(RTC_TimeStruct->RTC_Minutes) << 8) | \
- ((uint32_t)RTC_TimeStruct->RTC_Seconds) | \
- 80259a2: 78a3 ldrb r3, [r4, #2]
-
- /* Check the input parameters format */
- if (RTC_Format != RTC_Format_BIN)
- {
- tmpreg = (((uint32_t)(RTC_TimeStruct->RTC_Hours) << 16) | \
- ((uint32_t)(RTC_TimeStruct->RTC_Minutes) << 8) | \
- 80259a4: 431d orrs r5, r3
- ((uint32_t)RTC_TimeStruct->RTC_Seconds) | \
- ((uint32_t)(RTC_TimeStruct->RTC_H12) << 16));
- 80259a6: 78e3 ldrb r3, [r4, #3]
- }
-
- /* Check the input parameters format */
- if (RTC_Format != RTC_Format_BIN)
- {
- tmpreg = (((uint32_t)(RTC_TimeStruct->RTC_Hours) << 16) | \
- 80259a8: ea45 4503 orr.w r5, r5, r3, lsl #16
- 80259ac: e7d7 b.n 802595e <RTC_SetTime+0x1e>
- ((uint32_t)RTC_TimeStruct->RTC_Seconds) | \
- ((uint32_t)(RTC_TimeStruct->RTC_H12) << 16));
- }
- else
- {
- tmpreg = (uint32_t)(((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Hours) << 16) | \
- 80259ae: 7820 ldrb r0, [r4, #0]
- 80259b0: f7ff ff46 bl 8025840 <RTC_ByteToBcd2>
- 80259b4: 4607 mov r7, r0
- ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Minutes) << 8) | \
- 80259b6: 7860 ldrb r0, [r4, #1]
- 80259b8: f7ff ff42 bl 8025840 <RTC_ByteToBcd2>
- 80259bc: 4606 mov r6, r0
- ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Seconds)) | \
- 80259be: 78a0 ldrb r0, [r4, #2]
- 80259c0: f7ff ff3e bl 8025840 <RTC_ByteToBcd2>
- (((uint32_t)RTC_TimeStruct->RTC_H12) << 16));
- 80259c4: 78e5 ldrb r5, [r4, #3]
- ((uint32_t)RTC_TimeStruct->RTC_Seconds) | \
- ((uint32_t)(RTC_TimeStruct->RTC_H12) << 16));
- }
- else
- {
- tmpreg = (uint32_t)(((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Hours) << 16) | \
- 80259c6: ea40 4005 orr.w r0, r0, r5, lsl #16
- ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Minutes) << 8) | \
- 80259ca: ea40 4507 orr.w r5, r0, r7, lsl #16
- ((uint32_t)RTC_TimeStruct->RTC_Seconds) | \
- ((uint32_t)(RTC_TimeStruct->RTC_H12) << 16));
- }
- else
- {
- tmpreg = (uint32_t)(((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Hours) << 16) | \
- 80259ce: ea45 2506 orr.w r5, r5, r6, lsl #8
- 80259d2: e7c4 b.n 802595e <RTC_SetTime+0x1e>
- 80259d4: 40002800 .word 0x40002800
- 080259d8 <RTC_GetTime>:
- /* Check the parameters */
- assert_param(IS_RTC_FORMAT(RTC_Format));
- /* Get the RTC_TR register */
- tmpreg = (uint32_t)(RTC->TR & RTC_TR_RESERVED_MASK);
- 80259d8: 4b0f ldr r3, [pc, #60] ; (8025a18 <RTC_GetTime+0x40>)
- 80259da: 681b ldr r3, [r3, #0]
- * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure that will
- * contain the returned current time configuration.
- * @retval None
- */
- void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct)
- {
- 80259dc: b570 push {r4, r5, r6, lr}
- /* Get the RTC_TR register */
- tmpreg = (uint32_t)(RTC->TR & RTC_TR_RESERVED_MASK);
-
- /* Fill the structure fields with the read parameters */
- RTC_TimeStruct->RTC_Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);
- 80259de: f3c3 4205 ubfx r2, r3, #16, #6
- RTC_TimeStruct->RTC_Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8);
- 80259e2: f3c3 2606 ubfx r6, r3, #8, #7
- RTC_TimeStruct->RTC_Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU));
- 80259e6: f003 057f and.w r5, r3, #127 ; 0x7f
- RTC_TimeStruct->RTC_H12 = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16);
- 80259ea: f403 0380 and.w r3, r3, #4194304 ; 0x400000
- 80259ee: 0c1b lsrs r3, r3, #16
- * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure that will
- * contain the returned current time configuration.
- * @retval None
- */
- void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct)
- {
- 80259f0: 460c mov r4, r1
- /* Get the RTC_TR register */
- tmpreg = (uint32_t)(RTC->TR & RTC_TR_RESERVED_MASK);
-
- /* Fill the structure fields with the read parameters */
- RTC_TimeStruct->RTC_Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);
- 80259f2: 700a strb r2, [r1, #0]
- RTC_TimeStruct->RTC_Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8);
- 80259f4: 704e strb r6, [r1, #1]
- RTC_TimeStruct->RTC_Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU));
- 80259f6: 708d strb r5, [r1, #2]
- RTC_TimeStruct->RTC_H12 = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16);
- 80259f8: 70cb strb r3, [r1, #3]
- /* Check the input parameters format */
- if (RTC_Format == RTC_Format_BIN)
- 80259fa: b958 cbnz r0, 8025a14 <RTC_GetTime+0x3c>
- {
- /* Convert the structure parameters to Binary format */
- RTC_TimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours);
- 80259fc: 4610 mov r0, r2
- 80259fe: f7ff ff2b bl 8025858 <RTC_Bcd2ToByte>
- 8025a02: 7020 strb r0, [r4, #0]
- RTC_TimeStruct->RTC_Minutes = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Minutes);
- 8025a04: 4630 mov r0, r6
- 8025a06: f7ff ff27 bl 8025858 <RTC_Bcd2ToByte>
- 8025a0a: 7060 strb r0, [r4, #1]
- RTC_TimeStruct->RTC_Seconds = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Seconds);
- 8025a0c: 4628 mov r0, r5
- 8025a0e: f7ff ff23 bl 8025858 <RTC_Bcd2ToByte>
- 8025a12: 70a0 strb r0, [r4, #2]
- 8025a14: bd70 pop {r4, r5, r6, pc}
- 8025a16: bf00 nop
- 8025a18: 40002800 .word 0x40002800
- 08025a1c <RTC_SetDate>:
- * @retval An ErrorStatus enumeration value:
- * - SUCCESS: RTC Date register is configured
- * - ERROR: RTC Date register is not configured
- */
- ErrorStatus RTC_SetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct)
- {
- 8025a1c: b5f8 push {r3, r4, r5, r6, r7, lr}
- 8025a1e: 460c mov r4, r1
- 8025a20: 784b ldrb r3, [r1, #1]
- ErrorStatus status = ERROR;
-
- /* Check the parameters */
- assert_param(IS_RTC_FORMAT(RTC_Format));
- if ((RTC_Format == RTC_Format_BIN) && ((RTC_DateStruct->RTC_Month & 0x10) == 0x10))
- 8025a22: 2800 cmp r0, #0
- 8025a24: d138 bne.n 8025a98 <RTC_SetDate+0x7c>
- 8025a26: f003 0210 and.w r2, r3, #16
- 8025a2a: b2d2 uxtb r2, r2
- 8025a2c: b30a cbz r2, 8025a72 <RTC_SetDate+0x56>
- {
- RTC_DateStruct->RTC_Month = (RTC_DateStruct->RTC_Month & (uint32_t)~(0x10)) + 0x0A;
- 8025a2e: f023 0310 bic.w r3, r3, #16
- 8025a32: 330a adds r3, #10
- 8025a34: 704b strb r3, [r1, #1]
- 8025a36: e01c b.n 8025a72 <RTC_SetDate+0x56>
- ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Date)) | \
- ((uint32_t)RTC_DateStruct->RTC_WeekDay << 13));
- }
- /* Disable the write protection for RTC registers */
- RTC->WPR = 0xCA;
- 8025a38: 4c1c ldr r4, [pc, #112] ; (8025aac <RTC_SetDate+0x90>)
- 8025a3a: 23ca movs r3, #202 ; 0xca
- 8025a3c: 6263 str r3, [r4, #36] ; 0x24
- RTC->WPR = 0x53;
- 8025a3e: 2353 movs r3, #83 ; 0x53
- 8025a40: 6263 str r3, [r4, #36] ; 0x24
- /* Set Initialization mode */
- if (RTC_EnterInitMode() == ERROR)
- 8025a42: f7ff ff11 bl 8025868 <RTC_EnterInitMode>
- 8025a46: b180 cbz r0, 8025a6a <RTC_SetDate+0x4e>
- status = ERROR;
- }
- else
- {
- /* Set the RTC_DR register */
- RTC->DR = (uint32_t)(tmpreg & RTC_DR_RESERVED_MASK);
- 8025a48: f025 457f bic.w r5, r5, #4278190080 ; 0xff000000
- 8025a4c: f025 05c0 bic.w r5, r5, #192 ; 0xc0
- 8025a50: 6065 str r5, [r4, #4]
- /* Exit Initialization mode */
- RTC_ExitInitMode();
- 8025a52: f7ff ff29 bl 80258a8 <RTC_ExitInitMode>
- /* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
- if ((RTC->CR & RTC_CR_BYPSHAD) == RESET)
- 8025a56: 68a3 ldr r3, [r4, #8]
- 8025a58: 0698 lsls r0, r3, #26
- 8025a5a: d405 bmi.n 8025a68 <RTC_SetDate+0x4c>
- {
- if (RTC_WaitForSynchro() == ERROR)
- 8025a5c: f7ff ff4e bl 80258fc <RTC_WaitForSynchro>
- RTC->WPR = 0x53;
- /* Set Initialization mode */
- if (RTC_EnterInitMode() == ERROR)
- {
- status = ERROR;
- 8025a60: 3000 adds r0, #0
- 8025a62: bf18 it ne
- 8025a64: 2001 movne r0, #1
- 8025a66: e000 b.n 8025a6a <RTC_SetDate+0x4e>
- status = SUCCESS;
- }
- }
- else
- {
- status = SUCCESS;
- 8025a68: 2001 movs r0, #1
- }
- }
- /* Enable the write protection for RTC registers */
- RTC->WPR = 0xFF;
- 8025a6a: 4b10 ldr r3, [pc, #64] ; (8025aac <RTC_SetDate+0x90>)
- 8025a6c: 22ff movs r2, #255 ; 0xff
- 8025a6e: 625a str r2, [r3, #36] ; 0x24
- 8025a70: bdf8 pop {r3, r4, r5, r6, r7, pc}
- ((uint32_t)RTC_DateStruct->RTC_Date) | \
- (((uint32_t)RTC_DateStruct->RTC_WeekDay) << 13));
- }
- else
- {
- tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Year) << 16) | \
- 8025a72: 78e0 ldrb r0, [r4, #3]
- 8025a74: f7ff fee4 bl 8025840 <RTC_ByteToBcd2>
- 8025a78: 4607 mov r7, r0
- ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Month) << 8) | \
- 8025a7a: 7860 ldrb r0, [r4, #1]
- 8025a7c: f7ff fee0 bl 8025840 <RTC_ByteToBcd2>
- 8025a80: 4606 mov r6, r0
- ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Date)) | \
- 8025a82: 78a0 ldrb r0, [r4, #2]
- 8025a84: f7ff fedc bl 8025840 <RTC_ByteToBcd2>
- ((uint32_t)RTC_DateStruct->RTC_WeekDay << 13));
- 8025a88: 7825 ldrb r5, [r4, #0]
- ((uint32_t)RTC_DateStruct->RTC_Date) | \
- (((uint32_t)RTC_DateStruct->RTC_WeekDay) << 13));
- }
- else
- {
- tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Year) << 16) | \
- 8025a8a: ea40 3045 orr.w r0, r0, r5, lsl #13
- ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Month) << 8) | \
- 8025a8e: ea40 4507 orr.w r5, r0, r7, lsl #16
- ((uint32_t)RTC_DateStruct->RTC_Date) | \
- (((uint32_t)RTC_DateStruct->RTC_WeekDay) << 13));
- }
- else
- {
- tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Year) << 16) | \
- 8025a92: ea45 2506 orr.w r5, r5, r6, lsl #8
- 8025a96: e7cf b.n 8025a38 <RTC_SetDate+0x1c>
- assert_param(IS_RTC_WEEKDAY(RTC_DateStruct->RTC_WeekDay));
- /* Check the input parameters format */
- if (RTC_Format != RTC_Format_BIN)
- {
- tmpreg = ((((uint32_t)RTC_DateStruct->RTC_Year) << 16) | \
- 8025a98: 78cd ldrb r5, [r1, #3]
- (((uint32_t)RTC_DateStruct->RTC_Month) << 8) | \
- ((uint32_t)RTC_DateStruct->RTC_Date) | \
- 8025a9a: 788a ldrb r2, [r1, #2]
- /* Check the input parameters format */
- if (RTC_Format != RTC_Format_BIN)
- {
- tmpreg = ((((uint32_t)RTC_DateStruct->RTC_Year) << 16) | \
- (((uint32_t)RTC_DateStruct->RTC_Month) << 8) | \
- 8025a9c: 021b lsls r3, r3, #8
- assert_param(IS_RTC_WEEKDAY(RTC_DateStruct->RTC_WeekDay));
- /* Check the input parameters format */
- if (RTC_Format != RTC_Format_BIN)
- {
- tmpreg = ((((uint32_t)RTC_DateStruct->RTC_Year) << 16) | \
- 8025a9e: ea43 4505 orr.w r5, r3, r5, lsl #16
- (((uint32_t)RTC_DateStruct->RTC_Month) << 8) | \
- ((uint32_t)RTC_DateStruct->RTC_Date) | \
- (((uint32_t)RTC_DateStruct->RTC_WeekDay) << 13));
- 8025aa2: 780b ldrb r3, [r1, #0]
- /* Check the input parameters format */
- if (RTC_Format != RTC_Format_BIN)
- {
- tmpreg = ((((uint32_t)RTC_DateStruct->RTC_Year) << 16) | \
- (((uint32_t)RTC_DateStruct->RTC_Month) << 8) | \
- 8025aa4: 4315 orrs r5, r2
- assert_param(IS_RTC_WEEKDAY(RTC_DateStruct->RTC_WeekDay));
- /* Check the input parameters format */
- if (RTC_Format != RTC_Format_BIN)
- {
- tmpreg = ((((uint32_t)RTC_DateStruct->RTC_Year) << 16) | \
- 8025aa6: ea45 3543 orr.w r5, r5, r3, lsl #13
- 8025aaa: e7c5 b.n 8025a38 <RTC_SetDate+0x1c>
- 8025aac: 40002800 .word 0x40002800
- 08025ab0 <RTC_GetDate>:
- /* Check the parameters */
- assert_param(IS_RTC_FORMAT(RTC_Format));
-
- /* Get the RTC_TR register */
- tmpreg = (uint32_t)(RTC->DR & RTC_DR_RESERVED_MASK);
- 8025ab0: 4b0e ldr r3, [pc, #56] ; (8025aec <RTC_GetDate+0x3c>)
- 8025ab2: 685b ldr r3, [r3, #4]
- * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that will
- * contain the returned current date configuration.
- * @retval None
- */
- void RTC_GetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct)
- {
- 8025ab4: b570 push {r4, r5, r6, lr}
-
- /* Get the RTC_TR register */
- tmpreg = (uint32_t)(RTC->DR & RTC_DR_RESERVED_MASK);
- /* Fill the structure fields with the read parameters */
- RTC_DateStruct->RTC_Year = (uint8_t)((tmpreg & (RTC_DR_YT | RTC_DR_YU)) >> 16);
- 8025ab6: f3c3 4207 ubfx r2, r3, #16, #8
- RTC_DateStruct->RTC_Month = (uint8_t)((tmpreg & (RTC_DR_MT | RTC_DR_MU)) >> 8);
- 8025aba: f3c3 2604 ubfx r6, r3, #8, #5
- RTC_DateStruct->RTC_Date = (uint8_t)(tmpreg & (RTC_DR_DT | RTC_DR_DU));
- 8025abe: f003 053f and.w r5, r3, #63 ; 0x3f
- RTC_DateStruct->RTC_WeekDay = (uint8_t)((tmpreg & (RTC_DR_WDU)) >> 13);
- 8025ac2: f3c3 3342 ubfx r3, r3, #13, #3
- * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that will
- * contain the returned current date configuration.
- * @retval None
- */
- void RTC_GetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct)
- {
- 8025ac6: 460c mov r4, r1
-
- /* Get the RTC_TR register */
- tmpreg = (uint32_t)(RTC->DR & RTC_DR_RESERVED_MASK);
- /* Fill the structure fields with the read parameters */
- RTC_DateStruct->RTC_Year = (uint8_t)((tmpreg & (RTC_DR_YT | RTC_DR_YU)) >> 16);
- 8025ac8: 70ca strb r2, [r1, #3]
- RTC_DateStruct->RTC_Month = (uint8_t)((tmpreg & (RTC_DR_MT | RTC_DR_MU)) >> 8);
- 8025aca: 704e strb r6, [r1, #1]
- RTC_DateStruct->RTC_Date = (uint8_t)(tmpreg & (RTC_DR_DT | RTC_DR_DU));
- 8025acc: 708d strb r5, [r1, #2]
- RTC_DateStruct->RTC_WeekDay = (uint8_t)((tmpreg & (RTC_DR_WDU)) >> 13);
- 8025ace: 700b strb r3, [r1, #0]
- /* Check the input parameters format */
- if (RTC_Format == RTC_Format_BIN)
- 8025ad0: b958 cbnz r0, 8025aea <RTC_GetDate+0x3a>
- {
- /* Convert the structure parameters to Binary format */
- RTC_DateStruct->RTC_Year = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Year);
- 8025ad2: 4610 mov r0, r2
- 8025ad4: f7ff fec0 bl 8025858 <RTC_Bcd2ToByte>
- 8025ad8: 70e0 strb r0, [r4, #3]
- RTC_DateStruct->RTC_Month = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Month);
- 8025ada: 4630 mov r0, r6
- 8025adc: f7ff febc bl 8025858 <RTC_Bcd2ToByte>
- 8025ae0: 7060 strb r0, [r4, #1]
- RTC_DateStruct->RTC_Date = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Date);
- 8025ae2: 4628 mov r0, r5
- 8025ae4: f7ff feb8 bl 8025858 <RTC_Bcd2ToByte>
- 8025ae8: 70a0 strb r0, [r4, #2]
- 8025aea: bd70 pop {r4, r5, r6, pc}
- 8025aec: 40002800 .word 0x40002800
- 08025af0 <RTC_WriteBackupRegister>:
- * specify the register.
- * @param Data: Data to be written in the specified RTC Backup data register.
- * @retval None
- */
- void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data)
- {
- 8025af0: b082 sub sp, #8
- __IO uint32_t tmp = 0;
- 8025af2: 2300 movs r3, #0
- 8025af4: 9301 str r3, [sp, #4]
-
- /* Check the parameters */
- assert_param(IS_RTC_BKP(RTC_BKP_DR));
- tmp = RTC_BASE + 0x50;
- 8025af6: 4b05 ldr r3, [pc, #20] ; (8025b0c <RTC_WriteBackupRegister+0x1c>)
- 8025af8: 9301 str r3, [sp, #4]
- tmp += (RTC_BKP_DR * 4);
- 8025afa: 9b01 ldr r3, [sp, #4]
- 8025afc: eb03 0080 add.w r0, r3, r0, lsl #2
- 8025b00: 9001 str r0, [sp, #4]
- /* Write the specified register */
- *(__IO uint32_t *)tmp = (uint32_t)Data;
- 8025b02: 9b01 ldr r3, [sp, #4]
- 8025b04: 6019 str r1, [r3, #0]
- }
- 8025b06: b002 add sp, #8
- 8025b08: 4770 bx lr
- 8025b0a: bf00 nop
- 8025b0c: 40002850 .word 0x40002850
- 08025b10 <RTC_ReadBackupRegister>:
- * This parameter can be: RTC_BKP_DRx where x can be from 0 to 19 to
- * specify the register.
- * @retval None
- */
- uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR)
- {
- 8025b10: b082 sub sp, #8
- __IO uint32_t tmp = 0;
- 8025b12: 2300 movs r3, #0
- 8025b14: 9301 str r3, [sp, #4]
-
- /* Check the parameters */
- assert_param(IS_RTC_BKP(RTC_BKP_DR));
- tmp = RTC_BASE + 0x50;
- 8025b16: 4b05 ldr r3, [pc, #20] ; (8025b2c <RTC_ReadBackupRegister+0x1c>)
- 8025b18: 9301 str r3, [sp, #4]
- tmp += (RTC_BKP_DR * 4);
- 8025b1a: 9b01 ldr r3, [sp, #4]
- 8025b1c: eb03 0080 add.w r0, r3, r0, lsl #2
- 8025b20: 9001 str r0, [sp, #4]
-
- /* Read the specified register */
- return (*(__IO uint32_t *)tmp);
- 8025b22: 9b01 ldr r3, [sp, #4]
- 8025b24: 6818 ldr r0, [r3, #0]
- }
- 8025b26: b002 add sp, #8
- 8025b28: 4770 bx lr
- 8025b2a: bf00 nop
- 8025b2c: 40002850 .word 0x40002850
- 08025b30 <RTC_GetITStatus>:
-
- /* Check the parameters */
- assert_param(IS_RTC_GET_IT(RTC_IT));
-
- /* Get the TAMPER Interrupt enable bit and pending bit */
- tmpreg = (uint32_t)(RTC->TAFCR & (RTC_TAFCR_TAMPIE));
- 8025b30: 4b0a ldr r3, [pc, #40] ; (8025b5c <RTC_GetITStatus+0x2c>)
- 8025b32: 6c1a ldr r2, [r3, #64] ; 0x40
- * @arg RTC_IT_ALRA: Alarm A interrupt
- * @arg RTC_IT_TAMP1: Tamper 1 event interrupt
- * @retval The new state of RTC_IT (SET or RESET).
- */
- ITStatus RTC_GetITStatus(uint32_t RTC_IT)
- {
- 8025b34: b510 push {r4, lr}
-
- /* Get the TAMPER Interrupt enable bit and pending bit */
- tmpreg = (uint32_t)(RTC->TAFCR & (RTC_TAFCR_TAMPIE));
-
- /* Get the Interrupt enable Status */
- enablestatus = (uint32_t)((RTC->CR & RTC_IT) | (tmpreg & (RTC_IT >> 15)));
- 8025b36: 689c ldr r4, [r3, #8]
-
- /* Get the Interrupt pending bit */
- tmpreg = (uint32_t)((RTC->ISR & (uint32_t)(RTC_IT >> 4)));
- 8025b38: 68d9 ldr r1, [r3, #12]
-
- /* Check the parameters */
- assert_param(IS_RTC_GET_IT(RTC_IT));
-
- /* Get the TAMPER Interrupt enable bit and pending bit */
- tmpreg = (uint32_t)(RTC->TAFCR & (RTC_TAFCR_TAMPIE));
- 8025b3a: f002 0204 and.w r2, r2, #4
-
- /* Get the Interrupt enable Status */
- enablestatus = (uint32_t)((RTC->CR & RTC_IT) | (tmpreg & (RTC_IT >> 15)));
- 8025b3e: ea02 32d0 and.w r2, r2, r0, lsr #15
- 8025b42: ea00 0304 and.w r3, r0, r4
-
- /* Get the Interrupt pending bit */
- tmpreg = (uint32_t)((RTC->ISR & (uint32_t)(RTC_IT >> 4)));
-
- /* Get the status of the Interrupt */
- if ((enablestatus != (uint32_t)RESET) && ((tmpreg & 0x0000FFFF) != (uint32_t)RESET))
- 8025b46: 4313 orrs r3, r2
- 8025b48: d006 beq.n 8025b58 <RTC_GetITStatus+0x28>
-
- /* Get the Interrupt enable Status */
- enablestatus = (uint32_t)((RTC->CR & RTC_IT) | (tmpreg & (RTC_IT >> 15)));
-
- /* Get the Interrupt pending bit */
- tmpreg = (uint32_t)((RTC->ISR & (uint32_t)(RTC_IT >> 4)));
- 8025b4a: b28b uxth r3, r1
-
- /* Get the status of the Interrupt */
- if ((enablestatus != (uint32_t)RESET) && ((tmpreg & 0x0000FFFF) != (uint32_t)RESET))
- 8025b4c: ea13 1310 ands.w r3, r3, r0, lsr #4
- {
- bitstatus = SET;
- 8025b50: bf0c ite eq
- 8025b52: 2000 moveq r0, #0
- 8025b54: 2001 movne r0, #1
- 8025b56: bd10 pop {r4, pc}
- }
- else
- {
- bitstatus = RESET;
- 8025b58: 4618 mov r0, r3
- }
- return bitstatus;
- }
- 8025b5a: bd10 pop {r4, pc}
- 8025b5c: 40002800 .word 0x40002800
- 08025b60 <RTC_ClearITPendingBit>:
- /* Get the RTC_ISR Interrupt pending bits mask */
- tmpreg = (uint32_t)(RTC_IT >> 4);
- /* Clear the interrupt pending bits in the RTC_ISR register */
- RTC->ISR = (uint32_t)((uint32_t)(~((tmpreg | RTC_ISR_INIT)& 0x0000FFFF) | (uint32_t)(RTC->ISR & RTC_ISR_INIT)));
- 8025b60: 4b05 ldr r3, [pc, #20] ; (8025b78 <RTC_ClearITPendingBit+0x18>)
- 8025b62: 68da ldr r2, [r3, #12]
- 8025b64: f3c0 100f ubfx r0, r0, #4, #16
- 8025b68: f040 0080 orr.w r0, r0, #128 ; 0x80
- 8025b6c: f002 0280 and.w r2, r2, #128 ; 0x80
- 8025b70: ea62 0200 orn r2, r2, r0
- 8025b74: 60da str r2, [r3, #12]
- 8025b76: 4770 bx lr
- 8025b78: 40002800 .word 0x40002800
- 08025b7c <SYSCFG_ETH_MediaInterfaceConfig>:
- */
- void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface)
- {
- assert_param(IS_SYSCFG_ETH_MEDIA_INTERFACE(SYSCFG_ETH_MediaInterface));
- /* Configure MII_RMII selection bit */
- *(__IO uint32_t *) PMC_MII_RMII_SEL_BB = SYSCFG_ETH_MediaInterface;
- 8025b7c: 4b01 ldr r3, [pc, #4] ; (8025b84 <SYSCFG_ETH_MediaInterfaceConfig+0x8>)
- 8025b7e: 6018 str r0, [r3, #0]
- 8025b80: 4770 bx lr
- 8025b82: bf00 nop
- 8025b84: 422700dc .word 0x422700dc
- 08025b88 <TIM_ClearITPendingBit>:
- {
- /* Check the parameters */
- assert_param(IS_TIM_ALL_PERIPH(TIMx));
- /* Clear the IT pending Bit */
- TIMx->SR = (uint16_t)~TIM_IT;
- 8025b88: 43c9 mvns r1, r1
- 8025b8a: 8201 strh r1, [r0, #16]
- 8025b8c: 4770 bx lr
- 8025b8e: 0000 movs r0, r0
- 08025b90 <USART_DeInit>:
- * @param USARTx: where x can be 1, 2, 3, 4, 5 or 6 to select the USART or
- * UART peripheral.
- * @retval None
- */
- void USART_DeInit(USART_TypeDef* USARTx)
- {
- 8025b90: b508 push {r3, lr}
- /* Check the parameters */
- assert_param(IS_USART_ALL_PERIPH(USARTx));
- if (USARTx == USART1)
- 8025b92: 4b23 ldr r3, [pc, #140] ; (8025c20 <USART_DeInit+0x90>)
- 8025b94: 4298 cmp r0, r3
- 8025b96: d105 bne.n 8025ba4 <USART_DeInit+0x14>
- {
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
- 8025b98: 2010 movs r0, #16
- 8025b9a: 2101 movs r1, #1
- 8025b9c: f7ff fe1e bl 80257dc <RCC_APB2PeriphResetCmd>
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
- 8025ba0: 2010 movs r0, #16
- 8025ba2: e037 b.n 8025c14 <USART_DeInit+0x84>
- }
- else if (USARTx == USART2)
- 8025ba4: 4b1f ldr r3, [pc, #124] ; (8025c24 <USART_DeInit+0x94>)
- 8025ba6: 4298 cmp r0, r3
- 8025ba8: d107 bne.n 8025bba <USART_DeInit+0x2a>
- {
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
- 8025baa: f44f 3000 mov.w r0, #131072 ; 0x20000
- 8025bae: 2101 movs r1, #1
- 8025bb0: f7ff fe08 bl 80257c4 <RCC_APB1PeriphResetCmd>
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
- 8025bb4: f44f 3000 mov.w r0, #131072 ; 0x20000
- 8025bb8: e009 b.n 8025bce <USART_DeInit+0x3e>
- }
- else if (USARTx == USART3)
- 8025bba: 4b1b ldr r3, [pc, #108] ; (8025c28 <USART_DeInit+0x98>)
- 8025bbc: 4298 cmp r0, r3
- 8025bbe: d10b bne.n 8025bd8 <USART_DeInit+0x48>
- {
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
- 8025bc0: f44f 2080 mov.w r0, #262144 ; 0x40000
- 8025bc4: 2101 movs r1, #1
- 8025bc6: f7ff fdfd bl 80257c4 <RCC_APB1PeriphResetCmd>
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
- 8025bca: f44f 2080 mov.w r0, #262144 ; 0x40000
- 8025bce: 2100 movs r1, #0
- {
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE);
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, DISABLE);
- }
- }
- }
- 8025bd0: e8bd 4008 ldmia.w sp!, {r3, lr}
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
- }
- else if (USARTx == USART3)
- {
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
- 8025bd4: f7ff bdf6 b.w 80257c4 <RCC_APB1PeriphResetCmd>
- }
- else if (USARTx == UART4)
- 8025bd8: 4b14 ldr r3, [pc, #80] ; (8025c2c <USART_DeInit+0x9c>)
- 8025bda: 4298 cmp r0, r3
- 8025bdc: d107 bne.n 8025bee <USART_DeInit+0x5e>
- {
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
- 8025bde: f44f 2000 mov.w r0, #524288 ; 0x80000
- 8025be2: 2101 movs r1, #1
- 8025be4: f7ff fdee bl 80257c4 <RCC_APB1PeriphResetCmd>
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE);
- 8025be8: f44f 2000 mov.w r0, #524288 ; 0x80000
- 8025bec: e7ef b.n 8025bce <USART_DeInit+0x3e>
- }
- else if (USARTx == UART5)
- 8025bee: 4b10 ldr r3, [pc, #64] ; (8025c30 <USART_DeInit+0xa0>)
- 8025bf0: 4298 cmp r0, r3
- 8025bf2: d107 bne.n 8025c04 <USART_DeInit+0x74>
- {
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
- 8025bf4: f44f 1080 mov.w r0, #1048576 ; 0x100000
- 8025bf8: 2101 movs r1, #1
- 8025bfa: f7ff fde3 bl 80257c4 <RCC_APB1PeriphResetCmd>
- RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
- 8025bfe: f44f 1080 mov.w r0, #1048576 ; 0x100000
- 8025c02: e7e4 b.n 8025bce <USART_DeInit+0x3e>
- }
- else
- {
- if (USARTx == USART6)
- 8025c04: 4b0b ldr r3, [pc, #44] ; (8025c34 <USART_DeInit+0xa4>)
- 8025c06: 4298 cmp r0, r3
- 8025c08: d109 bne.n 8025c1e <USART_DeInit+0x8e>
- {
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE);
- 8025c0a: 2020 movs r0, #32
- 8025c0c: 2101 movs r1, #1
- 8025c0e: f7ff fde5 bl 80257dc <RCC_APB2PeriphResetCmd>
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, DISABLE);
- 8025c12: 2020 movs r0, #32
- 8025c14: 2100 movs r1, #0
- }
- }
- }
- 8025c16: e8bd 4008 ldmia.w sp!, {r3, lr}
- else
- {
- if (USARTx == USART6)
- {
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE);
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, DISABLE);
- 8025c1a: f7ff bddf b.w 80257dc <RCC_APB2PeriphResetCmd>
- 8025c1e: bd08 pop {r3, pc}
- 8025c20: 40011000 .word 0x40011000
- 8025c24: 40004400 .word 0x40004400
- 8025c28: 40004800 .word 0x40004800
- 8025c2c: 40004c00 .word 0x40004c00
- 8025c30: 40005000 .word 0x40005000
- 8025c34: 40011400 .word 0x40011400
- 08025c38 <USART_Init>:
- {
- assert_param(IS_USART_1236_PERIPH(USARTx));
- }
- /*---------------------------- USART CR2 Configuration -----------------------*/
- tmpreg = USARTx->CR2;
- 8025c38: 8a03 ldrh r3, [r0, #16]
- /* Clear STOP[13:12] bits */
- tmpreg &= (uint32_t)~((uint32_t)USART_CR2_STOP);
- /* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit :
- Set STOP[13:12] bits according to USART_StopBits value */
- tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits;
- 8025c3a: 88ca ldrh r2, [r1, #6]
- {
- assert_param(IS_USART_1236_PERIPH(USARTx));
- }
- /*---------------------------- USART CR2 Configuration -----------------------*/
- tmpreg = USARTx->CR2;
- 8025c3c: b29b uxth r3, r3
- /* Clear STOP[13:12] bits */
- tmpreg &= (uint32_t)~((uint32_t)USART_CR2_STOP);
- 8025c3e: f423 5340 bic.w r3, r3, #12288 ; 0x3000
- * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that contains
- * the configuration information for the specified USART peripheral.
- * @retval None
- */
- void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
- {
- 8025c42: b530 push {r4, r5, lr}
- /* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit :
- Set STOP[13:12] bits according to USART_StopBits value */
- tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits;
-
- /* Write to USART CR2 */
- USARTx->CR2 = (uint16_t)tmpreg;
- 8025c44: 4313 orrs r3, r2
- * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that contains
- * the configuration information for the specified USART peripheral.
- * @retval None
- */
- void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
- {
- 8025c46: 460d mov r5, r1
- /* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit :
- Set STOP[13:12] bits according to USART_StopBits value */
- tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits;
-
- /* Write to USART CR2 */
- USARTx->CR2 = (uint16_t)tmpreg;
- 8025c48: 8203 strh r3, [r0, #16]
- /*---------------------------- USART CR1 Configuration -----------------------*/
- tmpreg = USARTx->CR1;
- 8025c4a: 8983 ldrh r3, [r0, #12]
- /* Configure the USART Word Length, Parity and mode:
- Set the M bits according to USART_WordLength value
- Set PCE and PS bits according to USART_Parity value
- Set TE and RE bits according to USART_Mode value */
- tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
- 8025c4c: 8909 ldrh r1, [r1, #8]
- 8025c4e: 88aa ldrh r2, [r5, #4]
- /*---------------------------- USART CR1 Configuration -----------------------*/
- tmpreg = USARTx->CR1;
- /* Clear M, PCE, PS, TE and RE bits */
- tmpreg &= (uint32_t)~((uint32_t)CR1_CLEAR_MASK);
- 8025c50: f423 53b0 bic.w r3, r3, #5632 ; 0x1600
- /* Configure the USART Word Length, Parity and mode:
- Set the M bits according to USART_WordLength value
- Set PCE and PS bits according to USART_Parity value
- Set TE and RE bits according to USART_Mode value */
- tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
- 8025c54: 430a orrs r2, r1
- 8025c56: 8969 ldrh r1, [r5, #10]
- /*---------------------------- USART CR1 Configuration -----------------------*/
- tmpreg = USARTx->CR1;
- /* Clear M, PCE, PS, TE and RE bits */
- tmpreg &= (uint32_t)~((uint32_t)CR1_CLEAR_MASK);
- 8025c58: f023 030c bic.w r3, r3, #12
- 8025c5c: 041b lsls r3, r3, #16
- /* Configure the USART Word Length, Parity and mode:
- Set the M bits according to USART_WordLength value
- Set PCE and PS bits according to USART_Parity value
- Set TE and RE bits according to USART_Mode value */
- tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
- 8025c5e: 430a orrs r2, r1
- /*---------------------------- USART CR1 Configuration -----------------------*/
- tmpreg = USARTx->CR1;
- /* Clear M, PCE, PS, TE and RE bits */
- tmpreg &= (uint32_t)~((uint32_t)CR1_CLEAR_MASK);
- 8025c60: 0c1b lsrs r3, r3, #16
- /* Configure the USART Word Length, Parity and mode:
- Set the M bits according to USART_WordLength value
- Set PCE and PS bits according to USART_Parity value
- Set TE and RE bits according to USART_Mode value */
- tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
- 8025c62: b292 uxth r2, r2
- USART_InitStruct->USART_Mode;
- /* Write to USART CR1 */
- USARTx->CR1 = (uint16_t)tmpreg;
- 8025c64: 4313 orrs r3, r2
- 8025c66: 8183 strh r3, [r0, #12]
- /*---------------------------- USART CR3 Configuration -----------------------*/
- tmpreg = USARTx->CR3;
- 8025c68: 8a83 ldrh r3, [r0, #20]
- /* Clear CTSE and RTSE bits */
- tmpreg &= (uint32_t)~((uint32_t)CR3_CLEAR_MASK);
- /* Configure the USART HFC :
- Set CTSE and RTSE bits according to USART_HardwareFlowControl value */
- tmpreg |= USART_InitStruct->USART_HardwareFlowControl;
- 8025c6a: 89aa ldrh r2, [r5, #12]
- /* Write to USART CR1 */
- USARTx->CR1 = (uint16_t)tmpreg;
- /*---------------------------- USART CR3 Configuration -----------------------*/
- tmpreg = USARTx->CR3;
- 8025c6c: b29b uxth r3, r3
- /* Clear CTSE and RTSE bits */
- tmpreg &= (uint32_t)~((uint32_t)CR3_CLEAR_MASK);
- 8025c6e: f423 7340 bic.w r3, r3, #768 ; 0x300
- /* Configure the USART HFC :
- Set CTSE and RTSE bits according to USART_HardwareFlowControl value */
- tmpreg |= USART_InitStruct->USART_HardwareFlowControl;
- /* Write to USART CR3 */
- USARTx->CR3 = (uint16_t)tmpreg;
- 8025c72: 4313 orrs r3, r2
- * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that contains
- * the configuration information for the specified USART peripheral.
- * @retval None
- */
- void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
- {
- 8025c74: b085 sub sp, #20
- /* Configure the USART HFC :
- Set CTSE and RTSE bits according to USART_HardwareFlowControl value */
- tmpreg |= USART_InitStruct->USART_HardwareFlowControl;
- /* Write to USART CR3 */
- USARTx->CR3 = (uint16_t)tmpreg;
- 8025c76: 8283 strh r3, [r0, #20]
- * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that contains
- * the configuration information for the specified USART peripheral.
- * @retval None
- */
- void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
- {
- 8025c78: 4604 mov r4, r0
- /* Write to USART CR3 */
- USARTx->CR3 = (uint16_t)tmpreg;
- /*---------------------------- USART BRR Configuration -----------------------*/
- /* Configure the USART Baud Rate */
- RCC_GetClocksFreq(&RCC_ClocksStatus);
- 8025c7a: 4668 mov r0, sp
- 8025c7c: f7ff fd02 bl 8025684 <RCC_GetClocksFreq>
- if ((USARTx == USART1) || (USARTx == USART6))
- 8025c80: 4b19 ldr r3, [pc, #100] ; (8025ce8 <USART_Init+0xb0>)
- 8025c82: 429c cmp r4, r3
- 8025c84: d003 beq.n 8025c8e <USART_Init+0x56>
- 8025c86: f503 6380 add.w r3, r3, #1024 ; 0x400
- 8025c8a: 429c cmp r4, r3
- 8025c8c: d101 bne.n 8025c92 <USART_Init+0x5a>
- {
- apbclock = RCC_ClocksStatus.PCLK2_Frequency;
- 8025c8e: 9b03 ldr r3, [sp, #12]
- 8025c90: e000 b.n 8025c94 <USART_Init+0x5c>
- }
- else
- {
- apbclock = RCC_ClocksStatus.PCLK1_Frequency;
- 8025c92: 9b02 ldr r3, [sp, #8]
- }
-
- /* Determine the integer part */
- if ((USARTx->CR1 & USART_CR1_OVER8) != 0)
- 8025c94: 89a2 ldrh r2, [r4, #12]
- 8025c96: b212 sxth r2, r2
- 8025c98: 2a00 cmp r2, #0
- 8025c9a: f04f 0119 mov.w r1, #25
- 8025c9e: 682a ldr r2, [r5, #0]
- {
- /* Integer part computing in case Oversampling mode is 8 Samples */
- integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));
- 8025ca0: fb01 f103 mul.w r1, r1, r3
- {
- apbclock = RCC_ClocksStatus.PCLK1_Frequency;
- }
-
- /* Determine the integer part */
- if ((USARTx->CR1 & USART_CR1_OVER8) != 0)
- 8025ca4: da01 bge.n 8025caa <USART_Init+0x72>
- {
- /* Integer part computing in case Oversampling mode is 8 Samples */
- integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));
- 8025ca6: 0052 lsls r2, r2, #1
- 8025ca8: e000 b.n 8025cac <USART_Init+0x74>
- }
- else /* if ((USARTx->CR1 & USART_CR1_OVER8) == 0) */
- {
- /* Integer part computing in case Oversampling mode is 16 Samples */
- integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate)));
- 8025caa: 0092 lsls r2, r2, #2
- }
- tmpreg = (integerdivider / 100) << 4;
- 8025cac: 2364 movs r3, #100 ; 0x64
- integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));
- }
- else /* if ((USARTx->CR1 & USART_CR1_OVER8) == 0) */
- {
- /* Integer part computing in case Oversampling mode is 16 Samples */
- integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate)));
- 8025cae: fbb1 f1f2 udiv r1, r1, r2
- }
- tmpreg = (integerdivider / 100) << 4;
- 8025cb2: fbb1 f2f3 udiv r2, r1, r3
- 8025cb6: 0112 lsls r2, r2, #4
- /* Determine the fractional part */
- fractionaldivider = integerdivider - (100 * (tmpreg >> 4));
- 8025cb8: 0910 lsrs r0, r2, #4
- 8025cba: fb03 1110 mls r1, r3, r0, r1
- /* Implement the fractional part in the register */
- if ((USARTx->CR1 & USART_CR1_OVER8) != 0)
- 8025cbe: 89a0 ldrh r0, [r4, #12]
- 8025cc0: b200 sxth r0, r0
- 8025cc2: 2800 cmp r0, #0
- 8025cc4: da06 bge.n 8025cd4 <USART_Init+0x9c>
- {
- tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);
- 8025cc6: 00c9 lsls r1, r1, #3
- 8025cc8: 3132 adds r1, #50 ; 0x32
- 8025cca: fbb1 f3f3 udiv r3, r1, r3
- 8025cce: f003 0307 and.w r3, r3, #7
- 8025cd2: e005 b.n 8025ce0 <USART_Init+0xa8>
- }
- else /* if ((USARTx->CR1 & USART_CR1_OVER8) == 0) */
- {
- tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);
- 8025cd4: 0109 lsls r1, r1, #4
- 8025cd6: 3132 adds r1, #50 ; 0x32
- 8025cd8: fbb1 f3f3 udiv r3, r1, r3
- 8025cdc: f003 030f and.w r3, r3, #15
- 8025ce0: 431a orrs r2, r3
- }
-
- /* Write to USART BRR register */
- USARTx->BRR = (uint16_t)tmpreg;
- 8025ce2: 8122 strh r2, [r4, #8]
- }
- 8025ce4: b005 add sp, #20
- 8025ce6: bd30 pop {r4, r5, pc}
- 8025ce8: 40011000 .word 0x40011000
- 08025cec <USART_Cmd>:
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- {
- /* Enable the selected USART by setting the UE bit in the CR1 register */
- USARTx->CR1 |= USART_CR1_UE;
- 8025cec: 8983 ldrh r3, [r0, #12]
- {
- /* Check the parameters */
- assert_param(IS_USART_ALL_PERIPH(USARTx));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- 8025cee: b119 cbz r1, 8025cf8 <USART_Cmd+0xc>
- {
- /* Enable the selected USART by setting the UE bit in the CR1 register */
- USARTx->CR1 |= USART_CR1_UE;
- 8025cf0: b29b uxth r3, r3
- 8025cf2: f443 5300 orr.w r3, r3, #8192 ; 0x2000
- 8025cf6: e003 b.n 8025d00 <USART_Cmd+0x14>
- }
- else
- {
- /* Disable the selected USART by clearing the UE bit in the CR1 register */
- USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_UE);
- 8025cf8: f423 5300 bic.w r3, r3, #8192 ; 0x2000
- 8025cfc: 041b lsls r3, r3, #16
- 8025cfe: 0c1b lsrs r3, r3, #16
- 8025d00: 8183 strh r3, [r0, #12]
- 8025d02: 4770 bx lr
- 08025d04 <USART_ITConfig>:
- }
-
- usartxbase = (uint32_t)USARTx;
- /* Get the USART register index */
- usartreg = (((uint8_t)USART_IT) >> 0x05);
- 8025d04: f3c1 1342 ubfx r3, r1, #5, #3
- * @param NewState: new state of the specified USARTx interrupts.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
- {
- 8025d08: b510 push {r4, lr}
- /* Get the USART register index */
- usartreg = (((uint8_t)USART_IT) >> 0x05);
- /* Get the interrupt position */
- itpos = USART_IT & IT_MASK;
- itmask = (((uint32_t)0x01) << itpos);
- 8025d0a: 2401 movs r4, #1
- 8025d0c: f001 011f and.w r1, r1, #31
-
- if (usartreg == 0x01) /* The IT is in CR1 register */
- 8025d10: 42a3 cmp r3, r4
- /* Get the USART register index */
- usartreg = (((uint8_t)USART_IT) >> 0x05);
- /* Get the interrupt position */
- itpos = USART_IT & IT_MASK;
- itmask = (((uint32_t)0x01) << itpos);
- 8025d12: fa04 f101 lsl.w r1, r4, r1
-
- if (usartreg == 0x01) /* The IT is in CR1 register */
- 8025d16: d101 bne.n 8025d1c <USART_ITConfig+0x18>
- {
- usartxbase += 0x0C;
- 8025d18: 300c adds r0, #12
- 8025d1a: e004 b.n 8025d26 <USART_ITConfig+0x22>
- }
- else if (usartreg == 0x02) /* The IT is in CR2 register */
- 8025d1c: 2b02 cmp r3, #2
- 8025d1e: d101 bne.n 8025d24 <USART_ITConfig+0x20>
- {
- usartxbase += 0x10;
- 8025d20: 3010 adds r0, #16
- 8025d22: e000 b.n 8025d26 <USART_ITConfig+0x22>
- }
- else /* The IT is in CR3 register */
- {
- usartxbase += 0x14;
- 8025d24: 3014 adds r0, #20
- }
- if (NewState != DISABLE)
- {
- *(__IO uint32_t*)usartxbase |= itmask;
- 8025d26: 6803 ldr r3, [r0, #0]
- }
- else /* The IT is in CR3 register */
- {
- usartxbase += 0x14;
- }
- if (NewState != DISABLE)
- 8025d28: b10a cbz r2, 8025d2e <USART_ITConfig+0x2a>
- {
- *(__IO uint32_t*)usartxbase |= itmask;
- 8025d2a: 4319 orrs r1, r3
- 8025d2c: e001 b.n 8025d32 <USART_ITConfig+0x2e>
- }
- else
- {
- *(__IO uint32_t*)usartxbase &= ~itmask;
- 8025d2e: ea23 0101 bic.w r1, r3, r1
- 8025d32: 6001 str r1, [r0, #0]
- 8025d34: bd10 pop {r4, pc}
- 08025d36 <USART_GetITStatus>:
- * @arg USART_IT_FE: Framing Error interrupt
- * @arg USART_IT_PE: Parity Error interrupt
- * @retval The new state of USART_IT (SET or RESET).
- */
- ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
- {
- 8025d36: b510 push {r4, lr}
- {
- assert_param(IS_USART_1236_PERIPH(USARTx));
- }
-
- /* Get the USART register index */
- usartreg = (((uint8_t)USART_IT) >> 0x05);
- 8025d38: f3c1 1442 ubfx r4, r1, #5, #3
- /* Get the interrupt position */
- itmask = USART_IT & IT_MASK;
- itmask = (uint32_t)0x01 << itmask;
- 8025d3c: 2201 movs r2, #1
- 8025d3e: f001 031f and.w r3, r1, #31
-
- if (usartreg == 0x01) /* The IT is in CR1 register */
- 8025d42: 2c01 cmp r4, #1
-
- /* Get the USART register index */
- usartreg = (((uint8_t)USART_IT) >> 0x05);
- /* Get the interrupt position */
- itmask = USART_IT & IT_MASK;
- itmask = (uint32_t)0x01 << itmask;
- 8025d44: fa02 f203 lsl.w r2, r2, r3
-
- if (usartreg == 0x01) /* The IT is in CR1 register */
- 8025d48: d101 bne.n 8025d4e <USART_GetITStatus+0x18>
- {
- itmask &= USARTx->CR1;
- 8025d4a: 8983 ldrh r3, [r0, #12]
- 8025d4c: e003 b.n 8025d56 <USART_GetITStatus+0x20>
- }
- else if (usartreg == 0x02) /* The IT is in CR2 register */
- 8025d4e: 2c02 cmp r4, #2
- {
- itmask &= USARTx->CR2;
- 8025d50: bf0c ite eq
- 8025d52: 8a03 ldrheq r3, [r0, #16]
- }
- else /* The IT is in CR3 register */
- {
- itmask &= USARTx->CR3;
- 8025d54: 8a83 ldrhne r3, [r0, #20]
- 8025d56: b29b uxth r3, r3
- 8025d58: 4013 ands r3, r2
- }
-
- bitpos = USART_IT >> 0x08;
- bitpos = (uint32_t)0x01 << bitpos;
- bitpos &= USARTx->SR;
- 8025d5a: 8802 ldrh r2, [r0, #0]
- 8025d5c: b292 uxth r2, r2
- if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))
- 8025d5e: b143 cbz r3, 8025d72 <USART_GetITStatus+0x3c>
- {
- itmask &= USARTx->CR3;
- }
-
- bitpos = USART_IT >> 0x08;
- bitpos = (uint32_t)0x01 << bitpos;
- 8025d60: 2301 movs r3, #1
- 8025d62: 0a09 lsrs r1, r1, #8
- 8025d64: fa03 f101 lsl.w r1, r3, r1
- bitpos &= USARTx->SR;
- if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))
- 8025d68: 4211 tst r1, r2
- {
- bitstatus = SET;
- 8025d6a: bf0c ite eq
- 8025d6c: 2000 moveq r0, #0
- 8025d6e: 2001 movne r0, #1
- 8025d70: bd10 pop {r4, pc}
- }
- else
- {
- bitstatus = RESET;
- 8025d72: 4618 mov r0, r3
- }
-
- return bitstatus;
- }
- 8025d74: bd10 pop {r4, pc}
- 08025d76 <USART_ClearITPendingBit>:
- {
- assert_param(IS_USART_1236_PERIPH(USARTx));
- }
-
- bitpos = USART_IT >> 0x08;
- itmask = ((uint16_t)0x01 << (uint16_t)bitpos);
- 8025d76: 0a09 lsrs r1, r1, #8
- 8025d78: 2301 movs r3, #1
- 8025d7a: fa03 f301 lsl.w r3, r3, r1
- USARTx->SR = (uint16_t)~itmask;
- 8025d7e: 43db mvns r3, r3
- 8025d80: 8003 strh r3, [r0, #0]
- 8025d82: 4770 bx lr
- 08025d84 <SystemInit>:
- SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
- #endif
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set HSION bit */
- RCC->CR |= (uint32_t)0x00000001;
- 8025d84: 4b35 ldr r3, [pc, #212] ; (8025e5c <SystemInit+0xd8>)
- 8025d86: 681a ldr r2, [r3, #0]
- 8025d88: f042 0201 orr.w r2, r2, #1
- 8025d8c: 601a str r2, [r3, #0]
- /* Reset CFGR register */
- RCC->CFGR = 0x00000000;
- 8025d8e: 2200 movs r2, #0
- 8025d90: 609a str r2, [r3, #8]
- /* Reset HSEON, CSSON and PLLON bits */
- RCC->CR &= (uint32_t)0xFEF6FFFF;
- 8025d92: 6819 ldr r1, [r3, #0]
- 8025d94: f021 7184 bic.w r1, r1, #17301504 ; 0x1080000
- 8025d98: f421 3180 bic.w r1, r1, #65536 ; 0x10000
- 8025d9c: 6019 str r1, [r3, #0]
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x24003010;
- 8025d9e: 4930 ldr r1, [pc, #192] ; (8025e60 <SystemInit+0xdc>)
- 8025da0: 6059 str r1, [r3, #4]
- /* Reset HSEBYP bit */
- RCC->CR &= (uint32_t)0xFFFBFFFF;
- 8025da2: 6819 ldr r1, [r3, #0]
- * SystemFrequency variable.
- * @param None
- * @retval None
- */
- void SystemInit(void)
- {
- 8025da4: b082 sub sp, #8
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x24003010;
- /* Reset HSEBYP bit */
- RCC->CR &= (uint32_t)0xFFFBFFFF;
- 8025da6: f421 2180 bic.w r1, r1, #262144 ; 0x40000
- 8025daa: 6019 str r1, [r3, #0]
- /* Disable all interrupts */
- RCC->CIR = 0x00000000;
- 8025dac: 60da str r2, [r3, #12]
- static void SetSysClock(void)
- {
- /******************************************************************************/
- /* PLL (clocked by HSE) used as System clock source */
- /******************************************************************************/
- __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
- 8025dae: 9200 str r2, [sp, #0]
- 8025db0: 9201 str r2, [sp, #4]
-
- /* Enable HSE */
- RCC->CR |= ((uint32_t)RCC_CR_HSEON);
- 8025db2: 681a ldr r2, [r3, #0]
- 8025db4: f442 3280 orr.w r2, r2, #65536 ; 0x10000
- 8025db8: 601a str r2, [r3, #0]
-
- /* Wait till HSE is ready and if Time out is reached exit */
- do
- {
- HSEStatus = RCC->CR & RCC_CR_HSERDY;
- 8025dba: 681a ldr r2, [r3, #0]
- 8025dbc: f402 3200 and.w r2, r2, #131072 ; 0x20000
- 8025dc0: 9201 str r2, [sp, #4]
- StartUpCounter++;
- 8025dc2: 9a00 ldr r2, [sp, #0]
- 8025dc4: 3201 adds r2, #1
- 8025dc6: 9200 str r2, [sp, #0]
- } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
- 8025dc8: 9a01 ldr r2, [sp, #4]
- 8025dca: b91a cbnz r2, 8025dd4 <SystemInit+0x50>
- 8025dcc: 9a00 ldr r2, [sp, #0]
- 8025dce: f5b2 6fa0 cmp.w r2, #1280 ; 0x500
- 8025dd2: d1f2 bne.n 8025dba <SystemInit+0x36>
- if ((RCC->CR & RCC_CR_HSERDY) != RESET)
- 8025dd4: 4b21 ldr r3, [pc, #132] ; (8025e5c <SystemInit+0xd8>)
- 8025dd6: 681b ldr r3, [r3, #0]
- 8025dd8: f413 3300 ands.w r3, r3, #131072 ; 0x20000
- {
- HSEStatus = (uint32_t)0x01;
- 8025ddc: bf18 it ne
- 8025dde: 2301 movne r3, #1
- }
- else
- {
- HSEStatus = (uint32_t)0x00;
- 8025de0: 9301 str r3, [sp, #4]
- }
- if (HSEStatus == (uint32_t)0x01)
- 8025de2: 9b01 ldr r3, [sp, #4]
- 8025de4: 2b01 cmp r3, #1
- 8025de6: d133 bne.n 8025e50 <SystemInit+0xcc>
- {
- /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */
- RCC->APB1ENR |= RCC_APB1ENR_PWREN;
- 8025de8: 4b1c ldr r3, [pc, #112] ; (8025e5c <SystemInit+0xd8>)
- 8025dea: 6c1a ldr r2, [r3, #64] ; 0x40
- 8025dec: f042 5280 orr.w r2, r2, #268435456 ; 0x10000000
- 8025df0: 641a str r2, [r3, #64] ; 0x40
- PWR->CR |= PWR_CR_VOS;
- 8025df2: 4a1c ldr r2, [pc, #112] ; (8025e64 <SystemInit+0xe0>)
- 8025df4: 6811 ldr r1, [r2, #0]
- 8025df6: f441 4180 orr.w r1, r1, #16384 ; 0x4000
- 8025dfa: 6011 str r1, [r2, #0]
- /* HCLK = SYSCLK / 1*/
- RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
- 8025dfc: 689a ldr r2, [r3, #8]
- 8025dfe: 609a str r2, [r3, #8]
-
- /* PCLK2 = HCLK / 2*/
- RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
- 8025e00: 689a ldr r2, [r3, #8]
- 8025e02: f442 4200 orr.w r2, r2, #32768 ; 0x8000
- 8025e06: 609a str r2, [r3, #8]
-
- /* PCLK1 = HCLK / 4*/
- RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
- 8025e08: 689a ldr r2, [r3, #8]
- 8025e0a: f442 52a0 orr.w r2, r2, #5120 ; 0x1400
- 8025e0e: 609a str r2, [r3, #8]
- /* Configure the main PLL */
- RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |
- 8025e10: 4a15 ldr r2, [pc, #84] ; (8025e68 <SystemInit+0xe4>)
- 8025e12: 605a str r2, [r3, #4]
- (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);
- /* Enable the main PLL */
- RCC->CR |= RCC_CR_PLLON;
- 8025e14: 681a ldr r2, [r3, #0]
- 8025e16: f042 7280 orr.w r2, r2, #16777216 ; 0x1000000
- 8025e1a: 601a str r2, [r3, #0]
- /* Wait till the main PLL is ready */
- while((RCC->CR & RCC_CR_PLLRDY) == 0)
- 8025e1c: 6819 ldr r1, [r3, #0]
- 8025e1e: 4a0f ldr r2, [pc, #60] ; (8025e5c <SystemInit+0xd8>)
- 8025e20: 0189 lsls r1, r1, #6
- 8025e22: d5fb bpl.n 8025e1c <SystemInit+0x98>
- {
- }
-
- /* Configure Flash prefetch, Instruction cache, Data cache and wait state */
- FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
- 8025e24: 4b11 ldr r3, [pc, #68] ; (8025e6c <SystemInit+0xe8>)
- 8025e26: f240 6105 movw r1, #1541 ; 0x605
- 8025e2a: 6019 str r1, [r3, #0]
- /* Select the main PLL as system clock source */
- RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
- 8025e2c: 6893 ldr r3, [r2, #8]
- 8025e2e: f023 0303 bic.w r3, r3, #3
- 8025e32: 6093 str r3, [r2, #8]
- RCC->CFGR |= RCC_CFGR_SW_PLL;
- 8025e34: 6893 ldr r3, [r2, #8]
- 8025e36: f043 0302 orr.w r3, r3, #2
- 8025e3a: 6093 str r3, [r2, #8]
- /* Wait till the main PLL is used as system clock source */
- while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
- 8025e3c: 6891 ldr r1, [r2, #8]
- 8025e3e: 4b07 ldr r3, [pc, #28] ; (8025e5c <SystemInit+0xd8>)
- 8025e40: f001 010c and.w r1, r1, #12
- 8025e44: 2908 cmp r1, #8
- 8025e46: d1f9 bne.n 8025e3c <SystemInit+0xb8>
- {
- }
-
- /* Добавил переход на внутренний генератор в случае отказа HSE */
- RCC->CR|=RCC_CR_CSSON;
- 8025e48: 681a ldr r2, [r3, #0]
- 8025e4a: f442 2200 orr.w r2, r2, #524288 ; 0x80000
- 8025e4e: 601a str r2, [r3, #0]
- /* Configure the Vector Table location add offset address ------------------*/
- #ifdef VECT_TAB_SRAM
- SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
- #else
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
- 8025e50: 4b07 ldr r3, [pc, #28] ; (8025e70 <SystemInit+0xec>)
- 8025e52: f04f 6200 mov.w r2, #134217728 ; 0x8000000
- 8025e56: 609a str r2, [r3, #8]
- #endif
- }
- 8025e58: b002 add sp, #8
- 8025e5a: 4770 bx lr
- 8025e5c: 40023800 .word 0x40023800
- 8025e60: 24003010 .word 0x24003010
- 8025e64: 40007000 .word 0x40007000
- 8025e68: 07405419 .word 0x07405419
- 8025e6c: 40023c00 .word 0x40023c00
- 8025e70: e000ed00 .word 0xe000ed00
- 08025e74 <gpio_hw_config_pin>:
- GPIO_TABLE(EXPAND_AS_DEFS)
- };
- void gpio_hw_config_pin(GPIO_TypeDef *port, uint8_t pin, uint16_t conf) {
- uint8_t shift;
- shift = pin * 2;
- 8025e74: 004b lsls r3, r1, #1
- port->MODER &= ~(GPIO_MODER_MASK << shift);
- 8025e76: b2db uxtb r3, r3
- gpio_pindef_t gpio_pins[] = {
- GPIO_TABLE(EXPAND_AS_DEFS)
- };
- void gpio_hw_config_pin(GPIO_TypeDef *port, uint8_t pin, uint16_t conf) {
- 8025e78: b570 push {r4, r5, r6, lr}
- uint8_t shift;
- shift = pin * 2;
- port->MODER &= ~(GPIO_MODER_MASK << shift);
- 8025e7a: 2403 movs r4, #3
- 8025e7c: 6805 ldr r5, [r0, #0]
- 8025e7e: fa04 f403 lsl.w r4, r4, r3
- 8025e82: 43e4 mvns r4, r4
- 8025e84: 4025 ands r5, r4
- 8025e86: 6005 str r5, [r0, #0]
- port->MODER |= (uint32_t)((conf >> GPIO_MODE_CFG_SHIFT) & GPIO_MODER_MASK) << shift;
- 8025e88: 6806 ldr r6, [r0, #0]
- 8025e8a: f002 0503 and.w r5, r2, #3
- 8025e8e: fa05 f503 lsl.w r5, r5, r3
- 8025e92: 4335 orrs r5, r6
- 8025e94: 6005 str r5, [r0, #0]
- port->OTYPER &= ~(GPIO_TYPER_MASK << pin);
- 8025e96: 6846 ldr r6, [r0, #4]
- 8025e98: 2501 movs r5, #1
- 8025e9a: fa05 f501 lsl.w r5, r5, r1
- 8025e9e: ea26 0505 bic.w r5, r6, r5
- 8025ea2: 6045 str r5, [r0, #4]
- port->OTYPER |= (uint32_t)((conf >> GPIO_TYPE_CFG_SHIFT) & GPIO_TYPER_MASK) << pin;
- 8025ea4: 6845 ldr r5, [r0, #4]
- 8025ea6: f3c2 0680 ubfx r6, r2, #2, #1
- 8025eaa: fa06 f101 lsl.w r1, r6, r1
- 8025eae: 4329 orrs r1, r5
- 8025eb0: 6041 str r1, [r0, #4]
- port->OSPEEDR &= ~(GPIO_SPEEDR_MASK << shift);
- 8025eb2: 6881 ldr r1, [r0, #8]
- 8025eb4: 4021 ands r1, r4
- 8025eb6: 6081 str r1, [r0, #8]
- port->OSPEEDR |= (uint32_t)((conf >> GPIO_SPEED_CFG_SHIFT) & GPIO_SPEEDR_MASK) << shift;
- 8025eb8: 6885 ldr r5, [r0, #8]
- 8025eba: f3c2 1101 ubfx r1, r2, #4, #2
- 8025ebe: fa01 f103 lsl.w r1, r1, r3
- 8025ec2: 4329 orrs r1, r5
- 8025ec4: 6081 str r1, [r0, #8]
- port->PUPDR &= ~(GPIO_PUPDR_MASK << shift);
- 8025ec6: 68c1 ldr r1, [r0, #12]
- 8025ec8: 400c ands r4, r1
- 8025eca: 60c4 str r4, [r0, #12]
- port->PUPDR |= (uint32_t)((conf >> GPIO_PUPD_CFG_SHIFT) & GPIO_PUPDR_MASK) << shift;
- 8025ecc: 68c1 ldr r1, [r0, #12]
- 8025ece: f3c2 1281 ubfx r2, r2, #6, #2
- 8025ed2: fa02 f303 lsl.w r3, r2, r3
- 8025ed6: 430b orrs r3, r1
- 8025ed8: 60c3 str r3, [r0, #12]
- 8025eda: bd70 pop {r4, r5, r6, pc}
- 08025edc <gpio_connect_af>:
- }
- void gpio_connect_af(gpio_t id, uint8_t af_n) {
- 8025edc: b510 push {r4, lr}
- gpio_pindef_t *pin = &gpio_pins[id];
- 8025ede: 4b13 ldr r3, [pc, #76] ; (8025f2c <gpio_connect_af+0x50>)
- 8025ee0: eb03 02c0 add.w r2, r3, r0, lsl #3
- uint8_t shift;
- if (pin->pin < 8) {
- shift = pin->pin * 4;
- pin->port->AFR[0] &= ~((uint32_t)GPIO_AFR_MASK << shift);
- 8025ee4: f853 3030 ldr.w r3, [r3, r0, lsl #3]
- }
- void gpio_connect_af(gpio_t id, uint8_t af_n) {
- gpio_pindef_t *pin = &gpio_pins[id];
- uint8_t shift;
- if (pin->pin < 8) {
- 8025ee8: 7912 ldrb r2, [r2, #4]
- 8025eea: 2a07 cmp r2, #7
- 8025eec: d80e bhi.n 8025f0c <gpio_connect_af+0x30>
- shift = pin->pin * 4;
- 8025eee: 0092 lsls r2, r2, #2
- pin->port->AFR[0] &= ~((uint32_t)GPIO_AFR_MASK << shift);
- 8025ef0: 6a1c ldr r4, [r3, #32]
- 8025ef2: b2d2 uxtb r2, r2
- 8025ef4: 200f movs r0, #15
- 8025ef6: fa00 f002 lsl.w r0, r0, r2
- 8025efa: ea24 0000 bic.w r0, r4, r0
- 8025efe: 6218 str r0, [r3, #32]
- pin->port->AFR[0] |= af_n << shift;
- 8025f00: 6a18 ldr r0, [r3, #32]
- 8025f02: fa01 f202 lsl.w r2, r1, r2
- 8025f06: 4302 orrs r2, r0
- 8025f08: 621a str r2, [r3, #32]
- 8025f0a: bd10 pop {r4, pc}
- }
- else {
- shift = (pin->pin - 8) * 4;
- 8025f0c: 3a08 subs r2, #8
- 8025f0e: 0092 lsls r2, r2, #2
- pin->port->AFR[1] &= ~((uint32_t)GPIO_AFR_MASK << shift);
- 8025f10: 6a5c ldr r4, [r3, #36] ; 0x24
- 8025f12: b2d2 uxtb r2, r2
- 8025f14: 200f movs r0, #15
- 8025f16: fa00 f002 lsl.w r0, r0, r2
- 8025f1a: ea24 0000 bic.w r0, r4, r0
- 8025f1e: 6258 str r0, [r3, #36] ; 0x24
- pin->port->AFR[1] |= af_n << shift;
- 8025f20: 6a58 ldr r0, [r3, #36] ; 0x24
- 8025f22: fa01 f202 lsl.w r2, r1, r2
- 8025f26: 4302 orrs r2, r0
- 8025f28: 625a str r2, [r3, #36] ; 0x24
- 8025f2a: bd10 pop {r4, pc}
- 8025f2c: 200005c0 .word 0x200005c0
- 08025f30 <gpio_set>:
- }
- }
- }
- void gpio_set(gpio_t pin, bool value) {
- if (gpio_pins[pin].flags & GPIO_INV)
- 8025f30: 4b0e ldr r3, [pc, #56] ; (8025f6c <gpio_set+0x3c>)
- 8025f32: eb03 02c0 add.w r2, r3, r0, lsl #3
- 8025f36: 88d2 ldrh r2, [r2, #6]
- 8025f38: f002 0210 and.w r2, r2, #16
- 8025f3c: b292 uxth r2, r2
- 8025f3e: b10a cbz r2, 8025f44 <gpio_set+0x14>
- value = !value;
- 8025f40: f081 0101 eor.w r1, r1, #1
- 8025f44: 00c2 lsls r2, r0, #3
- if (value)
- 8025f46: b141 cbz r1, 8025f5a <gpio_set+0x2a>
- gpio_pins[pin].port->BSRRL = 1 << gpio_pins[pin].pin;
- 8025f48: f853 1030 ldr.w r1, [r3, r0, lsl #3]
- 8025f4c: 189b adds r3, r3, r2
- 8025f4e: 2201 movs r2, #1
- 8025f50: 791b ldrb r3, [r3, #4]
- 8025f52: fa02 f303 lsl.w r3, r2, r3
- 8025f56: 830b strh r3, [r1, #24]
- 8025f58: 4770 bx lr
- else
- gpio_pins[pin].port->BSRRH = 1 << gpio_pins[pin].pin;
- 8025f5a: f853 1030 ldr.w r1, [r3, r0, lsl #3]
- 8025f5e: 189b adds r3, r3, r2
- 8025f60: 2201 movs r2, #1
- 8025f62: 791b ldrb r3, [r3, #4]
- 8025f64: fa02 f303 lsl.w r3, r2, r3
- 8025f68: 834b strh r3, [r1, #26]
- 8025f6a: 4770 bx lr
- 8025f6c: 200005c0 .word 0x200005c0
- 08025f70 <gpio_set_config>:
- }
- /*
- * TODO add analog flag and setup ADC pins in a proper way
- */
- static void gpio_set_config(gpio_t id) {
- 8025f70: b570 push {r4, r5, r6, lr}
- gpio_pindef_t *pin = &gpio_pins[id];
- 8025f72: 4e1e ldr r6, [pc, #120] ; (8025fec <gpio_set_config+0x7c>)
- 8025f74: eb06 05c0 add.w r5, r6, r0, lsl #3
- }
- /*
- * TODO add analog flag and setup ADC pins in a proper way
- */
- static void gpio_set_config(gpio_t id) {
- 8025f78: 4604 mov r4, r0
- gpio_pindef_t *pin = &gpio_pins[id];
- if (pin->flags & GPIO_AF) {
- 8025f7a: 88e9 ldrh r1, [r5, #6]
- 8025f7c: f401 7300 and.w r3, r1, #512 ; 0x200
- 8025f80: b29b uxth r3, r3
- 8025f82: b13b cbz r3, 8025f94 <gpio_set_config+0x24>
- uint8_t af_n = (uint8_t)(pin->flags >> _GPIO_AF_SHIFT);
- gpio_connect_af(id, af_n);
- 8025f84: 0a89 lsrs r1, r1, #10
- 8025f86: f7ff ffa9 bl 8025edc <gpio_connect_af>
- gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_AF_CFG |
- 8025f8a: f856 0034 ldr.w r0, [r6, r4, lsl #3]
- 8025f8e: 7929 ldrb r1, [r5, #4]
- 8025f90: 2232 movs r2, #50 ; 0x32
- 8025f92: e005 b.n 8025fa0 <gpio_set_config+0x30>
- GPIO_SPEED_HIGH_CFG);
- }
- else if (pin->flags & GPIO_IN)
- 8025f94: 07cb lsls r3, r1, #31
- 8025f96: d507 bpl.n 8025fa8 <gpio_set_config+0x38>
- gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_IN_CFG |
- 8025f98: f856 0030 ldr.w r0, [r6, r0, lsl #3]
- 8025f9c: 7929 ldrb r1, [r5, #4]
- 8025f9e: 2230 movs r2, #48 ; 0x30
- ((pin->flags & GPIO_OD) ?
- GPIO_TYPE_OD_CFG : GPIO_TYPE_PP_CFG) |
- GPIO_SPEED_HIGH_CFG);
- gpio_set(id, pin->flags & GPIO_SET);
- }
- }
- 8025fa0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- gpio_connect_af(id, af_n);
- gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_AF_CFG |
- GPIO_SPEED_HIGH_CFG);
- }
- else if (pin->flags & GPIO_IN)
- gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_IN_CFG |
- 8025fa4: f7ff bf66 b.w 8025e74 <gpio_hw_config_pin>
- GPIO_SPEED_HIGH_CFG);
- else if (pin->flags & GPIO_IN_PU) {
- 8025fa8: f001 0302 and.w r3, r1, #2
- 8025fac: b29b uxth r3, r3
- 8025fae: b123 cbz r3, 8025fba <gpio_set_config+0x4a>
- gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_IN_CFG | GPIO_PU_CFG |
- 8025fb0: f856 0030 ldr.w r0, [r6, r0, lsl #3]
- 8025fb4: 7929 ldrb r1, [r5, #4]
- 8025fb6: 2270 movs r2, #112 ; 0x70
- 8025fb8: e00d b.n 8025fd6 <gpio_set_config+0x66>
- GPIO_SPEED_HIGH_CFG);
- gpio_set(id, pin->flags & GPIO_SET);
- }
- else if (pin->flags & GPIO_OUT) {
- 8025fba: f001 0304 and.w r3, r1, #4
- 8025fbe: b29b uxth r3, r3
- 8025fc0: b19b cbz r3, 8025fea <gpio_set_config+0x7a>
- gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_OUT_CFG |
- 8025fc2: f001 0120 and.w r1, r1, #32
- 8025fc6: b28a uxth r2, r1
- 8025fc8: f856 0030 ldr.w r0, [r6, r0, lsl #3]
- 8025fcc: 7929 ldrb r1, [r5, #4]
- 8025fce: 2a00 cmp r2, #0
- 8025fd0: bf0c ite eq
- 8025fd2: 2231 moveq r2, #49 ; 0x31
- 8025fd4: 2235 movne r2, #53 ; 0x35
- 8025fd6: f7ff ff4d bl 8025e74 <gpio_hw_config_pin>
- ((pin->flags & GPIO_OD) ?
- GPIO_TYPE_OD_CFG : GPIO_TYPE_PP_CFG) |
- GPIO_SPEED_HIGH_CFG);
- gpio_set(id, pin->flags & GPIO_SET);
- 8025fda: 88e9 ldrh r1, [r5, #6]
- 8025fdc: 4620 mov r0, r4
- 8025fde: f3c1 01c0 ubfx r1, r1, #3, #1
- }
- }
- 8025fe2: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- else if (pin->flags & GPIO_OUT) {
- gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_OUT_CFG |
- ((pin->flags & GPIO_OD) ?
- GPIO_TYPE_OD_CFG : GPIO_TYPE_PP_CFG) |
- GPIO_SPEED_HIGH_CFG);
- gpio_set(id, pin->flags & GPIO_SET);
- 8025fe6: f7ff bfa3 b.w 8025f30 <gpio_set>
- 8025fea: bd70 pop {r4, r5, r6, pc}
- 8025fec: 200005c0 .word 0x200005c0
- 08025ff0 <gpio_init>:
- }
- }
- void gpio_init(void) {
- 8025ff0: b538 push {r3, r4, r5, lr}
- uint32_t i;
- GPIO_DeInit(GPIOA);
- 8025ff2: 4812 ldr r0, [pc, #72] ; (802603c <gpio_init+0x4c>)
- GPIO_SPEED_HIGH_CFG);
- gpio_set(id, pin->flags & GPIO_SET);
- }
- }
- void gpio_init(void) {
- 8025ff4: 4d12 ldr r5, [pc, #72] ; (8026040 <gpio_init+0x50>)
- uint32_t i;
- GPIO_DeInit(GPIOA);
- 8025ff6: f7ff fa5d bl 80254b4 <GPIO_DeInit>
- GPIO_DeInit(GPIOB);
- 8025ffa: 4812 ldr r0, [pc, #72] ; (8026044 <gpio_init+0x54>)
- 8025ffc: f7ff fa5a bl 80254b4 <GPIO_DeInit>
- GPIO_DeInit(GPIOC);
- 8026000: 4811 ldr r0, [pc, #68] ; (8026048 <gpio_init+0x58>)
- 8026002: f7ff fa57 bl 80254b4 <GPIO_DeInit>
- GPIO_DeInit(GPIOD);
- 8026006: 4811 ldr r0, [pc, #68] ; (802604c <gpio_init+0x5c>)
- 8026008: f7ff fa54 bl 80254b4 <GPIO_DeInit>
- GPIO_DeInit(GPIOE);
- 802600c: 4810 ldr r0, [pc, #64] ; (8026050 <gpio_init+0x60>)
- 802600e: f7ff fa51 bl 80254b4 <GPIO_DeInit>
- // configure clocks
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN |
- 8026012: 4b10 ldr r3, [pc, #64] ; (8026054 <gpio_init+0x64>)
- 8026014: 6b1a ldr r2, [r3, #48] ; 0x30
- 8026016: f042 021f orr.w r2, r2, #31
- 802601a: 631a str r2, [r3, #48] ; 0x30
- RCC_AHB1ENR_GPIOCEN | RCC_AHB1ENR_GPIODEN |
- RCC_AHB1ENR_GPIOEEN;
- // configure gpios
- for (i = 0; i < GPIO_TOTAL_COUNT; i++) {
- 802601c: 2400 movs r4, #0
- GPIO_SPEED_HIGH_CFG);
- gpio_set(id, pin->flags & GPIO_SET);
- }
- }
- void gpio_init(void) {
- 802601e: eb05 03c4 add.w r3, r5, r4, lsl #3
- RCC_AHB1ENR_GPIOCEN | RCC_AHB1ENR_GPIODEN |
- RCC_AHB1ENR_GPIOEEN;
- // configure gpios
- for (i = 0; i < GPIO_TOTAL_COUNT; i++) {
- if (gpio_pins[i].flags & GPIO_NOINIT)
- 8026022: 88db ldrh r3, [r3, #6]
- 8026024: f003 0380 and.w r3, r3, #128 ; 0x80
- 8026028: b29b uxth r3, r3
- 802602a: b913 cbnz r3, 8026032 <gpio_init+0x42>
- continue;
- else {
- gpio_set_config(i);
- 802602c: b2e0 uxtb r0, r4
- 802602e: f7ff ff9f bl 8025f70 <gpio_set_config>
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN |
- RCC_AHB1ENR_GPIOCEN | RCC_AHB1ENR_GPIODEN |
- RCC_AHB1ENR_GPIOEEN;
- // configure gpios
- for (i = 0; i < GPIO_TOTAL_COUNT; i++) {
- 8026032: 3401 adds r4, #1
- 8026034: 2c11 cmp r4, #17
- 8026036: d1f2 bne.n 802601e <gpio_init+0x2e>
- continue;
- else {
- gpio_set_config(i);
- }
- }
- }
- 8026038: bd38 pop {r3, r4, r5, pc}
- 802603a: bf00 nop
- 802603c: 40020000 .word 0x40020000
- 8026040: 200005c0 .word 0x200005c0
- 8026044: 40020400 .word 0x40020400
- 8026048: 40020800 .word 0x40020800
- 802604c: 40020c00 .word 0x40020c00
- 8026050: 40021000 .word 0x40021000
- 8026054: 40023800 .word 0x40023800
- 08026058 <gpio_invert_output>:
- gpio_pins[pin].port->BSRRH = 1 << gpio_pins[pin].pin;
- }
- void gpio_invert_output(gpio_t pin) {
- gpio_pins[pin].port->ODR ^= 1 << gpio_pins[pin].pin;
- 8026058: 4a06 ldr r2, [pc, #24] ; (8026074 <gpio_invert_output+0x1c>)
- 802605a: f852 3030 ldr.w r3, [r2, r0, lsl #3]
- 802605e: eb02 02c0 add.w r2, r2, r0, lsl #3
- 8026062: 6959 ldr r1, [r3, #20]
- 8026064: 7912 ldrb r2, [r2, #4]
- 8026066: 2001 movs r0, #1
- 8026068: fa00 f202 lsl.w r2, r0, r2
- 802606c: 404a eors r2, r1
- 802606e: 615a str r2, [r3, #20]
- 8026070: 4770 bx lr
- 8026072: bf00 nop
- 8026074: 200005c0 .word 0x200005c0
- 08026078 <gpio_get>:
- }
- bool gpio_get(gpio_t pin) {
- bool value;
- if (gpio_pins[pin].flags & GPIO_NOINIT) {
- 8026078: 490e ldr r1, [pc, #56] ; (80260b4 <gpio_get+0x3c>)
- 802607a: eb01 02c0 add.w r2, r1, r0, lsl #3
- void gpio_invert_output(gpio_t pin) {
- gpio_pins[pin].port->ODR ^= 1 << gpio_pins[pin].pin;
- }
- bool gpio_get(gpio_t pin) {
- 802607e: b510 push {r4, lr}
- bool value;
- if (gpio_pins[pin].flags & GPIO_NOINIT) {
- 8026080: 88d3 ldrh r3, [r2, #6]
- 8026082: f003 0480 and.w r4, r3, #128 ; 0x80
- 8026086: b2a4 uxth r4, r4
- 8026088: b994 cbnz r4, 80260b0 <gpio_get+0x38>
- return false;
- }
- else {
- value = (gpio_pins[pin].port->IDR & (1 << gpio_pins[pin].pin)) >> gpio_pins[pin].pin;
- 802608a: f851 1030 ldr.w r1, [r1, r0, lsl #3]
- 802608e: 7912 ldrb r2, [r2, #4]
- 8026090: 6908 ldr r0, [r1, #16]
- 8026092: 2101 movs r1, #1
- 8026094: fa01 f102 lsl.w r1, r1, r2
- 8026098: 4001 ands r1, r0
- return (gpio_pins[pin].flags & GPIO_INV) ? !value : value;
- 802609a: f003 0310 and.w r3, r3, #16
- bool value;
- if (gpio_pins[pin].flags & GPIO_NOINIT) {
- return false;
- }
- else {
- value = (gpio_pins[pin].port->IDR & (1 << gpio_pins[pin].pin)) >> gpio_pins[pin].pin;
- 802609e: 40d1 lsrs r1, r2
- return (gpio_pins[pin].flags & GPIO_INV) ? !value : value;
- 80260a0: b29b uxth r3, r3
- bool value;
- if (gpio_pins[pin].flags & GPIO_NOINIT) {
- return false;
- }
- else {
- value = (gpio_pins[pin].port->IDR & (1 << gpio_pins[pin].pin)) >> gpio_pins[pin].pin;
- 80260a2: bf0c ite eq
- 80260a4: 2000 moveq r0, #0
- 80260a6: 2001 movne r0, #1
- return (gpio_pins[pin].flags & GPIO_INV) ? !value : value;
- 80260a8: b11b cbz r3, 80260b2 <gpio_get+0x3a>
- 80260aa: f080 0001 eor.w r0, r0, #1
- 80260ae: bd10 pop {r4, pc}
- }
- bool gpio_get(gpio_t pin) {
- bool value;
- if (gpio_pins[pin].flags & GPIO_NOINIT) {
- return false;
- 80260b0: 2000 movs r0, #0
- }
- else {
- value = (gpio_pins[pin].port->IDR & (1 << gpio_pins[pin].pin)) >> gpio_pins[pin].pin;
- return (gpio_pins[pin].flags & GPIO_INV) ? !value : value;
- }
- }
- 80260b2: bd10 pop {r4, pc}
- 80260b4: 200005c0 .word 0x200005c0
- 080260b8 <RNG_Init>:
- #include "rng.h"
- #include "stm32f4xx.h"
- void RNG_Init(void)
- {
- 80260b8: b508 push {r3, lr}
- RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG,ENABLE);
- 80260ba: 2040 movs r0, #64 ; 0x40
- 80260bc: 2101 movs r1, #1
- 80260be: f7ff fb51 bl 8025764 <RCC_AHB2PeriphClockCmd>
- RNG_Cmd(ENABLE);
- 80260c2: 2001 movs r0, #1
- }
- 80260c4: e8bd 4008 ldmia.w sp!, {r3, lr}
- void RNG_Init(void)
- {
- RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG,ENABLE);
- RNG_Cmd(ENABLE);
- 80260c8: f7ff bba8 b.w 802581c <RNG_Cmd>
- 080260cc <GetRandomNumber>:
- }
- uint32_t GetRandomNumber(void) {
- return RNG_GetRandomNumber();;
- 80260cc: f7ff bbb2 b.w 8025834 <RNG_GetRandomNumber>
- 080260d0 <TM_RTC_SetDateTime>:
- /* Устанавливаем новое время */
- TM_RTC_GetDateTimeFromUnix(&newData, unixTime);
- TM_RTC_SetDateTime(&newData, TM_RTC_Format_BIN);
- }
- TM_RTC_Result_t TM_RTC_SetDateTime(TM_RTC_t* data, TM_RTC_Format_t format) {
- 80260d0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- TM_RTC_t tmp;
-
- /* Check date and time validation */
- if (format == TM_RTC_Format_BCD) {
- 80260d4: 2901 cmp r1, #1
- /* Устанавливаем новое время */
- TM_RTC_GetDateTimeFromUnix(&newData, unixTime);
- TM_RTC_SetDateTime(&newData, TM_RTC_Format_BIN);
- }
- TM_RTC_Result_t TM_RTC_SetDateTime(TM_RTC_t* data, TM_RTC_Format_t format) {
- 80260d6: 4603 mov r3, r0
- 80260d8: 460e mov r6, r1
- 80260da: 79c0 ldrb r0, [r0, #7]
- TM_RTC_t tmp;
-
- /* Check date and time validation */
- if (format == TM_RTC_Format_BCD) {
- 80260dc: d137 bne.n 802614e <TM_RTC_SetDateTime+0x7e>
- tmp.date = TM_RTC_BCD2BIN(data->date);
- tmp.month = TM_RTC_BCD2BIN(data->month);
- 80260de: 7a1c ldrb r4, [r3, #8]
- tmp.year = TM_RTC_BCD2BIN(data->year);
- 80260e0: 7a5d ldrb r5, [r3, #9]
- tmp.hours = TM_RTC_BCD2BIN(data->hours);
- tmp.minutes = TM_RTC_BCD2BIN(data->minutes);
- tmp.seconds = TM_RTC_BCD2BIN(data->seconds);
- 80260e2: f893 8000 ldrb.w r8, [r3]
- TM_RTC_Result_t TM_RTC_SetDateTime(TM_RTC_t* data, TM_RTC_Format_t format) {
- TM_RTC_t tmp;
-
- /* Check date and time validation */
- if (format == TM_RTC_Format_BCD) {
- tmp.date = TM_RTC_BCD2BIN(data->date);
- 80260e6: 220a movs r2, #10
- 80260e8: 0901 lsrs r1, r0, #4
- 80260ea: f000 000f and.w r0, r0, #15
- 80260ee: fb02 0001 mla r0, r2, r1, r0
- tmp.month = TM_RTC_BCD2BIN(data->month);
- 80260f2: 0921 lsrs r1, r4, #4
- 80260f4: f004 040f and.w r4, r4, #15
- 80260f8: fb02 4101 mla r1, r2, r1, r4
- tmp.year = TM_RTC_BCD2BIN(data->year);
- 80260fc: 092c lsrs r4, r5, #4
- 80260fe: f005 050f and.w r5, r5, #15
- 8026102: fb02 5404 mla r4, r2, r4, r5
- tmp.hours = TM_RTC_BCD2BIN(data->hours);
- 8026106: 795d ldrb r5, [r3, #5]
- 8026108: ea4f 1c15 mov.w ip, r5, lsr #4
- 802610c: f005 050f and.w r5, r5, #15
- 8026110: fb02 5c0c mla ip, r2, ip, r5
- tmp.minutes = TM_RTC_BCD2BIN(data->minutes);
- 8026114: 791d ldrb r5, [r3, #4]
- 8026116: 092f lsrs r7, r5, #4
- 8026118: f005 050f and.w r5, r5, #15
- 802611c: fb02 5707 mla r7, r2, r7, r5
- tmp.seconds = TM_RTC_BCD2BIN(data->seconds);
- 8026120: ea4f 1518 mov.w r5, r8, lsr #4
- 8026124: f008 080f and.w r8, r8, #15
- 8026128: fb02 8505 mla r5, r2, r5, r8
- tmp.day = TM_RTC_BCD2BIN(data->day);
- 802612c: f893 8006 ldrb.w r8, [r3, #6]
- 8026130: ea4f 1918 mov.w r9, r8, lsr #4
- 8026134: f008 080f and.w r8, r8, #15
- 8026138: fb02 8209 mla r2, r2, r9, r8
- TM_RTC_Result_t TM_RTC_SetDateTime(TM_RTC_t* data, TM_RTC_Format_t format) {
- TM_RTC_t tmp;
-
- /* Check date and time validation */
- if (format == TM_RTC_Format_BCD) {
- tmp.date = TM_RTC_BCD2BIN(data->date);
- 802613c: b2c0 uxtb r0, r0
- tmp.month = TM_RTC_BCD2BIN(data->month);
- 802613e: b2c9 uxtb r1, r1
- tmp.year = TM_RTC_BCD2BIN(data->year);
- 8026140: b2e4 uxtb r4, r4
- tmp.hours = TM_RTC_BCD2BIN(data->hours);
- 8026142: fa5f fc8c uxtb.w ip, ip
- tmp.minutes = TM_RTC_BCD2BIN(data->minutes);
- 8026146: b2ff uxtb r7, r7
- tmp.seconds = TM_RTC_BCD2BIN(data->seconds);
- 8026148: b2ed uxtb r5, r5
- tmp.day = TM_RTC_BCD2BIN(data->day);
- 802614a: b2d2 uxtb r2, r2
- 802614c: e006 b.n 802615c <TM_RTC_SetDateTime+0x8c>
- } else {
- tmp.date = data->date;
- tmp.month = data->month;
- 802614e: 7a19 ldrb r1, [r3, #8]
- tmp.year = data->year;
- 8026150: 7a5c ldrb r4, [r3, #9]
- tmp.hours = data->hours;
- 8026152: f893 c005 ldrb.w ip, [r3, #5]
- tmp.minutes = data->minutes;
- 8026156: 791f ldrb r7, [r3, #4]
- tmp.seconds = data->seconds;
- 8026158: 781d ldrb r5, [r3, #0]
- tmp.day = data->day;
- 802615a: 799a ldrb r2, [r3, #6]
- }
-
- /* Check year and month */
- if (
- 802615c: 2c63 cmp r4, #99 ; 0x63
- 802615e: d86c bhi.n 802623a <TM_RTC_SetDateTime+0x16a>
- tmp.year > 99 ||
- 8026160: 2900 cmp r1, #0
- 8026162: d06a beq.n 802623a <TM_RTC_SetDateTime+0x16a>
- tmp.month == 0 ||
- 8026164: 290c cmp r1, #12
- 8026166: d868 bhi.n 802623a <TM_RTC_SetDateTime+0x16a>
- tmp.month > 12 ||
- 8026168: 2800 cmp r0, #0
- 802616a: d066 beq.n 802623a <TM_RTC_SetDateTime+0x16a>
- tmp.date == 0 ||
- tmp.date > TM_RTC_Months[TM_RTC_LEAP_YEAR(2000 + tmp.year) ? 1 : 0][tmp.month - 1] ||
- 802616c: f014 0f03 tst.w r4, #3
- 8026170: d10a bne.n 8026188 <TM_RTC_SetDateTime+0xb8>
- 8026172: f504 69fa add.w r9, r4, #2000 ; 0x7d0
- 8026176: f04f 0864 mov.w r8, #100 ; 0x64
- 802617a: fb99 faf8 sdiv sl, r9, r8
- 802617e: fb08 981a mls r8, r8, sl, r9
- 8026182: f1b8 0f00 cmp.w r8, #0
- 8026186: d10c bne.n 80261a2 <TM_RTC_SetDateTime+0xd2>
- 8026188: f504 64fa add.w r4, r4, #2000 ; 0x7d0
- 802618c: f44f 78c8 mov.w r8, #400 ; 0x190
- 8026190: fb94 f9f8 sdiv r9, r4, r8
- 8026194: fb08 4419 mls r4, r8, r9, r4
- 8026198: f1d4 0401 rsbs r4, r4, #1
- 802619c: bf38 it cc
- 802619e: 2400 movcc r4, #0
- 80261a0: e000 b.n 80261a4 <TM_RTC_SetDateTime+0xd4>
- 80261a2: 2401 movs r4, #1
- 80261a4: f8df 80a8 ldr.w r8, [pc, #168] ; 8026250 <TM_RTC_SetDateTime+0x180>
- 80261a8: f04f 090c mov.w r9, #12
- 80261ac: fb09 8404 mla r4, r9, r4, r8
- 80261b0: 1861 adds r1, r4, r1
- /* Check year and month */
- if (
- tmp.year > 99 ||
- tmp.month == 0 ||
- tmp.month > 12 ||
- tmp.date == 0 ||
- 80261b2: f811 1c01 ldrb.w r1, [r1, #-1]
- 80261b6: 4281 cmp r1, r0
- 80261b8: d33f bcc.n 802623a <TM_RTC_SetDateTime+0x16a>
- tmp.date > TM_RTC_Months[TM_RTC_LEAP_YEAR(2000 + tmp.year) ? 1 : 0][tmp.month - 1] ||
- 80261ba: f1bc 0f17 cmp.w ip, #23
- 80261be: d83c bhi.n 802623a <TM_RTC_SetDateTime+0x16a>
- tmp.hours > 23 ||
- 80261c0: 2f3b cmp r7, #59 ; 0x3b
- 80261c2: d83a bhi.n 802623a <TM_RTC_SetDateTime+0x16a>
- tmp.minutes > 59 ||
- 80261c4: 2d3b cmp r5, #59 ; 0x3b
- 80261c6: d838 bhi.n 802623a <TM_RTC_SetDateTime+0x16a>
- tmp.seconds > 59 ||
- 80261c8: 2a00 cmp r2, #0
- 80261ca: d036 beq.n 802623a <TM_RTC_SetDateTime+0x16a>
- tmp.day == 0 ||
- 80261cc: 2a07 cmp r2, #7
- 80261ce: d834 bhi.n 802623a <TM_RTC_SetDateTime+0x16a>
- /* Invalid date */
- return TM_RTC_Result_Error;
- }
-
- /* Fill time */
- RTC_TimeStruct.RTC_Hours = data->hours;
- 80261d0: 795a ldrb r2, [r3, #5]
- 80261d2: 4d1b ldr r5, [pc, #108] ; (8026240 <TM_RTC_SetDateTime+0x170>)
- RTC_TimeStruct.RTC_Minutes = data->minutes;
- RTC_TimeStruct.RTC_Seconds = data->seconds;
- /* Fill date */
- RTC_DateStruct.RTC_Date = data->date;
- 80261d4: 4c1b ldr r4, [pc, #108] ; (8026244 <TM_RTC_SetDateTime+0x174>)
- /* Invalid date */
- return TM_RTC_Result_Error;
- }
-
- /* Fill time */
- RTC_TimeStruct.RTC_Hours = data->hours;
- 80261d6: 702a strb r2, [r5, #0]
- RTC_TimeStruct.RTC_Minutes = data->minutes;
- 80261d8: 791a ldrb r2, [r3, #4]
- RTC_DateStruct.RTC_Month = data->month;
- RTC_DateStruct.RTC_Year = data->year;
- RTC_DateStruct.RTC_WeekDay = data->day;
-
- /* Set the RTC time base to 1s and hours format to 24h */
- RTC_InitStruct.RTC_HourFormat = RTC_HourFormat_24;
- 80261da: 481b ldr r0, [pc, #108] ; (8026248 <TM_RTC_SetDateTime+0x178>)
- return TM_RTC_Result_Error;
- }
-
- /* Fill time */
- RTC_TimeStruct.RTC_Hours = data->hours;
- RTC_TimeStruct.RTC_Minutes = data->minutes;
- 80261dc: 706a strb r2, [r5, #1]
- RTC_TimeStruct.RTC_Seconds = data->seconds;
- 80261de: 781a ldrb r2, [r3, #0]
- 80261e0: 70aa strb r2, [r5, #2]
- /* Fill date */
- RTC_DateStruct.RTC_Date = data->date;
- 80261e2: 79da ldrb r2, [r3, #7]
- 80261e4: 70a2 strb r2, [r4, #2]
- RTC_DateStruct.RTC_Month = data->month;
- 80261e6: 7a1a ldrb r2, [r3, #8]
- 80261e8: 7062 strb r2, [r4, #1]
- RTC_DateStruct.RTC_Year = data->year;
- 80261ea: 7a5a ldrb r2, [r3, #9]
- RTC_DateStruct.RTC_WeekDay = data->day;
- 80261ec: 799b ldrb r3, [r3, #6]
- RTC_TimeStruct.RTC_Minutes = data->minutes;
- RTC_TimeStruct.RTC_Seconds = data->seconds;
- /* Fill date */
- RTC_DateStruct.RTC_Date = data->date;
- RTC_DateStruct.RTC_Month = data->month;
- RTC_DateStruct.RTC_Year = data->year;
- 80261ee: 70e2 strb r2, [r4, #3]
- RTC_DateStruct.RTC_WeekDay = data->day;
-
- /* Set the RTC time base to 1s and hours format to 24h */
- RTC_InitStruct.RTC_HourFormat = RTC_HourFormat_24;
- RTC_InitStruct.RTC_AsynchPrediv = RTC_ASYNC_PREDIV;
- 80261f0: 221f movs r2, #31
- RTC_DateStruct.RTC_Month = data->month;
- RTC_DateStruct.RTC_Year = data->year;
- RTC_DateStruct.RTC_WeekDay = data->day;
-
- /* Set the RTC time base to 1s and hours format to 24h */
- RTC_InitStruct.RTC_HourFormat = RTC_HourFormat_24;
- 80261f2: 2700 movs r7, #0
- RTC_InitStruct.RTC_AsynchPrediv = RTC_ASYNC_PREDIV;
- 80261f4: 6042 str r2, [r0, #4]
- RTC_InitStruct.RTC_SynchPrediv = RTC_SYNC_PREDIV;
- 80261f6: f502 7278 add.w r2, r2, #992 ; 0x3e0
- RTC_TimeStruct.RTC_Seconds = data->seconds;
- /* Fill date */
- RTC_DateStruct.RTC_Date = data->date;
- RTC_DateStruct.RTC_Month = data->month;
- RTC_DateStruct.RTC_Year = data->year;
- RTC_DateStruct.RTC_WeekDay = data->day;
- 80261fa: 7023 strb r3, [r4, #0]
-
- /* Set the RTC time base to 1s and hours format to 24h */
- RTC_InitStruct.RTC_HourFormat = RTC_HourFormat_24;
- 80261fc: 6007 str r7, [r0, #0]
- RTC_InitStruct.RTC_AsynchPrediv = RTC_ASYNC_PREDIV;
- RTC_InitStruct.RTC_SynchPrediv = RTC_SYNC_PREDIV;
- 80261fe: 6082 str r2, [r0, #8]
- RTC_Init(&RTC_InitStruct);
- 8026200: f7ff fb5a bl 80258b8 <RTC_Init>
- /* Set time */
- if (format == TM_RTC_Format_BCD) {
- 8026204: 2e01 cmp r6, #1
- 8026206: d105 bne.n 8026214 <TM_RTC_SetDateTime+0x144>
- RTC_SetTime(RTC_Format_BCD, &RTC_TimeStruct);
- 8026208: 4630 mov r0, r6
- 802620a: 4629 mov r1, r5
- 802620c: f7ff fb98 bl 8025940 <RTC_SetTime>
- RTC_SetTime(RTC_Format_BIN, &RTC_TimeStruct);
- }
-
- /* Set date */
- if (format == TM_RTC_Format_BCD) {
- RTC_SetDate(RTC_Format_BCD, &RTC_DateStruct);
- 8026210: 4630 mov r0, r6
- 8026212: e004 b.n 802621e <TM_RTC_SetDateTime+0x14e>
- /* Set time */
- if (format == TM_RTC_Format_BCD) {
- RTC_SetTime(RTC_Format_BCD, &RTC_TimeStruct);
- } else {
- RTC_SetTime(RTC_Format_BIN, &RTC_TimeStruct);
- 8026214: 4638 mov r0, r7
- 8026216: 4629 mov r1, r5
- 8026218: f7ff fb92 bl 8025940 <RTC_SetTime>
-
- /* Set date */
- if (format == TM_RTC_Format_BCD) {
- RTC_SetDate(RTC_Format_BCD, &RTC_DateStruct);
- } else {
- RTC_SetDate(RTC_Format_BIN, &RTC_DateStruct);
- 802621c: 4638 mov r0, r7
- 802621e: 4621 mov r1, r4
- 8026220: f7ff fbfc bl 8025a1c <RTC_SetDate>
- }
-
- if (TM_RTC_Status != RTC_STATUS_ZERO) {
- 8026224: 4b09 ldr r3, [pc, #36] ; (802624c <TM_RTC_SetDateTime+0x17c>)
- 8026226: 6818 ldr r0, [r3, #0]
- 8026228: b140 cbz r0, 802623c <TM_RTC_SetDateTime+0x16c>
- /* Write backup registers */
- RTC_WriteBackupRegister(RTC_STATUS_REG, RTC_STATUS_TIME_OK);
- 802622a: 2013 movs r0, #19
- 802622c: f244 3121 movw r1, #17185 ; 0x4321
- 8026230: f7ff fc5e bl 8025af0 <RTC_WriteBackupRegister>
- }
-
- /* Return OK */
- return TM_RTC_Result_Ok;
- 8026234: 2000 movs r0, #0
- 8026236: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- tmp.seconds > 59 ||
- tmp.day == 0 ||
- tmp.day > 7
- ) {
- /* Invalid date */
- return TM_RTC_Result_Error;
- 802623a: 2001 movs r0, #1
- RTC_WriteBackupRegister(RTC_STATUS_REG, RTC_STATUS_TIME_OK);
- }
-
- /* Return OK */
- return TM_RTC_Result_Ok;
- }
- 802623c: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 8026240: 2000c810 .word 0x2000c810
- 8026244: 2000c820 .word 0x2000c820
- 8026248: 2000c814 .word 0x2000c814
- 802624c: 20000b04 .word 0x20000b04
- 8026250: 20000648 .word 0x20000648
- 08026254 <TM_RTC_SetDateTimeString>:
- TM_RTC_Result_t TM_RTC_SetDateTimeString(char* str) {
- 8026254: b530 push {r4, r5, lr}
- TM_RTC_t tmp;
- uint8_t i = 0;
-
- /* Get date */
- tmp.date = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026256: 2200 movs r2, #0
-
- /* Return OK */
- return TM_RTC_Result_Ok;
- }
- TM_RTC_Result_t TM_RTC_SetDateTimeString(char* str) {
- 8026258: b085 sub sp, #20
- TM_RTC_t tmp;
- uint8_t i = 0;
- 802625a: 4613 mov r3, r2
-
- /* Get date */
- tmp.date = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.date = tmp.date * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 802625c: 250a movs r5, #10
- TM_RTC_t tmp;
- uint8_t i = 0;
-
- /* Get date */
- tmp.date = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 802625e: e006 b.n 802626e <TM_RTC_SetDateTimeString+0x1a>
- tmp.date = tmp.date * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026260: fb05 1202 mla r2, r5, r2, r1
- 8026264: 3a30 subs r2, #48 ; 0x30
- i++;
- 8026266: 3301 adds r3, #1
- uint8_t i = 0;
-
- /* Get date */
- tmp.date = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.date = tmp.date * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026268: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 802626c: b2db uxtb r3, r3
- TM_RTC_t tmp;
- uint8_t i = 0;
-
- /* Get date */
- tmp.date = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 802626e: 5cc1 ldrb r1, [r0, r3]
- 8026270: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 8026274: 2c09 cmp r4, #9
- 8026276: d9f3 bls.n 8026260 <TM_RTC_SetDateTimeString+0xc>
- tmp.date = tmp.date * 10 + TM_RTC_CHAR2NUM(*(str + i));
- i++;
- }
- i++;
- 8026278: 3301 adds r3, #1
- 802627a: f88d 2007 strb.w r2, [sp, #7]
- 802627e: b2db uxtb r3, r3
-
- /* Get month */
- tmp.month = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026280: 2200 movs r2, #0
- tmp.month = tmp.month * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026282: 250a movs r5, #10
- }
- i++;
-
- /* Get month */
- tmp.month = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026284: e006 b.n 8026294 <TM_RTC_SetDateTimeString+0x40>
- tmp.month = tmp.month * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026286: fb05 1202 mla r2, r5, r2, r1
- 802628a: 3a30 subs r2, #48 ; 0x30
- i++;
- 802628c: 3301 adds r3, #1
- i++;
-
- /* Get month */
- tmp.month = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.month = tmp.month * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 802628e: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 8026292: b2db uxtb r3, r3
- }
- i++;
-
- /* Get month */
- tmp.month = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026294: 5cc1 ldrb r1, [r0, r3]
- 8026296: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 802629a: 2c09 cmp r4, #9
- 802629c: d9f3 bls.n 8026286 <TM_RTC_SetDateTimeString+0x32>
- tmp.month = tmp.month * 10 + TM_RTC_CHAR2NUM(*(str + i));
- i++;
- }
- i++;
- 802629e: 3301 adds r3, #1
- 80262a0: f88d 2008 strb.w r2, [sp, #8]
- 80262a4: b2db uxtb r3, r3
-
- /* Get year */
- tmp.year = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80262a6: 2200 movs r2, #0
- tmp.year = tmp.year * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80262a8: 250a movs r5, #10
- }
- i++;
-
- /* Get year */
- tmp.year = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80262aa: e006 b.n 80262ba <TM_RTC_SetDateTimeString+0x66>
- tmp.year = tmp.year * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80262ac: fb05 1202 mla r2, r5, r2, r1
- 80262b0: 3a30 subs r2, #48 ; 0x30
- i++;
- 80262b2: 3301 adds r3, #1
- i++;
-
- /* Get year */
- tmp.year = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.year = tmp.year * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80262b4: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 80262b8: b2db uxtb r3, r3
- }
- i++;
-
- /* Get year */
- tmp.year = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80262ba: 5cc1 ldrb r1, [r0, r3]
- 80262bc: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 80262c0: 2c09 cmp r4, #9
- 80262c2: d9f3 bls.n 80262ac <TM_RTC_SetDateTimeString+0x58>
- tmp.year = tmp.year * 10 + TM_RTC_CHAR2NUM(*(str + i));
- i++;
- }
- i++;
- 80262c4: 3301 adds r3, #1
- 80262c6: f88d 2009 strb.w r2, [sp, #9]
- 80262ca: b2db uxtb r3, r3
-
- /* Get day in a week */
- tmp.day = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80262cc: 2200 movs r2, #0
- tmp.day = tmp.day * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80262ce: 250a movs r5, #10
- }
- i++;
-
- /* Get day in a week */
- tmp.day = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80262d0: e006 b.n 80262e0 <TM_RTC_SetDateTimeString+0x8c>
- tmp.day = tmp.day * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80262d2: fb05 1202 mla r2, r5, r2, r1
- 80262d6: 3a30 subs r2, #48 ; 0x30
- i++;
- 80262d8: 3301 adds r3, #1
- i++;
-
- /* Get day in a week */
- tmp.day = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.day = tmp.day * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80262da: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 80262de: b2db uxtb r3, r3
- }
- i++;
-
- /* Get day in a week */
- tmp.day = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80262e0: 5cc1 ldrb r1, [r0, r3]
- 80262e2: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 80262e6: 2c09 cmp r4, #9
- 80262e8: d9f3 bls.n 80262d2 <TM_RTC_SetDateTimeString+0x7e>
- tmp.day = tmp.day * 10 + TM_RTC_CHAR2NUM(*(str + i));
- i++;
- }
- i++;
- 80262ea: 3301 adds r3, #1
- 80262ec: f88d 2006 strb.w r2, [sp, #6]
- 80262f0: b2db uxtb r3, r3
-
- /* Get hours */
- tmp.hours = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80262f2: 2200 movs r2, #0
- tmp.hours = tmp.hours * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80262f4: 250a movs r5, #10
- }
- i++;
-
- /* Get hours */
- tmp.hours = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80262f6: e006 b.n 8026306 <TM_RTC_SetDateTimeString+0xb2>
- tmp.hours = tmp.hours * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80262f8: fb05 1202 mla r2, r5, r2, r1
- 80262fc: 3a30 subs r2, #48 ; 0x30
- i++;
- 80262fe: 3301 adds r3, #1
- i++;
-
- /* Get hours */
- tmp.hours = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.hours = tmp.hours * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026300: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 8026304: b2db uxtb r3, r3
- }
- i++;
-
- /* Get hours */
- tmp.hours = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026306: 5cc1 ldrb r1, [r0, r3]
- 8026308: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 802630c: 2c09 cmp r4, #9
- 802630e: d9f3 bls.n 80262f8 <TM_RTC_SetDateTimeString+0xa4>
- tmp.hours = tmp.hours * 10 + TM_RTC_CHAR2NUM(*(str + i));
- i++;
- }
- i++;
- 8026310: 3301 adds r3, #1
- 8026312: f88d 2005 strb.w r2, [sp, #5]
- 8026316: b2db uxtb r3, r3
-
- /* Get minutes */
- tmp.minutes = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026318: 2200 movs r2, #0
- tmp.minutes = tmp.minutes * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 802631a: 250a movs r5, #10
- }
- i++;
-
- /* Get minutes */
- tmp.minutes = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 802631c: e006 b.n 802632c <TM_RTC_SetDateTimeString+0xd8>
- tmp.minutes = tmp.minutes * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 802631e: fb05 1202 mla r2, r5, r2, r1
- 8026322: 3a30 subs r2, #48 ; 0x30
- i++;
- 8026324: 3301 adds r3, #1
- i++;
-
- /* Get minutes */
- tmp.minutes = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.minutes = tmp.minutes * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026326: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 802632a: b2db uxtb r3, r3
- }
- i++;
-
- /* Get minutes */
- tmp.minutes = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 802632c: 5cc1 ldrb r1, [r0, r3]
- 802632e: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 8026332: 2c09 cmp r4, #9
- 8026334: d9f3 bls.n 802631e <TM_RTC_SetDateTimeString+0xca>
- tmp.minutes = tmp.minutes * 10 + TM_RTC_CHAR2NUM(*(str + i));
- i++;
- }
- i++;
- 8026336: 3301 adds r3, #1
- 8026338: f88d 2004 strb.w r2, [sp, #4]
- 802633c: b2db uxtb r3, r3
-
- /* Get seconds */
- tmp.seconds = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 802633e: 2200 movs r2, #0
- tmp.seconds = tmp.seconds * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026340: 250a movs r5, #10
- }
- i++;
-
- /* Get seconds */
- tmp.seconds = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026342: e006 b.n 8026352 <TM_RTC_SetDateTimeString+0xfe>
- tmp.seconds = tmp.seconds * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026344: fb05 1202 mla r2, r5, r2, r1
- 8026348: 3a30 subs r2, #48 ; 0x30
- i++;
- 802634a: 3301 adds r3, #1
- i++;
-
- /* Get seconds */
- tmp.seconds = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.seconds = tmp.seconds * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 802634c: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 8026350: b2db uxtb r3, r3
- }
- i++;
-
- /* Get seconds */
- tmp.seconds = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026352: 5cc1 ldrb r1, [r0, r3]
- 8026354: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 8026358: 2c09 cmp r4, #9
- 802635a: d9f3 bls.n 8026344 <TM_RTC_SetDateTimeString+0xf0>
- 802635c: a804 add r0, sp, #16
- i++;
- }
- i++;
-
- /* Return status from set date time function */
- return TM_RTC_SetDateTime(&tmp, TM_RTC_Format_BIN);
- 802635e: 2100 movs r1, #0
- 8026360: f800 2d10 strb.w r2, [r0, #-16]!
- 8026364: 4668 mov r0, sp
- 8026366: f7ff feb3 bl 80260d0 <TM_RTC_SetDateTime>
- }
- 802636a: b005 add sp, #20
- 802636c: bd30 pop {r4, r5, pc}
- 0802636e <TM_RTC_Config>:
- uint16_t TM_RTC_GetDaysInYear(uint8_t year) {
- /* Return days in year */
- return TM_RTC_DAYS_IN_YEAR(2000 + year);
- }
- void TM_RTC_Config(TM_RTC_ClockSource_t source) {
- 802636e: b508 push {r3, lr}
- if (source == TM_RTC_ClockSource_Internal) {
- 8026370: b950 cbnz r0, 8026388 <TM_RTC_Config+0x1a>
- /* Enable the LSI OSC */
- RCC_LSICmd(ENABLE);
- 8026372: 2001 movs r0, #1
- 8026374: f7ff f980 bl 8025678 <RCC_LSICmd>
- /* Wait till LSI is ready */
- while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
- 8026378: 2061 movs r0, #97 ; 0x61
- 802637a: f7ff fa3b bl 80257f4 <RCC_GetFlagStatus>
- 802637e: 2800 cmp r0, #0
- 8026380: d0fa beq.n 8026378 <TM_RTC_Config+0xa>
- /* Select the RTC Clock Source */
- RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
- 8026382: f44f 7000 mov.w r0, #512 ; 0x200
- 8026386: e00a b.n 802639e <TM_RTC_Config+0x30>
- } else if (source == TM_RTC_ClockSource_External) {
- 8026388: 2801 cmp r0, #1
- 802638a: d10a bne.n 80263a2 <TM_RTC_Config+0x34>
- /* Enable the LSE OSC */
- RCC_LSEConfig(RCC_LSE_ON);
- 802638c: f7ff f964 bl 8025658 <RCC_LSEConfig>
- /* Wait till LSE is ready */
- while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
- 8026390: 2041 movs r0, #65 ; 0x41
- 8026392: f7ff fa2f bl 80257f4 <RCC_GetFlagStatus>
- 8026396: 2800 cmp r0, #0
- 8026398: d0fa beq.n 8026390 <TM_RTC_Config+0x22>
- /* Select the RTC Clock Source */
- RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
- 802639a: f44f 7080 mov.w r0, #256 ; 0x100
- 802639e: f7ff f9b7 bl 8025710 <RCC_RTCCLKConfig>
- }
-
- /* Enable the RTC Clock */
- RCC_RTCCLKCmd(ENABLE);
- 80263a2: 2001 movs r0, #1
- 80263a4: f7ff f9cc bl 8025740 <RCC_RTCCLKCmd>
-
- /* Wait for register synchronization */
- RTC_WaitForSynchro();
- 80263a8: f7ff faa8 bl 80258fc <RTC_WaitForSynchro>
- /* Write status */
- RTC_WriteBackupRegister(RTC_STATUS_REG, RTC_STATUS_INIT_OK);
- 80263ac: 2013 movs r0, #19
- 80263ae: f241 2134 movw r1, #4660 ; 0x1234
- }
- 80263b2: e8bd 4008 ldmia.w sp!, {r3, lr}
-
- /* Wait for register synchronization */
- RTC_WaitForSynchro();
- /* Write status */
- RTC_WriteBackupRegister(RTC_STATUS_REG, RTC_STATUS_INIT_OK);
- 80263b6: f7ff bb9b b.w 8025af0 <RTC_WriteBackupRegister>
- 80263ba: 0000 movs r0, r0
- 080263bc <TM_RTC_GetUnixTimeStamp>:
- /* Enable wakeup command */
- RTC_WakeUpCmd(ENABLE);
- }
- }
- uint32_t TM_RTC_GetUnixTimeStamp(TM_RTC_t* data) {
- 80263bc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- uint32_t days = 0, seconds = 0;
- uint16_t i;
- uint16_t year = (uint16_t) (data->year + 2000);
- 80263c0: 7a42 ldrb r2, [r0, #9]
- 80263c2: f240 73b2 movw r3, #1970 ; 0x7b2
- 80263c6: f502 62fa add.w r2, r2, #2000 ; 0x7d0
- 80263ca: 2100 movs r1, #0
- if (year < TM_RTC_OFFSET_YEAR) {
- return 0;
- }
- /* Days in back years */
- for (i = TM_RTC_OFFSET_YEAR; i < year; i++) {
- days += TM_RTC_DAYS_IN_YEAR(i);
- 80263cc: f44f 75c8 mov.w r5, #400 ; 0x190
- 80263d0: 2664 movs r6, #100 ; 0x64
- 80263d2: 079c lsls r4, r3, #30
- 80263d4: d108 bne.n 80263e8 <TM_RTC_GetUnixTimeStamp+0x2c>
- 80263d6: fbb3 f4f6 udiv r4, r3, r6
- 80263da: fb06 3414 mls r4, r6, r4, r3
- 80263de: b2a4 uxth r4, r4
- 80263e0: b114 cbz r4, 80263e8 <TM_RTC_GetUnixTimeStamp+0x2c>
- 80263e2: f44f 74b7 mov.w r4, #366 ; 0x16e
- 80263e6: e008 b.n 80263fa <TM_RTC_GetUnixTimeStamp+0x3e>
- 80263e8: fbb3 f4f5 udiv r4, r3, r5
- 80263ec: fb05 3414 mls r4, r5, r4, r3
- 80263f0: b2a4 uxth r4, r4
- 80263f2: 2c00 cmp r4, #0
- 80263f4: d0f5 beq.n 80263e2 <TM_RTC_GetUnixTimeStamp+0x26>
- 80263f6: f240 146d movw r4, #365 ; 0x16d
- /* Year is below offset year */
- if (year < TM_RTC_OFFSET_YEAR) {
- return 0;
- }
- /* Days in back years */
- for (i = TM_RTC_OFFSET_YEAR; i < year; i++) {
- 80263fa: 3301 adds r3, #1
- 80263fc: b29b uxth r3, r3
- 80263fe: 4293 cmp r3, r2
- days += TM_RTC_DAYS_IN_YEAR(i);
- 8026400: 4421 add r1, r4
- /* Year is below offset year */
- if (year < TM_RTC_OFFSET_YEAR) {
- return 0;
- }
- /* Days in back years */
- for (i = TM_RTC_OFFSET_YEAR; i < year; i++) {
- 8026402: d3e6 bcc.n 80263d2 <TM_RTC_GetUnixTimeStamp+0x16>
- days += TM_RTC_DAYS_IN_YEAR(i);
- }
- /* Days in current year */
- for (i = 1; i < data->month; i++) {
- days += TM_RTC_Months[TM_RTC_LEAP_YEAR(year)][i - 1];
- 8026404: 2364 movs r3, #100 ; 0x64
- 8026406: fbb2 f7f3 udiv r7, r2, r3
- 802640a: fb03 2317 mls r3, r3, r7, r2
- 802640e: b29f uxth r7, r3
- 8026410: f44f 73c8 mov.w r3, #400 ; 0x190
- 8026414: fbb2 f4f3 udiv r4, r2, r3
- 8026418: fb03 2414 mls r4, r3, r4, r2
- 802641c: b2a4 uxth r4, r4
- 802641e: f1d4 0401 rsbs r4, r4, #1
- 8026422: bf38 it cc
- 8026424: 2400 movcc r4, #0
- /* Days in back years */
- for (i = TM_RTC_OFFSET_YEAR; i < year; i++) {
- days += TM_RTC_DAYS_IN_YEAR(i);
- }
- /* Days in current year */
- for (i = 1; i < data->month; i++) {
- 8026426: 7a06 ldrb r6, [r0, #8]
- days += TM_RTC_Months[TM_RTC_LEAP_YEAR(year)][i - 1];
- 8026428: f8df c058 ldr.w ip, [pc, #88] ; 8026484 <TM_RTC_GetUnixTimeStamp+0xc8>
- 802642c: 2300 movs r3, #0
- 802642e: f002 0203 and.w r2, r2, #3
- 8026432: f04f 080c mov.w r8, #12
- 8026436: e00c b.n 8026452 <TM_RTC_GetUnixTimeStamp+0x96>
- 8026438: b922 cbnz r2, 8026444 <TM_RTC_GetUnixTimeStamp+0x88>
- 802643a: 2f00 cmp r7, #0
- 802643c: bf0c ite eq
- 802643e: 4625 moveq r5, r4
- 8026440: 2501 movne r5, #1
- 8026442: e000 b.n 8026446 <TM_RTC_GetUnixTimeStamp+0x8a>
- 8026444: 4625 mov r5, r4
- 8026446: fb08 3505 mla r5, r8, r5, r3
- 802644a: 3301 adds r3, #1
- 802644c: f81c 5005 ldrb.w r5, [ip, r5]
- 8026450: 1949 adds r1, r1, r5
- /* Days in back years */
- for (i = TM_RTC_OFFSET_YEAR; i < year; i++) {
- days += TM_RTC_DAYS_IN_YEAR(i);
- }
- /* Days in current year */
- for (i = 1; i < data->month; i++) {
- 8026452: 1c5d adds r5, r3, #1
- 8026454: b2ad uxth r5, r5
- 8026456: 42b5 cmp r5, r6
- 8026458: d3ee bcc.n 8026438 <TM_RTC_GetUnixTimeStamp+0x7c>
- days += TM_RTC_Months[TM_RTC_LEAP_YEAR(year)][i - 1];
- }
- /* Day starts with 1 */
- days += data->date - 1;
- 802645a: 79c3 ldrb r3, [r0, #7]
- seconds = days * TM_RTC_SECONDS_PER_DAY;
- seconds += data->hours * TM_RTC_SECONDS_PER_HOUR;
- 802645c: 7944 ldrb r4, [r0, #5]
- /* Days in current year */
- for (i = 1; i < data->month; i++) {
- days += TM_RTC_Months[TM_RTC_LEAP_YEAR(year)][i - 1];
- }
- /* Day starts with 1 */
- days += data->date - 1;
- 802645e: 3b01 subs r3, #1
- 8026460: 1859 adds r1, r3, r1
- seconds = days * TM_RTC_SECONDS_PER_DAY;
- seconds += data->hours * TM_RTC_SECONDS_PER_HOUR;
- seconds += data->minutes * TM_RTC_SECONDS_PER_MINUTE;
- 8026462: 7903 ldrb r3, [r0, #4]
- 8026464: 009a lsls r2, r3, #2
- 8026466: 019b lsls r3, r3, #6
- 8026468: 1a9a subs r2, r3, r2
- days += TM_RTC_Months[TM_RTC_LEAP_YEAR(year)][i - 1];
- }
- /* Day starts with 1 */
- days += data->date - 1;
- seconds = days * TM_RTC_SECONDS_PER_DAY;
- seconds += data->hours * TM_RTC_SECONDS_PER_HOUR;
- 802646a: f44f 6361 mov.w r3, #3600 ; 0xe10
- 802646e: fb03 2304 mla r3, r3, r4, r2
- seconds += data->minutes * TM_RTC_SECONDS_PER_MINUTE;
- seconds += data->seconds;
- 8026472: 7802 ldrb r2, [r0, #0]
-
- /* seconds = days * 86400; */
- return seconds;
- }
- 8026474: 4802 ldr r0, [pc, #8] ; (8026480 <TM_RTC_GetUnixTimeStamp+0xc4>)
- }
- /* Day starts with 1 */
- days += data->date - 1;
- seconds = days * TM_RTC_SECONDS_PER_DAY;
- seconds += data->hours * TM_RTC_SECONDS_PER_HOUR;
- seconds += data->minutes * TM_RTC_SECONDS_PER_MINUTE;
- 8026476: 189b adds r3, r3, r2
- seconds += data->seconds;
-
- /* seconds = days * 86400; */
- return seconds;
- }
- 8026478: fb00 3001 mla r0, r0, r1, r3
- 802647c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 8026480: 00015180 .word 0x00015180
- 8026484: 20000648 .word 0x20000648
- 08026488 <TM_RTC_GetDateTime>:
-
- /* Return status from set date time function */
- return TM_RTC_SetDateTime(&tmp, TM_RTC_Format_BIN);
- }
- void TM_RTC_GetDateTime(TM_RTC_t* data, TM_RTC_Format_t format) {
- 8026488: b538 push {r3, r4, r5, lr}
- 802648a: 4604 mov r4, r0
- uint32_t unix;
- /* Get time */
- if (format == TM_RTC_Format_BIN) {
- 802648c: 460d mov r5, r1
- 802648e: b909 cbnz r1, 8026494 <TM_RTC_GetDateTime+0xc>
- RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct);
- 8026490: 4608 mov r0, r1
- 8026492: e000 b.n 8026496 <TM_RTC_GetDateTime+0xe>
- } else {
- RTC_GetTime(RTC_Format_BCD, &RTC_TimeStruct);
- 8026494: 2001 movs r0, #1
- 8026496: 4911 ldr r1, [pc, #68] ; (80264dc <TM_RTC_GetDateTime+0x54>)
- 8026498: f7ff fa9e bl 80259d8 <RTC_GetTime>
- }
-
- /* Format hours */
- data->hours = RTC_TimeStruct.RTC_Hours;
- 802649c: 4b0f ldr r3, [pc, #60] ; (80264dc <TM_RTC_GetDateTime+0x54>)
- 802649e: 781a ldrb r2, [r3, #0]
- 80264a0: 7162 strb r2, [r4, #5]
- data->minutes = RTC_TimeStruct.RTC_Minutes;
- 80264a2: 785a ldrb r2, [r3, #1]
- data->seconds = RTC_TimeStruct.RTC_Seconds;
- 80264a4: 789b ldrb r3, [r3, #2]
- RTC_GetTime(RTC_Format_BCD, &RTC_TimeStruct);
- }
-
- /* Format hours */
- data->hours = RTC_TimeStruct.RTC_Hours;
- data->minutes = RTC_TimeStruct.RTC_Minutes;
- 80264a6: 7122 strb r2, [r4, #4]
- data->seconds = RTC_TimeStruct.RTC_Seconds;
- 80264a8: 7023 strb r3, [r4, #0]
-
- /* Get subseconds */
- data->subseconds = RTC->SSR;
- 80264aa: 4b0d ldr r3, [pc, #52] ; (80264e0 <TM_RTC_GetDateTime+0x58>)
- 80264ac: 6a9b ldr r3, [r3, #40] ; 0x28
- 80264ae: 8063 strh r3, [r4, #2]
-
- /* Get date */
- if (format == TM_RTC_Format_BIN) {
- 80264b0: b90d cbnz r5, 80264b6 <TM_RTC_GetDateTime+0x2e>
- RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);
- 80264b2: 4628 mov r0, r5
- 80264b4: e000 b.n 80264b8 <TM_RTC_GetDateTime+0x30>
- } else {
- RTC_GetDate(RTC_Format_BCD, &RTC_DateStruct);
- 80264b6: 2001 movs r0, #1
- 80264b8: 490a ldr r1, [pc, #40] ; (80264e4 <TM_RTC_GetDateTime+0x5c>)
- 80264ba: f7ff faf9 bl 8025ab0 <RTC_GetDate>
- }
-
- /* Format date */
- data->year = RTC_DateStruct.RTC_Year;
- 80264be: 4b09 ldr r3, [pc, #36] ; (80264e4 <TM_RTC_GetDateTime+0x5c>)
- 80264c0: 78da ldrb r2, [r3, #3]
- 80264c2: 7262 strb r2, [r4, #9]
- data->month = RTC_DateStruct.RTC_Month;
- 80264c4: 785a ldrb r2, [r3, #1]
- 80264c6: 7222 strb r2, [r4, #8]
- data->date = RTC_DateStruct.RTC_Date;
- 80264c8: 789a ldrb r2, [r3, #2]
- data->day = RTC_DateStruct.RTC_WeekDay;
- 80264ca: 781b ldrb r3, [r3, #0]
- }
-
- /* Format date */
- data->year = RTC_DateStruct.RTC_Year;
- data->month = RTC_DateStruct.RTC_Month;
- data->date = RTC_DateStruct.RTC_Date;
- 80264cc: 71e2 strb r2, [r4, #7]
- data->day = RTC_DateStruct.RTC_WeekDay;
- 80264ce: 71a3 strb r3, [r4, #6]
-
- /* Calculate unix offset */
- unix = TM_RTC_GetUnixTimeStamp(data);
- 80264d0: 4620 mov r0, r4
- 80264d2: f7ff ff73 bl 80263bc <TM_RTC_GetUnixTimeStamp>
- data->unix = unix;
- 80264d6: 60e0 str r0, [r4, #12]
- 80264d8: bd38 pop {r3, r4, r5, pc}
- 80264da: bf00 nop
- 80264dc: 2000c810 .word 0x2000c810
- 80264e0: 40002800 .word 0x40002800
- 80264e4: 2000c820 .word 0x2000c820
- 080264e8 <TM_RTC_Init>:
- }
- }
- uint32_t TM_RTC_Init(TM_RTC_ClockSource_t source)
- {
- 80264e8: b5f0 push {r4, r5, r6, r7, lr}
- uint32_t status;
- uint8_t stat = 1;
- TM_RTC_t datatime;
-
- /* Enable PWR peripheral clock */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
- 80264ea: 2101 movs r1, #1
- }
- }
- uint32_t TM_RTC_Init(TM_RTC_ClockSource_t source)
- {
- 80264ec: b085 sub sp, #20
- 80264ee: 4605 mov r5, r0
- uint32_t status;
- uint8_t stat = 1;
- TM_RTC_t datatime;
-
- /* Enable PWR peripheral clock */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
- 80264f0: f04f 5080 mov.w r0, #268435456 ; 0x10000000
- 80264f4: f7ff f942 bl 802577c <RCC_APB1PeriphClockCmd>
- /* Allow access to BKP Domain */
- PWR_BackupAccessCmd(ENABLE);
- 80264f8: 2001 movs r0, #1
- 80264fa: f7ff f8a7 bl 802564c <PWR_BackupAccessCmd>
-
- /* Get RTC status */
- status = RTC_ReadBackupRegister(RTC_STATUS_REG);
- 80264fe: 2013 movs r0, #19
- 8026500: f7ff fb06 bl 8025b10 <RTC_ReadBackupRegister>
-
- if (status == RTC_STATUS_TIME_OK)
- 8026504: f244 3321 movw r3, #17185 ; 0x4321
- 8026508: 4298 cmp r0, r3
- 802650a: 4e25 ldr r6, [pc, #148] ; (80265a0 <TM_RTC_Init+0xb8>)
- 802650c: d113 bne.n 8026536 <TM_RTC_Init+0x4e>
- {
- TM_RTC_Status = RTC_STATUS_TIME_OK;
- 802650e: 6030 str r0, [r6, #0]
-
- /* Start internal clock if we choose internal clock */
- if (source == TM_RTC_ClockSource_Internal)
- 8026510: b915 cbnz r5, 8026518 <TM_RTC_Init+0x30>
- TM_RTC_Config(TM_RTC_ClockSource_Internal);
- 8026512: 4628 mov r0, r5
- 8026514: f7ff ff2b bl 802636e <TM_RTC_Config>
- /* Wait for RTC APB registers synchronisation (needed after start-up from Reset) */
- RTC_WaitForSynchro();
- 8026518: f7ff f9f0 bl 80258fc <RTC_WaitForSynchro>
-
- /* Clear interrupt flags */
- RTC_ClearITPendingBit(RTC_IT_WUT);
- 802651c: f44f 4080 mov.w r0, #16384 ; 0x4000
- 8026520: f7ff fb1e bl 8025b60 <RTC_ClearITPendingBit>
- EXTI->PR = 0x00400000;
- 8026524: 4b1f ldr r3, [pc, #124] ; (80265a4 <TM_RTC_Init+0xbc>)
- 8026526: f44f 0280 mov.w r2, #4194304 ; 0x400000
- 802652a: 615a str r2, [r3, #20]
-
- /* Get date and time */
- TM_RTC_GetDateTime(&datatime, TM_RTC_Format_BIN);
- 802652c: 4668 mov r0, sp
- 802652e: 2100 movs r1, #0
- 8026530: f7ff ffaa bl 8026488 <TM_RTC_GetDateTime>
- 8026534: e02f b.n 8026596 <TM_RTC_Init+0xae>
- }
- else if (status == RTC_STATUS_INIT_OK)
- 8026536: f241 2734 movw r7, #4660 ; 0x1234
- 802653a: 42b8 cmp r0, r7
- 802653c: d10f bne.n 802655e <TM_RTC_Init+0x76>
- {
- TM_RTC_Status = RTC_STATUS_INIT_OK;
- 802653e: 6030 str r0, [r6, #0]
-
- /* Start internal clock if we choose internal clock */
- if (source == TM_RTC_ClockSource_Internal)
- 8026540: b915 cbnz r5, 8026548 <TM_RTC_Init+0x60>
- TM_RTC_Config(TM_RTC_ClockSource_Internal);
- 8026542: 4628 mov r0, r5
- 8026544: f7ff ff13 bl 802636e <TM_RTC_Config>
- /* Wait for RTC APB registers synchronisation (needed after start-up from Reset) */
- RTC_WaitForSynchro();
- 8026548: f7ff f9d8 bl 80258fc <RTC_WaitForSynchro>
-
- /* Clear interrupt flags */
- RTC_ClearITPendingBit(RTC_IT_WUT);
- 802654c: f44f 4080 mov.w r0, #16384 ; 0x4000
- 8026550: f7ff fb06 bl 8025b60 <RTC_ClearITPendingBit>
- EXTI->PR = 0x00400000;
- 8026554: 4b13 ldr r3, [pc, #76] ; (80265a4 <TM_RTC_Init+0xbc>)
- 8026556: f44f 0280 mov.w r2, #4194304 ; 0x400000
- 802655a: 615a str r2, [r3, #20]
- 802655c: e01b b.n 8026596 <TM_RTC_Init+0xae>
- /* Get date and time */
- //TM_RTC_GetDateTime(&datatime, TM_RTC_Format_BIN);
- }
- else
- {
- TM_RTC_Status = RTC_STATUS_ZERO;
- 802655e: 2400 movs r4, #0
- /* Return status = 0 -> RTC Never initialized before */
- stat = RTC_STATUS_ZERO;
- /* Config RTC */
- TM_RTC_Config(source);
- 8026560: 4628 mov r0, r5
- /* Get date and time */
- //TM_RTC_GetDateTime(&datatime, TM_RTC_Format_BIN);
- }
- else
- {
- TM_RTC_Status = RTC_STATUS_ZERO;
- 8026562: 6034 str r4, [r6, #0]
- /* Return status = 0 -> RTC Never initialized before */
- stat = RTC_STATUS_ZERO;
- /* Config RTC */
- TM_RTC_Config(source);
- 8026564: f7ff ff03 bl 802636e <TM_RTC_Config>
- datatime.day = 1;
- datatime.month = 1;
- datatime.year = 0;
- datatime.hours = 0;
- datatime.minutes = 0;
- datatime.seconds = 0;
- 8026568: a804 add r0, sp, #16
- stat = RTC_STATUS_ZERO;
- /* Config RTC */
- TM_RTC_Config(source);
-
- /* Set date and time */
- datatime.date = 1;
- 802656a: 2301 movs r3, #1
- datatime.day = 1;
- datatime.month = 1;
- datatime.year = 0;
- datatime.hours = 0;
- datatime.minutes = 0;
- datatime.seconds = 0;
- 802656c: f800 4d10 strb.w r4, [r0, #-16]!
- /* Set date and time */
- TM_RTC_SetDateTime(&datatime, TM_RTC_Format_BIN);
- 8026570: 4621 mov r1, r4
- 8026572: 4668 mov r0, sp
- stat = RTC_STATUS_ZERO;
- /* Config RTC */
- TM_RTC_Config(source);
-
- /* Set date and time */
- datatime.date = 1;
- 8026574: f88d 3007 strb.w r3, [sp, #7]
- datatime.day = 1;
- 8026578: f88d 3006 strb.w r3, [sp, #6]
- datatime.month = 1;
- 802657c: f88d 3008 strb.w r3, [sp, #8]
- datatime.year = 0;
- 8026580: f88d 4009 strb.w r4, [sp, #9]
- datatime.hours = 0;
- 8026584: f88d 4005 strb.w r4, [sp, #5]
- datatime.minutes = 0;
- 8026588: f88d 4004 strb.w r4, [sp, #4]
- datatime.seconds = 0;
- /* Set date and time */
- TM_RTC_SetDateTime(&datatime, TM_RTC_Format_BIN);
- 802658c: f7ff fda0 bl 80260d0 <TM_RTC_SetDateTime>
-
- /* Initialized OK */
- TM_RTC_Status = RTC_STATUS_INIT_OK;
- 8026590: 6037 str r7, [r6, #0]
- }
- /* If first time initialized */
- if (stat == RTC_STATUS_ZERO)
- return 0;
- 8026592: 4620 mov r0, r4
- 8026594: e001 b.n 802659a <TM_RTC_Init+0xb2>
-
- return TM_RTC_Status;
- 8026596: 4b02 ldr r3, [pc, #8] ; (80265a0 <TM_RTC_Init+0xb8>)
- 8026598: 6818 ldr r0, [r3, #0]
- }
- 802659a: b005 add sp, #20
- 802659c: bdf0 pop {r4, r5, r6, r7, pc}
- 802659e: bf00 nop
- 80265a0: 20000b04 .word 0x20000b04
- 80265a4: 40013c00 .word 0x40013c00
- 080265a8 <TM_RTC_GetDateTimeFromUnix>:
- uint16_t year;
-
- /* Store unix time to unix in struct */
- data->unix = unix;
- /* Get seconds from unix */
- data->seconds = unix % 60;
- 80265a8: 233c movs r3, #60 ; 0x3c
-
- /* seconds = days * 86400; */
- return seconds;
- }
- void TM_RTC_GetDateTimeFromUnix(TM_RTC_t* data, uint32_t unix) {
- 80265aa: b5f0 push {r4, r5, r6, r7, lr}
- uint16_t year;
-
- /* Store unix time to unix in struct */
- data->unix = unix;
- /* Get seconds from unix */
- data->seconds = unix % 60;
- 80265ac: fbb1 f4f3 udiv r4, r1, r3
- /* Go to minutes */
- unix /= 60;
- /* Get minutes */
- data->minutes = unix % 60;
- 80265b0: fbb4 f2f3 udiv r2, r4, r3
- void TM_RTC_GetDateTimeFromUnix(TM_RTC_t* data, uint32_t unix) {
- uint16_t year;
-
- /* Store unix time to unix in struct */
- data->unix = unix;
- 80265b4: 60c1 str r1, [r0, #12]
- /* Get seconds from unix */
- data->seconds = unix % 60;
- 80265b6: fb03 1114 mls r1, r3, r4, r1
- 80265ba: 7001 strb r1, [r0, #0]
- /* Go to minutes */
- unix /= 60;
- /* Get minutes */
- data->minutes = unix % 60;
- 80265bc: fb03 4312 mls r3, r3, r2, r4
- /* Go to hours */
- unix /= 60;
- /* Get hours */
- data->hours = unix % 24;
- 80265c0: 2118 movs r1, #24
- /* Get seconds from unix */
- data->seconds = unix % 60;
- /* Go to minutes */
- unix /= 60;
- /* Get minutes */
- data->minutes = unix % 60;
- 80265c2: 7103 strb r3, [r0, #4]
- /* Go to hours */
- unix /= 60;
- /* Get hours */
- data->hours = unix % 24;
- 80265c4: fbb2 f3f1 udiv r3, r2, r1
- 80265c8: fb01 2213 mls r2, r1, r3, r2
- 80265cc: 7142 strb r2, [r0, #5]
- /* Go to days */
- unix /= 24;
-
- /* Get week day */
- /* Monday is day one */
- data->day = (unix + 3) % 7 + 1;
- 80265ce: 1cd9 adds r1, r3, #3
- 80265d0: 2207 movs r2, #7
- 80265d2: fbb1 f4f2 udiv r4, r1, r2
- 80265d6: fb02 1214 mls r2, r2, r4, r1
- 80265da: 3201 adds r2, #1
- 80265dc: 7182 strb r2, [r0, #6]
- /* Get year */
- year = 1970;
- while (1) {
- if (TM_RTC_LEAP_YEAR(year)) {
- if (unix >= 366) {
- 80265de: f240 156d movw r5, #365 ; 0x16d
- /* Get week day */
- /* Monday is day one */
- data->day = (unix + 3) % 7 + 1;
- /* Get year */
- year = 1970;
- 80265e2: f240 72b2 movw r2, #1970 ; 0x7b2
- while (1) {
- if (TM_RTC_LEAP_YEAR(year)) {
- 80265e6: f44f 71c8 mov.w r1, #400 ; 0x190
- 80265ea: 2464 movs r4, #100 ; 0x64
- 80265ec: f012 0603 ands.w r6, r2, #3
- 80265f0: d105 bne.n 80265fe <TM_RTC_GetDateTimeFromUnix+0x56>
- 80265f2: fbb2 f7f4 udiv r7, r2, r4
- 80265f6: fb04 2717 mls r7, r4, r7, r2
- 80265fa: b2bf uxth r7, r7
- 80265fc: b92f cbnz r7, 802660a <TM_RTC_GetDateTimeFromUnix+0x62>
- 80265fe: fbb2 f7f1 udiv r7, r2, r1
- 8026602: fb01 2717 mls r7, r1, r7, r2
- 8026606: b2bf uxth r7, r7
- 8026608: b927 cbnz r7, 8026614 <TM_RTC_GetDateTimeFromUnix+0x6c>
- if (unix >= 366) {
- 802660a: 42ab cmp r3, r5
- 802660c: d90b bls.n 8026626 <TM_RTC_GetDateTimeFromUnix+0x7e>
- unix -= 366;
- 802660e: f5a3 73b7 sub.w r3, r3, #366 ; 0x16e
- /* Get year */
- year = 1970;
- while (1) {
- if (TM_RTC_LEAP_YEAR(year)) {
- if (unix >= 366) {
- 8026612: e005 b.n 8026620 <TM_RTC_GetDateTimeFromUnix+0x78>
- unix -= 366;
- } else {
- break;
- }
- } else if (unix >= 365) {
- 8026614: f5b3 7fb6 cmp.w r3, #364 ; 0x16c
- 8026618: d905 bls.n 8026626 <TM_RTC_GetDateTimeFromUnix+0x7e>
- unix -= 365;
- 802661a: f46f 76b6 mvn.w r6, #364 ; 0x16c
- 802661e: 199b adds r3, r3, r6
- } else {
- break;
- }
- year++;
- 8026620: 3201 adds r2, #1
- 8026622: b292 uxth r2, r2
- }
- 8026624: e7e2 b.n 80265ec <TM_RTC_GetDateTimeFromUnix+0x44>
- /* Get year in xx format */
- data->year = (uint8_t) (year - 2000);
- 8026626: f102 0130 add.w r1, r2, #48 ; 0x30
- 802662a: 7241 strb r1, [r0, #9]
- /* Get month */
- for (data->month = 0; data->month < 12; data->month++) {
- 802662c: 2100 movs r1, #0
- 802662e: 7201 strb r1, [r0, #8]
- if (TM_RTC_LEAP_YEAR(year) && unix >= (uint32_t)TM_RTC_Months[1][data->month]) {
- 8026630: 2164 movs r1, #100 ; 0x64
- 8026632: fbb2 f7f1 udiv r7, r2, r1
- 8026636: fb01 2117 mls r1, r1, r7, r2
- 802663a: b28f uxth r7, r1
- 802663c: f44f 71c8 mov.w r1, #400 ; 0x190
- 8026640: fbb2 f4f1 udiv r4, r2, r1
- 8026644: fb01 2214 mls r2, r1, r4, r2
- 8026648: b292 uxth r2, r2
- unix -= TM_RTC_Months[1][data->month];
- } else if (unix >= (uint32_t)TM_RTC_Months[0][data->month]) {
- 802664a: 4c0c ldr r4, [pc, #48] ; (802667c <TM_RTC_GetDateTimeFromUnix+0xd4>)
- year++;
- }
- /* Get year in xx format */
- data->year = (uint8_t) (year - 2000);
- /* Get month */
- for (data->month = 0; data->month < 12; data->month++) {
- 802664c: e012 b.n 8026674 <TM_RTC_GetDateTimeFromUnix+0xcc>
- if (TM_RTC_LEAP_YEAR(year) && unix >= (uint32_t)TM_RTC_Months[1][data->month]) {
- 802664e: b906 cbnz r6, 8026652 <TM_RTC_GetDateTimeFromUnix+0xaa>
- 8026650: b907 cbnz r7, 8026654 <TM_RTC_GetDateTimeFromUnix+0xac>
- 8026652: b922 cbnz r2, 802665e <TM_RTC_GetDateTimeFromUnix+0xb6>
- 8026654: 1865 adds r5, r4, r1
- 8026656: 7b2d ldrb r5, [r5, #12]
- 8026658: 42ab cmp r3, r5
- 802665a: d300 bcc.n 802665e <TM_RTC_GetDateTimeFromUnix+0xb6>
- 802665c: e007 b.n 802666e <TM_RTC_GetDateTimeFromUnix+0xc6>
- unix -= TM_RTC_Months[1][data->month];
- } else if (unix >= (uint32_t)TM_RTC_Months[0][data->month]) {
- 802665e: 5c65 ldrb r5, [r4, r1]
- 8026660: 42ab cmp r3, r5
- 8026662: d204 bcs.n 802666e <TM_RTC_GetDateTimeFromUnix+0xc6>
- break;
- }
- }
- /* Get month */
- /* Month starts with 1 */
- data->month++;
- 8026664: 3101 adds r1, #1
- /* Get date */
- /* Date starts with 1 */
- data->date = unix + 1;
- 8026666: 3301 adds r3, #1
- break;
- }
- }
- /* Get month */
- /* Month starts with 1 */
- data->month++;
- 8026668: 7201 strb r1, [r0, #8]
- /* Get date */
- /* Date starts with 1 */
- data->date = unix + 1;
- 802666a: 71c3 strb r3, [r0, #7]
- 802666c: bdf0 pop {r4, r5, r6, r7, pc}
- year++;
- }
- /* Get year in xx format */
- data->year = (uint8_t) (year - 2000);
- /* Get month */
- for (data->month = 0; data->month < 12; data->month++) {
- 802666e: 3101 adds r1, #1
- if (TM_RTC_LEAP_YEAR(year) && unix >= (uint32_t)TM_RTC_Months[1][data->month]) {
- unix -= TM_RTC_Months[1][data->month];
- } else if (unix >= (uint32_t)TM_RTC_Months[0][data->month]) {
- unix -= TM_RTC_Months[0][data->month];
- 8026670: 1b5b subs r3, r3, r5
- year++;
- }
- /* Get year in xx format */
- data->year = (uint8_t) (year - 2000);
- /* Get month */
- for (data->month = 0; data->month < 12; data->month++) {
- 8026672: 7201 strb r1, [r0, #8]
- 8026674: 7a01 ldrb r1, [r0, #8]
- 8026676: 290b cmp r1, #11
- 8026678: d9e9 bls.n 802664e <TM_RTC_GetDateTimeFromUnix+0xa6>
- 802667a: e7f3 b.n 8026664 <TM_RTC_GetDateTimeFromUnix+0xbc>
- 802667c: 20000648 .word 0x20000648
- 08026680 <TM_RTC_Correction>:
- * @brief Кореектировака времени.
- * @param Часовой пояс
- * @retval
- */
- void TM_RTC_Correction(float utc)
- {
- 8026680: b510 push {r4, lr}
- 8026682: b088 sub sp, #32
- 8026684: 4604 mov r4, r0
- TM_RTC_t newData;
- int utcSec;
- uint32_t unixTime;
-
- /* Получаем текущее время */
- TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
- 8026686: 2100 movs r1, #0
- 8026688: 4668 mov r0, sp
- 802668a: f7ff fefd bl 8026488 <TM_RTC_GetDateTime>
-
- /* Рассчитываем поправку */
- utcSec = (int)(3600.0*utc);
- 802668e: 4620 mov r0, r4
- 8026690: f7f9 ff42 bl 8020518 <__aeabi_f2d>
- 8026694: a308 add r3, pc, #32 ; (adr r3, 80266b8 <TM_RTC_Correction+0x38>)
- 8026696: e9d3 2300 ldrd r2, r3, [r3]
- 802669a: f7f9 ff91 bl 80205c0 <__aeabi_dmul>
- 802669e: f7fa fa29 bl 8020af4 <__aeabi_d2iz>
- unixTime = data.unix + utcSec;
- 80266a2: 9903 ldr r1, [sp, #12]
- 80266a4: 1841 adds r1, r0, r1
-
- /* Устанавливаем новое время */
- TM_RTC_GetDateTimeFromUnix(&newData, unixTime);
- 80266a6: a804 add r0, sp, #16
- 80266a8: f7ff ff7e bl 80265a8 <TM_RTC_GetDateTimeFromUnix>
- TM_RTC_SetDateTime(&newData, TM_RTC_Format_BIN);
- 80266ac: a804 add r0, sp, #16
- 80266ae: 2100 movs r1, #0
- 80266b0: f7ff fd0e bl 80260d0 <TM_RTC_SetDateTime>
- }
- 80266b4: b008 add sp, #32
- 80266b6: bd10 pop {r4, pc}
- 80266b8: 00000000 .word 0x00000000
- 80266bc: 40ac2000 .word 0x40ac2000
- 080266c0 <TM_RTC_SetDataTimeUnix>:
- return TM_RTC_Status;
- }
- void TM_RTC_SetDataTimeUnix(uint32_t unixTime)
- {
- 80266c0: b51f push {r0, r1, r2, r3, r4, lr}
- 80266c2: 4601 mov r1, r0
- TM_RTC_t data;
-
- TM_RTC_GetDateTimeFromUnix(&data, unixTime);
- 80266c4: 4668 mov r0, sp
- 80266c6: f7ff ff6f bl 80265a8 <TM_RTC_GetDateTimeFromUnix>
- TM_RTC_SetDateTime(&data, TM_RTC_Format_BIN);
- 80266ca: 4668 mov r0, sp
- 80266cc: 2100 movs r1, #0
- 80266ce: f7ff fcff bl 80260d0 <TM_RTC_SetDateTime>
- }
- 80266d2: b005 add sp, #20
- 80266d4: bd00 pop {pc}
- 080266d6 <TM_RTC_RequestHandler>:
- /* Read data from backup register */
- return *(uint32_t *)((&RTC->BKP0R) + 4 * location);
- }
- /* Callbacks */
- __weak void TM_RTC_RequestHandler(void) {
- 80266d6: 4770 bx lr
- 080266d8 <TM_RTC_AlarmAHandler>:
- /* If user needs this function, then they should be defined separatelly in your project */
- }
- __weak void TM_RTC_AlarmAHandler(void) {
- 80266d8: 4770 bx lr
- 080266da <TM_RTC_AlarmBHandler>:
- /* If user needs this function, then they should be defined separatelly in your project */
- }
- __weak void TM_RTC_AlarmBHandler(void) {
- 80266da: 4770 bx lr
- 080266dc <RTC_WKUP_IRQHandler>:
- /* If user needs this function, then they should be defined separatelly in your project */
- }
- /* Private RTC IRQ handlers */
- void RTC_WKUP_IRQHandler(void) {
- 80266dc: b508 push {r3, lr}
- /* Check for RTC interrupt */
- if (RTC_GetITStatus(RTC_IT_WUT) != RESET) {
- 80266de: f44f 4080 mov.w r0, #16384 ; 0x4000
- 80266e2: f7ff fa25 bl 8025b30 <RTC_GetITStatus>
- 80266e6: b128 cbz r0, 80266f4 <RTC_WKUP_IRQHandler+0x18>
- /* Clear interrupt flags */
- RTC_ClearITPendingBit(RTC_IT_WUT);
- 80266e8: f44f 4080 mov.w r0, #16384 ; 0x4000
- 80266ec: f7ff fa38 bl 8025b60 <RTC_ClearITPendingBit>
-
- /* Call user function */
- TM_RTC_RequestHandler();
- 80266f0: f7ff fff1 bl 80266d6 <TM_RTC_RequestHandler>
- }
-
- /* Clear EXTI line 22 bit */
- EXTI->PR = 0x00400000;
- 80266f4: 4b02 ldr r3, [pc, #8] ; (8026700 <RTC_WKUP_IRQHandler+0x24>)
- 80266f6: f44f 0280 mov.w r2, #4194304 ; 0x400000
- 80266fa: 615a str r2, [r3, #20]
- 80266fc: bd08 pop {r3, pc}
- 80266fe: bf00 nop
- 8026700: 40013c00 .word 0x40013c00
- 08026704 <RTC_Alarm_IRQHandler>:
- }
- void RTC_Alarm_IRQHandler(void) {
- 8026704: b508 push {r3, lr}
- /* RTC Alarm A check */
- if (RTC_GetITStatus(RTC_IT_ALRA) != RESET) {
- 8026706: f44f 5080 mov.w r0, #4096 ; 0x1000
- 802670a: f7ff fa11 bl 8025b30 <RTC_GetITStatus>
- 802670e: b128 cbz r0, 802671c <RTC_Alarm_IRQHandler+0x18>
- /* Clear RTC Alarm A interrupt flag */
- RTC_ClearITPendingBit(RTC_IT_ALRA);
- 8026710: f44f 5080 mov.w r0, #4096 ; 0x1000
- 8026714: f7ff fa24 bl 8025b60 <RTC_ClearITPendingBit>
-
- /* Call user function for Alarm A */
- TM_RTC_AlarmAHandler();
- 8026718: f7ff ffde bl 80266d8 <TM_RTC_AlarmAHandler>
- }
-
- /* RTC Alarm B check */
- if (RTC_GetITStatus(RTC_IT_ALRB) != RESET) {
- 802671c: f44f 5000 mov.w r0, #8192 ; 0x2000
- 8026720: f7ff fa06 bl 8025b30 <RTC_GetITStatus>
- 8026724: b128 cbz r0, 8026732 <RTC_Alarm_IRQHandler+0x2e>
- /* Clear RTC Alarm A interrupt flag */
- RTC_ClearITPendingBit(RTC_IT_ALRB);
- 8026726: f44f 5000 mov.w r0, #8192 ; 0x2000
- 802672a: f7ff fa19 bl 8025b60 <RTC_ClearITPendingBit>
-
- /* Call user function for Alarm B */
- TM_RTC_AlarmBHandler();
- 802672e: f7ff ffd4 bl 80266da <TM_RTC_AlarmBHandler>
- }
-
- /* Clear EXTI line 17 bit */
- EXTI->PR = 0x00020000;
- 8026732: 4b02 ldr r3, [pc, #8] ; (802673c <RTC_Alarm_IRQHandler+0x38>)
- 8026734: f44f 3200 mov.w r2, #131072 ; 0x20000
- 8026738: 615a str r2, [r3, #20]
- 802673a: bd08 pop {r3, pc}
- 802673c: 40013c00 .word 0x40013c00
- 08026740 <RTC_SetProfTime>:
- /**
- * @brief Установливает время срабатывания профилактики сульфатации
- */
- void RTC_SetProfTime(char *str)
- {
- 8026740: b530 push {r4, r5, lr}
- uint32_t unixTime;
- uint8_t i = 0;
-
- /* Get date */
- tmp.date = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026742: 2200 movs r2, #0
- /**
- * @brief Установливает время срабатывания профилактики сульфатации
- */
- void RTC_SetProfTime(char *str)
- {
- 8026744: b085 sub sp, #20
- TM_RTC_t tmp;
- uint32_t unixTime;
- uint8_t i = 0;
- 8026746: 4613 mov r3, r2
-
- /* Get date */
- tmp.date = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.date = tmp.date * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026748: 250a movs r5, #10
- uint32_t unixTime;
- uint8_t i = 0;
-
- /* Get date */
- tmp.date = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 802674a: e006 b.n 802675a <RTC_SetProfTime+0x1a>
- tmp.date = tmp.date * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 802674c: fb05 1202 mla r2, r5, r2, r1
- 8026750: 3a30 subs r2, #48 ; 0x30
- i++;
- 8026752: 3301 adds r3, #1
- uint8_t i = 0;
-
- /* Get date */
- tmp.date = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.date = tmp.date * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026754: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 8026758: b2db uxtb r3, r3
- uint32_t unixTime;
- uint8_t i = 0;
-
- /* Get date */
- tmp.date = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 802675a: 5cc1 ldrb r1, [r0, r3]
- 802675c: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 8026760: 2c09 cmp r4, #9
- 8026762: d9f3 bls.n 802674c <RTC_SetProfTime+0xc>
- tmp.date = tmp.date * 10 + TM_RTC_CHAR2NUM(*(str + i));
- i++;
- }
- i++;
- 8026764: 3301 adds r3, #1
- 8026766: f88d 2007 strb.w r2, [sp, #7]
- 802676a: b2db uxtb r3, r3
-
- /* Get month */
- tmp.month = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 802676c: 2200 movs r2, #0
- tmp.month = tmp.month * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 802676e: 250a movs r5, #10
- }
- i++;
-
- /* Get month */
- tmp.month = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026770: e006 b.n 8026780 <RTC_SetProfTime+0x40>
- tmp.month = tmp.month * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026772: fb05 1202 mla r2, r5, r2, r1
- 8026776: 3a30 subs r2, #48 ; 0x30
- i++;
- 8026778: 3301 adds r3, #1
- i++;
-
- /* Get month */
- tmp.month = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.month = tmp.month * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 802677a: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 802677e: b2db uxtb r3, r3
- }
- i++;
-
- /* Get month */
- tmp.month = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026780: 5cc1 ldrb r1, [r0, r3]
- 8026782: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 8026786: 2c09 cmp r4, #9
- 8026788: d9f3 bls.n 8026772 <RTC_SetProfTime+0x32>
- tmp.month = tmp.month * 10 + TM_RTC_CHAR2NUM(*(str + i));
- i++;
- }
- //i++;
- i+=3;
- 802678a: 3303 adds r3, #3
- 802678c: f88d 2008 strb.w r2, [sp, #8]
- 8026790: b2db uxtb r3, r3
-
- /* Get year */
- tmp.year = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026792: 2200 movs r2, #0
- tmp.year = tmp.year * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026794: 250a movs r5, #10
- //i++;
- i+=3;
-
- /* Get year */
- tmp.year = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 8026796: e006 b.n 80267a6 <RTC_SetProfTime+0x66>
- tmp.year = tmp.year * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 8026798: fb05 1202 mla r2, r5, r2, r1
- 802679c: 3a30 subs r2, #48 ; 0x30
- i++;
- 802679e: 3301 adds r3, #1
- i+=3;
-
- /* Get year */
- tmp.year = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.year = tmp.year * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80267a0: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 80267a4: b2db uxtb r3, r3
- //i++;
- i+=3;
-
- /* Get year */
- tmp.year = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80267a6: 5cc1 ldrb r1, [r0, r3]
- 80267a8: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 80267ac: 2c09 cmp r4, #9
- 80267ae: d9f3 bls.n 8026798 <RTC_SetProfTime+0x58>
- tmp.year = tmp.year * 10 + TM_RTC_CHAR2NUM(*(str + i));
- i++;
- }
- i++;
- i++;
- 80267b0: 3302 adds r3, #2
- 80267b2: f88d 2009 strb.w r2, [sp, #9]
- 80267b6: b2db uxtb r3, r3
-
- /* Get hours */
- tmp.hours = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80267b8: 2200 movs r2, #0
- tmp.hours = tmp.hours * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80267ba: 250a movs r5, #10
- i++;
- i++;
-
- /* Get hours */
- tmp.hours = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80267bc: e006 b.n 80267cc <RTC_SetProfTime+0x8c>
- tmp.hours = tmp.hours * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80267be: fb05 1202 mla r2, r5, r2, r1
- 80267c2: 3a30 subs r2, #48 ; 0x30
- i++;
- 80267c4: 3301 adds r3, #1
- i++;
-
- /* Get hours */
- tmp.hours = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.hours = tmp.hours * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80267c6: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 80267ca: b2db uxtb r3, r3
- i++;
- i++;
-
- /* Get hours */
- tmp.hours = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80267cc: 5cc1 ldrb r1, [r0, r3]
- 80267ce: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 80267d2: 2c09 cmp r4, #9
- 80267d4: d9f3 bls.n 80267be <RTC_SetProfTime+0x7e>
- tmp.hours = tmp.hours * 10 + TM_RTC_CHAR2NUM(*(str + i));
- i++;
- }
- i++;
- 80267d6: 3301 adds r3, #1
- 80267d8: f88d 2005 strb.w r2, [sp, #5]
- 80267dc: b2db uxtb r3, r3
-
- /* Get minutes */
- tmp.minutes = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80267de: 2200 movs r2, #0
- tmp.minutes = tmp.minutes * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80267e0: 250a movs r5, #10
- }
- i++;
-
- /* Get minutes */
- tmp.minutes = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80267e2: e006 b.n 80267f2 <RTC_SetProfTime+0xb2>
- tmp.minutes = tmp.minutes * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80267e4: fb05 1202 mla r2, r5, r2, r1
- 80267e8: 3a30 subs r2, #48 ; 0x30
- i++;
- 80267ea: 3301 adds r3, #1
- i++;
-
- /* Get minutes */
- tmp.minutes = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- tmp.minutes = tmp.minutes * 10 + TM_RTC_CHAR2NUM(*(str + i));
- 80267ec: f002 02ff and.w r2, r2, #255 ; 0xff
- i++;
- 80267f0: b2db uxtb r3, r3
- }
- i++;
-
- /* Get minutes */
- tmp.minutes = 0;
- while (TM_RTC_CHARISNUM(*(str + i))) {
- 80267f2: 5cc1 ldrb r1, [r0, r3]
- 80267f4: f1a1 0430 sub.w r4, r1, #48 ; 0x30
- 80267f8: 2c09 cmp r4, #9
- 80267fa: d9f3 bls.n 80267e4 <RTC_SetProfTime+0xa4>
- i++;
- }
- i++;
-
- /* Get seconds */
- tmp.seconds = 0;
- 80267fc: 2300 movs r3, #0
- 80267fe: f88d 3000 strb.w r3, [sp]
-
- /* Устанавливаем +1 для профилактики */
- tmp.year += 1;
- 8026802: f89d 3009 ldrb.w r3, [sp, #9]
- 8026806: f88d 2004 strb.w r2, [sp, #4]
- 802680a: 3301 adds r3, #1
- unixTime = TM_RTC_GetUnixTimeStamp(&tmp);
- 802680c: 4668 mov r0, sp
-
- /* Get seconds */
- tmp.seconds = 0;
-
- /* Устанавливаем +1 для профилактики */
- tmp.year += 1;
- 802680e: f88d 3009 strb.w r3, [sp, #9]
- unixTime = TM_RTC_GetUnixTimeStamp(&tmp);
- 8026812: f7ff fdd3 bl 80263bc <TM_RTC_GetUnixTimeStamp>
- if (location > 18) {
- return;
- }
-
- /* Write data to backup register */
- *(uint32_t *)((&RTC->BKP0R) + 4 * location) = value;
- 8026816: 4b02 ldr r3, [pc, #8] ; (8026820 <RTC_SetProfTime+0xe0>)
- 8026818: 6018 str r0, [r3, #0]
-
- /* Устанавливаем +1 для профилактики */
- tmp.year += 1;
- unixTime = TM_RTC_GetUnixTimeStamp(&tmp);
- TM_RTC_WriteBackupRegister(RTC_BKP_DR0, unixTime);
- 802681a: b005 add sp, #20
- 802681c: bd30 pop {r4, r5, pc}
- 802681e: bf00 nop
- 8026820: 40002850 .word 0x40002850
- 08026824 <spi_tx_rx>:
- //static TN_MUTEX spi_mutex;
- static uint8_t spi_tx_rx(uint8_t byte) {
- while (!(SPI2->SR & SPI_SR_TXE)) {}
- 8026824: 4907 ldr r1, [pc, #28] ; (8026844 <spi_tx_rx+0x20>)
- 8026826: 890a ldrh r2, [r1, #8]
- 8026828: 4b06 ldr r3, [pc, #24] ; (8026844 <spi_tx_rx+0x20>)
- 802682a: f002 0202 and.w r2, r2, #2
- 802682e: b292 uxth r2, r2
- 8026830: 2a00 cmp r2, #0
- 8026832: d0f8 beq.n 8026826 <spi_tx_rx+0x2>
- SPI2->DR = byte;
- 8026834: 8198 strh r0, [r3, #12]
-
- while (!(SPI2->SR & SPI_SR_RXNE)) {}
- 8026836: 891a ldrh r2, [r3, #8]
- 8026838: 07d2 lsls r2, r2, #31
- 802683a: d5fc bpl.n 8026836 <spi_tx_rx+0x12>
- return SPI2->DR;
- 802683c: 4b01 ldr r3, [pc, #4] ; (8026844 <spi_tx_rx+0x20>)
- 802683e: 8998 ldrh r0, [r3, #12]
- }
- 8026840: b2c0 uxtb r0, r0
- 8026842: 4770 bx lr
- 8026844: 40003800 .word 0x40003800
- 08026848 <send_addr>:
- status = spi_tx_rx(0);
- } while (status & SR_WIP);
- SPI_FLASH_CS_H();
- }
- static inline void send_addr(int addr) {
- 8026848: b510 push {r4, lr}
- 802684a: 4604 mov r4, r0
- spi_tx_rx((addr >> 16) & 0xFF);
- 802684c: f3c0 4007 ubfx r0, r0, #16, #8
- 8026850: f7ff ffe8 bl 8026824 <spi_tx_rx>
- spi_tx_rx((addr >> 8) & 0xFF);
- 8026854: f3c4 2007 ubfx r0, r4, #8, #8
- 8026858: f7ff ffe4 bl 8026824 <spi_tx_rx>
- spi_tx_rx(addr & 0xFF);
- 802685c: b2e0 uxtb r0, r4
- }
- 802685e: e8bd 4010 ldmia.w sp!, {r4, lr}
- }
- static inline void send_addr(int addr) {
- spi_tx_rx((addr >> 16) & 0xFF);
- spi_tx_rx((addr >> 8) & 0xFF);
- spi_tx_rx(addr & 0xFF);
- 8026862: f7ff bfdf b.w 8026824 <spi_tx_rx>
- 08026866 <spi_flash_read_sfdp>:
- }
- static int spi_flash_read_sfdp(int addr, void *buf, size_t len) {
- 8026866: b570 push {r4, r5, r6, lr}
- 8026868: 4605 mov r5, r0
- 802686a: 460c mov r4, r1
- SPI_FLASH_CS_L();
- 802686c: 2005 movs r0, #5
- 802686e: 2100 movs r1, #0
- spi_tx_rx((addr >> 16) & 0xFF);
- spi_tx_rx((addr >> 8) & 0xFF);
- spi_tx_rx(addr & 0xFF);
- }
- static int spi_flash_read_sfdp(int addr, void *buf, size_t len) {
- 8026870: 4616 mov r6, r2
- SPI_FLASH_CS_L();
- 8026872: f7ff fb5d bl 8025f30 <gpio_set>
- spi_tx_rx(CMD_RDSFDP);
- 8026876: 205a movs r0, #90 ; 0x5a
- 8026878: f7ff ffd4 bl 8026824 <spi_tx_rx>
- send_addr(addr);
- 802687c: 4628 mov r0, r5
- 802687e: f7ff ffe3 bl 8026848 <send_addr>
- spi_tx_rx(0);
- 8026882: 2000 movs r0, #0
- 8026884: f7ff ffce bl 8026824 <spi_tx_rx>
- spi_tx_rx((addr >> 16) & 0xFF);
- spi_tx_rx((addr >> 8) & 0xFF);
- spi_tx_rx(addr & 0xFF);
- }
- static int spi_flash_read_sfdp(int addr, void *buf, size_t len) {
- 8026888: 19a6 adds r6, r4, r6
- SPI_FLASH_CS_L();
- spi_tx_rx(CMD_RDSFDP);
- send_addr(addr);
- spi_tx_rx(0);
- while (len--)
- 802688a: e004 b.n 8026896 <spi_flash_read_sfdp+0x30>
- *((uint8_t *)buf++) = spi_tx_rx(0);
- 802688c: 2000 movs r0, #0
- 802688e: f7ff ffc9 bl 8026824 <spi_tx_rx>
- 8026892: f804 0b01 strb.w r0, [r4], #1
- static int spi_flash_read_sfdp(int addr, void *buf, size_t len) {
- SPI_FLASH_CS_L();
- spi_tx_rx(CMD_RDSFDP);
- send_addr(addr);
- spi_tx_rx(0);
- while (len--)
- 8026896: 42b4 cmp r4, r6
- 8026898: d1f8 bne.n 802688c <spi_flash_read_sfdp+0x26>
- *((uint8_t *)buf++) = spi_tx_rx(0);
- SPI_FLASH_CS_H();
- 802689a: 2005 movs r0, #5
- 802689c: 2101 movs r1, #1
- 802689e: f7ff fb47 bl 8025f30 <gpio_set>
- return 0;
- }
- 80268a2: 2000 movs r0, #0
- 80268a4: bd70 pop {r4, r5, r6, pc}
- 080268a6 <wait_write_enable>:
- spi_flash_desc_t spi_flash_desc;
- static inline void wait_write_enable(void) {
- uint8_t status;
- // spi_cs_down();
- SPI_FLASH_CS_L();
- 80268a6: 2005 movs r0, #5
- #define SR_WEL (1 << 1)
- #define SR_SRWD (1 << 7)
- spi_flash_desc_t spi_flash_desc;
- static inline void wait_write_enable(void) {
- 80268a8: b508 push {r3, lr}
- uint8_t status;
- // spi_cs_down();
- SPI_FLASH_CS_L();
- 80268aa: 2100 movs r1, #0
- 80268ac: f7ff fb40 bl 8025f30 <gpio_set>
- spi_tx_rx(CMD_RDSR);
- 80268b0: 2005 movs r0, #5
- 80268b2: f7ff ffb7 bl 8026824 <spi_tx_rx>
- do {
- status = spi_tx_rx(0);
- 80268b6: 2000 movs r0, #0
- 80268b8: f7ff ffb4 bl 8026824 <spi_tx_rx>
- } while (!(status & SR_WEL));
- 80268bc: f000 0002 and.w r0, r0, #2
- 80268c0: b2c0 uxtb r0, r0
- 80268c2: 2800 cmp r0, #0
- 80268c4: d0f7 beq.n 80268b6 <wait_write_enable+0x10>
- // spi_cs_up();
- SPI_FLASH_CS_H();
- 80268c6: 2005 movs r0, #5
- 80268c8: 2101 movs r1, #1
- }
- 80268ca: e8bd 4008 ldmia.w sp!, {r3, lr}
- spi_tx_rx(CMD_RDSR);
- do {
- status = spi_tx_rx(0);
- } while (!(status & SR_WEL));
- // spi_cs_up();
- SPI_FLASH_CS_H();
- 80268ce: f7ff bb2f b.w 8025f30 <gpio_set>
- 080268d2 <wait_write_end>:
- }
- static inline void wait_write_end(void) {
- uint8_t status;
- SPI_FLASH_CS_L();
- 80268d2: 2005 movs r0, #5
- } while (!(status & SR_WEL));
- // spi_cs_up();
- SPI_FLASH_CS_H();
- }
- static inline void wait_write_end(void) {
- 80268d4: b508 push {r3, lr}
- uint8_t status;
- SPI_FLASH_CS_L();
- 80268d6: 2100 movs r1, #0
- 80268d8: f7ff fb2a bl 8025f30 <gpio_set>
- spi_tx_rx(CMD_RDSR);
- 80268dc: 2005 movs r0, #5
- 80268de: f7ff ffa1 bl 8026824 <spi_tx_rx>
- do {
- status = spi_tx_rx(0);
- 80268e2: 2000 movs r0, #0
- 80268e4: f7ff ff9e bl 8026824 <spi_tx_rx>
- } while (status & SR_WIP);
- 80268e8: 07c1 lsls r1, r0, #31
- 80268ea: d4fa bmi.n 80268e2 <wait_write_end+0x10>
- SPI_FLASH_CS_H();
- 80268ec: 2005 movs r0, #5
- 80268ee: 2101 movs r1, #1
- }
- 80268f0: e8bd 4008 ldmia.w sp!, {r3, lr}
- SPI_FLASH_CS_L();
- spi_tx_rx(CMD_RDSR);
- do {
- status = spi_tx_rx(0);
- } while (status & SR_WIP);
- SPI_FLASH_CS_H();
- 80268f4: f7ff bb1c b.w 8025f30 <gpio_set>
- 080268f8 <spi_flash_read>:
- *((uint8_t *)buf++) = spi_tx_rx(0);
- SPI_FLASH_CS_H();
- return 0;
- }
- ssize_t spi_flash_read(int addr, void *buf, size_t len, uint32_t timeout) {
- 80268f8: b570 push {r4, r5, r6, lr}
- 80268fa: 4605 mov r5, r0
- 80268fc: 460c mov r4, r1
- ssize_t ret = 0;
- // ret = tn_mutex_lock(&spi_mutex, timeout);
- // if (ret != TERR_NO_ERR)
- // return ret;
- SPI_FLASH_CS_L();
- 80268fe: 2005 movs r0, #5
- 8026900: 2100 movs r1, #0
- *((uint8_t *)buf++) = spi_tx_rx(0);
- SPI_FLASH_CS_H();
- return 0;
- }
- ssize_t spi_flash_read(int addr, void *buf, size_t len, uint32_t timeout) {
- 8026902: 4616 mov r6, r2
- ssize_t ret = 0;
- // ret = tn_mutex_lock(&spi_mutex, timeout);
- // if (ret != TERR_NO_ERR)
- // return ret;
- SPI_FLASH_CS_L();
- 8026904: f7ff fb14 bl 8025f30 <gpio_set>
- spi_tx_rx(CMD_READ);
- 8026908: 2003 movs r0, #3
- 802690a: f7ff ff8b bl 8026824 <spi_tx_rx>
- send_addr(addr);
- 802690e: 4628 mov r0, r5
- 8026910: f7ff ff9a bl 8026848 <send_addr>
- *((uint8_t *)buf++) = spi_tx_rx(0);
- SPI_FLASH_CS_H();
- return 0;
- }
- ssize_t spi_flash_read(int addr, void *buf, size_t len, uint32_t timeout) {
- 8026914: 19a6 adds r6, r4, r6
- // return ret;
- SPI_FLASH_CS_L();
- spi_tx_rx(CMD_READ);
- send_addr(addr);
- while (len--)
- 8026916: e004 b.n 8026922 <spi_flash_read+0x2a>
- *((uint8_t *)buf++) = spi_tx_rx(0);
- 8026918: 2000 movs r0, #0
- 802691a: f7ff ff83 bl 8026824 <spi_tx_rx>
- 802691e: f804 0b01 strb.w r0, [r4], #1
- // return ret;
- SPI_FLASH_CS_L();
- spi_tx_rx(CMD_READ);
- send_addr(addr);
- while (len--)
- 8026922: 42b4 cmp r4, r6
- 8026924: d1f8 bne.n 8026918 <spi_flash_read+0x20>
- *((uint8_t *)buf++) = spi_tx_rx(0);
- SPI_FLASH_CS_H();
- 8026926: 2005 movs r0, #5
- 8026928: 2101 movs r1, #1
- 802692a: f7ff fb01 bl 8025f30 <gpio_set>
- // tn_mutex_unlock(&spi_mutex);
- return len;
- }
- 802692e: f04f 30ff mov.w r0, #4294967295
- 8026932: bd70 pop {r4, r5, r6, pc}
- 08026934 <spi_flash_pp>:
- // ret = tn_mutex_lock(&spi_mutex, timeout);
- // if (ret != TERR_NO_ERR)
- // return ret;
- // don't allow page wrapping
- ssize_t ret = 0;
- if ((addr & 0xFF) + len > 0xFF)
- 8026934: b2c3 uxtb r3, r0
- return len;
- }
- #define TIMEOUT 10000
- uint16_t spi_flash_pp(int addr, const void *buf, size_t len, uint32_t timeout) {
- 8026936: b570 push {r4, r5, r6, lr}
- 8026938: 4615 mov r5, r2
- // ret = tn_mutex_lock(&spi_mutex, timeout);
- // if (ret != TERR_NO_ERR)
- // return ret;
- // don't allow page wrapping
- ssize_t ret = 0;
- if ((addr & 0xFF) + len > 0xFF)
- 802693a: 18d2 adds r2, r2, r3
- 802693c: 2aff cmp r2, #255 ; 0xff
- len = 0x100 - (addr & 0xFF);
- 802693e: bf88 it hi
- 8026940: f5c3 7580 rsbhi r5, r3, #256 ; 0x100
- return len;
- }
- #define TIMEOUT 10000
- uint16_t spi_flash_pp(int addr, const void *buf, size_t len, uint32_t timeout) {
- 8026944: 4604 mov r4, r0
- 8026946: 460e mov r6, r1
- ssize_t ret = 0;
- if ((addr & 0xFF) + len > 0xFF)
- len = 0x100 - (addr & 0xFF);
- ret = len;
- SPI_FLASH_CS_L();
- 8026948: 2005 movs r0, #5
- 802694a: 2100 movs r1, #0
- 802694c: f7ff faf0 bl 8025f30 <gpio_set>
- spi_tx_rx(CMD_WREN);
- 8026950: 2006 movs r0, #6
- 8026952: f7ff ff67 bl 8026824 <spi_tx_rx>
- SPI_FLASH_CS_H();
- 8026956: 2005 movs r0, #5
- 8026958: 2101 movs r1, #1
- 802695a: f7ff fae9 bl 8025f30 <gpio_set>
- wait_write_enable();
- 802695e: f7ff ffa2 bl 80268a6 <wait_write_enable>
- SPI_FLASH_CS_L();
- 8026962: 2100 movs r1, #0
- 8026964: 2005 movs r0, #5
- 8026966: f7ff fae3 bl 8025f30 <gpio_set>
- spi_tx_rx(CMD_PP);
- 802696a: 2002 movs r0, #2
- 802696c: f7ff ff5a bl 8026824 <spi_tx_rx>
- send_addr(addr);
- 8026970: 4620 mov r0, r4
- 8026972: f7ff ff69 bl 8026848 <send_addr>
- while (len--)
- 8026976: 2400 movs r4, #0
- 8026978: e003 b.n 8026982 <spi_flash_pp+0x4e>
- spi_tx_rx(*((uint8_t *)buf++));
- 802697a: 5d30 ldrb r0, [r6, r4]
- 802697c: f7ff ff52 bl 8026824 <spi_tx_rx>
- 8026980: 3401 adds r4, #1
- wait_write_enable();
- SPI_FLASH_CS_L();
- spi_tx_rx(CMD_PP);
- send_addr(addr);
- while (len--)
- 8026982: 42ac cmp r4, r5
- 8026984: d1f9 bne.n 802697a <spi_flash_pp+0x46>
- spi_tx_rx(*((uint8_t *)buf++));
- SPI_FLASH_CS_H();
- 8026986: 2005 movs r0, #5
- 8026988: 2101 movs r1, #1
- 802698a: f7ff fad1 bl 8025f30 <gpio_set>
- wait_write_end();
- 802698e: f7ff ffa0 bl 80268d2 <wait_write_end>
- // tn_mutex_unlock(&spi_mutex);
- return ret;
- }
- 8026992: b2a0 uxth r0, r4
- 8026994: bd70 pop {r4, r5, r6, pc}
- 08026996 <spi_flash_write>:
- ssize_t spi_flash_write(int addr, const void *buf, size_t len, uint32_t timeout) {
- 8026996: b5f8 push {r3, r4, r5, r6, r7, lr}
- 8026998: 4607 mov r7, r0
- 802699a: 460e mov r6, r1
- 802699c: 4615 mov r5, r2
- int ret = 0, offset = 0;
- 802699e: 2400 movs r4, #0
- do {
- ret = spi_flash_pp(addr + offset, buf + offset, len - offset, 0);
- 80269a0: 1938 adds r0, r7, r4
- 80269a2: 1931 adds r1, r6, r4
- 80269a4: 1b2a subs r2, r5, r4
- 80269a6: 2300 movs r3, #0
- 80269a8: f7ff ffc4 bl 8026934 <spi_flash_pp>
- offset += ret;
- 80269ac: 1824 adds r4, r4, r0
- } while (len - offset);
- 80269ae: 42a5 cmp r5, r4
- 80269b0: d1f6 bne.n 80269a0 <spi_flash_write+0xa>
- return 0;
- }
- 80269b2: 2000 movs r0, #0
- 80269b4: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 080269b6 <spi_flash_erase_sector>:
- wait_write_end();
- return 0;
- }
- int spi_flash_erase_sector(int addr, uint32_t timeout) {
- 80269b6: b510 push {r4, lr}
- int ret = 0;
- // ret = tn_mutex_lock(&spi_mutex, timeout);
- // if (ret != TERR_NO_ERR)
- // return ret;
- SPI_FLASH_CS_L();
- 80269b8: 2100 movs r1, #0
- wait_write_end();
- return 0;
- }
- int spi_flash_erase_sector(int addr, uint32_t timeout) {
- 80269ba: 4604 mov r4, r0
- int ret = 0;
- // ret = tn_mutex_lock(&spi_mutex, timeout);
- // if (ret != TERR_NO_ERR)
- // return ret;
- SPI_FLASH_CS_L();
- 80269bc: 2005 movs r0, #5
- 80269be: f7ff fab7 bl 8025f30 <gpio_set>
- spi_tx_rx(CMD_WREN);
- 80269c2: 2006 movs r0, #6
- 80269c4: f7ff ff2e bl 8026824 <spi_tx_rx>
- SPI_FLASH_CS_H();
- 80269c8: 2005 movs r0, #5
- 80269ca: 2101 movs r1, #1
- 80269cc: f7ff fab0 bl 8025f30 <gpio_set>
- wait_write_enable();
- 80269d0: f7ff ff69 bl 80268a6 <wait_write_enable>
- SPI_FLASH_CS_L();
- 80269d4: 2100 movs r1, #0
- 80269d6: 2005 movs r0, #5
- 80269d8: f7ff faaa bl 8025f30 <gpio_set>
- spi_tx_rx(CMD_SE);
- 80269dc: 2020 movs r0, #32
- 80269de: f7ff ff21 bl 8026824 <spi_tx_rx>
- send_addr(addr);
- 80269e2: 4620 mov r0, r4
- 80269e4: f7ff ff30 bl 8026848 <send_addr>
- SPI_FLASH_CS_H();
- 80269e8: 2005 movs r0, #5
- 80269ea: 2101 movs r1, #1
- 80269ec: f7ff faa0 bl 8025f30 <gpio_set>
- wait_write_end();
- 80269f0: f7ff ff6f bl 80268d2 <wait_write_end>
- // tn_mutex_unlock(&spi_mutex);
- return 0;
- }
- 80269f4: 2000 movs r0, #0
- 80269f6: bd10 pop {r4, pc}
- 080269f8 <spi_flash_init>:
- bool spi_flash_init(void) {
- 80269f8: b530 push {r4, r5, lr}
- uint32_t i, ptable, bitsize = 0;
- uint8_t tmp[4];
- spi_flash_desc.present = false;
- 80269fa: 4b48 ldr r3, [pc, #288] ; (8026b1c <spi_flash_init+0x124>)
- // tn_mutex_unlock(&spi_mutex);
- return 0;
- }
- bool spi_flash_init(void) {
- uint32_t i, ptable, bitsize = 0;
- 80269fc: 2400 movs r4, #0
- // tn_mutex_unlock(&spi_mutex);
- return 0;
- }
- bool spi_flash_init(void) {
- 80269fe: b085 sub sp, #20
- uint32_t i, ptable, bitsize = 0;
- uint8_t tmp[4];
- spi_flash_desc.present = false;
- 8026a00: 701c strb r4, [r3, #0]
- static void spi_init_(void) {
- // tn_mutex_create(&spi_mutex, TN_MUTEX_ATTR_INHERIT, 0);
- //tn_sem_create(&xact.ready, 0, 1);
- RCC->APB1ENR |= RCC_APB1ENR_SPI2EN;
- 8026a02: 4b47 ldr r3, [pc, #284] ; (8026b20 <spi_flash_init+0x128>)
- // tn_mutex_unlock(&spi_mutex);
- return 0;
- }
- bool spi_flash_init(void) {
- uint32_t i, ptable, bitsize = 0;
- 8026a04: 9402 str r4, [sp, #8]
- static void spi_init_(void) {
- // tn_mutex_create(&spi_mutex, TN_MUTEX_ATTR_INHERIT, 0);
- //tn_sem_create(&xact.ready, 0, 1);
- RCC->APB1ENR |= RCC_APB1ENR_SPI2EN;
- 8026a06: 6c1a ldr r2, [r3, #64] ; 0x40
- 8026a08: f442 4280 orr.w r2, r2, #16384 ; 0x4000
- 8026a0c: 641a str r2, [r3, #64] ; 0x40
- RCC->APB1RSTR |= RCC_APB1RSTR_SPI2RST;
- 8026a0e: 6a1a ldr r2, [r3, #32]
- 8026a10: f442 4200 orr.w r2, r2, #32768 ; 0x8000
- 8026a14: 621a str r2, [r3, #32]
- RCC->APB1RSTR &= ~RCC_APB1RSTR_SPI2RST;
- 8026a16: 6a1a ldr r2, [r3, #32]
- 8026a18: f422 4200 bic.w r2, r2, #32768 ; 0x8000
- 8026a1c: 621a str r2, [r3, #32]
- SPI2->CR1 &= ~SPI_CR1_SPE;
- 8026a1e: f5a3 3300 sub.w r3, r3, #131072 ; 0x20000
- spi_flash_desc.present = false;
- spi_init_();
- // check SFDP magic
- spi_flash_read_sfdp(0, tmp, 4);
- 8026a22: ad03 add r5, sp, #12
- RCC->APB1ENR |= RCC_APB1ENR_SPI2EN;
- RCC->APB1RSTR |= RCC_APB1RSTR_SPI2RST;
- RCC->APB1RSTR &= ~RCC_APB1RSTR_SPI2RST;
- SPI2->CR1 &= ~SPI_CR1_SPE;
- 8026a24: 881a ldrh r2, [r3, #0]
- 8026a26: f022 0240 bic.w r2, r2, #64 ; 0x40
- 8026a2a: 0412 lsls r2, r2, #16
- 8026a2c: 0c12 lsrs r2, r2, #16
- 8026a2e: 801a strh r2, [r3, #0]
- //SPI2->CR1 = SPI_CR1_MSTR | SPI_CR1_BR_1 | SPI_CR1_SSM | SPI_CR1_SSI;
- SPI2->CR1 = SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI;
- 8026a30: f44f 7241 mov.w r2, #772 ; 0x304
- 8026a34: 801a strh r2, [r3, #0]
- SPI2->CR2 = 0;//SPI_CR2_SSOE;
- 8026a36: 809c strh r4, [r3, #4]
- SPI2->CR1 |= SPI_CR1_SPE;
- 8026a38: 881a ldrh r2, [r3, #0]
- 8026a3a: b292 uxth r2, r2
- 8026a3c: f042 0240 orr.w r2, r2, #64 ; 0x40
- 8026a40: 801a strh r2, [r3, #0]
- spi_flash_desc.present = false;
- spi_init_();
- // check SFDP magic
- spi_flash_read_sfdp(0, tmp, 4);
- 8026a42: 4620 mov r0, r4
- 8026a44: 2204 movs r2, #4
- 8026a46: 4629 mov r1, r5
- 8026a48: f7ff ff0d bl 8026866 <spi_flash_read_sfdp>
- if (!(tmp[0] == 0x53 && tmp[1] == 0x46 &&
- 8026a4c: f89d 300c ldrb.w r3, [sp, #12]
- 8026a50: 2b53 cmp r3, #83 ; 0x53
- 8026a52: d001 beq.n 8026a58 <spi_flash_init+0x60>
- tmp[2] == 0x44 && tmp[3] == 0x50))
- return 0;
- 8026a54: 2000 movs r0, #0
- 8026a56: e05e b.n 8026b16 <spi_flash_init+0x11e>
- spi_init_();
- // check SFDP magic
- spi_flash_read_sfdp(0, tmp, 4);
- if (!(tmp[0] == 0x53 && tmp[1] == 0x46 &&
- 8026a58: f89d 300d ldrb.w r3, [sp, #13]
- 8026a5c: 2b46 cmp r3, #70 ; 0x46
- 8026a5e: d1f9 bne.n 8026a54 <spi_flash_init+0x5c>
- 8026a60: f89d 300e ldrb.w r3, [sp, #14]
- 8026a64: 2b44 cmp r3, #68 ; 0x44
- 8026a66: d1f5 bne.n 8026a54 <spi_flash_init+0x5c>
- 8026a68: f89d 300f ldrb.w r3, [sp, #15]
- 8026a6c: 2b50 cmp r3, #80 ; 0x50
- 8026a6e: d1f1 bne.n 8026a54 <spi_flash_init+0x5c>
- tmp[2] == 0x44 && tmp[3] == 0x50))
- return 0;
- // get parameter headers count
- spi_flash_read_sfdp(0x06, tmp, 1);
- 8026a70: 2006 movs r0, #6
- 8026a72: 4629 mov r1, r5
- 8026a74: 2201 movs r2, #1
- 8026a76: f7ff fef6 bl 8026866 <spi_flash_read_sfdp>
- // find first jedec pheader (with ID == 0)
- for (ptable = 0x08, i = 0; i <= tmp[0]; i++, ptable += 8) {
- 8026a7a: 2308 movs r3, #8
- 8026a7c: e01a b.n 8026ab4 <spi_flash_init+0xbc>
- spi_flash_read_sfdp(ptable, tmp, 1);
- 8026a7e: 9801 ldr r0, [sp, #4]
- 8026a80: 4629 mov r1, r5
- 8026a82: 2201 movs r2, #1
- 8026a84: f7ff feef bl 8026866 <spi_flash_read_sfdp>
- if (tmp[0] == 0)
- 8026a88: f89d 300c ldrb.w r3, [sp, #12]
- 8026a8c: b97b cbnz r3, 8026aae <spi_flash_init+0xb6>
- break;
- }
- // read ptable pointer from pheader
- spi_flash_read_sfdp(ptable + 4, &ptable, 3);
- 8026a8e: a904 add r1, sp, #16
- 8026a90: 2203 movs r2, #3
- 8026a92: f851 0d0c ldr.w r0, [r1, #-12]!
- 8026a96: 3004 adds r0, #4
- 8026a98: f7ff fee5 bl 8026866 <spi_flash_read_sfdp>
- // get flash density (size in bits)
- if (spi_flash_read_sfdp(ptable + 4, &bitsize, 4) < 0 || !bitsize)
- 8026a9c: 9801 ldr r0, [sp, #4]
- 8026a9e: 2204 movs r2, #4
- 8026aa0: 3004 adds r0, #4
- 8026aa2: a902 add r1, sp, #8
- 8026aa4: f7ff fedf bl 8026866 <spi_flash_read_sfdp>
- 8026aa8: 2800 cmp r0, #0
- 8026aaa: da09 bge.n 8026ac0 <spi_flash_init+0xc8>
- 8026aac: e7d2 b.n 8026a54 <spi_flash_init+0x5c>
- // get parameter headers count
- spi_flash_read_sfdp(0x06, tmp, 1);
- // find first jedec pheader (with ID == 0)
- for (ptable = 0x08, i = 0; i <= tmp[0]; i++, ptable += 8) {
- 8026aae: 9b01 ldr r3, [sp, #4]
- 8026ab0: 3401 adds r4, #1
- 8026ab2: 3308 adds r3, #8
- 8026ab4: 9301 str r3, [sp, #4]
- 8026ab6: f89d 300c ldrb.w r3, [sp, #12]
- 8026aba: 429c cmp r4, r3
- 8026abc: d9df bls.n 8026a7e <spi_flash_init+0x86>
- 8026abe: e7e6 b.n 8026a8e <spi_flash_init+0x96>
- // read ptable pointer from pheader
- spi_flash_read_sfdp(ptable + 4, &ptable, 3);
- // get flash density (size in bits)
- if (spi_flash_read_sfdp(ptable + 4, &bitsize, 4) < 0 || !bitsize)
- 8026ac0: 9b02 ldr r3, [sp, #8]
- 8026ac2: 2b00 cmp r3, #0
- 8026ac4: d0c6 beq.n 8026a54 <spi_flash_init+0x5c>
- 8026ac6: 2400 movs r4, #0
- return 0;
- // find smallest available sector
- for (i = 0; i < 4; i++) {
- tmp[0] = 0;
- 8026ac8: 4625 mov r5, r4
- if (spi_flash_read_sfdp(ptable + 0x1C + i*2, &tmp, 2) >= 0 &&
- 8026aca: 9801 ldr r0, [sp, #4]
- if (spi_flash_read_sfdp(ptable + 4, &bitsize, 4) < 0 || !bitsize)
- return 0;
- // find smallest available sector
- for (i = 0; i < 4; i++) {
- tmp[0] = 0;
- 8026acc: f88d 500c strb.w r5, [sp, #12]
- if (spi_flash_read_sfdp(ptable + 0x1C + i*2, &tmp, 2) >= 0 &&
- 8026ad0: 301c adds r0, #28
- 8026ad2: 2202 movs r2, #2
- 8026ad4: 1900 adds r0, r0, r4
- 8026ad6: a903 add r1, sp, #12
- 8026ad8: f7ff fec5 bl 8026866 <spi_flash_read_sfdp>
- 8026adc: 2800 cmp r0, #0
- 8026ade: db11 blt.n 8026b04 <spi_flash_init+0x10c>
- tmp[0]) {
- 8026ae0: f89d 200c ldrb.w r2, [sp, #12]
- return 0;
- // find smallest available sector
- for (i = 0; i < 4; i++) {
- tmp[0] = 0;
- if (spi_flash_read_sfdp(ptable + 0x1C + i*2, &tmp, 2) >= 0 &&
- 8026ae4: b172 cbz r2, 8026b04 <spi_flash_init+0x10c>
- tmp[0]) {
- spi_flash_desc.sector_size = 1 << tmp[0];
- 8026ae6: 4b0d ldr r3, [pc, #52] ; (8026b1c <spi_flash_init+0x124>)
- 8026ae8: 2101 movs r1, #1
- 8026aea: fa01 f102 lsl.w r1, r1, r2
- 8026aee: 6059 str r1, [r3, #4]
- spi_flash_desc.sector_erase_op = tmp[1];
- 8026af0: f89d 100d ldrb.w r1, [sp, #13]
- 8026af4: 7219 strb r1, [r3, #8]
- spi_flash_desc.sector_count = (bitsize + 1) >> (3 + tmp[0]);
- 8026af6: 9902 ldr r1, [sp, #8]
- 8026af8: 3203 adds r2, #3
- 8026afa: 3101 adds r1, #1
- 8026afc: fa21 f202 lsr.w r2, r1, r2
- 8026b00: 815a strh r2, [r3, #10]
- break;
- 8026b02: e002 b.n 8026b0a <spi_flash_init+0x112>
- 8026b04: 3402 adds r4, #2
- // get flash density (size in bits)
- if (spi_flash_read_sfdp(ptable + 4, &bitsize, 4) < 0 || !bitsize)
- return 0;
- // find smallest available sector
- for (i = 0; i < 4; i++) {
- 8026b06: 2c08 cmp r4, #8
- 8026b08: d1df bne.n 8026aca <spi_flash_init+0xd2>
- spi_flash_desc.sector_erase_op = tmp[1];
- spi_flash_desc.sector_count = (bitsize + 1) >> (3 + tmp[0]);
- break;
- }
- }
- if (!spi_flash_desc.sector_size)
- 8026b0a: 4b04 ldr r3, [pc, #16] ; (8026b1c <spi_flash_init+0x124>)
- 8026b0c: 685a ldr r2, [r3, #4]
- 8026b0e: 2a00 cmp r2, #0
- 8026b10: d0a0 beq.n 8026a54 <spi_flash_init+0x5c>
- return 0;
- spi_flash_desc.present = true;
- 8026b12: 2001 movs r0, #1
- 8026b14: 7018 strb r0, [r3, #0]
- return 1;
- }
- 8026b16: b005 add sp, #20
- 8026b18: bd30 pop {r4, r5, pc}
- 8026b1a: bf00 nop
- 8026b1c: 2000c840 .word 0x2000c840
- 8026b20: 40023800 .word 0x40023800
- 08026b24 <GetSTM32IDStr>:
- #include <string.h>
- void GetSTM32IDStr(char* str, uint8_t* len)
- {
- 8026b24: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8026b28: b08a sub sp, #40 ; 0x28
- uint8_t i;
- char TempStr[33];
- memset(TempStr, 0, 33);
- 8026b2a: ac01 add r4, sp, #4
- #include <string.h>
- void GetSTM32IDStr(char* str, uint8_t* len)
- {
- 8026b2c: 4607 mov r7, r0
- 8026b2e: 460e mov r6, r1
- uint8_t i;
- char TempStr[33];
- memset(TempStr, 0, 33);
- 8026b30: 4620 mov r0, r4
- 8026b32: 2100 movs r1, #0
- 8026b34: 2221 movs r2, #33 ; 0x21
- 8026b36: f7fa ffe3 bl 8021b00 <memset>
- 8026b3a: 4d0e ldr r5, [pc, #56] ; (8026b74 <GetSTM32IDStr+0x50>)
- for(i = 0; i < 12; i++)
- 8026b3c: f8df 803c ldr.w r8, [pc, #60] ; 8026b7c <GetSTM32IDStr+0x58>
- {
- sprintf(TempStr, "%02X", STM32_UUID[i]);
- 8026b40: f815 2f01 ldrb.w r2, [r5, #1]!
- 8026b44: 490c ldr r1, [pc, #48] ; (8026b78 <GetSTM32IDStr+0x54>)
- 8026b46: 4620 mov r0, r4
- 8026b48: f000 fe64 bl 8027814 <tfp_sprintf>
- *len = strlen(TempStr);
- 8026b4c: 4620 mov r0, r4
- 8026b4e: f7fb f9af bl 8021eb0 <strlen>
- 8026b52: 4602 mov r2, r0
- 8026b54: 7030 strb r0, [r6, #0]
- strncat(str, TempStr, *len);
- 8026b56: 4621 mov r1, r4
- 8026b58: 4638 mov r0, r7
- 8026b5a: b2d2 uxtb r2, r2
- 8026b5c: f7fb f9d8 bl 8021f10 <strncat>
- {
- uint8_t i;
- char TempStr[33];
- memset(TempStr, 0, 33);
- for(i = 0; i < 12; i++)
- 8026b60: 4545 cmp r5, r8
- 8026b62: d1ed bne.n 8026b40 <GetSTM32IDStr+0x1c>
- {
- sprintf(TempStr, "%02X", STM32_UUID[i]);
- *len = strlen(TempStr);
- strncat(str, TempStr, *len);
- }
- *len = strlen(str);
- 8026b64: 4638 mov r0, r7
- 8026b66: f7fb f9a3 bl 8021eb0 <strlen>
- 8026b6a: 7030 strb r0, [r6, #0]
- }
- 8026b6c: b00a add sp, #40 ; 0x28
- 8026b6e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 8026b72: bf00 nop
- 8026b74: 1fff7a0f .word 0x1fff7a0f
- 8026b78: 08039858 .word 0x08039858
- 8026b7c: 1fff7a1b .word 0x1fff7a1b
- 08026b80 <NVIC_EncodePriority.constprop.0>:
- \param [in] SubPriority Subpriority value (starting from 0).
- \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority().
- */
- __STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
- {
- uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */
- 8026b80: f000 0007 and.w r0, r0, #7
- uint32_t PreemptPriorityBits;
- uint32_t SubPriorityBits;
- PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;
- 8026b84: f1c0 0307 rsb r3, r0, #7
- SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS;
- 8026b88: 1d02 adds r2, r0, #4
- {
- uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */
- uint32_t PreemptPriorityBits;
- uint32_t SubPriorityBits;
- PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;
- 8026b8a: 2b04 cmp r3, #4
- 8026b8c: bf28 it cs
- 8026b8e: 2304 movcs r3, #4
- SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS;
- 8026b90: 2a06 cmp r2, #6
- 8026b92: d901 bls.n 8026b98 <NVIC_EncodePriority.constprop.0+0x18>
- 8026b94: 3803 subs r0, #3
- 8026b96: e000 b.n 8026b9a <NVIC_EncodePriority.constprop.0+0x1a>
- 8026b98: 2000 movs r0, #0
- return (
- ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) |
- 8026b9a: 2201 movs r2, #1
- 8026b9c: fa02 f303 lsl.w r3, r2, r3
- 8026ba0: 3b01 subs r3, #1
- 8026ba2: f003 0305 and.w r3, r3, #5
- ((SubPriority & ((1 << (SubPriorityBits )) - 1)))
- );
- }
- 8026ba6: fa03 f000 lsl.w r0, r3, r0
- 8026baa: 4770 bx lr
- 08026bac <uart_hw_init>:
- uint32_t ups_tx_fifo[UPS_RBUF_SIZE];
- SemaphoreHandle_t xSem_rx_buf;
- USART_InitTypeDef USART_InitStructure;
- void uart_hw_init(USART_TypeDef *uart, uint32_t baud, uint16_t wordlen, uint16_t parity, uint16_t stop) {
- 8026bac: b570 push {r4, r5, r6, lr}
- if (wordlen == 8)
- wordlen_tmp = USART_WordLength_8b;
- if (wordlen == 9)
- wordlen_tmp = USART_WordLength_9b;
- USART_InitStructure.USART_BaudRate = baud;
- 8026bae: 4d34 ldr r5, [pc, #208] ; (8026c80 <uart_hw_init+0xd4>)
- uint32_t ups_tx_fifo[UPS_RBUF_SIZE];
- SemaphoreHandle_t xSem_rx_buf;
- USART_InitTypeDef USART_InitStructure;
- void uart_hw_init(USART_TypeDef *uart, uint32_t baud, uint16_t wordlen, uint16_t parity, uint16_t stop) {
- 8026bb0: f8bd 6010 ldrh.w r6, [sp, #16]
- wordlen_tmp = USART_WordLength_9b;
- USART_InitStructure.USART_BaudRate = baud;
- USART_InitStructure.USART_WordLength = wordlen_tmp;
- USART_InitStructure.USART_StopBits = stop;
- USART_InitStructure.USART_Parity = parity;
- 8026bb4: 812b strh r3, [r5, #8]
- void uart_hw_init(USART_TypeDef *uart, uint32_t baud, uint16_t wordlen, uint16_t parity, uint16_t stop) {
- uint16_t wordlen_tmp;
- if (wordlen == 8)
- wordlen_tmp = USART_WordLength_8b;
- if (wordlen == 9)
- 8026bb6: 2a09 cmp r2, #9
- 8026bb8: bf0c ite eq
- 8026bba: f44f 5280 moveq.w r2, #4096 ; 0x1000
- 8026bbe: 2200 movne r2, #0
- USART_InitStructure.USART_BaudRate = baud;
- USART_InitStructure.USART_WordLength = wordlen_tmp;
- USART_InitStructure.USART_StopBits = stop;
- USART_InitStructure.USART_Parity = parity;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- 8026bc0: 230c movs r3, #12
- if (wordlen == 9)
- wordlen_tmp = USART_WordLength_9b;
- USART_InitStructure.USART_BaudRate = baud;
- USART_InitStructure.USART_WordLength = wordlen_tmp;
- USART_InitStructure.USART_StopBits = stop;
- 8026bc2: 80ee strh r6, [r5, #6]
- USART_InitStructure.USART_Parity = parity;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- 8026bc4: 2600 movs r6, #0
- uint32_t ups_tx_fifo[UPS_RBUF_SIZE];
- SemaphoreHandle_t xSem_rx_buf;
- USART_InitTypeDef USART_InitStructure;
- void uart_hw_init(USART_TypeDef *uart, uint32_t baud, uint16_t wordlen, uint16_t parity, uint16_t stop) {
- 8026bc6: 4604 mov r4, r0
- USART_InitStructure.USART_BaudRate = baud;
- USART_InitStructure.USART_WordLength = wordlen_tmp;
- USART_InitStructure.USART_StopBits = stop;
- USART_InitStructure.USART_Parity = parity;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- 8026bc8: 816b strh r3, [r5, #10]
- if (wordlen == 8)
- wordlen_tmp = USART_WordLength_8b;
- if (wordlen == 9)
- wordlen_tmp = USART_WordLength_9b;
- USART_InitStructure.USART_BaudRate = baud;
- 8026bca: 6029 str r1, [r5, #0]
- USART_InitStructure.USART_WordLength = wordlen_tmp;
- 8026bcc: 80aa strh r2, [r5, #4]
- USART_InitStructure.USART_StopBits = stop;
- USART_InitStructure.USART_Parity = parity;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- 8026bce: 81ae strh r6, [r5, #12]
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_DeInit(uart);
- 8026bd0: f7fe ffde bl 8025b90 <USART_DeInit>
- if (uart == USART1) {
- 8026bd4: 4b2b ldr r3, [pc, #172] ; (8026c84 <uart_hw_init+0xd8>)
- 8026bd6: 429c cmp r4, r3
- 8026bd8: d111 bne.n 8026bfe <uart_hw_init+0x52>
- RCC->APB2ENR |= RCC_APB2Periph_USART1;
- 8026bda: f503 3394 add.w r3, r3, #75776 ; 0x12800
- 8026bde: 6c5a ldr r2, [r3, #68] ; 0x44
- 8026be0: f042 0210 orr.w r2, r2, #16
- 8026be4: 645a str r2, [r3, #68] ; 0x44
- \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).
- */
- __STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void)
- {
- return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */
- 8026be6: 4b28 ldr r3, [pc, #160] ; (8026c88 <uart_hw_init+0xdc>)
- 8026be8: 68d8 ldr r0, [r3, #12]
- NVIC_SetPriority(USART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0x05, 0));
- 8026bea: f3c0 2002 ubfx r0, r0, #8, #3
- 8026bee: f7ff ffc7 bl 8026b80 <NVIC_EncodePriority.constprop.0>
- __STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
- {
- if(IRQn < 0) {
- SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */
- else {
- NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */
- 8026bf2: 4b26 ldr r3, [pc, #152] ; (8026c8c <uart_hw_init+0xe0>)
- 8026bf4: 0100 lsls r0, r0, #4
- 8026bf6: f883 0325 strb.w r0, [r3, #805] ; 0x325
- \param [in] IRQn External interrupt number. Value cannot be negative.
- */
- __STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
- {
- /* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */
- NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */
- 8026bfa: 2220 movs r2, #32
- 8026bfc: e028 b.n 8026c50 <uart_hw_init+0xa4>
- USART_Cmd(USART1, ENABLE);
- USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
- USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
- }
- if (uart == USART2) {
- 8026bfe: 4b24 ldr r3, [pc, #144] ; (8026c90 <uart_hw_init+0xe4>)
- 8026c00: 429c cmp r4, r3
- 8026c02: d111 bne.n 8026c28 <uart_hw_init+0x7c>
- RCC->APB1ENR |= RCC_APB1Periph_USART2;
- 8026c04: f503 33fa add.w r3, r3, #128000 ; 0x1f400
- 8026c08: 6c1a ldr r2, [r3, #64] ; 0x40
- 8026c0a: f442 3200 orr.w r2, r2, #131072 ; 0x20000
- 8026c0e: 641a str r2, [r3, #64] ; 0x40
- \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).
- */
- __STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void)
- {
- return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */
- 8026c10: 4b1d ldr r3, [pc, #116] ; (8026c88 <uart_hw_init+0xdc>)
- 8026c12: 68d8 ldr r0, [r3, #12]
- NVIC_SetPriority(USART2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0x05, 0));
- 8026c14: f3c0 2002 ubfx r0, r0, #8, #3
- 8026c18: f7ff ffb2 bl 8026b80 <NVIC_EncodePriority.constprop.0>
- __STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
- {
- if(IRQn < 0) {
- SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */
- else {
- NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */
- 8026c1c: 4b1b ldr r3, [pc, #108] ; (8026c8c <uart_hw_init+0xe0>)
- 8026c1e: 0100 lsls r0, r0, #4
- 8026c20: f883 0326 strb.w r0, [r3, #806] ; 0x326
- \param [in] IRQn External interrupt number. Value cannot be negative.
- */
- __STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
- {
- /* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */
- NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */
- 8026c24: 2240 movs r2, #64 ; 0x40
- 8026c26: e013 b.n 8026c50 <uart_hw_init+0xa4>
- USART_Cmd(USART2, ENABLE);
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
- USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
- }
- if (uart == USART3) {
- 8026c28: 4b1a ldr r3, [pc, #104] ; (8026c94 <uart_hw_init+0xe8>)
- 8026c2a: 429c cmp r4, r3
- 8026c2c: d127 bne.n 8026c7e <uart_hw_init+0xd2>
- RCC->APB1ENR |= RCC_APB1Periph_USART3;
- 8026c2e: f503 33f8 add.w r3, r3, #126976 ; 0x1f000
- 8026c32: 6c1a ldr r2, [r3, #64] ; 0x40
- 8026c34: f442 2280 orr.w r2, r2, #262144 ; 0x40000
- 8026c38: 641a str r2, [r3, #64] ; 0x40
- \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).
- */
- __STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void)
- {
- return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */
- 8026c3a: 4b13 ldr r3, [pc, #76] ; (8026c88 <uart_hw_init+0xdc>)
- 8026c3c: 68d8 ldr r0, [r3, #12]
- NVIC_SetPriority(USART3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0x05, 0));
- 8026c3e: f3c0 2002 ubfx r0, r0, #8, #3
- 8026c42: f7ff ff9d bl 8026b80 <NVIC_EncodePriority.constprop.0>
- __STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
- {
- if(IRQn < 0) {
- SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */
- else {
- NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */
- 8026c46: 4b11 ldr r3, [pc, #68] ; (8026c8c <uart_hw_init+0xe0>)
- 8026c48: 0100 lsls r0, r0, #4
- 8026c4a: f883 0327 strb.w r0, [r3, #807] ; 0x327
- \param [in] IRQn External interrupt number. Value cannot be negative.
- */
- __STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
- {
- /* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */
- NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */
- 8026c4e: 2280 movs r2, #128 ; 0x80
- 8026c50: 605a str r2, [r3, #4]
- NVIC_EnableIRQ(USART3_IRQn);
- USART_Init(USART3, &USART_InitStructure);
- 8026c52: 4620 mov r0, r4
- 8026c54: 4629 mov r1, r5
- 8026c56: f7fe ffef bl 8025c38 <USART_Init>
- USART_Cmd(USART3, ENABLE);
- 8026c5a: 4620 mov r0, r4
- 8026c5c: 2101 movs r1, #1
- 8026c5e: f7ff f845 bl 8025cec <USART_Cmd>
- USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
- 8026c62: 4620 mov r0, r4
- 8026c64: 2201 movs r2, #1
- 8026c66: f240 5125 movw r1, #1317 ; 0x525
- 8026c6a: f7ff f84b bl 8025d04 <USART_ITConfig>
- USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
- 8026c6e: 4620 mov r0, r4
- 8026c70: f240 7127 movw r1, #1831 ; 0x727
- 8026c74: 4632 mov r2, r6
- }
- }
- 8026c76: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- NVIC_SetPriority(USART3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0x05, 0));
- NVIC_EnableIRQ(USART3_IRQn);
- USART_Init(USART3, &USART_InitStructure);
- USART_Cmd(USART3, ENABLE);
- USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
- USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
- 8026c7a: f7ff b843 b.w 8025d04 <USART_ITConfig>
- 8026c7e: bd70 pop {r4, r5, r6, pc}
- 8026c80: 2000cb8c .word 0x2000cb8c
- 8026c84: 40011000 .word 0x40011000
- 8026c88: e000ed00 .word 0xe000ed00
- 8026c8c: e000e100 .word 0xe000e100
- 8026c90: 40004400 .word 0x40004400
- 8026c94: 40004800 .word 0x40004800
- 08026c98 <InitUSART>:
- }
- }
- void InitUSART(void) {
- 8026c98: b507 push {r0, r1, r2, lr}
- xSem_rx_buf = xSemaphoreCreateCounting( UPS_RBUF_SIZE, 0 );
- 8026c9a: 2100 movs r1, #0
- 8026c9c: 2064 movs r0, #100 ; 0x64
- 8026c9e: f003 fc4c bl 802a53a <xQueueCreateCountingSemaphore>
- 8026ca2: 4b0a ldr r3, [pc, #40] ; (8026ccc <InitUSART+0x34>)
- rbuf32_init(&ups_tx_rbuf, ups_tx_fifo, UPS_RBUF_SIZE);
- 8026ca4: 490a ldr r1, [pc, #40] ; (8026cd0 <InitUSART+0x38>)
- USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
- }
- }
- void InitUSART(void) {
- xSem_rx_buf = xSemaphoreCreateCounting( UPS_RBUF_SIZE, 0 );
- 8026ca6: 6018 str r0, [r3, #0]
- rbuf32_init(&ups_tx_rbuf, ups_tx_fifo, UPS_RBUF_SIZE);
- 8026ca8: 2264 movs r2, #100 ; 0x64
- 8026caa: 480a ldr r0, [pc, #40] ; (8026cd4 <InitUSART+0x3c>)
- 8026cac: f002 fa48 bl 8029140 <rbuf32_init>
- rbuf32_init(&ups_rx_rbuf, ups_rx_fifo, UPS_RBUF_SIZE);
- 8026cb0: 2264 movs r2, #100 ; 0x64
- 8026cb2: 4809 ldr r0, [pc, #36] ; (8026cd8 <InitUSART+0x40>)
- 8026cb4: 4909 ldr r1, [pc, #36] ; (8026cdc <InitUSART+0x44>)
- 8026cb6: f002 fa43 bl 8029140 <rbuf32_init>
- uart_hw_init(UPS_USART, UPS_USART_BAUD, UPS_USART_WORD_LEN, UPS_USART_PARITY, UPS_USART_STOP_BIT);
- 8026cba: 2300 movs r3, #0
- 8026cbc: 9300 str r3, [sp, #0]
- 8026cbe: 4808 ldr r0, [pc, #32] ; (8026ce0 <InitUSART+0x48>)
- 8026cc0: f44f 6116 mov.w r1, #2400 ; 0x960
- 8026cc4: 2208 movs r2, #8
- 8026cc6: f7ff ff71 bl 8026bac <uart_hw_init>
- }
- 8026cca: bd0e pop {r1, r2, r3, pc}
- 8026ccc: 2000cb9c .word 0x2000cb9c
- 8026cd0: 2000c85c .word 0x2000c85c
- 8026cd4: 2000cb7c .word 0x2000cb7c
- 8026cd8: 2000c84c .word 0x2000c84c
- 8026cdc: 2000c9ec .word 0x2000c9ec
- 8026ce0: 40004400 .word 0x40004400
- 08026ce4 <ups_send_block>:
- }
- int ups_send_block(void *data, uint8_t len) {
- int i = 0;
- uint32_t s_temp = 0;
- UPS_USART->CR1 &= ~USART_CR1_TXEIE;
- 8026ce4: 4a0f ldr r2, [pc, #60] ; (8026d24 <ups_send_block+0x40>)
- 8026ce6: 8993 ldrh r3, [r2, #12]
- 8026ce8: f023 0380 bic.w r3, r3, #128 ; 0x80
- 8026cec: 041b lsls r3, r3, #16
- 8026cee: 0c1b lsrs r3, r3, #16
- rbuf32_put(&ups_tx_rbuf, (uint32_t)(byte));
- }
- UPS_USART->CR1 |= USART_CR1_TXEIE;
- }
- int ups_send_block(void *data, uint8_t len) {
- 8026cf0: b570 push {r4, r5, r6, lr}
- 8026cf2: 4606 mov r6, r0
- 8026cf4: 460d mov r5, r1
- int i = 0;
- uint32_t s_temp = 0;
- UPS_USART->CR1 &= ~USART_CR1_TXEIE;
- 8026cf6: 8193 strh r3, [r2, #12]
- }
- UPS_USART->CR1 |= USART_CR1_TXEIE;
- }
- int ups_send_block(void *data, uint8_t len) {
- int i = 0;
- 8026cf8: 2400 movs r4, #0
- uint32_t s_temp = 0;
- UPS_USART->CR1 &= ~USART_CR1_TXEIE;
- //DBG printf("STOP \r\n");
- while (i < len) {
- 8026cfa: e008 b.n 8026d0e <ups_send_block+0x2a>
- if (!rbuf_isfull(&ups_tx_rbuf)) {
- 8026cfc: 480a ldr r0, [pc, #40] ; (8026d28 <ups_send_block+0x44>)
- 8026cfe: f002 fa25 bl 802914c <rbuf_isfull>
- 8026d02: b930 cbnz r0, 8026d12 <ups_send_block+0x2e>
- s_temp = ((uint8_t *)data)[i++];
- 8026d04: 5d31 ldrb r1, [r6, r4]
- rbuf32_put(&ups_tx_rbuf, s_temp);
- 8026d06: 4808 ldr r0, [pc, #32] ; (8026d28 <ups_send_block+0x44>)
- uint32_t s_temp = 0;
- UPS_USART->CR1 &= ~USART_CR1_TXEIE;
- //DBG printf("STOP \r\n");
- while (i < len) {
- if (!rbuf_isfull(&ups_tx_rbuf)) {
- s_temp = ((uint8_t *)data)[i++];
- 8026d08: 3401 adds r4, #1
- rbuf32_put(&ups_tx_rbuf, s_temp);
- 8026d0a: f002 fa40 bl 802918e <rbuf32_put>
- int ups_send_block(void *data, uint8_t len) {
- int i = 0;
- uint32_t s_temp = 0;
- UPS_USART->CR1 &= ~USART_CR1_TXEIE;
- //DBG printf("STOP \r\n");
- while (i < len) {
- 8026d0e: 42ac cmp r4, r5
- 8026d10: dbf4 blt.n 8026cfc <ups_send_block+0x18>
- rbuf32_put(&ups_tx_rbuf, s_temp);
- }
- else
- break;
- }
- UPS_USART->CR1 |= USART_CR1_TXEIE;
- 8026d12: 4b04 ldr r3, [pc, #16] ; (8026d24 <ups_send_block+0x40>)
- 8026d14: 899a ldrh r2, [r3, #12]
- 8026d16: b292 uxth r2, r2
- 8026d18: f042 0280 orr.w r2, r2, #128 ; 0x80
- 8026d1c: 819a strh r2, [r3, #12]
- return i;
- }
- 8026d1e: 4620 mov r0, r4
- 8026d20: bd70 pop {r4, r5, r6, pc}
- 8026d22: bf00 nop
- 8026d24: 40004400 .word 0x40004400
- 8026d28: 2000cb7c .word 0x2000cb7c
- 08026d2c <ups_getchar>:
- int ups_getchar(unsigned int timeout) {
- int res;
- res = xSemaphoreTake( xSem_rx_buf, (TickType_t)timeout );
- 8026d2c: 4b09 ldr r3, [pc, #36] ; (8026d54 <ups_getchar+0x28>)
- }
- UPS_USART->CR1 |= USART_CR1_TXEIE;
- return i;
- }
- int ups_getchar(unsigned int timeout) {
- 8026d2e: b507 push {r0, r1, r2, lr}
- int res;
- res = xSemaphoreTake( xSem_rx_buf, (TickType_t)timeout );
- 8026d30: 2100 movs r1, #0
- }
- UPS_USART->CR1 |= USART_CR1_TXEIE;
- return i;
- }
- int ups_getchar(unsigned int timeout) {
- 8026d32: 4602 mov r2, r0
- int res;
- res = xSemaphoreTake( xSem_rx_buf, (TickType_t)timeout );
- 8026d34: 6818 ldr r0, [r3, #0]
- 8026d36: 460b mov r3, r1
- 8026d38: f003 fd55 bl 802a7e6 <xQueueGenericReceive>
- 8026d3c: 9001 str r0, [sp, #4]
- if (res == pdFALSE) {
- 8026d3e: b128 cbz r0, 8026d4c <ups_getchar+0x20>
- return -1;
- }
- rbuf32_get(&ups_rx_rbuf, &res);
- 8026d40: 4805 ldr r0, [pc, #20] ; (8026d58 <ups_getchar+0x2c>)
- 8026d42: a901 add r1, sp, #4
- 8026d44: f002 fa0e bl 8029164 <rbuf32_get>
- // DBG printf("STOP \r\n");
- // DBG printf("wr: %d 0x%x\r\n", rs485_rx_rbuf.read_index,res);
- return res;
- 8026d48: 9801 ldr r0, [sp, #4]
- 8026d4a: e001 b.n 8026d50 <ups_getchar+0x24>
- int ups_getchar(unsigned int timeout) {
- int res;
- res = xSemaphoreTake( xSem_rx_buf, (TickType_t)timeout );
- if (res == pdFALSE) {
- return -1;
- 8026d4c: f04f 30ff mov.w r0, #4294967295
- }
- rbuf32_get(&ups_rx_rbuf, &res);
- // DBG printf("STOP \r\n");
- // DBG printf("wr: %d 0x%x\r\n", rs485_rx_rbuf.read_index,res);
- return res;
- }
- 8026d50: bd0e pop {r1, r2, r3, pc}
- 8026d52: bf00 nop
- 8026d54: 2000cb9c .word 0x2000cb9c
- 8026d58: 2000c84c .word 0x2000c84c
- 08026d5c <USART1_IRQHandler>:
- portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
- }
- }
- void USART1_IRQHandler(void) {
- 8026d5c: 4770 bx lr
- 8026d5e: 0000 movs r0, r0
- 08026d60 <USART2_IRQHandler>:
- }
- void USART2_IRQHandler(void) {
- 8026d60: b513 push {r0, r1, r4, lr}
- inline void rs232_irq_handler(void)
- {
- uint32_t c = 0;
- 8026d62: 2300 movs r3, #0
- 8026d64: 9301 str r3, [sp, #4]
- static BaseType_t xHigherPriorityTaskWoken = pdFALSE;
- if ((UPS_USART->SR & USART_SR_ORE)) {
- 8026d66: 4b26 ldr r3, [pc, #152] ; (8026e00 <USART2_IRQHandler+0xa0>)
- 8026d68: 881a ldrh r2, [r3, #0]
- 8026d6a: f002 0208 and.w r2, r2, #8
- 8026d6e: b292 uxth r2, r2
- 8026d70: b112 cbz r2, 8026d78 <USART2_IRQHandler+0x18>
- c = (uint32_t)UPS_USART->DR;
- 8026d72: 889b ldrh r3, [r3, #4]
- 8026d74: b29b uxth r3, r3
- 8026d76: 9301 str r3, [sp, #4]
- //DBG printf("overrunRS485\r\n");
- }
- if (USART_GetITStatus(UPS_USART, USART_IT_TXE) != RESET) {
- 8026d78: 4c21 ldr r4, [pc, #132] ; (8026e00 <USART2_IRQHandler+0xa0>)
- 8026d7a: f240 7127 movw r1, #1831 ; 0x727
- 8026d7e: 4620 mov r0, r4
- 8026d80: f7fe ffd9 bl 8025d36 <USART_GetITStatus>
- 8026d84: b1c0 cbz r0, 8026db8 <USART2_IRQHandler+0x58>
- if(rbuf32_get(&ups_tx_rbuf, &c)) {
- 8026d86: 481f ldr r0, [pc, #124] ; (8026e04 <USART2_IRQHandler+0xa4>)
- 8026d88: a901 add r1, sp, #4
- 8026d8a: f002 f9eb bl 8029164 <rbuf32_get>
- 8026d8e: b118 cbz r0, 8026d98 <USART2_IRQHandler+0x38>
- UPS_USART->DR = (uint16_t)c;
- 8026d90: f8bd 3004 ldrh.w r3, [sp, #4]
- 8026d94: 80a3 strh r3, [r4, #4]
- 8026d96: e00a b.n 8026dae <USART2_IRQHandler+0x4e>
- //DBG printf("wr: %d 0x%x\r\n", rs485_tx_rbuf.read_index,c);
- }
- else {
- UPS_USART->CR1 &= ~USART_CR1_TXEIE;
- 8026d98: 89a3 ldrh r3, [r4, #12]
- 8026d9a: f023 0380 bic.w r3, r3, #128 ; 0x80
- 8026d9e: 041b lsls r3, r3, #16
- 8026da0: 0c1b lsrs r3, r3, #16
- 8026da2: 81a3 strh r3, [r4, #12]
- UPS_USART->CR1 |= USART_CR1_RXNEIE;
- 8026da4: 89a3 ldrh r3, [r4, #12]
- 8026da6: b29b uxth r3, r3
- 8026da8: f043 0320 orr.w r3, r3, #32
- 8026dac: 81a3 strh r3, [r4, #12]
- }
- USART_ClearITPendingBit(UPS_USART, USART_IT_TXE);
- 8026dae: 4814 ldr r0, [pc, #80] ; (8026e00 <USART2_IRQHandler+0xa0>)
- 8026db0: f240 7127 movw r1, #1831 ; 0x727
- 8026db4: f7fe ffdf bl 8025d76 <USART_ClearITPendingBit>
- }
- if(USART_GetITStatus(UPS_USART, USART_IT_RXNE) != RESET)
- 8026db8: 4c11 ldr r4, [pc, #68] ; (8026e00 <USART2_IRQHandler+0xa0>)
- 8026dba: f240 5125 movw r1, #1317 ; 0x525
- 8026dbe: 4620 mov r0, r4
- 8026dc0: f7fe ffb9 bl 8025d36 <USART_GetITStatus>
- 8026dc4: b1d8 cbz r0, 8026dfe <USART2_IRQHandler+0x9e>
- {
- c = (uint32_t)UPS_USART->DR;
- 8026dc6: 88a3 ldrh r3, [r4, #4]
- //DBG printf("read: %d 0x%x\r\n", rs485_rx_rbuf.write_index,c);
- if (!rbuf_isfull(&ups_rx_rbuf))
- 8026dc8: 480f ldr r0, [pc, #60] ; (8026e08 <USART2_IRQHandler+0xa8>)
- }
- USART_ClearITPendingBit(UPS_USART, USART_IT_TXE);
- }
- if(USART_GetITStatus(UPS_USART, USART_IT_RXNE) != RESET)
- {
- c = (uint32_t)UPS_USART->DR;
- 8026dca: b29b uxth r3, r3
- 8026dcc: 9301 str r3, [sp, #4]
- //DBG printf("read: %d 0x%x\r\n", rs485_rx_rbuf.write_index,c);
- if (!rbuf_isfull(&ups_rx_rbuf))
- 8026dce: f002 f9bd bl 802914c <rbuf_isfull>
- 8026dd2: b918 cbnz r0, 8026ddc <USART2_IRQHandler+0x7c>
- rbuf32_put(&ups_rx_rbuf, c);
- 8026dd4: 480c ldr r0, [pc, #48] ; (8026e08 <USART2_IRQHandler+0xa8>)
- 8026dd6: 9901 ldr r1, [sp, #4]
- 8026dd8: f002 f9d9 bl 802918e <rbuf32_put>
- USART_ClearITPendingBit(UPS_USART, USART_IT_RXNE);
- 8026ddc: 4808 ldr r0, [pc, #32] ; (8026e00 <USART2_IRQHandler+0xa0>)
- xSemaphoreGiveFromISR(xSem_rx_buf, &xHigherPriorityTaskWoken);
- 8026dde: 4c0b ldr r4, [pc, #44] ; (8026e0c <USART2_IRQHandler+0xac>)
- {
- c = (uint32_t)UPS_USART->DR;
- //DBG printf("read: %d 0x%x\r\n", rs485_rx_rbuf.write_index,c);
- if (!rbuf_isfull(&ups_rx_rbuf))
- rbuf32_put(&ups_rx_rbuf, c);
- USART_ClearITPendingBit(UPS_USART, USART_IT_RXNE);
- 8026de0: f240 5125 movw r1, #1317 ; 0x525
- 8026de4: f7fe ffc7 bl 8025d76 <USART_ClearITPendingBit>
- xSemaphoreGiveFromISR(xSem_rx_buf, &xHigherPriorityTaskWoken);
- 8026de8: 4b09 ldr r3, [pc, #36] ; (8026e10 <USART2_IRQHandler+0xb0>)
- 8026dea: 4621 mov r1, r4
- 8026dec: 6818 ldr r0, [r3, #0]
- 8026dee: f003 fcc8 bl 802a782 <xQueueGiveFromISR>
- portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
- 8026df2: 6823 ldr r3, [r4, #0]
- 8026df4: b11b cbz r3, 8026dfe <USART2_IRQHandler+0x9e>
- 8026df6: 4b07 ldr r3, [pc, #28] ; (8026e14 <USART2_IRQHandler+0xb4>)
- 8026df8: f04f 5280 mov.w r2, #268435456 ; 0x10000000
- 8026dfc: 601a str r2, [r3, #0]
- }
- void USART2_IRQHandler(void) {
- rs232_irq_handler();
- }
- 8026dfe: bd1c pop {r2, r3, r4, pc}
- 8026e00: 40004400 .word 0x40004400
- 8026e04: 2000cb7c .word 0x2000cb7c
- 8026e08: 2000c84c .word 0x2000c84c
- 8026e0c: 20000b08 .word 0x20000b08
- 8026e10: 2000cb9c .word 0x2000cb9c
- 8026e14: e000ed04 .word 0xe000ed04
- 08026e18 <USART3_IRQHandler>:
- void USART3_IRQHandler(void) {
- 8026e18: 4770 bx lr
- 8026e1a: 0000 movs r0, r0
- 08026e1c <InitTask>:
- /**
- * @brief Задача инициализации. Запускает основные задачи девайса и умирает.
- * @retval
- */
- void InitTask(void *params)
- {
- 8026e1c: b51f push {r0, r1, r2, r3, r4, lr}
- // -----------------------------------------------------------------------------
- #ifdef LED_ENABLE
- LED_Init();
- /* Простая мигалка для подтверждения живучести контроллера */
- xTaskCreate(vTaskLedBlink, "LED_Blink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);//&xTaskToKill
- 8026e1e: 2400 movs r4, #0
- void InitTask(void *params)
- {
- // -----------------------------------------------------------------------------
- // xTaskCreate(vTaskWdt, "WDT", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- // -----------------------------------------------------------------------------
- InitUSART();
- 8026e20: f7ff ff3a bl 8026c98 <InitUSART>
- ups_megatec_init();
- 8026e24: f002 f954 bl 80290d0 <ups_megatec_init>
- // -----------------------------------------------------------------------------
- // RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);
- /* SETTINGS_SetDefaultDebug();
- SETTINGS_Save();*/
- SETTINGS_Load();
- 8026e28: f001 fd84 bl 8028934 <SETTINGS_Load>
- set_mode_jumper();
- 8026e2c: f001 feaa bl 8028b84 <set_mode_jumper>
- #endif
- // -----------------------------------------------------------------------------
- // -----------------------------------------------------------------------------
- #ifdef LED_ENABLE
- LED_Init();
- 8026e30: f001 fe04 bl 8028a3c <LED_Init>
- /* Простая мигалка для подтверждения живучести контроллера */
- xTaskCreate(vTaskLedBlink, "LED_Blink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);//&xTaskToKill
- 8026e34: 2280 movs r2, #128 ; 0x80
- 8026e36: 4623 mov r3, r4
- 8026e38: 4934 ldr r1, [pc, #208] ; (8026f0c <InitTask+0xf0>)
- 8026e3a: 9400 str r4, [sp, #0]
- 8026e3c: 9401 str r4, [sp, #4]
- 8026e3e: 9402 str r4, [sp, #8]
- 8026e40: 9403 str r4, [sp, #12]
- 8026e42: 4833 ldr r0, [pc, #204] ; (8026f10 <InitTask+0xf4>)
- 8026e44: f003 fe28 bl 802aa98 <xTaskGenericCreate>
- #endif
- // -----------------------------------------------------------------------------
-
- // -----------------------------------------------------------------------------
- #ifdef BUTTON_ENABLE
- BUTTON_Init();
- 8026e48: f001 fe54 bl 8028af4 <BUTTON_Init>
- xTaskCreate(vTaskButtons, "Buttons", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- 8026e4c: 2280 movs r2, #128 ; 0x80
- 8026e4e: 4623 mov r3, r4
- 8026e50: 4930 ldr r1, [pc, #192] ; (8026f14 <InitTask+0xf8>)
- 8026e52: 9400 str r4, [sp, #0]
- 8026e54: 9401 str r4, [sp, #4]
- 8026e56: 9402 str r4, [sp, #8]
- 8026e58: 9403 str r4, [sp, #12]
- 8026e5a: 482f ldr r0, [pc, #188] ; (8026f18 <InitTask+0xfc>)
- 8026e5c: f003 fe1c bl 802aa98 <xTaskGenericCreate>
- //xTaskCreate( d_inouts_task, "inouts_task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- // xTaskCreate( d_inouts_test, "d_inouts_test", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- // -----------------------------------------------------------------------------
- #ifdef RTC_ENABLE
- TM_RTC_Init(TM_RTC_ClockSource_External); // Так было
- 8026e60: 2001 movs r0, #1
- 8026e62: f7ff fb41 bl 80264e8 <TM_RTC_Init>
- // TM_RTC_Init(TM_RTC_ClockSource_Internal); // TODO Уточнить источинк тактирования
- #endif
- // -----------------------------------------------------------------------------
-
- /* UDP for net settings */
- UDP_netsetting_init();
- 8026e66: f011 fef5 bl 8038c54 <UDP_netsetting_init>
- // -----------------------------------------------------------------------------
- #ifdef UPS_ENABLE
- /* UPS_Init();
- xTaskCreate(UPS_TaskParsing, "UPS_Parsing", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- xTaskCreate(UPS_TaskState, "UPS_State", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);*/
- xTaskCreate(UPS_Monitor, "UPS_Monitor", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- 8026e6a: 2280 movs r2, #128 ; 0x80
- 8026e6c: 4623 mov r3, r4
- 8026e6e: 492b ldr r1, [pc, #172] ; (8026f1c <InitTask+0x100>)
- 8026e70: 9400 str r4, [sp, #0]
- 8026e72: 9401 str r4, [sp, #4]
- 8026e74: 9402 str r4, [sp, #8]
- 8026e76: 9403 str r4, [sp, #12]
- 8026e78: 4829 ldr r0, [pc, #164] ; (8026f20 <InitTask+0x104>)
- 8026e7a: f003 fe0d bl 802aa98 <xTaskGenericCreate>
- #endif
- // -----------------------------------------------------------------------------
- /* Random number generator */
- RNG_Init();
- 8026e7e: f7ff f91b bl 80260b8 <RNG_Init>
- // -----------------------------------------------------------------------------
- #ifdef NET_ENABLE
- ETH_BSP_Config();
- 8026e82: f011 fef9 bl 8038c78 <ETH_BSP_Config>
- LwIP_Init();
- 8026e86: f010 ff1d bl 8037cc4 <LwIP_Init>
-
- #ifdef WEB_SERVER_ENABLE
- HTTP_Init();
- 8026e8a: f004 ffcd bl 802be28 <HTTP_Init>
- #endif
-
- #ifdef SNMP_ENABLE
- SNMP_Init();
- 8026e8e: f011 fa7b bl 8038388 <SNMP_Init>
-
- xTaskCreate(SNMP_SysUpTimeTask, "snmpSysUpTime", configMINIMAL_STACK_SIZE,
- 8026e92: 2280 movs r2, #128 ; 0x80
- 8026e94: 4623 mov r3, r4
- 8026e96: 9400 str r4, [sp, #0]
- 8026e98: 9401 str r4, [sp, #4]
- 8026e9a: 9402 str r4, [sp, #8]
- 8026e9c: 9403 str r4, [sp, #12]
- 8026e9e: 4921 ldr r1, [pc, #132] ; (8026f24 <InitTask+0x108>)
- 8026ea0: 4821 ldr r0, [pc, #132] ; (8026f28 <InitTask+0x10c>)
- 8026ea2: f003 fdf9 bl 802aa98 <xTaskGenericCreate>
- NULL, tskIDLE_PRIORITY, NULL);
-
- xTaskCreate(snmp_trap_tread, "snmpTrapTest", 3*configMINIMAL_STACK_SIZE,
- 8026ea6: 4623 mov r3, r4
- 8026ea8: 4920 ldr r1, [pc, #128] ; (8026f2c <InitTask+0x110>)
- 8026eaa: 9400 str r4, [sp, #0]
- 8026eac: f44f 72c0 mov.w r2, #384 ; 0x180
- 8026eb0: 9401 str r4, [sp, #4]
- 8026eb2: 9402 str r4, [sp, #8]
- 8026eb4: 9403 str r4, [sp, #12]
- 8026eb6: 481e ldr r0, [pc, #120] ; (8026f30 <InitTask+0x114>)
- 8026eb8: f003 fdee bl 802aa98 <xTaskGenericCreate>
- #endif
-
- #endif
- // -----------------------------------------------------------------------------
- /* SNTP */
- SNTP_Init();
- 8026ebc: f011 fb02 bl 80384c4 <SNTP_Init>
- xTaskCreate(vTaskOnceSynchro, "sntpOnceSinhro", 2*configMINIMAL_STACK_SIZE,
- 8026ec0: 4b1c ldr r3, [pc, #112] ; (8026f34 <InitTask+0x118>)
- 8026ec2: 9400 str r4, [sp, #0]
- 8026ec4: 9301 str r3, [sp, #4]
- 8026ec6: 9402 str r4, [sp, #8]
- 8026ec8: 4623 mov r3, r4
- 8026eca: 9403 str r4, [sp, #12]
- 8026ecc: 491a ldr r1, [pc, #104] ; (8026f38 <InitTask+0x11c>)
- 8026ece: 481b ldr r0, [pc, #108] ; (8026f3c <InitTask+0x120>)
- 8026ed0: f44f 7280 mov.w r2, #256 ; 0x100
- 8026ed4: f003 fde0 bl 802aa98 <xTaskGenericCreate>
- NULL, tskIDLE_PRIORITY, &xHandleSntpOnceSinhro);
- xTaskCreate(vTaskPeriodicSynchro, "sntpPeriodicSinhro", 2*configMINIMAL_STACK_SIZE,
- 8026ed8: 4919 ldr r1, [pc, #100] ; (8026f40 <InitTask+0x124>)
- 8026eda: 9400 str r4, [sp, #0]
- 8026edc: f44f 7280 mov.w r2, #256 ; 0x100
- 8026ee0: 4623 mov r3, r4
- 8026ee2: 9401 str r4, [sp, #4]
- 8026ee4: 9402 str r4, [sp, #8]
- 8026ee6: 9403 str r4, [sp, #12]
- 8026ee8: 4816 ldr r0, [pc, #88] ; (8026f44 <InitTask+0x128>)
- 8026eea: f003 fdd5 bl 802aa98 <xTaskGenericCreate>
- //TEST_IO();
-
- /* Контроль успешной загрузки. Сброс флага bootry */
- /* Сброс флага и сохранение нового значения во флеш памяти происходт после
- некоторой задержки для запуска всех задач */
- vTaskDelay(4000);
- 8026eee: f44f 607a mov.w r0, #4000 ; 0xfa0
- 8026ef2: f004 f86b bl 802afcc <vTaskDelay>
-
- SETTINGS_ResetBootTry();
- 8026ef6: f001 fd51 bl 802899c <SETTINGS_ResetBootTry>
- /* if (!dhcp)
- SNMP_SendUserTrap(DEVICE_REBOOTED);
-
- printf("Hello world\r\n");*/
-
- vTaskDelete(NULL);
- 8026efa: 4620 mov r0, r4
- 8026efc: f003 fea4 bl 802ac48 <vTaskDelete>
- taskYIELD();
- }
- 8026f00: b004 add sp, #16
- 8026f02: e8bd 4010 ldmia.w sp!, {r4, lr}
- SNMP_SendUserTrap(DEVICE_REBOOTED);
-
- printf("Hello world\r\n");*/
-
- vTaskDelete(NULL);
- taskYIELD();
- 8026f06: f004 bc63 b.w 802b7d0 <vPortYield>
- 8026f0a: bf00 nop
- 8026f0c: 0803985d .word 0x0803985d
- 8026f10: 08028a61 .word 0x08028a61
- 8026f14: 08039867 .word 0x08039867
- 8026f18: 08028b71 .word 0x08028b71
- 8026f1c: 0803986f .word 0x0803986f
- 8026f20: 0802983d .word 0x0802983d
- 8026f24: 0803987b .word 0x0803987b
- 8026f28: 08038121 .word 0x08038121
- 8026f2c: 08039889 .word 0x08039889
- 8026f30: 08038281 .word 0x08038281
- 8026f34: 20000b0c .word 0x20000b0c
- 8026f38: 08039896 .word 0x08039896
- 8026f3c: 08038591 .word 0x08038591
- 8026f40: 080398a5 .word 0x080398a5
- 8026f44: 08038549 .word 0x08038549
- 08026f48 <main>:
- void vApplicationTickHook(void) {
- }
-
- int main()
- {
- 8026f48: b51f push {r0, r1, r2, r3, r4, lr}
- This function disables IRQ interrupts by setting the I-bit in the CPSR.
- Can only be executed in Privileged modes.
- */
- __attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)
- {
- __ASM volatile ("cpsid i" : : : "memory");
- 8026f4a: b672 cpsid i
- //TIM_Cmd(TIM13, DISABLE);
- //TIM_ClearITPendingBit(TIM13, TIM_IT_Update);
-
- __disable_irq();
- NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x20000);
- 8026f4c: f04f 6000 mov.w r0, #134217728 ; 0x8000000
- 8026f50: f44f 3100 mov.w r1, #131072 ; 0x20000
- 8026f54: f7fe f9d8 bl 8025308 <NVIC_SetVectorTable>
- __STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
- {
- uint32_t reg_value;
- uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */
- reg_value = SCB->AIRCR; /* read old register configuration */
- 8026f58: 4a18 ldr r2, [pc, #96] ; (8026fbc <main+0x74>)
- 8026f5a: 68d1 ldr r1, [r2, #12]
- reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */
- 8026f5c: f64f 03ff movw r3, #63743 ; 0xf8ff
- 8026f60: 400b ands r3, r1
- reg_value = (reg_value |
- 8026f62: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000
- 8026f66: f443 3300 orr.w r3, r3, #131072 ; 0x20000
- ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) |
- (PriorityGroupTmp << 8)); /* Insert write key and priorty group */
- SCB->AIRCR = reg_value;
- 8026f6a: 60d3 str r3, [r2, #12]
- NVIC_SetPriorityGrouping(0);
- NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
- 8026f6c: f44f 7040 mov.w r0, #768 ; 0x300
- 8026f70: f7fe f98c bl 802528c <NVIC_PriorityGroupConfig>
- This function enables IRQ interrupts by clearing the I-bit in the CPSR.
- Can only be executed in Privileged modes.
- */
- __attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)
- {
- __ASM volatile ("cpsie i" : : : "memory");
- 8026f74: b662 cpsie i
- __enable_irq();
- //WDG_Init();
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);
- 8026f76: 2101 movs r1, #1
- 8026f78: f44f 5080 mov.w r0, #4096 ; 0x1000
- 8026f7c: f7fe fbe6 bl 802574c <RCC_AHB1PeriphClockCmd>
- /* Clear flash error flags if were set */
- FLASH_ClearFlag(FLASH_FLAG_PGPERR);
- 8026f80: 2040 movs r0, #64 ; 0x40
- 8026f82: f7fe f9f7 bl 8025374 <FLASH_ClearFlag>
- FLASH_ClearFlag(FLASH_FLAG_PGSERR);
- 8026f86: 2080 movs r0, #128 ; 0x80
- log_init(false);
- //log_test();
- //spi_flash_test();
- // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
-
- xTaskCreate( InitTask, "InitTask", 1000, NULL, tskIDLE_PRIORITY, NULL);
- 8026f88: 2400 movs r4, #0
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);
- /* Clear flash error flags if were set */
- FLASH_ClearFlag(FLASH_FLAG_PGPERR);
- FLASH_ClearFlag(FLASH_FLAG_PGSERR);
- 8026f8a: f7fe f9f3 bl 8025374 <FLASH_ClearFlag>
- gpio_init();
- 8026f8e: f7ff f82f bl 8025ff0 <gpio_init>
- spi_flash_init();
- 8026f92: f7ff fd31 bl 80269f8 <spi_flash_init>
- log_init(false);
- 8026f96: 2000 movs r0, #0
- 8026f98: f002 fc98 bl 80298cc <log_init>
- //log_test();
- //spi_flash_test();
- // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
-
- xTaskCreate( InitTask, "InitTask", 1000, NULL, tskIDLE_PRIORITY, NULL);
- 8026f9c: 4908 ldr r1, [pc, #32] ; (8026fc0 <main+0x78>)
- 8026f9e: 9400 str r4, [sp, #0]
- 8026fa0: f44f 727a mov.w r2, #1000 ; 0x3e8
- 8026fa4: 4623 mov r3, r4
- 8026fa6: 9401 str r4, [sp, #4]
- 8026fa8: 9402 str r4, [sp, #8]
- 8026faa: 9403 str r4, [sp, #12]
- 8026fac: 4805 ldr r0, [pc, #20] ; (8026fc4 <main+0x7c>)
- 8026fae: f003 fd73 bl 802aa98 <xTaskGenericCreate>
-
- vTaskStartScheduler();
- 8026fb2: f003 fea3 bl 802acfc <vTaskStartScheduler>
- /*while(1)
- {
- }*/
- }
- 8026fb6: 4620 mov r0, r4
- 8026fb8: b004 add sp, #16
- 8026fba: bd10 pop {r4, pc}
- 8026fbc: e000ed00 .word 0xe000ed00
- 8026fc0: 080398b8 .word 0x080398b8
- 8026fc4: 08026e1d .word 0x08026e1d
- 08026fc8 <NMI_Handler>:
- * @brief This function handles NMI exception.
- * @param None
- * @retval None
- */
- void NMI_Handler(void)
- {
- 8026fc8: 4770 bx lr
- 8026fca: 0000 movs r0, r0
- 08026fcc <HardFault_Output>:
- }
- void HardFault_Output(uint32_t *sp)
- {
- 8026fcc: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- uint32_t r0 = sp[0];
- uint32_t r1 = sp[1];
- 8026fd0: e890 0808 ldmia.w r0, {r3, fp}
- uint32_t r2 = sp[2];
- 8026fd4: f8d0 a008 ldr.w sl, [r0, #8]
- uint32_t r3 = sp[3];
- 8026fd8: f8d0 900c ldr.w r9, [r0, #12]
- uint32_t r12 = sp[4];
- 8026fdc: f8d0 8010 ldr.w r8, [r0, #16]
- uint32_t lr = sp[5];
- 8026fe0: 6947 ldr r7, [r0, #20]
- uint32_t pc = sp[6];
- 8026fe2: 6986 ldr r6, [r0, #24]
- uint32_t psr = sp[7];
- 8026fe4: 69c5 ldr r5, [r0, #28]
- printf("HardFault:\n\r");
- 8026fe6: 9301 str r3, [sp, #4]
- void NMI_Handler(void)
- {
- }
- void HardFault_Output(uint32_t *sp)
- {
- 8026fe8: 4604 mov r4, r0
- uint32_t r12 = sp[4];
- uint32_t lr = sp[5];
- uint32_t pc = sp[6];
- uint32_t psr = sp[7];
- printf("HardFault:\n\r");
- 8026fea: 4816 ldr r0, [pc, #88] ; (8027044 <HardFault_Output+0x78>)
- 8026fec: f000 fbc6 bl 802777c <tfp_printf>
- /* Print CFSR register */
- /* Print CPU registers */
- printf("\n\rRegisters:\n\r");
- 8026ff0: 4815 ldr r0, [pc, #84] ; (8027048 <HardFault_Output+0x7c>)
- 8026ff2: f000 fbc3 bl 802777c <tfp_printf>
- printf("SP 0x%08lx\n\r", (uint32_t)sp);
- 8026ff6: 4815 ldr r0, [pc, #84] ; (802704c <HardFault_Output+0x80>)
- 8026ff8: 4621 mov r1, r4
- 8026ffa: f000 fbbf bl 802777c <tfp_printf>
- printf("R0 0x%08lx\n\r", r0);
- 8026ffe: 9b01 ldr r3, [sp, #4]
- 8027000: 4813 ldr r0, [pc, #76] ; (8027050 <HardFault_Output+0x84>)
- 8027002: 4619 mov r1, r3
- 8027004: f000 fbba bl 802777c <tfp_printf>
- printf("R1 0x%08lx\n\r", r1);
- 8027008: 4812 ldr r0, [pc, #72] ; (8027054 <HardFault_Output+0x88>)
- 802700a: 4659 mov r1, fp
- 802700c: f000 fbb6 bl 802777c <tfp_printf>
- printf("R2 0x%08lx\n\r", r2);
- 8027010: 4811 ldr r0, [pc, #68] ; (8027058 <HardFault_Output+0x8c>)
- 8027012: 4651 mov r1, sl
- 8027014: f000 fbb2 bl 802777c <tfp_printf>
- printf("R3 0x%08lx\n\r", r3);
- 8027018: 4810 ldr r0, [pc, #64] ; (802705c <HardFault_Output+0x90>)
- 802701a: 4649 mov r1, r9
- 802701c: f000 fbae bl 802777c <tfp_printf>
- printf("R12 0x%08lx\n\r", r12);
- 8027020: 480f ldr r0, [pc, #60] ; (8027060 <HardFault_Output+0x94>)
- 8027022: 4641 mov r1, r8
- 8027024: f000 fbaa bl 802777c <tfp_printf>
- printf("LR 0x%08lx\n\r", lr);
- 8027028: 480e ldr r0, [pc, #56] ; (8027064 <HardFault_Output+0x98>)
- 802702a: 4639 mov r1, r7
- 802702c: f000 fba6 bl 802777c <tfp_printf>
- printf("PC 0x%08lx\n\r", pc);
- 8027030: 480d ldr r0, [pc, #52] ; (8027068 <HardFault_Output+0x9c>)
- 8027032: 4631 mov r1, r6
- 8027034: f000 fba2 bl 802777c <tfp_printf>
- printf("PSR 0x%08lx\n\r", psr);
- 8027038: 480c ldr r0, [pc, #48] ; (802706c <HardFault_Output+0xa0>)
- 802703a: 4629 mov r1, r5
- 802703c: f000 fb9e bl 802777c <tfp_printf>
- 8027040: e7fe b.n 8027040 <HardFault_Output+0x74>
- 8027042: bf00 nop
- 8027044: 080398c1 .word 0x080398c1
- 8027048: 080398ce .word 0x080398ce
- 802704c: 080398dd .word 0x080398dd
- 8027050: 080398f3 .word 0x080398f3
- 8027054: 08039909 .word 0x08039909
- 8027058: 0803991f .word 0x0803991f
- 802705c: 08039935 .word 0x08039935
- 8027060: 0803994b .word 0x0803994b
- 8027064: 08039961 .word 0x08039961
- 8027068: 08039977 .word 0x08039977
- 802706c: 0803998d .word 0x0803998d
- 08027070 <HardFault_Handler>:
- * @retval None
- */
- __attribute__( (naked) )
- void HardFault_Handler(void)
- {
- __asm volatile
- 8027070: f01e 0f04 tst.w lr, #4
- 8027074: bf0c ite eq
- 8027076: f3ef 8008 mrseq r0, MSP
- 802707a: f3ef 8009 mrsne r0, PSP
- 802707e: f8df 1004 ldr.w r1, [pc, #4] ; 8027084 <debugHardfault_address>
- 8027082: 4708 bx r1
- 08027084 <debugHardfault_address>:
- 8027084: 08026fcd .word 0x08026fcd
- 08027088 <MemManage_Handler>:
- * @brief This function handles Memory Manage exception.
- * @param None
- * @retval None
- */
- void MemManage_Handler(void)
- {
- 8027088: e7fe b.n 8027088 <MemManage_Handler>
- 802708a: 0000 movs r0, r0
- 0802708c <TIM8_UP_TIM13_IRQHandler>:
- }
- }
- void TIM8_UP_TIM13_IRQHandler(void)
- {
- TIM_ClearITPendingBit(TIM13, TIM_IT_Update);
- 802708c: 4801 ldr r0, [pc, #4] ; (8027094 <TIM8_UP_TIM13_IRQHandler+0x8>)
- 802708e: 2101 movs r1, #1
- 8027090: f7fe bd7a b.w 8025b88 <TIM_ClearITPendingBit>
- 8027094: 40001c00 .word 0x40001c00
- 08027098 <BusFault_Handler>:
- * @brief This function handles Bus Fault exception.
- * @param None
- * @retval None
- */
- void BusFault_Handler(void)
- {
- 8027098: e7fe b.n 8027098 <BusFault_Handler>
- 0802709a <UsageFault_Handler>:
- * @brief This function handles Usage Fault exception.
- * @param None
- * @retval None
- */
- void UsageFault_Handler(void)
- {
- 802709a: e7fe b.n 802709a <UsageFault_Handler>
- 0802709c <DebugMon_Handler>:
- * @brief This function handles Debug Monitor exception.
- * @param None
- * @retval None
- */
- void DebugMon_Handler(void)
- {
- 802709c: 4770 bx lr
- 0802709e <SDIO_IRQHandler>:
- /*void PPP_IRQHandler(void)
- {
- }*/
- void SDIO_IRQHandler(void)
- {
- 802709e: 4770 bx lr
- 080270a0 <ETH_IRQHandler>:
- * @brief This function handles ethernet DMA interrupt request.
- * @param None
- * @retval None
- */
- void ETH_IRQHandler(void)
- {
- 80270a0: b507 push {r0, r1, r2, lr}
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- 80270a2: 2300 movs r3, #0
- /* Frame received */
- if ( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET)
- 80270a4: 2040 movs r0, #64 ; 0x40
- * @param None
- * @retval None
- */
- void ETH_IRQHandler(void)
- {
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- 80270a6: 9301 str r3, [sp, #4]
- /* Frame received */
- if ( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET)
- 80270a8: f012 f884 bl 80391b4 <ETH_GetDMAFlagStatus>
- 80270ac: 2801 cmp r0, #1
- 80270ae: d104 bne.n 80270ba <ETH_IRQHandler+0x1a>
- {
- /* Give the semaphore to wakeup LwIP task */
- xSemaphoreGiveFromISR( s_xSemaphore, &xHigherPriorityTaskWoken );
- 80270b0: 4b09 ldr r3, [pc, #36] ; (80270d8 <ETH_IRQHandler+0x38>)
- 80270b2: a901 add r1, sp, #4
- 80270b4: 6818 ldr r0, [r3, #0]
- 80270b6: f003 fb64 bl 802a782 <xQueueGiveFromISR>
- }
- /* Clear the interrupt flags. */
- /* Clear the Eth DMA Rx IT pending bits */
- ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
- 80270ba: 2040 movs r0, #64 ; 0x40
- 80270bc: f012 f890 bl 80391e0 <ETH_DMAClearITPendingBit>
- ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
- 80270c0: f44f 3080 mov.w r0, #65536 ; 0x10000
- 80270c4: f012 f88c bl 80391e0 <ETH_DMAClearITPendingBit>
- // Switch tasks if necessary. */
- if( xHigherPriorityTaskWoken != pdFALSE )
- 80270c8: 9b01 ldr r3, [sp, #4]
- 80270ca: b11b cbz r3, 80270d4 <ETH_IRQHandler+0x34>
- {
- portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
- 80270cc: 4b03 ldr r3, [pc, #12] ; (80270dc <ETH_IRQHandler+0x3c>)
- 80270ce: f04f 5280 mov.w r2, #268435456 ; 0x10000000
- 80270d2: 601a str r2, [r3, #0]
- }
- }
- 80270d4: bd0e pop {r1, r2, r3, pc}
- 80270d6: bf00 nop
- 80270d8: 2000c7cc .word 0x2000c7cc
- 80270dc: e000ed04 .word 0xe000ed04
- 080270e0 <ulli2a>:
- #ifdef PRINTF_LONG_LONG_SUPPORT
- static void _TFP_GCC_NO_INLINE_ ulli2a(
- unsigned long long int num, struct param *p)
- {
- 80270e0: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- int n = 0;
- unsigned long long int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- 80270e4: 68d3 ldr r3, [r2, #12]
- static void _TFP_GCC_NO_INLINE_ ulli2a(
- unsigned long long int num, struct param *p)
- {
- int n = 0;
- unsigned long long int d = 1;
- char *bf = p->bf;
- 80270e6: f8d2 b010 ldr.w fp, [r2, #16]
- #ifdef PRINTF_LONG_LONG_SUPPORT
- static void _TFP_GCC_NO_INLINE_ ulli2a(
- unsigned long long int num, struct param *p)
- {
- 80270ea: 4681 mov r9, r0
- 80270ec: 468a mov sl, r1
- 80270ee: 4690 mov r8, r2
- int n = 0;
- unsigned long long int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- 80270f0: 461e mov r6, r3
- 80270f2: 2700 movs r7, #0
- #ifdef PRINTF_LONG_LONG_SUPPORT
- static void _TFP_GCC_NO_INLINE_ ulli2a(
- unsigned long long int num, struct param *p)
- {
- int n = 0;
- unsigned long long int d = 1;
- 80270f4: 2401 movs r4, #1
- 80270f6: 2500 movs r5, #0
- char *bf = p->bf;
- while (num / d >= p->base)
- 80270f8: e006 b.n 8027108 <ulli2a+0x28>
- d *= p->base;
- 80270fa: fb04 f307 mul.w r3, r4, r7
- 80270fe: fb06 3305 mla r3, r6, r5, r3
- 8027102: fba4 4506 umull r4, r5, r4, r6
- 8027106: 195d adds r5, r3, r5
- unsigned long long int num, struct param *p)
- {
- int n = 0;
- unsigned long long int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- 8027108: 4648 mov r0, r9
- 802710a: 4651 mov r1, sl
- 802710c: 4622 mov r2, r4
- 802710e: 462b mov r3, r5
- 8027110: f7f9 ff0c bl 8020f2c <__aeabi_uldivmod>
- 8027114: 42b9 cmp r1, r7
- 8027116: bf08 it eq
- 8027118: 42b0 cmpeq r0, r6
- 802711a: d2ee bcs.n 80270fa <ulli2a+0x1a>
- 802711c: 2600 movs r6, #0
- 802711e: e02d b.n 802717c <ulli2a+0x9c>
- d *= p->base;
- while (d != 0) {
- int dgt = num / d;
- 8027120: 4622 mov r2, r4
- 8027122: 462b mov r3, r5
- 8027124: 4648 mov r0, r9
- 8027126: 4651 mov r1, sl
- 8027128: f7f9 ff00 bl 8020f2c <__aeabi_uldivmod>
- num %= d;
- 802712c: 4651 mov r1, sl
- 802712e: 4622 mov r2, r4
- 8027130: 462b mov r3, r5
- unsigned long long int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- d *= p->base;
- while (d != 0) {
- int dgt = num / d;
- 8027132: 4607 mov r7, r0
- num %= d;
- 8027134: 4648 mov r0, r9
- 8027136: f7f9 fef9 bl 8020f2c <__aeabi_uldivmod>
- d /= p->base;
- 802713a: 4620 mov r0, r4
- 802713c: 4629 mov r1, r5
- char *bf = p->bf;
- while (num / d >= p->base)
- d *= p->base;
- while (d != 0) {
- int dgt = num / d;
- num %= d;
- 802713e: 4691 mov r9, r2
- 8027140: 469a mov sl, r3
- d /= p->base;
- 8027142: f8d8 200c ldr.w r2, [r8, #12]
- 8027146: 2300 movs r3, #0
- 8027148: f7f9 fef0 bl 8020f2c <__aeabi_uldivmod>
- 802714c: 4604 mov r4, r0
- 802714e: 460d mov r5, r1
- if (n || dgt > 0 || d == 0) {
- 8027150: b926 cbnz r6, 802715c <ulli2a+0x7c>
- 8027152: 2f00 cmp r7, #0
- 8027154: dc02 bgt.n 802715c <ulli2a+0x7c>
- 8027156: ea54 0305 orrs.w r3, r4, r5
- 802715a: d1e1 bne.n 8027120 <ulli2a+0x40>
- *bf++ = dgt + (dgt < 10 ? '0' : (p->uc ? 'A' : 'a') - 10);
- 802715c: 2f09 cmp r7, #9
- 802715e: b2fa uxtb r2, r7
- 8027160: dd07 ble.n 8027172 <ulli2a+0x92>
- 8027162: f898 3000 ldrb.w r3, [r8]
- 8027166: f013 0f04 tst.w r3, #4
- 802716a: bf0c ite eq
- 802716c: 2357 moveq r3, #87 ; 0x57
- 802716e: 2337 movne r3, #55 ; 0x37
- 8027170: e000 b.n 8027174 <ulli2a+0x94>
- 8027172: 2330 movs r3, #48 ; 0x30
- 8027174: 189b adds r3, r3, r2
- 8027176: f80b 3b01 strb.w r3, [fp], #1
- ++n;
- 802717a: 3601 adds r6, #1
- int n = 0;
- unsigned long long int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- d *= p->base;
- while (d != 0) {
- 802717c: ea54 0305 orrs.w r3, r4, r5
- 8027180: d1ce bne.n 8027120 <ulli2a+0x40>
- if (n || dgt > 0 || d == 0) {
- *bf++ = dgt + (dgt < 10 ? '0' : (p->uc ? 'A' : 'a') - 10);
- ++n;
- }
- }
- *bf = 0;
- 8027182: 2300 movs r3, #0
- 8027184: f88b 3000 strb.w r3, [fp]
- 8027188: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 0802718c <uli2a>:
- }
- #endif
- #ifdef PRINTF_LONG_SUPPORT
- static void uli2a(unsigned long int num, struct param *p)
- {
- 802718c: b570 push {r4, r5, r6, lr}
- int n = 0;
- unsigned long int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- 802718e: 68ca ldr r2, [r1, #12]
- #ifdef PRINTF_LONG_SUPPORT
- static void uli2a(unsigned long int num, struct param *p)
- {
- int n = 0;
- unsigned long int d = 1;
- char *bf = p->bf;
- 8027190: 690c ldr r4, [r1, #16]
- #ifdef PRINTF_LONG_SUPPORT
- static void uli2a(unsigned long int num, struct param *p)
- {
- int n = 0;
- unsigned long int d = 1;
- 8027192: 2301 movs r3, #1
- char *bf = p->bf;
- while (num / d >= p->base)
- 8027194: e000 b.n 8027198 <uli2a+0xc>
- d *= p->base;
- 8027196: 4353 muls r3, r2
- static void uli2a(unsigned long int num, struct param *p)
- {
- int n = 0;
- unsigned long int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- 8027198: fbb0 f5f3 udiv r5, r0, r3
- 802719c: 4295 cmp r5, r2
- 802719e: d2fa bcs.n 8027196 <uli2a+0xa>
- 80271a0: 2500 movs r5, #0
- 80271a2: e01a b.n 80271da <uli2a+0x4e>
- d *= p->base;
- while (d != 0) {
- int dgt = num / d;
- num %= d;
- d /= p->base;
- 80271a4: 68ce ldr r6, [r1, #12]
- unsigned long int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- d *= p->base;
- while (d != 0) {
- int dgt = num / d;
- 80271a6: fbb0 f2f3 udiv r2, r0, r3
- num %= d;
- 80271aa: fb03 0012 mls r0, r3, r2, r0
- d /= p->base;
- 80271ae: fbb3 f3f6 udiv r3, r3, r6
- if (n || dgt > 0 || d == 0) {
- 80271b2: b91d cbnz r5, 80271bc <uli2a+0x30>
- 80271b4: 2a00 cmp r2, #0
- 80271b6: dc01 bgt.n 80271bc <uli2a+0x30>
- 80271b8: 2b00 cmp r3, #0
- 80271ba: d1f3 bne.n 80271a4 <uli2a+0x18>
- *bf++ = dgt + (dgt < 10 ? '0' : (p->uc ? 'A' : 'a') - 10);
- 80271bc: 2a09 cmp r2, #9
- 80271be: b2d6 uxtb r6, r2
- 80271c0: dd06 ble.n 80271d0 <uli2a+0x44>
- 80271c2: 780a ldrb r2, [r1, #0]
- 80271c4: f012 0f04 tst.w r2, #4
- 80271c8: bf0c ite eq
- 80271ca: 2257 moveq r2, #87 ; 0x57
- 80271cc: 2237 movne r2, #55 ; 0x37
- 80271ce: e000 b.n 80271d2 <uli2a+0x46>
- 80271d0: 2230 movs r2, #48 ; 0x30
- 80271d2: 1992 adds r2, r2, r6
- 80271d4: f804 2b01 strb.w r2, [r4], #1
- ++n;
- 80271d8: 3501 adds r5, #1
- int n = 0;
- unsigned long int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- d *= p->base;
- while (d != 0) {
- 80271da: 2b00 cmp r3, #0
- 80271dc: d1e2 bne.n 80271a4 <uli2a+0x18>
- if (n || dgt > 0 || d == 0) {
- *bf++ = dgt + (dgt < 10 ? '0' : (p->uc ? 'A' : 'a') - 10);
- ++n;
- }
- }
- *bf = 0;
- 80271de: 7023 strb r3, [r4, #0]
- 80271e0: bd70 pop {r4, r5, r6, pc}
- 080271e2 <ui2a>:
- uli2a(num, p);
- }
- #endif
- static void ui2a(unsigned int num, struct param *p)
- {
- 80271e2: b570 push {r4, r5, r6, lr}
- int n = 0;
- unsigned int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- 80271e4: 68ca ldr r2, [r1, #12]
- static void ui2a(unsigned int num, struct param *p)
- {
- int n = 0;
- unsigned int d = 1;
- char *bf = p->bf;
- 80271e6: 690c ldr r4, [r1, #16]
- #endif
- static void ui2a(unsigned int num, struct param *p)
- {
- int n = 0;
- unsigned int d = 1;
- 80271e8: 2301 movs r3, #1
- char *bf = p->bf;
- while (num / d >= p->base)
- 80271ea: e000 b.n 80271ee <ui2a+0xc>
- d *= p->base;
- 80271ec: 4353 muls r3, r2
- static void ui2a(unsigned int num, struct param *p)
- {
- int n = 0;
- unsigned int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- 80271ee: fbb0 f5f3 udiv r5, r0, r3
- 80271f2: 4295 cmp r5, r2
- 80271f4: d2fa bcs.n 80271ec <ui2a+0xa>
- 80271f6: 2500 movs r5, #0
- 80271f8: e01a b.n 8027230 <ui2a+0x4e>
- d *= p->base;
- while (d != 0) {
- int dgt = num / d;
- num %= d;
- d /= p->base;
- 80271fa: 68ce ldr r6, [r1, #12]
- unsigned int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- d *= p->base;
- while (d != 0) {
- int dgt = num / d;
- 80271fc: fbb0 f2f3 udiv r2, r0, r3
- num %= d;
- 8027200: fb03 0012 mls r0, r3, r2, r0
- d /= p->base;
- 8027204: fbb3 f3f6 udiv r3, r3, r6
- if (n || dgt > 0 || d == 0) {
- 8027208: b91d cbnz r5, 8027212 <ui2a+0x30>
- 802720a: 2a00 cmp r2, #0
- 802720c: dc01 bgt.n 8027212 <ui2a+0x30>
- 802720e: 2b00 cmp r3, #0
- 8027210: d1f3 bne.n 80271fa <ui2a+0x18>
- *bf++ = dgt + (dgt < 10 ? '0' : (p->uc ? 'A' : 'a') - 10);
- 8027212: 2a09 cmp r2, #9
- 8027214: b2d6 uxtb r6, r2
- 8027216: dd06 ble.n 8027226 <ui2a+0x44>
- 8027218: 780a ldrb r2, [r1, #0]
- 802721a: f012 0f04 tst.w r2, #4
- 802721e: bf0c ite eq
- 8027220: 2257 moveq r2, #87 ; 0x57
- 8027222: 2237 movne r2, #55 ; 0x37
- 8027224: e000 b.n 8027228 <ui2a+0x46>
- 8027226: 2230 movs r2, #48 ; 0x30
- 8027228: 1992 adds r2, r2, r6
- 802722a: f804 2b01 strb.w r2, [r4], #1
- ++n;
- 802722e: 3501 adds r5, #1
- int n = 0;
- unsigned int d = 1;
- char *bf = p->bf;
- while (num / d >= p->base)
- d *= p->base;
- while (d != 0) {
- 8027230: 2b00 cmp r3, #0
- 8027232: d1e2 bne.n 80271fa <ui2a+0x18>
- if (n || dgt > 0 || d == 0) {
- *bf++ = dgt + (dgt < 10 ? '0' : (p->uc ? 'A' : 'a') - 10);
- ++n;
- }
- }
- *bf = 0;
- 8027234: 7023 strb r3, [r4, #0]
- 8027236: bd70 pop {r4, r5, r6, pc}
- 08027238 <putchw>:
- }
- static void putchw(void *putp, putcf putf, struct param *p)
- {
- 8027238: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- char ch;
- int n = p->width;
- char *bf = p->bf;
- 802723c: 6913 ldr r3, [r2, #16]
- }
- static void putchw(void *putp, putcf putf, struct param *p)
- {
- char ch;
- int n = p->width;
- 802723e: 6854 ldr r4, [r2, #4]
- }
- static void putchw(void *putp, putcf putf, struct param *p)
- {
- 8027240: 4606 mov r6, r0
- 8027242: 460f mov r7, r1
- 8027244: 4615 mov r5, r2
- char ch;
- int n = p->width;
- char *bf = p->bf;
- /* Number of filling characters */
- while (*bf++ && n > 0)
- 8027246: e000 b.n 802724a <putchw+0x12>
- n--;
- 8027248: 3c01 subs r4, #1
- char ch;
- int n = p->width;
- char *bf = p->bf;
- /* Number of filling characters */
- while (*bf++ && n > 0)
- 802724a: f813 2b01 ldrb.w r2, [r3], #1
- 802724e: b912 cbnz r2, 8027256 <putchw+0x1e>
- n--;
- if (p->sign)
- 8027250: 7a2b ldrb r3, [r5, #8]
- 8027252: b91b cbnz r3, 802725c <putchw+0x24>
- 8027254: e003 b.n 802725e <putchw+0x26>
- char ch;
- int n = p->width;
- char *bf = p->bf;
- /* Number of filling characters */
- while (*bf++ && n > 0)
- 8027256: 2c00 cmp r4, #0
- 8027258: dcf6 bgt.n 8027248 <putchw+0x10>
- 802725a: e7f9 b.n 8027250 <putchw+0x18>
- n--;
- if (p->sign)
- n--;
- 802725c: 3c01 subs r4, #1
- if (p->alt && p->base == 16)
- 802725e: 782b ldrb r3, [r5, #0]
- 8027260: 0799 lsls r1, r3, #30
- 8027262: d507 bpl.n 8027274 <putchw+0x3c>
- 8027264: 68eb ldr r3, [r5, #12]
- 8027266: 2b10 cmp r3, #16
- 8027268: d101 bne.n 802726e <putchw+0x36>
- n -= 2;
- 802726a: 3c02 subs r4, #2
- 802726c: e002 b.n 8027274 <putchw+0x3c>
- else if (p->alt && p->base == 8)
- 802726e: 2b08 cmp r3, #8
- n--;
- 8027270: bf08 it eq
- 8027272: 3c01 subeq r4, #1
- /* Fill with space to align to the right, before alternate or sign */
- if (!p->lz && !p->align_left) {
- 8027274: 782b ldrb r3, [r5, #0]
- 8027276: f013 0f09 tst.w r3, #9
- 802727a: d10d bne.n 8027298 <putchw+0x60>
- 802727c: 46a0 mov r8, r4
- 802727e: e004 b.n 802728a <putchw+0x52>
- while (n-- > 0)
- putf(putp, ' ');
- 8027280: 4630 mov r0, r6
- 8027282: 2120 movs r1, #32
- 8027284: 47b8 blx r7
- 8027286: f108 38ff add.w r8, r8, #4294967295
- else if (p->alt && p->base == 8)
- n--;
- /* Fill with space to align to the right, before alternate or sign */
- if (!p->lz && !p->align_left) {
- while (n-- > 0)
- 802728a: f1b8 0f00 cmp.w r8, #0
- 802728e: dcf7 bgt.n 8027280 <putchw+0x48>
- return neg ? -fvalue : fvalue;
- }
- static void putchw(void *putp, putcf putf, struct param *p)
- 8027290: 1e63 subs r3, r4, #1
- 8027292: ea24 74e4 bic.w r4, r4, r4, asr #31
- 8027296: 1b1c subs r4, r3, r4
- while (n-- > 0)
- putf(putp, ' ');
- }
- /* print sign */
- if (p->sign)
- 8027298: 7a29 ldrb r1, [r5, #8]
- 802729a: b109 cbz r1, 80272a0 <putchw+0x68>
- putf(putp, p->sign);
- 802729c: 4630 mov r0, r6
- 802729e: 47b8 blx r7
- /* Alternate */
- if (p->alt && p->base == 16) {
- 80272a0: 782b ldrb r3, [r5, #0]
- 80272a2: 079a lsls r2, r3, #30
- 80272a4: d512 bpl.n 80272cc <putchw+0x94>
- 80272a6: 68eb ldr r3, [r5, #12]
- 80272a8: 2b10 cmp r3, #16
- 80272aa: d10a bne.n 80272c2 <putchw+0x8a>
- putf(putp, '0');
- 80272ac: 2130 movs r1, #48 ; 0x30
- 80272ae: 4630 mov r0, r6
- 80272b0: 47b8 blx r7
- putf(putp, (p->uc ? 'X' : 'x'));
- 80272b2: 782b ldrb r3, [r5, #0]
- 80272b4: f013 0f04 tst.w r3, #4
- 80272b8: 4630 mov r0, r6
- 80272ba: bf0c ite eq
- 80272bc: 2178 moveq r1, #120 ; 0x78
- 80272be: 2158 movne r1, #88 ; 0x58
- 80272c0: e003 b.n 80272ca <putchw+0x92>
- } else if (p->alt && p->base == 8) {
- 80272c2: 2b08 cmp r3, #8
- 80272c4: d102 bne.n 80272cc <putchw+0x94>
- putf(putp, '0');
- 80272c6: 4630 mov r0, r6
- 80272c8: 2130 movs r1, #48 ; 0x30
- 80272ca: 47b8 blx r7
- }
- /* Fill with zeros, after alternate or sign */
- if (p->lz) {
- 80272cc: 782b ldrb r3, [r5, #0]
- 80272ce: 07db lsls r3, r3, #31
- 80272d0: d50d bpl.n 80272ee <putchw+0xb6>
- 80272d2: 46a0 mov r8, r4
- 80272d4: e004 b.n 80272e0 <putchw+0xa8>
- while (n-- > 0)
- putf(putp, '0');
- 80272d6: 4630 mov r0, r6
- 80272d8: 2130 movs r1, #48 ; 0x30
- 80272da: 47b8 blx r7
- 80272dc: f108 38ff add.w r8, r8, #4294967295
- putf(putp, '0');
- }
- /* Fill with zeros, after alternate or sign */
- if (p->lz) {
- while (n-- > 0)
- 80272e0: f1b8 0f00 cmp.w r8, #0
- 80272e4: dcf7 bgt.n 80272d6 <putchw+0x9e>
- return neg ? -fvalue : fvalue;
- }
- static void putchw(void *putp, putcf putf, struct param *p)
- 80272e6: 1e63 subs r3, r4, #1
- 80272e8: ea24 74e4 bic.w r4, r4, r4, asr #31
- 80272ec: 1b1c subs r4, r3, r4
- while (n-- > 0)
- putf(putp, '0');
- }
- /* Put actual buffer */
- bf = p->bf;
- 80272ee: f8d5 8010 ldr.w r8, [r5, #16]
- while ((ch = *bf++))
- 80272f2: e001 b.n 80272f8 <putchw+0xc0>
- putf(putp, ch);
- 80272f4: 4630 mov r0, r6
- 80272f6: 47b8 blx r7
- putf(putp, '0');
- }
- /* Put actual buffer */
- bf = p->bf;
- while ((ch = *bf++))
- 80272f8: f818 1b01 ldrb.w r1, [r8], #1
- 80272fc: 2900 cmp r1, #0
- 80272fe: d1f9 bne.n 80272f4 <putchw+0xbc>
- putf(putp, ch);
- /* Fill with space to align to the left, after string */
- if (!p->lz && p->align_left) {
- 8027300: 782b ldrb r3, [r5, #0]
- 8027302: f003 0309 and.w r3, r3, #9
- 8027306: 2b08 cmp r3, #8
- 8027308: d106 bne.n 8027318 <putchw+0xe0>
- 802730a: e003 b.n 8027314 <putchw+0xdc>
- while (n-- > 0)
- putf(putp, ' ');
- 802730c: 4630 mov r0, r6
- 802730e: 2120 movs r1, #32
- 8027310: 47b8 blx r7
- 8027312: 3c01 subs r4, #1
- while ((ch = *bf++))
- putf(putp, ch);
- /* Fill with space to align to the left, after string */
- if (!p->lz && p->align_left) {
- while (n-- > 0)
- 8027314: 2c00 cmp r4, #0
- 8027316: dcf9 bgt.n 802730c <putchw+0xd4>
- 8027318: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 0802731c <_vsnprintf_putcf>:
- };
- static void _vsnprintf_putcf(void *p, char c)
- {
- struct _vsnprintf_putcf_data *data = (struct _vsnprintf_putcf_data*)p;
- if (data->num_chars < data->dest_capacity)
- 802731c: 6883 ldr r3, [r0, #8]
- 802731e: 6802 ldr r2, [r0, #0]
- 8027320: 4293 cmp r3, r2
- data->dest[data->num_chars] = c;
- 8027322: bf3c itt cc
- 8027324: 6842 ldrcc r2, [r0, #4]
- 8027326: 54d1 strbcc r1, [r2, r3]
- data->num_chars ++;
- 8027328: 6883 ldr r3, [r0, #8]
- 802732a: 3301 adds r3, #1
- 802732c: 6083 str r3, [r0, #8]
- 802732e: 4770 bx lr
- 08027330 <_vsprintf_putcf>:
- };
- static void _vsprintf_putcf(void *p, char c)
- {
- struct _vsprintf_putcf_data *data = (struct _vsprintf_putcf_data*)p;
- data->dest[data->num_chars++] = c;
- 8027330: e890 000c ldmia.w r0, {r2, r3}
- 8027334: 54d1 strb r1, [r2, r3]
- 8027336: 3301 adds r3, #1
- 8027338: 6043 str r3, [r0, #4]
- 802733a: 4770 bx lr
- 0802733c <tfp_format>:
- putf(putp, ' ');
- }
- }
- void tfp_format(void *putp, putcf putf, const char *fmt, va_list va)
- {
- 802733c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8027340: b09b sub sp, #108 ; 0x6c
- 8027342: 4617 mov r7, r2
- char bf[23]; /* long = 64b on some architectures */
- #else
- char bf[12]; /* int = 32b on some architectures */
- #endif
- char ch;
- p.bf = bf;
- 8027344: aa04 add r2, sp, #16
- putf(putp, ' ');
- }
- }
- void tfp_format(void *putp, putcf putf, const char *fmt, va_list va)
- {
- 8027346: 4605 mov r5, r0
- 8027348: 460e mov r6, r1
- 802734a: 461c mov r4, r3
- char bf[23]; /* long = 64b on some architectures */
- #else
- char bf[12]; /* int = 32b on some architectures */
- #endif
- char ch;
- p.bf = bf;
- 802734c: 920e str r2, [sp, #56] ; 0x38
- while ((ch = *(fmt++))) {
- 802734e: e208 b.n 8027762 <tfp_format+0x426>
- if (ch != '%') {
- 8027350: 2925 cmp r1, #37 ; 0x25
- 8027352: d000 beq.n 8027356 <tfp_format+0x1a>
- 8027354: e13a b.n 80275cc <tfp_format+0x290>
- #endif
- /* Init parameter struct */
- p.lz = 0;
- p.alt = 0;
- p.width = 0;
- p.align_left = 0;
- 8027356: f89d 2028 ldrb.w r2, [sp, #40] ; 0x28
- char lng = 0; /* 1 for long, 2 for long long */
- #endif
- /* Init parameter struct */
- p.lz = 0;
- p.alt = 0;
- p.width = 0;
- 802735a: 2300 movs r3, #0
- p.align_left = 0;
- 802735c: f002 02fc and.w r2, r2, #252 ; 0xfc
- 8027360: f363 02c3 bfi r2, r3, #3, #1
- 8027364: f88d 2028 strb.w r2, [sp, #40] ; 0x28
- p.sign = 0;
- p.prec = 2;
- 8027368: 2102 movs r1, #2
- } else {
- #ifdef PRINTF_LONG_SUPPORT
- char lng = 0; /* 1 for long, 2 for long long */
- #endif
- /* Init parameter struct */
- p.lz = 0;
- 802736a: b2d2 uxtb r2, r2
- 802736c: f002 0c01 and.w ip, r2, #1
- 8027370: f3c2 0040 ubfx r0, r2, #1, #1
- p.alt = 0;
- p.width = 0;
- 8027374: 930b str r3, [sp, #44] ; 0x2c
- p.align_left = 0;
- p.sign = 0;
- 8027376: f88d 3030 strb.w r3, [sp, #48] ; 0x30
- p.prec = 2;
- 802737a: f88d 103c strb.w r1, [sp, #60] ; 0x3c
- 802737e: f3c2 02c0 ubfx r2, r2, #3, #1
- /* Flags */
- while ((ch = *(fmt++))) {
- 8027382: e012 b.n 80273aa <tfp_format+0x6e>
- switch (ch) {
- 8027384: 292d cmp r1, #45 ; 0x2d
- 8027386: d00f beq.n 80273a8 <tfp_format+0x6c>
- 8027388: d804 bhi.n 8027394 <tfp_format+0x58>
- 802738a: 2923 cmp r1, #35 ; 0x23
- 802738c: d008 beq.n 80273a0 <tfp_format+0x64>
- 802738e: 292b cmp r1, #43 ; 0x2b
- 8027390: d10f bne.n 80273b2 <tfp_format+0x76>
- 8027392: e007 b.n 80273a4 <tfp_format+0x68>
- 8027394: 2930 cmp r1, #48 ; 0x30
- 8027396: d000 beq.n 802739a <tfp_format+0x5e>
- 8027398: e00b b.n 80273b2 <tfp_format+0x76>
- case '-':
- p.align_left = 1;
- continue;
- case '0':
- p.lz = 1;
- 802739a: f04f 0c01 mov.w ip, #1
- continue;
- 802739e: e004 b.n 80273aa <tfp_format+0x6e>
- case '#':
- p.alt = 1;
- 80273a0: 2001 movs r0, #1
- continue;
- 80273a2: e002 b.n 80273aa <tfp_format+0x6e>
- case '+':
- p.sign = 1;
- 80273a4: 2301 movs r3, #1
- continue;
- 80273a6: e000 b.n 80273aa <tfp_format+0x6e>
- /* Flags */
- while ((ch = *(fmt++))) {
- switch (ch) {
- case '-':
- p.align_left = 1;
- 80273a8: 2201 movs r2, #1
- p.align_left = 0;
- p.sign = 0;
- p.prec = 2;
- /* Flags */
- while ((ch = *(fmt++))) {
- 80273aa: f817 1b01 ldrb.w r1, [r7], #1
- 80273ae: 2900 cmp r1, #0
- 80273b0: d1e8 bne.n 8027384 <tfp_format+0x48>
- 80273b2: f89d 8028 ldrb.w r8, [sp, #40] ; 0x28
- 80273b6: f88d 3030 strb.w r3, [sp, #48] ; 0x30
- 80273ba: f36c 0800 bfi r8, ip, #0, #1
- 80273be: 46c4 mov ip, r8
- 80273c0: f360 0c41 bfi ip, r0, #1, #1
- 80273c4: 4660 mov r0, ip
- }
- break;
- }
- /* Width */
- if (ch >= '0' && ch <= '9') {
- 80273c6: f1a1 0330 sub.w r3, r1, #48 ; 0x30
- 80273ca: f362 00c3 bfi r0, r2, #3, #1
- 80273ce: 2b09 cmp r3, #9
- 80273d0: f88d 0028 strb.w r0, [sp, #40] ; 0x28
- 80273d4: d81d bhi.n 8027412 <tfp_format+0xd6>
- 80273d6: e004 b.n 80273e2 <tfp_format+0xa6>
- unsigned int num = 0;
- int digit;
- while ((digit = a2d(ch)) >= 0) {
- if (digit > base)
- break;
- num = num * base + digit;
- 80273d8: fb00 3202 mla r2, r0, r2, r3
- ch = *p++;
- 80273dc: f817 1b01 ldrb.w r1, [r7], #1
- 80273e0: e001 b.n 80273e6 <tfp_format+0xaa>
- }
- break;
- }
- /* Width */
- if (ch >= '0' && ch <= '9') {
- 80273e2: 2200 movs r2, #0
- unsigned int num = 0;
- int digit;
- while ((digit = a2d(ch)) >= 0) {
- if (digit > base)
- break;
- num = num * base + digit;
- 80273e4: 200a movs r0, #10
- ui2a(num, p);
- }
- static int a2d(char ch)
- {
- if (ch >= '0' && ch <= '9')
- 80273e6: f1a1 0330 sub.w r3, r1, #48 ; 0x30
- 80273ea: fa5f fc83 uxtb.w ip, r3
- 80273ee: f1bc 0f09 cmp.w ip, #9
- 80273f2: d9f1 bls.n 80273d8 <tfp_format+0x9c>
- return ch - '0';
- else if (ch >= 'a' && ch <= 'f')
- 80273f4: f1a1 0361 sub.w r3, r1, #97 ; 0x61
- 80273f8: 2b05 cmp r3, #5
- 80273fa: d802 bhi.n 8027402 <tfp_format+0xc6>
- return ch - 'a' + 10;
- 80273fc: f1a1 0357 sub.w r3, r1, #87 ; 0x57
- 8027400: e1b5 b.n 802776e <tfp_format+0x432>
- else if (ch >= 'A' && ch <= 'F')
- 8027402: f1a1 0341 sub.w r3, r1, #65 ; 0x41
- 8027406: 2b05 cmp r3, #5
- 8027408: d802 bhi.n 8027410 <tfp_format+0xd4>
- return ch - 'A' + 10;
- 802740a: f1a1 0337 sub.w r3, r1, #55 ; 0x37
- 802740e: e1ae b.n 802776e <tfp_format+0x432>
- break;
- num = num * base + digit;
- ch = *p++;
- }
- *src = p;
- *nump = num;
- 8027410: 920b str r2, [sp, #44] ; 0x2c
- }
- /* We accept 'x.y' format but don't support it completely:
- * we ignore the 'y' digit => this ignores 0-fill
- * size and makes it == width (ie. 'x') */
- if (ch == '.') {
- 8027412: 292e cmp r1, #46 ; 0x2e
- 8027414: d10e bne.n 8027434 <tfp_format+0xf8>
- //p.lz = 1; /* zero-padding */
- /* ignore actual 0-fill size: */
- ch = *(fmt++);
- if (ch >= '0' && ch <= '9')
- 8027416: 783a ldrb r2, [r7, #0]
- 8027418: 3a30 subs r2, #48 ; 0x30
- 802741a: b2d2 uxtb r2, r2
- * we ignore the 'y' digit => this ignores 0-fill
- * size and makes it == width (ie. 'x') */
- if (ch == '.') {
- //p.lz = 1; /* zero-padding */
- /* ignore actual 0-fill size: */
- ch = *(fmt++);
- 802741c: 1c7b adds r3, r7, #1
- if (ch >= '0' && ch <= '9')
- 802741e: 2a09 cmp r2, #9
- p.prec = ch - '0';
- 8027420: bf98 it ls
- 8027422: f88d 203c strbls.w r2, [sp, #60] ; 0x3c
- do
- {
- ch = *(fmt++);
- 8027426: f813 1b01 ldrb.w r1, [r3], #1
- } while (ch >= '0' && ch <= '9');
- 802742a: f1a1 0230 sub.w r2, r1, #48 ; 0x30
- 802742e: 2a09 cmp r2, #9
- ch = *(fmt++);
- if (ch >= '0' && ch <= '9')
- p.prec = ch - '0';
- do
- {
- ch = *(fmt++);
- 8027430: 461f mov r7, r3
- } while (ch >= '0' && ch <= '9');
- 8027432: d9f8 bls.n 8027426 <tfp_format+0xea>
- }
- #ifdef PRINTF_SIZE_T_SUPPORT
- # ifdef PRINTF_LONG_SUPPORT
- if (ch == 'z') {
- 8027434: 297a cmp r1, #122 ; 0x7a
- 8027436: d102 bne.n 802743e <tfp_format+0x102>
- ch = *(fmt++);
- 8027438: f817 1b01 ldrb.w r1, [r7], #1
- 802743c: e005 b.n 802744a <tfp_format+0x10e>
- } else
- # endif
- #endif
- #ifdef PRINTF_LONG_SUPPORT
- if (ch == 'l') {
- 802743e: 296c cmp r1, #108 ; 0x6c
- 8027440: d109 bne.n 8027456 <tfp_format+0x11a>
- ch = *(fmt++);
- 8027442: 7839 ldrb r1, [r7, #0]
- lng = 1;
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (ch == 'l') {
- 8027444: 296c cmp r1, #108 ; 0x6c
- 8027446: d002 beq.n 802744e <tfp_format+0x112>
- # endif
- #endif
- #ifdef PRINTF_LONG_SUPPORT
- if (ch == 'l') {
- ch = *(fmt++);
- 8027448: 3701 adds r7, #1
- lng = 1;
- 802744a: 2301 movs r3, #1
- 802744c: e004 b.n 8027458 <tfp_format+0x11c>
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (ch == 'l') {
- ch = *(fmt++);
- 802744e: 7879 ldrb r1, [r7, #1]
- lng = 2;
- 8027450: 2302 movs r3, #2
- if (ch == 'l') {
- ch = *(fmt++);
- lng = 1;
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (ch == 'l') {
- ch = *(fmt++);
- 8027452: 3702 adds r7, #2
- 8027454: e000 b.n 8027458 <tfp_format+0x11c>
- while ((ch = *(fmt++))) {
- if (ch != '%') {
- putf(putp, ch);
- } else {
- #ifdef PRINTF_LONG_SUPPORT
- char lng = 0; /* 1 for long, 2 for long long */
- 8027456: 2300 movs r3, #0
- lng = 2;
- }
- #endif
- }
- #endif
- switch (ch) {
- 8027458: 2969 cmp r1, #105 ; 0x69
- 802745a: d036 beq.n 80274ca <tfp_format+0x18e>
- 802745c: d816 bhi.n 802748c <tfp_format+0x150>
- 802745e: 2963 cmp r1, #99 ; 0x63
- 8027460: f000 80a1 beq.w 80275a6 <tfp_format+0x26a>
- 8027464: d80c bhi.n 8027480 <tfp_format+0x144>
- 8027466: 2946 cmp r1, #70 ; 0x46
- 8027468: f000 80b3 beq.w 80275d2 <tfp_format+0x296>
- 802746c: d806 bhi.n 802747c <tfp_format+0x140>
- 802746e: 2900 cmp r1, #0
- 8027470: f000 8181 beq.w 8027776 <tfp_format+0x43a>
- 8027474: 2925 cmp r1, #37 ; 0x25
- 8027476: f040 8174 bne.w 8027762 <tfp_format+0x426>
- 802747a: e0a7 b.n 80275cc <tfp_format+0x290>
- 802747c: 2958 cmp r1, #88 ; 0x58
- 802747e: e012 b.n 80274a6 <tfp_format+0x16a>
- 8027480: 2964 cmp r1, #100 ; 0x64
- 8027482: d022 beq.n 80274ca <tfp_format+0x18e>
- 8027484: 2966 cmp r1, #102 ; 0x66
- 8027486: f040 816c bne.w 8027762 <tfp_format+0x426>
- 802748a: e0a2 b.n 80275d2 <tfp_format+0x296>
- 802748c: 2973 cmp r1, #115 ; 0x73
- 802748e: f000 8090 beq.w 80275b2 <tfp_format+0x276>
- 8027492: d805 bhi.n 80274a0 <tfp_format+0x164>
- 8027494: 296f cmp r1, #111 ; 0x6f
- 8027496: d078 beq.n 802758a <tfp_format+0x24e>
- 8027498: 2970 cmp r1, #112 ; 0x70
- 802749a: f040 8162 bne.w 8027762 <tfp_format+0x426>
- 802749e: e040 b.n 8027522 <tfp_format+0x1e6>
- 80274a0: 2975 cmp r1, #117 ; 0x75
- 80274a2: d003 beq.n 80274ac <tfp_format+0x170>
- 80274a4: 2978 cmp r1, #120 ; 0x78
- 80274a6: f040 815c bne.w 8027762 <tfp_format+0x426>
- 80274aa: e041 b.n 8027530 <tfp_format+0x1f4>
- case 0:
- goto abort;
- case 'u':
- p.base = 10;
- 80274ac: 220a movs r2, #10
- #ifdef PRINTF_LONG_SUPPORT
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (2 == lng)
- 80274ae: 2b02 cmp r3, #2
- #endif
- switch (ch) {
- case 0:
- goto abort;
- case 'u':
- p.base = 10;
- 80274b0: 920d str r2, [sp, #52] ; 0x34
- #ifdef PRINTF_LONG_SUPPORT
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (2 == lng)
- 80274b2: d107 bne.n 80274c4 <tfp_format+0x188>
- ulli2a(va_arg(va, unsigned long long int), &p);
- 80274b4: 3407 adds r4, #7
- 80274b6: f024 0307 bic.w r3, r4, #7
- 80274ba: f103 0408 add.w r4, r3, #8
- 80274be: e9d3 0100 ldrd r0, r1, [r3]
- 80274c2: e017 b.n 80274f4 <tfp_format+0x1b8>
- else
- #endif
- if (1 == lng)
- uli2a(va_arg(va, unsigned long int), &p);
- 80274c4: 6820 ldr r0, [r4, #0]
- 80274c6: a90a add r1, sp, #40 ; 0x28
- 80274c8: e04f b.n 802756a <tfp_format+0x22e>
- ui2a(va_arg(va, unsigned int), &p);
- putchw(putp, putf, &p);
- break;
- case 'd':
- case 'i':
- p.base = 10;
- 80274ca: 220a movs r2, #10
- #ifdef PRINTF_LONG_SUPPORT
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (2 == lng)
- 80274cc: 2b02 cmp r3, #2
- ui2a(va_arg(va, unsigned int), &p);
- putchw(putp, putf, &p);
- break;
- case 'd':
- case 'i':
- p.base = 10;
- 80274ce: 920d str r2, [sp, #52] ; 0x34
- #ifdef PRINTF_LONG_SUPPORT
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (2 == lng)
- 80274d0: d112 bne.n 80274f8 <tfp_format+0x1bc>
- lli2a(va_arg(va, long long int), &p);
- 80274d2: 3407 adds r4, #7
- 80274d4: f024 0307 bic.w r3, r4, #7
- 80274d8: e9d3 0100 ldrd r0, r1, [r3]
- 80274dc: f103 0408 add.w r4, r3, #8
- *bf = 0;
- }
- static void lli2a(long long int num, struct param *p)
- {
- if (num < 0) {
- 80274e0: 2800 cmp r0, #0
- 80274e2: f171 0300 sbcs.w r3, r1, #0
- 80274e6: da05 bge.n 80274f4 <tfp_format+0x1b8>
- num = -num;
- p->sign = '-';
- 80274e8: 232d movs r3, #45 ; 0x2d
- }
- static void lli2a(long long int num, struct param *p)
- {
- if (num < 0) {
- num = -num;
- 80274ea: 4240 negs r0, r0
- 80274ec: eb61 0141 sbc.w r1, r1, r1, lsl #1
- p->sign = '-';
- 80274f0: f88d 3030 strb.w r3, [sp, #48] ; 0x30
- }
- ulli2a(num, p);
- 80274f4: aa0a add r2, sp, #40 ; 0x28
- 80274f6: e033 b.n 8027560 <tfp_format+0x224>
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (2 == lng)
- lli2a(va_arg(va, long long int), &p);
- else
- #endif
- if (1 == lng)
- 80274f8: 2b01 cmp r3, #1
- li2a(va_arg(va, long int), &p);
- 80274fa: 6820 ldr r0, [r4, #0]
- 80274fc: f104 0804 add.w r8, r4, #4
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (2 == lng)
- lli2a(va_arg(va, long long int), &p);
- else
- #endif
- if (1 == lng)
- 8027500: d107 bne.n 8027512 <tfp_format+0x1d6>
- *bf = 0;
- }
- static void li2a(long num, struct param *p)
- {
- if (num < 0) {
- 8027502: 2800 cmp r0, #0
- 8027504: da03 bge.n 802750e <tfp_format+0x1d2>
- num = -num;
- p->sign = '-';
- 8027506: 232d movs r3, #45 ; 0x2d
- }
- static void li2a(long num, struct param *p)
- {
- if (num < 0) {
- num = -num;
- 8027508: 4240 negs r0, r0
- p->sign = '-';
- 802750a: f88d 3030 strb.w r3, [sp, #48] ; 0x30
- }
- uli2a(num, p);
- 802750e: a90a add r1, sp, #40 ; 0x28
- 8027510: e02f b.n 8027572 <tfp_format+0x236>
- *bf = 0;
- }
- static void i2a(int num, struct param *p)
- {
- if (num < 0) {
- 8027512: 2800 cmp r0, #0
- 8027514: da03 bge.n 802751e <tfp_format+0x1e2>
- num = -num;
- p->sign = '-';
- 8027516: 232d movs r3, #45 ; 0x2d
- }
- static void i2a(int num, struct param *p)
- {
- if (num < 0) {
- num = -num;
- 8027518: 4240 negs r0, r0
- p->sign = '-';
- 802751a: f88d 3030 strb.w r3, [sp, #48] ; 0x30
- }
- ui2a(num, p);
- 802751e: a90a add r1, sp, #40 ; 0x28
- 8027520: e02a b.n 8027578 <tfp_format+0x23c>
- i2a(va_arg(va, int), &p);
- putchw(putp, putf, &p);
- break;
- #ifdef SIZEOF_POINTER
- case 'p':
- p.alt = 1;
- 8027522: f89d 3028 ldrb.w r3, [sp, #40] ; 0x28
- 8027526: f043 0302 orr.w r3, r3, #2
- 802752a: f88d 3028 strb.w r3, [sp, #40] ; 0x28
- # if defined(SIZEOF_INT) && SIZEOF_POINTER <= SIZEOF_INT
- lng = 0;
- 802752e: 2300 movs r3, #0
- lng = 2;
- # endif
- #endif
- case 'x':
- case 'X':
- p.base = 16;
- 8027530: 2210 movs r2, #16
- p.uc = (ch == 'X')?1:0;
- 8027532: f1b1 0e58 subs.w lr, r1, #88 ; 0x58
- 8027536: f1de 0100 rsbs r1, lr, #0
- 802753a: f89d 0028 ldrb.w r0, [sp, #40] ; 0x28
- lng = 2;
- # endif
- #endif
- case 'x':
- case 'X':
- p.base = 16;
- 802753e: 920d str r2, [sp, #52] ; 0x34
- p.uc = (ch == 'X')?1:0;
- 8027540: eb51 010e adcs.w r1, r1, lr
- 8027544: aa1a add r2, sp, #104 ; 0x68
- 8027546: f361 0082 bfi r0, r1, #2, #1
- #ifdef PRINTF_LONG_SUPPORT
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (2 == lng)
- 802754a: 2b02 cmp r3, #2
- # endif
- #endif
- case 'x':
- case 'X':
- p.base = 16;
- p.uc = (ch == 'X')?1:0;
- 802754c: f802 0d40 strb.w r0, [r2, #-64]!
- #ifdef PRINTF_LONG_SUPPORT
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (2 == lng)
- 8027550: d109 bne.n 8027566 <tfp_format+0x22a>
- ulli2a(va_arg(va, unsigned long long int), &p);
- 8027552: 3407 adds r4, #7
- 8027554: f024 0307 bic.w r3, r4, #7
- 8027558: e9d3 0100 ldrd r0, r1, [r3]
- 802755c: f103 0408 add.w r4, r3, #8
- 8027560: f7ff fdbe bl 80270e0 <ulli2a>
- 8027564: e00b b.n 802757e <tfp_format+0x242>
- else
- #endif
- if (1 == lng)
- uli2a(va_arg(va, unsigned long int), &p);
- 8027566: 6820 ldr r0, [r4, #0]
- 8027568: 4611 mov r1, r2
- #ifdef PRINTF_LONG_LONG_SUPPORT
- if (2 == lng)
- ulli2a(va_arg(va, unsigned long long int), &p);
- else
- #endif
- if (1 == lng)
- 802756a: 2b01 cmp r3, #1
- 802756c: f104 0804 add.w r8, r4, #4
- 8027570: d102 bne.n 8027578 <tfp_format+0x23c>
- uli2a(va_arg(va, unsigned long int), &p);
- 8027572: f7ff fe0b bl 802718c <uli2a>
- 8027576: e001 b.n 802757c <tfp_format+0x240>
- else
- #endif
- ui2a(va_arg(va, unsigned int), &p);
- 8027578: f7ff fe33 bl 80271e2 <ui2a>
- 802757c: 4644 mov r4, r8
- putchw(putp, putf, &p);
- 802757e: 4628 mov r0, r5
- 8027580: 4631 mov r1, r6
- 8027582: aa0a add r2, sp, #40 ; 0x28
- 8027584: f7ff fe58 bl 8027238 <putchw>
- break;
- 8027588: e0eb b.n 8027762 <tfp_format+0x426>
- case 'o':
- p.base = 8;
- 802758a: 2308 movs r3, #8
- ui2a(va_arg(va, unsigned int), &p);
- 802758c: 6820 ldr r0, [r4, #0]
- #endif
- ui2a(va_arg(va, unsigned int), &p);
- putchw(putp, putf, &p);
- break;
- case 'o':
- p.base = 8;
- 802758e: 930d str r3, [sp, #52] ; 0x34
- ui2a(va_arg(va, unsigned int), &p);
- 8027590: a90a add r1, sp, #40 ; 0x28
- 8027592: f7ff fe26 bl 80271e2 <ui2a>
- putchw(putp, putf, &p);
- 8027596: 4628 mov r0, r5
- 8027598: 4631 mov r1, r6
- 802759a: aa0a add r2, sp, #40 ; 0x28
- ui2a(va_arg(va, unsigned int), &p);
- putchw(putp, putf, &p);
- break;
- case 'o':
- p.base = 8;
- ui2a(va_arg(va, unsigned int), &p);
- 802759c: f104 0804 add.w r8, r4, #4
- putchw(putp, putf, &p);
- 80275a0: f7ff fe4a bl 8027238 <putchw>
- 80275a4: e010 b.n 80275c8 <tfp_format+0x28c>
- break;
- case 'c':
- putf(putp, (char)(va_arg(va, int)));
- 80275a6: 4628 mov r0, r5
- 80275a8: 7821 ldrb r1, [r4, #0]
- 80275aa: f104 0804 add.w r8, r4, #4
- 80275ae: 47b0 blx r6
- 80275b0: e00a b.n 80275c8 <tfp_format+0x28c>
- break;
- case 's':
- p.bf = va_arg(va, char *);
- 80275b2: 6823 ldr r3, [r4, #0]
- putchw(putp, putf, &p);
- 80275b4: aa0a add r2, sp, #40 ; 0x28
- 80275b6: 4628 mov r0, r5
- 80275b8: 4631 mov r1, r6
- break;
- case 'c':
- putf(putp, (char)(va_arg(va, int)));
- break;
- case 's':
- p.bf = va_arg(va, char *);
- 80275ba: 930e str r3, [sp, #56] ; 0x38
- putchw(putp, putf, &p);
- 80275bc: f7ff fe3c bl 8027238 <putchw>
- p.bf = bf;
- 80275c0: aa04 add r2, sp, #16
- break;
- case 'c':
- putf(putp, (char)(va_arg(va, int)));
- break;
- case 's':
- p.bf = va_arg(va, char *);
- 80275c2: f104 0804 add.w r8, r4, #4
- putchw(putp, putf, &p);
- p.bf = bf;
- 80275c6: 920e str r2, [sp, #56] ; 0x38
- break;
- case 'c':
- putf(putp, (char)(va_arg(va, int)));
- break;
- case 's':
- p.bf = va_arg(va, char *);
- 80275c8: 4644 mov r4, r8
- putchw(putp, putf, &p);
- p.bf = bf;
- break;
- 80275ca: e0ca b.n 8027762 <tfp_format+0x426>
- case '%':
- putf(putp, ch);
- 80275cc: 4628 mov r0, r5
- 80275ce: 47b0 blx r6
- break;
- 80275d0: e0c7 b.n 8027762 <tfp_format+0x426>
- case 'f':
- case 'F':
- fval = va_arg(va, double);
- 80275d2: 3407 adds r4, #7
- 80275d4: f024 0307 bic.w r3, r4, #7
- 80275d8: f103 0408 add.w r4, r3, #8
- 80275dc: e893 0404 ldmia.w r3, {r2, sl}
- 80275e0: 9200 str r2, [sp, #0]
- sign = 0;
- if (fval < 0)
- 80275e2: 4610 mov r0, r2
- 80275e4: 4651 mov r1, sl
- 80275e6: 2200 movs r2, #0
- 80275e8: 2300 movs r3, #0
- 80275ea: f7f9 fa5b bl 8020aa4 <__aeabi_dcmplt>
- 80275ee: b138 cbz r0, 8027600 <tfp_format+0x2c4>
- {
- sign = 1;
- p.width--;
- 80275f0: 9b0b ldr r3, [sp, #44] ; 0x2c
- 80275f2: 3b01 subs r3, #1
- 80275f4: 930b str r3, [sp, #44] ; 0x2c
- fval = - fval;
- 80275f6: f10a 4a00 add.w sl, sl, #2147483648 ; 0x80000000
- case 'F':
- fval = va_arg(va, double);
- sign = 0;
- if (fval < 0)
- {
- sign = 1;
- 80275fa: f04f 0b01 mov.w fp, #1
- 80275fe: e009 b.n 8027614 <tfp_format+0x2d8>
- p.width--;
- fval = - fval;
- }
- else if (p.sign) {
- 8027600: f89d 3030 ldrb.w r3, [sp, #48] ; 0x30
- 8027604: b12b cbz r3, 8027612 <tfp_format+0x2d6>
- sign = 2;
- p.width--;
- 8027606: 9b0b ldr r3, [sp, #44] ; 0x2c
- 8027608: 3b01 subs r3, #1
- 802760a: 930b str r3, [sp, #44] ; 0x2c
- sign = 1;
- p.width--;
- fval = - fval;
- }
- else if (p.sign) {
- sign = 2;
- 802760c: f04f 0b02 mov.w fp, #2
- 8027610: e000 b.n 8027614 <tfp_format+0x2d8>
- putf(putp, ch);
- break;
- case 'f':
- case 'F':
- fval = va_arg(va, double);
- sign = 0;
- 8027612: 469b mov fp, r3
- else if (p.sign) {
- sign = 2;
- p.width--;
- }
- fpart = (int)fval;
- 8027614: 4651 mov r1, sl
- 8027616: 9800 ldr r0, [sp, #0]
- 8027618: f7f9 fa6c bl 8020af4 <__aeabi_d2iz>
- fiter = 0;
- 802761c: 2200 movs r2, #0
- else if (p.sign) {
- sign = 2;
- p.width--;
- }
- fpart = (int)fval;
- 802761e: 9001 str r0, [sp, #4]
- 8027620: 4680 mov r8, r0
- fiter = 0;
- while (fpart != 0)
- {
- temp_buffer[fiter++] = fpart % 10;
- 8027622: 210a movs r1, #10
- }
- fpart = (int)fval;
- fiter = 0;
- while (fpart != 0)
- 8027624: e008 b.n 8027638 <tfp_format+0x2fc>
- {
- temp_buffer[fiter++] = fpart % 10;
- 8027626: fb98 f0f1 sdiv r0, r8, r1
- 802762a: ab10 add r3, sp, #64 ; 0x40
- 802762c: fb01 8810 mls r8, r1, r0, r8
- 8027630: f843 8022 str.w r8, [r3, r2, lsl #2]
- 8027634: 3201 adds r2, #1
- fpart = fpart / 10;
- 8027636: 4680 mov r8, r0
- }
- fpart = (int)fval;
- fiter = 0;
- while (fpart != 0)
- 8027638: f1b8 0f00 cmp.w r8, #0
- 802763c: d1f3 bne.n 8027626 <tfp_format+0x2ea>
- temp_buffer[fiter++] = fpart % 10;
- fpart = fpart / 10;
- }
- fiter--;
- if (fiter == -1)
- 802763e: f102 39ff add.w r9, r2, #4294967295
- 8027642: b912 cbnz r2, 802764a <tfp_format+0x30e>
- p.width--;
- 8027644: 9a0b ldr r2, [sp, #44] ; 0x2c
- 8027646: 3a01 subs r2, #1
- 8027648: 920b str r2, [sp, #44] ; 0x2c
- /* Leading zeros */
- if (p.lz) {
- 802764a: f89d 2028 ldrb.w r2, [sp, #40] ; 0x28
- 802764e: 07d0 lsls r0, r2, #31
- 8027650: d51b bpl.n 802768a <tfp_format+0x34e>
- if (sign == 1)
- 8027652: f1bb 0f01 cmp.w fp, #1
- 8027656: d102 bne.n 802765e <tfp_format+0x322>
- putf(putp, '-');
- 8027658: 4628 mov r0, r5
- 802765a: 212d movs r1, #45 ; 0x2d
- 802765c: e007 b.n 802766e <tfp_format+0x332>
- else if (sign == 2)
- 802765e: f1bb 0f02 cmp.w fp, #2
- 8027662: d105 bne.n 8027670 <tfp_format+0x334>
- putf(putp, '+');
- 8027664: 4628 mov r0, r5
- 8027666: 212b movs r1, #43 ; 0x2b
- 8027668: e001 b.n 802766e <tfp_format+0x332>
- while (p.width-- > p.prec + fiter + 2)
- {
- putf(putp, '0');
- 802766a: 4628 mov r0, r5
- 802766c: 2130 movs r1, #48 ; 0x30
- 802766e: 47b0 blx r6
- if (sign == 1)
- putf(putp, '-');
- else if (sign == 2)
- putf(putp, '+');
- while (p.width-- > p.prec + fiter + 2)
- 8027670: f89d 203c ldrb.w r2, [sp, #60] ; 0x3c
- 8027674: 9b0b ldr r3, [sp, #44] ; 0x2c
- 8027676: 444a add r2, r9
- 8027678: 3202 adds r2, #2
- 802767a: 1e59 subs r1, r3, #1
- 802767c: 4293 cmp r3, r2
- 802767e: 910b str r1, [sp, #44] ; 0x2c
- 8027680: dcf3 bgt.n 802766a <tfp_format+0x32e>
- 8027682: e017 b.n 80276b4 <tfp_format+0x378>
- else
- {
- while (p.width-- > p.prec + fiter + 2)
- {
- putf(putp, ' ');
- 8027684: 4628 mov r0, r5
- 8027686: 2120 movs r1, #32
- 8027688: 47b0 blx r6
- }
- }
- else
- {
- while (p.width-- > p.prec + fiter + 2)
- 802768a: f89d 103c ldrb.w r1, [sp, #60] ; 0x3c
- 802768e: 9a0b ldr r2, [sp, #44] ; 0x2c
- 8027690: 4449 add r1, r9
- 8027692: 3102 adds r1, #2
- 8027694: 1e50 subs r0, r2, #1
- 8027696: 428a cmp r2, r1
- 8027698: 900b str r0, [sp, #44] ; 0x2c
- 802769a: dcf3 bgt.n 8027684 <tfp_format+0x348>
- {
- putf(putp, ' ');
- }
- if (sign == 1)
- 802769c: f1bb 0f01 cmp.w fp, #1
- 80276a0: d102 bne.n 80276a8 <tfp_format+0x36c>
- putf(putp, '-');
- 80276a2: 4628 mov r0, r5
- 80276a4: 212d movs r1, #45 ; 0x2d
- 80276a6: e004 b.n 80276b2 <tfp_format+0x376>
- else if (sign == 2)
- 80276a8: f1bb 0f02 cmp.w fp, #2
- 80276ac: d102 bne.n 80276b4 <tfp_format+0x378>
- putf(putp, '+');
- 80276ae: 4628 mov r0, r5
- 80276b0: 212b movs r1, #43 ; 0x2b
- 80276b2: 47b0 blx r6
- }
- if (fiter == -1)
- 80276b4: f1b9 3fff cmp.w r9, #4294967295
- 80276b8: d102 bne.n 80276c0 <tfp_format+0x384>
- putf(putp, '0');
- 80276ba: 4628 mov r0, r5
- 80276bc: 2130 movs r1, #48 ; 0x30
- 80276be: e007 b.n 80276d0 <tfp_format+0x394>
- while (fiter > -1)
- {
- putf(putp, '0' + (temp_buffer[fiter--]));
- 80276c0: ab10 add r3, sp, #64 ; 0x40
- 80276c2: 4628 mov r0, r5
- 80276c4: f853 1029 ldr.w r1, [r3, r9, lsl #2]
- 80276c8: 3130 adds r1, #48 ; 0x30
- 80276ca: f109 39ff add.w r9, r9, #4294967295
- 80276ce: b2c9 uxtb r1, r1
- 80276d0: 47b0 blx r6
- }
- if (fiter == -1)
- putf(putp, '0');
- while (fiter > -1)
- 80276d2: f1b9 3fff cmp.w r9, #4294967295
- 80276d6: d1f3 bne.n 80276c0 <tfp_format+0x384>
- {
- putf(putp, '0' + (temp_buffer[fiter--]));
- }
- putf(putp, '.');
- 80276d8: 4628 mov r0, r5
- 80276da: 212e movs r1, #46 ; 0x2e
- 80276dc: 47b0 blx r6
- ffactor = 1;
- 80276de: f04f 0901 mov.w r9, #1
- while (p.prec-- > 0)
- 80276e2: e01d b.n 8027720 <tfp_format+0x3e4>
- {
- ffactor *= 10;
- 80276e4: 230a movs r3, #10
- fpart = (int)((fval - (int)fval)*ffactor);
- 80276e6: 9801 ldr r0, [sp, #4]
- putf(putp, '.');
- ffactor = 1;
- while (p.prec-- > 0)
- {
- ffactor *= 10;
- 80276e8: fb03 f909 mul.w r9, r3, r9
- fpart = (int)((fval - (int)fval)*ffactor);
- 80276ec: f7f8 ff02 bl 80204f4 <__aeabi_i2d>
- 80276f0: 4602 mov r2, r0
- 80276f2: 460b mov r3, r1
- 80276f4: 9800 ldr r0, [sp, #0]
- 80276f6: 4651 mov r1, sl
- 80276f8: f7f8 fdae bl 8020258 <__aeabi_dsub>
- 80276fc: e9cd 0102 strd r0, r1, [sp, #8]
- 8027700: 4648 mov r0, r9
- 8027702: f7f8 fef7 bl 80204f4 <__aeabi_i2d>
- 8027706: 4602 mov r2, r0
- 8027708: 460b mov r3, r1
- 802770a: e9dd 0102 ldrd r0, r1, [sp, #8]
- 802770e: f7f8 ff57 bl 80205c0 <__aeabi_dmul>
- 8027712: f7f9 f9ef bl 8020af4 <__aeabi_d2iz>
- if (fpart == 0)
- 8027716: 4680 mov r8, r0
- 8027718: b910 cbnz r0, 8027720 <tfp_format+0x3e4>
- putf(putp, '0');
- 802771a: 4628 mov r0, r5
- 802771c: 2130 movs r1, #48 ; 0x30
- 802771e: 47b0 blx r6
- putf(putp, '0' + (temp_buffer[fiter--]));
- }
- putf(putp, '.');
- ffactor = 1;
- while (p.prec-- > 0)
- 8027720: f89d 303c ldrb.w r3, [sp, #60] ; 0x3c
- 8027724: 1e5a subs r2, r3, #1
- 8027726: f88d 203c strb.w r2, [sp, #60] ; 0x3c
- 802772a: 2b00 cmp r3, #0
- 802772c: d1da bne.n 80276e4 <tfp_format+0x3a8>
- putf(putp, '0');
- }
- fiter = 0;
- while (fpart != 0)
- {
- temp_buffer[fiter++] = fpart % 10;
- 802772e: 220a movs r2, #10
- 8027730: e008 b.n 8027744 <tfp_format+0x408>
- 8027732: fb98 f1f2 sdiv r1, r8, r2
- 8027736: a810 add r0, sp, #64 ; 0x40
- 8027738: fb02 8811 mls r8, r2, r1, r8
- 802773c: f840 8023 str.w r8, [r0, r3, lsl #2]
- 8027740: 3301 adds r3, #1
- fpart = fpart / 10;
- 8027742: 4688 mov r8, r1
- fpart = (int)((fval - (int)fval)*ffactor);
- if (fpart == 0)
- putf(putp, '0');
- }
- fiter = 0;
- while (fpart != 0)
- 8027744: f1b8 0f00 cmp.w r8, #0
- 8027748: d1f3 bne.n 8027732 <tfp_format+0x3f6>
- 802774a: 4698 mov r8, r3
- temp_buffer[fiter++] = fpart % 10;
- fpart = fpart / 10;
- }
- fiter--;
- while (fiter > -1)
- 802774c: e006 b.n 802775c <tfp_format+0x420>
- {
- putf(putp, '0' + (temp_buffer[fiter--]));
- 802774e: ab10 add r3, sp, #64 ; 0x40
- 8027750: 4628 mov r0, r5
- 8027752: f853 1028 ldr.w r1, [r3, r8, lsl #2]
- 8027756: 3130 adds r1, #48 ; 0x30
- 8027758: b2c9 uxtb r1, r1
- 802775a: 47b0 blx r6
- temp_buffer[fiter++] = fpart % 10;
- fpart = fpart / 10;
- }
- fiter--;
- while (fiter > -1)
- 802775c: f118 38ff adds.w r8, r8, #4294967295
- 8027760: d2f5 bcs.n 802774e <tfp_format+0x412>
- char bf[12]; /* int = 32b on some architectures */
- #endif
- char ch;
- p.bf = bf;
- while ((ch = *(fmt++))) {
- 8027762: f817 1b01 ldrb.w r1, [r7], #1
- 8027766: 2900 cmp r1, #0
- 8027768: f47f adf2 bne.w 8027350 <tfp_format+0x14>
- 802776c: e003 b.n 8027776 <tfp_format+0x43a>
- {
- const char *p = *src;
- unsigned int num = 0;
- int digit;
- while ((digit = a2d(ch)) >= 0) {
- if (digit > base)
- 802776e: 2b0a cmp r3, #10
- 8027770: f77f ae32 ble.w 80273d8 <tfp_format+0x9c>
- 8027774: e64c b.n 8027410 <tfp_format+0xd4>
- break;
- }
- }
- }
- abort:;
- }
- 8027776: b01b add sp, #108 ; 0x6c
- 8027778: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 0802777c <tfp_printf>:
- stdout_putf = putf;
- stdout_putp = putp;
- }
- void tfp_printf(char *fmt, ...)
- {
- 802777c: b40f push {r0, r1, r2, r3}
- 802777e: b507 push {r0, r1, r2, lr}
- va_list va;
- va_start(va, fmt);
- tfp_format(stdout_putp, stdout_putf, fmt, va);
- 8027780: 4906 ldr r1, [pc, #24] ; (802779c <tfp_printf+0x20>)
- stdout_putf = putf;
- stdout_putp = putp;
- }
- void tfp_printf(char *fmt, ...)
- {
- 8027782: ab04 add r3, sp, #16
- va_list va;
- va_start(va, fmt);
- tfp_format(stdout_putp, stdout_putf, fmt, va);
- 8027784: 6808 ldr r0, [r1, #0]
- 8027786: 4906 ldr r1, [pc, #24] ; (80277a0 <tfp_printf+0x24>)
- stdout_putf = putf;
- stdout_putp = putp;
- }
- void tfp_printf(char *fmt, ...)
- {
- 8027788: f853 2b04 ldr.w r2, [r3], #4
- va_list va;
- va_start(va, fmt);
- tfp_format(stdout_putp, stdout_putf, fmt, va);
- 802778c: 6809 ldr r1, [r1, #0]
- }
- void tfp_printf(char *fmt, ...)
- {
- va_list va;
- va_start(va, fmt);
- 802778e: 9301 str r3, [sp, #4]
- tfp_format(stdout_putp, stdout_putf, fmt, va);
- 8027790: f7ff fdd4 bl 802733c <tfp_format>
- va_end(va);
- }
- 8027794: e8bd 400e ldmia.w sp!, {r1, r2, r3, lr}
- 8027798: b004 add sp, #16
- 802779a: 4770 bx lr
- 802779c: 20000b14 .word 0x20000b14
- 80277a0: 20000b10 .word 0x20000b10
- 080277a4 <tfp_vsnprintf>:
- data->dest[data->num_chars] = c;
- data->num_chars ++;
- }
- int tfp_vsnprintf(char *str, size_t size, const char *format, va_list ap)
- {
- 80277a4: b51f push {r0, r1, r2, r3, r4, lr}
- 80277a6: 2400 movs r4, #0
- struct _vsnprintf_putcf_data data;
- if (size < 1)
- 80277a8: b181 cbz r1, 80277cc <tfp_vsnprintf+0x28>
- return 0;
- data.dest = str;
- data.dest_capacity = size-1;
- 80277aa: 3901 subs r1, #1
- struct _vsnprintf_putcf_data data;
- if (size < 1)
- return 0;
- data.dest = str;
- 80277ac: 9002 str r0, [sp, #8]
- data.dest_capacity = size-1;
- 80277ae: 9101 str r1, [sp, #4]
- data.num_chars = 0;
- tfp_format(&data, _vsnprintf_putcf, format, ap);
- 80277b0: a801 add r0, sp, #4
- 80277b2: 4908 ldr r1, [pc, #32] ; (80277d4 <tfp_vsnprintf+0x30>)
- if (size < 1)
- return 0;
- data.dest = str;
- data.dest_capacity = size-1;
- data.num_chars = 0;
- 80277b4: 9403 str r4, [sp, #12]
- tfp_format(&data, _vsnprintf_putcf, format, ap);
- 80277b6: f7ff fdc1 bl 802733c <tfp_format>
- if (data.num_chars < data.dest_capacity)
- 80277ba: 9903 ldr r1, [sp, #12]
- 80277bc: 9b01 ldr r3, [sp, #4]
- 80277be: 9a02 ldr r2, [sp, #8]
- 80277c0: 4299 cmp r1, r3
- data.dest[data.num_chars] = '\0';
- 80277c2: bf34 ite cc
- 80277c4: 5454 strbcc r4, [r2, r1]
- else
- data.dest[data.dest_capacity] = '\0';
- 80277c6: 54d4 strbcs r4, [r2, r3]
- return data.num_chars;
- 80277c8: 9803 ldr r0, [sp, #12]
- 80277ca: e000 b.n 80277ce <tfp_vsnprintf+0x2a>
- int tfp_vsnprintf(char *str, size_t size, const char *format, va_list ap)
- {
- struct _vsnprintf_putcf_data data;
- if (size < 1)
- return 0;
- 80277cc: 4608 mov r0, r1
- data.dest[data.num_chars] = '\0';
- else
- data.dest[data.dest_capacity] = '\0';
- return data.num_chars;
- }
- 80277ce: b004 add sp, #16
- 80277d0: bd10 pop {r4, pc}
- 80277d2: bf00 nop
- 80277d4: 0802731d .word 0x0802731d
- 080277d8 <tfp_snprintf>:
- int tfp_snprintf(char *str, size_t size, const char *format, ...)
- {
- 80277d8: b40c push {r2, r3}
- 80277da: b507 push {r0, r1, r2, lr}
- 80277dc: ab04 add r3, sp, #16
- 80277de: f853 2b04 ldr.w r2, [r3], #4
- va_list ap;
- int retval;
- va_start(ap, format);
- 80277e2: 9301 str r3, [sp, #4]
- retval = tfp_vsnprintf(str, size, format, ap);
- 80277e4: f7ff ffde bl 80277a4 <tfp_vsnprintf>
- va_end(ap);
- return retval;
- }
- 80277e8: e8bd 400e ldmia.w sp!, {r1, r2, r3, lr}
- 80277ec: b002 add sp, #8
- 80277ee: 4770 bx lr
- 080277f0 <tfp_vsprintf>:
- struct _vsprintf_putcf_data *data = (struct _vsprintf_putcf_data*)p;
- data->dest[data->num_chars++] = c;
- }
- int tfp_vsprintf(char *str, const char *format, va_list ap)
- {
- 80277f0: b537 push {r0, r1, r2, r4, r5, lr}
- 80277f2: 460d mov r5, r1
- 80277f4: 4613 mov r3, r2
- struct _vsprintf_putcf_data data;
- data.dest = str;
- 80277f6: 9000 str r0, [sp, #0]
- data.num_chars = 0;
- 80277f8: 2400 movs r4, #0
- tfp_format(&data, _vsprintf_putcf, format, ap);
- 80277fa: 4668 mov r0, sp
- 80277fc: 462a mov r2, r5
- 80277fe: 4904 ldr r1, [pc, #16] ; (8027810 <tfp_vsprintf+0x20>)
- int tfp_vsprintf(char *str, const char *format, va_list ap)
- {
- struct _vsprintf_putcf_data data;
- data.dest = str;
- data.num_chars = 0;
- 8027800: 9401 str r4, [sp, #4]
- tfp_format(&data, _vsprintf_putcf, format, ap);
- 8027802: f7ff fd9b bl 802733c <tfp_format>
- data.dest[data.num_chars] = '\0';
- 8027806: e89d 000c ldmia.w sp, {r2, r3}
- 802780a: 54d4 strb r4, [r2, r3]
- return data.num_chars;
- }
- 802780c: 9801 ldr r0, [sp, #4]
- 802780e: bd3e pop {r1, r2, r3, r4, r5, pc}
- 8027810: 08027331 .word 0x08027331
- 08027814 <tfp_sprintf>:
- int tfp_sprintf(char *str, const char *format, ...)
- {
- 8027814: b40e push {r1, r2, r3}
- 8027816: b503 push {r0, r1, lr}
- 8027818: aa03 add r2, sp, #12
- 802781a: f852 1b04 ldr.w r1, [r2], #4
- va_list ap;
- int retval;
- va_start(ap, format);
- 802781e: 9201 str r2, [sp, #4]
- retval = tfp_vsprintf(str, format, ap);
- 8027820: f7ff ffe6 bl 80277f0 <tfp_vsprintf>
- va_end(ap);
- return retval;
- }
- 8027824: e8bd 400c ldmia.w sp!, {r2, r3, lr}
- 8027828: b003 add sp, #12
- 802782a: 4770 bx lr
- 0802782c <GetInputFreqStr>:
- /**
- * @brief
- */
- void GetInputFreqStr(char *str, uint8_t *len)
- {
- 802782c: b538 push {r3, r4, r5, lr}
- sprintf(str, "%0.1f", UPS.Freq_in);
- 802782e: 4b08 ldr r3, [pc, #32] ; (8027850 <GetInputFreqStr+0x24>)
- /**
- * @brief
- */
- void GetInputFreqStr(char *str, uint8_t *len)
- {
- 8027830: 4604 mov r4, r0
- sprintf(str, "%0.1f", UPS.Freq_in);
- 8027832: 6818 ldr r0, [r3, #0]
- /**
- * @brief
- */
- void GetInputFreqStr(char *str, uint8_t *len)
- {
- 8027834: 460d mov r5, r1
- sprintf(str, "%0.1f", UPS.Freq_in);
- 8027836: f7f8 fe6f bl 8020518 <__aeabi_f2d>
- 802783a: 4602 mov r2, r0
- 802783c: 460b mov r3, r1
- 802783e: 4620 mov r0, r4
- 8027840: 4904 ldr r1, [pc, #16] ; (8027854 <GetInputFreqStr+0x28>)
- 8027842: f7ff ffe7 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027846: 4620 mov r0, r4
- 8027848: f7fa fb32 bl 8021eb0 <strlen>
- 802784c: 7028 strb r0, [r5, #0]
- 802784e: bd38 pop {r3, r4, r5, pc}
- 8027850: 2000cba8 .word 0x2000cba8
- 8027854: 080399a3 .word 0x080399a3
- 08027858 <GetOutputFreqStr>:
- /**
- * @brief
- */
- void GetOutputFreqStr(char *str, uint8_t *len)
- {
- 8027858: b538 push {r3, r4, r5, lr}
- sprintf(str, "%0.1f", UPS.Freq_in);
- 802785a: 4b08 ldr r3, [pc, #32] ; (802787c <GetOutputFreqStr+0x24>)
- /**
- * @brief
- */
- void GetOutputFreqStr(char *str, uint8_t *len)
- {
- 802785c: 4604 mov r4, r0
- sprintf(str, "%0.1f", UPS.Freq_in);
- 802785e: 6818 ldr r0, [r3, #0]
- /**
- * @brief
- */
- void GetOutputFreqStr(char *str, uint8_t *len)
- {
- 8027860: 460d mov r5, r1
- sprintf(str, "%0.1f", UPS.Freq_in);
- 8027862: f7f8 fe59 bl 8020518 <__aeabi_f2d>
- 8027866: 4602 mov r2, r0
- 8027868: 460b mov r3, r1
- 802786a: 4620 mov r0, r4
- 802786c: 4904 ldr r1, [pc, #16] ; (8027880 <GetOutputFreqStr+0x28>)
- 802786e: f7ff ffd1 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027872: 4620 mov r0, r4
- 8027874: f7fa fb1c bl 8021eb0 <strlen>
- 8027878: 7028 strb r0, [r5, #0]
- 802787a: bd38 pop {r3, r4, r5, pc}
- 802787c: 2000cba8 .word 0x2000cba8
- 8027880: 080399a3 .word 0x080399a3
- 08027884 <GetInputVoltageStr>:
- /**
- * @brief
- */
- void GetInputVoltageStr(char *str, uint8_t *len)
- {
- 8027884: b538 push {r3, r4, r5, lr}
- sprintf(str, "%0.1f", UPS.VAC_in);
- 8027886: 4b08 ldr r3, [pc, #32] ; (80278a8 <GetInputVoltageStr+0x24>)
- /**
- * @brief
- */
- void GetInputVoltageStr(char *str, uint8_t *len)
- {
- 8027888: 4604 mov r4, r0
- sprintf(str, "%0.1f", UPS.VAC_in);
- 802788a: 6858 ldr r0, [r3, #4]
- /**
- * @brief
- */
- void GetInputVoltageStr(char *str, uint8_t *len)
- {
- 802788c: 460d mov r5, r1
- sprintf(str, "%0.1f", UPS.VAC_in);
- 802788e: f7f8 fe43 bl 8020518 <__aeabi_f2d>
- 8027892: 4602 mov r2, r0
- 8027894: 460b mov r3, r1
- 8027896: 4620 mov r0, r4
- 8027898: 4904 ldr r1, [pc, #16] ; (80278ac <GetInputVoltageStr+0x28>)
- 802789a: f7ff ffbb bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 802789e: 4620 mov r0, r4
- 80278a0: f7fa fb06 bl 8021eb0 <strlen>
- 80278a4: 7028 strb r0, [r5, #0]
- 80278a6: bd38 pop {r3, r4, r5, pc}
- 80278a8: 2000cba8 .word 0x2000cba8
- 80278ac: 080399a3 .word 0x080399a3
- 080278b0 <GetOutputVoltageStr>:
- /**
- * @brief
- */
- void GetOutputVoltageStr(char *str, uint8_t *len)
- {
- 80278b0: b538 push {r3, r4, r5, lr}
- sprintf(str, "%0.1f", UPS.VAC_out);
- 80278b2: 4b08 ldr r3, [pc, #32] ; (80278d4 <GetOutputVoltageStr+0x24>)
- /**
- * @brief
- */
- void GetOutputVoltageStr(char *str, uint8_t *len)
- {
- 80278b4: 4604 mov r4, r0
- sprintf(str, "%0.1f", UPS.VAC_out);
- 80278b6: 6898 ldr r0, [r3, #8]
- /**
- * @brief
- */
- void GetOutputVoltageStr(char *str, uint8_t *len)
- {
- 80278b8: 460d mov r5, r1
- sprintf(str, "%0.1f", UPS.VAC_out);
- 80278ba: f7f8 fe2d bl 8020518 <__aeabi_f2d>
- 80278be: 4602 mov r2, r0
- 80278c0: 460b mov r3, r1
- 80278c2: 4620 mov r0, r4
- 80278c4: 4904 ldr r1, [pc, #16] ; (80278d8 <GetOutputVoltageStr+0x28>)
- 80278c6: f7ff ffa5 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 80278ca: 4620 mov r0, r4
- 80278cc: f7fa faf0 bl 8021eb0 <strlen>
- 80278d0: 7028 strb r0, [r5, #0]
- 80278d2: bd38 pop {r3, r4, r5, pc}
- 80278d4: 2000cba8 .word 0x2000cba8
- 80278d8: 080399a3 .word 0x080399a3
- 080278dc <GetPowerStr>:
- /**
- * @brief
- */
- void GetPowerStr(char *str, uint8_t *len)
- {
- 80278dc: b538 push {r3, r4, r5, lr}
- sprintf(str, "%d", UPS.Load);
- 80278de: 4b06 ldr r3, [pc, #24] ; (80278f8 <GetPowerStr+0x1c>)
- /**
- * @brief
- */
- void GetPowerStr(char *str, uint8_t *len)
- {
- 80278e0: 4605 mov r5, r0
- 80278e2: 460c mov r4, r1
- sprintf(str, "%d", UPS.Load);
- 80278e4: 7c1a ldrb r2, [r3, #16]
- 80278e6: 4905 ldr r1, [pc, #20] ; (80278fc <GetPowerStr+0x20>)
- 80278e8: f7ff ff94 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 80278ec: 4628 mov r0, r5
- 80278ee: f7fa fadf bl 8021eb0 <strlen>
- 80278f2: 7020 strb r0, [r4, #0]
- 80278f4: bd38 pop {r3, r4, r5, pc}
- 80278f6: bf00 nop
- 80278f8: 2000cba8 .word 0x2000cba8
- 80278fc: 080399a9 .word 0x080399a9
- 08027900 <GetBatCapacityStr>:
- /**
- * @brief
- */
- void GetBatCapacityStr(char *str, uint8_t *len)
- {
- 8027900: b538 push {r3, r4, r5, lr}
- sprintf(str, "%d", UPS.SOC);
- 8027902: 4b06 ldr r3, [pc, #24] ; (802791c <GetBatCapacityStr+0x1c>)
- /**
- * @brief
- */
- void GetBatCapacityStr(char *str, uint8_t *len)
- {
- 8027904: 4605 mov r5, r0
- 8027906: 460c mov r4, r1
- sprintf(str, "%d", UPS.SOC);
- 8027908: 7c5a ldrb r2, [r3, #17]
- 802790a: 4905 ldr r1, [pc, #20] ; (8027920 <GetBatCapacityStr+0x20>)
- 802790c: f7ff ff82 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027910: 4628 mov r0, r5
- 8027912: f7fa facd bl 8021eb0 <strlen>
- 8027916: 7020 strb r0, [r4, #0]
- 8027918: bd38 pop {r3, r4, r5, pc}
- 802791a: bf00 nop
- 802791c: 2000cba8 .word 0x2000cba8
- 8027920: 080399a9 .word 0x080399a9
- 08027924 <GetRuntimeStr>:
- /**
- * @brief
- */
- void GetRuntimeStr(char *str, uint8_t *len)
- {
- 8027924: b538 push {r3, r4, r5, lr}
- sprintf(str, "%d", UPS.work_time);
- 8027926: 4b06 ldr r3, [pc, #24] ; (8027940 <GetRuntimeStr+0x1c>)
- /**
- * @brief
- */
- void GetRuntimeStr(char *str, uint8_t *len)
- {
- 8027928: 4605 mov r5, r0
- 802792a: 460c mov r4, r1
- sprintf(str, "%d", UPS.work_time);
- 802792c: 7c9a ldrb r2, [r3, #18]
- 802792e: 4905 ldr r1, [pc, #20] ; (8027944 <GetRuntimeStr+0x20>)
- 8027930: f7ff ff70 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027934: 4628 mov r0, r5
- 8027936: f7fa fabb bl 8021eb0 <strlen>
- 802793a: 7020 strb r0, [r4, #0]
- 802793c: bd38 pop {r3, r4, r5, pc}
- 802793e: bf00 nop
- 8027940: 2000cba8 .word 0x2000cba8
- 8027944: 080399a9 .word 0x080399a9
- 08027948 <GetInternalTempStr>:
- /**
- * @brief
- */
- void GetInternalTempStr(char *str, uint8_t *len)
- {
- 8027948: b538 push {r3, r4, r5, lr}
- sprintf(str, "%0.1f", UPS.Temp);
- 802794a: 4b08 ldr r3, [pc, #32] ; (802796c <GetInternalTempStr+0x24>)
- /**
- * @brief
- */
- void GetInternalTempStr(char *str, uint8_t *len)
- {
- 802794c: 4604 mov r4, r0
- sprintf(str, "%0.1f", UPS.Temp);
- 802794e: 68d8 ldr r0, [r3, #12]
- /**
- * @brief
- */
- void GetInternalTempStr(char *str, uint8_t *len)
- {
- 8027950: 460d mov r5, r1
- sprintf(str, "%0.1f", UPS.Temp);
- 8027952: f7f8 fde1 bl 8020518 <__aeabi_f2d>
- 8027956: 4602 mov r2, r0
- 8027958: 460b mov r3, r1
- 802795a: 4620 mov r0, r4
- 802795c: 4904 ldr r1, [pc, #16] ; (8027970 <GetInternalTempStr+0x28>)
- 802795e: f7ff ff59 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027962: 4620 mov r0, r4
- 8027964: f7fa faa4 bl 8021eb0 <strlen>
- 8027968: 7028 strb r0, [r5, #0]
- 802796a: bd38 pop {r3, r4, r5, pc}
- 802796c: 2000cba8 .word 0x2000cba8
- 8027970: 080399a3 .word 0x080399a3
- 08027974 <GetAlarmMonitorStr>:
- /**
- * @brief
- */
- void GetAlarmMonitorStr(char *str, uint8_t *len)
- {
- 8027974: b538 push {r3, r4, r5, lr}
- sprintf(str, "%d", UPS.Alarm);
- 8027976: 4b06 ldr r3, [pc, #24] ; (8027990 <GetAlarmMonitorStr+0x1c>)
- /**
- * @brief
- */
- void GetAlarmMonitorStr(char *str, uint8_t *len)
- {
- 8027978: 4605 mov r5, r0
- 802797a: 460c mov r4, r1
- sprintf(str, "%d", UPS.Alarm);
- 802797c: 7d1a ldrb r2, [r3, #20]
- 802797e: 4905 ldr r1, [pc, #20] ; (8027994 <GetAlarmMonitorStr+0x20>)
- 8027980: f7ff ff48 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027984: 4628 mov r0, r5
- 8027986: f7fa fa93 bl 8021eb0 <strlen>
- 802798a: 7020 strb r0, [r4, #0]
- 802798c: bd38 pop {r3, r4, r5, pc}
- 802798e: bf00 nop
- 8027990: 2000cba8 .word 0x2000cba8
- 8027994: 080399a9 .word 0x080399a9
- 08027998 <GetConnectMonitorStr>:
- /**
- * @brief
- */
- void GetConnectMonitorStr(char *str, uint8_t *len)
- {
- 8027998: b538 push {r3, r4, r5, lr}
- if(UPS.Present)
- 802799a: 4b08 ldr r3, [pc, #32] ; (80279bc <GetConnectMonitorStr+0x24>)
- 802799c: f893 302c ldrb.w r3, [r3, #44] ; 0x2c
- /**
- * @brief
- */
- void GetConnectMonitorStr(char *str, uint8_t *len)
- {
- 80279a0: 4605 mov r5, r0
- 80279a2: 460c mov r4, r1
- if(UPS.Present)
- 80279a4: b10b cbz r3, 80279aa <GetConnectMonitorStr+0x12>
- strcpy(str, "0");
- 80279a6: 4906 ldr r1, [pc, #24] ; (80279c0 <GetConnectMonitorStr+0x28>)
- 80279a8: e000 b.n 80279ac <GetConnectMonitorStr+0x14>
- else
- strcpy(str, "1");
- 80279aa: 4906 ldr r1, [pc, #24] ; (80279c4 <GetConnectMonitorStr+0x2c>)
- 80279ac: f7fa fa22 bl 8021df4 <strcpy>
- *len = strlen(str);
- 80279b0: 4628 mov r0, r5
- 80279b2: f7fa fa7d bl 8021eb0 <strlen>
- 80279b6: 7020 strb r0, [r4, #0]
- 80279b8: bd38 pop {r3, r4, r5, pc}
- 80279ba: bf00 nop
- 80279bc: 2000cba8 .word 0x2000cba8
- 80279c0: 08039a51 .word 0x08039a51
- 80279c4: 08039cb4 .word 0x08039cb4
- 080279c8 <GetAlarmStr>:
- /**
- * @brief Индикация аварийных ситуаций
- */
- void GetAlarmStr(char *str, uint8_t *len)
- {
- 80279c8: b538 push {r3, r4, r5, lr}
- sprintf(str, "%d", UPS.Status);
- 80279ca: 4b06 ldr r3, [pc, #24] ; (80279e4 <GetAlarmStr+0x1c>)
- /**
- * @brief Индикация аварийных ситуаций
- */
- void GetAlarmStr(char *str, uint8_t *len)
- {
- 80279cc: 4605 mov r5, r0
- 80279ce: 460c mov r4, r1
- sprintf(str, "%d", UPS.Status);
- 80279d0: 7cda ldrb r2, [r3, #19]
- 80279d2: 4905 ldr r1, [pc, #20] ; (80279e8 <GetAlarmStr+0x20>)
- 80279d4: f7ff ff1e bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 80279d8: 4628 mov r0, r5
- 80279da: f7fa fa69 bl 8021eb0 <strlen>
- 80279de: 7020 strb r0, [r4, #0]
- 80279e0: bd38 pop {r3, r4, r5, pc}
- 80279e2: bf00 nop
- 80279e4: 2000cba8 .word 0x2000cba8
- 80279e8: 080399a9 .word 0x080399a9
- 080279ec <GetDateStr>:
- /**
- * @brief Дата (Ready for PRS!)
- */
- void GetDateStr(char *str, uint8_t *len)
- {
- 80279ec: b530 push {r4, r5, lr}
- 80279ee: b087 sub sp, #28
- 80279f0: 4604 mov r4, r0
- 80279f2: 460d mov r5, r1
- TM_RTC_t data;
- uint16_t sys_year ;
- TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
- 80279f4: a802 add r0, sp, #8
- 80279f6: 2100 movs r1, #0
- 80279f8: f7fe fd46 bl 8026488 <TM_RTC_GetDateTime>
- sys_year = 2000 + data.year;
- sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date);
- 80279fc: f89d 100f ldrb.w r1, [sp, #15]
- {
- TM_RTC_t data;
- uint16_t sys_year ;
- TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
- sys_year = 2000 + data.year;
- 8027a00: f89d 2011 ldrb.w r2, [sp, #17]
- sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date);
- 8027a04: f89d 3010 ldrb.w r3, [sp, #16]
- 8027a08: 9100 str r1, [sp, #0]
- 8027a0a: f502 62fa add.w r2, r2, #2000 ; 0x7d0
- 8027a0e: 4905 ldr r1, [pc, #20] ; (8027a24 <GetDateStr+0x38>)
- 8027a10: 4620 mov r0, r4
- 8027a12: f7ff feff bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027a16: 4620 mov r0, r4
- 8027a18: f7fa fa4a bl 8021eb0 <strlen>
- 8027a1c: 7028 strb r0, [r5, #0]
- }
- 8027a1e: b007 add sp, #28
- 8027a20: bd30 pop {r4, r5, pc}
- 8027a22: bf00 nop
- 8027a24: 080399ac .word 0x080399ac
- 08027a28 <GetTimeStr>:
- /**
- * @brief Время (Ready for PRS!)
- */
- void GetTimeStr(char *str, uint8_t *len)
- {
- 8027a28: b530 push {r4, r5, lr}
- 8027a2a: b085 sub sp, #20
- 8027a2c: 4604 mov r4, r0
- 8027a2e: 460d mov r5, r1
- TM_RTC_t data;
- TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
- 8027a30: 4668 mov r0, sp
- 8027a32: 2100 movs r1, #0
- 8027a34: f7fe fd28 bl 8026488 <TM_RTC_GetDateTime>
- sprintf(str, "%02i:%02i", data.hours, data.minutes);
- 8027a38: 4906 ldr r1, [pc, #24] ; (8027a54 <GetTimeStr+0x2c>)
- 8027a3a: f89d 2005 ldrb.w r2, [sp, #5]
- 8027a3e: f89d 3004 ldrb.w r3, [sp, #4]
- 8027a42: 4620 mov r0, r4
- 8027a44: f7ff fee6 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027a48: 4620 mov r0, r4
- 8027a4a: f7fa fa31 bl 8021eb0 <strlen>
- 8027a4e: 7028 strb r0, [r5, #0]
- }
- 8027a50: b005 add sp, #20
- 8027a52: bd30 pop {r4, r5, pc}
- 8027a54: 080399f5 .word 0x080399f5
- 08027a58 <GetUnixTimeStr>:
- /**
- * @brief Время (Ready for PRS!)
- */
- void GetUnixTimeStr(char *str, uint8_t *len)
- {
- 8027a58: b530 push {r4, r5, lr}
- 8027a5a: b085 sub sp, #20
- 8027a5c: 4604 mov r4, r0
- 8027a5e: 460d mov r5, r1
- TM_RTC_t data;
- TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
- 8027a60: 4668 mov r0, sp
- 8027a62: 2100 movs r1, #0
- 8027a64: f7fe fd10 bl 8026488 <TM_RTC_GetDateTime>
- sprintf(str, "%d", data.unix);
- 8027a68: 4905 ldr r1, [pc, #20] ; (8027a80 <GetUnixTimeStr+0x28>)
- 8027a6a: 9a03 ldr r2, [sp, #12]
- 8027a6c: 4620 mov r0, r4
- 8027a6e: f7ff fed1 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027a72: 4620 mov r0, r4
- 8027a74: f7fa fa1c bl 8021eb0 <strlen>
- 8027a78: 7028 strb r0, [r5, #0]
- }
- 8027a7a: b005 add sp, #20
- 8027a7c: bd30 pop {r4, r5, pc}
- 8027a7e: bf00 nop
- 8027a80: 080399a9 .word 0x080399a9
- 08027a84 <GetSntpStateStr>:
- /**
- * @brief Состояние SNTP (Ready for PRS!)
- */
- void GetSntpStateStr(char *str, uint8_t *len)
- {
- 8027a84: b538 push {r3, r4, r5, lr}
- if (sSettings.sSNTP.sntpEnable)
- 8027a86: 4b08 ldr r3, [pc, #32] ; (8027aa8 <GetSntpStateStr+0x24>)
- 8027a88: f893 3340 ldrb.w r3, [r3, #832] ; 0x340
- /**
- * @brief Состояние SNTP (Ready for PRS!)
- */
- void GetSntpStateStr(char *str, uint8_t *len)
- {
- 8027a8c: 460c mov r4, r1
- 8027a8e: 4605 mov r5, r0
- if (sSettings.sSNTP.sntpEnable)
- {
- sprintf(str, "%s", "1"); //авто
- 8027a90: 4906 ldr r1, [pc, #24] ; (8027aac <GetSntpStateStr+0x28>)
- /**
- * @brief Состояние SNTP (Ready for PRS!)
- */
- void GetSntpStateStr(char *str, uint8_t *len)
- {
- if (sSettings.sSNTP.sntpEnable)
- 8027a92: b10b cbz r3, 8027a98 <GetSntpStateStr+0x14>
- {
- sprintf(str, "%s", "1"); //авто
- 8027a94: 4a06 ldr r2, [pc, #24] ; (8027ab0 <GetSntpStateStr+0x2c>)
- 8027a96: e000 b.n 8027a9a <GetSntpStateStr+0x16>
- *len = strlen(str);
- }
- else
- {
- sprintf(str, "%s", "0"); //ручной
- 8027a98: 4a06 ldr r2, [pc, #24] ; (8027ab4 <GetSntpStateStr+0x30>)
- 8027a9a: f7ff febb bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027a9e: 4628 mov r0, r5
- 8027aa0: f7fa fa06 bl 8021eb0 <strlen>
- 8027aa4: 7020 strb r0, [r4, #0]
- 8027aa6: bd38 pop {r3, r4, r5, pc}
- 8027aa8: 2000cfc4 .word 0x2000cfc4
- 8027aac: 080399bb .word 0x080399bb
- 8027ab0: 08039cb4 .word 0x08039cb4
- 8027ab4: 08039a51 .word 0x08039a51
- 08027ab8 <GetSntpServerIpStr>:
- /**
- * @brief IP адрес SNTP сервера (Ready for PRS!)
- */
- void GetSntpServerIpStr(char *str, uint8_t *len)
- {
- 8027ab8: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sSNTP.ip);
- 8027aba: 4a05 ldr r2, [pc, #20] ; (8027ad0 <GetSntpServerIpStr+0x18>)
- /**
- * @brief IP адрес SNTP сервера (Ready for PRS!)
- */
- void GetSntpServerIpStr(char *str, uint8_t *len)
- {
- 8027abc: 4605 mov r5, r0
- 8027abe: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sSNTP.ip);
- 8027ac0: 4904 ldr r1, [pc, #16] ; (8027ad4 <GetSntpServerIpStr+0x1c>)
- 8027ac2: f7ff fea7 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027ac6: 4628 mov r0, r5
- 8027ac8: f7fa f9f2 bl 8021eb0 <strlen>
- 8027acc: 7020 strb r0, [r4, #0]
- 8027ace: bd38 pop {r3, r4, r5, pc}
- 8027ad0: 2000d305 .word 0x2000d305
- 8027ad4: 080399bb .word 0x080399bb
- 08027ad8 <GetSntpTimeZoneStr>:
- /**
- * @brief Часовой пояс контроллера (Ready for PRS!)
- */
- void GetSntpTimeZoneStr(char *str, uint8_t *len)
- {
- 8027ad8: b538 push {r3, r4, r5, lr}
- sprintf(str, "%0.1f", sSettings.sSNTP.timeZone);
- 8027ada: 4b09 ldr r3, [pc, #36] ; (8027b00 <GetSntpTimeZoneStr+0x28>)
- /**
- * @brief Часовой пояс контроллера (Ready for PRS!)
- */
- void GetSntpTimeZoneStr(char *str, uint8_t *len)
- {
- 8027adc: 4604 mov r4, r0
- sprintf(str, "%0.1f", sSettings.sSNTP.timeZone);
- 8027ade: f8d3 0370 ldr.w r0, [r3, #880] ; 0x370
- /**
- * @brief Часовой пояс контроллера (Ready for PRS!)
- */
- void GetSntpTimeZoneStr(char *str, uint8_t *len)
- {
- 8027ae2: 460d mov r5, r1
- sprintf(str, "%0.1f", sSettings.sSNTP.timeZone);
- 8027ae4: f7f8 fd18 bl 8020518 <__aeabi_f2d>
- 8027ae8: 4602 mov r2, r0
- 8027aea: 460b mov r3, r1
- 8027aec: 4620 mov r0, r4
- 8027aee: 4905 ldr r1, [pc, #20] ; (8027b04 <GetSntpTimeZoneStr+0x2c>)
- 8027af0: f7ff fe90 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027af4: 4620 mov r0, r4
- 8027af6: f7fa f9db bl 8021eb0 <strlen>
- 8027afa: 7028 strb r0, [r5, #0]
- 8027afc: bd38 pop {r3, r4, r5, pc}
- 8027afe: bf00 nop
- 8027b00: 2000cfc4 .word 0x2000cfc4
- 8027b04: 080399a3 .word 0x080399a3
- 08027b08 <GetSntpLastDataStr>:
- /**
- * @brief Дата последней синхронизации SNTP (Ready for PRS!)
- */
- void GetSntpLastDataStr(char *str, uint8_t *len)
- {
- 8027b08: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sSNTP.data);
- 8027b0a: 4a05 ldr r2, [pc, #20] ; (8027b20 <GetSntpLastDataStr+0x18>)
- /**
- * @brief Дата последней синхронизации SNTP (Ready for PRS!)
- */
- void GetSntpLastDataStr(char *str, uint8_t *len)
- {
- 8027b0c: 4605 mov r5, r0
- 8027b0e: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sSNTP.data);
- 8027b10: 4904 ldr r1, [pc, #16] ; (8027b24 <GetSntpLastDataStr+0x1c>)
- 8027b12: f7ff fe7f bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027b16: 4628 mov r0, r5
- 8027b18: f7fa f9ca bl 8021eb0 <strlen>
- 8027b1c: 7020 strb r0, [r4, #0]
- 8027b1e: bd38 pop {r3, r4, r5, pc}
- 8027b20: 2000d315 .word 0x2000d315
- 8027b24: 080399bb .word 0x080399bb
- 08027b28 <GetDINTypeActStr>:
- /**
- * @brief Тип действий при срабатывание сухих контактов
- */
- void GetDINTypeActStr(char *str, uint8_t *len, uint8_t num)
- {
- 8027b28: b538 push {r3, r4, r5, lr}
- sprintf(str, "%d", sSettings.sInOuts.din_type_act[num]);
- 8027b2a: 4b07 ldr r3, [pc, #28] ; (8027b48 <GetDINTypeActStr+0x20>)
- 8027b2c: 189a adds r2, r3, r2
- /**
- * @brief Тип действий при срабатывание сухих контактов
- */
- void GetDINTypeActStr(char *str, uint8_t *len, uint8_t num)
- {
- 8027b2e: 4605 mov r5, r0
- 8027b30: 460c mov r4, r1
- sprintf(str, "%d", sSettings.sInOuts.din_type_act[num]);
- 8027b32: f892 2376 ldrb.w r2, [r2, #886] ; 0x376
- 8027b36: 4905 ldr r1, [pc, #20] ; (8027b4c <GetDINTypeActStr+0x24>)
- 8027b38: f7ff fe6c bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027b3c: 4628 mov r0, r5
- 8027b3e: f7fa f9b7 bl 8021eb0 <strlen>
- 8027b42: 7020 strb r0, [r4, #0]
- 8027b44: bd38 pop {r3, r4, r5, pc}
- 8027b46: bf00 nop
- 8027b48: 2000cfc4 .word 0x2000cfc4
- 8027b4c: 080399a9 .word 0x080399a9
- 08027b50 <GetDINStatusStr>:
- /**
- * @brief Состояние сухого контакта
- */
- void GetDINStatusStr(char *str, uint8_t *len, uint8_t num)
- {
- sprintf(str, "%d", get_state_din_outs(DIN1+num));
- 8027b50: 3206 adds r2, #6
- /**
- * @brief Состояние сухого контакта
- */
- void GetDINStatusStr(char *str, uint8_t *len, uint8_t num)
- {
- 8027b52: b538 push {r3, r4, r5, lr}
- 8027b54: 4604 mov r4, r0
- sprintf(str, "%d", get_state_din_outs(DIN1+num));
- 8027b56: b2d0 uxtb r0, r2
- /**
- * @brief Состояние сухого контакта
- */
- void GetDINStatusStr(char *str, uint8_t *len, uint8_t num)
- {
- 8027b58: 460d mov r5, r1
- sprintf(str, "%d", get_state_din_outs(DIN1+num));
- 8027b5a: f001 f81d bl 8028b98 <get_state_din_outs>
- 8027b5e: 4905 ldr r1, [pc, #20] ; (8027b74 <GetDINStatusStr+0x24>)
- 8027b60: 4602 mov r2, r0
- 8027b62: 4620 mov r0, r4
- 8027b64: f7ff fe56 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027b68: 4620 mov r0, r4
- 8027b6a: f7fa f9a1 bl 8021eb0 <strlen>
- 8027b6e: 7028 strb r0, [r5, #0]
- 8027b70: bd38 pop {r3, r4, r5, pc}
- 8027b72: bf00 nop
- 8027b74: 080399a9 .word 0x080399a9
- 08027b78 <GetDIN0StatusStr>:
- /**
- * @brief Состояние сухого контакта
- */
- void GetDIN0StatusStr(char *str, uint8_t *len)
- {
- 8027b78: b538 push {r3, r4, r5, lr}
- 8027b7a: 4604 mov r4, r0
- sprintf(str, "%d", get_state_din_outs(DIN1));
- 8027b7c: 2006 movs r0, #6
- /**
- * @brief Состояние сухого контакта
- */
- void GetDIN0StatusStr(char *str, uint8_t *len)
- {
- 8027b7e: 460d mov r5, r1
- sprintf(str, "%d", get_state_din_outs(DIN1));
- 8027b80: f001 f80a bl 8028b98 <get_state_din_outs>
- 8027b84: 4904 ldr r1, [pc, #16] ; (8027b98 <GetDIN0StatusStr+0x20>)
- 8027b86: 4602 mov r2, r0
- 8027b88: 4620 mov r0, r4
- 8027b8a: f7ff fe43 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027b8e: 4620 mov r0, r4
- 8027b90: f7fa f98e bl 8021eb0 <strlen>
- 8027b94: 7028 strb r0, [r5, #0]
- 8027b96: bd38 pop {r3, r4, r5, pc}
- 8027b98: 080399a9 .word 0x080399a9
- 08027b9c <GetROTypeActStr>:
- /**
- * @brief Источник срабатывания реле
- */
- void GetROTypeActStr(char *str, uint8_t *len, uint8_t num)
- {
- 8027b9c: b538 push {r3, r4, r5, lr}
- sprintf(str, "%d", sSettings.sInOuts.ro_type_source[num]);
- 8027b9e: 4b07 ldr r3, [pc, #28] ; (8027bbc <GetROTypeActStr+0x20>)
- 8027ba0: 189a adds r2, r3, r2
- /**
- * @brief Источник срабатывания реле
- */
- void GetROTypeActStr(char *str, uint8_t *len, uint8_t num)
- {
- 8027ba2: 4605 mov r5, r0
- 8027ba4: 460c mov r4, r1
- sprintf(str, "%d", sSettings.sInOuts.ro_type_source[num]);
- 8027ba6: f892 2374 ldrb.w r2, [r2, #884] ; 0x374
- 8027baa: 4905 ldr r1, [pc, #20] ; (8027bc0 <GetROTypeActStr+0x24>)
- 8027bac: f7ff fe32 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027bb0: 4628 mov r0, r5
- 8027bb2: f7fa f97d bl 8021eb0 <strlen>
- 8027bb6: 7020 strb r0, [r4, #0]
- 8027bb8: bd38 pop {r3, r4, r5, pc}
- 8027bba: bf00 nop
- 8027bbc: 2000cfc4 .word 0x2000cfc4
- 8027bc0: 080399a9 .word 0x080399a9
- 08027bc4 <GetDOUTStatusStr>:
- /**
- * @brief Состояние релейного выхода
- */
- void GetDOUTStatusStr(char *str, uint8_t *len, uint8_t num)
- {
- sprintf(str, "%d", get_state_din_outs(DOUT1+num));
- 8027bc4: 3207 adds r2, #7
- /**
- * @brief Состояние релейного выхода
- */
- void GetDOUTStatusStr(char *str, uint8_t *len, uint8_t num)
- {
- 8027bc6: b538 push {r3, r4, r5, lr}
- 8027bc8: 4604 mov r4, r0
- sprintf(str, "%d", get_state_din_outs(DOUT1+num));
- 8027bca: b2d0 uxtb r0, r2
- /**
- * @brief Состояние релейного выхода
- */
- void GetDOUTStatusStr(char *str, uint8_t *len, uint8_t num)
- {
- 8027bcc: 460d mov r5, r1
- sprintf(str, "%d", get_state_din_outs(DOUT1+num));
- 8027bce: f000 ffe3 bl 8028b98 <get_state_din_outs>
- 8027bd2: 4905 ldr r1, [pc, #20] ; (8027be8 <GetDOUTStatusStr+0x24>)
- 8027bd4: 4602 mov r2, r0
- 8027bd6: 4620 mov r0, r4
- 8027bd8: f7ff fe1c bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027bdc: 4620 mov r0, r4
- 8027bde: f7fa f967 bl 8021eb0 <strlen>
- 8027be2: 7028 strb r0, [r5, #0]
- 8027be4: bd38 pop {r3, r4, r5, pc}
- 8027be6: bf00 nop
- 8027be8: 080399a9 .word 0x080399a9
- 08027bec <GetDOUT0StatusStr>:
- /**
- * @brief Состояние релейного выхода
- */
- void GetDOUT0StatusStr(char *str, uint8_t *len)
- {
- 8027bec: b538 push {r3, r4, r5, lr}
- 8027bee: 4604 mov r4, r0
- sprintf(str, "%d", get_state_din_outs(DOUT1));
- 8027bf0: 2007 movs r0, #7
- /**
- * @brief Состояние релейного выхода
- */
- void GetDOUT0StatusStr(char *str, uint8_t *len)
- {
- 8027bf2: 460d mov r5, r1
- sprintf(str, "%d", get_state_din_outs(DOUT1));
- 8027bf4: f000 ffd0 bl 8028b98 <get_state_din_outs>
- 8027bf8: 4904 ldr r1, [pc, #16] ; (8027c0c <GetDOUT0StatusStr+0x20>)
- 8027bfa: 4602 mov r2, r0
- 8027bfc: 4620 mov r0, r4
- 8027bfe: f7ff fe09 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027c02: 4620 mov r0, r4
- 8027c04: f7fa f954 bl 8021eb0 <strlen>
- 8027c08: 7028 strb r0, [r5, #0]
- 8027c0a: bd38 pop {r3, r4, r5, pc}
- 8027c0c: 080399a9 .word 0x080399a9
- 08027c10 <GetDOUT1StatusStr>:
- /**
- * @brief Состояние релейного выхода
- */
- void GetDOUT1StatusStr(char *str, uint8_t *len)
- {
- 8027c10: b538 push {r3, r4, r5, lr}
- 8027c12: 4604 mov r4, r0
- sprintf(str, "%d", get_state_din_outs(DOUT2));
- 8027c14: 2008 movs r0, #8
- /**
- * @brief Состояние релейного выхода
- */
- void GetDOUT1StatusStr(char *str, uint8_t *len)
- {
- 8027c16: 460d mov r5, r1
- sprintf(str, "%d", get_state_din_outs(DOUT2));
- 8027c18: f000 ffbe bl 8028b98 <get_state_din_outs>
- 8027c1c: 4904 ldr r1, [pc, #16] ; (8027c30 <GetDOUT1StatusStr+0x20>)
- 8027c1e: 4602 mov r2, r0
- 8027c20: 4620 mov r0, r4
- 8027c22: f7ff fdf7 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027c26: 4620 mov r0, r4
- 8027c28: f7fa f942 bl 8021eb0 <strlen>
- 8027c2c: 7028 strb r0, [r5, #0]
- 8027c2e: bd38 pop {r3, r4, r5, pc}
- 8027c30: 080399a9 .word 0x080399a9
- 08027c34 <GetWorkTimeStr>:
- /**
- * @brief Время работы устройства
- */
- void GetWorkTimeStr(char *str, uint8_t *len)
- {
- 8027c34: b57f push {r0, r1, r2, r3, r4, r5, r6, lr}
- 8027c36: 4604 mov r4, r0
- u32_t tick;
- uint16_t day;
- uint8_t hour;
- uint8_t min;
- snmp_get_sysuptime(&tick);
- 8027c38: a803 add r0, sp, #12
- /**
- * @brief Время работы устройства
- */
- void GetWorkTimeStr(char *str, uint8_t *len)
- {
- 8027c3a: 460e mov r6, r1
- u32_t tick;
- uint16_t day;
- uint8_t hour;
- uint8_t min;
- snmp_get_sysuptime(&tick);
- 8027c3c: f00c fd0c bl 8034658 <snmp_get_sysuptime>
- day = tick/8640000;
- 8027c40: 9803 ldr r0, [sp, #12]
-
- tick = tick%8640000;
- 8027c42: 4b0c ldr r3, [pc, #48] ; (8027c74 <GetWorkTimeStr+0x40>)
- hour = tick/360000;
-
- tick = tick%360000;
- 8027c44: 4d0c ldr r5, [pc, #48] ; (8027c78 <GetWorkTimeStr+0x44>)
- snmp_get_sysuptime(&tick);
- day = tick/8640000;
-
- tick = tick%8640000;
- 8027c46: fbb0 f2f3 udiv r2, r0, r3
- 8027c4a: fb03 0012 mls r0, r3, r2, r0
- hour = tick/360000;
-
- tick = tick%360000;
- 8027c4e: fbb0 f3f5 udiv r3, r0, r5
- 8027c52: fb05 0013 mls r0, r5, r3, r0
- min = tick/6000;
- 8027c56: f241 7170 movw r1, #6000 ; 0x1770
- day = tick/8640000;
-
- tick = tick%8640000;
- hour = tick/360000;
-
- tick = tick%360000;
- 8027c5a: 9003 str r0, [sp, #12]
- min = tick/6000;
- 8027c5c: fbb0 f0f1 udiv r0, r0, r1
- sprintf(str, "%d дн. %d ч. %d мин.", day, hour, min);
- 8027c60: 9000 str r0, [sp, #0]
- 8027c62: 4906 ldr r1, [pc, #24] ; (8027c7c <GetWorkTimeStr+0x48>)
- 8027c64: 4620 mov r0, r4
- 8027c66: f7ff fdd5 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027c6a: 4620 mov r0, r4
- 8027c6c: f7fa f920 bl 8021eb0 <strlen>
- 8027c70: 7030 strb r0, [r6, #0]
- }
- 8027c72: bd7f pop {r0, r1, r2, r3, r4, r5, r6, pc}
- 8027c74: 0083d600 .word 0x0083d600
- 8027c78: 00057e40 .word 0x00057e40
- 8027c7c: 080399be .word 0x080399be
- 08027c80 <GetModelStr>:
- /**
- * @brief Модель устройства
- */
- void GetModelStr(char *str, uint8_t *len)
- {
- 8027c80: b570 push {r4, r5, r6, lr}
- *len = strlen(sSettings.sSnmp.sysName);
- 8027c82: 4c07 ldr r4, [pc, #28] ; (8027ca0 <GetModelStr+0x20>)
- /**
- * @brief Модель устройства
- */
- void GetModelStr(char *str, uint8_t *len)
- {
- 8027c84: 4605 mov r5, r0
- *len = strlen(sSettings.sSnmp.sysName);
- 8027c86: 4620 mov r0, r4
- /**
- * @brief Модель устройства
- */
- void GetModelStr(char *str, uint8_t *len)
- {
- 8027c88: 460e mov r6, r1
- *len = strlen(sSettings.sSnmp.sysName);
- 8027c8a: f7fa f911 bl 8021eb0 <strlen>
- 8027c8e: 4602 mov r2, r0
- 8027c90: 7030 strb r0, [r6, #0]
- strncpy(str, sSettings.sSnmp.sysName, *len);
- 8027c92: 4621 mov r1, r4
- 8027c94: 4628 mov r0, r5
- 8027c96: b2d2 uxtb r2, r2
- }
- 8027c98: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief Модель устройства
- */
- void GetModelStr(char *str, uint8_t *len)
- {
- *len = strlen(sSettings.sSnmp.sysName);
- strncpy(str, sSettings.sSnmp.sysName, *len);
- 8027c9c: f7fa b9c0 b.w 8022020 <strncpy>
- 8027ca0: 2000d1ef .word 0x2000d1ef
- 08027ca4 <GetProductionDataStr>:
- /**
- * @brief Дата производства
- */
- void GetProductionDataStr(char *str, uint8_t *len)
- {
- 8027ca4: b570 push {r4, r5, r6, lr}
- *len = strlen(sSettings.sInfo.productionData);
- 8027ca6: 4c07 ldr r4, [pc, #28] ; (8027cc4 <GetProductionDataStr+0x20>)
- /**
- * @brief Дата производства
- */
- void GetProductionDataStr(char *str, uint8_t *len)
- {
- 8027ca8: 4605 mov r5, r0
- *len = strlen(sSettings.sInfo.productionData);
- 8027caa: 4620 mov r0, r4
- /**
- * @brief Дата производства
- */
- void GetProductionDataStr(char *str, uint8_t *len)
- {
- 8027cac: 460e mov r6, r1
- *len = strlen(sSettings.sInfo.productionData);
- 8027cae: f7fa f8ff bl 8021eb0 <strlen>
- 8027cb2: 4602 mov r2, r0
- 8027cb4: 7030 strb r0, [r6, #0]
- strncpy(str, sSettings.sInfo.productionData, *len);
- 8027cb6: 4621 mov r1, r4
- 8027cb8: 4628 mov r0, r5
- 8027cba: b2d2 uxtb r2, r2
- }
- 8027cbc: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief Дата производства
- */
- void GetProductionDataStr(char *str, uint8_t *len)
- {
- *len = strlen(sSettings.sInfo.productionData);
- strncpy(str, sSettings.sInfo.productionData, *len);
- 8027cc0: f7fa b9ae b.w 8022020 <strncpy>
- 8027cc4: 2000d028 .word 0x2000d028
- 08027cc8 <GetVersionStr>:
- /**
- * @brief Версия ПО
- */
- void GetVersionStr(char *str, uint8_t *len) // +
- {
- 8027cc8: b570 push {r4, r5, r6, lr}
- *len = strlen(VERSION);
- 8027cca: 4c07 ldr r4, [pc, #28] ; (8027ce8 <GetVersionStr+0x20>)
- /**
- * @brief Версия ПО
- */
- void GetVersionStr(char *str, uint8_t *len) // +
- {
- 8027ccc: 4605 mov r5, r0
- *len = strlen(VERSION);
- 8027cce: 4620 mov r0, r4
- /**
- * @brief Версия ПО
- */
- void GetVersionStr(char *str, uint8_t *len) // +
- {
- 8027cd0: 460e mov r6, r1
- *len = strlen(VERSION);
- 8027cd2: f7fa f8ed bl 8021eb0 <strlen>
- 8027cd6: 4602 mov r2, r0
- 8027cd8: 7030 strb r0, [r6, #0]
- strncpy(str, VERSION, *len);
- 8027cda: 4621 mov r1, r4
- 8027cdc: 4628 mov r0, r5
- 8027cde: b2d2 uxtb r2, r2
- }
- 8027ce0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief Версия ПО
- */
- void GetVersionStr(char *str, uint8_t *len) // +
- {
- *len = strlen(VERSION);
- strncpy(str, VERSION, *len);
- 8027ce4: f7fa b99c b.w 8022020 <strncpy>
- 8027ce8: 080399d9 .word 0x080399d9
- 08027cec <GetMacStr>:
- /**
- * @brief MAC адрес устройства
- */
- void GetMacStr(char *str, uint8_t *len)
- {
- 8027cec: b570 push {r4, r5, r6, lr}
- *len = strlen(sSettings.sInfo.mac);
- 8027cee: 4c07 ldr r4, [pc, #28] ; (8027d0c <GetMacStr+0x20>)
- /**
- * @brief MAC адрес устройства
- */
- void GetMacStr(char *str, uint8_t *len)
- {
- 8027cf0: 4605 mov r5, r0
- *len = strlen(sSettings.sInfo.mac);
- 8027cf2: 4620 mov r0, r4
- /**
- * @brief MAC адрес устройства
- */
- void GetMacStr(char *str, uint8_t *len)
- {
- 8027cf4: 460e mov r6, r1
- *len = strlen(sSettings.sInfo.mac);
- 8027cf6: f7fa f8db bl 8021eb0 <strlen>
- 8027cfa: 4602 mov r2, r0
- 8027cfc: 7030 strb r0, [r6, #0]
- strncpy(str, sSettings.sInfo.mac, *len);
- 8027cfe: 4621 mov r1, r4
- 8027d00: 4628 mov r0, r5
- 8027d02: b2d2 uxtb r2, r2
- }
- 8027d04: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief MAC адрес устройства
- */
- void GetMacStr(char *str, uint8_t *len)
- {
- *len = strlen(sSettings.sInfo.mac);
- strncpy(str, sSettings.sInfo.mac, *len);
- 8027d08: f7fa b98a b.w 8022020 <strncpy>
- 8027d0c: 2000d050 .word 0x2000d050
- 08027d10 <GetSerialNumberStr>:
- /**
- * @brief Серийный номер устройства
- */
- void GetSerialNumberStr(char *str, uint8_t *len)
- {
- 8027d10: b570 push {r4, r5, r6, lr}
- *len = strlen(sSettings.sInfo.serialNumber);
- 8027d12: 4c07 ldr r4, [pc, #28] ; (8027d30 <GetSerialNumberStr+0x20>)
- /**
- * @brief Серийный номер устройства
- */
- void GetSerialNumberStr(char *str, uint8_t *len)
- {
- 8027d14: 4605 mov r5, r0
- *len = strlen(sSettings.sInfo.serialNumber);
- 8027d16: 4620 mov r0, r4
- /**
- * @brief Серийный номер устройства
- */
- void GetSerialNumberStr(char *str, uint8_t *len)
- {
- 8027d18: 460e mov r6, r1
- *len = strlen(sSettings.sInfo.serialNumber);
- 8027d1a: f7fa f8c9 bl 8021eb0 <strlen>
- 8027d1e: 4602 mov r2, r0
- 8027d20: 7030 strb r0, [r6, #0]
- strncpy(str, sSettings.sInfo.serialNumber, *len);
- 8027d22: 4621 mov r1, r4
- 8027d24: 4628 mov r0, r5
- 8027d26: b2d2 uxtb r2, r2
- }
- 8027d28: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief Серийный номер устройства
- */
- void GetSerialNumberStr(char *str, uint8_t *len)
- {
- *len = strlen(sSettings.sInfo.serialNumber);
- strncpy(str, sSettings.sInfo.serialNumber, *len);
- 8027d2c: f7fa b978 b.w 8022020 <strncpy>
- 8027d30: 2000d062 .word 0x2000d062
- 08027d34 <GetOwnerStr>:
- /**
- * @brief Владелец устройства
- */
- void GetOwnerStr(char *str, uint8_t *len)
- {
- 8027d34: b570 push {r4, r5, r6, lr}
- *len = strlen(sSettings.sSnmp.sysContact);
- 8027d36: 4c07 ldr r4, [pc, #28] ; (8027d54 <GetOwnerStr+0x20>)
- /**
- * @brief Владелец устройства
- */
- void GetOwnerStr(char *str, uint8_t *len)
- {
- 8027d38: 4605 mov r5, r0
- *len = strlen(sSettings.sSnmp.sysContact);
- 8027d3a: 4620 mov r0, r4
- /**
- * @brief Владелец устройства
- */
- void GetOwnerStr(char *str, uint8_t *len)
- {
- 8027d3c: 460e mov r6, r1
- *len = strlen(sSettings.sSnmp.sysContact);
- 8027d3e: f7fa f8b7 bl 8021eb0 <strlen>
- 8027d42: 4602 mov r2, r0
- 8027d44: 7030 strb r0, [r6, #0]
- strncpy(str, sSettings.sSnmp.sysContact, *len);
- 8027d46: 4621 mov r1, r4
- 8027d48: 4628 mov r0, r5
- 8027d4a: b2d2 uxtb r2, r2
- }
- 8027d4c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief Владелец устройства
- */
- void GetOwnerStr(char *str, uint8_t *len)
- {
- *len = strlen(sSettings.sSnmp.sysContact);
- strncpy(str, sSettings.sSnmp.sysContact, *len);
- 8027d50: f7fa b966 b.w 8022020 <strncpy>
- 8027d54: 2000d1bd .word 0x2000d1bd
- 08027d58 <GetLocationStr>:
- /**
- * @brief Местоположение устройства
- */
- void GetLocationStr(char *str, uint8_t *len)
- {
- 8027d58: b570 push {r4, r5, r6, lr}
- *len = strlen(sSettings.sSnmp.sysLocation);
- 8027d5a: 4c07 ldr r4, [pc, #28] ; (8027d78 <GetLocationStr+0x20>)
- /**
- * @brief Местоположение устройства
- */
- void GetLocationStr(char *str, uint8_t *len)
- {
- 8027d5c: 4605 mov r5, r0
- *len = strlen(sSettings.sSnmp.sysLocation);
- 8027d5e: 4620 mov r0, r4
- /**
- * @brief Местоположение устройства
- */
- void GetLocationStr(char *str, uint8_t *len)
- {
- 8027d60: 460e mov r6, r1
- *len = strlen(sSettings.sSnmp.sysLocation);
- 8027d62: f7fa f8a5 bl 8021eb0 <strlen>
- 8027d66: 4602 mov r2, r0
- 8027d68: 7030 strb r0, [r6, #0]
- strncpy(str, sSettings.sSnmp.sysLocation, *len);
- 8027d6a: 4621 mov r1, r4
- 8027d6c: 4628 mov r0, r5
- 8027d6e: b2d2 uxtb r2, r2
- }
- 8027d70: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief Местоположение устройства
- */
- void GetLocationStr(char *str, uint8_t *len)
- {
- *len = strlen(sSettings.sSnmp.sysLocation);
- strncpy(str, sSettings.sSnmp.sysLocation, *len);
- 8027d74: f7fa b954 b.w 8022020 <strncpy>
- 8027d78: 2000d203 .word 0x2000d203
- 08027d7c <GetCommentsStr>:
- /**
- * @brief Комментарии
- */
- void GetCommentsStr(char *str, uint8_t *len)
- {
- 8027d7c: b570 push {r4, r5, r6, lr}
- *len = strlen(sSettings.sInfo.comments);
- 8027d7e: 4c07 ldr r4, [pc, #28] ; (8027d9c <GetCommentsStr+0x20>)
- /**
- * @brief Комментарии
- */
- void GetCommentsStr(char *str, uint8_t *len)
- {
- 8027d80: 4605 mov r5, r0
- *len = strlen(sSettings.sInfo.comments);
- 8027d82: 4620 mov r0, r4
- /**
- * @brief Комментарии
- */
- void GetCommentsStr(char *str, uint8_t *len)
- {
- 8027d84: 460e mov r6, r1
- *len = strlen(sSettings.sInfo.comments);
- 8027d86: f7fa f893 bl 8021eb0 <strlen>
- 8027d8a: 4602 mov r2, r0
- 8027d8c: 7030 strb r0, [r6, #0]
- strncpy(str, sSettings.sInfo.comments, *len);
- 8027d8e: 4621 mov r1, r4
- 8027d90: 4628 mov r0, r5
- 8027d92: b2d2 uxtb r2, r2
- }
- 8027d94: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief Комментарии
- */
- void GetCommentsStr(char *str, uint8_t *len)
- {
- *len = strlen(sSettings.sInfo.comments);
- strncpy(str, sSettings.sInfo.comments, *len);
- 8027d98: f7fa b942 b.w 8022020 <strncpy>
- 8027d9c: 2000d072 .word 0x2000d072
- 08027da0 <GetUPSModelStr>:
- /**
- * @brief Модель UPS
- */
- void GetUPSModelStr(char *str, uint8_t *len)
- {
- 8027da0: b570 push {r4, r5, r6, lr}
- *len = strlen(UPS.model);
- 8027da2: 4c07 ldr r4, [pc, #28] ; (8027dc0 <GetUPSModelStr+0x20>)
- /**
- * @brief Модель UPS
- */
- void GetUPSModelStr(char *str, uint8_t *len)
- {
- 8027da4: 4605 mov r5, r0
- *len = strlen(UPS.model);
- 8027da6: 4620 mov r0, r4
- /**
- * @brief Модель UPS
- */
- void GetUPSModelStr(char *str, uint8_t *len)
- {
- 8027da8: 460e mov r6, r1
- *len = strlen(UPS.model);
- 8027daa: f7fa f881 bl 8021eb0 <strlen>
- 8027dae: 4602 mov r2, r0
- 8027db0: 7030 strb r0, [r6, #0]
- strncpy(str, UPS.model, *len);
- 8027db2: 4621 mov r1, r4
- 8027db4: 4628 mov r0, r5
- 8027db6: b2d2 uxtb r2, r2
- }
- 8027db8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief Модель UPS
- */
- void GetUPSModelStr(char *str, uint8_t *len)
- {
- *len = strlen(UPS.model);
- strncpy(str, UPS.model, *len);
- 8027dbc: f7fa b930 b.w 8022020 <strncpy>
- 8027dc0: 2000cbbd .word 0x2000cbbd
- 08027dc4 <GetUPSVersionStr>:
- /**
- * @brief Версия UPS ПО
- */
- void GetUPSVersionStr(char *str, uint8_t *len) // +
- {
- 8027dc4: b570 push {r4, r5, r6, lr}
- *len = strlen(UPS.vertion);
- 8027dc6: 4c07 ldr r4, [pc, #28] ; (8027de4 <GetUPSVersionStr+0x20>)
- /**
- * @brief Версия UPS ПО
- */
- void GetUPSVersionStr(char *str, uint8_t *len) // +
- {
- 8027dc8: 4605 mov r5, r0
- *len = strlen(UPS.vertion);
- 8027dca: 4620 mov r0, r4
- /**
- * @brief Версия UPS ПО
- */
- void GetUPSVersionStr(char *str, uint8_t *len) // +
- {
- 8027dcc: 460e mov r6, r1
- *len = strlen(UPS.vertion);
- 8027dce: f7fa f86f bl 8021eb0 <strlen>
- 8027dd2: 4602 mov r2, r0
- 8027dd4: 7030 strb r0, [r6, #0]
- strncpy(str, UPS.vertion, *len);
- 8027dd6: 4621 mov r1, r4
- 8027dd8: 4628 mov r0, r5
- 8027dda: b2d2 uxtb r2, r2
- }
- 8027ddc: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief Версия UPS ПО
- */
- void GetUPSVersionStr(char *str, uint8_t *len) // +
- {
- *len = strlen(UPS.vertion);
- strncpy(str, UPS.vertion, *len);
- 8027de0: f7fa b91e b.w 8022020 <strncpy>
- 8027de4: 2000cbc8 .word 0x2000cbc8
- 08027de8 <GetUserLogin>:
- // ************************************************************************** //
- // Настройки аутентификации
- void GetUserLogin(uint8_t user_id, char *str, uint8_t *len)
- {
- 8027de8: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sAuth[user_id].login);
- 8027dea: 4b08 ldr r3, [pc, #32] ; (8027e0c <GetUserLogin+0x24>)
- // ************************************************************************** //
- // Настройки аутентификации
- void GetUserLogin(uint8_t user_id, char *str, uint8_t *len)
- {
- 8027dec: 4615 mov r5, r2
- sprintf(str, "%s", sSettings.sAuth[user_id].login);
- 8027dee: 2217 movs r2, #23
- 8027df0: fb02 3200 mla r2, r2, r0, r3
- // ************************************************************************** //
- // Настройки аутентификации
- void GetUserLogin(uint8_t user_id, char *str, uint8_t *len)
- {
- 8027df4: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sAuth[user_id].login);
- 8027df6: 4608 mov r0, r1
- 8027df8: 3202 adds r2, #2
- 8027dfa: 4905 ldr r1, [pc, #20] ; (8027e10 <GetUserLogin+0x28>)
- 8027dfc: f7ff fd0a bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027e00: 4620 mov r0, r4
- 8027e02: f7fa f855 bl 8021eb0 <strlen>
- 8027e06: 7028 strb r0, [r5, #0]
- 8027e08: bd38 pop {r3, r4, r5, pc}
- 8027e0a: bf00 nop
- 8027e0c: 2000d2d4 .word 0x2000d2d4
- 8027e10: 080399bb .word 0x080399bb
- 08027e14 <GetUserPassword>:
- }
- void GetUserPassword(uint8_t user_id, char *str, uint8_t *len)
- {
- 8027e14: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sAuth[user_id].password);
- 8027e16: 4b08 ldr r3, [pc, #32] ; (8027e38 <GetUserPassword+0x24>)
- sprintf(str, "%s", sSettings.sAuth[user_id].login);
- *len = strlen(str);
- }
- void GetUserPassword(uint8_t user_id, char *str, uint8_t *len)
- {
- 8027e18: 4615 mov r5, r2
- sprintf(str, "%s", sSettings.sAuth[user_id].password);
- 8027e1a: 2217 movs r2, #23
- 8027e1c: fb02 3200 mla r2, r2, r0, r3
- sprintf(str, "%s", sSettings.sAuth[user_id].login);
- *len = strlen(str);
- }
- void GetUserPassword(uint8_t user_id, char *str, uint8_t *len)
- {
- 8027e20: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sAuth[user_id].password);
- 8027e22: 4608 mov r0, r1
- 8027e24: 3205 adds r2, #5
- 8027e26: 4905 ldr r1, [pc, #20] ; (8027e3c <GetUserPassword+0x28>)
- 8027e28: f7ff fcf4 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027e2c: 4620 mov r0, r4
- 8027e2e: f7fa f83f bl 8021eb0 <strlen>
- 8027e32: 7028 strb r0, [r5, #0]
- 8027e34: bd38 pop {r3, r4, r5, pc}
- 8027e36: bf00 nop
- 8027e38: 2000d2dc .word 0x2000d2dc
- 8027e3c: 080399bb .word 0x080399bb
- 08027e40 <GetUserLevelInt>:
- *len = strlen(str);
- }
- void GetUserLevelInt(uint8_t user_id, uint8_t *value)
- {
- *value = sSettings.sAuth[user_id].level;
- 8027e40: 4b03 ldr r3, [pc, #12] ; (8027e50 <GetUserLevelInt+0x10>)
- 8027e42: 2217 movs r2, #23
- 8027e44: fb02 3000 mla r0, r2, r0, r3
- 8027e48: f890 3311 ldrb.w r3, [r0, #785] ; 0x311
- 8027e4c: 700b strb r3, [r1, #0]
- 8027e4e: 4770 bx lr
- 8027e50: 2000cfc4 .word 0x2000cfc4
- 08027e54 <GetIpStr>:
- * @brief Текущий IP адрес
- */
- void GetIpStr(char *str, uint8_t *len)
- {
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- 8027e54: 4a08 ldr r2, [pc, #32] ; (8027e78 <GetIpStr+0x24>)
- /**
- * @brief Текущий IP адрес
- */
- void GetIpStr(char *str, uint8_t *len)
- {
- 8027e56: b538 push {r3, r4, r5, lr}
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- 8027e58: f892 3120 ldrb.w r3, [r2, #288] ; 0x120
- /**
- * @brief Текущий IP адрес
- */
- void GetIpStr(char *str, uint8_t *len)
- {
- 8027e5c: 460c mov r4, r1
- 8027e5e: 4605 mov r5, r0
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- sprintf(str, "%s", sSettings.sWebTempParams.ip);
- 8027e60: 4906 ldr r1, [pc, #24] ; (8027e7c <GetIpStr+0x28>)
- * @brief Текущий IP адрес
- */
- void GetIpStr(char *str, uint8_t *len)
- {
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- 8027e62: b10b cbz r3, 8027e68 <GetIpStr+0x14>
- sprintf(str, "%s", sSettings.sWebTempParams.ip);
- 8027e64: 3233 adds r2, #51 ; 0x33
- 8027e66: e000 b.n 8027e6a <GetIpStr+0x16>
- else
- sprintf(str, "%s", sSettings.sWebParams.ip);
- 8027e68: 3202 adds r2, #2
- 8027e6a: f7ff fcd3 bl 8027814 <tfp_sprintf>
-
- *len = strlen(str);
- 8027e6e: 4628 mov r0, r5
- 8027e70: f7fa f81e bl 8021eb0 <strlen>
- 8027e74: 7020 strb r0, [r4, #0]
- 8027e76: bd38 pop {r3, r4, r5, pc}
- 8027e78: 2000cfc4 .word 0x2000cfc4
- 8027e7c: 080399bb .word 0x080399bb
- 08027e80 <GetGatewayStr>:
- * @brief Текущий шлюз
- */
- void GetGatewayStr(char *str, uint8_t *len)
- {
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- 8027e80: 4a08 ldr r2, [pc, #32] ; (8027ea4 <GetGatewayStr+0x24>)
- /**
- * @brief Текущий шлюз
- */
- void GetGatewayStr(char *str, uint8_t *len)
- {
- 8027e82: b538 push {r3, r4, r5, lr}
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- 8027e84: f892 3120 ldrb.w r3, [r2, #288] ; 0x120
- /**
- * @brief Текущий шлюз
- */
- void GetGatewayStr(char *str, uint8_t *len)
- {
- 8027e88: 460c mov r4, r1
- 8027e8a: 4605 mov r5, r0
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- sprintf(str, "%s", sSettings.sWebTempParams.gate);
- 8027e8c: 4906 ldr r1, [pc, #24] ; (8027ea8 <GetGatewayStr+0x28>)
- * @brief Текущий шлюз
- */
- void GetGatewayStr(char *str, uint8_t *len)
- {
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- 8027e8e: b10b cbz r3, 8027e94 <GetGatewayStr+0x14>
- sprintf(str, "%s", sSettings.sWebTempParams.gate);
- 8027e90: 3243 adds r2, #67 ; 0x43
- 8027e92: e000 b.n 8027e96 <GetGatewayStr+0x16>
- else
- sprintf(str, "%s", sSettings.sWebParams.gate);
- 8027e94: 3212 adds r2, #18
- 8027e96: f7ff fcbd bl 8027814 <tfp_sprintf>
-
- *len = strlen(str);
- 8027e9a: 4628 mov r0, r5
- 8027e9c: f7fa f808 bl 8021eb0 <strlen>
- 8027ea0: 7020 strb r0, [r4, #0]
- 8027ea2: bd38 pop {r3, r4, r5, pc}
- 8027ea4: 2000cfc4 .word 0x2000cfc4
- 8027ea8: 080399bb .word 0x080399bb
- 08027eac <GetMaskStr>:
- * @brief Текущая маска подсети
- */
- void GetMaskStr(char *str, uint8_t *len)
- {
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- 8027eac: 4a08 ldr r2, [pc, #32] ; (8027ed0 <GetMaskStr+0x24>)
- /**
- * @brief Текущая маска подсети
- */
- void GetMaskStr(char *str, uint8_t *len)
- {
- 8027eae: b538 push {r3, r4, r5, lr}
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- 8027eb0: f892 3120 ldrb.w r3, [r2, #288] ; 0x120
- /**
- * @brief Текущая маска подсети
- */
- void GetMaskStr(char *str, uint8_t *len)
- {
- 8027eb4: 460c mov r4, r1
- 8027eb6: 4605 mov r5, r0
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- sprintf(str, "%s", sSettings.sWebTempParams.mask);
- 8027eb8: 4906 ldr r1, [pc, #24] ; (8027ed4 <GetMaskStr+0x28>)
- * @brief Текущая маска подсети
- */
- void GetMaskStr(char *str, uint8_t *len)
- {
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- 8027eba: b10b cbz r3, 8027ec0 <GetMaskStr+0x14>
- sprintf(str, "%s", sSettings.sWebTempParams.mask);
- 8027ebc: 3253 adds r2, #83 ; 0x53
- 8027ebe: e000 b.n 8027ec2 <GetMaskStr+0x16>
- else
- sprintf(str, "%s", sSettings.sWebParams.mask);
- 8027ec0: 3222 adds r2, #34 ; 0x22
- 8027ec2: f7ff fca7 bl 8027814 <tfp_sprintf>
-
- *len = strlen(str);
- 8027ec6: 4628 mov r0, r5
- 8027ec8: f7f9 fff2 bl 8021eb0 <strlen>
- 8027ecc: 7020 strb r0, [r4, #0]
- 8027ece: bd38 pop {r3, r4, r5, pc}
- 8027ed0: 2000cfc4 .word 0x2000cfc4
- 8027ed4: 080399bb .word 0x080399bb
- 08027ed8 <GetDhcpStateStr>:
- * @brief Настройка DHCP
- */
- void GetDhcpStateStr(char *str, uint8_t *len)
- {
- /* Если сейчас временные настройки */
- if (sSettings.sFlags.netsettingsChanged)
- 8027ed8: 4b08 ldr r3, [pc, #32] ; (8027efc <GetDhcpStateStr+0x24>)
- 8027eda: f893 2120 ldrb.w r2, [r3, #288] ; 0x120
- 8027ede: b112 cbz r2, 8027ee6 <GetDhcpStateStr+0xe>
- {
- if (sSettings.sWebTempParams.dhcpEnable)
- 8027ee0: f893 3063 ldrb.w r3, [r3, #99] ; 0x63
- 8027ee4: e001 b.n 8027eea <GetDhcpStateStr+0x12>
- else
- *str = '0';
- }
- else
- {
- if (sSettings.sWebParams.dhcpEnable)
- 8027ee6: f893 3032 ldrb.w r3, [r3, #50] ; 0x32
- 8027eea: b10b cbz r3, 8027ef0 <GetDhcpStateStr+0x18>
- *str = '1';
- 8027eec: 2331 movs r3, #49 ; 0x31
- 8027eee: e000 b.n 8027ef2 <GetDhcpStateStr+0x1a>
- else
- *str = '0';
- 8027ef0: 2330 movs r3, #48 ; 0x30
- 8027ef2: 7003 strb r3, [r0, #0]
- }
-
- *len = 1;
- 8027ef4: 2301 movs r3, #1
- 8027ef6: 700b strb r3, [r1, #0]
- 8027ef8: 4770 bx lr
- 8027efa: bf00 nop
- 8027efc: 2000cfc4 .word 0x2000cfc4
- 08027f00 <GetDhcpStateUDP>:
- /**
- * @brief Настройка DHCP
- */
- void GetDhcpStateUDP(char *str, uint8_t *len)
- {
- 8027f00: b538 push {r3, r4, r5, lr}
- /* Если сейчас временные настройки или был загружен файл конфигурации */
- if (sSettings.sFlags.netsettingsChanged)
- 8027f02: 4b0c ldr r3, [pc, #48] ; (8027f34 <GetDhcpStateUDP+0x34>)
- 8027f04: f893 2120 ldrb.w r2, [r3, #288] ; 0x120
- /**
- * @brief Настройка DHCP
- */
- void GetDhcpStateUDP(char *str, uint8_t *len)
- {
- 8027f08: 4604 mov r4, r0
- 8027f0a: 460d mov r5, r1
- /* Если сейчас временные настройки или был загружен файл конфигурации */
- if (sSettings.sFlags.netsettingsChanged)
- 8027f0c: b152 cbz r2, 8027f24 <GetDhcpStateUDP+0x24>
- {
- if (sSettings.sWebTempParams.dhcpEnable)
- 8027f0e: f893 3063 ldrb.w r3, [r3, #99] ; 0x63
- sprintf(str, "%s", "True");
- 8027f12: 4620 mov r0, r4
- 8027f14: 4908 ldr r1, [pc, #32] ; (8027f38 <GetDhcpStateUDP+0x38>)
- void GetDhcpStateUDP(char *str, uint8_t *len)
- {
- /* Если сейчас временные настройки или был загружен файл конфигурации */
- if (sSettings.sFlags.netsettingsChanged)
- {
- if (sSettings.sWebTempParams.dhcpEnable)
- 8027f16: b10b cbz r3, 8027f1c <GetDhcpStateUDP+0x1c>
- sprintf(str, "%s", "True");
- 8027f18: 4a08 ldr r2, [pc, #32] ; (8027f3c <GetDhcpStateUDP+0x3c>)
- 8027f1a: e000 b.n 8027f1e <GetDhcpStateUDP+0x1e>
- else
- sprintf(str, "%s", "False");
- 8027f1c: 4a08 ldr r2, [pc, #32] ; (8027f40 <GetDhcpStateUDP+0x40>)
- 8027f1e: f7ff fc79 bl 8027814 <tfp_sprintf>
- 8027f22: e002 b.n 8027f2a <GetDhcpStateUDP+0x2a>
- }
- else
- {
- if (sSettings.sWebParams.dhcpEnable)
- 8027f24: f893 3032 ldrb.w r3, [r3, #50] ; 0x32
- 8027f28: e7f3 b.n 8027f12 <GetDhcpStateUDP+0x12>
- sprintf(str, "%s", "True");
- else
- sprintf(str, "%s", "False");
- }
- *len = strlen(str);
- 8027f2a: 4620 mov r0, r4
- 8027f2c: f7f9 ffc0 bl 8021eb0 <strlen>
- 8027f30: 7028 strb r0, [r5, #0]
- 8027f32: bd38 pop {r3, r4, r5, pc}
- 8027f34: 2000cfc4 .word 0x2000cfc4
- 8027f38: 080399bb .word 0x080399bb
- 8027f3c: 08040e43 .word 0x08040e43
- 8027f40: 080399dd .word 0x080399dd
- 08027f44 <GetReadCommunity>:
- /**
- * @brief Текущее community для чтения
- */
- void GetReadCommunity(char *str, uint8_t *len)
- {
- 8027f44: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sSnmp.readCommunity);
- 8027f46: 4a05 ldr r2, [pc, #20] ; (8027f5c <GetReadCommunity+0x18>)
- /**
- * @brief Текущее community для чтения
- */
- void GetReadCommunity(char *str, uint8_t *len)
- {
- 8027f48: 4605 mov r5, r0
- 8027f4a: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sSnmp.readCommunity);
- 8027f4c: 4904 ldr r1, [pc, #16] ; (8027f60 <GetReadCommunity+0x1c>)
- 8027f4e: f7ff fc61 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027f52: 4628 mov r0, r5
- 8027f54: f7f9 ffac bl 8021eb0 <strlen>
- 8027f58: 7020 strb r0, [r4, #0]
- 8027f5a: bd38 pop {r3, r4, r5, pc}
- 8027f5c: 2000d195 .word 0x2000d195
- 8027f60: 080399bb .word 0x080399bb
- 08027f64 <GetWriteCommunity>:
- /**
- * @brief Текущее community для записи
- */
- void GetWriteCommunity(char *str, uint8_t *len)
- {
- 8027f64: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sSnmp.writeCommunity);
- 8027f66: 4a05 ldr r2, [pc, #20] ; (8027f7c <GetWriteCommunity+0x18>)
- /**
- * @brief Текущее community для записи
- */
- void GetWriteCommunity(char *str, uint8_t *len)
- {
- 8027f68: 4605 mov r5, r0
- 8027f6a: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sSnmp.writeCommunity);
- 8027f6c: 4904 ldr r1, [pc, #16] ; (8027f80 <GetWriteCommunity+0x1c>)
- 8027f6e: f7ff fc51 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027f72: 4628 mov r0, r5
- 8027f74: f7f9 ff9c bl 8021eb0 <strlen>
- 8027f78: 7020 strb r0, [r4, #0]
- 8027f7a: bd38 pop {r3, r4, r5, pc}
- 8027f7c: 2000d1a9 .word 0x2000d1a9
- 8027f80: 080399bb .word 0x080399bb
- 08027f84 <GetManagerIp>:
- /**
- * @brief IP SNMP менеджера
- */
- void GetManagerIp(char *str, uint8_t *len)
- {
- 8027f84: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sSnmp.managerIP);
- 8027f86: 4a05 ldr r2, [pc, #20] ; (8027f9c <GetManagerIp+0x18>)
- /**
- * @brief IP SNMP менеджера
- */
- void GetManagerIp(char *str, uint8_t *len)
- {
- 8027f88: 4605 mov r5, r0
- 8027f8a: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sSnmp.managerIP);
- 8027f8c: 4904 ldr r1, [pc, #16] ; (8027fa0 <GetManagerIp+0x1c>)
- 8027f8e: f7ff fc41 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027f92: 4628 mov r0, r5
- 8027f94: f7f9 ff8c bl 8021eb0 <strlen>
- 8027f98: 7020 strb r0, [r4, #0]
- 8027f9a: bd38 pop {r3, r4, r5, pc}
- 8027f9c: 2000d271 .word 0x2000d271
- 8027fa0: 080399bb .word 0x080399bb
- 08027fa4 <GetManagerIp2>:
- }
- void GetManagerIp2(char *str, uint8_t *len)
- {
- 8027fa4: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sSnmp.managerIP2);
- 8027fa6: 4a05 ldr r2, [pc, #20] ; (8027fbc <GetManagerIp2+0x18>)
- sprintf(str, "%s", sSettings.sSnmp.managerIP);
- *len = strlen(str);
- }
- void GetManagerIp2(char *str, uint8_t *len)
- {
- 8027fa8: 4605 mov r5, r0
- 8027faa: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sSnmp.managerIP2);
- 8027fac: 4904 ldr r1, [pc, #16] ; (8027fc0 <GetManagerIp2+0x1c>)
- 8027fae: f7ff fc31 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027fb2: 4628 mov r0, r5
- 8027fb4: f7f9 ff7c bl 8021eb0 <strlen>
- 8027fb8: 7020 strb r0, [r4, #0]
- 8027fba: bd38 pop {r3, r4, r5, pc}
- 8027fbc: 2000d285 .word 0x2000d285
- 8027fc0: 080399bb .word 0x080399bb
- 08027fc4 <GetManagerIp3>:
- }
- void GetManagerIp3(char *str, uint8_t *len)
- {
- 8027fc4: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sSnmp.managerIP3);
- 8027fc6: 4a05 ldr r2, [pc, #20] ; (8027fdc <GetManagerIp3+0x18>)
- sprintf(str, "%s", sSettings.sSnmp.managerIP2);
- *len = strlen(str);
- }
- void GetManagerIp3(char *str, uint8_t *len)
- {
- 8027fc8: 4605 mov r5, r0
- 8027fca: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sSnmp.managerIP3);
- 8027fcc: 4904 ldr r1, [pc, #16] ; (8027fe0 <GetManagerIp3+0x1c>)
- 8027fce: f7ff fc21 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027fd2: 4628 mov r0, r5
- 8027fd4: f7f9 ff6c bl 8021eb0 <strlen>
- 8027fd8: 7020 strb r0, [r4, #0]
- 8027fda: bd38 pop {r3, r4, r5, pc}
- 8027fdc: 2000d299 .word 0x2000d299
- 8027fe0: 080399bb .word 0x080399bb
- 08027fe4 <GetManagerIp4>:
- }
- void GetManagerIp4(char *str, uint8_t *len)
- {
- 8027fe4: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sSnmp.managerIP4);
- 8027fe6: 4a05 ldr r2, [pc, #20] ; (8027ffc <GetManagerIp4+0x18>)
- sprintf(str, "%s", sSettings.sSnmp.managerIP3);
- *len = strlen(str);
- }
- void GetManagerIp4(char *str, uint8_t *len)
- {
- 8027fe8: 4605 mov r5, r0
- 8027fea: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sSnmp.managerIP4);
- 8027fec: 4904 ldr r1, [pc, #16] ; (8028000 <GetManagerIp4+0x1c>)
- 8027fee: f7ff fc11 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8027ff2: 4628 mov r0, r5
- 8027ff4: f7f9 ff5c bl 8021eb0 <strlen>
- 8027ff8: 7020 strb r0, [r4, #0]
- 8027ffa: bd38 pop {r3, r4, r5, pc}
- 8027ffc: 2000d2ad .word 0x2000d2ad
- 8028000: 080399bb .word 0x080399bb
- 08028004 <GetManagerIp5>:
- }
- void GetManagerIp5(char *str, uint8_t *len)
- {
- 8028004: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sSnmp.managerIP5);
- 8028006: 4a05 ldr r2, [pc, #20] ; (802801c <GetManagerIp5+0x18>)
- sprintf(str, "%s", sSettings.sSnmp.managerIP4);
- *len = strlen(str);
- }
- void GetManagerIp5(char *str, uint8_t *len)
- {
- 8028008: 4605 mov r5, r0
- 802800a: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sSnmp.managerIP5);
- 802800c: 4904 ldr r1, [pc, #16] ; (8028020 <GetManagerIp5+0x1c>)
- 802800e: f7ff fc01 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8028012: 4628 mov r0, r5
- 8028014: f7f9 ff4c bl 8021eb0 <strlen>
- 8028018: 7020 strb r0, [r4, #0]
- 802801a: bd38 pop {r3, r4, r5, pc}
- 802801c: 2000d2c1 .word 0x2000d2c1
- 8028020: 080399bb .word 0x080399bb
- 08028024 <GetRDSIpStr>:
- /**
- * @brief Текущий IP адрес
- */
- void GetRDSIpStr(char *str, uint8_t *len)
- {
- 8028024: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sRADIUS.ServerIP);
- 8028026: 4a05 ldr r2, [pc, #20] ; (802803c <GetRDSIpStr+0x18>)
- /**
- * @brief Текущий IP адрес
- */
- void GetRDSIpStr(char *str, uint8_t *len)
- {
- 8028028: 4605 mov r5, r0
- 802802a: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sRADIUS.ServerIP);
- 802802c: 4904 ldr r1, [pc, #16] ; (8028040 <GetRDSIpStr+0x1c>)
- 802802e: f7ff fbf1 bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8028032: 4628 mov r0, r5
- 8028034: f7f9 ff3c bl 8021eb0 <strlen>
- 8028038: 7020 strb r0, [r4, #0]
- 802803a: bd38 pop {r3, r4, r5, pc}
- 802803c: 2000d33d .word 0x2000d33d
- 8028040: 080399bb .word 0x080399bb
- 08028044 <GetRDSPortStr>:
- /**
- * @brief Текущий Порт
- */
- void GetRDSPortStr(char *str, uint8_t *len)
- {
- 8028044: b538 push {r3, r4, r5, lr}
- sprintf(str, "%d", sSettings.sRADIUS.port);
- 8028046: 4b06 ldr r3, [pc, #24] ; (8028060 <GetRDSPortStr+0x1c>)
- /**
- * @brief Текущий Порт
- */
- void GetRDSPortStr(char *str, uint8_t *len)
- {
- 8028048: 4605 mov r5, r0
- 802804a: 460c mov r4, r1
- sprintf(str, "%d", sSettings.sRADIUS.port);
- 802804c: f8d3 239c ldr.w r2, [r3, #924] ; 0x39c
- 8028050: 4904 ldr r1, [pc, #16] ; (8028064 <GetRDSPortStr+0x20>)
- 8028052: f7ff fbdf bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 8028056: 4628 mov r0, r5
- 8028058: f7f9 ff2a bl 8021eb0 <strlen>
- 802805c: 7020 strb r0, [r4, #0]
- 802805e: bd38 pop {r3, r4, r5, pc}
- 8028060: 2000cfc4 .word 0x2000cfc4
- 8028064: 080399a9 .word 0x080399a9
- 08028068 <GetRDSKeyAccesstStr>:
- /**
- * @brief Текущий Код access
- */
- void GetRDSKeyAccesstStr(char *str, uint8_t *len)
- {
- 8028068: b538 push {r3, r4, r5, lr}
- sprintf(str, "%d", sSettings.sRADIUS.key_access);
- 802806a: 4b06 ldr r3, [pc, #24] ; (8028084 <GetRDSKeyAccesstStr+0x1c>)
- /**
- * @brief Текущий Код access
- */
- void GetRDSKeyAccesstStr(char *str, uint8_t *len)
- {
- 802806c: 4605 mov r5, r0
- 802806e: 460c mov r4, r1
- sprintf(str, "%d", sSettings.sRADIUS.key_access);
- 8028070: f8d3 23a0 ldr.w r2, [r3, #928] ; 0x3a0
- 8028074: 4904 ldr r1, [pc, #16] ; (8028088 <GetRDSKeyAccesstStr+0x20>)
- 8028076: f7ff fbcd bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 802807a: 4628 mov r0, r5
- 802807c: f7f9 ff18 bl 8021eb0 <strlen>
- 8028080: 7020 strb r0, [r4, #0]
- 8028082: bd38 pop {r3, r4, r5, pc}
- 8028084: 2000cfc4 .word 0x2000cfc4
- 8028088: 080399a9 .word 0x080399a9
- 0802808c <GetRDSPasswordkStr>:
- /**
- * @brief Текущая пароль RADIUS
- */
- void GetRDSPasswordkStr(char *str, uint8_t *len)
- {
- 802808c: b538 push {r3, r4, r5, lr}
- sprintf(str, "%s", sSettings.sRADIUS.rds_password);
- 802808e: 4a05 ldr r2, [pc, #20] ; (80280a4 <GetRDSPasswordkStr+0x18>)
- /**
- * @brief Текущая пароль RADIUS
- */
- void GetRDSPasswordkStr(char *str, uint8_t *len)
- {
- 8028090: 4605 mov r5, r0
- 8028092: 460c mov r4, r1
- sprintf(str, "%s", sSettings.sRADIUS.rds_password);
- 8028094: 4904 ldr r1, [pc, #16] ; (80280a8 <GetRDSPasswordkStr+0x1c>)
- 8028096: f7ff fbbd bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 802809a: 4628 mov r0, r5
- 802809c: f7f9 ff08 bl 8021eb0 <strlen>
- 80280a0: 7020 strb r0, [r4, #0]
- 80280a2: bd38 pop {r3, r4, r5, pc}
- 80280a4: 2000d34d .word 0x2000d34d
- 80280a8: 080399bb .word 0x080399bb
- 080280ac <GetRDSEnableStateStr>:
- /**
- * @brief Настройка вкл/ выкл RADIUS сервера
- */
- void GetRDSEnableStateStr(char *str, uint8_t *len)
- {
- if (sSettings.sRADIUS.RDSEnable)
- 80280ac: 4b05 ldr r3, [pc, #20] ; (80280c4 <GetRDSEnableStateStr+0x18>)
- 80280ae: f893 339a ldrb.w r3, [r3, #922] ; 0x39a
- 80280b2: b10b cbz r3, 80280b8 <GetRDSEnableStateStr+0xc>
- *str = '1';
- 80280b4: 2331 movs r3, #49 ; 0x31
- 80280b6: e000 b.n 80280ba <GetRDSEnableStateStr+0xe>
- else
- *str = '0';
- 80280b8: 2330 movs r3, #48 ; 0x30
- 80280ba: 7003 strb r3, [r0, #0]
- *len = 1;
- 80280bc: 2301 movs r3, #1
- 80280be: 700b strb r3, [r1, #0]
- 80280c0: 4770 bx lr
- 80280c2: bf00 nop
- 80280c4: 2000cfc4 .word 0x2000cfc4
- 080280c8 <GetAuthEnableStateStr>:
- /**
- * @brief Настройка вкл/ выкл авторизации
- */
- void GetAuthEnableStateStr(char *str, uint8_t *len)
- {
- if (sSettings.sRADIUS.Auth_enable)
- 80280c8: 4b05 ldr r3, [pc, #20] ; (80280e0 <GetAuthEnableStateStr+0x18>)
- 80280ca: f893 3378 ldrb.w r3, [r3, #888] ; 0x378
- 80280ce: b10b cbz r3, 80280d4 <GetAuthEnableStateStr+0xc>
- *str = '1';
- 80280d0: 2331 movs r3, #49 ; 0x31
- 80280d2: e000 b.n 80280d6 <GetAuthEnableStateStr+0xe>
- else
- *str = '0';
- 80280d4: 2330 movs r3, #48 ; 0x30
- 80280d6: 7003 strb r3, [r0, #0]
- *len = 1;
- 80280d8: 2301 movs r3, #1
- 80280da: 700b strb r3, [r1, #0]
- 80280dc: 4770 bx lr
- 80280de: bf00 nop
- 80280e0: 2000cfc4 .word 0x2000cfc4
- 080280e4 <GetWebReinitFlag>:
- /**
- * @brief Вернуть признак изменения сетевых параметров
- */
- void GetWebReinitFlag(char *str, uint8_t *len)
- {
- 80280e4: b538 push {r3, r4, r5, lr}
- if (sSettings.sFlags.netsettingsChanged)
- 80280e6: 4b08 ldr r3, [pc, #32] ; (8028108 <GetWebReinitFlag+0x24>)
- 80280e8: f893 3120 ldrb.w r3, [r3, #288] ; 0x120
- /**
- * @brief Вернуть признак изменения сетевых параметров
- */
- void GetWebReinitFlag(char *str, uint8_t *len)
- {
- 80280ec: 460c mov r4, r1
- 80280ee: 4605 mov r5, r0
- if (sSettings.sFlags.netsettingsChanged)
- {
- sprintf(str, "%s", "true");
- 80280f0: 4906 ldr r1, [pc, #24] ; (802810c <GetWebReinitFlag+0x28>)
- /**
- * @brief Вернуть признак изменения сетевых параметров
- */
- void GetWebReinitFlag(char *str, uint8_t *len)
- {
- if (sSettings.sFlags.netsettingsChanged)
- 80280f2: b10b cbz r3, 80280f8 <GetWebReinitFlag+0x14>
- {
- sprintf(str, "%s", "true");
- 80280f4: 4a06 ldr r2, [pc, #24] ; (8028110 <GetWebReinitFlag+0x2c>)
- 80280f6: e000 b.n 80280fa <GetWebReinitFlag+0x16>
- *len = strlen(str);
- }
- else
- {
- sprintf(str, "%s", "false");
- 80280f8: 4a06 ldr r2, [pc, #24] ; (8028114 <GetWebReinitFlag+0x30>)
- 80280fa: f7ff fb8b bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 80280fe: 4628 mov r0, r5
- 8028100: f7f9 fed6 bl 8021eb0 <strlen>
- 8028104: 7020 strb r0, [r4, #0]
- 8028106: bd38 pop {r3, r4, r5, pc}
- 8028108: 2000cfc4 .word 0x2000cfc4
- 802810c: 080399bb .word 0x080399bb
- 8028110: 080399e3 .word 0x080399e3
- 8028114: 080399e8 .word 0x080399e8
- 08028118 <SetLoadMode>:
- * @brief Установить признак обновления ПО.
- */
- void SetLoadMode(void)
- {
- /* Set loadMode = 1 */
- RTC_WriteBackupRegister(RTC_BKP_DR1, 1);
- 8028118: 2001 movs r0, #1
- /**
- * @brief Установить признак обновления ПО.
- */
- void SetLoadMode(void)
- {
- 802811a: b508 push {r3, lr}
- /* Set loadMode = 1 */
- RTC_WriteBackupRegister(RTC_BKP_DR1, 1);
- 802811c: 4601 mov r1, r0
- 802811e: f7fd fce7 bl 8025af0 <RTC_WriteBackupRegister>
- /* Set bootTry = 0 */
- RTC_WriteBackupRegister(RTC_BKP_DR2, 0);
- 8028122: 2002 movs r0, #2
- 8028124: 2100 movs r1, #0
- }
- 8028126: e8bd 4008 ldmia.w sp!, {r3, lr}
- void SetLoadMode(void)
- {
- /* Set loadMode = 1 */
- RTC_WriteBackupRegister(RTC_BKP_DR1, 1);
- /* Set bootTry = 0 */
- RTC_WriteBackupRegister(RTC_BKP_DR2, 0);
- 802812a: f7fd bce1 b.w 8025af0 <RTC_WriteBackupRegister>
- 802812e: 0000 movs r0, r0
- 08028130 <SetWebReinitFlag>:
- /**
- * @brief Установить признак изменения сетевых параметров
- */
- void SetWebReinitFlag(bool value)
- {
- sSettings.sFlags.netsettingsChanged = value;
- 8028130: 4b01 ldr r3, [pc, #4] ; (8028138 <SetWebReinitFlag+0x8>)
- 8028132: f883 0120 strb.w r0, [r3, #288] ; 0x120
- 8028136: 4770 bx lr
- 8028138: 2000cfc4 .word 0x2000cfc4
- 0802813c <SetConfirmWebParamsFlag>:
- /**
- * @brief Установить флаг подтверждения сетевых настроек пользователем
- */
- void SetConfirmWebParamsFlag(void)
- {
- fConfirmWebParams = true;
- 802813c: 4b01 ldr r3, [pc, #4] ; (8028144 <SetConfirmWebParamsFlag+0x8>)
- 802813e: 2201 movs r2, #1
- 8028140: 701a strb r2, [r3, #0]
- 8028142: 4770 bx lr
- 8028144: 20000b18 .word 0x20000b18
- 08028148 <SetIPStr>:
- // Сетевые параметры
- /**
- * @brief IP адрес
- */
- void SetIPStr(char *str)
- {
- 8028148: 4601 mov r1, r0
- //strcpy(sSettings.sWebParams.ip, str);
- strcpy(sSettings.sWebTempParams.ip, str);
- 802814a: 4801 ldr r0, [pc, #4] ; (8028150 <SetIPStr+0x8>)
- 802814c: f7f9 be52 b.w 8021df4 <strcpy>
- 8028150: 2000cff7 .word 0x2000cff7
- 08028154 <SetGatewayStr>:
- /**
- * @brief Шлюз
- */
- void SetGatewayStr(char *str)
- {
- 8028154: 4601 mov r1, r0
- //strcpy(sSettings.sWebParams.gate, str);
- strcpy(sSettings.sWebTempParams.gate, str);
- 8028156: 4801 ldr r0, [pc, #4] ; (802815c <SetGatewayStr+0x8>)
- 8028158: f7f9 be4c b.w 8021df4 <strcpy>
- 802815c: 2000d007 .word 0x2000d007
- 08028160 <SetMaskStr>:
- /**
- * @brief Текущая маска подсети
- */
- void SetMaskStr(char *str)
- {
- 8028160: 4601 mov r1, r0
- //strcpy(sSettings.sWebParams.mask, str);
- strcpy(sSettings.sWebTempParams.mask, str);
- 8028162: 4801 ldr r0, [pc, #4] ; (8028168 <SetMaskStr+0x8>)
- 8028164: f7f9 be46 b.w 8021df4 <strcpy>
- 8028168: 2000d017 .word 0x2000d017
- 0802816c <SetDhcpStateStr>:
- /**
- * @brief Настройка DHCP
- */
- void SetDhcpStateStr(char *str)
- {
- 802816c: b508 push {r3, lr}
- if (strncmp(str, "on", 2) == 0)
- 802816e: 4906 ldr r1, [pc, #24] ; (8028188 <SetDhcpStateStr+0x1c>)
- 8028170: 2202 movs r2, #2
- 8028172: f7f9 feff bl 8021f74 <strncmp>
- 8028176: 4b05 ldr r3, [pc, #20] ; (802818c <SetDhcpStateStr+0x20>)
- 8028178: b908 cbnz r0, 802817e <SetDhcpStateStr+0x12>
- //sSettings.sWebParams.dhcpEnable = 1;
- sSettings.sWebTempParams.dhcpEnable = 1;
- 802817a: 2201 movs r2, #1
- 802817c: e000 b.n 8028180 <SetDhcpStateStr+0x14>
- else
- //sSettings.sWebParams.dhcpEnable = 0;
- sSettings.sWebTempParams.dhcpEnable = 0;
- 802817e: 2200 movs r2, #0
- 8028180: f883 2063 strb.w r2, [r3, #99] ; 0x63
- 8028184: bd08 pop {r3, pc}
- 8028186: bf00 nop
- 8028188: 080399ee .word 0x080399ee
- 802818c: 2000cfc4 .word 0x2000cfc4
- 08028190 <SetUDPDhcpStateStr>:
- /**
- * @brief Настройка DHCP
- */
- void SetUDPDhcpStateStr(char *str)
- {
- 8028190: b510 push {r4, lr}
- if (strncmp(str, "True", 4) == 0)
- 8028192: 490a ldr r1, [pc, #40] ; (80281bc <SetUDPDhcpStateStr+0x2c>)
- 8028194: 2204 movs r2, #4
- /**
- * @brief Настройка DHCP
- */
- void SetUDPDhcpStateStr(char *str)
- {
- 8028196: 4604 mov r4, r0
- if (strncmp(str, "True", 4) == 0)
- 8028198: f7f9 feec bl 8021f74 <strncmp>
- 802819c: b920 cbnz r0, 80281a8 <SetUDPDhcpStateStr+0x18>
- sSettings.sWebTempParams.dhcpEnable = 1;
- 802819e: 4b08 ldr r3, [pc, #32] ; (80281c0 <SetUDPDhcpStateStr+0x30>)
- 80281a0: 2201 movs r2, #1
- 80281a2: f883 2063 strb.w r2, [r3, #99] ; 0x63
- 80281a6: bd10 pop {r4, pc}
- else if (strncmp(str, "False", 5) == 0)
- 80281a8: 4620 mov r0, r4
- 80281aa: 4906 ldr r1, [pc, #24] ; (80281c4 <SetUDPDhcpStateStr+0x34>)
- 80281ac: 2205 movs r2, #5
- 80281ae: f7f9 fee1 bl 8021f74 <strncmp>
- 80281b2: b910 cbnz r0, 80281ba <SetUDPDhcpStateStr+0x2a>
- sSettings.sWebTempParams.dhcpEnable = 0;
- 80281b4: 4b02 ldr r3, [pc, #8] ; (80281c0 <SetUDPDhcpStateStr+0x30>)
- 80281b6: f883 0063 strb.w r0, [r3, #99] ; 0x63
- 80281ba: bd10 pop {r4, pc}
- 80281bc: 08040e43 .word 0x08040e43
- 80281c0: 2000cfc4 .word 0x2000cfc4
- 80281c4: 080399dd .word 0x080399dd
- 080281c8 <SetReadCommunity>:
- /**
- * @brief Community для чтения
- */
- void SetReadCommunity(char *str)
- {
- 80281c8: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.readCommunity, str);
- 80281ca: 4801 ldr r0, [pc, #4] ; (80281d0 <SetReadCommunity+0x8>)
- 80281cc: f7f9 be12 b.w 8021df4 <strcpy>
- 80281d0: 2000d195 .word 0x2000d195
- 080281d4 <SetWriteCommunity>:
- /**
- * @brief Community для записи
- */
- void SetWriteCommunity(char *str)
- {
- 80281d4: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.writeCommunity, str);
- 80281d6: 4801 ldr r0, [pc, #4] ; (80281dc <SetWriteCommunity+0x8>)
- 80281d8: f7f9 be0c b.w 8021df4 <strcpy>
- 80281dc: 2000d1a9 .word 0x2000d1a9
- 080281e0 <SetManagerIp>:
- /**
- * @brief IP SNMP менеджера
- */
- void SetManagerIp(char *str)
- {
- 80281e0: b510 push {r4, lr}
- strcpy(sSettings.sSnmp.managerIP, str);
- 80281e2: 4c05 ldr r4, [pc, #20] ; (80281f8 <SetManagerIp+0x18>)
- /**
- * @brief IP SNMP менеджера
- */
- void SetManagerIp(char *str)
- {
- 80281e4: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.managerIP, str);
- 80281e6: 4620 mov r0, r4
- 80281e8: f7f9 fe04 bl 8021df4 <strcpy>
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
- 80281ec: 4620 mov r0, r4
- }
- 80281ee: e8bd 4010 ldmia.w sp!, {r4, lr}
- * @brief IP SNMP менеджера
- */
- void SetManagerIp(char *str)
- {
- strcpy(sSettings.sSnmp.managerIP, str);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
- 80281f2: f010 b837 b.w 8038264 <SNMP_SetManagerIP>
- 80281f6: bf00 nop
- 80281f8: 2000d271 .word 0x2000d271
- 080281fc <SetManagerIp2>:
- }
- void SetManagerIp2(char *str)
- {
- 80281fc: b510 push {r4, lr}
- strcpy(sSettings.sSnmp.managerIP2, str);
- 80281fe: 4c05 ldr r4, [pc, #20] ; (8028214 <SetManagerIp2+0x18>)
- strcpy(sSettings.sSnmp.managerIP, str);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
- }
- void SetManagerIp2(char *str)
- {
- 8028200: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.managerIP2, str);
- 8028202: 4620 mov r0, r4
- 8028204: f7f9 fdf6 bl 8021df4 <strcpy>
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
- 8028208: 4620 mov r0, r4
- }
- 802820a: e8bd 4010 ldmia.w sp!, {r4, lr}
- }
- void SetManagerIp2(char *str)
- {
- strcpy(sSettings.sSnmp.managerIP2, str);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
- 802820e: f010 b829 b.w 8038264 <SNMP_SetManagerIP>
- 8028212: bf00 nop
- 8028214: 2000d285 .word 0x2000d285
- 08028218 <SetManagerIp3>:
- }
- void SetManagerIp3(char *str)
- {
- 8028218: b510 push {r4, lr}
- strcpy(sSettings.sSnmp.managerIP3, str);
- 802821a: 4c05 ldr r4, [pc, #20] ; (8028230 <SetManagerIp3+0x18>)
- strcpy(sSettings.sSnmp.managerIP2, str);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
- }
- void SetManagerIp3(char *str)
- {
- 802821c: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.managerIP3, str);
- 802821e: 4620 mov r0, r4
- 8028220: f7f9 fde8 bl 8021df4 <strcpy>
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
- 8028224: 4620 mov r0, r4
- }
- 8028226: e8bd 4010 ldmia.w sp!, {r4, lr}
- }
- void SetManagerIp3(char *str)
- {
- strcpy(sSettings.sSnmp.managerIP3, str);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
- 802822a: f010 b81b b.w 8038264 <SNMP_SetManagerIP>
- 802822e: bf00 nop
- 8028230: 2000d299 .word 0x2000d299
- 08028234 <SetManagerIp4>:
- }
- void SetManagerIp4(char *str)
- {
- 8028234: b510 push {r4, lr}
- strcpy(sSettings.sSnmp.managerIP4, str);
- 8028236: 4c05 ldr r4, [pc, #20] ; (802824c <SetManagerIp4+0x18>)
- strcpy(sSettings.sSnmp.managerIP3, str);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
- }
- void SetManagerIp4(char *str)
- {
- 8028238: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.managerIP4, str);
- 802823a: 4620 mov r0, r4
- 802823c: f7f9 fdda bl 8021df4 <strcpy>
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP4);
- 8028240: 4620 mov r0, r4
- }
- 8028242: e8bd 4010 ldmia.w sp!, {r4, lr}
- }
- void SetManagerIp4(char *str)
- {
- strcpy(sSettings.sSnmp.managerIP4, str);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP4);
- 8028246: f010 b80d b.w 8038264 <SNMP_SetManagerIP>
- 802824a: bf00 nop
- 802824c: 2000d2ad .word 0x2000d2ad
- 08028250 <SetManagerIp5>:
- }
- void SetManagerIp5(char *str)
- {
- 8028250: b510 push {r4, lr}
- strcpy(sSettings.sSnmp.managerIP5, str);
- 8028252: 4c05 ldr r4, [pc, #20] ; (8028268 <SetManagerIp5+0x18>)
- strcpy(sSettings.sSnmp.managerIP4, str);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP4);
- }
- void SetManagerIp5(char *str)
- {
- 8028254: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.managerIP5, str);
- 8028256: 4620 mov r0, r4
- 8028258: f7f9 fdcc bl 8021df4 <strcpy>
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
- 802825c: 4620 mov r0, r4
- }
- 802825e: e8bd 4010 ldmia.w sp!, {r4, lr}
- }
- void SetManagerIp5(char *str)
- {
- strcpy(sSettings.sSnmp.managerIP5, str);
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
- 8028262: f00f bfff b.w 8038264 <SNMP_SetManagerIP>
- 8028266: bf00 nop
- 8028268: 2000d2c1 .word 0x2000d2c1
- 0802826c <SetOwner>:
- /**
- * @brief Установить владельца
- */
- void SetOwner(char *str)
- {
- 802826c: b510 push {r4, lr}
- strcpy(sSettings.sSnmp.sysContact, str);
- 802826e: 4c06 ldr r4, [pc, #24] ; (8028288 <SetOwner+0x1c>)
- /**
- * @brief Установить владельца
- */
- void SetOwner(char *str)
- {
- 8028270: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.sysContact, str);
- 8028272: 4620 mov r0, r4
- 8028274: f7f9 fdbe bl 8021df4 <strcpy>
- SNMP_SetSysContact(sSettings.sSnmp.sysContact);
- 8028278: 4620 mov r0, r4
- 802827a: f00f ffc9 bl 8038210 <SNMP_SetSysContact>
- SNMP_SetObjDescr();
- }
- 802827e: e8bd 4010 ldmia.w sp!, {r4, lr}
- */
- void SetOwner(char *str)
- {
- strcpy(sSettings.sSnmp.sysContact, str);
- SNMP_SetSysContact(sSettings.sSnmp.sysContact);
- SNMP_SetObjDescr();
- 8028282: f00f bf7b b.w 803817c <SNMP_SetObjDescr>
- 8028286: bf00 nop
- 8028288: 2000d1bd .word 0x2000d1bd
- 0802828c <SetLocation>:
- /**
- * @brief Установить местоположение
- */
- void SetLocation(char *str)
- {
- 802828c: b510 push {r4, lr}
- strcpy(sSettings.sSnmp.sysLocation, str);
- 802828e: 4c05 ldr r4, [pc, #20] ; (80282a4 <SetLocation+0x18>)
- /**
- * @brief Установить местоположение
- */
- void SetLocation(char *str)
- {
- 8028290: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.sysLocation, str);
- 8028292: 4620 mov r0, r4
- 8028294: f7f9 fdae bl 8021df4 <strcpy>
- SNMP_SetSysLocation(sSettings.sSnmp.sysLocation);
- 8028298: 4620 mov r0, r4
- }
- 802829a: e8bd 4010 ldmia.w sp!, {r4, lr}
- * @brief Установить местоположение
- */
- void SetLocation(char *str)
- {
- strcpy(sSettings.sSnmp.sysLocation, str);
- SNMP_SetSysLocation(sSettings.sSnmp.sysLocation);
- 802829e: f00f bfd3 b.w 8038248 <SNMP_SetSysLocation>
- 80282a2: bf00 nop
- 80282a4: 2000d203 .word 0x2000d203
- 080282a8 <SetComment>:
- /**
- * @brief Установить комментарий
- */
- void SetComment(char *str)
- {
- 80282a8: 4601 mov r1, r0
- strcpy(sSettings.sInfo.comments, str);
- 80282aa: 4801 ldr r0, [pc, #4] ; (80282b0 <SetComment+0x8>)
- 80282ac: f7f9 bda2 b.w 8021df4 <strcpy>
- 80282b0: 2000d072 .word 0x2000d072
- 080282b4 <SetRDSIpStr>:
- // Сетевые параметры RADIUS сервера
- /**
- * @brief IP адрес
- */
- void SetRDSIpStr(char *str)
- {
- 80282b4: 4601 mov r1, r0
- strcpy(sSettings.sRADIUS.ServerIP, str);
- 80282b6: 4801 ldr r0, [pc, #4] ; (80282bc <SetRDSIpStr+0x8>)
- 80282b8: f7f9 bd9c b.w 8021df4 <strcpy>
- 80282bc: 2000d33d .word 0x2000d33d
- 080282c0 <SetRDSPortStr>:
- /**
- * @brief Порт
- */
- void SetRDSPortStr(char *str)
- {
- 80282c0: b508 push {r3, lr}
- sSettings.sRADIUS.port = atoi(str);
- 80282c2: f7f9 fafd bl 80218c0 <atoi>
- 80282c6: 4b02 ldr r3, [pc, #8] ; (80282d0 <SetRDSPortStr+0x10>)
- 80282c8: f8c3 039c str.w r0, [r3, #924] ; 0x39c
- 80282cc: bd08 pop {r3, pc}
- 80282ce: bf00 nop
- 80282d0: 2000cfc4 .word 0x2000cfc4
- 080282d4 <SetRDSKeyAccesstStr>:
- /**
- * @brief Код access
- */
- void SetRDSKeyAccesstStr(char *str)
- {
- 80282d4: b508 push {r3, lr}
- sSettings.sRADIUS.key_access = atoi(str);
- 80282d6: f7f9 faf3 bl 80218c0 <atoi>
- 80282da: 4b02 ldr r3, [pc, #8] ; (80282e4 <SetRDSKeyAccesstStr+0x10>)
- 80282dc: f8c3 03a0 str.w r0, [r3, #928] ; 0x3a0
- 80282e0: bd08 pop {r3, pc}
- 80282e2: bf00 nop
- 80282e4: 2000cfc4 .word 0x2000cfc4
- 080282e8 <SetRDSPasswordkStr>:
- /**
- * @brief пароль RADIUS
- */
- void SetRDSPasswordkStr(char *str)
- {
- 80282e8: 4601 mov r1, r0
- strcpy(sSettings.sRADIUS.rds_password, str);
- 80282ea: 4801 ldr r0, [pc, #4] ; (80282f0 <SetRDSPasswordkStr+0x8>)
- 80282ec: f7f9 bd82 b.w 8021df4 <strcpy>
- 80282f0: 2000d34d .word 0x2000d34d
- 080282f4 <SetRDSEnableStateStr>:
- /**
- * @brief Настройка вкл/ выкл RADIUS сервера
- */
- void SetRDSEnableStateStr(char *str)
- {
- 80282f4: b508 push {r3, lr}
- if (strncmp(str, "on", 2) == 0)
- 80282f6: 4906 ldr r1, [pc, #24] ; (8028310 <SetRDSEnableStateStr+0x1c>)
- 80282f8: 2202 movs r2, #2
- 80282fa: f7f9 fe3b bl 8021f74 <strncmp>
- 80282fe: 4b05 ldr r3, [pc, #20] ; (8028314 <SetRDSEnableStateStr+0x20>)
- 8028300: b908 cbnz r0, 8028306 <SetRDSEnableStateStr+0x12>
- sSettings.sRADIUS.RDSEnable = 1;
- 8028302: 2201 movs r2, #1
- 8028304: e000 b.n 8028308 <SetRDSEnableStateStr+0x14>
- else
- sSettings.sRADIUS.RDSEnable = 0;
- 8028306: 2200 movs r2, #0
- 8028308: f883 239a strb.w r2, [r3, #922] ; 0x39a
- 802830c: bd08 pop {r3, pc}
- 802830e: bf00 nop
- 8028310: 080399ee .word 0x080399ee
- 8028314: 2000cfc4 .word 0x2000cfc4
- 08028318 <SetAuthEnableStateStr>:
- /**
- * @brief Настройка вкл/ выкл авторизации
- */
- void SetAuthEnableStateStr(char *str)
- {
- 8028318: b508 push {r3, lr}
- if (strncmp(str, "on", 2) == 0)
- 802831a: 4906 ldr r1, [pc, #24] ; (8028334 <SetAuthEnableStateStr+0x1c>)
- 802831c: 2202 movs r2, #2
- 802831e: f7f9 fe29 bl 8021f74 <strncmp>
- 8028322: 4b05 ldr r3, [pc, #20] ; (8028338 <SetAuthEnableStateStr+0x20>)
- 8028324: b908 cbnz r0, 802832a <SetAuthEnableStateStr+0x12>
- sSettings.sRADIUS.Auth_enable = 1;
- 8028326: 2201 movs r2, #1
- 8028328: e000 b.n 802832c <SetAuthEnableStateStr+0x14>
- else
- sSettings.sRADIUS.Auth_enable = 0;
- 802832a: 2200 movs r2, #0
- 802832c: f883 2378 strb.w r2, [r3, #888] ; 0x378
- 8028330: bd08 pop {r3, pc}
- 8028332: bf00 nop
- 8028334: 080399ee .word 0x080399ee
- 8028338: 2000cfc4 .word 0x2000cfc4
- 0802833c <SetDateStr>:
- /**
- * @brief Дата
- */
- void SetDateStr(char *str)
- {
- 802833c: b510 push {r4, lr}
- 802833e: b08c sub sp, #48 ; 0x30
- 8028340: 4604 mov r4, r0
- TM_RTC_t tmp_data;
- char str_data[18];
- char str_time[9];
- uint8_t len;
- memset(str_data, 0, 18);
- 8028342: 2100 movs r1, #0
- 8028344: 2212 movs r2, #18
- 8028346: a807 add r0, sp, #28
- 8028348: f7f9 fbda bl 8021b00 <memset>
- memset(str_time, 0, 9);
- 802834c: 2100 movs r1, #0
- 802834e: 2209 movs r2, #9
- 8028350: 4668 mov r0, sp
- 8028352: f7f9 fbd5 bl 8021b00 <memset>
- str += 2;
- strncpy(str_data, (str + 6), 2);
- 8028356: f104 0108 add.w r1, r4, #8
- 802835a: 2202 movs r2, #2
- 802835c: a807 add r0, sp, #28
- 802835e: f7f9 fe5f bl 8022020 <strncpy>
- strncat(str_data, (str + 2), 4);
- 8028362: 1d21 adds r1, r4, #4
- 8028364: 2204 movs r2, #4
- 8028366: a807 add r0, sp, #28
- 8028368: f7f9 fdd2 bl 8021f10 <strncat>
- strncat(str_data, str, 2);
- 802836c: 2202 movs r2, #2
- 802836e: 1ca1 adds r1, r4, #2
- 8028370: a807 add r0, sp, #28
- 8028372: f7f9 fdcd bl 8021f10 <strncat>
- TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN);
- 8028376: a803 add r0, sp, #12
- 8028378: 2100 movs r1, #0
- 802837a: f7fe f885 bl 8026488 <TM_RTC_GetDateTime>
- sprintf(str_time, "-01-%02i:%02i", tmp_data.hours, tmp_data.minutes);
- 802837e: f89d 2011 ldrb.w r2, [sp, #17]
- 8028382: f89d 3010 ldrb.w r3, [sp, #16]
- 8028386: 4908 ldr r1, [pc, #32] ; (80283a8 <SetDateStr+0x6c>)
- 8028388: 4668 mov r0, sp
- 802838a: f7ff fa43 bl 8027814 <tfp_sprintf>
- len = strlen(str_time);
- 802838e: 4668 mov r0, sp
- 8028390: f7f9 fd8e bl 8021eb0 <strlen>
- strncat(str_data, str_time, len);
- 8028394: 4669 mov r1, sp
- 8028396: b2c2 uxtb r2, r0
- 8028398: a807 add r0, sp, #28
- 802839a: f7f9 fdb9 bl 8021f10 <strncat>
- TM_RTC_SetDateTimeString(&str_data);
- 802839e: a807 add r0, sp, #28
- 80283a0: f7fd ff58 bl 8026254 <TM_RTC_SetDateTimeString>
- }
- 80283a4: b00c add sp, #48 ; 0x30
- 80283a6: bd10 pop {r4, pc}
- 80283a8: 080399f1 .word 0x080399f1
- 080283ac <SetTimeStr>:
- /**
- * @brief Время
- */
- void SetTimeStr(char *str)
- {
- 80283ac: b510 push {r4, lr}
- 80283ae: b090 sub sp, #64 ; 0x40
- 80283b0: 4604 mov r4, r0
- TM_RTC_t tmp_data;
- char str_data[18];
- char str_date[14];
- uint8_t len;
- memset(str_data, 0, 18);
- 80283b2: 2100 movs r1, #0
- 80283b4: 2212 movs r2, #18
- 80283b6: a80b add r0, sp, #44 ; 0x2c
- 80283b8: f7f9 fba2 bl 8021b00 <memset>
- memset(str_date, 0, 14);
- 80283bc: 220e movs r2, #14
- 80283be: 2100 movs r1, #0
- 80283c0: a803 add r0, sp, #12
- 80283c2: f7f9 fb9d bl 8021b00 <memset>
- TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN);
- 80283c6: a807 add r0, sp, #28
- 80283c8: 2100 movs r1, #0
- 80283ca: f7fe f85d bl 8026488 <TM_RTC_GetDateTime>
- sprintf(str_date, "%02i-%02i-%02i-01-", tmp_data.date, tmp_data.month, tmp_data.year);
- 80283ce: f89d 1025 ldrb.w r1, [sp, #37] ; 0x25
- 80283d2: f89d 3024 ldrb.w r3, [sp, #36] ; 0x24
- 80283d6: f89d 2023 ldrb.w r2, [sp, #35] ; 0x23
- 80283da: 9100 str r1, [sp, #0]
- 80283dc: a803 add r0, sp, #12
- 80283de: 490a ldr r1, [pc, #40] ; (8028408 <SetTimeStr+0x5c>)
- 80283e0: f7ff fa18 bl 8027814 <tfp_sprintf>
- len = strlen(str_date);
- 80283e4: a803 add r0, sp, #12
- 80283e6: f7f9 fd63 bl 8021eb0 <strlen>
- strncat(str_data, str_date, len);
- 80283ea: a903 add r1, sp, #12
- 80283ec: b2c2 uxtb r2, r0
- 80283ee: a80b add r0, sp, #44 ; 0x2c
- 80283f0: f7f9 fd8e bl 8021f10 <strncat>
- strncat(str_data, str, 5);
- 80283f4: a80b add r0, sp, #44 ; 0x2c
- 80283f6: 4621 mov r1, r4
- 80283f8: 2205 movs r2, #5
- 80283fa: f7f9 fd89 bl 8021f10 <strncat>
- TM_RTC_SetDateTimeString(&str_data);
- 80283fe: a80b add r0, sp, #44 ; 0x2c
- 8028400: f7fd ff28 bl 8026254 <TM_RTC_SetDateTimeString>
- }
- 8028404: b010 add sp, #64 ; 0x40
- 8028406: bd10 pop {r4, pc}
- 8028408: 080399ff .word 0x080399ff
- 0802840c <SetSntpStateStr>:
- /**
- * @brief Состояние SNTP
- */
- void SetSntpStateStr(char *str)
- {
- 802840c: b538 push {r3, r4, r5, lr}
- bool old_sntpEnable = sSettings.sSNTP.sntpEnable;
- 802840e: 4c0d ldr r4, [pc, #52] ; (8028444 <SetSntpStateStr+0x38>)
- if (strncmp(str, "1", 1) == 0){
- 8028410: 490d ldr r1, [pc, #52] ; (8028448 <SetSntpStateStr+0x3c>)
- /**
- * @brief Состояние SNTP
- */
- void SetSntpStateStr(char *str)
- {
- bool old_sntpEnable = sSettings.sSNTP.sntpEnable;
- 8028412: f894 5340 ldrb.w r5, [r4, #832] ; 0x340
- if (strncmp(str, "1", 1) == 0){
- 8028416: 2201 movs r2, #1
- 8028418: f7f9 fdac bl 8021f74 <strncmp>
- 802841c: b948 cbnz r0, 8028432 <SetSntpStateStr+0x26>
- sSettings.sSNTP.sntpEnable = true;
- 802841e: 2001 movs r0, #1
- 8028420: f884 0340 strb.w r0, [r4, #832] ; 0x340
- if(old_sntpEnable != sSettings.sSNTP.sntpEnable){
- 8028424: b965 cbnz r5, 8028440 <SetSntpStateStr+0x34>
- SNTP_Enable(sSettings.sSNTP.sntpEnable);
- 8028426: f010 f81b bl 8038460 <SNTP_Enable>
- }
- else{
- sSettings.sSNTP.sntpEnable = false;
- SNTP_Enable(sSettings.sSNTP.sntpEnable);
- }
- }
- 802842a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- bool old_sntpEnable = sSettings.sSNTP.sntpEnable;
- if (strncmp(str, "1", 1) == 0){
- sSettings.sSNTP.sntpEnable = true;
- if(old_sntpEnable != sSettings.sSNTP.sntpEnable){
- SNTP_Enable(sSettings.sSNTP.sntpEnable);
- SNTP_Poll();
- 802842e: f010 b859 b.w 80384e4 <SNTP_Poll>
- }
- }
- else{
- sSettings.sSNTP.sntpEnable = false;
- 8028432: 2000 movs r0, #0
- 8028434: f884 0340 strb.w r0, [r4, #832] ; 0x340
- SNTP_Enable(sSettings.sSNTP.sntpEnable);
- }
- }
- 8028438: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- SNTP_Poll();
- }
- }
- else{
- sSettings.sSNTP.sntpEnable = false;
- SNTP_Enable(sSettings.sSNTP.sntpEnable);
- 802843c: f010 b810 b.w 8038460 <SNTP_Enable>
- 8028440: bd38 pop {r3, r4, r5, pc}
- 8028442: bf00 nop
- 8028444: 2000cfc4 .word 0x2000cfc4
- 8028448: 08039cb4 .word 0x08039cb4
- 0802844c <SetSntpServerIpStr>:
- /**
- * @brief IP адрес SNTP сервера
- */
- void SetSntpServerIpStr(char *str)
- {
- 802844c: 4601 mov r1, r0
- strcpy(sSettings.sSNTP.ip, str);
- 802844e: 4801 ldr r0, [pc, #4] ; (8028454 <SetSntpServerIpStr+0x8>)
- 8028450: f7f9 bcd0 b.w 8021df4 <strcpy>
- 8028454: 2000d305 .word 0x2000d305
- 08028458 <SetSntpTimeZoneStr>:
- /**
- * @brief Часовой пояс контроллера
- */
- void SetSntpTimeZoneStr(char *str)
- {
- 8028458: b570 push {r4, r5, r6, lr}
- float newUtc;
- newUtc = atof(str);
- 802845a: f7f9 fa2d bl 80218b8 <atof>
- 802845e: f7f8 fb91 bl 8020b84 <__aeabi_d2f>
- if (sSettings.sSNTP.timeZone > 0)
- 8028462: 4b27 ldr r3, [pc, #156] ; (8028500 <SetSntpTimeZoneStr+0xa8>)
- 8028464: f8d3 4370 ldr.w r4, [r3, #880] ; 0x370
- */
- void SetSntpTimeZoneStr(char *str)
- {
- float newUtc;
- newUtc = atof(str);
- 8028468: 4606 mov r6, r0
- if (sSettings.sSNTP.timeZone > 0)
- 802846a: 2100 movs r1, #0
- 802846c: 4620 mov r0, r4
- 802846e: f7f8 fd53 bl 8020f18 <__aeabi_fcmpgt>
- 8028472: b100 cbz r0, 8028476 <SetSntpTimeZoneStr+0x1e>
- 8028474: e033 b.n 80284de <SetSntpTimeZoneStr+0x86>
- {
- TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
- }
- }
- else if (sSettings.sSNTP.timeZone < 0)
- 8028476: 4620 mov r0, r4
- 8028478: 2100 movs r1, #0
- 802847a: f7f8 fd2f bl 8020edc <__aeabi_fcmplt>
- 802847e: 2800 cmp r0, #0
- 8028480: d032 beq.n 80284e8 <SetSntpTimeZoneStr+0x90>
- {
- if (newUtc >= 0)
- 8028482: 4630 mov r0, r6
- 8028484: 2100 movs r1, #0
- 8028486: f7f8 fd3d bl 8020f04 <__aeabi_fcmpge>
- 802848a: b170 cbz r0, 80284aa <SetSntpTimeZoneStr+0x52>
- {
- TM_RTC_Correction(newUtc + fabs(sSettings.sSNTP.timeZone));
- 802848c: 4620 mov r0, r4
- 802848e: f7f8 f843 bl 8020518 <__aeabi_f2d>
- 8028492: f7fc fef7 bl 8025284 <fabs>
- 8028496: 4604 mov r4, r0
- 8028498: 460d mov r5, r1
- 802849a: 4630 mov r0, r6
- 802849c: f7f8 f83c bl 8020518 <__aeabi_f2d>
- 80284a0: 4622 mov r2, r4
- 80284a2: 462b mov r3, r5
- 80284a4: f7f7 feda bl 802025c <__adddf3>
- 80284a8: e016 b.n 80284d8 <SetSntpTimeZoneStr+0x80>
- }
- else
- {
- if (newUtc >= sSettings.sSNTP.timeZone)
- 80284aa: 4630 mov r0, r6
- 80284ac: 4621 mov r1, r4
- 80284ae: f7f8 fd29 bl 8020f04 <__aeabi_fcmpge>
- 80284b2: b1a0 cbz r0, 80284de <SetSntpTimeZoneStr+0x86>
- TM_RTC_Correction(fabs(sSettings.sSNTP.timeZone) - fabs(newUtc));
- 80284b4: 4620 mov r0, r4
- 80284b6: f7f8 f82f bl 8020518 <__aeabi_f2d>
- 80284ba: f7fc fee3 bl 8025284 <fabs>
- 80284be: 4604 mov r4, r0
- 80284c0: 4630 mov r0, r6
- 80284c2: 460d mov r5, r1
- 80284c4: f7f8 f828 bl 8020518 <__aeabi_f2d>
- 80284c8: f7fc fedc bl 8025284 <fabs>
- 80284cc: 4602 mov r2, r0
- 80284ce: 460b mov r3, r1
- 80284d0: 4620 mov r0, r4
- 80284d2: 4629 mov r1, r5
- 80284d4: f7f7 fec0 bl 8020258 <__aeabi_dsub>
- 80284d8: f7f8 fb54 bl 8020b84 <__aeabi_d2f>
- 80284dc: e00a b.n 80284f4 <SetSntpTimeZoneStr+0x9c>
- else
- TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
- 80284de: 4630 mov r0, r6
- 80284e0: 4621 mov r1, r4
- 80284e2: f7f8 fba3 bl 8020c2c <__aeabi_fsub>
- 80284e6: e005 b.n 80284f4 <SetSntpTimeZoneStr+0x9c>
- }
- }
- else if (sSettings.sSNTP.timeZone == 0)
- 80284e8: 4620 mov r0, r4
- 80284ea: 2100 movs r1, #0
- 80284ec: f7f8 fcec bl 8020ec8 <__aeabi_fcmpeq>
- 80284f0: b110 cbz r0, 80284f8 <SetSntpTimeZoneStr+0xa0>
- {
- TM_RTC_Correction(newUtc);
- 80284f2: 4630 mov r0, r6
- 80284f4: f7fe f8c4 bl 8026680 <TM_RTC_Correction>
- }
- sSettings.sSNTP.timeZone = newUtc; // atof(str);
- 80284f8: 4b01 ldr r3, [pc, #4] ; (8028500 <SetSntpTimeZoneStr+0xa8>)
- 80284fa: f8c3 6370 str.w r6, [r3, #880] ; 0x370
- 80284fe: bd70 pop {r4, r5, r6, pc}
- 8028500: 2000cfc4 .word 0x2000cfc4
- 08028504 <SetDINTypeActStr>:
- /**
- * @brief Тип действий при срабатывание сухих контактов
- */
- void SetDINTypeActStr(char *str, uint8_t num)
- {
- 8028504: b510 push {r4, lr}
- 8028506: 460c mov r4, r1
- sSettings.sInOuts.din_type_act[num] = atoi(str);
- 8028508: f7f9 f9da bl 80218c0 <atoi>
- 802850c: 4902 ldr r1, [pc, #8] ; (8028518 <SetDINTypeActStr+0x14>)
- 802850e: 1909 adds r1, r1, r4
- 8028510: f881 0376 strb.w r0, [r1, #886] ; 0x376
- 8028514: bd10 pop {r4, pc}
- 8028516: bf00 nop
- 8028518: 2000cfc4 .word 0x2000cfc4
- 0802851c <SetROStr>:
- /**
- * @brief
- */
- void SetROStr(char *str, uint8_t num)
- {
- 802851c: b510 push {r4, lr}
- 802851e: 460c mov r4, r1
- set_state_douts((DOUT1+num), atoi(str));
- 8028520: f7f9 f9ce bl 80218c0 <atoi>
- 8028524: 1de3 adds r3, r4, #7
- 8028526: b2c1 uxtb r1, r0
- 8028528: b2d8 uxtb r0, r3
- }
- 802852a: e8bd 4010 ldmia.w sp!, {r4, lr}
- /**
- * @brief
- */
- void SetROStr(char *str, uint8_t num)
- {
- set_state_douts((DOUT1+num), atoi(str));
- 802852e: f000 bb35 b.w 8028b9c <set_state_douts>
- 08028532 <SetROInt>:
- /**
- * @brief
- */
- void SetROInt(uint8_t val, uint8_t num)
- {
- 8028532: 4603 mov r3, r0
- set_state_douts((DOUT1+num), val);
- 8028534: 3107 adds r1, #7
- 8028536: b2c8 uxtb r0, r1
- 8028538: 4619 mov r1, r3
- 802853a: f000 bb2f b.w 8028b9c <set_state_douts>
- 802853e: 0000 movs r0, r0
- 08028540 <SetROTypeActStr>:
- /**
- * @brief Источник срабатывания реле
- */
- void SetROTypeActStr(char *str, uint8_t num)
- {
- 8028540: b510 push {r4, lr}
- 8028542: 460c mov r4, r1
- sSettings.sInOuts.ro_type_source[num] = atoi(str);
- 8028544: f7f9 f9bc bl 80218c0 <atoi>
- 8028548: 4b04 ldr r3, [pc, #16] ; (802855c <SetROTypeActStr+0x1c>)
- 802854a: 191b adds r3, r3, r4
- SetROInt(0, num);
- 802854c: 4621 mov r1, r4
- /**
- * @brief Источник срабатывания реле
- */
- void SetROTypeActStr(char *str, uint8_t num)
- {
- sSettings.sInOuts.ro_type_source[num] = atoi(str);
- 802854e: f883 0374 strb.w r0, [r3, #884] ; 0x374
- SetROInt(0, num);
- 8028552: 2000 movs r0, #0
- }
- 8028554: e8bd 4010 ldmia.w sp!, {r4, lr}
- * @brief Источник срабатывания реле
- */
- void SetROTypeActStr(char *str, uint8_t num)
- {
- sSettings.sInOuts.ro_type_source[num] = atoi(str);
- SetROInt(0, num);
- 8028558: f7ff bfeb b.w 8028532 <SetROInt>
- 802855c: 2000cfc4 .word 0x2000cfc4
- 08028560 <SETTINGS_SetBootParamsDef>:
- /**
- * @brief Установить параметры обновления ПО по умолчанию
- */
- void SETTINGS_SetBootParamsDef(void)
- {
- sSettings.bootParams.loadMode = 0;
- 8028560: 4b02 ldr r3, [pc, #8] ; (802856c <SETTINGS_SetBootParamsDef+0xc>)
- 8028562: 2200 movs r2, #0
- 8028564: 701a strb r2, [r3, #0]
- sSettings.bootParams.bootTry = 0;
- 8028566: 705a strb r2, [r3, #1]
- 8028568: 4770 bx lr
- 802856a: bf00 nop
- 802856c: 2000cfc4 .word 0x2000cfc4
- 08028570 <SETTINGS_SetWebParamsDef>:
- /**
- * @brief Установить параметры сетевого подключения по умолчанию
- */
- void SETTINGS_SetWebParamsDef(void)
- {
- 8028570: b510 push {r4, lr}
- strcpy(sSettings.sWebParams.ip, "192.168.1.2");
- 8028572: 4c09 ldr r4, [pc, #36] ; (8028598 <SETTINGS_SetWebParamsDef+0x28>)
- 8028574: 4909 ldr r1, [pc, #36] ; (802859c <SETTINGS_SetWebParamsDef+0x2c>)
- 8028576: 4620 mov r0, r4
- 8028578: f7f9 fc3c bl 8021df4 <strcpy>
- strcpy(sSettings.sWebParams.gate, "192.168.1.1");
- 802857c: 4908 ldr r1, [pc, #32] ; (80285a0 <SETTINGS_SetWebParamsDef+0x30>)
- 802857e: f104 0010 add.w r0, r4, #16
- 8028582: f7f9 fc37 bl 8021df4 <strcpy>
- strcpy(sSettings.sWebParams.mask, "255.255.255.0");
- 8028586: f104 0020 add.w r0, r4, #32
- 802858a: 4906 ldr r1, [pc, #24] ; (80285a4 <SETTINGS_SetWebParamsDef+0x34>)
- 802858c: f7f9 fc32 bl 8021df4 <strcpy>
- sSettings.sWebParams.dhcpEnable = 1;
- 8028590: 2201 movs r2, #1
- 8028592: f884 2030 strb.w r2, [r4, #48] ; 0x30
- 8028596: bd10 pop {r4, pc}
- 8028598: 2000cfc6 .word 0x2000cfc6
- 802859c: 08039a12 .word 0x08039a12
- 80285a0: 08039a1e .word 0x08039a1e
- 80285a4: 08039a2a .word 0x08039a2a
- 080285a8 <SETTINGS_SetTempWebParamsDef>:
- /**
- * @brief Установить временные параметры сетевого подключения по умолчанию
- */
- void SETTINGS_SetTempWebParamsDef(void)
- {
- 80285a8: b510 push {r4, lr}
- strcpy(sSettings.sWebParams.ip, "192.168.1.2");
- 80285aa: 4c09 ldr r4, [pc, #36] ; (80285d0 <SETTINGS_SetTempWebParamsDef+0x28>)
- 80285ac: 4909 ldr r1, [pc, #36] ; (80285d4 <SETTINGS_SetTempWebParamsDef+0x2c>)
- 80285ae: 4620 mov r0, r4
- 80285b0: f7f9 fc20 bl 8021df4 <strcpy>
- strcpy(sSettings.sWebParams.gate, "192.168.1.1");
- 80285b4: 4908 ldr r1, [pc, #32] ; (80285d8 <SETTINGS_SetTempWebParamsDef+0x30>)
- 80285b6: f104 0010 add.w r0, r4, #16
- 80285ba: f7f9 fc1b bl 8021df4 <strcpy>
- strcpy(sSettings.sWebParams.mask, "255.255.255.0");
- 80285be: f104 0020 add.w r0, r4, #32
- 80285c2: 4906 ldr r1, [pc, #24] ; (80285dc <SETTINGS_SetTempWebParamsDef+0x34>)
- 80285c4: f7f9 fc16 bl 8021df4 <strcpy>
- sSettings.sWebParams.dhcpEnable = 1;
- 80285c8: 2201 movs r2, #1
- 80285ca: f884 2030 strb.w r2, [r4, #48] ; 0x30
- 80285ce: bd10 pop {r4, pc}
- 80285d0: 2000cfc6 .word 0x2000cfc6
- 80285d4: 08039a12 .word 0x08039a12
- 80285d8: 08039a1e .word 0x08039a1e
- 80285dc: 08039a2a .word 0x08039a2a
- 080285e0 <SETTINGS_SetSnmpDef>:
- /**
- * @brief Установить параметры SNMP по умолчанию
- */
- void SETTINGS_SetSnmpDef(void)
- {
- 80285e0: b570 push {r4, r5, r6, lr}
- strcpy(sSettings.sSnmp.sysDescr, "");
- 80285e2: 4c1e ldr r4, [pc, #120] ; (802865c <SETTINGS_SetSnmpDef+0x7c>)
- 80285e4: 4d1e ldr r5, [pc, #120] ; (8028660 <SETTINGS_SetSnmpDef+0x80>)
- strcpy(sSettings.sSnmp.readCommunity, "public");
- 80285e6: 4e1f ldr r6, [pc, #124] ; (8028664 <SETTINGS_SetSnmpDef+0x84>)
- /**
- * @brief Установить параметры SNMP по умолчанию
- */
- void SETTINGS_SetSnmpDef(void)
- {
- strcpy(sSettings.sSnmp.sysDescr, "");
- 80285e8: 4629 mov r1, r5
- 80285ea: 4620 mov r0, r4
- 80285ec: f7f9 fc02 bl 8021df4 <strcpy>
- strcpy(sSettings.sSnmp.readCommunity, "public");
- 80285f0: 4631 mov r1, r6
- 80285f2: f104 00a0 add.w r0, r4, #160 ; 0xa0
- 80285f6: f7f9 fbfd bl 8021df4 <strcpy>
- strcpy(sSettings.sSnmp.writeCommunity, "public");
- 80285fa: 4631 mov r1, r6
- 80285fc: f104 00b4 add.w r0, r4, #180 ; 0xb4
- 8028600: f7f9 fbf8 bl 8021df4 <strcpy>
- strcpy(sSettings.sSnmp.sysContact, "");
- 8028604: 4629 mov r1, r5
- 8028606: f104 00c8 add.w r0, r4, #200 ; 0xc8
- 802860a: f7f9 fbf3 bl 8021df4 <strcpy>
- strcpy(sSettings.sSnmp.sysName, SERIAL);
- 802860e: f104 00fa add.w r0, r4, #250 ; 0xfa
- 8028612: 4915 ldr r1, [pc, #84] ; (8028668 <SETTINGS_SetSnmpDef+0x88>)
- 8028614: f7f9 fbee bl 8021df4 <strcpy>
- strcpy(sSettings.sSnmp.sysLocation, "");
- 8028618: 4629 mov r1, r5
- strcpy(sSettings.sSnmp.managerIP, "0.0.0.0");
- 802861a: 4d14 ldr r5, [pc, #80] ; (802866c <SETTINGS_SetSnmpDef+0x8c>)
- strcpy(sSettings.sSnmp.sysDescr, "");
- strcpy(sSettings.sSnmp.readCommunity, "public");
- strcpy(sSettings.sSnmp.writeCommunity, "public");
- strcpy(sSettings.sSnmp.sysContact, "");
- strcpy(sSettings.sSnmp.sysName, SERIAL);
- strcpy(sSettings.sSnmp.sysLocation, "");
- 802861c: f504 7087 add.w r0, r4, #270 ; 0x10e
- 8028620: f7f9 fbe8 bl 8021df4 <strcpy>
- strcpy(sSettings.sSnmp.managerIP, "0.0.0.0");
- 8028624: 4629 mov r1, r5
- 8028626: f504 70be add.w r0, r4, #380 ; 0x17c
- 802862a: f7f9 fbe3 bl 8021df4 <strcpy>
- strcpy(sSettings.sSnmp.managerIP2, "0.0.0.0");
- 802862e: 4629 mov r1, r5
- 8028630: f504 70c8 add.w r0, r4, #400 ; 0x190
- 8028634: f7f9 fbde bl 8021df4 <strcpy>
- strcpy(sSettings.sSnmp.managerIP3, "0.0.0.0");
- 8028638: 4629 mov r1, r5
- 802863a: f504 70d2 add.w r0, r4, #420 ; 0x1a4
- 802863e: f7f9 fbd9 bl 8021df4 <strcpy>
- strcpy(sSettings.sSnmp.managerIP4, "0.0.0.0");
- 8028642: 4629 mov r1, r5
- 8028644: f504 70dc add.w r0, r4, #440 ; 0x1b8
- 8028648: f7f9 fbd4 bl 8021df4 <strcpy>
- strcpy(sSettings.sSnmp.managerIP5, "0.0.0.0");
- 802864c: f504 70e6 add.w r0, r4, #460 ; 0x1cc
- 8028650: 4629 mov r1, r5
- }
- 8028652: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- strcpy(sSettings.sSnmp.sysLocation, "");
- strcpy(sSettings.sSnmp.managerIP, "0.0.0.0");
- strcpy(sSettings.sSnmp.managerIP2, "0.0.0.0");
- strcpy(sSettings.sSnmp.managerIP3, "0.0.0.0");
- strcpy(sSettings.sSnmp.managerIP4, "0.0.0.0");
- strcpy(sSettings.sSnmp.managerIP5, "0.0.0.0");
- 8028656: f7f9 bbcd b.w 8021df4 <strcpy>
- 802865a: bf00 nop
- 802865c: 2000d0f5 .word 0x2000d0f5
- 8028660: 08041134 .word 0x08041134
- 8028664: 08039a38 .word 0x08039a38
- 8028668: 08039a3f .word 0x08039a3f
- 802866c: 08039a4b .word 0x08039a4b
- 08028670 <SETTINGS_SetInfoDef>:
- /**
- * @brief Установить Информацию об устройстве по умолчанию
- */
- void SETTINGS_SetInfoDef(void)
- {
- 8028670: b510 push {r4, lr}
- strcpy(sSettings.sInfo.productionData, "09.10.2015");
- 8028672: 4c0b ldr r4, [pc, #44] ; (80286a0 <SETTINGS_SetInfoDef+0x30>)
- 8028674: 490b ldr r1, [pc, #44] ; (80286a4 <SETTINGS_SetInfoDef+0x34>)
- 8028676: 4620 mov r0, r4
- 8028678: f7f9 fbbc bl 8021df4 <strcpy>
- strcpy(sSettings.sInfo.mac, DEVICE_MAC);
- 802867c: f104 0028 add.w r0, r4, #40 ; 0x28
- 8028680: 4909 ldr r1, [pc, #36] ; (80286a8 <SETTINGS_SetInfoDef+0x38>)
- 8028682: f7f9 fbb7 bl 8021df4 <strcpy>
- strcpy(sSettings.sInfo.serialNumber, SERIAL);
- 8028686: f104 003a add.w r0, r4, #58 ; 0x3a
- 802868a: 4908 ldr r1, [pc, #32] ; (80286ac <SETTINGS_SetInfoDef+0x3c>)
- 802868c: f7f9 fbb2 bl 8021df4 <strcpy>
- strcpy(sSettings.sInfo.comments, "");
- 8028690: 4907 ldr r1, [pc, #28] ; (80286b0 <SETTINGS_SetInfoDef+0x40>)
- 8028692: f104 004a add.w r0, r4, #74 ; 0x4a
- }
- 8028696: e8bd 4010 ldmia.w sp!, {r4, lr}
- void SETTINGS_SetInfoDef(void)
- {
- strcpy(sSettings.sInfo.productionData, "09.10.2015");
- strcpy(sSettings.sInfo.mac, DEVICE_MAC);
- strcpy(sSettings.sInfo.serialNumber, SERIAL);
- strcpy(sSettings.sInfo.comments, "");
- 802869a: f7f9 bbab b.w 8021df4 <strcpy>
- 802869e: bf00 nop
- 80286a0: 2000d028 .word 0x2000d028
- 80286a4: 08039a53 .word 0x08039a53
- 80286a8: 08039a5e .word 0x08039a5e
- 80286ac: 08039a3f .word 0x08039a3f
- 80286b0: 08041134 .word 0x08041134
- 080286b4 <SETTINGS_SetServiceDef>:
- /**
- * @brief Установить значение сервисных настроек по умолчанию
- */
- void SETTINGS_SetServiceDef(void)
- {
- 80286b4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 80286b8: 4d14 ldr r5, [pc, #80] ; (802870c <SETTINGS_SetServiceDef+0x58>)
- 80286ba: 2400 movs r4, #0
- }
- /**
- * @brief Установить значение сервисных настроек по умолчанию
- */
- void SETTINGS_SetServiceDef(void)
- 80286bc: 2717 movs r7, #23
- strcpy(sSettings.sAuth[user_id].login, "admin");
- strcpy(sSettings.sAuth[user_id].password, "12345");
- break;
- case 1:
- default:
- sSettings.sAuth[user_id].level = USER;
- 80286be: f04f 0801 mov.w r8, #1
- void SETTINGS_SetServiceDef(void)
- {
- uint8_t user_id;
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- switch (user_id) {
- 80286c2: f014 03ff ands.w r3, r4, #255 ; 0xff
- 80286c6: d108 bne.n 80286da <SETTINGS_SetServiceDef+0x26>
- /* First users in the system is always ADMIN.
- * Others are USER */
- case 0:
- sSettings.sAuth[user_id].level = ADMIN;
- strcpy(sSettings.sAuth[user_id].login, "admin");
- 80286c8: 4911 ldr r1, [pc, #68] ; (8028710 <SETTINGS_SetServiceDef+0x5c>)
- 80286ca: 4812 ldr r0, [pc, #72] ; (8028714 <SETTINGS_SetServiceDef+0x60>)
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- switch (user_id) {
- /* First users in the system is always ADMIN.
- * Others are USER */
- case 0:
- sSettings.sAuth[user_id].level = ADMIN;
- 80286cc: f885 3311 strb.w r3, [r5, #785] ; 0x311
- strcpy(sSettings.sAuth[user_id].login, "admin");
- 80286d0: f7f9 fb90 bl 8021df4 <strcpy>
- strcpy(sSettings.sAuth[user_id].password, "12345");
- 80286d4: 4810 ldr r0, [pc, #64] ; (8028718 <SETTINGS_SetServiceDef+0x64>)
- 80286d6: 4911 ldr r1, [pc, #68] ; (802871c <SETTINGS_SetServiceDef+0x68>)
- 80286d8: e010 b.n 80286fc <SETTINGS_SetServiceDef+0x48>
- }
- /**
- * @brief Установить значение сервисных настроек по умолчанию
- */
- void SETTINGS_SetServiceDef(void)
- 80286da: fb07 f604 mul.w r6, r7, r4
- 80286de: 19ab adds r3, r5, r6
- strcpy(sSettings.sAuth[user_id].password, "12345");
- break;
- case 1:
- default:
- sSettings.sAuth[user_id].level = USER;
- strcpy(sSettings.sAuth[user_id].login, "user");
- 80286e0: f506 7044 add.w r0, r6, #784 ; 0x310
- 80286e4: 1828 adds r0, r5, r0
- 80286e6: 490e ldr r1, [pc, #56] ; (8028720 <SETTINGS_SetServiceDef+0x6c>)
- strcpy(sSettings.sAuth[user_id].login, "admin");
- strcpy(sSettings.sAuth[user_id].password, "12345");
- break;
- case 1:
- default:
- sSettings.sAuth[user_id].level = USER;
- 80286e8: f883 8311 strb.w r8, [r3, #785] ; 0x311
- strcpy(sSettings.sAuth[user_id].login, "user");
- 80286ec: 3002 adds r0, #2
- strcpy(sSettings.sAuth[user_id].password, "1234");
- 80286ee: f506 7646 add.w r6, r6, #792 ; 0x318
- strcpy(sSettings.sAuth[user_id].password, "12345");
- break;
- case 1:
- default:
- sSettings.sAuth[user_id].level = USER;
- strcpy(sSettings.sAuth[user_id].login, "user");
- 80286f2: f7f9 fb7f bl 8021df4 <strcpy>
- strcpy(sSettings.sAuth[user_id].password, "1234");
- 80286f6: 19a8 adds r0, r5, r6
- 80286f8: 490a ldr r1, [pc, #40] ; (8028724 <SETTINGS_SetServiceDef+0x70>)
- 80286fa: 3005 adds r0, #5
- 80286fc: 3401 adds r4, #1
- 80286fe: f7f9 fb79 bl 8021df4 <strcpy>
- */
- void SETTINGS_SetServiceDef(void)
- {
- uint8_t user_id;
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- 8028702: 2c02 cmp r4, #2
- 8028704: d1dd bne.n 80286c2 <SETTINGS_SetServiceDef+0xe>
- strcpy(sSettings.sAuth[user_id].login, "user");
- strcpy(sSettings.sAuth[user_id].password, "1234");
- break;
- }
- }
- }
- 8028706: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 802870a: bf00 nop
- 802870c: 2000cfc4 .word 0x2000cfc4
- 8028710: 08039a70 .word 0x08039a70
- 8028714: 2000d2d6 .word 0x2000d2d6
- 8028718: 2000d2e1 .word 0x2000d2e1
- 802871c: 08039a76 .word 0x08039a76
- 8028720: 08039a7c .word 0x08039a7c
- 8028724: 08039a81 .word 0x08039a81
- 08028728 <SETTINGS_SetSntpDef>:
- /**
- * @brief Установить параметры SNTP по умолчанию
- */
- void SETTINGS_SetSntpDef(void)
- {
- 8028728: b510 push {r4, lr}
- sSettings.sSNTP.sntpEnable = true;
- 802872a: 4c08 ldr r4, [pc, #32] ; (802874c <SETTINGS_SetSntpDef+0x24>)
- strcpy(sSettings.sSNTP.ip, "88.147.254.235");
- 802872c: 4908 ldr r1, [pc, #32] ; (8028750 <SETTINGS_SetSntpDef+0x28>)
- 802872e: 4809 ldr r0, [pc, #36] ; (8028754 <SETTINGS_SetSntpDef+0x2c>)
- /**
- * @brief Установить параметры SNTP по умолчанию
- */
- void SETTINGS_SetSntpDef(void)
- {
- sSettings.sSNTP.sntpEnable = true;
- 8028730: 2301 movs r3, #1
- 8028732: f884 3340 strb.w r3, [r4, #832] ; 0x340
- strcpy(sSettings.sSNTP.ip, "88.147.254.235");
- 8028736: f7f9 fb5d bl 8021df4 <strcpy>
- sSettings.sSNTP.timeZone = 3.0;
- 802873a: 4b07 ldr r3, [pc, #28] ; (8028758 <SETTINGS_SetSntpDef+0x30>)
- strcpy(sSettings.sSNTP.data, "none");
- 802873c: 4807 ldr r0, [pc, #28] ; (802875c <SETTINGS_SetSntpDef+0x34>)
- 802873e: 4908 ldr r1, [pc, #32] ; (8028760 <SETTINGS_SetSntpDef+0x38>)
- */
- void SETTINGS_SetSntpDef(void)
- {
- sSettings.sSNTP.sntpEnable = true;
- strcpy(sSettings.sSNTP.ip, "88.147.254.235");
- sSettings.sSNTP.timeZone = 3.0;
- 8028740: f8c4 3370 str.w r3, [r4, #880] ; 0x370
- strcpy(sSettings.sSNTP.data, "none");
- }
- 8028744: e8bd 4010 ldmia.w sp!, {r4, lr}
- void SETTINGS_SetSntpDef(void)
- {
- sSettings.sSNTP.sntpEnable = true;
- strcpy(sSettings.sSNTP.ip, "88.147.254.235");
- sSettings.sSNTP.timeZone = 3.0;
- strcpy(sSettings.sSNTP.data, "none");
- 8028748: f7f9 bb54 b.w 8021df4 <strcpy>
- 802874c: 2000cfc4 .word 0x2000cfc4
- 8028750: 08039a86 .word 0x08039a86
- 8028754: 2000d305 .word 0x2000d305
- 8028758: 40400000 .word 0x40400000
- 802875c: 2000d315 .word 0x2000d315
- 8028760: 08039a95 .word 0x08039a95
- 08028764 <SETTINGS_SetINOUTSDef>:
- /**
- * @brief Установить параметры настроек сухих контактов / реле по умолчанию
- */
- void SETTINGS_SetINOUTSDef(void)
- {
- sSettings.sInOuts.ro_type_source[0] = CRITICAL;
- 8028764: 4b05 ldr r3, [pc, #20] ; (802877c <SETTINGS_SetINOUTSDef+0x18>)
- 8028766: 2201 movs r2, #1
- 8028768: f883 2374 strb.w r2, [r3, #884] ; 0x374
- sSettings.sInOuts.ro_type_source[1] = SNMP_SET;
- 802876c: 2203 movs r2, #3
- 802876e: f883 2375 strb.w r2, [r3, #885] ; 0x375
- sSettings.sInOuts.din_type_act[0] = SNMP_TRAP;
- 8028772: 2202 movs r2, #2
- 8028774: f883 2376 strb.w r2, [r3, #886] ; 0x376
- 8028778: 4770 bx lr
- 802877a: bf00 nop
- 802877c: 2000cfc4 .word 0x2000cfc4
- 08028780 <SETTINGS_SetRADIUSDef>:
- /**
- * @brief Установить параметры RADIUS по умолчанию
- */
- void SETTINGS_SetRADIUSDef(void)
- {
- 8028780: b510 push {r4, lr}
- sSettings.sRADIUS.Auth_enable = true;
- 8028782: 4c0b ldr r4, [pc, #44] ; (80287b0 <SETTINGS_SetRADIUSDef+0x30>)
- sSettings.sRADIUS.RDSEnable = true;
- strcpy(sSettings.sRADIUS.ServerIP, "127.0.0.1");
- 8028784: 490b ldr r1, [pc, #44] ; (80287b4 <SETTINGS_SetRADIUSDef+0x34>)
- 8028786: 480c ldr r0, [pc, #48] ; (80287b8 <SETTINGS_SetRADIUSDef+0x38>)
- /**
- * @brief Установить параметры RADIUS по умолчанию
- */
- void SETTINGS_SetRADIUSDef(void)
- {
- sSettings.sRADIUS.Auth_enable = true;
- 8028788: 2301 movs r3, #1
- 802878a: f884 3378 strb.w r3, [r4, #888] ; 0x378
- sSettings.sRADIUS.RDSEnable = true;
- 802878e: f884 339a strb.w r3, [r4, #922] ; 0x39a
- strcpy(sSettings.sRADIUS.ServerIP, "127.0.0.1");
- 8028792: f7f9 fb2f bl 8021df4 <strcpy>
- sSettings.sRADIUS.port = 1227;
- 8028796: f240 43cb movw r3, #1227 ; 0x4cb
- sSettings.sRADIUS.key_access = 123;
- strcpy(sSettings.sRADIUS.rds_password, "12345");
- 802879a: 4808 ldr r0, [pc, #32] ; (80287bc <SETTINGS_SetRADIUSDef+0x3c>)
- 802879c: 4908 ldr r1, [pc, #32] ; (80287c0 <SETTINGS_SetRADIUSDef+0x40>)
- void SETTINGS_SetRADIUSDef(void)
- {
- sSettings.sRADIUS.Auth_enable = true;
- sSettings.sRADIUS.RDSEnable = true;
- strcpy(sSettings.sRADIUS.ServerIP, "127.0.0.1");
- sSettings.sRADIUS.port = 1227;
- 802879e: f8c4 339c str.w r3, [r4, #924] ; 0x39c
- sSettings.sRADIUS.key_access = 123;
- 80287a2: 237b movs r3, #123 ; 0x7b
- 80287a4: f8c4 33a0 str.w r3, [r4, #928] ; 0x3a0
- strcpy(sSettings.sRADIUS.rds_password, "12345");
- }
- 80287a8: e8bd 4010 ldmia.w sp!, {r4, lr}
- sSettings.sRADIUS.Auth_enable = true;
- sSettings.sRADIUS.RDSEnable = true;
- strcpy(sSettings.sRADIUS.ServerIP, "127.0.0.1");
- sSettings.sRADIUS.port = 1227;
- sSettings.sRADIUS.key_access = 123;
- strcpy(sSettings.sRADIUS.rds_password, "12345");
- 80287ac: f7f9 bb22 b.w 8021df4 <strcpy>
- 80287b0: 2000cfc4 .word 0x2000cfc4
- 80287b4: 08039a9a .word 0x08039a9a
- 80287b8: 2000d33d .word 0x2000d33d
- 80287bc: 2000d34d .word 0x2000d34d
- 80287c0: 08039a76 .word 0x08039a76
- 080287c4 <SETTINGS_ReadFromFlash>:
- */
- void SETTINGS_ReadFromFlash(uint8_t *data, uint32_t size)
- {
- uint32_t baseAddress = SETTINGS_SECTOR;
-
- for (uint32_t i = 0; i < size; i++)
- 80287c4: 2300 movs r3, #0
- 80287c6: e006 b.n 80287d6 <SETTINGS_ReadFromFlash+0x12>
- *data++ = (*(uint32_t*)baseAddress++);;
- 80287c8: f103 6200 add.w r2, r3, #134217728 ; 0x8000000
- 80287cc: f502 4280 add.w r2, r2, #16384 ; 0x4000
- 80287d0: 6812 ldr r2, [r2, #0]
- 80287d2: 54c2 strb r2, [r0, r3]
- */
- void SETTINGS_ReadFromFlash(uint8_t *data, uint32_t size)
- {
- uint32_t baseAddress = SETTINGS_SECTOR;
-
- for (uint32_t i = 0; i < size; i++)
- 80287d4: 3301 adds r3, #1
- 80287d6: 428b cmp r3, r1
- 80287d8: d1f6 bne.n 80287c8 <SETTINGS_ReadFromFlash+0x4>
- *data++ = (*(uint32_t*)baseAddress++);;
- }
- 80287da: 4770 bx lr
- 080287dc <SETTINGS_EraseFlashSector>:
- */
- void SETTINGS_EraseFlashSector(void)
- {
- FLASH_Status status;
- if ((status = FLASH_EraseSector(FLASH_Sector_1, VoltageRange_3)) != FLASH_COMPLETE) {
- 80287dc: 2008 movs r0, #8
- 80287de: 2102 movs r1, #2
- 80287e0: f7fc be32 b.w 8025448 <FLASH_EraseSector>
- 080287e4 <SETTINGS_GetCRC>:
- /**
- * @brief
- * @retval
- */
- uint32_t SETTINGS_GetCRC(void)
- {
- 80287e4: b508 push {r3, lr}
- CRC_ResetDR();
- 80287e6: f7fc fd99 bl 802531c <CRC_ResetDR>
- return CRC_CalcBlockCRC((uint32_t*)&sSettings, sizeof(sSettings)/4 - 1);
- 80287ea: 4803 ldr r0, [pc, #12] ; (80287f8 <SETTINGS_GetCRC+0x14>)
- 80287ec: 21e9 movs r1, #233 ; 0xe9
- }
- 80287ee: e8bd 4008 ldmia.w sp!, {r3, lr}
- * @retval
- */
- uint32_t SETTINGS_GetCRC(void)
- {
- CRC_ResetDR();
- return CRC_CalcBlockCRC((uint32_t*)&sSettings, sizeof(sSettings)/4 - 1);
- 80287f2: f7fc bd99 b.w 8025328 <CRC_CalcBlockCRC>
- 80287f6: bf00 nop
- 80287f8: 2000cfc4 .word 0x2000cfc4
- 080287fc <SETTINGS_WriteToFlash>:
- /**
- * @brief
- */
- void SETTINGS_WriteToFlash(uint8_t *data, uint32_t size)
- {
- 80287fc: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8028800: 4606 mov r6, r0
- 8028802: 468a mov sl, r1
- uint32_t baseAddress = SETTINGS_SECTOR;
- uint32_t checkCrc = 0;
- uint32_t crc = SETTINGS_GetCRC();
- 8028804: f7ff ffee bl 80287e4 <SETTINGS_GetCRC>
- /**
- * @brief
- */
- void SETTINGS_WriteToFlash(uint8_t *data, uint32_t size)
- {
- uint32_t baseAddress = SETTINGS_SECTOR;
- 8028808: 4c17 ldr r4, [pc, #92] ; (8028868 <SETTINGS_WriteToFlash+0x6c>)
- uint32_t checkCrc = 0;
- uint32_t crc = SETTINGS_GetCRC();
- 802880a: 4680 mov r8, r0
- 802880c: 2703 movs r7, #3
- FLASH_Status status;
- for (uint8_t i = 0; i < 3; i++)
- {
- fAlarm = 0;
- FLASH_Unlock();
- 802880e: f7fc fd9b bl 8025348 <FLASH_Unlock>
- 8028812: 4635 mov r5, r6
- SETTINGS_EraseFlashSector();
- 8028814: f7ff ffe2 bl 80287dc <SETTINGS_EraseFlashSector>
- }
- /**
- * @brief
- */
- void SETTINGS_WriteToFlash(uint8_t *data, uint32_t size)
- 8028818: eb04 0b0a add.w fp, r4, sl
- fAlarm = 0;
- FLASH_Unlock();
- SETTINGS_EraseFlashSector();
- for (uint32_t i = 0; i < size; i++)
- 802881c: e00a b.n 8028834 <SETTINGS_WriteToFlash+0x38>
- if ((status = FLASH_ProgramByte(baseAddress++, *data++)) != FLASH_COMPLETE) {
- 802881e: f815 1b01 ldrb.w r1, [r5], #1
- 8028822: 4620 mov r0, r4
- 8028824: f7fc fdd6 bl 80253d4 <FLASH_ProgramByte>
- 8028828: f104 0901 add.w r9, r4, #1
- 802882c: 2808 cmp r0, #8
- 802882e: 462e mov r6, r5
- 8028830: 464c mov r4, r9
- 8028832: d102 bne.n 802883a <SETTINGS_WriteToFlash+0x3e>
- fAlarm = 0;
- FLASH_Unlock();
- SETTINGS_EraseFlashSector();
- for (uint32_t i = 0; i < size; i++)
- 8028834: 455c cmp r4, fp
- 8028836: 462e mov r6, r5
- 8028838: d1f1 bne.n 802881e <SETTINGS_WriteToFlash+0x22>
- if ((status = FLASH_ProgramByte(baseAddress++, *data++)) != FLASH_COMPLETE) {
- DBG printf("FLASH_ProgramByte error: status = %d\r\n", status);
- break;
- }
- if ((status = FLASH_ProgramWord((uint32_t)CRC_ADDRESS, crc)) != FLASH_COMPLETE) {
- 802883a: 4641 mov r1, r8
- 802883c: 480b ldr r0, [pc, #44] ; (802886c <SETTINGS_WriteToFlash+0x70>)
- 802883e: f7fc fde5 bl 802540c <FLASH_ProgramWord>
- DBG printf("FLASH_ProgramWord error: status = %d\r\n", status);
- }
- FLASH_Lock();
- 8028842: f7fc fd8f bl 8025364 <FLASH_Lock>
- /* Считываем что записали */
- SETTINGS_ReadFromFlash((uint8_t*)&sSettings, sizeof(sSettings));
- 8028846: 480a ldr r0, [pc, #40] ; (8028870 <SETTINGS_WriteToFlash+0x74>)
- 8028848: f44f 716a mov.w r1, #936 ; 0x3a8
- 802884c: f7ff ffba bl 80287c4 <SETTINGS_ReadFromFlash>
- checkCrc = SETTINGS_GetCRC();
- 8028850: f7ff ffc8 bl 80287e4 <SETTINGS_GetCRC>
-
- /* Проверяем CRC того что было записано */
- if (checkCrc == crc)
- 8028854: 4540 cmp r0, r8
- 8028856: d004 beq.n 8028862 <SETTINGS_WriteToFlash+0x66>
- 8028858: 3f01 subs r7, #1
- uint32_t checkCrc = 0;
- uint32_t crc = SETTINGS_GetCRC();
- bool fAlarm = 0;
- FLASH_Status status;
- for (uint8_t i = 0; i < 3; i++)
- 802885a: f017 07ff ands.w r7, r7, #255 ; 0xff
- 802885e: d1d6 bne.n 802880e <SETTINGS_WriteToFlash+0x12>
- 8028860: e7fe b.n 8028860 <SETTINGS_WriteToFlash+0x64>
- 8028862: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8028866: bf00 nop
- 8028868: 08004000 .word 0x08004000
- 802886c: 08005f9c .word 0x08005f9c
- 8028870: 2000cfc4 .word 0x2000cfc4
- 08028874 <SETTINGS_GetCritSecCRC>:
- /**
- * @brief
- * @retval
- */
- uint32_t SETTINGS_GetCritSecCRC(void)
- {
- 8028874: b508 push {r3, lr}
- CRC_ResetDR();
- 8028876: f7fc fd51 bl 802531c <CRC_ResetDR>
- uint32_t critsec_len = (uint32_t)((uint8_t *)(&sSettings.CritSecCRC) - (uint8_t *)&sSettings) / 4;
- return CRC_CalcBlockCRC((uint32_t *)&sSettings, critsec_len);
- 802887a: 4803 ldr r0, [pc, #12] ; (8028888 <SETTINGS_GetCritSecCRC+0x14>)
- 802887c: 2147 movs r1, #71 ; 0x47
- }
- 802887e: e8bd 4008 ldmia.w sp!, {r3, lr}
- */
- uint32_t SETTINGS_GetCritSecCRC(void)
- {
- CRC_ResetDR();
- uint32_t critsec_len = (uint32_t)((uint8_t *)(&sSettings.CritSecCRC) - (uint8_t *)&sSettings) / 4;
- return CRC_CalcBlockCRC((uint32_t *)&sSettings, critsec_len);
- 8028882: f7fc bd51 b.w 8025328 <CRC_CalcBlockCRC>
- 8028886: bf00 nop
- 8028888: 2000cfc4 .word 0x2000cfc4
- 0802888c <SETTINGS_Save>:
-
- /**
- * @brief Запись структуры настроек во flesh
- */
- void SETTINGS_Save(void)
- {
- 802888c: b508 push {r3, lr}
- /* Calc critical section CRC and store to the settings structure */
- sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
- 802888e: f7ff fff1 bl 8028874 <SETTINGS_GetCritSecCRC>
- 8028892: 4b05 ldr r3, [pc, #20] ; (80288a8 <SETTINGS_Save+0x1c>)
- SETTINGS_WriteToFlash((uint8_t*)&sSettings, sizeof(sSettings));
- 8028894: f44f 716a mov.w r1, #936 ; 0x3a8
- * @brief Запись структуры настроек во flesh
- */
- void SETTINGS_Save(void)
- {
- /* Calc critical section CRC and store to the settings structure */
- sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
- 8028898: f8c3 011c str.w r0, [r3, #284] ; 0x11c
- SETTINGS_WriteToFlash((uint8_t*)&sSettings, sizeof(sSettings));
- 802889c: 4618 mov r0, r3
- }
- 802889e: e8bd 4008 ldmia.w sp!, {r3, lr}
- void SETTINGS_Save(void)
- {
- /* Calc critical section CRC and store to the settings structure */
- sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
- SETTINGS_WriteToFlash((uint8_t*)&sSettings, sizeof(sSettings));
- 80288a2: f7ff bfab b.w 80287fc <SETTINGS_WriteToFlash>
- 80288a6: bf00 nop
- 80288a8: 2000cfc4 .word 0x2000cfc4
- 080288ac <SETTINGS_SetDefaultDebug>:
- /**
- * @brief Установка настроек для отладки
- */
- void SETTINGS_SetDefaultDebug(void)
- {
- 80288ac: b510 push {r4, lr}
- /**
- * @brief Установить флаги по умолчанию
- */
- void SETTINGS_SetFlagsDef(void)
- {
- sSettings.sFlags.netsettingsChanged = false;
- 80288ae: 4c0d ldr r4, [pc, #52] ; (80288e4 <SETTINGS_SetDefaultDebug+0x38>)
- /**
- * @brief Установка настроек для отладки
- */
- void SETTINGS_SetDefaultDebug(void)
- {
- SETTINGS_SetWebParamsDef();
- 80288b0: f7ff fe5e bl 8028570 <SETTINGS_SetWebParamsDef>
- SETTINGS_SetTempWebParamsDef();
- 80288b4: f7ff fe78 bl 80285a8 <SETTINGS_SetTempWebParamsDef>
- SETTINGS_SetSnmpDef();
- 80288b8: f7ff fe92 bl 80285e0 <SETTINGS_SetSnmpDef>
- SETTINGS_SetBootParamsDef();
- 80288bc: f7ff fe50 bl 8028560 <SETTINGS_SetBootParamsDef>
- /**
- * @brief Установить флаги по умолчанию
- */
- void SETTINGS_SetFlagsDef(void)
- {
- sSettings.sFlags.netsettingsChanged = false;
- 80288c0: 2300 movs r3, #0
- 80288c2: f884 3120 strb.w r3, [r4, #288] ; 0x120
- SETTINGS_SetTempWebParamsDef();
- SETTINGS_SetSnmpDef();
- SETTINGS_SetBootParamsDef();
- SETTINGS_SetFlagsDef();
- //SETTINGS_SetServiceDef();
- SETTINGS_SetSntpDef();
- 80288c6: f7ff ff2f bl 8028728 <SETTINGS_SetSntpDef>
- SETTINGS_SetINOUTSDef();
- 80288ca: f7ff ff4b bl 8028764 <SETTINGS_SetINOUTSDef>
- SETTINGS_SetRADIUSDef();
- 80288ce: f7ff ff57 bl 8028780 <SETTINGS_SetRADIUSDef>
- //SETTINGS_SetInfoDef();
-
- sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
- 80288d2: f7ff ffcf bl 8028874 <SETTINGS_GetCritSecCRC>
- sSettings.controlWorld = SETTINGS_CONTROL_WORD;
- 80288d6: 4b04 ldr r3, [pc, #16] ; (80288e8 <SETTINGS_SetDefaultDebug+0x3c>)
- SETTINGS_SetSntpDef();
- SETTINGS_SetINOUTSDef();
- SETTINGS_SetRADIUSDef();
- //SETTINGS_SetInfoDef();
-
- sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
- 80288d8: f8c4 011c str.w r0, [r4, #284] ; 0x11c
- sSettings.controlWorld = SETTINGS_CONTROL_WORD;
- 80288dc: f8c4 33a4 str.w r3, [r4, #932] ; 0x3a4
- 80288e0: bd10 pop {r4, pc}
- 80288e2: bf00 nop
- 80288e4: 2000cfc4 .word 0x2000cfc4
- 80288e8: 075bcd15 .word 0x075bcd15
- 080288ec <SETTINGS_SetAllDefault>:
- /**
- * @brief Сброс всех настроек в значения по умолчанию
- */
- void SETTINGS_SetAllDefault(void)
- {
- 80288ec: b510 push {r4, lr}
- /**
- * @brief Установить флаги по умолчанию
- */
- void SETTINGS_SetFlagsDef(void)
- {
- sSettings.sFlags.netsettingsChanged = false;
- 80288ee: 4c0f ldr r4, [pc, #60] ; (802892c <SETTINGS_SetAllDefault+0x40>)
- /**
- * @brief Сброс всех настроек в значения по умолчанию
- */
- void SETTINGS_SetAllDefault(void)
- {
- SETTINGS_SetBootParamsDef();
- 80288f0: f7ff fe36 bl 8028560 <SETTINGS_SetBootParamsDef>
- SETTINGS_SetWebParamsDef();
- 80288f4: f7ff fe3c bl 8028570 <SETTINGS_SetWebParamsDef>
- SETTINGS_SetTempWebParamsDef();
- 80288f8: f7ff fe56 bl 80285a8 <SETTINGS_SetTempWebParamsDef>
- SETTINGS_SetSnmpDef();
- 80288fc: f7ff fe70 bl 80285e0 <SETTINGS_SetSnmpDef>
- SETTINGS_SetInfoDef();
- 8028900: f7ff feb6 bl 8028670 <SETTINGS_SetInfoDef>
- /**
- * @brief Установить флаги по умолчанию
- */
- void SETTINGS_SetFlagsDef(void)
- {
- sSettings.sFlags.netsettingsChanged = false;
- 8028904: 2300 movs r3, #0
- 8028906: f884 3120 strb.w r3, [r4, #288] ; 0x120
- SETTINGS_SetWebParamsDef();
- SETTINGS_SetTempWebParamsDef();
- SETTINGS_SetSnmpDef();
- SETTINGS_SetInfoDef();
- SETTINGS_SetFlagsDef();
- SETTINGS_SetServiceDef();
- 802890a: f7ff fed3 bl 80286b4 <SETTINGS_SetServiceDef>
- SETTINGS_SetSntpDef();
- 802890e: f7ff ff0b bl 8028728 <SETTINGS_SetSntpDef>
- SETTINGS_SetINOUTSDef();
- 8028912: f7ff ff27 bl 8028764 <SETTINGS_SetINOUTSDef>
- SETTINGS_SetRADIUSDef();
- 8028916: f7ff ff33 bl 8028780 <SETTINGS_SetRADIUSDef>
-
- sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
- 802891a: f7ff ffab bl 8028874 <SETTINGS_GetCritSecCRC>
- sSettings.controlWorld = SETTINGS_CONTROL_WORD;
- 802891e: 4b04 ldr r3, [pc, #16] ; (8028930 <SETTINGS_SetAllDefault+0x44>)
- SETTINGS_SetServiceDef();
- SETTINGS_SetSntpDef();
- SETTINGS_SetINOUTSDef();
- SETTINGS_SetRADIUSDef();
-
- sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
- 8028920: f8c4 011c str.w r0, [r4, #284] ; 0x11c
- sSettings.controlWorld = SETTINGS_CONTROL_WORD;
- 8028924: f8c4 33a4 str.w r3, [r4, #932] ; 0x3a4
- 8028928: bd10 pop {r4, pc}
- 802892a: bf00 nop
- 802892c: 2000cfc4 .word 0x2000cfc4
- 8028930: 075bcd15 .word 0x075bcd15
- 08028934 <SETTINGS_Load>:
- /**
- * @brief Загрузка структуры настроек из flesh
- */
- void SETTINGS_Load(void)
- {
- 8028934: b510 push {r4, lr}
- uint32_t loadCRC; // CRC из flash
- uint32_t newCRC; // CRC загруженной структуры настроек
- SETTINGS_ReadFromFlash((uint8_t*)&sSettings, sizeof(sSettings));
- 8028936: 4809 ldr r0, [pc, #36] ; (802895c <SETTINGS_Load+0x28>)
- 8028938: f44f 716a mov.w r1, #936 ; 0x3a8
- 802893c: f7ff ff42 bl 80287c4 <SETTINGS_ReadFromFlash>
- /* Считываем CRC из флеш памяти */
- loadCRC = (*(uint32_t*)CRC_ADDRESS);
- 8028940: 4b07 ldr r3, [pc, #28] ; (8028960 <SETTINGS_Load+0x2c>)
- 8028942: 681c ldr r4, [r3, #0]
- /* Рассчитываем CRC для структуры настроек */
- newCRC = SETTINGS_GetCRC();
- 8028944: f7ff ff4e bl 80287e4 <SETTINGS_GetCRC>
- if (loadCRC != newCRC) {
- 8028948: 4284 cmp r4, r0
- 802894a: d005 beq.n 8028958 <SETTINGS_Load+0x24>
- SETTINGS_SetAllDefault();
- 802894c: f7ff ffce bl 80288ec <SETTINGS_SetAllDefault>
- SETTINGS_Save();
- }
- }
- 8028950: e8bd 4010 ldmia.w sp!, {r4, lr}
- /* Рассчитываем CRC для структуры настроек */
- newCRC = SETTINGS_GetCRC();
- if (loadCRC != newCRC) {
- SETTINGS_SetAllDefault();
- SETTINGS_Save();
- 8028954: f7ff bf9a b.w 802888c <SETTINGS_Save>
- 8028958: bd10 pop {r4, pc}
- 802895a: bf00 nop
- 802895c: 2000cfc4 .word 0x2000cfc4
- 8028960: 08005f9c .word 0x08005f9c
- 08028964 <SETTINGS_SetPartDefault>:
- /**
- * @brief Сброс всех настроек в значения по умолчанию кроме сетевых настроек
- */
- void SETTINGS_SetPartDefault(void)
- {
- 8028964: b510 push {r4, lr}
- /**
- * @brief Установить флаги по умолчанию
- */
- void SETTINGS_SetFlagsDef(void)
- {
- sSettings.sFlags.netsettingsChanged = false;
- 8028966: 4c0b ldr r4, [pc, #44] ; (8028994 <SETTINGS_SetPartDefault+0x30>)
- /**
- * @brief Сброс всех настроек в значения по умолчанию кроме сетевых настроек
- */
- void SETTINGS_SetPartDefault(void)
- {
- SETTINGS_SetBootParamsDef();
- 8028968: f7ff fdfa bl 8028560 <SETTINGS_SetBootParamsDef>
- SETTINGS_SetSnmpDef();
- 802896c: f7ff fe38 bl 80285e0 <SETTINGS_SetSnmpDef>
- /**
- * @brief Установить флаги по умолчанию
- */
- void SETTINGS_SetFlagsDef(void)
- {
- sSettings.sFlags.netsettingsChanged = false;
- 8028970: 2300 movs r3, #0
- 8028972: f884 3120 strb.w r3, [r4, #288] ; 0x120
- {
- SETTINGS_SetBootParamsDef();
- SETTINGS_SetSnmpDef();
- SETTINGS_SetFlagsDef();
- // SETTINGS_SetServiceDef();
- SETTINGS_SetSntpDef();
- 8028976: f7ff fed7 bl 8028728 <SETTINGS_SetSntpDef>
- SETTINGS_SetINOUTSDef();
- 802897a: f7ff fef3 bl 8028764 <SETTINGS_SetINOUTSDef>
- SETTINGS_SetRADIUSDef();
- 802897e: f7ff feff bl 8028780 <SETTINGS_SetRADIUSDef>
-
- sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
- 8028982: f7ff ff77 bl 8028874 <SETTINGS_GetCritSecCRC>
- sSettings.controlWorld = SETTINGS_CONTROL_WORD;
- 8028986: 4b04 ldr r3, [pc, #16] ; (8028998 <SETTINGS_SetPartDefault+0x34>)
- // SETTINGS_SetServiceDef();
- SETTINGS_SetSntpDef();
- SETTINGS_SetINOUTSDef();
- SETTINGS_SetRADIUSDef();
-
- sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
- 8028988: f8c4 011c str.w r0, [r4, #284] ; 0x11c
- sSettings.controlWorld = SETTINGS_CONTROL_WORD;
- 802898c: f8c4 33a4 str.w r3, [r4, #932] ; 0x3a4
- 8028990: bd10 pop {r4, pc}
- 8028992: bf00 nop
- 8028994: 2000cfc4 .word 0x2000cfc4
- 8028998: 075bcd15 .word 0x075bcd15
- 0802899c <SETTINGS_ResetBootTry>:
- /**
- * @brief Сброс флага boottry в регистре RTC
- */
- void SETTINGS_ResetBootTry(void)
- {
- uint8_t bootTry = RTC_ReadBackupRegister(RTC_BKP_DR2);
- 802899c: 2002 movs r0, #2
- /**
- * @brief Сброс флага boottry в регистре RTC
- */
- void SETTINGS_ResetBootTry(void)
- {
- 802899e: b508 push {r3, lr}
- uint8_t bootTry = RTC_ReadBackupRegister(RTC_BKP_DR2);
- 80289a0: f7fd f8b6 bl 8025b10 <RTC_ReadBackupRegister>
- if (bootTry > 0 )
- 80289a4: f010 0fff tst.w r0, #255 ; 0xff
- 80289a8: d014 beq.n 80289d4 <SETTINGS_ResetBootTry+0x38>
- {
- bootTry = 0;
- RTC_WriteBackupRegister(RTC_BKP_DR2, 0);
- 80289aa: 2002 movs r0, #2
- 80289ac: 2100 movs r1, #0
- 80289ae: f7fd f89f bl 8025af0 <RTC_WriteBackupRegister>
- /* Check FW update flag */
- if (RTC_ReadBackupRegister(RTC_BKP_DR3)) {
- 80289b2: 2003 movs r0, #3
- 80289b4: f7fd f8ac bl 8025b10 <RTC_ReadBackupRegister>
- 80289b8: b160 cbz r0, 80289d4 <SETTINGS_ResetBootTry+0x38>
- /* Отправка трапа об успешном обновлении ПО */
- SNMP_SendUserTrap(FW_VERSION_UPDATED);
- 80289ba: 2002 movs r0, #2
- 80289bc: f00f fbbe bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_UPDATE_SOFT, "Успешно");
- 80289c0: 2002 movs r0, #2
- 80289c2: 4905 ldr r1, [pc, #20] ; (80289d8 <SETTINGS_ResetBootTry+0x3c>)
- 80289c4: f001 f84a bl 8029a5c <log_event_data>
- /* Clear FW update flag */
- RTC_WriteBackupRegister(RTC_BKP_DR3, 0);
- 80289c8: 2003 movs r0, #3
- 80289ca: 2100 movs r1, #0
-
- //taskENTER_CRITICAL();
- SETTINGS_Save();
- //taskEXIT_CRITICAL();
- } */
- }
- 80289cc: e8bd 4008 ldmia.w sp!, {r3, lr}
- /* Отправка трапа об успешном обновлении ПО */
- SNMP_SendUserTrap(FW_VERSION_UPDATED);
- log_event_data(LOG_UPDATE_SOFT, "Успешно");
- /* Clear FW update flag */
- RTC_WriteBackupRegister(RTC_BKP_DR3, 0);
- 80289d0: f7fd b88e b.w 8025af0 <RTC_WriteBackupRegister>
- 80289d4: bd08 pop {r3, pc}
- 80289d6: bf00 nop
- 80289d8: 08039aa4 .word 0x08039aa4
- 080289dc <SETTINGS_GetMac>:
- /**
- * @brief Преобразует mac адрес строкового формата в массив uint8_t
- * @param mac - буфер для вывода mac адреса
- */
- void SETTINGS_GetMac(uint8_t *mac)
- {
- 80289dc: b573 push {r0, r1, r4, r5, r6, lr}
- char dummy[2];
- char *macPtr = sSettings.sInfo.mac;
-
- for (uint8_t i = 0; i < 6; i++)
- {
- strncpy(dummy, macPtr+i*3, 2);
- 80289de: 4e0a ldr r6, [pc, #40] ; (8028a08 <SETTINGS_GetMac+0x2c>)
- /**
- * @brief Преобразует mac адрес строкового формата в массив uint8_t
- * @param mac - буфер для вывода mac адреса
- */
- void SETTINGS_GetMac(uint8_t *mac)
- 80289e0: 1e45 subs r5, r0, #1
- 80289e2: 2400 movs r4, #0
- char dummy[2];
- char *macPtr = sSettings.sInfo.mac;
-
- for (uint8_t i = 0; i < 6; i++)
- {
- strncpy(dummy, macPtr+i*3, 2);
- 80289e4: 1931 adds r1, r6, r4
- 80289e6: 318c adds r1, #140 ; 0x8c
- 80289e8: 2202 movs r2, #2
- 80289ea: a801 add r0, sp, #4
- 80289ec: f7f9 fb18 bl 8022020 <strncpy>
- mac[i] = (uint8_t)strtol(dummy, NULL, 16);
- 80289f0: 2100 movs r1, #0
- 80289f2: 2210 movs r2, #16
- 80289f4: a801 add r0, sp, #4
- 80289f6: f7fa fe49 bl 802368c <strtol>
- 80289fa: 3403 adds r4, #3
- void SETTINGS_GetMac(uint8_t *mac)
- {
- char dummy[2];
- char *macPtr = sSettings.sInfo.mac;
-
- for (uint8_t i = 0; i < 6; i++)
- 80289fc: 2c12 cmp r4, #18
- {
- strncpy(dummy, macPtr+i*3, 2);
- mac[i] = (uint8_t)strtol(dummy, NULL, 16);
- 80289fe: f805 0f01 strb.w r0, [r5, #1]!
- void SETTINGS_GetMac(uint8_t *mac)
- {
- char dummy[2];
- char *macPtr = sSettings.sInfo.mac;
-
- for (uint8_t i = 0; i < 6; i++)
- 8028a02: d1ef bne.n 80289e4 <SETTINGS_GetMac+0x8>
- {
- strncpy(dummy, macPtr+i*3, 2);
- mac[i] = (uint8_t)strtol(dummy, NULL, 16);
- }
- }
- 8028a04: bd7c pop {r2, r3, r4, r5, r6, pc}
- 8028a06: bf00 nop
- 8028a08: 2000cfc4 .word 0x2000cfc4
- 08028a0c <SETTINGS_SetProDate>:
- /**
- * @brief Установить дату производства
- */
- void SETTINGS_SetProDate(char *proDate, uint8_t len)
- {
- 8028a0c: b570 push {r4, r5, r6, lr}
- memset(sSettings.sInfo.productionData, 0, 40);
- 8028a0e: 4c07 ldr r4, [pc, #28] ; (8028a2c <SETTINGS_SetProDate+0x20>)
- /**
- * @brief Установить дату производства
- */
- void SETTINGS_SetProDate(char *proDate, uint8_t len)
- {
- 8028a10: 4606 mov r6, r0
- 8028a12: 460d mov r5, r1
- memset(sSettings.sInfo.productionData, 0, 40);
- 8028a14: 2228 movs r2, #40 ; 0x28
- 8028a16: 2100 movs r1, #0
- 8028a18: 4620 mov r0, r4
- 8028a1a: f7f9 f871 bl 8021b00 <memset>
- memcpy(sSettings.sInfo.productionData, proDate, len);
- 8028a1e: 4620 mov r0, r4
- 8028a20: 4631 mov r1, r6
- 8028a22: 462a mov r2, r5
- }
- 8028a24: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- * @brief Установить дату производства
- */
- void SETTINGS_SetProDate(char *proDate, uint8_t len)
- {
- memset(sSettings.sInfo.productionData, 0, 40);
- memcpy(sSettings.sInfo.productionData, proDate, len);
- 8028a28: f7f8 bfb0 b.w 802198c <memcpy>
- 8028a2c: 2000d028 .word 0x2000d028
- 08028a30 <LED_On>:
- /**
- * @brief
- */
- void LED_On(gpio_t pin)
- {
- gpio_set(pin, 1);
- 8028a30: 2101 movs r1, #1
- 8028a32: f7fd ba7d b.w 8025f30 <gpio_set>
- 08028a36 <LED_Off>:
- /**
- * @brief
- */
- void LED_Off(gpio_t pin)
- {
- gpio_set(pin, 0);
- 8028a36: 2100 movs r1, #0
- 8028a38: f7fd ba7a b.w 8025f30 <gpio_set>
- 08028a3c <LED_Init>:
- /**
- * @brief
- * @retval
- */
- void LED_Init(void)
- {
- 8028a3c: b508 push {r3, lr}
- LED_Off(LED_INIT_R);
- 8028a3e: 2009 movs r0, #9
- 8028a40: f7ff fff9 bl 8028a36 <LED_Off>
- LED_Off(LED_INIT_G);
- 8028a44: 200a movs r0, #10
- 8028a46: f7ff fff6 bl 8028a36 <LED_Off>
- LED_Off(LED_MAJOR_R);
- 8028a4a: 200b movs r0, #11
- 8028a4c: f7ff fff3 bl 8028a36 <LED_Off>
- LED_Off(LED_MINOR_G);
- 8028a50: 200c movs r0, #12
- 8028a52: f7ff fff0 bl 8028a36 <LED_Off>
- LED_Off(LED_MINOR_R);
- 8028a56: 200d movs r0, #13
- }
- 8028a58: e8bd 4008 ldmia.w sp!, {r3, lr}
- {
- LED_Off(LED_INIT_R);
- LED_Off(LED_INIT_G);
- LED_Off(LED_MAJOR_R);
- LED_Off(LED_MINOR_G);
- LED_Off(LED_MINOR_R);
- 8028a5c: f7ff bfeb b.w 8028a36 <LED_Off>
- 08028a60 <vTaskLedBlink>:
- /**
- * @brief Задача простой мигалки
- */
- void vTaskLedBlink(void *arg)
- {
- 8028a60: b570 push {r4, r5, r6, lr}
- uint8_t start_status = 0;
- uint8_t start_status_old = 0;
- start_status = (UPS.Status >> 7) & 0x01;
- for (;;)
- {
- start_status = (UPS.Status >> 7) & 0x01;
- 8028a62: 4e0e ldr r6, [pc, #56] ; (8028a9c <vTaskLedBlink+0x3c>)
- LED_Off(LED_INIT_R);
- LED_Toggle(LED_INIT_G);
- }
- start_status_old = start_status;
- vTaskDelay(statusLedFreq);
- 8028a64: 4d0e ldr r5, [pc, #56] ; (8028aa0 <vTaskLedBlink+0x40>)
- * @brief Задача простой мигалки
- */
- void vTaskLedBlink(void *arg)
- {
- uint8_t start_status = 0;
- uint8_t start_status_old = 0;
- 8028a66: 2300 movs r3, #0
- start_status = (UPS.Status >> 7) & 0x01;
- for (;;)
- {
- start_status = (UPS.Status >> 7) & 0x01;
- 8028a68: 7cf4 ldrb r4, [r6, #19]
- /* Просто отражает состояние контроллера - "живой" */
- if((UPS.Status >> 7) & 0x01){
- 8028a6a: 09e4 lsrs r4, r4, #7
- 8028a6c: d009 beq.n 8028a82 <vTaskLedBlink+0x22>
- if(start_status_old != start_status)
- 8028a6e: 42a3 cmp r3, r4
- 8028a70: d002 beq.n 8028a78 <vTaskLedBlink+0x18>
- LED_Off(LED_INIT_G);
- 8028a72: 200a movs r0, #10
- 8028a74: f7ff ffdf bl 8028a36 <LED_Off>
- /**
- * @brief Изменить состояние LED
- */
- void LED_Toggle(gpio_t pin)
- {
- gpio_invert_output(pin);
- 8028a78: 200a movs r0, #10
- 8028a7a: f7fd faed bl 8026058 <gpio_invert_output>
- 8028a7e: 2009 movs r0, #9
- 8028a80: e005 b.n 8028a8e <vTaskLedBlink+0x2e>
- LED_Off(LED_INIT_G);
- LED_Toggle(LED_INIT_G);
- LED_Toggle(LED_INIT_R);
- }
- else{
- if(start_status_old != start_status)
- 8028a82: 42a3 cmp r3, r4
- 8028a84: d002 beq.n 8028a8c <vTaskLedBlink+0x2c>
- LED_Off(LED_INIT_R);
- 8028a86: 2009 movs r0, #9
- 8028a88: f7ff ffd5 bl 8028a36 <LED_Off>
- /**
- * @brief Изменить состояние LED
- */
- void LED_Toggle(gpio_t pin)
- {
- gpio_invert_output(pin);
- 8028a8c: 200a movs r0, #10
- 8028a8e: f7fd fae3 bl 8026058 <gpio_invert_output>
- LED_Off(LED_INIT_R);
- LED_Toggle(LED_INIT_G);
- }
- start_status_old = start_status;
- vTaskDelay(statusLedFreq);
- 8028a92: 8828 ldrh r0, [r5, #0]
- 8028a94: f002 fa9a bl 802afcc <vTaskDelay>
- uint8_t start_status = 0;
- uint8_t start_status_old = 0;
- start_status = (UPS.Status >> 7) & 0x01;
- for (;;)
- {
- start_status = (UPS.Status >> 7) & 0x01;
- 8028a98: 4623 mov r3, r4
- LED_Toggle(LED_INIT_G);
- }
- start_status_old = start_status;
- vTaskDelay(statusLedFreq);
- }
- 8028a9a: e7e5 b.n 8028a68 <vTaskLedBlink+0x8>
- 8028a9c: 2000cba8 .word 0x2000cba8
- 8028aa0: 20000660 .word 0x20000660
- 08028aa4 <LED_Toggle>:
- /**
- * @brief Изменить состояние LED
- */
- void LED_Toggle(gpio_t pin)
- {
- gpio_invert_output(pin);
- 8028aa4: f7fd bad8 b.w 8026058 <gpio_invert_output>
- 08028aa8 <LED_SetStatusLedFreq>:
- /**
- * @brief
- */
- void LED_SetStatusLedFreq(uint16_t freq)
- {
- statusLedFreq = freq;
- 8028aa8: 4b01 ldr r3, [pc, #4] ; (8028ab0 <LED_SetStatusLedFreq+0x8>)
- 8028aaa: 8018 strh r0, [r3, #0]
- 8028aac: 4770 bx lr
- 8028aae: bf00 nop
- 8028ab0: 20000660 .word 0x20000660
- 08028ab4 <BUTTON_VoidHandler>:
- /**
- * @brief Заглушка
- */
- void BUTTON_VoidHandler(void)
- {
- 8028ab4: 4770 bx lr
- 8028ab6: 0000 movs r0, r0
- 08028ab8 <BUTTON_DEF_DownHandler>:
- /**
- * @brief Хендлер кнопки DEFAULT. Сброс всех настроек, сохранение и перезагрузка
- */
- void BUTTON_DEF_DownHandler(void)
- {
- 8028ab8: b508 push {r3, lr}
- //taskENTER_CRITICAL();
- SNMP_SendUserTrap(DEVICE_RESTORED);
- 8028aba: 2003 movs r0, #3
- 8028abc: f00f fb3e bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
- 8028ac0: 4909 ldr r1, [pc, #36] ; (8028ae8 <BUTTON_DEF_DownHandler+0x30>)
- 8028ac2: 2001 movs r0, #1
- 8028ac4: f000 ffca bl 8029a5c <log_event_data>
- vTaskDelay(500);
- 8028ac8: f44f 70fa mov.w r0, #500 ; 0x1f4
- 8028acc: f002 fa7e bl 802afcc <vTaskDelay>
- SETTINGS_SetDefaultDebug();
- 8028ad0: f7ff feec bl 80288ac <SETTINGS_SetDefaultDebug>
- SETTINGS_Save();
- 8028ad4: f7ff feda bl 802888c <SETTINGS_Save>
- vTaskDelay(1010);
- 8028ad8: f240 30f2 movw r0, #1010 ; 0x3f2
- 8028adc: f002 fa76 bl 802afcc <vTaskDelay>
- Reboot();
-
- //taskEXIT_CRITICAL();
- }
- 8028ae0: e8bd 4008 ldmia.w sp!, {r3, lr}
- vTaskDelay(500);
- SETTINGS_SetDefaultDebug();
- SETTINGS_Save();
- vTaskDelay(1010);
- Reboot();
- 8028ae4: f000 bb0e b.w 8029104 <Reboot>
- 8028ae8: 08039ab8 .word 0x08039ab8
- 08028aec <BUTTON_GetState>:
- /**
- * @brief Возвращает сотояние ключа
- */
- BUTTON_STATE_t BUTTON_GetState(BUTTON_NO_FIX_t *button)
- {
- return (BUTTON_STATE_t)gpio_get(button->id_pin);
- 8028aec: 7800 ldrb r0, [r0, #0]
- 8028aee: f7fd bac3 b.w 8026078 <gpio_get>
- 8028af2: 0000 movs r0, r0
- 08028af4 <BUTTON_Init>:
- /**
- * @brief
- * @retval
- */
- void BUTTON_Init(void)
- {
- 8028af4: b510 push {r4, lr}
- defButton.id_pin = KEY_DEF;
- 8028af6: 4c09 ldr r4, [pc, #36] ; (8028b1c <BUTTON_Init+0x28>)
- 8028af8: 230f movs r3, #15
- 8028afa: 7023 strb r3, [r4, #0]
- defButton.timeDelay = 5;
- 8028afc: 2305 movs r3, #5
- 8028afe: 8063 strh r3, [r4, #2]
- defButton.pressHandler = BUTTON_VoidHandler;
- 8028b00: 4b07 ldr r3, [pc, #28] ; (8028b20 <BUTTON_Init+0x2c>)
- 8028b02: 60a3 str r3, [r4, #8]
- defButton.unpressHandler = BUTTON_DEF_DownHandler;
- 8028b04: 4b07 ldr r3, [pc, #28] ; (8028b24 <BUTTON_Init+0x30>)
- defButton.counterActivation = 0;
- defButton.timeActivation = 40;
- 8028b06: 2228 movs r2, #40 ; 0x28
- void BUTTON_Init(void)
- {
- defButton.id_pin = KEY_DEF;
- defButton.timeDelay = 5;
- defButton.pressHandler = BUTTON_VoidHandler;
- defButton.unpressHandler = BUTTON_DEF_DownHandler;
- 8028b08: 60e3 str r3, [r4, #12]
- defButton.counterActivation = 0;
- defButton.timeActivation = 40;
- defButton.fActivation = false;
-
- defButton.stateOld = BUTTON_GetState(&defButton);
- 8028b0a: 4620 mov r0, r4
- {
- defButton.id_pin = KEY_DEF;
- defButton.timeDelay = 5;
- defButton.pressHandler = BUTTON_VoidHandler;
- defButton.unpressHandler = BUTTON_DEF_DownHandler;
- defButton.counterActivation = 0;
- 8028b0c: 2300 movs r3, #0
- 8028b0e: 6163 str r3, [r4, #20]
- defButton.timeActivation = 40;
- 8028b10: 8322 strh r2, [r4, #24]
- defButton.fActivation = false;
- 8028b12: 76a3 strb r3, [r4, #26]
-
- defButton.stateOld = BUTTON_GetState(&defButton);
- 8028b14: f7ff ffea bl 8028aec <BUTTON_GetState>
- 8028b18: 71a0 strb r0, [r4, #6]
- 8028b1a: bd10 pop {r4, pc}
- 8028b1c: 2000d36c .word 0x2000d36c
- 8028b20: 08028ab5 .word 0x08028ab5
- 8028b24: 08028ab9 .word 0x08028ab9
- 08028b28 <BUTTON_DellayHandler>:
- время нажатия.
- * @param *button: указатель на структуру типа BUTTON_NO_FIX
- * @retval нет
- */
- void BUTTON_DellayHandler(BUTTON_NO_FIX_t *button)
- {
- 8028b28: b510 push {r4, lr}
- 8028b2a: 4604 mov r4, r0
- /* Кнопка нажата. Ведем отсчет времени удержания */
- if (gpio_get(button->id_pin) == 0) // определяем текущее (новое) состояние кнопки
- 8028b2c: 7800 ldrb r0, [r0, #0]
- 8028b2e: f7fd faa3 bl 8026078 <gpio_get>
- 8028b32: 6963 ldr r3, [r4, #20]
- 8028b34: b950 cbnz r0, 8028b4c <BUTTON_DellayHandler+0x24>
- {
- button->counterActivation++;
- button->fActivation = false;
-
- /* Кнопка нажата более необходимого времени - начинаем чаще мигать диодом */
- if (button->counterActivation > button->timeActivation)
- 8028b36: 8b22 ldrh r2, [r4, #24]
- {
- /* Кнопка нажата. Ведем отсчет времени удержания */
- if (gpio_get(button->id_pin) == 0) // определяем текущее (новое) состояние кнопки
- {
- button->counterActivation++;
- button->fActivation = false;
- 8028b38: 76a0 strb r0, [r4, #26]
- void BUTTON_DellayHandler(BUTTON_NO_FIX_t *button)
- {
- /* Кнопка нажата. Ведем отсчет времени удержания */
- if (gpio_get(button->id_pin) == 0) // определяем текущее (новое) состояние кнопки
- {
- button->counterActivation++;
- 8028b3a: 3301 adds r3, #1
- button->fActivation = false;
-
- /* Кнопка нажата более необходимого времени - начинаем чаще мигать диодом */
- if (button->counterActivation > button->timeActivation)
- 8028b3c: 4293 cmp r3, r2
- void BUTTON_DellayHandler(BUTTON_NO_FIX_t *button)
- {
- /* Кнопка нажата. Ведем отсчет времени удержания */
- if (gpio_get(button->id_pin) == 0) // определяем текущее (новое) состояние кнопки
- {
- button->counterActivation++;
- 8028b3e: 6163 str r3, [r4, #20]
- button->fActivation = false;
-
- /* Кнопка нажата более необходимого времени - начинаем чаще мигать диодом */
- if (button->counterActivation > button->timeActivation)
- 8028b40: d914 bls.n 8028b6c <BUTTON_DellayHandler+0x44>
- LED_SetStatusLedFreq(100);
- 8028b42: 2064 movs r0, #100 ; 0x64
- }
- else
- button->counterActivation = 0;
- }
- }
- 8028b44: e8bd 4010 ldmia.w sp!, {r4, lr}
- button->counterActivation++;
- button->fActivation = false;
-
- /* Кнопка нажата более необходимого времени - начинаем чаще мигать диодом */
- if (button->counterActivation > button->timeActivation)
- LED_SetStatusLedFreq(100);
- 8028b48: f7ff bfae b.w 8028aa8 <LED_SetStatusLedFreq>
- }
- /* Кнопку отжата. Если до этого она была нажата нужное время - вызываем хендлер */
- else
- {
- if ((button->counterActivation > button->timeActivation)
- 8028b4c: 8b22 ldrh r2, [r4, #24]
- 8028b4e: 4293 cmp r3, r2
- 8028b50: d90a bls.n 8028b68 <BUTTON_DellayHandler+0x40>
- && button->fActivation == false)
- 8028b52: 7ea3 ldrb r3, [r4, #26]
- 8028b54: b943 cbnz r3, 8028b68 <BUTTON_DellayHandler+0x40>
- {
- button->fActivation = true;
- 8028b56: 2301 movs r3, #1
- 8028b58: 76a3 strb r3, [r4, #26]
- LED_SetStatusLedFreq(1000);
- 8028b5a: f44f 707a mov.w r0, #1000 ; 0x3e8
- 8028b5e: f7ff ffa3 bl 8028aa8 <LED_SetStatusLedFreq>
- button->unpressHandler();
- 8028b62: 68e3 ldr r3, [r4, #12]
- 8028b64: 4798 blx r3
- 8028b66: bd10 pop {r4, pc}
- }
- else
- button->counterActivation = 0;
- 8028b68: 2300 movs r3, #0
- 8028b6a: 6163 str r3, [r4, #20]
- 8028b6c: bd10 pop {r4, pc}
- 8028b6e: 0000 movs r0, r0
- 08028b70 <vTaskButtons>:
- /**
- * @brief Опрос кнопок
- */
- void vTaskButtons(void *pvParameters)
- {
- 8028b70: b508 push {r3, lr}
- for (;;)
- {
- BUTTON_DellayHandler(&defButton);
- 8028b72: 4803 ldr r0, [pc, #12] ; (8028b80 <vTaskButtons+0x10>)
- 8028b74: f7ff ffd8 bl 8028b28 <BUTTON_DellayHandler>
-
- vTaskDelay(100); //20
- 8028b78: 2064 movs r0, #100 ; 0x64
- 8028b7a: f002 fa27 bl 802afcc <vTaskDelay>
- 8028b7e: e7f8 b.n 8028b72 <vTaskButtons+0x2>
- 8028b80: 2000d36c .word 0x2000d36c
- 08028b84 <set_mode_jumper>:
- #include "gpio.h"
- bool value_jumper;
- void set_mode_jumper(void)
- {
- 8028b84: b508 push {r3, lr}
- value_jumper = gpio_get(MODE_JUMPER);
- 8028b86: 200e movs r0, #14
- 8028b88: f7fd fa76 bl 8026078 <gpio_get>
- 8028b8c: 4b01 ldr r3, [pc, #4] ; (8028b94 <set_mode_jumper+0x10>)
- 8028b8e: 7018 strb r0, [r3, #0]
- 8028b90: bd08 pop {r3, pc}
- 8028b92: bf00 nop
- 8028b94: 2000d388 .word 0x2000d388
- 08028b98 <get_state_din_outs>:
- /* data actuality mutexes */
- static SemaphoreHandle_t outputs_mutex, inputs_mutex;
- uint8_t get_state_din_outs(gpio_t pin) {
- uint8_t res = 0;
- res = gpio_get(pin);
- 8028b98: f7fd ba6e b.w 8026078 <gpio_get>
- 08028b9c <set_state_douts>:
- return res;
- }
- void set_state_douts(gpio_t pin, uint8_t value)
- {
- gpio_set(pin, value);
- 8028b9c: 3100 adds r1, #0
- 8028b9e: bf18 it ne
- 8028ba0: 2101 movne r1, #1
- 8028ba2: f7fd b9c5 b.w 8025f30 <gpio_set>
- 8028ba6: 0000 movs r0, r0
- 08028ba8 <init_UPS_value>:
- extern bool flUpdateLog;
- void init_UPS_value(void)
- {
- 8028ba8: b538 push {r3, r4, r5, lr}
- UPS.Freq_in = 0;
- 8028baa: 4c10 ldr r4, [pc, #64] ; (8028bec <init_UPS_value+0x44>)
- UPS.VAC_in = 0;
- UPS.VAC_out = 0;
- UPS.Temp = 0;
- UPS.Load = 0;
- 8028bac: 2500 movs r5, #0
- extern bool flUpdateLog;
- void init_UPS_value(void)
- {
- UPS.Freq_in = 0;
- 8028bae: 2300 movs r3, #0
- UPS.Alarm = 0;
- UPS.cnt_err_ups = 0;
- UPS.Flag_Present = false;
- UPS.Present = false;
- memset(UPS.model, 0, 11);
- 8028bb0: 4629 mov r1, r5
- 8028bb2: 220b movs r2, #11
- 8028bb4: f104 0015 add.w r0, r4, #21
- extern bool flUpdateLog;
- void init_UPS_value(void)
- {
- UPS.Freq_in = 0;
- 8028bb8: 6023 str r3, [r4, #0]
- UPS.VAC_in = 0;
- 8028bba: 6063 str r3, [r4, #4]
- UPS.VAC_out = 0;
- 8028bbc: 60a3 str r3, [r4, #8]
- UPS.Temp = 0;
- 8028bbe: 60e3 str r3, [r4, #12]
- UPS.Load = 0;
- 8028bc0: 7425 strb r5, [r4, #16]
- UPS.SOC = 0;
- 8028bc2: 7465 strb r5, [r4, #17]
- UPS.work_time = 0;
- 8028bc4: 74a5 strb r5, [r4, #18]
- UPS.Status = 0;
- 8028bc6: 74e5 strb r5, [r4, #19]
- UPS.Alarm = 0;
- 8028bc8: 7525 strb r5, [r4, #20]
- UPS.cnt_err_ups = 0;
- 8028bca: f884 502b strb.w r5, [r4, #43] ; 0x2b
- UPS.Flag_Present = false;
- 8028bce: f884 502d strb.w r5, [r4, #45] ; 0x2d
- UPS.Present = false;
- 8028bd2: f884 502c strb.w r5, [r4, #44] ; 0x2c
- memset(UPS.model, 0, 11);
- 8028bd6: f7f8 ff93 bl 8021b00 <memset>
- memset(UPS.vertion, 0, 11);
- 8028bda: f104 0020 add.w r0, r4, #32
- 8028bde: 4629 mov r1, r5
- 8028be0: 220b movs r2, #11
- }
- 8028be2: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- UPS.cnt_err_ups = 0;
- UPS.Flag_Present = false;
- UPS.Present = false;
- memset(UPS.model, 0, 11);
- memset(UPS.vertion, 0, 11);
- 8028be6: f7f8 bf8b b.w 8021b00 <memset>
- 8028bea: bf00 nop
- 8028bec: 2000cba8 .word 0x2000cba8
- 08028bf0 <send_MegaTec_cmd>:
- }
- void send_MegaTec_cmd(cmdMegaTecEnums_t command)
- {
- 8028bf0: b510 push {r4, lr}
- if(command == ups_test_time){
- 8028bf2: 2803 cmp r0, #3
- memset(UPS.model, 0, 11);
- memset(UPS.vertion, 0, 11);
- }
- void send_MegaTec_cmd(cmdMegaTecEnums_t command)
- {
- 8028bf4: b086 sub sp, #24
- if(command == ups_test_time){
- 8028bf6: d10d bne.n 8028c14 <send_MegaTec_cmd+0x24>
- uint8_t req[10];
- memset(req, 0, 10);
- 8028bf8: 2100 movs r1, #0
- 8028bfa: 220a movs r2, #10
- 8028bfc: a803 add r0, sp, #12
- 8028bfe: f7f8 ff7f bl 8021b00 <memset>
- sprintf(req, "%s%d\r", MegaTecCMD[command], TimeParam);
- 8028c02: 4b18 ldr r3, [pc, #96] ; (8028c64 <send_MegaTec_cmd+0x74>)
- 8028c04: 4918 ldr r1, [pc, #96] ; (8028c68 <send_MegaTec_cmd+0x78>)
- 8028c06: 68da ldr r2, [r3, #12]
- 8028c08: 4b18 ldr r3, [pc, #96] ; (8028c6c <send_MegaTec_cmd+0x7c>)
- 8028c0a: a803 add r0, sp, #12
- 8028c0c: 881b ldrh r3, [r3, #0]
- 8028c0e: f7fe fe01 bl 8027814 <tfp_sprintf>
- 8028c12: e015 b.n 8028c40 <send_MegaTec_cmd+0x50>
- ups_send_block(req, strlen(req));
- }
- else if(command == ups_shutdown){
- 8028c14: 2805 cmp r0, #5
- 8028c16: d022 beq.n 8028c5e <send_MegaTec_cmd+0x6e>
- }
- else if(command == ups_shutdown_restore){
- 8028c18: 2806 cmp r0, #6
- 8028c1a: 4c12 ldr r4, [pc, #72] ; (8028c64 <send_MegaTec_cmd+0x74>)
- 8028c1c: d116 bne.n 8028c4c <send_MegaTec_cmd+0x5c>
- uint8_t req[10];
- memset(req, 0, 10);
- 8028c1e: 2100 movs r1, #0
- 8028c20: 220a movs r2, #10
- 8028c22: a803 add r0, sp, #12
- 8028c24: f7f8 ff6c bl 8021b00 <memset>
- sprintf(req, "%s.%d%s%d\r", MegaTecCMD[command-1], TimeParam, MegaTecCMD[command], TimeParam2);
- 8028c28: 69a2 ldr r2, [r4, #24]
- 8028c2a: 4b10 ldr r3, [pc, #64] ; (8028c6c <send_MegaTec_cmd+0x7c>)
- 8028c2c: 4910 ldr r1, [pc, #64] ; (8028c70 <send_MegaTec_cmd+0x80>)
- 8028c2e: 881b ldrh r3, [r3, #0]
- 8028c30: 9200 str r2, [sp, #0]
- 8028c32: 4a10 ldr r2, [pc, #64] ; (8028c74 <send_MegaTec_cmd+0x84>)
- 8028c34: 8812 ldrh r2, [r2, #0]
- 8028c36: 9201 str r2, [sp, #4]
- 8028c38: a803 add r0, sp, #12
- 8028c3a: 6962 ldr r2, [r4, #20]
- 8028c3c: f7fe fdea bl 8027814 <tfp_sprintf>
- ups_send_block(req, strlen(req));
- 8028c40: a803 add r0, sp, #12
- 8028c42: f7f9 f935 bl 8021eb0 <strlen>
- 8028c46: b2c1 uxtb r1, r0
- 8028c48: a803 add r0, sp, #12
- 8028c4a: e006 b.n 8028c5a <send_MegaTec_cmd+0x6a>
- }
- else{
- ups_send_block(MegaTecCMD[command], strlen(MegaTecCMD[command]));
- 8028c4c: f854 4020 ldr.w r4, [r4, r0, lsl #2]
- 8028c50: 4620 mov r0, r4
- 8028c52: f7f9 f92d bl 8021eb0 <strlen>
- 8028c56: b2c1 uxtb r1, r0
- 8028c58: 4620 mov r0, r4
- 8028c5a: f7fe f843 bl 8026ce4 <ups_send_block>
- }
- }
- 8028c5e: b006 add sp, #24
- 8028c60: bd10 pop {r4, pc}
- 8028c62: bf00 nop
- 8028c64: 20000664 .word 0x20000664
- 8028c68: 08039ad8 .word 0x08039ad8
- 8028c6c: 20000b50 .word 0x20000b50
- 8028c70: 08039ad3 .word 0x08039ad3
- 8028c74: 20000b1a .word 0x20000b1a
- 08028c78 <ups_megatec_rx_pdu>:
- bool ups_megatec_rx_pdu(void)
- {
- 8028c78: b510 push {r4, lr}
- int c = 0;
- ups_pdu.len = 0;
- 8028c7a: 4c0e ldr r4, [pc, #56] ; (8028cb4 <ups_megatec_rx_pdu+0x3c>)
- 8028c7c: 2000 movs r0, #0
- 8028c7e: 8660 strh r0, [r4, #50] ; 0x32
- while ((ups_pdu.len < UPS_PDU_MAX_LEN) && (c != 0x0d)) {
- 8028c80: e00d b.n 8028c9e <ups_megatec_rx_pdu+0x26>
- c = ups_getchar(500);//portMAX_DELAY
- 8028c82: f44f 70fa mov.w r0, #500 ; 0x1f4
- 8028c86: f7fe f851 bl 8026d2c <ups_getchar>
- if(c < 0)
- 8028c8a: 2800 cmp r0, #0
- 8028c8c: da03 bge.n 8028c96 <ups_megatec_rx_pdu+0x1e>
- {
- ups_pdu.len = 0;
- 8028c8e: 4b09 ldr r3, [pc, #36] ; (8028cb4 <ups_megatec_rx_pdu+0x3c>)
- 8028c90: 2200 movs r2, #0
- 8028c92: 865a strh r2, [r3, #50] ; 0x32
- break;
- 8028c94: e008 b.n 8028ca8 <ups_megatec_rx_pdu+0x30>
- }
- ups_pdu.data[ups_pdu.len++] = c;
- 8028c96: 8e63 ldrh r3, [r4, #50] ; 0x32
- 8028c98: 54e0 strb r0, [r4, r3]
- 8028c9a: 3301 adds r3, #1
- 8028c9c: 8663 strh r3, [r4, #50] ; 0x32
- {
- int c = 0;
- ups_pdu.len = 0;
- while ((ups_pdu.len < UPS_PDU_MAX_LEN) && (c != 0x0d)) {
- 8028c9e: 8e63 ldrh r3, [r4, #50] ; 0x32
- 8028ca0: 2b31 cmp r3, #49 ; 0x31
- 8028ca2: d801 bhi.n 8028ca8 <ups_megatec_rx_pdu+0x30>
- 8028ca4: 280d cmp r0, #13
- 8028ca6: d1ec bne.n 8028c82 <ups_megatec_rx_pdu+0xa>
- break;
- }
- ups_pdu.data[ups_pdu.len++] = c;
- }
- if (ups_pdu.len == 0)
- 8028ca8: 4b02 ldr r3, [pc, #8] ; (8028cb4 <ups_megatec_rx_pdu+0x3c>)
- 8028caa: 8e58 ldrh r0, [r3, #50] ; 0x32
- return false;
- return true;
- }
- 8028cac: 3000 adds r0, #0
- 8028cae: bf18 it ne
- 8028cb0: 2001 movne r0, #1
- 8028cb2: bd10 pop {r4, pc}
- 8028cb4: 20000b1c .word 0x20000b1c
- 08028cb8 <ups_status_response>:
- void ups_status_response(char *data)
- {
- 8028cb8: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr}
- uint8_t i;
- char *endValue;
- char value[10];
- uint8_t len = 0;
- if(data[0] != '(')
- 8028cbc: 7803 ldrb r3, [r0, #0]
- 8028cbe: 2b28 cmp r3, #40 ; 0x28
- return true;
- }
- void ups_status_response(char *data)
- {
- 8028cc0: 4604 mov r4, r0
- uint8_t i;
- char *endValue;
- char value[10];
- uint8_t len = 0;
- if(data[0] != '(')
- 8028cc2: f040 80e4 bne.w 8028e8e <ups_status_response+0x1d6>
- return;
- UPS.Present = true;
- 8028cc6: 4b78 ldr r3, [pc, #480] ; (8028ea8 <ups_status_response+0x1f0>)
- 8028cc8: 2201 movs r2, #1
- 8028cca: f883 202c strb.w r2, [r3, #44] ; 0x2c
- UPS.Flag_Present = true;
- 8028cce: f883 202d strb.w r2, [r3, #45] ; 0x2d
- UPS.cnt_err_ups = 0;
- 8028cd2: 2200 movs r2, #0
- 8028cd4: f883 202b strb.w r2, [r3, #43] ; 0x2b
- if(flUpdateLog){
- 8028cd8: 4b74 ldr r3, [pc, #464] ; (8028eac <ups_status_response+0x1f4>)
- 8028cda: 7819 ldrb r1, [r3, #0]
- 8028cdc: b111 cbz r1, 8028ce4 <ups_status_response+0x2c>
- flUpdateLog = false;
- 8028cde: 701a strb r2, [r3, #0]
- log_add(data);
- 8028ce0: f000 fecc bl 8029a7c <log_add>
- }
- data++;
- 8028ce4: 3401 adds r4, #1
- memset(value, 0, 10);
- 8028ce6: 220a movs r2, #10
- 8028ce8: 2100 movs r1, #0
- 8028cea: a801 add r0, sp, #4
- 8028cec: f7f8 ff08 bl 8021b00 <memset>
- endValue = strpbrk(data," ");
- 8028cf0: 4620 mov r0, r4
- 8028cf2: 496f ldr r1, [pc, #444] ; (8028eb0 <ups_status_response+0x1f8>)
- 8028cf4: f7f9 f9c6 bl 8022084 <strpbrk>
- len = endValue - data;
- 8028cf8: 1b00 subs r0, r0, r4
- void ups_megatec_init(void) {
- init_UPS_value();
- UPS.Present = true;
- xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- }
- 8028cfa: b2c6 uxtb r6, r0
- data++;
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- 8028cfc: 4632 mov r2, r6
- 8028cfe: 4621 mov r1, r4
- 8028d00: a801 add r0, sp, #4
- 8028d02: f7f9 f98d bl 8022020 <strncpy>
- data += (len + 1);
- UPS.VAC_in = atof(value);
- 8028d06: a801 add r0, sp, #4
- 8028d08: f7f8 fdd6 bl 80218b8 <atof>
- 8028d0c: f7f7 ff3a bl 8020b84 <__aeabi_d2f>
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- data += (len + 1);
- 8028d10: 3601 adds r6, #1
- 8028d12: 19a6 adds r6, r4, r6
- UPS.VAC_in = atof(value);
- 8028d14: 4c64 ldr r4, [pc, #400] ; (8028ea8 <ups_status_response+0x1f0>)
- //TODO
- memset(value, 0, 10);
- 8028d16: 220a movs r2, #10
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- data += (len + 1);
- UPS.VAC_in = atof(value);
- 8028d18: 6060 str r0, [r4, #4]
- //TODO
- memset(value, 0, 10);
- 8028d1a: 2100 movs r1, #0
- 8028d1c: a801 add r0, sp, #4
- 8028d1e: f7f8 feef bl 8021b00 <memset>
- endValue = strpbrk(data," ");
- 8028d22: 4630 mov r0, r6
- 8028d24: 4962 ldr r1, [pc, #392] ; (8028eb0 <ups_status_response+0x1f8>)
- 8028d26: f7f9 f9ad bl 8022084 <strpbrk>
- len = endValue - data;
- 8028d2a: 1b80 subs r0, r0, r6
- void ups_megatec_init(void) {
- init_UPS_value();
- UPS.Present = true;
- xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- }
- 8028d2c: b2c5 uxtb r5, r0
- //TODO
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- 8028d2e: 4631 mov r1, r6
- 8028d30: 462a mov r2, r5
- 8028d32: a801 add r0, sp, #4
- data += (len + 1);
- 8028d34: 3501 adds r5, #1
- //TODO
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- 8028d36: f7f9 f973 bl 8022020 <strncpy>
- data += (len + 1);
- 8028d3a: 1975 adds r5, r6, r5
- memset(value, 0, 10);
- 8028d3c: 220a movs r2, #10
- 8028d3e: 2100 movs r1, #0
- 8028d40: a801 add r0, sp, #4
- 8028d42: f7f8 fedd bl 8021b00 <memset>
- endValue = strpbrk(data," ");
- 8028d46: 4628 mov r0, r5
- 8028d48: 4959 ldr r1, [pc, #356] ; (8028eb0 <ups_status_response+0x1f8>)
- 8028d4a: f7f9 f99b bl 8022084 <strpbrk>
- len = endValue - data;
- 8028d4e: 1b40 subs r0, r0, r5
- void ups_megatec_init(void) {
- init_UPS_value();
- UPS.Present = true;
- xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- }
- 8028d50: fa5f f880 uxtb.w r8, r0
- data += (len + 1);
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- 8028d54: 4642 mov r2, r8
- 8028d56: 4629 mov r1, r5
- 8028d58: a801 add r0, sp, #4
- 8028d5a: f7f9 f961 bl 8022020 <strncpy>
- data += (len + 1);
- UPS.VAC_out = atof(value);
- 8028d5e: a801 add r0, sp, #4
- 8028d60: f7f8 fdaa bl 80218b8 <atof>
- 8028d64: f7f7 ff0e bl 8020b84 <__aeabi_d2f>
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- data += (len + 1);
- 8028d68: f108 0801 add.w r8, r8, #1
- 8028d6c: 44a8 add r8, r5
- UPS.VAC_out = atof(value);
- memset(value, 0, 10);
- 8028d6e: 220a movs r2, #10
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- data += (len + 1);
- UPS.VAC_out = atof(value);
- 8028d70: 60a0 str r0, [r4, #8]
- memset(value, 0, 10);
- 8028d72: 2100 movs r1, #0
- 8028d74: a801 add r0, sp, #4
- 8028d76: f7f8 fec3 bl 8021b00 <memset>
- endValue = strpbrk(data," ");
- 8028d7a: 494d ldr r1, [pc, #308] ; (8028eb0 <ups_status_response+0x1f8>)
- 8028d7c: 4640 mov r0, r8
- 8028d7e: f7f9 f981 bl 8022084 <strpbrk>
- len = endValue - data;
- 8028d82: ebc8 0000 rsb r0, r8, r0
- void ups_megatec_init(void) {
- init_UPS_value();
- UPS.Present = true;
- xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- }
- 8028d86: b2c7 uxtb r7, r0
- UPS.VAC_out = atof(value);
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- 8028d88: 463a mov r2, r7
- 8028d8a: 4641 mov r1, r8
- 8028d8c: a801 add r0, sp, #4
- 8028d8e: f7f9 f947 bl 8022020 <strncpy>
- data += (len + 1);
- UPS.Load = atoi(value);
- 8028d92: a801 add r0, sp, #4
- 8028d94: f7f8 fd94 bl 80218c0 <atoi>
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- data += (len + 1);
- 8028d98: 3701 adds r7, #1
- 8028d9a: 4447 add r7, r8
- UPS.Load = atoi(value);
- memset(value, 0, 10);
- 8028d9c: 220a movs r2, #10
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- data += (len + 1);
- UPS.Load = atoi(value);
- 8028d9e: 7420 strb r0, [r4, #16]
- memset(value, 0, 10);
- 8028da0: 2100 movs r1, #0
- 8028da2: a801 add r0, sp, #4
- 8028da4: f7f8 feac bl 8021b00 <memset>
- endValue = strpbrk(data," ");
- 8028da8: 4941 ldr r1, [pc, #260] ; (8028eb0 <ups_status_response+0x1f8>)
- 8028daa: 4638 mov r0, r7
- 8028dac: f7f9 f96a bl 8022084 <strpbrk>
- len = endValue - data;
- 8028db0: 1bc0 subs r0, r0, r7
- void ups_megatec_init(void) {
- init_UPS_value();
- UPS.Present = true;
- xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- }
- 8028db2: b2c6 uxtb r6, r0
- UPS.Load = atoi(value);
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- 8028db4: 4632 mov r2, r6
- 8028db6: 4639 mov r1, r7
- 8028db8: a801 add r0, sp, #4
- 8028dba: f7f9 f931 bl 8022020 <strncpy>
- data += (len + 1);
- UPS.Freq_in = atof(value);
- 8028dbe: a801 add r0, sp, #4
- 8028dc0: f7f8 fd7a bl 80218b8 <atof>
- 8028dc4: f7f7 fede bl 8020b84 <__aeabi_d2f>
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- data += (len + 1);
- 8028dc8: 3601 adds r6, #1
- 8028dca: 19be adds r6, r7, r6
- UPS.Freq_in = atof(value);
- 8028dcc: 6020 str r0, [r4, #0]
- //TODO
- memset(value, 0, 10);
- 8028dce: 220a movs r2, #10
- 8028dd0: 2100 movs r1, #0
- 8028dd2: a801 add r0, sp, #4
- 8028dd4: f7f8 fe94 bl 8021b00 <memset>
- endValue = strpbrk(data," ");
- 8028dd8: 4630 mov r0, r6
- 8028dda: 4935 ldr r1, [pc, #212] ; (8028eb0 <ups_status_response+0x1f8>)
- 8028ddc: f7f9 f952 bl 8022084 <strpbrk>
- len = endValue - data;
- 8028de0: 1b80 subs r0, r0, r6
- void ups_megatec_init(void) {
- init_UPS_value();
- UPS.Present = true;
- xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- }
- 8028de2: b2c5 uxtb r5, r0
- //TODO
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- 8028de4: 462a mov r2, r5
- 8028de6: 4631 mov r1, r6
- 8028de8: a801 add r0, sp, #4
- 8028dea: f7f9 f919 bl 8022020 <strncpy>
- data += (len + 1);
- UPS.SOC = 100*((atof(value)) - 1.6)/0.7;
- 8028dee: a801 add r0, sp, #4
- 8028df0: f7f8 fd62 bl 80218b8 <atof>
- 8028df4: a328 add r3, pc, #160 ; (adr r3, 8028e98 <ups_status_response+0x1e0>)
- 8028df6: e9d3 2300 ldrd r2, r3, [r3]
- 8028dfa: f7f7 fa2d bl 8020258 <__aeabi_dsub>
- 8028dfe: 2200 movs r2, #0
- 8028e00: 4b2c ldr r3, [pc, #176] ; (8028eb4 <ups_status_response+0x1fc>)
- 8028e02: f7f7 fbdd bl 80205c0 <__aeabi_dmul>
- 8028e06: a326 add r3, pc, #152 ; (adr r3, 8028ea0 <ups_status_response+0x1e8>)
- 8028e08: e9d3 2300 ldrd r2, r3, [r3]
- 8028e0c: f7f7 fd02 bl 8020814 <__aeabi_ddiv>
- 8028e10: f7f7 fe98 bl 8020b44 <__aeabi_d2uiz>
- //TODO
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- data += (len + 1);
- 8028e14: 3501 adds r5, #1
- 8028e16: 1975 adds r5, r6, r5
- UPS.SOC = 100*((atof(value)) - 1.6)/0.7;
- 8028e18: 7460 strb r0, [r4, #17]
- memset(value, 0, 10);
- 8028e1a: 220a movs r2, #10
- 8028e1c: 2100 movs r1, #0
- 8028e1e: a801 add r0, sp, #4
- 8028e20: f7f8 fe6e bl 8021b00 <memset>
- endValue = strpbrk(data," ");
- 8028e24: 4628 mov r0, r5
- 8028e26: 4922 ldr r1, [pc, #136] ; (8028eb0 <ups_status_response+0x1f8>)
- 8028e28: f7f9 f92c bl 8022084 <strpbrk>
- len = endValue - data;
- 8028e2c: 1b40 subs r0, r0, r5
- void ups_megatec_init(void) {
- init_UPS_value();
- UPS.Present = true;
- xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- }
- 8028e2e: b2c6 uxtb r6, r0
- UPS.SOC = 100*((atof(value)) - 1.6)/0.7;
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- 8028e30: 4632 mov r2, r6
- 8028e32: 4629 mov r1, r5
- 8028e34: a801 add r0, sp, #4
- 8028e36: f7f9 f8f3 bl 8022020 <strncpy>
- data += (len + 1);
- UPS.Temp = atof(value);
- 8028e3a: a801 add r0, sp, #4
- 8028e3c: f7f8 fd3c bl 80218b8 <atof>
- 8028e40: f7f7 fea0 bl 8020b84 <__aeabi_d2f>
- memset(value, 0, 10);
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(value, data, len);
- data += (len + 1);
- 8028e44: 3601 adds r6, #1
- 8028e46: 19ad adds r5, r5, r6
- UPS.Temp = atof(value);
- 8028e48: 60e0 str r0, [r4, #12]
- memset(value, 0, 10);
- 8028e4a: 220a movs r2, #10
- 8028e4c: 2100 movs r1, #0
- 8028e4e: a801 add r0, sp, #4
- 8028e50: f7f8 fe56 bl 8021b00 <memset>
- endValue = strpbrk(data,"\r");
- 8028e54: 4918 ldr r1, [pc, #96] ; (8028eb8 <ups_status_response+0x200>)
- 8028e56: 4628 mov r0, r5
- 8028e58: f7f9 f914 bl 8022084 <strpbrk>
- len = endValue - data;
- 8028e5c: 1b40 subs r0, r0, r5
- 8028e5e: b2c4 uxtb r4, r0
- strncpy(value, data, len);
- 8028e60: 4629 mov r1, r5
- 8028e62: a801 add r0, sp, #4
- 8028e64: 4622 mov r2, r4
- 8028e66: f7f9 f8db bl 8022020 <strncpy>
- uint8_t stat = 0;
- for(i = 0; i < len; i ++)
- 8028e6a: 2300 movs r3, #0
- memset(value, 0, 10);
- endValue = strpbrk(data,"\r");
- len = endValue - data;
- strncpy(value, data, len);
- uint8_t stat = 0;
- 8028e6c: 4619 mov r1, r3
- for(i = 0; i < len; i ++)
- 8028e6e: e009 b.n 8028e84 <ups_status_response+0x1cc>
- {
- stat |= (value[i] - 0x30) << (7-i);
- 8028e70: aa01 add r2, sp, #4
- return false;
- return true;
- }
- void ups_status_response(char *data)
- 8028e72: f1c3 0007 rsb r0, r3, #7
- len = endValue - data;
- strncpy(value, data, len);
- uint8_t stat = 0;
- for(i = 0; i < len; i ++)
- {
- stat |= (value[i] - 0x30) << (7-i);
- 8028e76: 5c9a ldrb r2, [r3, r2]
- 8028e78: 3a30 subs r2, #48 ; 0x30
- 8028e7a: fa02 f200 lsl.w r2, r2, r0
- 8028e7e: 4311 orrs r1, r2
- 8028e80: b2c9 uxtb r1, r1
- 8028e82: 3301 adds r3, #1
- memset(value, 0, 10);
- endValue = strpbrk(data,"\r");
- len = endValue - data;
- strncpy(value, data, len);
- uint8_t stat = 0;
- for(i = 0; i < len; i ++)
- 8028e84: b2da uxtb r2, r3
- 8028e86: 42a2 cmp r2, r4
- 8028e88: d3f2 bcc.n 8028e70 <ups_status_response+0x1b8>
- {
- stat |= (value[i] - 0x30) << (7-i);
- }
- UPS.Status = stat;
- 8028e8a: 4b07 ldr r3, [pc, #28] ; (8028ea8 <ups_status_response+0x1f0>)
- 8028e8c: 74d9 strb r1, [r3, #19]
- }
- 8028e8e: e8bd 81ff ldmia.w sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, pc}
- 8028e92: bf00 nop
- 8028e94: f3af 8000 nop.w
- 8028e98: 9999999a .word 0x9999999a
- 8028e9c: 3ff99999 .word 0x3ff99999
- 8028ea0: 66666666 .word 0x66666666
- 8028ea4: 3fe66666 .word 0x3fe66666
- 8028ea8: 2000cba8 .word 0x2000cba8
- 8028eac: 20000bc0 .word 0x20000bc0
- 8028eb0: 08039ade .word 0x08039ade
- 8028eb4: 40590000 .word 0x40590000
- 8028eb8: 08045b15 .word 0x08045b15
- 8028ebc: f3af 8000 nop.w
- 08028ec0 <ups_info_response>:
- void ups_info_response(char *data)
- {
- 8028ec0: b538 push {r3, r4, r5, lr}
- uint8_t i = 0;
- char *endValue;
- uint8_t len = 0;
- if(data[0] != '#')
- 8028ec2: 7803 ldrb r3, [r0, #0]
- 8028ec4: 2b23 cmp r3, #35 ; 0x23
- 8028ec6: d131 bne.n 8028f2c <ups_info_response+0x6c>
- return;
- UPS.Present = true;
- 8028ec8: 4b19 ldr r3, [pc, #100] ; (8028f30 <ups_info_response+0x70>)
- 8028eca: 2201 movs r2, #1
- 8028ecc: f883 202c strb.w r2, [r3, #44] ; 0x2c
- UPS.Flag_Present = true;
- 8028ed0: f883 202d strb.w r2, [r3, #45] ; 0x2d
- UPS.cnt_err_ups = 0;
- data++;
- data += 16;
- 8028ed4: 3011 adds r0, #17
- if(data[0] != '#')
- return;
- UPS.Present = true;
- UPS.Flag_Present = true;
- UPS.cnt_err_ups = 0;
- 8028ed6: 2200 movs r2, #0
- 8028ed8: f883 202b strb.w r2, [r3, #43] ; 0x2b
- data++;
- data += 16;
- while(data[0] == ' '){
- 8028edc: 4603 mov r3, r0
- 8028ede: 461c mov r4, r3
- stat |= (value[i] - 0x30) << (7-i);
- }
- UPS.Status = stat;
- }
- void ups_info_response(char *data)
- 8028ee0: 1a1a subs r2, r3, r0
- data++;
- data += 16;
- while(data[0] == ' '){
- 8028ee2: 7821 ldrb r1, [r4, #0]
- 8028ee4: 3301 adds r3, #1
- 8028ee6: 2920 cmp r1, #32
- stat |= (value[i] - 0x30) << (7-i);
- }
- UPS.Status = stat;
- }
- void ups_info_response(char *data)
- 8028ee8: b2d2 uxtb r2, r2
- data++;
- data += 16;
- while(data[0] == ' '){
- 8028eea: d0f8 beq.n 8028ede <ups_info_response+0x1e>
- data ++;
- i ++;
- }
- if(i < 11){
- 8028eec: 2a0a cmp r2, #10
- 8028eee: d80d bhi.n 8028f0c <ups_info_response+0x4c>
- endValue = strpbrk(data," ");
- 8028ef0: 4620 mov r0, r4
- 8028ef2: 4910 ldr r1, [pc, #64] ; (8028f34 <ups_info_response+0x74>)
- 8028ef4: f7f9 f8c6 bl 8022084 <strpbrk>
- len = endValue - data;
- 8028ef8: 1b00 subs r0, r0, r4
- void ups_megatec_init(void) {
- init_UPS_value();
- UPS.Present = true;
- xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- }
- 8028efa: b2c5 uxtb r5, r0
- i ++;
- }
- if(i < 11){
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(UPS.model, data, len);
- 8028efc: 4621 mov r1, r4
- 8028efe: 462a mov r2, r5
- 8028f00: 480d ldr r0, [pc, #52] ; (8028f38 <ups_info_response+0x78>)
- data += (len + 1);
- 8028f02: 3501 adds r5, #1
- i ++;
- }
- if(i < 11){
- endValue = strpbrk(data," ");
- len = endValue - data;
- strncpy(UPS.model, data, len);
- 8028f04: f7f9 f88c bl 8022020 <strncpy>
- data += (len + 1);
- 8028f08: 1964 adds r4, r4, r5
- 8028f0a: e003 b.n 8028f14 <ups_info_response+0x54>
- }
- else
- {
- strcpy(UPS.model, "RTMP II");
- 8028f0c: 480a ldr r0, [pc, #40] ; (8028f38 <ups_info_response+0x78>)
- 8028f0e: 490b ldr r1, [pc, #44] ; (8028f3c <ups_info_response+0x7c>)
- 8028f10: f7f8 ff70 bl 8021df4 <strcpy>
- }
- endValue = strpbrk(data,"\r");
- 8028f14: 4620 mov r0, r4
- 8028f16: 490a ldr r1, [pc, #40] ; (8028f40 <ups_info_response+0x80>)
- 8028f18: f7f9 f8b4 bl 8022084 <strpbrk>
- len = endValue - data;
- 8028f1c: 1b02 subs r2, r0, r4
- strncpy(UPS.vertion, data, len);
- 8028f1e: 4809 ldr r0, [pc, #36] ; (8028f44 <ups_info_response+0x84>)
- 8028f20: 4621 mov r1, r4
- 8028f22: b2d2 uxtb r2, r2
- }
- 8028f24: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- strcpy(UPS.model, "RTMP II");
- }
- endValue = strpbrk(data,"\r");
- len = endValue - data;
- strncpy(UPS.vertion, data, len);
- 8028f28: f7f9 b87a b.w 8022020 <strncpy>
- 8028f2c: bd38 pop {r3, r4, r5, pc}
- 8028f2e: bf00 nop
- 8028f30: 2000cba8 .word 0x2000cba8
- 8028f34: 08039ade .word 0x08039ade
- 8028f38: 2000cbbd .word 0x2000cbbd
- 8028f3c: 08039ae0 .word 0x08039ae0
- 8028f40: 08045b15 .word 0x08045b15
- 8028f44: 2000cbc8 .word 0x2000cbc8
- 08028f48 <ups_remain_time_response>:
- }
- void ups_remain_time_response(char *data)
- {
- 8028f48: b530 push {r4, r5, lr}
- char value[10];
- if(data[0] != '(')
- 8028f4a: 7803 ldrb r3, [r0, #0]
- 8028f4c: 2b28 cmp r3, #40 ; 0x28
- strncpy(UPS.vertion, data, len);
- }
- void ups_remain_time_response(char *data)
- {
- 8028f4e: b085 sub sp, #20
- 8028f50: 4605 mov r5, r0
- char value[10];
- if(data[0] != '(')
- 8028f52: d116 bne.n 8028f82 <ups_remain_time_response+0x3a>
- return;
- UPS.Present = true;
- 8028f54: 4c0c ldr r4, [pc, #48] ; (8028f88 <ups_remain_time_response+0x40>)
- 8028f56: 2301 movs r3, #1
- UPS.Flag_Present = true;
- UPS.cnt_err_ups = 0;
- data++;
- memset(value, 0, 10);
- 8028f58: 220a movs r2, #10
- if(data[0] != '(')
- return;
- UPS.Present = true;
- UPS.Flag_Present = true;
- UPS.cnt_err_ups = 0;
- 8028f5a: 2100 movs r1, #0
- data++;
- memset(value, 0, 10);
- 8028f5c: a801 add r0, sp, #4
- {
- char value[10];
- if(data[0] != '(')
- return;
- UPS.Present = true;
- 8028f5e: f884 302c strb.w r3, [r4, #44] ; 0x2c
- UPS.Flag_Present = true;
- 8028f62: f884 302d strb.w r3, [r4, #45] ; 0x2d
- UPS.cnt_err_ups = 0;
- 8028f66: f884 102b strb.w r1, [r4, #43] ; 0x2b
- data++;
- memset(value, 0, 10);
- 8028f6a: f7f8 fdc9 bl 8021b00 <memset>
- strcpy(value, data);
- 8028f6e: 1c69 adds r1, r5, #1
- 8028f70: a801 add r0, sp, #4
- 8028f72: f7f8 ff3f bl 8021df4 <strcpy>
- UPS.work_time = atof(value);
- 8028f76: a801 add r0, sp, #4
- 8028f78: f7f8 fc9e bl 80218b8 <atof>
- 8028f7c: f7f7 fde2 bl 8020b44 <__aeabi_d2uiz>
- 8028f80: 74a0 strb r0, [r4, #18]
- }
- 8028f82: b005 add sp, #20
- 8028f84: bd30 pop {r4, r5, pc}
- 8028f86: bf00 nop
- 8028f88: 2000cba8 .word 0x2000cba8
- 08028f8c <request_task>:
- }
- return -1;
- }
- void request_task(void)
- {
- 8028f8c: b5f8 push {r3, r4, r5, r6, r7, lr}
- for(;;)
- {
- if(UPS.Present == true){
- 8028f8e: 4c31 ldr r4, [pc, #196] ; (8029054 <request_task+0xc8>)
- memset(UPS.model, 0, 11);
- memset(UPS.vertion, 0, 11);
- }
- }
- }
- if(megatec_send){
- 8028f90: 4d31 ldr r5, [pc, #196] ; (8029058 <request_task+0xcc>)
- if(UPS.Flag_Present == false)
- {
- if(UPS.cnt_err_ups != 2)
- UPS.cnt_err_ups++;
- else{
- UPS.Freq_in = 0;
- 8028f92: 2700 movs r7, #0
- void request_task(void)
- {
- for(;;)
- {
- if(UPS.Present == true){
- 8028f94: f894 302c ldrb.w r3, [r4, #44] ; 0x2c
- 8028f98: b1fb cbz r3, 8028fda <request_task+0x4e>
- if(UPS.Flag_Present == false)
- 8028f9a: f894 602d ldrb.w r6, [r4, #45] ; 0x2d
- 8028f9e: b9e6 cbnz r6, 8028fda <request_task+0x4e>
- {
- if(UPS.cnt_err_ups != 2)
- 8028fa0: f894 302b ldrb.w r3, [r4, #43] ; 0x2b
- 8028fa4: 2b02 cmp r3, #2
- 8028fa6: d003 beq.n 8028fb0 <request_task+0x24>
- UPS.cnt_err_ups++;
- 8028fa8: 3301 adds r3, #1
- 8028faa: f884 302b strb.w r3, [r4, #43] ; 0x2b
- 8028fae: e014 b.n 8028fda <request_task+0x4e>
- UPS.work_time = 0;
- UPS.Status = 0;
- UPS.Alarm = 0;
- UPS.Present = false;
- memset(UPS.model, 0, 11);
- 8028fb0: 4631 mov r1, r6
- 8028fb2: 220b movs r2, #11
- 8028fb4: 4829 ldr r0, [pc, #164] ; (802905c <request_task+0xd0>)
- if(UPS.Flag_Present == false)
- {
- if(UPS.cnt_err_ups != 2)
- UPS.cnt_err_ups++;
- else{
- UPS.Freq_in = 0;
- 8028fb6: 6027 str r7, [r4, #0]
- UPS.VAC_in = 0;
- 8028fb8: 6067 str r7, [r4, #4]
- UPS.VAC_out = 0;
- 8028fba: 60a7 str r7, [r4, #8]
- UPS.Temp = 0;
- 8028fbc: 60e7 str r7, [r4, #12]
- UPS.Load = 0;
- 8028fbe: 7426 strb r6, [r4, #16]
- UPS.SOC = 0;
- 8028fc0: 7466 strb r6, [r4, #17]
- UPS.work_time = 0;
- 8028fc2: 74a6 strb r6, [r4, #18]
- UPS.Status = 0;
- 8028fc4: 74e6 strb r6, [r4, #19]
- UPS.Alarm = 0;
- 8028fc6: 7526 strb r6, [r4, #20]
- UPS.Present = false;
- 8028fc8: f884 602c strb.w r6, [r4, #44] ; 0x2c
- memset(UPS.model, 0, 11);
- 8028fcc: f7f8 fd98 bl 8021b00 <memset>
- memset(UPS.vertion, 0, 11);
- 8028fd0: 4823 ldr r0, [pc, #140] ; (8029060 <request_task+0xd4>)
- 8028fd2: 4631 mov r1, r6
- 8028fd4: 220b movs r2, #11
- 8028fd6: f7f8 fd93 bl 8021b00 <memset>
- }
- }
- }
- if(megatec_send){
- 8028fda: 782b ldrb r3, [r5, #0]
- 8028fdc: b16b cbz r3, 8028ffa <request_task+0x6e>
- megatec_send= false;
- 8028fde: 2000 movs r0, #0
- 8028fe0: 7028 strb r0, [r5, #0]
- UPS.Flag_Present = false;
- 8028fe2: f884 002d strb.w r0, [r4, #45] ; 0x2d
- send_MegaTec_cmd(ups_status_req);
- 8028fe6: f7ff fe03 bl 8028bf0 <send_MegaTec_cmd>
- if (ups_megatec_rx_pdu())
- 8028fea: f7ff fe45 bl 8028c78 <ups_megatec_rx_pdu>
- 8028fee: b110 cbz r0, 8028ff6 <request_task+0x6a>
- void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
- {
- switch(command)
- {
- case ups_status_req:
- ups_status_response(ups_pdu.data);
- 8028ff0: 481c ldr r0, [pc, #112] ; (8029064 <request_task+0xd8>)
- 8028ff2: f7ff fe61 bl 8028cb8 <ups_status_response>
- UPS.Flag_Present = false;
- send_MegaTec_cmd(ups_status_req);
- if (ups_megatec_rx_pdu())
- ups_megatec_process_pdu(ups_status_req);
- megatec_send=true;
- 8028ff6: 2301 movs r3, #1
- 8028ff8: 702b strb r3, [r5, #0]
- }
- if(megatec_send){
- 8028ffa: 782b ldrb r3, [r5, #0]
- 8028ffc: b19b cbz r3, 8029026 <request_task+0x9a>
- memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
- 8028ffe: 2100 movs r1, #0
- 8029000: 2232 movs r2, #50 ; 0x32
- 8029002: 4818 ldr r0, [pc, #96] ; (8029064 <request_task+0xd8>)
- 8029004: f7f8 fd7c bl 8021b00 <memset>
- megatec_send= false;
- 8029008: 2300 movs r3, #0
- UPS.Flag_Present = false;
- send_MegaTec_cmd(ups_remain_time_reg);
- 802900a: 200b movs r0, #11
- megatec_send=true;
- }
- if(megatec_send){
- memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
- megatec_send= false;
- 802900c: 702b strb r3, [r5, #0]
- UPS.Flag_Present = false;
- 802900e: f884 302d strb.w r3, [r4, #45] ; 0x2d
- send_MegaTec_cmd(ups_remain_time_reg);
- 8029012: f7ff fded bl 8028bf0 <send_MegaTec_cmd>
- if (ups_megatec_rx_pdu())
- 8029016: f7ff fe2f bl 8028c78 <ups_megatec_rx_pdu>
- 802901a: b110 cbz r0, 8029022 <request_task+0x96>
- break;
- case ups_rating_info:
- break;
- case ups_remain_time_reg:
- ups_remain_time_response(ups_pdu.data);
- 802901c: 4811 ldr r0, [pc, #68] ; (8029064 <request_task+0xd8>)
- 802901e: f7ff ff93 bl 8028f48 <ups_remain_time_response>
- UPS.Flag_Present = false;
- send_MegaTec_cmd(ups_remain_time_reg);
- if (ups_megatec_rx_pdu())
- ups_megatec_process_pdu(ups_remain_time_reg);
- megatec_send=true;
- 8029022: 2301 movs r3, #1
- 8029024: 702b strb r3, [r5, #0]
- }
- //vTaskDelay(100);
- if(megatec_send){
- 8029026: 782b ldrb r3, [r5, #0]
- 8029028: b173 cbz r3, 8029048 <request_task+0xbc>
- megatec_send = false;
- 802902a: 2300 movs r3, #0
- UPS.Flag_Present = false;
- send_MegaTec_cmd(ups_info);
- 802902c: 2009 movs r0, #9
- megatec_send=true;
- }
- //vTaskDelay(100);
- if(megatec_send){
- megatec_send = false;
- 802902e: 702b strb r3, [r5, #0]
- UPS.Flag_Present = false;
- 8029030: f884 302d strb.w r3, [r4, #45] ; 0x2d
- send_MegaTec_cmd(ups_info);
- 8029034: f7ff fddc bl 8028bf0 <send_MegaTec_cmd>
- if (ups_megatec_rx_pdu())
- 8029038: f7ff fe1e bl 8028c78 <ups_megatec_rx_pdu>
- 802903c: b110 cbz r0, 8029044 <request_task+0xb8>
- {
- case ups_status_req:
- ups_status_response(ups_pdu.data);
- break;
- case ups_info:
- ups_info_response(ups_pdu.data);
- 802903e: 4809 ldr r0, [pc, #36] ; (8029064 <request_task+0xd8>)
- 8029040: f7ff ff3e bl 8028ec0 <ups_info_response>
- megatec_send = false;
- UPS.Flag_Present = false;
- send_MegaTec_cmd(ups_info);
- if (ups_megatec_rx_pdu())
- ups_megatec_process_pdu(ups_info);
- megatec_send = true;
- 8029044: 2301 movs r3, #1
- 8029046: 702b strb r3, [r5, #0]
- }
- vTaskDelay(1000);
- 8029048: f44f 707a mov.w r0, #1000 ; 0x3e8
- 802904c: f001 ffbe bl 802afcc <vTaskDelay>
- }
- 8029050: e7a0 b.n 8028f94 <request_task+0x8>
- 8029052: bf00 nop
- 8029054: 2000cba8 .word 0x2000cba8
- 8029058: 20000662 .word 0x20000662
- 802905c: 2000cbbd .word 0x2000cbbd
- 8029060: 2000cbc8 .word 0x2000cbc8
- 8029064: 20000b1c .word 0x20000b1c
- 08029068 <ups_metac_service_pdu>:
- break;
- }
- }
- int ups_metac_service_pdu(cmdMegaTecEnums_t command)
- {
- 8029068: b570 push {r4, r5, r6, lr}
- 802906a: 4606 mov r6, r0
- while(!megatec_send)
- 802906c: 4c14 ldr r4, [pc, #80] ; (80290c0 <ups_metac_service_pdu+0x58>)
- 802906e: e002 b.n 8029076 <ups_metac_service_pdu+0xe>
- {
- vTaskDelay(50);
- 8029070: 2032 movs r0, #50 ; 0x32
- 8029072: f001 ffab bl 802afcc <vTaskDelay>
- }
- }
- int ups_metac_service_pdu(cmdMegaTecEnums_t command)
- {
- while(!megatec_send)
- 8029076: 7823 ldrb r3, [r4, #0]
- 8029078: 4d11 ldr r5, [pc, #68] ; (80290c0 <ups_metac_service_pdu+0x58>)
- 802907a: 2b00 cmp r3, #0
- 802907c: d0f8 beq.n 8029070 <ups_metac_service_pdu+0x8>
- {
- vTaskDelay(50);
- }
- megatec_send = false;
- 802907e: 2300 movs r3, #0
- send_MegaTec_cmd(command);
- 8029080: 4630 mov r0, r6
- {
- while(!megatec_send)
- {
- vTaskDelay(50);
- }
- megatec_send = false;
- 8029082: 702b strb r3, [r5, #0]
- send_MegaTec_cmd(command);
- 8029084: f7ff fdb4 bl 8028bf0 <send_MegaTec_cmd>
- if (ups_megatec_rx_pdu())
- 8029088: f7ff fdf6 bl 8028c78 <ups_megatec_rx_pdu>
- 802908c: b190 cbz r0, 80290b4 <ups_metac_service_pdu+0x4c>
- {
- megatec_send = true;
- 802908e: 2401 movs r4, #1
- if(strncmp(ups_pdu.data, "ACK", 3) == 0)
- 8029090: 480c ldr r0, [pc, #48] ; (80290c4 <ups_metac_service_pdu+0x5c>)
- 8029092: 490d ldr r1, [pc, #52] ; (80290c8 <ups_metac_service_pdu+0x60>)
- }
- megatec_send = false;
- send_MegaTec_cmd(command);
- if (ups_megatec_rx_pdu())
- {
- megatec_send = true;
- 8029094: 702c strb r4, [r5, #0]
- if(strncmp(ups_pdu.data, "ACK", 3) == 0)
- 8029096: 2203 movs r2, #3
- 8029098: f7f8 ff6c bl 8021f74 <strncmp>
- 802909c: b168 cbz r0, 80290ba <ups_metac_service_pdu+0x52>
- return 1;
- else if(strncmp(ups_pdu.data, "NCK", 3) == 0)
- 802909e: 490b ldr r1, [pc, #44] ; (80290cc <ups_metac_service_pdu+0x64>)
- 80290a0: 4808 ldr r0, [pc, #32] ; (80290c4 <ups_metac_service_pdu+0x5c>)
- 80290a2: 2203 movs r2, #3
- 80290a4: f7f8 ff66 bl 8021f74 <strncmp>
- return 0;
- 80290a8: 2800 cmp r0, #0
- 80290aa: bf14 ite ne
- 80290ac: f04f 30ff movne.w r0, #4294967295
- 80290b0: 2000 moveq r0, #0
- 80290b2: bd70 pop {r4, r5, r6, pc}
- }
- return -1;
- 80290b4: f04f 30ff mov.w r0, #4294967295
- 80290b8: bd70 pop {r4, r5, r6, pc}
- send_MegaTec_cmd(command);
- if (ups_megatec_rx_pdu())
- {
- megatec_send = true;
- if(strncmp(ups_pdu.data, "ACK", 3) == 0)
- return 1;
- 80290ba: 4620 mov r0, r4
- else if(strncmp(ups_pdu.data, "NCK", 3) == 0)
- return 0;
- }
- return -1;
- }
- 80290bc: bd70 pop {r4, r5, r6, pc}
- 80290be: bf00 nop
- 80290c0: 20000662 .word 0x20000662
- 80290c4: 20000b1c .word 0x20000b1c
- 80290c8: 08039ae8 .word 0x08039ae8
- 80290cc: 08039aec .word 0x08039aec
- 080290d0 <ups_megatec_init>:
- vTaskDelay(1000);
- }
- }
- void ups_megatec_init(void) {
- 80290d0: b51f push {r0, r1, r2, r3, r4, lr}
- init_UPS_value();
- 80290d2: f7ff fd69 bl 8028ba8 <init_UPS_value>
- UPS.Present = true;
- 80290d6: 4b08 ldr r3, [pc, #32] ; (80290f8 <ups_megatec_init+0x28>)
- xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- 80290d8: 4908 ldr r1, [pc, #32] ; (80290fc <ups_megatec_init+0x2c>)
- 80290da: 4809 ldr r0, [pc, #36] ; (8029100 <ups_megatec_init+0x30>)
- }
- }
- void ups_megatec_init(void) {
- init_UPS_value();
- UPS.Present = true;
- 80290dc: 2201 movs r2, #1
- 80290de: f883 202c strb.w r2, [r3, #44] ; 0x2c
- xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- 80290e2: 2300 movs r3, #0
- 80290e4: 9300 str r3, [sp, #0]
- 80290e6: 9301 str r3, [sp, #4]
- 80290e8: 9302 str r3, [sp, #8]
- 80290ea: 9303 str r3, [sp, #12]
- 80290ec: f44f 7280 mov.w r2, #256 ; 0x100
- 80290f0: f001 fcd2 bl 802aa98 <xTaskGenericCreate>
- }
- 80290f4: b005 add sp, #20
- 80290f6: bd00 pop {pc}
- 80290f8: 2000cba8 .word 0x2000cba8
- 80290fc: 08039af0 .word 0x08039af0
- 8029100: 08028f8d .word 0x08028f8d
- 08029104 <Reboot>:
- #include "trap_api.h"
- #include <stddef.h>
- #include "FreeRTOS.h"
- #include "task.h"
- void Reboot(void) {
- 8029104: b508 push {r3, lr}
- SNMP_SendUserTrap(DEVICE_REBOOTED);
- 8029106: 2004 movs r0, #4
- 8029108: f00f f818 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_SYSTEM_BOOT, "Администратор");
- 802910c: 2000 movs r0, #0
- 802910e: 4909 ldr r1, [pc, #36] ; (8029134 <Reboot+0x30>)
- 8029110: f000 fca4 bl 8029a5c <log_event_data>
- vTaskDelay(1010);
- 8029114: f240 30f2 movw r0, #1010 ; 0x3f2
- 8029118: f001 ff58 bl 802afcc <vTaskDelay>
- This function acts as a special kind of Data Memory Barrier.
- It completes when all explicit memory accesses before this instruction complete.
- */
- __attribute__( ( always_inline ) ) __STATIC_INLINE void __DSB(void)
- {
- __ASM volatile ("dsb");
- 802911c: f3bf 8f4f dsb sy
- //static inline void NVIC_SystemReset(void)
- {
- __DSB(); /* Ensure all outstanding memory accesses included
- buffered write are completed before reset */
- SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
- (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
- 8029120: 4a05 ldr r2, [pc, #20] ; (8029138 <Reboot+0x34>)
- 8029122: 4b06 ldr r3, [pc, #24] ; (802913c <Reboot+0x38>)
- 8029124: 68d1 ldr r1, [r2, #12]
- 8029126: f401 61e0 and.w r1, r1, #1792 ; 0x700
- 802912a: 430b orrs r3, r1
- __STATIC_INLINE void NVIC_SystemReset(void)
- //static inline void NVIC_SystemReset(void)
- {
- __DSB(); /* Ensure all outstanding memory accesses included
- buffered write are completed before reset */
- SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
- 802912c: 60d3 str r3, [r2, #12]
- 802912e: f3bf 8f4f dsb sy
- 8029132: e7fe b.n 8029132 <Reboot+0x2e>
- 8029134: 08039ab8 .word 0x08039ab8
- 8029138: e000ed00 .word 0xe000ed00
- 802913c: 05fa0004 .word 0x05fa0004
- 08029140 <rbuf32_init>:
- #define _size_w(n) sizeof(n) / sizeof(int)
- void rbuf32_init(rbuf_t *rbuf32, uint32_t *buffer, uint32_t size) {
- rbuf32->buf_ptr = buffer;
- rbuf32->size = size;
- rbuf32->read_index = 0;
- 8029140: 2300 movs r3, #0
- #define _size_w(n) sizeof(n) / sizeof(int)
- void rbuf32_init(rbuf_t *rbuf32, uint32_t *buffer, uint32_t size) {
- rbuf32->buf_ptr = buffer;
- rbuf32->size = size;
- 8029142: e880 0006 stmia.w r0, {r1, r2}
- rbuf32->read_index = 0;
- 8029146: 6083 str r3, [r0, #8]
- rbuf32->write_index = 0;
- 8029148: 60c3 str r3, [r0, #12]
- 802914a: 4770 bx lr
- 0802914c <rbuf_isfull>:
- return full_space;
- }
- bool rbuf_isfull(rbuf_t *rbuf) {
- int r_tmp;
- if (rbuf->write_index == (rbuf->size - 1)) {
- 802914c: 6842 ldr r2, [r0, #4]
- 802914e: 68c3 ldr r3, [r0, #12]
- 8029150: 6880 ldr r0, [r0, #8]
- 8029152: 1e51 subs r1, r2, #1
- 8029154: 428b cmp r3, r1
- r_tmp = rbuf->read_index + rbuf->size;
- 8029156: bf08 it eq
- 8029158: 1810 addeq r0, r2, r0
- }
- else
- r_tmp = rbuf->read_index;
- if (r_tmp - rbuf->write_index == 1)
- 802915a: 1ac0 subs r0, r0, r3
- return true;
- else
- return false;
- }
- 802915c: 1e42 subs r2, r0, #1
- 802915e: 4250 negs r0, r2
- 8029160: 4150 adcs r0, r2
- 8029162: 4770 bx lr
- 08029164 <rbuf32_get>:
- rbuf64->read_index = 0;
- rbuf64->write_index = 0;
- }
- bool rbuf_isempty(rbuf_t *rbuf) {
- if (rbuf->read_index == rbuf->write_index)
- 8029164: 6883 ldr r3, [r0, #8]
- 8029166: 68c2 ldr r2, [r0, #12]
- 8029168: 4293 cmp r3, r2
- 802916a: d105 bne.n 8029178 <rbuf32_get+0x14>
- 802916c: e002 b.n 8029174 <rbuf32_get+0x10>
- /* Check whether buffer is not empty */
- if (!rbuf_isempty(rbuf32)) {
- *data = rbuf32->buf_ptr[rbuf32->read_index++];
- /* swap the read pointer */
- if (rbuf32->read_index == (rbuf32->size))
- rbuf32->read_index = 0;
- 802916e: 2300 movs r3, #0
- 8029170: 6083 str r3, [r0, #8]
- 8029172: e00a b.n 802918a <rbuf32_get+0x26>
- return true;
- }
- else
- return false;
- 8029174: 2000 movs r0, #0
- 8029176: 4770 bx lr
- }
- bool rbuf32_get(rbuf_t *rbuf32, uint32_t *data) {
- /* Check whether buffer is not empty */
- if (!rbuf_isempty(rbuf32)) {
- *data = rbuf32->buf_ptr[rbuf32->read_index++];
- 8029178: 6802 ldr r2, [r0, #0]
- 802917a: f852 2023 ldr.w r2, [r2, r3, lsl #2]
- 802917e: 600a str r2, [r1, #0]
- /* swap the read pointer */
- if (rbuf32->read_index == (rbuf32->size))
- 8029180: 6842 ldr r2, [r0, #4]
- }
- bool rbuf32_get(rbuf_t *rbuf32, uint32_t *data) {
- /* Check whether buffer is not empty */
- if (!rbuf_isempty(rbuf32)) {
- *data = rbuf32->buf_ptr[rbuf32->read_index++];
- 8029182: 3301 adds r3, #1
- /* swap the read pointer */
- if (rbuf32->read_index == (rbuf32->size))
- 8029184: 4293 cmp r3, r2
- }
- bool rbuf32_get(rbuf_t *rbuf32, uint32_t *data) {
- /* Check whether buffer is not empty */
- if (!rbuf_isempty(rbuf32)) {
- *data = rbuf32->buf_ptr[rbuf32->read_index++];
- 8029186: 6083 str r3, [r0, #8]
- /* swap the read pointer */
- if (rbuf32->read_index == (rbuf32->size))
- 8029188: d0f1 beq.n 802916e <rbuf32_get+0xa>
- rbuf32->read_index = 0;
- return true;
- 802918a: 2001 movs r0, #1
- }
- else
- return false;
- }
- 802918c: 4770 bx lr
- 0802918e <rbuf32_put>:
- /*
- * Oldest data is overwriting when write_ptr reaches read_ptr - 1 (!).
- * For check use rbuf_isfull.
- */
- bool rbuf32_put(rbuf_t *rbuf32, uint32_t data) {
- 802918e: b538 push {r3, r4, r5, lr}
- 8029190: 4604 mov r4, r0
- 8029192: 460d mov r5, r1
- if(!rbuf_isfull(rbuf32))
- 8029194: f7ff ffda bl 802914c <rbuf_isfull>
- 8029198: b950 cbnz r0, 80291b0 <rbuf32_put+0x22>
- {
- rbuf32->buf_ptr[rbuf32->write_index++] = data;
- 802919a: 68e3 ldr r3, [r4, #12]
- 802919c: 6822 ldr r2, [r4, #0]
- 802919e: f842 5023 str.w r5, [r2, r3, lsl #2]
- /* swap the write pointer */
- if (rbuf32->write_index == (rbuf32->size))
- 80291a2: 6862 ldr r2, [r4, #4]
- */
- bool rbuf32_put(rbuf_t *rbuf32, uint32_t data) {
- if(!rbuf_isfull(rbuf32))
- {
- rbuf32->buf_ptr[rbuf32->write_index++] = data;
- 80291a4: 3301 adds r3, #1
- /* swap the write pointer */
- if (rbuf32->write_index == (rbuf32->size))
- 80291a6: 4293 cmp r3, r2
- */
- bool rbuf32_put(rbuf_t *rbuf32, uint32_t data) {
- if(!rbuf_isfull(rbuf32))
- {
- rbuf32->buf_ptr[rbuf32->write_index++] = data;
- 80291a8: 60e3 str r3, [r4, #12]
- /* swap the write pointer */
- if (rbuf32->write_index == (rbuf32->size))
- 80291aa: d103 bne.n 80291b4 <rbuf32_put+0x26>
- rbuf32->write_index = 0;
- 80291ac: 60e0 str r0, [r4, #12]
- 80291ae: e001 b.n 80291b4 <rbuf32_put+0x26>
- return true;
- }
- else
- return false;
- 80291b0: 2000 movs r0, #0
- 80291b2: bd38 pop {r3, r4, r5, pc}
- bool rbuf32_put(rbuf_t *rbuf32, uint32_t data) {
- if(!rbuf_isfull(rbuf32))
- {
- rbuf32->buf_ptr[rbuf32->write_index++] = data;
- /* swap the write pointer */
- if (rbuf32->write_index == (rbuf32->size))
- 80291b4: 2001 movs r0, #1
- rbuf32->write_index = 0;
- return true;
- }
- else
- return false;
- }
- 80291b6: bd38 pop {r3, r4, r5, pc}
- 080291b8 <from_hex>:
- #include <ctype.h>
- #include <stdint.h>
- /* Converts a hex character to its integer value */
- char from_hex(char ch) {
- return isdigit(ch) ? ch - '0' : tolower(ch) - 'a' + 10;
- 80291b8: 4b08 ldr r3, [pc, #32] ; (80291dc <from_hex+0x24>)
- 80291ba: 681b ldr r3, [r3, #0]
- 80291bc: 181b adds r3, r3, r0
- 80291be: 785b ldrb r3, [r3, #1]
- 80291c0: f003 0204 and.w r2, r3, #4
- 80291c4: b2d2 uxtb r2, r2
- 80291c6: b10a cbz r2, 80291cc <from_hex+0x14>
- 80291c8: 3830 subs r0, #48 ; 0x30
- 80291ca: e005 b.n 80291d8 <from_hex+0x20>
- 80291cc: f003 0303 and.w r3, r3, #3
- 80291d0: 2b01 cmp r3, #1
- 80291d2: bf08 it eq
- 80291d4: 3020 addeq r0, #32
- 80291d6: 3857 subs r0, #87 ; 0x57
- 80291d8: b2c0 uxtb r0, r0
- }
- 80291da: 4770 bx lr
- 80291dc: 20000000 .word 0x20000000
- 080291e0 <url_decode>:
- return buf;
- }
- /* Returns a url-decoded version of str */
- /* IMPORTANT: be sure that outbuf is big enougth */
- char *url_decode(char *outbuf, uint32_t outlen, char *inbuf) {
- 80291e0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- 80291e4: 4607 mov r7, r0
- 80291e6: 460e mov r6, r1
- char *pstr = inbuf, *buf = outbuf, *pbuf = buf;
- 80291e8: 4604 mov r4, r0
- 80291ea: 4615 mov r5, r2
- if (pstr[1] && pstr[2]) {
- *pbuf++ = from_hex(pstr[1]) << 4 | from_hex(pstr[2]);
- pstr += 2;
- }
- } else if (*pstr == '+') {
- *pbuf++ = ' ';
- 80291ec: f04f 0920 mov.w r9, #32
- /* Returns a url-decoded version of str */
- /* IMPORTANT: be sure that outbuf is big enougth */
- char *url_decode(char *outbuf, uint32_t outlen, char *inbuf) {
- char *pstr = inbuf, *buf = outbuf, *pbuf = buf;
- while ((*pstr) && outlen > 1) {
- 80291f0: e01e b.n 8029230 <url_decode+0x50>
- if (*pstr == '%') {
- 80291f2: 2b25 cmp r3, #37 ; 0x25
- 80291f4: d112 bne.n 802921c <url_decode+0x3c>
- if (pstr[1] && pstr[2]) {
- 80291f6: 7868 ldrb r0, [r5, #1]
- 80291f8: b1c0 cbz r0, 802922c <url_decode+0x4c>
- 80291fa: f895 8002 ldrb.w r8, [r5, #2]
- 80291fe: f1b8 0f00 cmp.w r8, #0
- 8029202: d013 beq.n 802922c <url_decode+0x4c>
- *pbuf++ = from_hex(pstr[1]) << 4 | from_hex(pstr[2]);
- 8029204: f7ff ffd8 bl 80291b8 <from_hex>
- 8029208: 4682 mov sl, r0
- 802920a: 4640 mov r0, r8
- 802920c: f7ff ffd4 bl 80291b8 <from_hex>
- 8029210: ea40 100a orr.w r0, r0, sl, lsl #4
- 8029214: f804 0b01 strb.w r0, [r4], #1
- pstr += 2;
- 8029218: 3502 adds r5, #2
- 802921a: e007 b.n 802922c <url_decode+0x4c>
- }
- } else if (*pstr == '+') {
- 802921c: 2b2b cmp r3, #43 ; 0x2b
- 802921e: f104 0201 add.w r2, r4, #1
- *pbuf++ = ' ';
- 8029222: bf0c ite eq
- 8029224: f884 9000 strbeq.w r9, [r4]
- } else {
- *pbuf++ = *pstr;
- 8029228: 7023 strbne r3, [r4, #0]
- 802922a: 4614 mov r4, r2
- }
- pstr++;
- 802922c: 3501 adds r5, #1
- outlen--;
- 802922e: 3e01 subs r6, #1
- /* Returns a url-decoded version of str */
- /* IMPORTANT: be sure that outbuf is big enougth */
- char *url_decode(char *outbuf, uint32_t outlen, char *inbuf) {
- char *pstr = inbuf, *buf = outbuf, *pbuf = buf;
- while ((*pstr) && outlen > 1) {
- 8029230: 782b ldrb r3, [r5, #0]
- 8029232: b10b cbz r3, 8029238 <url_decode+0x58>
- 8029234: 2e01 cmp r6, #1
- 8029236: d8dc bhi.n 80291f2 <url_decode+0x12>
- *pbuf++ = *pstr;
- }
- pstr++;
- outlen--;
- }
- *pbuf = '\0';
- 8029238: 2300 movs r3, #0
- 802923a: 7023 strb r3, [r4, #0]
- return buf;
- }
- 802923c: 4638 mov r0, r7
- 802923e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 8029242: 0000 movs r0, r0
- 08029244 <UPS_DI0Monitor>:
- /**
- * @brief Мониторинг бита DI0 state
- */
- void UPS_DI0Monitor(void)
- {
- 8029244: b510 push {r4, lr}
- static bool isValueRecv = false;
- static uint8_t DI0OldState = 0;
- uint8_t DI0StateCurrent;
- DI0StateCurrent = get_state_din_outs(DIN1);
- 8029246: 2006 movs r0, #6
- 8029248: f7ff fca6 bl 8028b98 <get_state_din_outs>
- if (!isValueRecv) {
- 802924c: 4a16 ldr r2, [pc, #88] ; (80292a8 <UPS_DI0Monitor+0x64>)
- 802924e: 4b17 ldr r3, [pc, #92] ; (80292ac <UPS_DI0Monitor+0x68>)
- 8029250: 7811 ldrb r1, [r2, #0]
- {
- static bool isValueRecv = false;
- static uint8_t DI0OldState = 0;
- uint8_t DI0StateCurrent;
- DI0StateCurrent = get_state_din_outs(DIN1);
- 8029252: 4604 mov r4, r0
- if (!isValueRecv) {
- 8029254: b961 cbnz r1, 8029270 <UPS_DI0Monitor+0x2c>
- isValueRecv = true;
- 8029256: 2101 movs r1, #1
- 8029258: 7011 strb r1, [r2, #0]
- DI0OldState = DI0StateCurrent;
- 802925a: 7018 strb r0, [r3, #0]
- if (!DI0StateCurrent){
- 802925c: bb18 cbnz r0, 80292a6 <UPS_DI0Monitor+0x62>
- log_event_data(LOG_ALARM_DIO, "Авария");
- 802925e: 2008 movs r0, #8
- 8029260: 4913 ldr r1, [pc, #76] ; (80292b0 <UPS_DI0Monitor+0x6c>)
- 8029262: f000 fbfb bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(DI0_ALARM);
- 8029266: 2006 movs r0, #6
- }
- }
- }
- DI0OldState = DI0StateCurrent;
- }
- 8029268: e8bd 4010 ldmia.w sp!, {r4, lr}
- if (!isValueRecv) {
- isValueRecv = true;
- DI0OldState = DI0StateCurrent;
- if (!DI0StateCurrent){
- log_event_data(LOG_ALARM_DIO, "Авария");
- SNMP_SendUserTrap(DI0_ALARM);
- 802926c: f00e bf66 b.w 803813c <SNMP_SendUserTrap>
- }
- return;
- }
- if (!DI0StateCurrent)
- 8029270: b910 cbnz r0, 8029278 <UPS_DI0Monitor+0x34>
- flCriticalAlarm = true;
- 8029272: 4a10 ldr r2, [pc, #64] ; (80292b4 <UPS_DI0Monitor+0x70>)
- 8029274: 2101 movs r1, #1
- 8029276: 7011 strb r1, [r2, #0]
- // Значение параметра изменилось
- if (DI0StateCurrent != DI0OldState)
- 8029278: 781b ldrb r3, [r3, #0]
- 802927a: 42a3 cmp r3, r4
- 802927c: d011 beq.n 80292a2 <UPS_DI0Monitor+0x5e>
- {
- if(sSettings.sInOuts.din_type_act[0] == SNMP_TRAP)
- 802927e: 4b0e ldr r3, [pc, #56] ; (80292b8 <UPS_DI0Monitor+0x74>)
- 8029280: f893 3376 ldrb.w r3, [r3, #886] ; 0x376
- 8029284: 2b02 cmp r3, #2
- 8029286: d10c bne.n 80292a2 <UPS_DI0Monitor+0x5e>
- {
- if (DI0StateCurrent){
- log_event_data(LOG_ALARM_DIO, "Норма");
- 8029288: 2008 movs r0, #8
- // Значение параметра изменилось
- if (DI0StateCurrent != DI0OldState)
- {
- if(sSettings.sInOuts.din_type_act[0] == SNMP_TRAP)
- {
- if (DI0StateCurrent){
- 802928a: b124 cbz r4, 8029296 <UPS_DI0Monitor+0x52>
- log_event_data(LOG_ALARM_DIO, "Норма");
- 802928c: 490b ldr r1, [pc, #44] ; (80292bc <UPS_DI0Monitor+0x78>)
- 802928e: f000 fbe5 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(DI0_NORM);
- 8029292: 2005 movs r0, #5
- 8029294: e003 b.n 802929e <UPS_DI0Monitor+0x5a>
- }
- else{
- log_event_data(LOG_ALARM_DIO, "Авария");
- 8029296: 4906 ldr r1, [pc, #24] ; (80292b0 <UPS_DI0Monitor+0x6c>)
- 8029298: f000 fbe0 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(DI0_ALARM);
- 802929c: 2006 movs r0, #6
- 802929e: f00e ff4d bl 803813c <SNMP_SendUserTrap>
- }
- }
- }
- DI0OldState = DI0StateCurrent;
- 80292a2: 4b02 ldr r3, [pc, #8] ; (80292ac <UPS_DI0Monitor+0x68>)
- 80292a4: 701c strb r4, [r3, #0]
- 80292a6: bd10 pop {r4, pc}
- 80292a8: 20000b57 .word 0x20000b57
- 80292ac: 20000b55 .word 0x20000b55
- 80292b0: 08039b1f .word 0x08039b1f
- 80292b4: 20000b5e .word 0x20000b5e
- 80292b8: 2000cfc4 .word 0x2000cfc4
- 80292bc: 08039b2c .word 0x08039b2c
- 080292c0 <UPS_CriticalAlarmMonitor>:
- /**
- * @brief Мониторинг бита CriticalAlarm
- */
- void UPS_CriticalAlarmMonitor(void)
- {
- 80292c0: b5f0 push {r4, r5, r6, r7, lr}
- 80292c2: b089 sub sp, #36 ; 0x24
- static uint8_t OldRO2type_Sourse = 0;
- uint8_t CurrRO2type_Sourse = 0;
- uint8_t CurrRO1type_Sourse = 0;
- char str[30];
- memset(str, 0, 30);
- 80292c4: 2100 movs r1, #0
- 80292c6: 4668 mov r0, sp
- 80292c8: 221e movs r2, #30
- 80292ca: f7f8 fc19 bl 8021b00 <memset>
- CurrRO1type_Sourse = sSettings.sInOuts.ro_type_source[0];
- 80292ce: 4b45 ldr r3, [pc, #276] ; (80293e4 <UPS_CriticalAlarmMonitor+0x124>)
- 80292d0: f893 5374 ldrb.w r5, [r3, #884] ; 0x374
- CurrRO2type_Sourse = sSettings.sInOuts.ro_type_source[1];
- 80292d4: f893 7375 ldrb.w r7, [r3, #885] ; 0x375
- CriticalAlarmCurrent = flCriticalAlarm;
- 80292d8: 4b43 ldr r3, [pc, #268] ; (80293e8 <UPS_CriticalAlarmMonitor+0x128>)
- 80292da: 781c ldrb r4, [r3, #0]
- if (!isValueRecv) {
- 80292dc: 4b43 ldr r3, [pc, #268] ; (80293ec <UPS_CriticalAlarmMonitor+0x12c>)
- 80292de: 7819 ldrb r1, [r3, #0]
- 80292e0: bb29 cbnz r1, 802932e <UPS_CriticalAlarmMonitor+0x6e>
- isValueRecv = true;
- 80292e2: 2201 movs r2, #1
- 80292e4: 701a strb r2, [r3, #0]
- CriticalAlarmOldState = CriticalAlarmCurrent;
- 80292e6: 4b42 ldr r3, [pc, #264] ; (80293f0 <UPS_CriticalAlarmMonitor+0x130>)
- 80292e8: 701c strb r4, [r3, #0]
- OldRO0type_Sourse = CurrRO1type_Sourse;
- 80292ea: 4b42 ldr r3, [pc, #264] ; (80293f4 <UPS_CriticalAlarmMonitor+0x134>)
- 80292ec: 701d strb r5, [r3, #0]
- OldRO2type_Sourse = CurrRO2type_Sourse;
- 80292ee: 4b42 ldr r3, [pc, #264] ; (80293f8 <UPS_CriticalAlarmMonitor+0x138>)
- if(OldRO0type_Sourse == CRITICAL){
- 80292f0: 4295 cmp r5, r2
- if (!isValueRecv) {
- isValueRecv = true;
- CriticalAlarmOldState = CriticalAlarmCurrent;
- OldRO0type_Sourse = CurrRO1type_Sourse;
- OldRO2type_Sourse = CurrRO2type_Sourse;
- 80292f2: 701f strb r7, [r3, #0]
- if(OldRO0type_Sourse == CRITICAL){
- 80292f4: d10a bne.n 802930c <UPS_CriticalAlarmMonitor+0x4c>
- if(CriticalAlarmCurrent){
- 80292f6: b14c cbz r4, 802930c <UPS_CriticalAlarmMonitor+0x4c>
- SetROInt(1, 0);
- 80292f8: 4628 mov r0, r5
- 80292fa: f7ff f91a bl 8028532 <SetROInt>
- SNMP_SendUserTrap(DO0_TOGGLED);
- 80292fe: 2007 movs r0, #7
- 8029300: f00e ff1c bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_DO0_STATE, "Замкнуто");
- 8029304: 2009 movs r0, #9
- 8029306: 493d ldr r1, [pc, #244] ; (80293fc <UPS_CriticalAlarmMonitor+0x13c>)
- 8029308: f000 fba8 bl 8029a5c <log_event_data>
- }
- }
- if(OldRO2type_Sourse == CRITICAL){
- 802930c: 4b3a ldr r3, [pc, #232] ; (80293f8 <UPS_CriticalAlarmMonitor+0x138>)
- 802930e: 7818 ldrb r0, [r3, #0]
- 8029310: 2801 cmp r0, #1
- 8029312: d165 bne.n 80293e0 <UPS_CriticalAlarmMonitor+0x120>
- if(CriticalAlarmCurrent){
- 8029314: 2c00 cmp r4, #0
- 8029316: d063 beq.n 80293e0 <UPS_CriticalAlarmMonitor+0x120>
- SetROInt(1, 1);
- 8029318: 4601 mov r1, r0
- 802931a: f7ff f90a bl 8028532 <SetROInt>
- SNMP_SendUserTrap(DO1_TOGGLED);
- 802931e: 2008 movs r0, #8
- 8029320: f00e ff0c bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_DO1_STATE, "Замкнуто");
- 8029324: 200a movs r0, #10
- 8029326: 4935 ldr r1, [pc, #212] ; (80293fc <UPS_CriticalAlarmMonitor+0x13c>)
- 8029328: f000 fb98 bl 8029a5c <log_event_data>
- 802932c: e058 b.n 80293e0 <UPS_CriticalAlarmMonitor+0x120>
- }
- }
- return;
- }
- if(CriticalAlarmCurrent){
- 802932e: b154 cbz r4, 8029346 <UPS_CriticalAlarmMonitor+0x86>
- if (UPS.Present)
- 8029330: 4b33 ldr r3, [pc, #204] ; (8029400 <UPS_CriticalAlarmMonitor+0x140>)
- 8029332: f893 302c ldrb.w r3, [r3, #44] ; 0x2c
- LED_Toggle(LED_MAJOR_R);
- 8029336: 200b movs r0, #11
- }
- return;
- }
- if(CriticalAlarmCurrent){
- if (UPS.Present)
- 8029338: b113 cbz r3, 8029340 <UPS_CriticalAlarmMonitor+0x80>
- LED_Toggle(LED_MAJOR_R);
- 802933a: f7ff fbb3 bl 8028aa4 <LED_Toggle>
- 802933e: e005 b.n 802934c <UPS_CriticalAlarmMonitor+0x8c>
- else
- LED_On(LED_MAJOR_R);
- 8029340: f7ff fb76 bl 8028a30 <LED_On>
- 8029344: e002 b.n 802934c <UPS_CriticalAlarmMonitor+0x8c>
- }
- else{
- LED_Off(LED_MAJOR_R);
- 8029346: 200b movs r0, #11
- 8029348: f7ff fb75 bl 8028a36 <LED_Off>
- }
- // Значение параметра изменилось
- if (CriticalAlarmCurrent != CriticalAlarmOldState)
- 802934c: 4b28 ldr r3, [pc, #160] ; (80293f0 <UPS_CriticalAlarmMonitor+0x130>)
- 802934e: 781b ldrb r3, [r3, #0]
- 8029350: 42a3 cmp r3, r4
- 8029352: d03f beq.n 80293d4 <UPS_CriticalAlarmMonitor+0x114>
- {
- if(OldRO0type_Sourse == CRITICAL){
- 8029354: 4b27 ldr r3, [pc, #156] ; (80293f4 <UPS_CriticalAlarmMonitor+0x134>)
- 8029356: 781e ldrb r6, [r3, #0]
- 8029358: 2e01 cmp r6, #1
- 802935a: d11b bne.n 8029394 <UPS_CriticalAlarmMonitor+0xd4>
- memset(str, 0, 30);
- 802935c: 4668 mov r0, sp
- 802935e: 2100 movs r1, #0
- 8029360: 221e movs r2, #30
- 8029362: f7f8 fbcd bl 8021b00 <memset>
- if(CriticalAlarmCurrent){
- 8029366: b134 cbz r4, 8029376 <UPS_CriticalAlarmMonitor+0xb6>
- SetROInt(1, 0);
- 8029368: 4630 mov r0, r6
- 802936a: 2100 movs r1, #0
- 802936c: f7ff f8e1 bl 8028532 <SetROInt>
- strcat(str, "Замкнуто");
- 8029370: 4668 mov r0, sp
- 8029372: 4922 ldr r1, [pc, #136] ; (80293fc <UPS_CriticalAlarmMonitor+0x13c>)
- 8029374: e005 b.n 8029382 <UPS_CriticalAlarmMonitor+0xc2>
- }
- else{
- SetROInt(0, 0);
- 8029376: 4620 mov r0, r4
- 8029378: 4621 mov r1, r4
- 802937a: f7ff f8da bl 8028532 <SetROInt>
- strcat(str, "Разомкнуто");
- 802937e: 4921 ldr r1, [pc, #132] ; (8029404 <UPS_CriticalAlarmMonitor+0x144>)
- 8029380: 4668 mov r0, sp
- 8029382: f7f8 fc23 bl 8021bcc <strcat>
- }
- SNMP_SendUserTrap(DO0_TOGGLED);
- 8029386: 2007 movs r0, #7
- 8029388: f00e fed8 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_DO0_STATE, str);
- 802938c: 2009 movs r0, #9
- 802938e: 4669 mov r1, sp
- 8029390: f000 fb64 bl 8029a5c <log_event_data>
- }
- if(OldRO2type_Sourse == CRITICAL){
- 8029394: 4b18 ldr r3, [pc, #96] ; (80293f8 <UPS_CriticalAlarmMonitor+0x138>)
- 8029396: 781e ldrb r6, [r3, #0]
- 8029398: 2e01 cmp r6, #1
- 802939a: d11b bne.n 80293d4 <UPS_CriticalAlarmMonitor+0x114>
- memset(str, 0, 30);
- 802939c: 4668 mov r0, sp
- 802939e: 2100 movs r1, #0
- 80293a0: 221e movs r2, #30
- 80293a2: f7f8 fbad bl 8021b00 <memset>
- if(CriticalAlarmCurrent){
- 80293a6: b134 cbz r4, 80293b6 <UPS_CriticalAlarmMonitor+0xf6>
- SetROInt(1, 1);
- 80293a8: 4630 mov r0, r6
- 80293aa: 4631 mov r1, r6
- 80293ac: f7ff f8c1 bl 8028532 <SetROInt>
- strcat(str, "Замкнуто");
- 80293b0: 4668 mov r0, sp
- 80293b2: 4912 ldr r1, [pc, #72] ; (80293fc <UPS_CriticalAlarmMonitor+0x13c>)
- 80293b4: e005 b.n 80293c2 <UPS_CriticalAlarmMonitor+0x102>
- }
- else{
- SetROInt(0, 1);
- 80293b6: 4620 mov r0, r4
- 80293b8: 4631 mov r1, r6
- 80293ba: f7ff f8ba bl 8028532 <SetROInt>
- strcat(str, "Разомкнуто");
- 80293be: 4911 ldr r1, [pc, #68] ; (8029404 <UPS_CriticalAlarmMonitor+0x144>)
- 80293c0: 4668 mov r0, sp
- 80293c2: f7f8 fc03 bl 8021bcc <strcat>
- }
- SNMP_SendUserTrap(DO1_TOGGLED);
- 80293c6: 2008 movs r0, #8
- 80293c8: f00e feb8 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_DO1_STATE, str);
- 80293cc: 200a movs r0, #10
- 80293ce: 4669 mov r1, sp
- 80293d0: f000 fb44 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(DO1_TOGGLED);
- log_event_data(LOG_DO1_STATE, str);
- }
- }
- OldRO0type_Sourse = CurrRO1type_Sourse;
- 80293d4: 4b07 ldr r3, [pc, #28] ; (80293f4 <UPS_CriticalAlarmMonitor+0x134>)
- 80293d6: 701d strb r5, [r3, #0]
- OldRO2type_Sourse = CurrRO2type_Sourse;
- 80293d8: 4b07 ldr r3, [pc, #28] ; (80293f8 <UPS_CriticalAlarmMonitor+0x138>)
- 80293da: 701f strb r7, [r3, #0]
- CriticalAlarmOldState = CriticalAlarmCurrent;
- 80293dc: 4b04 ldr r3, [pc, #16] ; (80293f0 <UPS_CriticalAlarmMonitor+0x130>)
- 80293de: 701c strb r4, [r3, #0]
- }
- 80293e0: b009 add sp, #36 ; 0x24
- 80293e2: bdf0 pop {r4, r5, r6, r7, pc}
- 80293e4: 2000cfc4 .word 0x2000cfc4
- 80293e8: 20000b5e .word 0x20000b5e
- 80293ec: 20000b5d .word 0x20000b5d
- 80293f0: 20000b5a .word 0x20000b5a
- 80293f4: 20000b66 .word 0x20000b66
- 80293f8: 20000b54 .word 0x20000b54
- 80293fc: 08039b37 .word 0x08039b37
- 8029400: 2000cba8 .word 0x2000cba8
- 8029404: 08039b48 .word 0x08039b48
- 08029408 <UPS_NonCriticalAlarmMonitor>:
- /**
- * @brief Мониторинг бита NonCriticalAlarm
- */
- void UPS_NonCriticalAlarmMonitor(void)
- {
- 8029408: b5f0 push {r4, r5, r6, r7, lr}
- 802940a: b089 sub sp, #36 ; 0x24
- static uint8_t OldRO0type_Sourse = 0;
- static uint8_t OldRO2type_Sourse = 0;
- uint8_t CurrRO2type_Sourse = 0;
- uint8_t CurrRO1type_Sourse = 0;
- char str[30];
- memset(str, 0, 30);
- 802940c: 2100 movs r1, #0
- 802940e: 221e movs r2, #30
- 8029410: 4668 mov r0, sp
- 8029412: f7f8 fb75 bl 8021b00 <memset>
- CurrRO1type_Sourse = sSettings.sInOuts.ro_type_source[0];
- CurrRO2type_Sourse = sSettings.sInOuts.ro_type_source[1];
- NonCriticalAlarmCurrent = flNonCriticalAlarm;
- if (!isValueRecv) {
- 8029416: 4f3d ldr r7, [pc, #244] ; (802950c <UPS_NonCriticalAlarmMonitor+0x104>)
- uint8_t CurrRO2type_Sourse = 0;
- uint8_t CurrRO1type_Sourse = 0;
- char str[30];
- memset(str, 0, 30);
- CurrRO1type_Sourse = sSettings.sInOuts.ro_type_source[0];
- 8029418: 4b3d ldr r3, [pc, #244] ; (8029510 <UPS_NonCriticalAlarmMonitor+0x108>)
- CurrRO2type_Sourse = sSettings.sInOuts.ro_type_source[1];
- NonCriticalAlarmCurrent = flNonCriticalAlarm;
- if (!isValueRecv) {
- 802941a: 7839 ldrb r1, [r7, #0]
- uint8_t CurrRO2type_Sourse = 0;
- uint8_t CurrRO1type_Sourse = 0;
- char str[30];
- memset(str, 0, 30);
- CurrRO1type_Sourse = sSettings.sInOuts.ro_type_source[0];
- 802941c: f893 5374 ldrb.w r5, [r3, #884] ; 0x374
- CurrRO2type_Sourse = sSettings.sInOuts.ro_type_source[1];
- 8029420: f893 6375 ldrb.w r6, [r3, #885] ; 0x375
- NonCriticalAlarmCurrent = flNonCriticalAlarm;
- 8029424: 4b3b ldr r3, [pc, #236] ; (8029514 <UPS_NonCriticalAlarmMonitor+0x10c>)
- 8029426: 4a3c ldr r2, [pc, #240] ; (8029518 <UPS_NonCriticalAlarmMonitor+0x110>)
- 8029428: 781c ldrb r4, [r3, #0]
- 802942a: 4b3c ldr r3, [pc, #240] ; (802951c <UPS_NonCriticalAlarmMonitor+0x114>)
- if (!isValueRecv) {
- 802942c: bb19 cbnz r1, 8029476 <UPS_NonCriticalAlarmMonitor+0x6e>
- isValueRecv = true;
- NonCriticalAlarmOldState = NonCriticalAlarmCurrent;
- OldRO0type_Sourse = CurrRO1type_Sourse;
- 802942e: 701d strb r5, [r3, #0]
- OldRO2type_Sourse = CurrRO2type_Sourse;
- 8029430: 4b3b ldr r3, [pc, #236] ; (8029520 <UPS_NonCriticalAlarmMonitor+0x118>)
- CurrRO2type_Sourse = sSettings.sInOuts.ro_type_source[1];
- NonCriticalAlarmCurrent = flNonCriticalAlarm;
- if (!isValueRecv) {
- isValueRecv = true;
- NonCriticalAlarmOldState = NonCriticalAlarmCurrent;
- 8029432: 7014 strb r4, [r2, #0]
- CurrRO1type_Sourse = sSettings.sInOuts.ro_type_source[0];
- CurrRO2type_Sourse = sSettings.sInOuts.ro_type_source[1];
- NonCriticalAlarmCurrent = flNonCriticalAlarm;
- if (!isValueRecv) {
- isValueRecv = true;
- 8029434: 2001 movs r0, #1
- NonCriticalAlarmOldState = NonCriticalAlarmCurrent;
- OldRO0type_Sourse = CurrRO1type_Sourse;
- OldRO2type_Sourse = CurrRO2type_Sourse;
- if(OldRO0type_Sourse == NON_CRITICAL){
- 8029436: 2d02 cmp r5, #2
- CurrRO1type_Sourse = sSettings.sInOuts.ro_type_source[0];
- CurrRO2type_Sourse = sSettings.sInOuts.ro_type_source[1];
- NonCriticalAlarmCurrent = flNonCriticalAlarm;
- if (!isValueRecv) {
- isValueRecv = true;
- 8029438: 7038 strb r0, [r7, #0]
- NonCriticalAlarmOldState = NonCriticalAlarmCurrent;
- OldRO0type_Sourse = CurrRO1type_Sourse;
- OldRO2type_Sourse = CurrRO2type_Sourse;
- 802943a: 701e strb r6, [r3, #0]
- if(OldRO0type_Sourse == NON_CRITICAL){
- 802943c: d109 bne.n 8029452 <UPS_NonCriticalAlarmMonitor+0x4a>
- if(NonCriticalAlarmCurrent){
- 802943e: b144 cbz r4, 8029452 <UPS_NonCriticalAlarmMonitor+0x4a>
- SetROInt(1, 0);
- 8029440: f7ff f877 bl 8028532 <SetROInt>
- SNMP_SendUserTrap(DO0_TOGGLED);
- 8029444: 2007 movs r0, #7
- 8029446: f00e fe79 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_DO0_STATE, "Замкнуто");
- 802944a: 2009 movs r0, #9
- 802944c: 4935 ldr r1, [pc, #212] ; (8029524 <UPS_NonCriticalAlarmMonitor+0x11c>)
- 802944e: f000 fb05 bl 8029a5c <log_event_data>
- }
- }
- if(OldRO2type_Sourse == NON_CRITICAL){
- 8029452: 4b33 ldr r3, [pc, #204] ; (8029520 <UPS_NonCriticalAlarmMonitor+0x118>)
- 8029454: 781b ldrb r3, [r3, #0]
- 8029456: 2b02 cmp r3, #2
- 8029458: d155 bne.n 8029506 <UPS_NonCriticalAlarmMonitor+0xfe>
- if(NonCriticalAlarmCurrent){
- 802945a: 2c00 cmp r4, #0
- 802945c: d053 beq.n 8029506 <UPS_NonCriticalAlarmMonitor+0xfe>
- SetROInt(1, 1);
- 802945e: 2001 movs r0, #1
- 8029460: 4601 mov r1, r0
- 8029462: f7ff f866 bl 8028532 <SetROInt>
- SNMP_SendUserTrap(DO1_TOGGLED);
- 8029466: 2008 movs r0, #8
- 8029468: f00e fe68 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_DO1_STATE, "Замкнуто");
- 802946c: 200a movs r0, #10
- 802946e: 492d ldr r1, [pc, #180] ; (8029524 <UPS_NonCriticalAlarmMonitor+0x11c>)
- 8029470: f000 faf4 bl 8029a5c <log_event_data>
- 8029474: e047 b.n 8029506 <UPS_NonCriticalAlarmMonitor+0xfe>
- }
- return;
- }
- // Значение параметра изменилось
- if (NonCriticalAlarmCurrent != NonCriticalAlarmOldState)
- 8029476: 7812 ldrb r2, [r2, #0]
- 8029478: 42a2 cmp r2, r4
- 802947a: d03e beq.n 80294fa <UPS_NonCriticalAlarmMonitor+0xf2>
- {
- if(OldRO0type_Sourse == NON_CRITICAL){
- 802947c: 781b ldrb r3, [r3, #0]
- 802947e: 2b02 cmp r3, #2
- 8029480: d11b bne.n 80294ba <UPS_NonCriticalAlarmMonitor+0xb2>
- memset(str, 0, 30);
- 8029482: 4668 mov r0, sp
- 8029484: 2100 movs r1, #0
- 8029486: 221e movs r2, #30
- 8029488: f7f8 fb3a bl 8021b00 <memset>
- if(NonCriticalAlarmCurrent){
- 802948c: b134 cbz r4, 802949c <UPS_NonCriticalAlarmMonitor+0x94>
- SetROInt(1, 0);
- 802948e: 2001 movs r0, #1
- 8029490: 2100 movs r1, #0
- 8029492: f7ff f84e bl 8028532 <SetROInt>
- strcat(str, "Замкнуто");
- 8029496: 4668 mov r0, sp
- 8029498: 4922 ldr r1, [pc, #136] ; (8029524 <UPS_NonCriticalAlarmMonitor+0x11c>)
- 802949a: e005 b.n 80294a8 <UPS_NonCriticalAlarmMonitor+0xa0>
- }
- else{
- SetROInt(0, 0);
- 802949c: 4620 mov r0, r4
- 802949e: 4621 mov r1, r4
- 80294a0: f7ff f847 bl 8028532 <SetROInt>
- strcat(str, "Разомкнуто");
- 80294a4: 4920 ldr r1, [pc, #128] ; (8029528 <UPS_NonCriticalAlarmMonitor+0x120>)
- 80294a6: 4668 mov r0, sp
- 80294a8: f7f8 fb90 bl 8021bcc <strcat>
- }
- SNMP_SendUserTrap(DO0_TOGGLED);
- 80294ac: 2007 movs r0, #7
- 80294ae: f00e fe45 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_DO0_STATE, str);
- 80294b2: 2009 movs r0, #9
- 80294b4: 4669 mov r1, sp
- 80294b6: f000 fad1 bl 8029a5c <log_event_data>
- }
- if(OldRO2type_Sourse == NON_CRITICAL){
- 80294ba: 4b19 ldr r3, [pc, #100] ; (8029520 <UPS_NonCriticalAlarmMonitor+0x118>)
- 80294bc: 781b ldrb r3, [r3, #0]
- 80294be: 2b02 cmp r3, #2
- 80294c0: d11b bne.n 80294fa <UPS_NonCriticalAlarmMonitor+0xf2>
- memset(str, 0, 30);
- 80294c2: 4668 mov r0, sp
- 80294c4: 2100 movs r1, #0
- 80294c6: 221e movs r2, #30
- 80294c8: f7f8 fb1a bl 8021b00 <memset>
- if(NonCriticalAlarmCurrent){
- 80294cc: b134 cbz r4, 80294dc <UPS_NonCriticalAlarmMonitor+0xd4>
- SetROInt(1, 1);
- 80294ce: 2001 movs r0, #1
- 80294d0: 4601 mov r1, r0
- 80294d2: f7ff f82e bl 8028532 <SetROInt>
- strcat(str, "Разомкнуто");
- 80294d6: 4668 mov r0, sp
- 80294d8: 4913 ldr r1, [pc, #76] ; (8029528 <UPS_NonCriticalAlarmMonitor+0x120>)
- 80294da: e005 b.n 80294e8 <UPS_NonCriticalAlarmMonitor+0xe0>
- }
- else{
- SetROInt(0, 1);
- 80294dc: 4620 mov r0, r4
- 80294de: 2101 movs r1, #1
- 80294e0: f7ff f827 bl 8028532 <SetROInt>
- strcat(str, "Замкнуто");
- 80294e4: 490f ldr r1, [pc, #60] ; (8029524 <UPS_NonCriticalAlarmMonitor+0x11c>)
- 80294e6: 4668 mov r0, sp
- 80294e8: f7f8 fb70 bl 8021bcc <strcat>
- }
- SNMP_SendUserTrap(DO1_TOGGLED);
- 80294ec: 2008 movs r0, #8
- 80294ee: f00e fe25 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_DO1_STATE, str);
- 80294f2: 200a movs r0, #10
- 80294f4: 4669 mov r1, sp
- 80294f6: f000 fab1 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(DO1_TOGGLED);
- log_event_data(LOG_DO1_STATE, str);
- }
- }
- OldRO0type_Sourse = CurrRO1type_Sourse;
- 80294fa: 4b08 ldr r3, [pc, #32] ; (802951c <UPS_NonCriticalAlarmMonitor+0x114>)
- 80294fc: 701d strb r5, [r3, #0]
- OldRO2type_Sourse = CurrRO2type_Sourse;
- 80294fe: 4b08 ldr r3, [pc, #32] ; (8029520 <UPS_NonCriticalAlarmMonitor+0x118>)
- 8029500: 701e strb r6, [r3, #0]
- NonCriticalAlarmOldState = NonCriticalAlarmCurrent;
- 8029502: 4b05 ldr r3, [pc, #20] ; (8029518 <UPS_NonCriticalAlarmMonitor+0x110>)
- 8029504: 701c strb r4, [r3, #0]
- }
- 8029506: b009 add sp, #36 ; 0x24
- 8029508: bdf0 pop {r4, r5, r6, r7, pc}
- 802950a: bf00 nop
- 802950c: 20000b62 .word 0x20000b62
- 8029510: 2000cfc4 .word 0x2000cfc4
- 8029514: 20000b64 .word 0x20000b64
- 8029518: 20000b5c .word 0x20000b5c
- 802951c: 20000b56 .word 0x20000b56
- 8029520: 20000b59 .word 0x20000b59
- 8029524: 08039b37 .word 0x08039b37
- 8029528: 08039b48 .word 0x08039b48
- 0802952c <UPS_LineFailMonitor>:
- /**
- * @brief Мониторинг бита LainFail
- */
- void UPS_LineFailMonitor(void)
- {
- 802952c: b538 push {r3, r4, r5, lr}
- static bool isValueRecv = false;
- static uint8_t lineFailOldState = 0;
- uint8_t lineFailCurrent;
-
- lineFailCurrent = (UPS.Status >> 7) & 0x01;
- 802952e: 4b15 ldr r3, [pc, #84] ; (8029584 <UPS_LineFailMonitor+0x58>)
- 8029530: 4d15 ldr r5, [pc, #84] ; (8029588 <UPS_LineFailMonitor+0x5c>)
- 8029532: 7cdc ldrb r4, [r3, #19]
-
- if (!isValueRecv) {
- 8029534: 4b15 ldr r3, [pc, #84] ; (802958c <UPS_LineFailMonitor+0x60>)
- 8029536: 781a ldrb r2, [r3, #0]
- {
- static bool isValueRecv = false;
- static uint8_t lineFailOldState = 0;
- uint8_t lineFailCurrent;
-
- lineFailCurrent = (UPS.Status >> 7) & 0x01;
- 8029538: 09e4 lsrs r4, r4, #7
-
- if (!isValueRecv) {
- 802953a: b962 cbnz r2, 8029556 <UPS_LineFailMonitor+0x2a>
- isValueRecv = true;
- 802953c: 2201 movs r2, #1
- 802953e: 701a strb r2, [r3, #0]
- lineFailOldState = lineFailCurrent;
- 8029540: 702c strb r4, [r5, #0]
- if (lineFailCurrent){
- 8029542: b1ec cbz r4, 8029580 <UPS_LineFailMonitor+0x54>
- log_event_data(LOG_ALARM_LINE, "Авария");
- 8029544: 200c movs r0, #12
- 8029546: 4912 ldr r1, [pc, #72] ; (8029590 <UPS_LineFailMonitor+0x64>)
- 8029548: f000 fa88 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(LINE_ALARM);
- 802954c: 200b movs r0, #11
- SNMP_SendUserTrap(LINE_NORM);
- }
- }
-
- lineFailOldState = lineFailCurrent;
- }
- 802954e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- if (!isValueRecv) {
- isValueRecv = true;
- lineFailOldState = lineFailCurrent;
- if (lineFailCurrent){
- log_event_data(LOG_ALARM_LINE, "Авария");
- SNMP_SendUserTrap(LINE_ALARM);
- 8029552: f00e bdf3 b.w 803813c <SNMP_SendUserTrap>
- }
- return;
- }
- if (lineFailCurrent)
- 8029556: b114 cbz r4, 802955e <UPS_LineFailMonitor+0x32>
- flCriticalAlarm = true;
- 8029558: 4b0e ldr r3, [pc, #56] ; (8029594 <UPS_LineFailMonitor+0x68>)
- 802955a: 2201 movs r2, #1
- 802955c: 701a strb r2, [r3, #0]
-
- // Значение параметра изменилось
- if (lineFailCurrent != lineFailOldState)
- 802955e: 782b ldrb r3, [r5, #0]
- 8029560: 42a3 cmp r3, r4
- 8029562: d00c beq.n 802957e <UPS_LineFailMonitor+0x52>
- {
- if (lineFailCurrent){
- log_event_data(LOG_ALARM_LINE, "Авария");
- 8029564: 200c movs r0, #12
- flCriticalAlarm = true;
-
- // Значение параметра изменилось
- if (lineFailCurrent != lineFailOldState)
- {
- if (lineFailCurrent){
- 8029566: b124 cbz r4, 8029572 <UPS_LineFailMonitor+0x46>
- log_event_data(LOG_ALARM_LINE, "Авария");
- 8029568: 4909 ldr r1, [pc, #36] ; (8029590 <UPS_LineFailMonitor+0x64>)
- 802956a: f000 fa77 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(LINE_ALARM);
- 802956e: 200b movs r0, #11
- 8029570: e003 b.n 802957a <UPS_LineFailMonitor+0x4e>
- }
- else{
- log_event_data(LOG_ALARM_LINE, "Норма");
- 8029572: 4909 ldr r1, [pc, #36] ; (8029598 <UPS_LineFailMonitor+0x6c>)
- 8029574: f000 fa72 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(LINE_NORM);
- 8029578: 200c movs r0, #12
- 802957a: f00e fddf bl 803813c <SNMP_SendUserTrap>
- }
- }
-
- lineFailOldState = lineFailCurrent;
- 802957e: 702c strb r4, [r5, #0]
- 8029580: bd38 pop {r3, r4, r5, pc}
- 8029582: bf00 nop
- 8029584: 2000cba8 .word 0x2000cba8
- 8029588: 20000b67 .word 0x20000b67
- 802958c: 20000b61 .word 0x20000b61
- 8029590: 08039b1f .word 0x08039b1f
- 8029594: 20000b5e .word 0x20000b5e
- 8029598: 08039b2c .word 0x08039b2c
- 0802959c <UPS_LowBatMonitor>:
- /**
- * @brief Мониторинг бита LowBat
- */
- void UPS_LowBatMonitor(void)
- {
- 802959c: b538 push {r3, r4, r5, lr}
- static bool isValueRecv = false;
- static uint8_t lowBatOldState = 0;
- uint8_t lowBatCurrent;
- if((UPS.Status >> 7) & 0x01)
- 802959e: 4b17 ldr r3, [pc, #92] ; (80295fc <UPS_LowBatMonitor+0x60>)
- 80295a0: 4d17 ldr r5, [pc, #92] ; (8029600 <UPS_LowBatMonitor+0x64>)
- 80295a2: 7cdb ldrb r3, [r3, #19]
- 80295a4: 09dc lsrs r4, r3, #7
- lowBatCurrent = (UPS.Status >> 6) & 0x01;
- 80295a6: bf18 it ne
- 80295a8: f3c3 1480 ubfxne r4, r3, #6, #1
- else
- lowBatCurrent = 0;
-
- if (!isValueRecv) {
- 80295ac: 4b15 ldr r3, [pc, #84] ; (8029604 <UPS_LowBatMonitor+0x68>)
- 80295ae: 781a ldrb r2, [r3, #0]
- 80295b0: b962 cbnz r2, 80295cc <UPS_LowBatMonitor+0x30>
- isValueRecv = true;
- 80295b2: 2201 movs r2, #1
- 80295b4: 701a strb r2, [r3, #0]
- lowBatOldState = lowBatCurrent;
- 80295b6: 702c strb r4, [r5, #0]
- if (lowBatCurrent){
- 80295b8: b1f4 cbz r4, 80295f8 <UPS_LowBatMonitor+0x5c>
- log_event_data(LOG_ALARM_LOW_BAT, "Авария");
- 80295ba: 200d movs r0, #13
- 80295bc: 4912 ldr r1, [pc, #72] ; (8029608 <UPS_LowBatMonitor+0x6c>)
- 80295be: f000 fa4d bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(LOW_BAT_ALARM);
- 80295c2: 200d movs r0, #13
- log_event_data(LOG_ALARM_LOW_BAT, "Норма");
- }
- }
-
- lowBatOldState = lowBatCurrent;
- }
- 80295c4: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- if (!isValueRecv) {
- isValueRecv = true;
- lowBatOldState = lowBatCurrent;
- if (lowBatCurrent){
- log_event_data(LOG_ALARM_LOW_BAT, "Авария");
- SNMP_SendUserTrap(LOW_BAT_ALARM);
- 80295c8: f00e bdb8 b.w 803813c <SNMP_SendUserTrap>
- }
- return;
- }
- if (lowBatCurrent)
- 80295cc: b114 cbz r4, 80295d4 <UPS_LowBatMonitor+0x38>
- flNonCriticalAlarm = true;
- 80295ce: 4b0f ldr r3, [pc, #60] ; (802960c <UPS_LowBatMonitor+0x70>)
- 80295d0: 2201 movs r2, #1
- 80295d2: 701a strb r2, [r3, #0]
- // Значение параметра изменилось
- if (lowBatCurrent != lowBatOldState)
- 80295d4: 782b ldrb r3, [r5, #0]
- 80295d6: 42a3 cmp r3, r4
- 80295d8: d00d beq.n 80295f6 <UPS_LowBatMonitor+0x5a>
- {
- if (lowBatCurrent){
- 80295da: b12c cbz r4, 80295e8 <UPS_LowBatMonitor+0x4c>
- SNMP_SendUserTrap(LOW_BAT_ALARM);
- 80295dc: 200d movs r0, #13
- 80295de: f00e fdad bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_ALARM_LOW_BAT, "Авария");
- 80295e2: 200d movs r0, #13
- 80295e4: 4908 ldr r1, [pc, #32] ; (8029608 <UPS_LowBatMonitor+0x6c>)
- 80295e6: e004 b.n 80295f2 <UPS_LowBatMonitor+0x56>
- }
- else{
- SNMP_SendUserTrap(LOW_BAT_NORM);
- 80295e8: 200e movs r0, #14
- 80295ea: f00e fda7 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_ALARM_LOW_BAT, "Норма");
- 80295ee: 4908 ldr r1, [pc, #32] ; (8029610 <UPS_LowBatMonitor+0x74>)
- 80295f0: 200d movs r0, #13
- 80295f2: f000 fa33 bl 8029a5c <log_event_data>
- }
- }
-
- lowBatOldState = lowBatCurrent;
- 80295f6: 702c strb r4, [r5, #0]
- 80295f8: bd38 pop {r3, r4, r5, pc}
- 80295fa: bf00 nop
- 80295fc: 2000cba8 .word 0x2000cba8
- 8029600: 20000b60 .word 0x20000b60
- 8029604: 20000b65 .word 0x20000b65
- 8029608: 08039b1f .word 0x08039b1f
- 802960c: 20000b64 .word 0x20000b64
- 8029610: 08039b2c .word 0x08039b2c
- 08029614 <UPS_PowerMonitor>:
- /**
- * @brief Мониторинг нагрузки
- */
- void UPS_PowerMonitor(void)
- {
- 8029614: b538 push {r3, r4, r5, lr}
- float load;
- static uint8_t stateCurrent = HYST_IDLE;
-
- load = UPS.Load;
- 8029616: 4c20 ldr r4, [pc, #128] ; (8029698 <UPS_PowerMonitor+0x84>)
- 8029618: 7c20 ldrb r0, [r4, #16]
- 802961a: f7f7 fbb9 bl 8020d90 <__aeabi_ui2f>
- /* Отслеживается переход через верхнюю границу */
- if (load > UPS_LOAD)
- 802961e: 491f ldr r1, [pc, #124] ; (802969c <UPS_PowerMonitor+0x88>)
- void UPS_PowerMonitor(void)
- {
- float load;
- static uint8_t stateCurrent = HYST_IDLE;
-
- load = UPS.Load;
- 8029620: 4605 mov r5, r0
- /* Отслеживается переход через верхнюю границу */
- if (load > UPS_LOAD)
- 8029622: f7f7 fc79 bl 8020f18 <__aeabi_fcmpgt>
- 8029626: b1c0 cbz r0, 802965a <UPS_PowerMonitor+0x46>
- {
- flCriticalAlarm = true;
- 8029628: 4b1d ldr r3, [pc, #116] ; (80296a0 <UPS_PowerMonitor+0x8c>)
- 802962a: 2501 movs r5, #1
- 802962c: 701d strb r5, [r3, #0]
- UPS.Alarm = (UPS.Alarm & 0x0e) | (1 << 0);
- 802962e: 7d23 ldrb r3, [r4, #20]
- 8029630: f003 030e and.w r3, r3, #14
- 8029634: 432b orrs r3, r5
- 8029636: 7523 strb r3, [r4, #20]
- if (stateCurrent == HYST_IDLE)
- 8029638: 4c1a ldr r4, [pc, #104] ; (80296a4 <UPS_PowerMonitor+0x90>)
- 802963a: 7823 ldrb r3, [r4, #0]
- 802963c: 2b00 cmp r3, #0
- 802963e: d12a bne.n 8029696 <UPS_PowerMonitor+0x82>
- {
- LED_On(LED_MINOR_R);
- 8029640: 200d movs r0, #13
- 8029642: f7ff f9f5 bl 8028a30 <LED_On>
- LED_On(LED_MINOR_G);
- 8029646: 200c movs r0, #12
- 8029648: f7ff f9f2 bl 8028a30 <LED_On>
- stateCurrent = HYST_UP;
-
- log_event_data(LOG_ALARM_POWER, "Авария");
- 802964c: 200e movs r0, #14
- 802964e: 4916 ldr r1, [pc, #88] ; (80296a8 <UPS_PowerMonitor+0x94>)
- UPS.Alarm = (UPS.Alarm & 0x0e) | (1 << 0);
- if (stateCurrent == HYST_IDLE)
- {
- LED_On(LED_MINOR_R);
- LED_On(LED_MINOR_G);
- stateCurrent = HYST_UP;
- 8029650: 7025 strb r5, [r4, #0]
-
- log_event_data(LOG_ALARM_POWER, "Авария");
- 8029652: f000 fa03 bl 8029a5c <log_event_data>
- // Отправка трапа о завышении
- SNMP_SendUserTrap(POWER_ALARM);
- 8029656: 200f movs r0, #15
- 8029658: e019 b.n 802968e <UPS_PowerMonitor+0x7a>
- }
- }
- /* Отслеживается нормализация */
- else if (load < (UPS_LOAD - UPS_LOAD_HIST))
- 802965a: 4628 mov r0, r5
- 802965c: 4913 ldr r1, [pc, #76] ; (80296ac <UPS_PowerMonitor+0x98>)
- 802965e: f7f7 fc3d bl 8020edc <__aeabi_fcmplt>
- 8029662: b1c0 cbz r0, 8029696 <UPS_PowerMonitor+0x82>
- {
- UPS.Alarm = (UPS.Alarm & 0x0e);
- 8029664: 7d23 ldrb r3, [r4, #20]
- 8029666: f003 030e and.w r3, r3, #14
- 802966a: 7523 strb r3, [r4, #20]
- if (stateCurrent == HYST_UP)
- 802966c: 4c0d ldr r4, [pc, #52] ; (80296a4 <UPS_PowerMonitor+0x90>)
- 802966e: 7823 ldrb r3, [r4, #0]
- 8029670: 2b01 cmp r3, #1
- 8029672: d110 bne.n 8029696 <UPS_PowerMonitor+0x82>
- {
- LED_Off(LED_MINOR_R);
- 8029674: 200d movs r0, #13
- 8029676: f7ff f9de bl 8028a36 <LED_Off>
- LED_Off(LED_MINOR_G);
- 802967a: 200c movs r0, #12
- 802967c: f7ff f9db bl 8028a36 <LED_Off>
- stateCurrent = HYST_IDLE;
- 8029680: 2300 movs r3, #0
-
- log_event_data(LOG_ALARM_POWER, "Норма");
- 8029682: 200e movs r0, #14
- 8029684: 490a ldr r1, [pc, #40] ; (80296b0 <UPS_PowerMonitor+0x9c>)
- UPS.Alarm = (UPS.Alarm & 0x0e);
- if (stateCurrent == HYST_UP)
- {
- LED_Off(LED_MINOR_R);
- LED_Off(LED_MINOR_G);
- stateCurrent = HYST_IDLE;
- 8029686: 7023 strb r3, [r4, #0]
-
- log_event_data(LOG_ALARM_POWER, "Норма");
- 8029688: f000 f9e8 bl 8029a5c <log_event_data>
- // Отправка трапа о нормализации
- SNMP_SendUserTrap(POWER_NORM);
- 802968c: 2010 movs r0, #16
- }
- }
- }
- 802968e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- LED_Off(LED_MINOR_G);
- stateCurrent = HYST_IDLE;
-
- log_event_data(LOG_ALARM_POWER, "Норма");
- // Отправка трапа о нормализации
- SNMP_SendUserTrap(POWER_NORM);
- 8029692: f00e bd53 b.w 803813c <SNMP_SendUserTrap>
- 8029696: bd38 pop {r3, r4, r5, pc}
- 8029698: 2000cba8 .word 0x2000cba8
- 802969c: 428c0000 .word 0x428c0000
- 80296a0: 20000b5e .word 0x20000b5e
- 80296a4: 20000b53 .word 0x20000b53
- 80296a8: 08039b1f .word 0x08039b1f
- 80296ac: 428a0000 .word 0x428a0000
- 80296b0: 08039b2c .word 0x08039b2c
- 080296b4 <UPS_TemperatureMonitor>:
- /**
- * @brief Мониторинг температуры
- */
- void UPS_TemperatureMonitor(void)
- {
- 80296b4: b538 push {r3, r4, r5, lr}
- float temperature;
- static uint8_t stateCurrent = HYST_IDLE;
-
- temperature = UPS.Temp;
- 80296b6: 4c19 ldr r4, [pc, #100] ; (802971c <UPS_TemperatureMonitor+0x68>)
- /* Отслеживается переход через верхнюю границу */
- if (temperature > UPS_TEMPERATURE)
- 80296b8: 4919 ldr r1, [pc, #100] ; (8029720 <UPS_TemperatureMonitor+0x6c>)
- void UPS_TemperatureMonitor(void)
- {
- float temperature;
- static uint8_t stateCurrent = HYST_IDLE;
-
- temperature = UPS.Temp;
- 80296ba: 68e5 ldr r5, [r4, #12]
- /* Отслеживается переход через верхнюю границу */
- if (temperature > UPS_TEMPERATURE)
- 80296bc: 4628 mov r0, r5
- 80296be: f7f7 fc2b bl 8020f18 <__aeabi_fcmpgt>
- 80296c2: b190 cbz r0, 80296ea <UPS_TemperatureMonitor+0x36>
- {
- flCriticalAlarm = true;
- 80296c4: 4b17 ldr r3, [pc, #92] ; (8029724 <UPS_TemperatureMonitor+0x70>)
- 80296c6: 2201 movs r2, #1
- 80296c8: 701a strb r2, [r3, #0]
- UPS.Alarm = (UPS.Alarm & 0x0d) | (1 << 1);
- 80296ca: 7d23 ldrb r3, [r4, #20]
- 80296cc: f003 030d and.w r3, r3, #13
- 80296d0: f043 0302 orr.w r3, r3, #2
- 80296d4: 7523 strb r3, [r4, #20]
- if (stateCurrent == HYST_IDLE)
- 80296d6: 4b14 ldr r3, [pc, #80] ; (8029728 <UPS_TemperatureMonitor+0x74>)
- 80296d8: 7819 ldrb r1, [r3, #0]
- 80296da: b9f1 cbnz r1, 802971a <UPS_TemperatureMonitor+0x66>
- {
- stateCurrent = HYST_UP;
-
- log_event_data(LOG_ALARM_TEMP, "Авария");
- 80296dc: 200b movs r0, #11
- 80296de: 4913 ldr r1, [pc, #76] ; (802972c <UPS_TemperatureMonitor+0x78>)
- {
- flCriticalAlarm = true;
- UPS.Alarm = (UPS.Alarm & 0x0d) | (1 << 1);
- if (stateCurrent == HYST_IDLE)
- {
- stateCurrent = HYST_UP;
- 80296e0: 701a strb r2, [r3, #0]
-
- log_event_data(LOG_ALARM_TEMP, "Авария");
- 80296e2: f000 f9bb bl 8029a5c <log_event_data>
- // Отправка трапа о завышении
- SNMP_SendUserTrap(BATTERY_TEMPERATURE_ALARM);
- 80296e6: 200a movs r0, #10
- 80296e8: e013 b.n 8029712 <UPS_TemperatureMonitor+0x5e>
- }
- }
- /* Отслеживается нормализация */
- else if (temperature < (UPS_TEMPERATURE - UPS_TEMPERATURE_HIST))
- 80296ea: 4628 mov r0, r5
- 80296ec: 4910 ldr r1, [pc, #64] ; (8029730 <UPS_TemperatureMonitor+0x7c>)
- 80296ee: f7f7 fbf5 bl 8020edc <__aeabi_fcmplt>
- 80296f2: b190 cbz r0, 802971a <UPS_TemperatureMonitor+0x66>
- {
- UPS.Alarm = (UPS.Alarm & 0x0d);
- 80296f4: 7d23 ldrb r3, [r4, #20]
- 80296f6: f003 030d and.w r3, r3, #13
- 80296fa: 7523 strb r3, [r4, #20]
- if (stateCurrent == HYST_UP)
- 80296fc: 4b0a ldr r3, [pc, #40] ; (8029728 <UPS_TemperatureMonitor+0x74>)
- 80296fe: 781a ldrb r2, [r3, #0]
- 8029700: 2a01 cmp r2, #1
- 8029702: d10a bne.n 802971a <UPS_TemperatureMonitor+0x66>
- {
- stateCurrent = HYST_IDLE;
- 8029704: 2200 movs r2, #0
-
- log_event_data(LOG_ALARM_TEMP, "Норма");
- 8029706: 200b movs r0, #11
- 8029708: 490a ldr r1, [pc, #40] ; (8029734 <UPS_TemperatureMonitor+0x80>)
- else if (temperature < (UPS_TEMPERATURE - UPS_TEMPERATURE_HIST))
- {
- UPS.Alarm = (UPS.Alarm & 0x0d);
- if (stateCurrent == HYST_UP)
- {
- stateCurrent = HYST_IDLE;
- 802970a: 701a strb r2, [r3, #0]
-
- log_event_data(LOG_ALARM_TEMP, "Норма");
- 802970c: f000 f9a6 bl 8029a5c <log_event_data>
- // Отправка трапа о нормализации
- SNMP_SendUserTrap(BATTERY_TEMPERATURE_NORM);
- 8029710: 2009 movs r0, #9
- }
- }
- }
- 8029712: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- {
- stateCurrent = HYST_IDLE;
-
- log_event_data(LOG_ALARM_TEMP, "Норма");
- // Отправка трапа о нормализации
- SNMP_SendUserTrap(BATTERY_TEMPERATURE_NORM);
- 8029716: f00e bd11 b.w 803813c <SNMP_SendUserTrap>
- 802971a: bd38 pop {r3, r4, r5, pc}
- 802971c: 2000cba8 .word 0x2000cba8
- 8029720: 42200000 .word 0x42200000
- 8029724: 20000b5e .word 0x20000b5e
- 8029728: 20000b5b .word 0x20000b5b
- 802972c: 08039b1f .word 0x08039b1f
- 8029730: 421c0000 .word 0x421c0000
- 8029734: 08039b2c .word 0x08039b2c
- 08029738 <UPS_ConnectMonitor>:
- /**
- * @brief Мониторинг параметра upsParams.connect
- */
- void UPS_ConnectMonitor(void)
- {
- 8029738: b538 push {r3, r4, r5, lr}
- static bool isValueRecv = false;
- static uint8_t connectOldState = 0;
- uint8_t connectCurrent;
-
- connectCurrent = UPS.Present;
- 802973a: 4b19 ldr r3, [pc, #100] ; (80297a0 <UPS_ConnectMonitor+0x68>)
- 802973c: 4d19 ldr r5, [pc, #100] ; (80297a4 <UPS_ConnectMonitor+0x6c>)
-
- UPS.Alarm = (UPS.Alarm & 0x0b) | ((connectCurrent^1) << 2);
- 802973e: 7d1a ldrb r2, [r3, #20]
- {
- static bool isValueRecv = false;
- static uint8_t connectOldState = 0;
- uint8_t connectCurrent;
-
- connectCurrent = UPS.Present;
- 8029740: f893 402c ldrb.w r4, [r3, #44] ; 0x2c
-
- UPS.Alarm = (UPS.Alarm & 0x0b) | ((connectCurrent^1) << 2);
- 8029744: f002 020b and.w r2, r2, #11
- 8029748: f084 0101 eor.w r1, r4, #1
- 802974c: ea42 0281 orr.w r2, r2, r1, lsl #2
- 8029750: 751a strb r2, [r3, #20]
- if (!isValueRecv) {
- 8029752: 4b15 ldr r3, [pc, #84] ; (80297a8 <UPS_ConnectMonitor+0x70>)
- 8029754: 781a ldrb r2, [r3, #0]
- 8029756: b962 cbnz r2, 8029772 <UPS_ConnectMonitor+0x3a>
- isValueRecv = true;
- 8029758: 2201 movs r2, #1
- 802975a: 701a strb r2, [r3, #0]
- connectOldState = connectCurrent;
- 802975c: 702c strb r4, [r5, #0]
- if (!connectCurrent){
- 802975e: b9ec cbnz r4, 802979c <UPS_ConnectMonitor+0x64>
- log_event_data(LOG_ALARM_UPS, "Авария");
- 8029760: 200f movs r0, #15
- 8029762: 4912 ldr r1, [pc, #72] ; (80297ac <UPS_ConnectMonitor+0x74>)
- 8029764: f000 f97a bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(CONNECT_MONITOR_ALARM);
- 8029768: 2011 movs r0, #17
- SNMP_SendUserTrap(CONNECT_MONITOR_ALARM);
- }
- }
-
- connectOldState = connectCurrent;
- }
- 802976a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- if (!isValueRecv) {
- isValueRecv = true;
- connectOldState = connectCurrent;
- if (!connectCurrent){
- log_event_data(LOG_ALARM_UPS, "Авария");
- SNMP_SendUserTrap(CONNECT_MONITOR_ALARM);
- 802976e: f00e bce5 b.w 803813c <SNMP_SendUserTrap>
- }
- return;
- }
- if (!connectCurrent)
- 8029772: b914 cbnz r4, 802977a <UPS_ConnectMonitor+0x42>
- flCriticalAlarm = true;
- 8029774: 4b0e ldr r3, [pc, #56] ; (80297b0 <UPS_ConnectMonitor+0x78>)
- 8029776: 2201 movs r2, #1
- 8029778: 701a strb r2, [r3, #0]
- // Значение параметра изменилось
- if (connectCurrent != connectOldState)
- 802977a: 782b ldrb r3, [r5, #0]
- 802977c: 42a3 cmp r3, r4
- 802977e: d00c beq.n 802979a <UPS_ConnectMonitor+0x62>
- {
- if (connectCurrent){
- log_event_data(LOG_ALARM_UPS, "Норма");
- 8029780: 200f movs r0, #15
- if (!connectCurrent)
- flCriticalAlarm = true;
- // Значение параметра изменилось
- if (connectCurrent != connectOldState)
- {
- if (connectCurrent){
- 8029782: b124 cbz r4, 802978e <UPS_ConnectMonitor+0x56>
- log_event_data(LOG_ALARM_UPS, "Норма");
- 8029784: 490b ldr r1, [pc, #44] ; (80297b4 <UPS_ConnectMonitor+0x7c>)
- 8029786: f000 f969 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(CONNECT_MONITOR_NORM);
- 802978a: 2012 movs r0, #18
- 802978c: e003 b.n 8029796 <UPS_ConnectMonitor+0x5e>
- }
- else{
- log_event_data(LOG_ALARM_UPS, "Авария");
- 802978e: 4907 ldr r1, [pc, #28] ; (80297ac <UPS_ConnectMonitor+0x74>)
- 8029790: f000 f964 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(CONNECT_MONITOR_ALARM);
- 8029794: 2011 movs r0, #17
- 8029796: f00e fcd1 bl 803813c <SNMP_SendUserTrap>
- }
- }
-
- connectOldState = connectCurrent;
- 802979a: 702c strb r4, [r5, #0]
- 802979c: bd38 pop {r3, r4, r5, pc}
- 802979e: bf00 nop
- 80297a0: 2000cba8 .word 0x2000cba8
- 80297a4: 20000b58 .word 0x20000b58
- 80297a8: 20000b52 .word 0x20000b52
- 80297ac: 08039b1f .word 0x08039b1f
- 80297b0: 20000b5e .word 0x20000b5e
- 80297b4: 08039b2c .word 0x08039b2c
- 080297b8 <UPS_BatteryConnectMonitor>:
- /**
- * @brief Мониторинг параметра upsParams.connect
- */
- void UPS_BatteryConnectMonitor(void)
- {
- 80297b8: b538 push {r3, r4, r5, lr}
- static bool isValueRecv = false;
- static uint8_t AKBconnectOldState = 0;
- uint8_t AKBconnectCurrent;
- if(((UPS.Status >> 7) & 0x01) == 0)
- 80297ba: 4b1a ldr r3, [pc, #104] ; (8029824 <UPS_BatteryConnectMonitor+0x6c>)
- 80297bc: 4d1a ldr r5, [pc, #104] ; (8029828 <UPS_BatteryConnectMonitor+0x70>)
- 80297be: 7cdc ldrb r4, [r3, #19]
- 80297c0: 09e2 lsrs r2, r4, #7
- AKBconnectCurrent = (UPS.Status >> 6) & 0x01;
- else{
- AKBconnectCurrent = 0;
- }
- UPS.Alarm = (UPS.Alarm & 0x07) | (AKBconnectCurrent << 3);
- 80297c2: 7d1a ldrb r2, [r3, #20]
- static bool isValueRecv = false;
- static uint8_t AKBconnectOldState = 0;
- uint8_t AKBconnectCurrent;
- if(((UPS.Status >> 7) & 0x01) == 0)
- AKBconnectCurrent = (UPS.Status >> 6) & 0x01;
- 80297c4: bf08 it eq
- 80297c6: f3c4 1480 ubfxeq r4, r4, #6, #1
- else{
- AKBconnectCurrent = 0;
- }
- UPS.Alarm = (UPS.Alarm & 0x07) | (AKBconnectCurrent << 3);
- 80297ca: f002 0207 and.w r2, r2, #7
- uint8_t AKBconnectCurrent;
- if(((UPS.Status >> 7) & 0x01) == 0)
- AKBconnectCurrent = (UPS.Status >> 6) & 0x01;
- else{
- AKBconnectCurrent = 0;
- 80297ce: bf18 it ne
- 80297d0: 2400 movne r4, #0
- }
- UPS.Alarm = (UPS.Alarm & 0x07) | (AKBconnectCurrent << 3);
- 80297d2: ea42 02c4 orr.w r2, r2, r4, lsl #3
- 80297d6: 751a strb r2, [r3, #20]
- if (!isValueRecv) {
- 80297d8: 4b14 ldr r3, [pc, #80] ; (802982c <UPS_BatteryConnectMonitor+0x74>)
- 80297da: 781a ldrb r2, [r3, #0]
- 80297dc: b962 cbnz r2, 80297f8 <UPS_BatteryConnectMonitor+0x40>
- isValueRecv = true;
- 80297de: 2201 movs r2, #1
- 80297e0: 701a strb r2, [r3, #0]
- AKBconnectOldState = AKBconnectCurrent;
- 80297e2: 702c strb r4, [r5, #0]
- if (AKBconnectCurrent){
- 80297e4: b1ec cbz r4, 8029822 <UPS_BatteryConnectMonitor+0x6a>
- log_event_data(LOG_ALARM_AKB, "Авария");
- 80297e6: 2010 movs r0, #16
- 80297e8: 4911 ldr r1, [pc, #68] ; (8029830 <UPS_BatteryConnectMonitor+0x78>)
- 80297ea: f000 f937 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(BATTERY_CONNECT_ALARM);
- 80297ee: 2013 movs r0, #19
- SNMP_SendUserTrap(BATTERY_CONNECT_ALARM);
- }
- }
- AKBconnectOldState = AKBconnectCurrent;
- }
- 80297f0: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- if (!isValueRecv) {
- isValueRecv = true;
- AKBconnectOldState = AKBconnectCurrent;
- if (AKBconnectCurrent){
- log_event_data(LOG_ALARM_AKB, "Авария");
- SNMP_SendUserTrap(BATTERY_CONNECT_ALARM);
- 80297f4: f00e bca2 b.w 803813c <SNMP_SendUserTrap>
- }
- return;
- }
- if (AKBconnectCurrent)
- 80297f8: b114 cbz r4, 8029800 <UPS_BatteryConnectMonitor+0x48>
- flCriticalAlarm = true;
- 80297fa: 4b0e ldr r3, [pc, #56] ; (8029834 <UPS_BatteryConnectMonitor+0x7c>)
- 80297fc: 2201 movs r2, #1
- 80297fe: 701a strb r2, [r3, #0]
- // Значение параметра изменилось
- if (AKBconnectCurrent != AKBconnectOldState)
- 8029800: 782b ldrb r3, [r5, #0]
- 8029802: 42a3 cmp r3, r4
- 8029804: d00c beq.n 8029820 <UPS_BatteryConnectMonitor+0x68>
- {
- if (!AKBconnectCurrent){
- log_event_data(LOG_ALARM_AKB, "Норма");
- 8029806: 2010 movs r0, #16
- if (AKBconnectCurrent)
- flCriticalAlarm = true;
- // Значение параметра изменилось
- if (AKBconnectCurrent != AKBconnectOldState)
- {
- if (!AKBconnectCurrent){
- 8029808: b924 cbnz r4, 8029814 <UPS_BatteryConnectMonitor+0x5c>
- log_event_data(LOG_ALARM_AKB, "Норма");
- 802980a: 490b ldr r1, [pc, #44] ; (8029838 <UPS_BatteryConnectMonitor+0x80>)
- 802980c: f000 f926 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(BATTERY_CONNECT_NORM);
- 8029810: 2014 movs r0, #20
- 8029812: e003 b.n 802981c <UPS_BatteryConnectMonitor+0x64>
- }
- else{
- log_event_data(LOG_ALARM_AKB, "Авария");
- 8029814: 4906 ldr r1, [pc, #24] ; (8029830 <UPS_BatteryConnectMonitor+0x78>)
- 8029816: f000 f921 bl 8029a5c <log_event_data>
- SNMP_SendUserTrap(BATTERY_CONNECT_ALARM);
- 802981a: 2013 movs r0, #19
- 802981c: f00e fc8e bl 803813c <SNMP_SendUserTrap>
- }
- }
- AKBconnectOldState = AKBconnectCurrent;
- 8029820: 702c strb r4, [r5, #0]
- 8029822: bd38 pop {r3, r4, r5, pc}
- 8029824: 2000cba8 .word 0x2000cba8
- 8029828: 20000b63 .word 0x20000b63
- 802982c: 20000b5f .word 0x20000b5f
- 8029830: 08039b1f .word 0x08039b1f
- 8029834: 20000b5e .word 0x20000b5e
- 8029838: 08039b2c .word 0x08039b2c
- 0802983c <UPS_Monitor>:
- /**
- * @brief Задача мониторинга параметров UPS
- */
- void UPS_Monitor(void *params)
- {
- 802983c: b570 push {r4, r5, r6, lr}
- vTaskDelay(5000);
- 802983e: f241 3088 movw r0, #5000 ; 0x1388
- 8029842: f001 fbc3 bl 802afcc <vTaskDelay>
- for (;;)
- {
- flCriticalAlarm = false;
- 8029846: 4d10 ldr r5, [pc, #64] ; (8029888 <UPS_Monitor+0x4c>)
- flNonCriticalAlarm = false;
- 8029848: 4e10 ldr r6, [pc, #64] ; (802988c <UPS_Monitor+0x50>)
- void UPS_Monitor(void *params)
- {
- vTaskDelay(5000);
- for (;;)
- {
- flCriticalAlarm = false;
- 802984a: 2400 movs r4, #0
- flNonCriticalAlarm = false;
- // Проверяем флаг подключения UPS
- if (UPS.Present)
- 802984c: 4b10 ldr r3, [pc, #64] ; (8029890 <UPS_Monitor+0x54>)
- void UPS_Monitor(void *params)
- {
- vTaskDelay(5000);
- for (;;)
- {
- flCriticalAlarm = false;
- 802984e: 702c strb r4, [r5, #0]
- flNonCriticalAlarm = false;
- // Проверяем флаг подключения UPS
- if (UPS.Present)
- 8029850: f893 302c ldrb.w r3, [r3, #44] ; 0x2c
- {
- vTaskDelay(5000);
- for (;;)
- {
- flCriticalAlarm = false;
- flNonCriticalAlarm = false;
- 8029854: 7034 strb r4, [r6, #0]
- // Проверяем флаг подключения UPS
- if (UPS.Present)
- 8029856: b14b cbz r3, 802986c <UPS_Monitor+0x30>
- {
- UPS_LineFailMonitor();
- 8029858: f7ff fe68 bl 802952c <UPS_LineFailMonitor>
- UPS_LowBatMonitor();
- 802985c: f7ff fe9e bl 802959c <UPS_LowBatMonitor>
- UPS_PowerMonitor();
- 8029860: f7ff fed8 bl 8029614 <UPS_PowerMonitor>
- UPS_TemperatureMonitor();
- 8029864: f7ff ff26 bl 80296b4 <UPS_TemperatureMonitor>
- UPS_BatteryConnectMonitor();
- 8029868: f7ff ffa6 bl 80297b8 <UPS_BatteryConnectMonitor>
- }
- UPS_ConnectMonitor();
- 802986c: f7ff ff64 bl 8029738 <UPS_ConnectMonitor>
- UPS_DI0Monitor();
- 8029870: f7ff fce8 bl 8029244 <UPS_DI0Monitor>
- UPS_CriticalAlarmMonitor();
- 8029874: f7ff fd24 bl 80292c0 <UPS_CriticalAlarmMonitor>
- UPS_NonCriticalAlarmMonitor();
- 8029878: f7ff fdc6 bl 8029408 <UPS_NonCriticalAlarmMonitor>
-
- vTaskDelay(1000);
- 802987c: f44f 707a mov.w r0, #1000 ; 0x3e8
- 8029880: f001 fba4 bl 802afcc <vTaskDelay>
- }
- 8029884: e7e2 b.n 802984c <UPS_Monitor+0x10>
- 8029886: bf00 nop
- 8029888: 20000b5e .word 0x20000b5e
- 802988c: 20000b64 .word 0x20000b64
- 8029890: 2000cba8 .word 0x2000cba8
- 08029894 <op_read>:
- }
- static ssize_t op_read(struct ringfs_flash_partition *flash, int address, void *data, size_t size) {
- (void)flash;
- int ret;
- ret = spi_flash_read(address, data, size, 0);
- 8029894: 4608 mov r0, r1
- 8029896: 4611 mov r1, r2
- 8029898: 461a mov r2, r3
- 802989a: 2300 movs r3, #0
- 802989c: f7fd b82c b.w 80268f8 <spi_flash_read>
- 080298a0 <op_program>:
- }
- static ssize_t op_program(struct ringfs_flash_partition *flash, int address, const void *data, size_t size) {
- (void)flash;
- int ret;
- ret = spi_flash_write(address, data, size, 0);
- 80298a0: 4608 mov r0, r1
- 80298a2: 4611 mov r1, r2
- 80298a4: 461a mov r2, r3
- 80298a6: 2300 movs r3, #0
- 80298a8: f7fd b875 b.w 8026996 <spi_flash_write>
- 080298ac <op_sector_erase>:
- #define ALARM_LOG_FLASH_SECTOR_OFFSET 258
- static int op_sector_erase(struct ringfs_flash_partition *flash, int address) {
- (void)flash;
- int ret;
- ret = spi_flash_erase_sector(address, 0);
- 80298ac: 4608 mov r0, r1
- 80298ae: 2100 movs r1, #0
- 80298b0: f7fd b881 b.w 80269b6 <spi_flash_erase_sector>
- 080298b4 <log_task>:
- static struct ringfs fs2;
- static SemaphoreHandle_t log_mutex;
- void log_task(void)
- {
- 80298b4: b508 push {r3, lr}
- for(;;){
- flUpdateLog = true;
- 80298b6: 4c03 ldr r4, [pc, #12] ; (80298c4 <log_task+0x10>)
- 80298b8: 2501 movs r5, #1
- vTaskDelay(LOG_TIME);
- 80298ba: 4803 ldr r0, [pc, #12] ; (80298c8 <log_task+0x14>)
- static SemaphoreHandle_t log_mutex;
- void log_task(void)
- {
- for(;;){
- flUpdateLog = true;
- 80298bc: 7025 strb r5, [r4, #0]
- vTaskDelay(LOG_TIME);
- 80298be: f001 fb85 bl 802afcc <vTaskDelay>
- 80298c2: e7fa b.n 80298ba <log_task+0x6>
- 80298c4: 20000bc0 .word 0x20000bc0
- 80298c8: 000927c0 .word 0x000927c0
- 080298cc <log_init>:
- }
- }
- void log_init(bool format) {
- 80298cc: b51f push {r0, r1, r2, r3, r4, lr}
- DBG printf(">>> Event log\n");
- if (!spi_flash_desc.present)
- 80298ce: 4b22 ldr r3, [pc, #136] ; (8029958 <log_init+0x8c>)
- 80298d0: 781a ldrb r2, [r3, #0]
- flUpdateLog = true;
- vTaskDelay(LOG_TIME);
- }
- }
- void log_init(bool format) {
- 80298d2: 4604 mov r4, r0
- DBG printf(">>> Event log\n");
- if (!spi_flash_desc.present)
- 80298d4: 2a00 cmp r2, #0
- 80298d6: d03e beq.n 8029956 <log_init+0x8a>
- return;
- ringfs_flash.sector_size = spi_flash_desc.sector_size;
- 80298d8: 685a ldr r2, [r3, #4]
- ringfs_flash.sector_count = spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET;
- 80298da: 895b ldrh r3, [r3, #10]
- void log_init(bool format) {
- DBG printf(">>> Event log\n");
- if (!spi_flash_desc.present)
- return;
- ringfs_flash.sector_size = spi_flash_desc.sector_size;
- 80298dc: 491f ldr r1, [pc, #124] ; (802995c <log_init+0x90>)
- ringfs_flash.sector_count = spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET;
- ringfs_init(&fs, &ringfs_flash, LOG_ENTRY_VERSION, sizeof(log_entry_t));
- 80298de: 4820 ldr r0, [pc, #128] ; (8029960 <log_init+0x94>)
- void log_init(bool format) {
- DBG printf(">>> Event log\n");
- if (!spi_flash_desc.present)
- return;
- ringfs_flash.sector_size = spi_flash_desc.sector_size;
- 80298e0: 600a str r2, [r1, #0]
- ringfs_flash.sector_count = spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET;
- 80298e2: 085b lsrs r3, r3, #1
- 80298e4: 3b04 subs r3, #4
- 80298e6: 608b str r3, [r1, #8]
- ringfs_init(&fs, &ringfs_flash, LOG_ENTRY_VERSION, sizeof(log_entry_t));
- 80298e8: 2201 movs r2, #1
- 80298ea: 2337 movs r3, #55 ; 0x37
- 80298ec: f000 fb87 bl 8029ffe <ringfs_init>
- if (format || ringfs_scan(&fs) != 0)
- 80298f0: b11c cbz r4, 80298fa <log_init+0x2e>
- ringfs_format(&fs);
- 80298f2: 481b ldr r0, [pc, #108] ; (8029960 <log_init+0x94>)
- 80298f4: f000 fb8d bl 802a012 <ringfs_format>
- 80298f8: e004 b.n 8029904 <log_init+0x38>
- return;
- ringfs_flash.sector_size = spi_flash_desc.sector_size;
- ringfs_flash.sector_count = spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET;
- ringfs_init(&fs, &ringfs_flash, LOG_ENTRY_VERSION, sizeof(log_entry_t));
- if (format || ringfs_scan(&fs) != 0)
- 80298fa: 4819 ldr r0, [pc, #100] ; (8029960 <log_init+0x94>)
- 80298fc: f000 fc6b bl 802a1d6 <ringfs_scan>
- 8029900: 2800 cmp r0, #0
- 8029902: d1f6 bne.n 80298f2 <log_init+0x26>
- ringfs_format(&fs);
- ringfs_flash2.sector_size = spi_flash_desc.sector_size;
- 8029904: 4b14 ldr r3, [pc, #80] ; (8029958 <log_init+0x8c>)
- 8029906: 4917 ldr r1, [pc, #92] ; (8029964 <log_init+0x98>)
- 8029908: 685a ldr r2, [r3, #4]
- ringfs_flash2.sector_count = spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET;
- 802990a: 895b ldrh r3, [r3, #10]
- ringfs_init(&fs, &ringfs_flash, LOG_ENTRY_VERSION, sizeof(log_entry_t));
- if (format || ringfs_scan(&fs) != 0)
- ringfs_format(&fs);
- ringfs_flash2.sector_size = spi_flash_desc.sector_size;
- 802990c: 600a str r2, [r1, #0]
- ringfs_flash2.sector_count = spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET;
- 802990e: 085b lsrs r3, r3, #1
- 8029910: 3b04 subs r3, #4
- 8029912: 608b str r3, [r1, #8]
- ringfs_init(&fs2, &ringfs_flash2, LOG_ENTRY_VERSION, sizeof(log_entry_t));
- 8029914: 4814 ldr r0, [pc, #80] ; (8029968 <log_init+0x9c>)
- 8029916: 2201 movs r2, #1
- 8029918: 2337 movs r3, #55 ; 0x37
- 802991a: f000 fb70 bl 8029ffe <ringfs_init>
- if (format || ringfs_scan(&fs2) != 0)
- 802991e: b11c cbz r4, 8029928 <log_init+0x5c>
- ringfs_format(&fs2);
- 8029920: 4811 ldr r0, [pc, #68] ; (8029968 <log_init+0x9c>)
- 8029922: f000 fb76 bl 802a012 <ringfs_format>
- 8029926: e004 b.n 8029932 <log_init+0x66>
- ringfs_flash2.sector_size = spi_flash_desc.sector_size;
- ringfs_flash2.sector_count = spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET;
- ringfs_init(&fs2, &ringfs_flash2, LOG_ENTRY_VERSION, sizeof(log_entry_t));
- if (format || ringfs_scan(&fs2) != 0)
- 8029928: 480f ldr r0, [pc, #60] ; (8029968 <log_init+0x9c>)
- 802992a: f000 fc54 bl 802a1d6 <ringfs_scan>
- 802992e: 2800 cmp r0, #0
- 8029930: d1f6 bne.n 8029920 <log_init+0x54>
- ringfs_format(&fs2);
- fLogInit = true;
- 8029932: 4b0e ldr r3, [pc, #56] ; (802996c <log_init+0xa0>)
- 8029934: 2001 movs r0, #1
- 8029936: 7018 strb r0, [r3, #0]
- log_mutex = xSemaphoreCreateMutex();
- 8029938: f000 feaf bl 802a69a <xQueueCreateMutex>
- 802993c: 4b0c ldr r3, [pc, #48] ; (8029970 <log_init+0xa4>)
- xTaskCreate(log_task, ( char * ) "log_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- 802993e: 490d ldr r1, [pc, #52] ; (8029974 <log_init+0xa8>)
- if (format || ringfs_scan(&fs2) != 0)
- ringfs_format(&fs2);
- fLogInit = true;
- log_mutex = xSemaphoreCreateMutex();
- 8029940: 6018 str r0, [r3, #0]
- xTaskCreate(log_task, ( char * ) "log_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
- 8029942: 2300 movs r3, #0
- 8029944: 9300 str r3, [sp, #0]
- 8029946: 9301 str r3, [sp, #4]
- 8029948: 9302 str r3, [sp, #8]
- 802994a: 9303 str r3, [sp, #12]
- 802994c: 480a ldr r0, [pc, #40] ; (8029978 <log_init+0xac>)
- 802994e: f44f 7280 mov.w r2, #256 ; 0x100
- 8029952: f001 f8a1 bl 802aa98 <xTaskGenericCreate>
- }
- 8029956: bd1f pop {r0, r1, r2, r3, r4, pc}
- 8029958: 2000c840 .word 0x2000c840
- 802995c: 200006ac .word 0x200006ac
- 8029960: 20000b94 .word 0x20000b94
- 8029964: 20000694 .word 0x20000694
- 8029968: 20000b68 .word 0x20000b68
- 802996c: 20000bc8 .word 0x20000bc8
- 8029970: 20000bc4 .word 0x20000bc4
- 8029974: 08039b5d .word 0x08039b5d
- 8029978: 080298b5 .word 0x080298b5
- 0802997c <log_append>:
- }
- return 0;
- }
- int log_append(log_entry_t *entry) {
- 802997c: b530 push {r4, r5, lr}
- int ret;
- TM_RTC_t data;
- ret = xSemaphoreTake( log_mutex, portMAX_DELAY );
- 802997e: 4b12 ldr r3, [pc, #72] ; (80299c8 <log_append+0x4c>)
- 8029980: 2100 movs r1, #0
- }
- return 0;
- }
- int log_append(log_entry_t *entry) {
- 8029982: b085 sub sp, #20
- 8029984: 4604 mov r4, r0
- int ret;
- TM_RTC_t data;
- ret = xSemaphoreTake( log_mutex, portMAX_DELAY );
- 8029986: f04f 32ff mov.w r2, #4294967295
- 802998a: 6818 ldr r0, [r3, #0]
- 802998c: 460b mov r3, r1
- 802998e: f000 ff2a bl 802a7e6 <xQueueGenericReceive>
- if (ret == pdFALSE)
- 8029992: 4605 mov r5, r0
- 8029994: b1a8 cbz r0, 80299c2 <log_append+0x46>
- return ret;
- if (!entry->timestamp){
- 8029996: 6821 ldr r1, [r4, #0]
- 8029998: b921 cbnz r1, 80299a4 <log_append+0x28>
- TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
- 802999a: 4668 mov r0, sp
- 802999c: f7fc fd74 bl 8026488 <TM_RTC_GetDateTime>
- entry->timestamp = data.unix;
- 80299a0: 9b03 ldr r3, [sp, #12]
- 80299a2: 6023 str r3, [r4, #0]
- }
- if(entry->type == LOG_VALUE)
- 80299a4: 7923 ldrb r3, [r4, #4]
- 80299a6: 2b11 cmp r3, #17
- ringfs_append(&fs, entry);
- 80299a8: bf0c ite eq
- 80299aa: 4808 ldreq r0, [pc, #32] ; (80299cc <log_append+0x50>)
- else
- ringfs_append(&fs2, entry);
- 80299ac: 4808 ldrne r0, [pc, #32] ; (80299d0 <log_append+0x54>)
- 80299ae: 4621 mov r1, r4
- 80299b0: f000 fb62 bl 802a078 <ringfs_append>
- xSemaphoreGive(log_mutex);
- 80299b4: 4b04 ldr r3, [pc, #16] ; (80299c8 <log_append+0x4c>)
- 80299b6: 2100 movs r1, #0
- 80299b8: 6818 ldr r0, [r3, #0]
- 80299ba: 460a mov r2, r1
- 80299bc: 460b mov r3, r1
- 80299be: f000 fdd2 bl 802a566 <xQueueGenericSend>
- return ret;
- }
- 80299c2: 4628 mov r0, r5
- 80299c4: b005 add sp, #20
- 80299c6: bd30 pop {r4, r5, pc}
- 80299c8: 20000bc4 .word 0x20000bc4
- 80299cc: 20000b94 .word 0x20000b94
- 80299d0: 20000b68 .word 0x20000b68
- 080299d4 <log_fetch>:
- int log_fetch(log_entry_t *entry, uint32_t timeout) {
- 80299d4: b570 push {r4, r5, r6, lr}
- int ret;
- ret = xSemaphoreTake( log_mutex, (TickType_t)timeout );
- 80299d6: 4e0d ldr r6, [pc, #52] ; (8029a0c <log_fetch+0x38>)
- ringfs_append(&fs2, entry);
- xSemaphoreGive(log_mutex);
- return ret;
- }
- int log_fetch(log_entry_t *entry, uint32_t timeout) {
- 80299d8: 460a mov r2, r1
- int ret;
- ret = xSemaphoreTake( log_mutex, (TickType_t)timeout );
- 80299da: 2100 movs r1, #0
- ringfs_append(&fs2, entry);
- xSemaphoreGive(log_mutex);
- return ret;
- }
- int log_fetch(log_entry_t *entry, uint32_t timeout) {
- 80299dc: 4605 mov r5, r0
- int ret;
- ret = xSemaphoreTake( log_mutex, (TickType_t)timeout );
- 80299de: 460b mov r3, r1
- 80299e0: 6830 ldr r0, [r6, #0]
- 80299e2: f000 ff00 bl 802a7e6 <xQueueGenericReceive>
- if (ret == pdFALSE)
- 80299e6: 4604 mov r4, r0
- 80299e8: b170 cbz r0, 8029a08 <log_fetch+0x34>
- return ret;
- if(entry->type == LOG_VALUE)
- 80299ea: 792b ldrb r3, [r5, #4]
- 80299ec: 2b11 cmp r3, #17
- ret = ringfs_fetch(&fs, entry);
- 80299ee: bf0c ite eq
- 80299f0: 4807 ldreq r0, [pc, #28] ; (8029a10 <log_fetch+0x3c>)
- else
- ret = ringfs_fetch(&fs2, entry);
- 80299f2: 4808 ldrne r0, [pc, #32] ; (8029a14 <log_fetch+0x40>)
- 80299f4: 4629 mov r1, r5
- 80299f6: f000 fba9 bl 802a14c <ringfs_fetch>
- xSemaphoreGive(log_mutex);
- 80299fa: 2100 movs r1, #0
- if (ret == pdFALSE)
- return ret;
- if(entry->type == LOG_VALUE)
- ret = ringfs_fetch(&fs, entry);
- else
- ret = ringfs_fetch(&fs2, entry);
- 80299fc: 4604 mov r4, r0
- xSemaphoreGive(log_mutex);
- 80299fe: 460a mov r2, r1
- 8029a00: 6830 ldr r0, [r6, #0]
- 8029a02: 460b mov r3, r1
- 8029a04: f000 fdaf bl 802a566 <xQueueGenericSend>
- return ret;
- }
- 8029a08: 4620 mov r0, r4
- 8029a0a: bd70 pop {r4, r5, r6, pc}
- 8029a0c: 20000bc4 .word 0x20000bc4
- 8029a10: 20000b94 .word 0x20000b94
- 8029a14: 20000b68 .word 0x20000b68
- 08029a18 <log_rewind>:
- int log_rewind(log_entry_t *entry, uint32_t timeout) {
- 8029a18: b570 push {r4, r5, r6, lr}
- int ret;
- ret = xSemaphoreTake( log_mutex, (TickType_t)timeout );
- 8029a1a: 4d0d ldr r5, [pc, #52] ; (8029a50 <log_rewind+0x38>)
- ret = ringfs_fetch(&fs2, entry);
- xSemaphoreGive(log_mutex);
- return ret;
- }
- int log_rewind(log_entry_t *entry, uint32_t timeout) {
- 8029a1c: 460a mov r2, r1
- int ret;
- ret = xSemaphoreTake( log_mutex, (TickType_t)timeout );
- 8029a1e: 2100 movs r1, #0
- ret = ringfs_fetch(&fs2, entry);
- xSemaphoreGive(log_mutex);
- return ret;
- }
- int log_rewind(log_entry_t *entry, uint32_t timeout) {
- 8029a20: 4606 mov r6, r0
- int ret;
- ret = xSemaphoreTake( log_mutex, (TickType_t)timeout );
- 8029a22: 460b mov r3, r1
- 8029a24: 6828 ldr r0, [r5, #0]
- 8029a26: f000 fede bl 802a7e6 <xQueueGenericReceive>
- if (ret == pdFALSE)
- 8029a2a: 4604 mov r4, r0
- 8029a2c: b168 cbz r0, 8029a4a <log_rewind+0x32>
- return ret;
- if(entry->type == LOG_VALUE)
- 8029a2e: 7933 ldrb r3, [r6, #4]
- 8029a30: 2b11 cmp r3, #17
- ret = ringfs_rewind(&fs);
- 8029a32: bf0c ite eq
- 8029a34: 4807 ldreq r0, [pc, #28] ; (8029a54 <log_rewind+0x3c>)
- else
- ret = ringfs_rewind(&fs2);
- 8029a36: 4808 ldrne r0, [pc, #32] ; (8029a58 <log_rewind+0x40>)
- 8029a38: f000 fbc2 bl 802a1c0 <ringfs_rewind>
- xSemaphoreGive(log_mutex);
- 8029a3c: 2100 movs r1, #0
- if (ret == pdFALSE)
- return ret;
- if(entry->type == LOG_VALUE)
- ret = ringfs_rewind(&fs);
- else
- ret = ringfs_rewind(&fs2);
- 8029a3e: 4604 mov r4, r0
- xSemaphoreGive(log_mutex);
- 8029a40: 460a mov r2, r1
- 8029a42: 6828 ldr r0, [r5, #0]
- 8029a44: 460b mov r3, r1
- 8029a46: f000 fd8e bl 802a566 <xQueueGenericSend>
- return ret;
- }
- 8029a4a: 4620 mov r0, r4
- 8029a4c: bd70 pop {r4, r5, r6, pc}
- 8029a4e: bf00 nop
- 8029a50: 20000bc4 .word 0x20000bc4
- 8029a54: 20000b94 .word 0x20000b94
- 8029a58: 20000b68 .word 0x20000b68
- 08029a5c <log_event_data>:
- xSemaphoreGive(log_mutex);
- return ret;
- }
- void log_event_data(log_type_t type, char *data)
- {
- 8029a5c: b500 push {lr}
- 8029a5e: b08f sub sp, #60 ; 0x3c
- log_entry_t entry_data;
- entry_data.timestamp = 0;
- 8029a60: 2300 movs r3, #0
- 8029a62: 9300 str r3, [sp, #0]
- entry_data.type = type;
- strncpy(entry_data.data, data, 50);
- 8029a64: 446b add r3, sp
- void log_event_data(log_type_t type, char *data)
- {
- log_entry_t entry_data;
- entry_data.timestamp = 0;
- entry_data.type = type;
- 8029a66: f88d 0004 strb.w r0, [sp, #4]
- strncpy(entry_data.data, data, 50);
- 8029a6a: 2232 movs r2, #50 ; 0x32
- 8029a6c: 1d58 adds r0, r3, #5
- 8029a6e: f7f8 fad7 bl 8022020 <strncpy>
- log_append(&entry_data);
- 8029a72: 4668 mov r0, sp
- 8029a74: f7ff ff82 bl 802997c <log_append>
- }
- 8029a78: b00f add sp, #60 ; 0x3c
- 8029a7a: bd00 pop {pc}
- 08029a7c <log_add>:
- void log_add(char *log_data)
- {
- 8029a7c: b530 push {r4, r5, lr}
- 8029a7e: b08f sub sp, #60 ; 0x3c
- 8029a80: 4605 mov r5, r0
- char buf_value[50];
- uint8_t i, len;
- memset(buf_value, 0, 50);
- 8029a82: 2100 movs r1, #0
- 8029a84: 2232 movs r2, #50 ; 0x32
- 8029a86: a801 add r0, sp, #4
- 8029a88: f7f8 f83a bl 8021b00 <memset>
- len = strlen(log_data);
- 8029a8c: 4628 mov r0, r5
- 8029a8e: f7f8 fa0f bl 8021eb0 <strlen>
- 8029a92: b2c4 uxtb r4, r0
- strncpy(buf_value, log_data, len);
- 8029a94: 4629 mov r1, r5
- 8029a96: a801 add r0, sp, #4
- 8029a98: 4622 mov r2, r4
- 8029a9a: f7f8 fac1 bl 8022020 <strncpy>
- buf_value[0] = '\"';
- 8029a9e: 2322 movs r3, #34 ; 0x22
- 8029aa0: f88d 3004 strb.w r3, [sp, #4]
- for(i = 0; i < len; i++)
- {
- if(buf_value[i] == ' ')
- buf_value[i] = ';';
- 8029aa4: 203b movs r0, #59 ; 0x3b
- len = strlen(log_data);
- strncpy(buf_value, log_data, len);
- buf_value[0] = '\"';
- for(i = 0; i < len; i++)
- 8029aa6: 2300 movs r3, #0
- 8029aa8: e004 b.n 8029ab4 <log_add+0x38>
- {
- if(buf_value[i] == ' ')
- 8029aaa: 5cca ldrb r2, [r1, r3]
- 8029aac: 2a20 cmp r2, #32
- buf_value[i] = ';';
- 8029aae: bf08 it eq
- 8029ab0: 54c8 strbeq r0, [r1, r3]
- 8029ab2: 3301 adds r3, #1
- len = strlen(log_data);
- strncpy(buf_value, log_data, len);
- buf_value[0] = '\"';
- for(i = 0; i < len; i++)
- 8029ab4: b2da uxtb r2, r3
- 8029ab6: 42a2 cmp r2, r4
- 8029ab8: a901 add r1, sp, #4
- 8029aba: d3f6 bcc.n 8029aaa <log_add+0x2e>
- {
- if(buf_value[i] == ' ')
- buf_value[i] = ';';
- }
- buf_value[len - 1] = ';';
- 8029abc: ab0e add r3, sp, #56 ; 0x38
- 8029abe: 191c adds r4, r3, r4
- if(fs.write.slot>67)
- {
- log_entry_t entry_data;
- entry_data.timestamp = 0;
- log_event_data(LOG_VALUE, buf_value);
- 8029ac0: 2011 movs r0, #17
- for(i = 0; i < len; i++)
- {
- if(buf_value[i] == ' ')
- buf_value[i] = ';';
- }
- buf_value[len - 1] = ';';
- 8029ac2: 233b movs r3, #59 ; 0x3b
- 8029ac4: f804 3c35 strb.w r3, [r4, #-53]
- if(fs.write.slot>67)
- {
- log_entry_t entry_data;
- entry_data.timestamp = 0;
- log_event_data(LOG_VALUE, buf_value);
- 8029ac8: f7ff ffc8 bl 8029a5c <log_event_data>
- }
- else
- log_event_data(LOG_VALUE, buf_value);
- }
- 8029acc: b00f add sp, #60 ; 0x3c
- 8029ace: bd30 pop {r4, r5, pc}
- 08029ad0 <LOG_IsInit>:
- * @brief Возвращает true если журнал проинициализирован
- */
- bool LOG_IsInit()
- {
- return fLogInit;
- }
- 8029ad0: 4b01 ldr r3, [pc, #4] ; (8029ad8 <LOG_IsInit+0x8>)
- 8029ad2: 7818 ldrb r0, [r3, #0]
- 8029ad4: 4770 bx lr
- 8029ad6: bf00 nop
- 8029ad8: 20000bc8 .word 0x20000bc8
- 08029adc <LOG_GetPageCount>:
- /**
- * @brief Возвращает общее количество страниц
- */
- uint32_t LOG_GetPageCount(void)
- {
- 8029adc: b508 push {r3, lr}
- return (((ringfs_count_estimate(&fs)) / 10) + 1);
- 8029ade: 4804 ldr r0, [pc, #16] ; (8029af0 <LOG_GetPageCount+0x14>)
- 8029ae0: f000 fab8 bl 802a054 <ringfs_count_estimate>
- 8029ae4: 230a movs r3, #10
- 8029ae6: fb90 f0f3 sdiv r0, r0, r3
- }
- 8029aea: 3001 adds r0, #1
- 8029aec: bd08 pop {r3, pc}
- 8029aee: bf00 nop
- 8029af0: 20000b94 .word 0x20000b94
- 08029af4 <LOG_GetTotalSTRCount>:
- uint32_t LOG_GetTotalSTRCount(void)
- {
- return ringfs_count_estimate(&fs);
- 8029af4: 4801 ldr r0, [pc, #4] ; (8029afc <LOG_GetTotalSTRCount+0x8>)
- 8029af6: f000 baad b.w 802a054 <ringfs_count_estimate>
- 8029afa: bf00 nop
- 8029afc: 20000b94 .word 0x20000b94
- 08029b00 <LOG_GetPage>:
- }
- void LOG_GetPage(char *str, uint32_t page)
- {
- 8029b00: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- 8029b04: b09d sub sp, #116 ; 0x74
- 8029b06: 460d mov r5, r1
- 8029b08: 4606 mov r6, r0
- TM_RTC_t rtc_data;
- log_entry_t entry;
- char buf[20];
- uint8_t i;
- int start =LOG_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- 8029b0a: f7ff fff3 bl 8029af4 <LOG_GetTotalSTRCount>
- memset(buf, 0, 20);
- 8029b0e: 2100 movs r1, #0
- {
- TM_RTC_t rtc_data;
- log_entry_t entry;
- char buf[20];
- uint8_t i;
- int start =LOG_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- 8029b10: 4604 mov r4, r0
- memset(buf, 0, 20);
- 8029b12: 2214 movs r2, #20
- 8029b14: a809 add r0, sp, #36 ; 0x24
- for(i=0; i < 10; i++){
- fs.cursor_position = start - 10*(page-1) - 1 - i;
- 8029b16: f06f 0809 mvn.w r8, #9
- log_entry_t entry;
- char buf[20];
- uint8_t i;
- int start =LOG_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- memset(buf, 0, 20);
- 8029b1a: f7f7 fff1 bl 8021b00 <memset>
- for(i=0; i < 10; i++){
- fs.cursor_position = start - 10*(page-1) - 1 - i;
- 8029b1e: fb08 4805 mla r8, r8, r5, r4
- 8029b22: 4c29 ldr r4, [pc, #164] ; (8029bc8 <LOG_GetPage+0xc8>)
- 8029b24: f108 0809 add.w r8, r8, #9
- 8029b28: 2500 movs r5, #0
- fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
- fs.cursor.slot = fs.cursor_position%fs.slots_per_sector;
- }
- entry.type = LOG_VALUE;
- log_fetch(&entry, portMAX_DELAY);
- strncat(str, entry.data, strlen(entry.data));
- 8029b2a: f10d 073d add.w r7, sp, #61 ; 0x3d
- uint32_t LOG_GetTotalSTRCount(void)
- {
- return ringfs_count_estimate(&fs);
- }
- void LOG_GetPage(char *str, uint32_t page)
- 8029b2e: ebc5 0308 rsb r3, r5, r8
- int start =LOG_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- memset(buf, 0, 20);
- for(i=0; i < 10; i++){
- fs.cursor_position = start - 10*(page-1) - 1 - i;
- if(fs.cursor_position < 0)
- 8029b32: 2b00 cmp r3, #0
- uint8_t i;
- int start =LOG_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- memset(buf, 0, 20);
- for(i=0; i < 10; i++){
- fs.cursor_position = start - 10*(page-1) - 1 - i;
- 8029b34: 62a3 str r3, [r4, #40] ; 0x28
- if(fs.cursor_position < 0)
- 8029b36: db43 blt.n 8029bc0 <LOG_GetPage+0xc0>
- break;
- else{
- fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
- 8029b38: f8d4 900c ldr.w r9, [r4, #12]
- 8029b3c: 6920 ldr r0, [r4, #16]
- 8029b3e: 6821 ldr r1, [r4, #0]
- 8029b40: fb93 f2f9 sdiv r2, r3, r9
- 8029b44: eb02 0e00 add.w lr, r2, r0
- 8029b48: 6888 ldr r0, [r1, #8]
- 8029b4a: fb9e fcf0 sdiv ip, lr, r0
- 8029b4e: fb00 e01c mls r0, r0, ip, lr
- fs.cursor.slot = fs.cursor_position%fs.slots_per_sector;
- 8029b52: fb09 3312 mls r3, r9, r2, r3
- for(i=0; i < 10; i++){
- fs.cursor_position = start - 10*(page-1) - 1 - i;
- if(fs.cursor_position < 0)
- break;
- else{
- fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
- 8029b56: 6220 str r0, [r4, #32]
- fs.cursor.slot = fs.cursor_position%fs.slots_per_sector;
- 8029b58: 6263 str r3, [r4, #36] ; 0x24
- }
- entry.type = LOG_VALUE;
- log_fetch(&entry, portMAX_DELAY);
- 8029b5a: f04f 31ff mov.w r1, #4294967295
- break;
- else{
- fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
- fs.cursor.slot = fs.cursor_position%fs.slots_per_sector;
- }
- entry.type = LOG_VALUE;
- 8029b5e: 2311 movs r3, #17
- log_fetch(&entry, portMAX_DELAY);
- 8029b60: a80e add r0, sp, #56 ; 0x38
- break;
- else{
- fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
- fs.cursor.slot = fs.cursor_position%fs.slots_per_sector;
- }
- entry.type = LOG_VALUE;
- 8029b62: f88d 303c strb.w r3, [sp, #60] ; 0x3c
- log_fetch(&entry, portMAX_DELAY);
- 8029b66: f7ff ff35 bl 80299d4 <log_fetch>
- strncat(str, entry.data, strlen(entry.data));
- 8029b6a: 4638 mov r0, r7
- 8029b6c: f7f8 f9a0 bl 8021eb0 <strlen>
- 8029b70: 4639 mov r1, r7
- 8029b72: 4602 mov r2, r0
- 8029b74: 4630 mov r0, r6
- 8029b76: f7f8 f9cb bl 8021f10 <strncat>
- TM_RTC_GetDateTimeFromUnix(&rtc_data, entry.timestamp);
- 8029b7a: a805 add r0, sp, #20
- 8029b7c: 990e ldr r1, [sp, #56] ; 0x38
- 8029b7e: f7fc fd13 bl 80265a8 <TM_RTC_GetDateTimeFromUnix>
- sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i", rtc_data.date, rtc_data.month,
- 8029b82: f89d 101d ldrb.w r1, [sp, #29]
- 8029b86: f89d 201b ldrb.w r2, [sp, #27]
- 8029b8a: 9100 str r1, [sp, #0]
- 8029b8c: f89d 1019 ldrb.w r1, [sp, #25]
- 8029b90: f89d 301c ldrb.w r3, [sp, #28]
- 8029b94: 9101 str r1, [sp, #4]
- 8029b96: f89d 1018 ldrb.w r1, [sp, #24]
- 8029b9a: 9102 str r1, [sp, #8]
- 8029b9c: f89d 1014 ldrb.w r1, [sp, #20]
- 8029ba0: a809 add r0, sp, #36 ; 0x24
- 8029ba2: 9103 str r1, [sp, #12]
- 8029ba4: 4909 ldr r1, [pc, #36] ; (8029bcc <LOG_GetPage+0xcc>)
- 8029ba6: f7fd fe35 bl 8027814 <tfp_sprintf>
- rtc_data.year, rtc_data.hours, rtc_data.minutes, rtc_data.seconds);
- strcat(str, buf);
- 8029baa: a909 add r1, sp, #36 ; 0x24
- 8029bac: 4630 mov r0, r6
- 8029bae: f7f8 f80d bl 8021bcc <strcat>
- 8029bb2: 3501 adds r5, #1
- strcat(str, "\",");
- 8029bb4: 4630 mov r0, r6
- 8029bb6: 4906 ldr r1, [pc, #24] ; (8029bd0 <LOG_GetPage+0xd0>)
- 8029bb8: f7f8 f808 bl 8021bcc <strcat>
- char buf[20];
- uint8_t i;
- int start =LOG_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- memset(buf, 0, 20);
- for(i=0; i < 10; i++){
- 8029bbc: 2d0a cmp r5, #10
- 8029bbe: d1b6 bne.n 8029b2e <LOG_GetPage+0x2e>
- sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i", rtc_data.date, rtc_data.month,
- rtc_data.year, rtc_data.hours, rtc_data.minutes, rtc_data.seconds);
- strcat(str, buf);
- strcat(str, "\",");
- }
- }
- 8029bc0: b01d add sp, #116 ; 0x74
- 8029bc2: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
- 8029bc6: bf00 nop
- 8029bc8: 20000b94 .word 0x20000b94
- 8029bcc: 08039b66 .word 0x08039b66
- 8029bd0: 08039b84 .word 0x08039b84
- 08029bd4 <LOG_GetData>:
- uint32_t LOG_GetData(int ptr, char *str, uint32_t size, bool start)
- {
- 8029bd4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8029bd8: b09c sub sp, #112 ; 0x70
- 8029bda: 4690 mov r8, r2
- TM_RTC_t rtc_data;
- log_entry_t entry;
- char buf[20];
- uint8_t i;
- entry.type = LOG_VALUE;
- 8029bdc: 2211 movs r2, #17
- strcat(str, "\",");
- }
- }
- uint32_t LOG_GetData(int ptr, char *str, uint32_t size, bool start)
- {
- 8029bde: 4605 mov r5, r0
- 8029be0: 460c mov r4, r1
- TM_RTC_t rtc_data;
- log_entry_t entry;
- char buf[20];
- uint8_t i;
- entry.type = LOG_VALUE;
- 8029be2: f88d 203c strb.w r2, [sp, #60] ; 0x3c
- if(start)
- 8029be6: b123 cbz r3, 8029bf2 <LOG_GetData+0x1e>
- log_rewind(&entry, portMAX_DELAY);
- 8029be8: a80e add r0, sp, #56 ; 0x38
- 8029bea: f04f 31ff mov.w r1, #4294967295
- 8029bee: f7ff ff13 bl 8029a18 <log_rewind>
- fs.cursor_position = ptr/STRING_SIZE;
- 8029bf2: 4b29 ldr r3, [pc, #164] ; (8029c98 <LOG_GetData+0xc4>)
- 8029bf4: 2040 movs r0, #64 ; 0x40
- 8029bf6: fb95 f0f0 sdiv r0, r5, r0
- fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
- 8029bfa: 681e ldr r6, [r3, #0]
- 8029bfc: 68dd ldr r5, [r3, #12]
- 8029bfe: 691f ldr r7, [r3, #16]
- 8029c00: 68b6 ldr r6, [r6, #8]
- uint8_t i;
- entry.type = LOG_VALUE;
- if(start)
- log_rewind(&entry, portMAX_DELAY);
- fs.cursor_position = ptr/STRING_SIZE;
- 8029c02: 6298 str r0, [r3, #40] ; 0x28
- fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
- 8029c04: fb90 f1f5 sdiv r1, r0, r5
- 8029c08: 19cf adds r7, r1, r7
- 8029c0a: fb97 f2f6 sdiv r2, r7, r6
- 8029c0e: fb06 7612 mls r6, r6, r2, r7
- fs.cursor.slot = fs.cursor_position%fs.slots_per_sector;
- 8029c12: fb05 0011 mls r0, r5, r1, r0
- entry.type = LOG_VALUE;
- if(start)
- log_rewind(&entry, portMAX_DELAY);
- fs.cursor_position = ptr/STRING_SIZE;
- fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
- 8029c16: 621e str r6, [r3, #32]
- fs.cursor.slot = fs.cursor_position%fs.slots_per_sector;
- 8029c18: 6258 str r0, [r3, #36] ; 0x24
- for(i = 0; i < size/STRING_SIZE; i++)
- 8029c1a: ea4f 1798 mov.w r7, r8, lsr #6
- 8029c1e: 2500 movs r5, #0
- {
- log_fetch(&entry, portMAX_DELAY);
- strncat(str, &entry.data[1], (strlen(entry.data) - 1));
- 8029c20: f10d 063d add.w r6, sp, #61 ; 0x3d
- fs.cursor_position = ptr/STRING_SIZE;
- fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
- fs.cursor.slot = fs.cursor_position%fs.slots_per_sector;
- for(i = 0; i < size/STRING_SIZE; i++)
- 8029c24: e02f b.n 8029c86 <LOG_GetData+0xb2>
- {
- log_fetch(&entry, portMAX_DELAY);
- 8029c26: f04f 31ff mov.w r1, #4294967295
- 8029c2a: a80e add r0, sp, #56 ; 0x38
- 8029c2c: f7ff fed2 bl 80299d4 <log_fetch>
- strncat(str, &entry.data[1], (strlen(entry.data) - 1));
- 8029c30: 4630 mov r0, r6
- 8029c32: f7f8 f93d bl 8021eb0 <strlen>
- 8029c36: f10d 013e add.w r1, sp, #62 ; 0x3e
- 8029c3a: 1e42 subs r2, r0, #1
- 8029c3c: 4620 mov r0, r4
- 8029c3e: f7f8 f967 bl 8021f10 <strncat>
- TM_RTC_GetDateTimeFromUnix(&rtc_data, entry.timestamp);
- 8029c42: a805 add r0, sp, #20
- 8029c44: 990e ldr r1, [sp, #56] ; 0x38
- 8029c46: f7fc fcaf bl 80265a8 <TM_RTC_GetDateTimeFromUnix>
- sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i", rtc_data.date, rtc_data.month,
- 8029c4a: f89d 101d ldrb.w r1, [sp, #29]
- 8029c4e: f89d 201b ldrb.w r2, [sp, #27]
- 8029c52: 9100 str r1, [sp, #0]
- 8029c54: f89d 1019 ldrb.w r1, [sp, #25]
- 8029c58: f89d 301c ldrb.w r3, [sp, #28]
- 8029c5c: 9101 str r1, [sp, #4]
- 8029c5e: f89d 1018 ldrb.w r1, [sp, #24]
- 8029c62: 9102 str r1, [sp, #8]
- 8029c64: f89d 1014 ldrb.w r1, [sp, #20]
- 8029c68: a809 add r0, sp, #36 ; 0x24
- 8029c6a: 9103 str r1, [sp, #12]
- 8029c6c: 490b ldr r1, [pc, #44] ; (8029c9c <LOG_GetData+0xc8>)
- 8029c6e: f7fd fdd1 bl 8027814 <tfp_sprintf>
- rtc_data.year, rtc_data.hours, rtc_data.minutes, rtc_data.seconds);
- strcat(str, buf);
- 8029c72: a909 add r1, sp, #36 ; 0x24
- 8029c74: 4620 mov r0, r4
- 8029c76: f7f7 ffa9 bl 8021bcc <strcat>
- strcat(str, "\n");
- 8029c7a: 4620 mov r0, r4
- 8029c7c: 4908 ldr r1, [pc, #32] ; (8029ca0 <LOG_GetData+0xcc>)
- 8029c7e: f7f7 ffa5 bl 8021bcc <strcat>
- fs.cursor_position = ptr/STRING_SIZE;
- fs.cursor.sector = (fs.read.sector + fs.cursor_position/fs.slots_per_sector)%fs.flash->sector_count;
- fs.cursor.slot = fs.cursor_position%fs.slots_per_sector;
- for(i = 0; i < size/STRING_SIZE; i++)
- 8029c82: 3501 adds r5, #1
- 8029c84: b2ed uxtb r5, r5
- 8029c86: 42bd cmp r5, r7
- 8029c88: d3cd bcc.n 8029c26 <LOG_GetData+0x52>
- sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i", rtc_data.date, rtc_data.month,
- rtc_data.year, rtc_data.hours, rtc_data.minutes, rtc_data.seconds);
- strcat(str, buf);
- strcat(str, "\n");
- }
- return strlen(str);
- 8029c8a: 4620 mov r0, r4
- 8029c8c: f7f8 f910 bl 8021eb0 <strlen>
- }
- 8029c90: b01c add sp, #112 ; 0x70
- 8029c92: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 8029c96: bf00 nop
- 8029c98: 20000b94 .word 0x20000b94
- 8029c9c: 08039b66 .word 0x08039b66
- 8029ca0: 08041133 .word 0x08041133
- 08029ca4 <History_GetPageCount>:
- /**
- * @brief Возвращает общее количество страниц
- */
- uint32_t History_GetPageCount(void)
- {
- 8029ca4: b508 push {r3, lr}
- return (((ringfs_count_estimate(&fs2)) / 10) + 1);
- 8029ca6: 4804 ldr r0, [pc, #16] ; (8029cb8 <History_GetPageCount+0x14>)
- 8029ca8: f000 f9d4 bl 802a054 <ringfs_count_estimate>
- 8029cac: 230a movs r3, #10
- 8029cae: fb90 f0f3 sdiv r0, r0, r3
- }
- 8029cb2: 3001 adds r0, #1
- 8029cb4: bd08 pop {r3, pc}
- 8029cb6: bf00 nop
- 8029cb8: 20000b68 .word 0x20000b68
- 08029cbc <History_GetTotalSTRCount>:
- uint32_t History_GetTotalSTRCount(void)
- {
- return ringfs_count_estimate(&fs2);
- 8029cbc: 4801 ldr r0, [pc, #4] ; (8029cc4 <History_GetTotalSTRCount+0x8>)
- 8029cbe: f000 b9c9 b.w 802a054 <ringfs_count_estimate>
- 8029cc2: bf00 nop
- 8029cc4: 20000b68 .word 0x20000b68
- 08029cc8 <History_GetPage>:
- }
- void History_GetPage(char *str, uint32_t page)
- {
- 8029cc8: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- 8029ccc: b09d sub sp, #116 ; 0x74
- 8029cce: 460e mov r6, r1
- 8029cd0: 4604 mov r4, r0
- TM_RTC_t rtc_data;
- log_entry_t entry;
- char buf[20];
- uint8_t i;
- int start =History_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- 8029cd2: f7ff fff3 bl 8029cbc <History_GetTotalSTRCount>
- memset(buf, 0, 20);
- 8029cd6: 2100 movs r1, #0
- {
- TM_RTC_t rtc_data;
- log_entry_t entry;
- char buf[20];
- uint8_t i;
- int start =History_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- 8029cd8: 4605 mov r5, r0
- memset(buf, 0, 20);
- 8029cda: 2214 movs r2, #20
- 8029cdc: a809 add r0, sp, #36 ; 0x24
- for(i=0; i < 10; i++){
- fs2.cursor_position = start - 10*(page-1) - 1 - i;
- 8029cde: f06f 0909 mvn.w r9, #9
- log_entry_t entry;
- char buf[20];
- uint8_t i;
- int start =History_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- memset(buf, 0, 20);
- 8029ce2: f7f7 ff0d bl 8021b00 <memset>
- for(i=0; i < 10; i++){
- fs2.cursor_position = start - 10*(page-1) - 1 - i;
- 8029ce6: fb09 5906 mla r9, r9, r6, r5
- 8029cea: 4d36 ldr r5, [pc, #216] ; (8029dc4 <History_GetPage+0xfc>)
- 8029cec: f109 0909 add.w r9, r9, #9
- 8029cf0: 2600 movs r6, #0
- entry.type = LOG_LOGIN;
- log_fetch(&entry, portMAX_DELAY);
- strcat(str, "\"");
- strncat(str, logsStrShortRu[entry.type], (strlen(logsStrShortRu[entry.type]) ));
- strcat(str, ";");
- strncat(str, entry.data, (strlen(entry.data) ));
- 8029cf2: f10d 073d add.w r7, sp, #61 ; 0x3d
- uint32_t History_GetTotalSTRCount(void)
- {
- return ringfs_count_estimate(&fs2);
- }
- void History_GetPage(char *str, uint32_t page)
- 8029cf6: ebc6 0309 rsb r3, r6, r9
- int start =History_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- memset(buf, 0, 20);
- for(i=0; i < 10; i++){
- fs2.cursor_position = start - 10*(page-1) - 1 - i;
- if(fs2.cursor_position < 0)
- 8029cfa: 2b00 cmp r3, #0
- uint8_t i;
- int start =History_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- memset(buf, 0, 20);
- for(i=0; i < 10; i++){
- fs2.cursor_position = start - 10*(page-1) - 1 - i;
- 8029cfc: 62ab str r3, [r5, #40] ; 0x28
- if(fs2.cursor_position < 0)
- 8029cfe: db5e blt.n 8029dbe <History_GetPage+0xf6>
- break;
- else{
- fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs.slots_per_sector)%fs2.flash->sector_count;
- 8029d00: 4a31 ldr r2, [pc, #196] ; (8029dc8 <History_GetPage+0x100>)
- 8029d02: 68d1 ldr r1, [r2, #12]
- 8029d04: 692a ldr r2, [r5, #16]
- 8029d06: fb93 f1f1 sdiv r1, r3, r1
- 8029d0a: 1889 adds r1, r1, r2
- 8029d0c: 682a ldr r2, [r5, #0]
- 8029d0e: 6892 ldr r2, [r2, #8]
- 8029d10: fb91 f0f2 sdiv r0, r1, r2
- 8029d14: fb02 1210 mls r2, r2, r0, r1
- 8029d18: 622a str r2, [r5, #32]
- fs2.cursor.slot = fs2.cursor_position%fs2.slots_per_sector;
- 8029d1a: 68ea ldr r2, [r5, #12]
- 8029d1c: fb93 f1f2 sdiv r1, r3, r2
- 8029d20: fb02 3311 mls r3, r2, r1, r3
- 8029d24: 626b str r3, [r5, #36] ; 0x24
- }
- entry.type = LOG_LOGIN;
- log_fetch(&entry, portMAX_DELAY);
- 8029d26: f04f 31ff mov.w r1, #4294967295
- break;
- else{
- fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs.slots_per_sector)%fs2.flash->sector_count;
- fs2.cursor.slot = fs2.cursor_position%fs2.slots_per_sector;
- }
- entry.type = LOG_LOGIN;
- 8029d2a: 2305 movs r3, #5
- log_fetch(&entry, portMAX_DELAY);
- 8029d2c: a80e add r0, sp, #56 ; 0x38
- break;
- else{
- fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs.slots_per_sector)%fs2.flash->sector_count;
- fs2.cursor.slot = fs2.cursor_position%fs2.slots_per_sector;
- }
- entry.type = LOG_LOGIN;
- 8029d2e: f88d 303c strb.w r3, [sp, #60] ; 0x3c
- log_fetch(&entry, portMAX_DELAY);
- 8029d32: f7ff fe4f bl 80299d4 <log_fetch>
- strcat(str, "\"");
- 8029d36: 4925 ldr r1, [pc, #148] ; (8029dcc <History_GetPage+0x104>)
- 8029d38: 4620 mov r0, r4
- 8029d3a: f7f7 ff47 bl 8021bcc <strcat>
- strncat(str, logsStrShortRu[entry.type], (strlen(logsStrShortRu[entry.type]) ));
- 8029d3e: 4b24 ldr r3, [pc, #144] ; (8029dd0 <History_GetPage+0x108>)
- 8029d40: f89d 203c ldrb.w r2, [sp, #60] ; 0x3c
- 8029d44: f853 8022 ldr.w r8, [r3, r2, lsl #2]
- 8029d48: 4640 mov r0, r8
- 8029d4a: f7f8 f8b1 bl 8021eb0 <strlen>
- 8029d4e: 4641 mov r1, r8
- 8029d50: 4602 mov r2, r0
- 8029d52: 4620 mov r0, r4
- 8029d54: f7f8 f8dc bl 8021f10 <strncat>
- strcat(str, ";");
- 8029d58: 491e ldr r1, [pc, #120] ; (8029dd4 <History_GetPage+0x10c>)
- 8029d5a: 4620 mov r0, r4
- 8029d5c: f7f7 ff36 bl 8021bcc <strcat>
- strncat(str, entry.data, (strlen(entry.data) ));
- 8029d60: 4638 mov r0, r7
- 8029d62: f7f8 f8a5 bl 8021eb0 <strlen>
- 8029d66: 4639 mov r1, r7
- 8029d68: 4602 mov r2, r0
- 8029d6a: 4620 mov r0, r4
- 8029d6c: f7f8 f8d0 bl 8021f10 <strncat>
- strcat(str, ";");
- 8029d70: 4918 ldr r1, [pc, #96] ; (8029dd4 <History_GetPage+0x10c>)
- 8029d72: 4620 mov r0, r4
- 8029d74: f7f7 ff2a bl 8021bcc <strcat>
- TM_RTC_GetDateTimeFromUnix(&rtc_data, entry.timestamp);
- 8029d78: a805 add r0, sp, #20
- 8029d7a: 990e ldr r1, [sp, #56] ; 0x38
- 8029d7c: f7fc fc14 bl 80265a8 <TM_RTC_GetDateTimeFromUnix>
- sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i", rtc_data.date, rtc_data.month,
- 8029d80: f89d 101d ldrb.w r1, [sp, #29]
- 8029d84: f89d 201b ldrb.w r2, [sp, #27]
- 8029d88: 9100 str r1, [sp, #0]
- 8029d8a: f89d 1019 ldrb.w r1, [sp, #25]
- 8029d8e: f89d 301c ldrb.w r3, [sp, #28]
- 8029d92: 9101 str r1, [sp, #4]
- 8029d94: f89d 1018 ldrb.w r1, [sp, #24]
- 8029d98: 9102 str r1, [sp, #8]
- 8029d9a: f89d 1014 ldrb.w r1, [sp, #20]
- 8029d9e: a809 add r0, sp, #36 ; 0x24
- 8029da0: 9103 str r1, [sp, #12]
- 8029da2: 490d ldr r1, [pc, #52] ; (8029dd8 <History_GetPage+0x110>)
- 8029da4: f7fd fd36 bl 8027814 <tfp_sprintf>
- rtc_data.year, rtc_data.hours, rtc_data.minutes, rtc_data.seconds);
- strcat(str, buf);
- 8029da8: a909 add r1, sp, #36 ; 0x24
- 8029daa: 4620 mov r0, r4
- 8029dac: f7f7 ff0e bl 8021bcc <strcat>
- 8029db0: 3601 adds r6, #1
- strcat(str, "\",");
- 8029db2: 4620 mov r0, r4
- 8029db4: 4909 ldr r1, [pc, #36] ; (8029ddc <History_GetPage+0x114>)
- 8029db6: f7f7 ff09 bl 8021bcc <strcat>
- char buf[20];
- uint8_t i;
- int start =History_GetTotalSTRCount();//(fs.write.sector*fs.slots_per_sector + fs.write.slot);
- memset(buf, 0, 20);
- for(i=0; i < 10; i++){
- 8029dba: 2e0a cmp r6, #10
- 8029dbc: d19b bne.n 8029cf6 <History_GetPage+0x2e>
- sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i", rtc_data.date, rtc_data.month,
- rtc_data.year, rtc_data.hours, rtc_data.minutes, rtc_data.seconds);
- strcat(str, buf);
- strcat(str, "\",");
- }
- }
- 8029dbe: b01d add sp, #116 ; 0x74
- 8029dc0: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
- 8029dc4: 20000b68 .word 0x20000b68
- 8029dc8: 20000b94 .word 0x20000b94
- 8029dcc: 08044d03 .word 0x08044d03
- 8029dd0: 200006c4 .word 0x200006c4
- 8029dd4: 08045b19 .word 0x08045b19
- 8029dd8: 08039b66 .word 0x08039b66
- 8029ddc: 08039b84 .word 0x08039b84
- 08029de0 <History_GetData>:
- uint32_t History_GetData(int ptr, char *str, uint32_t size, bool start)
- {
- 8029de0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8029de4: f5ad 6d8b sub.w sp, sp, #1112 ; 0x458
- 8029de8: 4690 mov r8, r2
- log_entry_t entry;
- char buf[20];
- char temp_str[FILE_BUF_MAX_LEN];
- uint8_t i;
- uint16_t len;
- entry.type = LOG_LOGIN;
- 8029dea: 2205 movs r2, #5
- strcat(str, "\",");
- }
- }
- uint32_t History_GetData(int ptr, char *str, uint32_t size, bool start)
- {
- 8029dec: 4604 mov r4, r0
- 8029dee: 460d mov r5, r1
- log_entry_t entry;
- char buf[20];
- char temp_str[FILE_BUF_MAX_LEN];
- uint8_t i;
- uint16_t len;
- entry.type = LOG_LOGIN;
- 8029df0: f88d 203c strb.w r2, [sp, #60] ; 0x3c
- if(start)
- 8029df4: b123 cbz r3, 8029e00 <History_GetData+0x20>
- log_rewind(&entry, portMAX_DELAY);
- 8029df6: a80e add r0, sp, #56 ; 0x38
- 8029df8: f04f 31ff mov.w r1, #4294967295
- 8029dfc: f7ff fe0c bl 8029a18 <log_rewind>
- fs2.cursor_position = ptr/STRING_SIZE_HISTORY;
- 8029e00: 4b42 ldr r3, [pc, #264] ; (8029f0c <History_GetData+0x12c>)
- 8029e02: 2164 movs r1, #100 ; 0x64
- fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs2.slots_per_sector)%fs2.flash->sector_count;
- 8029e04: 68de ldr r6, [r3, #12]
- 8029e06: 691f ldr r7, [r3, #16]
- uint16_t len;
- entry.type = LOG_LOGIN;
- if(start)
- log_rewind(&entry, portMAX_DELAY);
- fs2.cursor_position = ptr/STRING_SIZE_HISTORY;
- 8029e08: fb94 f4f1 sdiv r4, r4, r1
- fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs2.slots_per_sector)%fs2.flash->sector_count;
- 8029e0c: fb94 f0f6 sdiv r0, r4, r6
- 8029e10: eb00 0e07 add.w lr, r0, r7
- 8029e14: 681f ldr r7, [r3, #0]
- uint16_t len;
- entry.type = LOG_LOGIN;
- if(start)
- log_rewind(&entry, portMAX_DELAY);
- fs2.cursor_position = ptr/STRING_SIZE_HISTORY;
- 8029e16: 629c str r4, [r3, #40] ; 0x28
- fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs2.slots_per_sector)%fs2.flash->sector_count;
- 8029e18: 68bf ldr r7, [r7, #8]
- 8029e1a: fb9e f2f7 sdiv r2, lr, r7
- fs2.cursor.slot = fs2.cursor_position%fs2.slots_per_sector;
- 8029e1e: fb06 4410 mls r4, r6, r0, r4
- entry.type = LOG_LOGIN;
- if(start)
- log_rewind(&entry, portMAX_DELAY);
- fs2.cursor_position = ptr/STRING_SIZE_HISTORY;
- fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs2.slots_per_sector)%fs2.flash->sector_count;
- 8029e22: fb07 e712 mls r7, r7, r2, lr
- fs2.cursor.slot = fs2.cursor_position%fs2.slots_per_sector;
- 8029e26: 625c str r4, [r3, #36] ; 0x24
- entry.type = LOG_LOGIN;
- if(start)
- log_rewind(&entry, portMAX_DELAY);
- fs2.cursor_position = ptr/STRING_SIZE_HISTORY;
- fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs2.slots_per_sector)%fs2.flash->sector_count;
- 8029e28: 621f str r7, [r3, #32]
- fs2.cursor.slot = fs2.cursor_position%fs2.slots_per_sector;
- for(i = 0; i < size/STRING_SIZE_HISTORY; i++)
- 8029e2a: fbb8 f8f1 udiv r8, r8, r1
- 8029e2e: 2400 movs r4, #0
- {
- memset(temp_str, 0, 100);
- log_fetch(&entry, portMAX_DELAY);
- strncat(temp_str, logsStrShortRu[entry.type], (strlen(logsStrShortRu[entry.type])));
- strcat(temp_str, ";");
- strncat(temp_str, entry.data, (strlen(entry.data)));
- 8029e30: f10d 063d add.w r6, sp, #61 ; 0x3d
- fs2.cursor_position = ptr/STRING_SIZE_HISTORY;
- fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs2.slots_per_sector)%fs2.flash->sector_count;
- fs2.cursor.slot = fs2.cursor_position%fs2.slots_per_sector;
- for(i = 0; i < size/STRING_SIZE_HISTORY; i++)
- 8029e34: e05f b.n 8029ef6 <History_GetData+0x116>
- {
- memset(temp_str, 0, 100);
- 8029e36: 2264 movs r2, #100 ; 0x64
- 8029e38: 2100 movs r1, #0
- 8029e3a: a81c add r0, sp, #112 ; 0x70
- 8029e3c: f7f7 fe60 bl 8021b00 <memset>
- log_fetch(&entry, portMAX_DELAY);
- 8029e40: f04f 31ff mov.w r1, #4294967295
- 8029e44: a80e add r0, sp, #56 ; 0x38
- 8029e46: f7ff fdc5 bl 80299d4 <log_fetch>
- strncat(temp_str, logsStrShortRu[entry.type], (strlen(logsStrShortRu[entry.type])));
- 8029e4a: 4b31 ldr r3, [pc, #196] ; (8029f10 <History_GetData+0x130>)
- 8029e4c: f89d 203c ldrb.w r2, [sp, #60] ; 0x3c
- 8029e50: f853 7022 ldr.w r7, [r3, r2, lsl #2]
- 8029e54: 4638 mov r0, r7
- 8029e56: f7f8 f82b bl 8021eb0 <strlen>
- 8029e5a: 4639 mov r1, r7
- 8029e5c: 4602 mov r2, r0
- 8029e5e: a81c add r0, sp, #112 ; 0x70
- 8029e60: f7f8 f856 bl 8021f10 <strncat>
- strcat(temp_str, ";");
- 8029e64: 492b ldr r1, [pc, #172] ; (8029f14 <History_GetData+0x134>)
- 8029e66: a81c add r0, sp, #112 ; 0x70
- 8029e68: f7f7 feb0 bl 8021bcc <strcat>
- strncat(temp_str, entry.data, (strlen(entry.data)));
- 8029e6c: 4630 mov r0, r6
- 8029e6e: f7f8 f81f bl 8021eb0 <strlen>
- 8029e72: 4631 mov r1, r6
- 8029e74: 4602 mov r2, r0
- 8029e76: a81c add r0, sp, #112 ; 0x70
- 8029e78: f7f8 f84a bl 8021f10 <strncat>
- strcat(temp_str, ";");
- 8029e7c: 4925 ldr r1, [pc, #148] ; (8029f14 <History_GetData+0x134>)
- 8029e7e: a81c add r0, sp, #112 ; 0x70
- 8029e80: f7f7 fea4 bl 8021bcc <strcat>
- TM_RTC_GetDateTimeFromUnix(&rtc_data, entry.timestamp);
- 8029e84: a805 add r0, sp, #20
- 8029e86: 990e ldr r1, [sp, #56] ; 0x38
- 8029e88: f7fc fb8e bl 80265a8 <TM_RTC_GetDateTimeFromUnix>
- sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i", rtc_data.date, rtc_data.month,
- 8029e8c: f89d 101d ldrb.w r1, [sp, #29]
- 8029e90: f89d 301c ldrb.w r3, [sp, #28]
- 8029e94: 9100 str r1, [sp, #0]
- 8029e96: f89d 1019 ldrb.w r1, [sp, #25]
- 8029e9a: f89d 201b ldrb.w r2, [sp, #27]
- 8029e9e: 9101 str r1, [sp, #4]
- 8029ea0: f89d 1018 ldrb.w r1, [sp, #24]
- 8029ea4: 9102 str r1, [sp, #8]
- 8029ea6: f89d 1014 ldrb.w r1, [sp, #20]
- 8029eaa: a809 add r0, sp, #36 ; 0x24
- 8029eac: 9103 str r1, [sp, #12]
- 8029eae: 491a ldr r1, [pc, #104] ; (8029f18 <History_GetData+0x138>)
- 8029eb0: f7fd fcb0 bl 8027814 <tfp_sprintf>
- rtc_data.year, rtc_data.hours, rtc_data.minutes, rtc_data.seconds);
- strcat(temp_str, buf);
- 8029eb4: a909 add r1, sp, #36 ; 0x24
- 8029eb6: a81c add r0, sp, #112 ; 0x70
- 8029eb8: f7f7 fe88 bl 8021bcc <strcat>
- len = strlen(temp_str);
- 8029ebc: a81c add r0, sp, #112 ; 0x70
- 8029ebe: f7f7 fff7 bl 8021eb0 <strlen>
- if (len <= STRING_SIZE_HISTORY - 1)
- 8029ec2: b283 uxth r3, r0
- 8029ec4: 2b63 cmp r3, #99 ; 0x63
- 8029ec6: d80c bhi.n 8029ee2 <History_GetData+0x102>
- strncat(str, temp_str, STRING_SIZE_HISTORY);
- }
- return strlen(str);
- }
- 8029ec8: 461a mov r2, r3
- len = strlen(temp_str);
- if (len <= STRING_SIZE_HISTORY - 1)
- {
- memset(&temp_str[len], ' ', STRING_SIZE_HISTORY - len - 1);
- 8029eca: ab1c add r3, sp, #112 ; 0x70
- 8029ecc: 1898 adds r0, r3, r2
- 8029ece: 2120 movs r1, #32
- 8029ed0: f1c2 0263 rsb r2, r2, #99 ; 0x63
- 8029ed4: f7f7 fe14 bl 8021b00 <memset>
- strcat(temp_str, "\n");
- 8029ed8: a81c add r0, sp, #112 ; 0x70
- 8029eda: 4910 ldr r1, [pc, #64] ; (8029f1c <History_GetData+0x13c>)
- 8029edc: f7f7 fe76 bl 8021bcc <strcat>
- 8029ee0: e002 b.n 8029ee8 <History_GetData+0x108>
- }
- else
- {
- temp_str[STRING_SIZE - 1] = 0xa;
- 8029ee2: 230a movs r3, #10
- 8029ee4: f88d 30af strb.w r3, [sp, #175] ; 0xaf
- }
- strncat(str, temp_str, STRING_SIZE_HISTORY);
- 8029ee8: 4628 mov r0, r5
- 8029eea: a91c add r1, sp, #112 ; 0x70
- 8029eec: 2264 movs r2, #100 ; 0x64
- 8029eee: f7f8 f80f bl 8021f10 <strncat>
- fs2.cursor_position = ptr/STRING_SIZE_HISTORY;
- fs2.cursor.sector = (fs2.read.sector + fs2.cursor_position/fs2.slots_per_sector)%fs2.flash->sector_count;
- fs2.cursor.slot = fs2.cursor_position%fs2.slots_per_sector;
- for(i = 0; i < size/STRING_SIZE_HISTORY; i++)
- 8029ef2: 3401 adds r4, #1
- 8029ef4: b2e4 uxtb r4, r4
- 8029ef6: 4544 cmp r4, r8
- 8029ef8: d39d bcc.n 8029e36 <History_GetData+0x56>
- temp_str[STRING_SIZE - 1] = 0xa;
- }
- strncat(str, temp_str, STRING_SIZE_HISTORY);
- }
- return strlen(str);
- 8029efa: 4628 mov r0, r5
- 8029efc: f7f7 ffd8 bl 8021eb0 <strlen>
- }
- 8029f00: b016 add sp, #88 ; 0x58
- 8029f02: f50d 6d80 add.w sp, sp, #1024 ; 0x400
- 8029f06: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 8029f0a: bf00 nop
- 8029f0c: 20000b68 .word 0x20000b68
- 8029f10: 200006c4 .word 0x200006c4
- 8029f14: 08045b19 .word 0x08045b19
- 8029f18: 08039b66 .word 0x08039b66
- 8029f1c: 08041133 .word 0x08041133
- 08029f20 <_slot_address>:
- uint32_t version;
- };
- static int _sector_address(struct ringfs *fs, int sector_offset)
- {
- return (fs->flash->sector_offset + sector_offset) * fs->flash->sector_size;
- 8029f20: 6803 ldr r3, [r0, #0]
- 8029f22: 680a ldr r2, [r1, #0]
- struct slot_header {
- uint32_t status;
- };
- static int _slot_address(struct ringfs *fs, struct ringfs_loc *loc)
- {
- 8029f24: b510 push {r4, lr}
- uint32_t version;
- };
- static int _sector_address(struct ringfs *fs, int sector_offset)
- {
- return (fs->flash->sector_offset + sector_offset) * fs->flash->sector_size;
- 8029f26: 685c ldr r4, [r3, #4]
- 8029f28: 18a2 adds r2, r4, r2
- 8029f2a: 681c ldr r4, [r3, #0]
- static int _slot_address(struct ringfs *fs, struct ringfs_loc *loc)
- {
- return _sector_address(fs, loc->sector) +
- sizeof(struct sector_header) +
- (sizeof(struct slot_header) + fs->object_size) * loc->slot;
- 8029f2c: 6883 ldr r3, [r0, #8]
- 8029f2e: 6848 ldr r0, [r1, #4]
- 8029f30: 3304 adds r3, #4
- 8029f32: 4343 muls r3, r0
- };
- static int _slot_address(struct ringfs *fs, struct ringfs_loc *loc)
- {
- return _sector_address(fs, loc->sector) +
- sizeof(struct sector_header) +
- 8029f34: fb04 3002 mla r0, r4, r2, r3
- (sizeof(struct slot_header) + fs->object_size) * loc->slot;
- }
- 8029f38: 3008 adds r0, #8
- 8029f3a: bd10 pop {r4, pc}
- 08029f3c <_slot_get_status>:
- static int _slot_get_status(struct ringfs *fs, struct ringfs_loc *loc, uint32_t *status)
- {
- 8029f3c: b570 push {r4, r5, r6, lr}
- return fs->flash->read(fs->flash,
- 8029f3e: 6804 ldr r4, [r0, #0]
- sizeof(struct sector_header) +
- (sizeof(struct slot_header) + fs->object_size) * loc->slot;
- }
- static int _slot_get_status(struct ringfs *fs, struct ringfs_loc *loc, uint32_t *status)
- {
- 8029f40: 4616 mov r6, r2
- return fs->flash->read(fs->flash,
- 8029f42: f7ff ffed bl 8029f20 <_slot_address>
- 8029f46: 6965 ldr r5, [r4, #20]
- 8029f48: 4601 mov r1, r0
- 8029f4a: 4632 mov r2, r6
- 8029f4c: 4620 mov r0, r4
- 8029f4e: 2304 movs r3, #4
- 8029f50: 47a8 blx r5
- _slot_address(fs, loc) + offsetof(struct slot_header, status),
- status, sizeof(*status));
- }
- 8029f52: bd70 pop {r4, r5, r6, pc}
- 08029f54 <_slot_set_status>:
- static int _slot_set_status(struct ringfs *fs, struct ringfs_loc *loc, uint32_t status)
- {
- 8029f54: b573 push {r0, r1, r4, r5, r6, lr}
- 8029f56: ac02 add r4, sp, #8
- return fs->flash->program(fs->flash,
- 8029f58: 6805 ldr r5, [r0, #0]
- _slot_address(fs, loc) + offsetof(struct slot_header, status),
- status, sizeof(*status));
- }
- static int _slot_set_status(struct ringfs *fs, struct ringfs_loc *loc, uint32_t status)
- {
- 8029f5a: f844 2d04 str.w r2, [r4, #-4]!
- return fs->flash->program(fs->flash,
- 8029f5e: f7ff ffdf bl 8029f20 <_slot_address>
- 8029f62: 692e ldr r6, [r5, #16]
- 8029f64: 4601 mov r1, r0
- 8029f66: 4622 mov r2, r4
- 8029f68: 4628 mov r0, r5
- 8029f6a: 2304 movs r3, #4
- 8029f6c: 47b0 blx r6
- _slot_address(fs, loc) + offsetof(struct slot_header, status),
- &status, sizeof(status));
- }
- 8029f6e: bd7c pop {r2, r3, r4, r5, r6, pc}
- 08029f70 <_sector_get_status>:
- return (fs->flash->sector_offset + sector_offset) * fs->flash->sector_size;
- }
- static int _sector_get_status(struct ringfs *fs, int sector, uint32_t *status)
- {
- return fs->flash->read(fs->flash,
- 8029f70: 6800 ldr r0, [r0, #0]
- uint32_t version;
- };
- static int _sector_address(struct ringfs *fs, int sector_offset)
- {
- return (fs->flash->sector_offset + sector_offset) * fs->flash->sector_size;
- 8029f72: 6843 ldr r3, [r0, #4]
- 8029f74: 18cb adds r3, r1, r3
- 8029f76: 6801 ldr r1, [r0, #0]
- }
- static int _sector_get_status(struct ringfs *fs, int sector, uint32_t *status)
- {
- 8029f78: b510 push {r4, lr}
- return fs->flash->read(fs->flash,
- 8029f7a: 4359 muls r1, r3
- 8029f7c: 6944 ldr r4, [r0, #20]
- 8029f7e: 2304 movs r3, #4
- 8029f80: 47a0 blx r4
- _sector_address(fs, sector) + offsetof(struct sector_header, status),
- status, sizeof(*status));
- }
- 8029f82: bd10 pop {r4, pc}
- 08029f84 <_sector_set_status>:
- static int _sector_set_status(struct ringfs *fs, int sector, uint32_t status)
- {
- 8029f84: b513 push {r0, r1, r4, lr}
- return fs->flash->program(fs->flash,
- 8029f86: 6800 ldr r0, [r0, #0]
- _sector_address(fs, sector) + offsetof(struct sector_header, status),
- status, sizeof(*status));
- }
- static int _sector_set_status(struct ringfs *fs, int sector, uint32_t status)
- {
- 8029f88: ab02 add r3, sp, #8
- return fs->flash->program(fs->flash,
- 8029f8a: 6904 ldr r4, [r0, #16]
- _sector_address(fs, sector) + offsetof(struct sector_header, status),
- status, sizeof(*status));
- }
- static int _sector_set_status(struct ringfs *fs, int sector, uint32_t status)
- {
- 8029f8c: f843 2d04 str.w r2, [r3, #-4]!
- uint32_t version;
- };
- static int _sector_address(struct ringfs *fs, int sector_offset)
- {
- return (fs->flash->sector_offset + sector_offset) * fs->flash->sector_size;
- 8029f90: 6842 ldr r2, [r0, #4]
- 8029f92: 188a adds r2, r1, r2
- 8029f94: 6801 ldr r1, [r0, #0]
- status, sizeof(*status));
- }
- static int _sector_set_status(struct ringfs *fs, int sector, uint32_t status)
- {
- return fs->flash->program(fs->flash,
- 8029f96: 4351 muls r1, r2
- 8029f98: 461a mov r2, r3
- 8029f9a: 2304 movs r3, #4
- 8029f9c: 47a0 blx r4
- _sector_address(fs, sector) + offsetof(struct sector_header, status),
- &status, sizeof(status));
- }
- 8029f9e: bd1c pop {r2, r3, r4, pc}
- 08029fa0 <_sector_free>:
- static int _sector_free(struct ringfs *fs, int sector)
- {
- 8029fa0: b5f8 push {r3, r4, r5, r6, r7, lr}
- uint32_t version;
- };
- static int _sector_address(struct ringfs *fs, int sector_offset)
- {
- return (fs->flash->sector_offset + sector_offset) * fs->flash->sector_size;
- 8029fa2: 6803 ldr r3, [r0, #0]
- 8029fa4: cb28 ldmia r3, {r3, r5}
- _sector_address(fs, sector) + offsetof(struct sector_header, status),
- &status, sizeof(status));
- }
- static int _sector_free(struct ringfs *fs, int sector)
- {
- 8029fa6: 4604 mov r4, r0
- uint32_t version;
- };
- static int _sector_address(struct ringfs *fs, int sector_offset)
- {
- return (fs->flash->sector_offset + sector_offset) * fs->flash->sector_size;
- 8029fa8: 194d adds r5, r1, r5
- }
- static int _sector_free(struct ringfs *fs, int sector)
- {
- int sector_addr = _sector_address(fs, sector);
- _sector_set_status(fs, sector, SECTOR_ERASING);
- 8029faa: f04f 427f mov.w r2, #4278190080 ; 0xff000000
- uint32_t version;
- };
- static int _sector_address(struct ringfs *fs, int sector_offset)
- {
- return (fs->flash->sector_offset + sector_offset) * fs->flash->sector_size;
- 8029fae: 435d muls r5, r3
- _sector_address(fs, sector) + offsetof(struct sector_header, status),
- &status, sizeof(status));
- }
- static int _sector_free(struct ringfs *fs, int sector)
- {
- 8029fb0: 460e mov r6, r1
- int sector_addr = _sector_address(fs, sector);
- _sector_set_status(fs, sector, SECTOR_ERASING);
- 8029fb2: f7ff ffe7 bl 8029f84 <_sector_set_status>
- fs->flash->sector_erase(fs->flash, sector_addr);
- 8029fb6: 6820 ldr r0, [r4, #0]
- 8029fb8: 4629 mov r1, r5
- 8029fba: 68c3 ldr r3, [r0, #12]
- 8029fbc: 4798 blx r3
- fs->flash->program(fs->flash,
- 8029fbe: 4622 mov r2, r4
- 8029fc0: 1d29 adds r1, r5, #4
- 8029fc2: f852 0b04 ldr.w r0, [r2], #4
- 8029fc6: 2304 movs r3, #4
- 8029fc8: 6907 ldr r7, [r0, #16]
- 8029fca: 47b8 blx r7
- sector_addr + offsetof(struct sector_header, version),
- &fs->version, sizeof(fs->version));
- _sector_set_status(fs, sector, SECTOR_FREE);
- 8029fcc: 4620 mov r0, r4
- 8029fce: 4631 mov r1, r6
- 8029fd0: f06f 02ff mvn.w r2, #255 ; 0xff
- 8029fd4: f7ff ffd6 bl 8029f84 <_sector_set_status>
- return 0;
- }
- 8029fd8: 2000 movs r0, #0
- 8029fda: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 08029fdc <_loc_advance_slot>:
- }
- /** Advance a location to the next slot, advancing the sector too if needed. */
- static void _loc_advance_slot(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot++;
- 8029fdc: 684b ldr r3, [r1, #4]
- if (loc->slot >= fs->slots_per_sector)
- 8029fde: 68c2 ldr r2, [r0, #12]
- }
- /** Advance a location to the next slot, advancing the sector too if needed. */
- static void _loc_advance_slot(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot++;
- 8029fe0: 3301 adds r3, #1
- if (loc->slot >= fs->slots_per_sector)
- 8029fe2: 4293 cmp r3, r2
- }
- /** Advance a location to the next slot, advancing the sector too if needed. */
- static void _loc_advance_slot(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot++;
- 8029fe4: 604b str r3, [r1, #4]
- if (loc->slot >= fs->slots_per_sector)
- 8029fe6: db09 blt.n 8029ffc <_loc_advance_slot+0x20>
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- loc->sector++;
- if (loc->sector >= fs->flash->sector_count)
- 8029fe8: 6800 ldr r0, [r0, #0]
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- loc->sector++;
- 8029fea: 680a ldr r2, [r1, #0]
- if (loc->sector >= fs->flash->sector_count)
- 8029fec: 6880 ldr r0, [r0, #8]
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- loc->sector++;
- 8029fee: 3201 adds r2, #1
- }
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- 8029ff0: 2300 movs r3, #0
- loc->sector++;
- if (loc->sector >= fs->flash->sector_count)
- 8029ff2: 4282 cmp r2, r0
- }
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- 8029ff4: e881 000c stmia.w r1, {r2, r3}
- loc->sector++;
- if (loc->sector >= fs->flash->sector_count)
- loc->sector = 0;
- 8029ff8: bfa8 it ge
- 8029ffa: 600b strge r3, [r1, #0]
- 8029ffc: 4770 bx lr
- 08029ffe <ringfs_init>:
- int ringfs_init(struct ringfs *fs, struct ringfs_flash_partition *flash, uint32_t version, int object_size)
- {
- /* Copy arguments to instance. */
- fs->flash = flash;
- fs->version = version;
- fs->object_size = object_size;
- 8029ffe: e880 000e stmia.w r0, {r1, r2, r3}
- /* Precalculate commonly used values. */
- fs->slots_per_sector = (fs->flash->sector_size - sizeof(struct sector_header)) /
- 802a002: 680a ldr r2, [r1, #0]
- (sizeof(struct slot_header) + fs->object_size);
- 802a004: 3304 adds r3, #4
- fs->flash = flash;
- fs->version = version;
- fs->object_size = object_size;
- /* Precalculate commonly used values. */
- fs->slots_per_sector = (fs->flash->sector_size - sizeof(struct sector_header)) /
- 802a006: 3a08 subs r2, #8
- 802a008: fbb2 f3f3 udiv r3, r2, r3
- 802a00c: 60c3 str r3, [r0, #12]
- (sizeof(struct slot_header) + fs->object_size);
- return 0;
- }
- 802a00e: 2000 movs r0, #0
- 802a010: 4770 bx lr
- 0802a012 <ringfs_format>:
- int ringfs_format(struct ringfs *fs)
- {
- 802a012: b538 push {r3, r4, r5, lr}
- 802a014: 4604 mov r4, r0
- /* Mark all sectors to prevent half-erased filesystems. */
- for (int sector=0; sector<fs->flash->sector_count; sector++)
- 802a016: 2500 movs r5, #0
- 802a018: e005 b.n 802a026 <ringfs_format+0x14>
- _sector_set_status(fs, sector, SECTOR_FORMATTING);
- 802a01a: 4629 mov r1, r5
- 802a01c: 4620 mov r0, r4
- 802a01e: 2200 movs r2, #0
- 802a020: f7ff ffb0 bl 8029f84 <_sector_set_status>
- }
- int ringfs_format(struct ringfs *fs)
- {
- /* Mark all sectors to prevent half-erased filesystems. */
- for (int sector=0; sector<fs->flash->sector_count; sector++)
- 802a024: 3501 adds r5, #1
- 802a026: 6823 ldr r3, [r4, #0]
- 802a028: 689b ldr r3, [r3, #8]
- 802a02a: 429d cmp r5, r3
- 802a02c: dbf5 blt.n 802a01a <ringfs_format+0x8>
- 802a02e: 2500 movs r5, #0
- 802a030: e004 b.n 802a03c <ringfs_format+0x2a>
- _sector_set_status(fs, sector, SECTOR_FORMATTING);
- /* Erase, update version, mark as free. */
- for (int sector=0; sector<fs->flash->sector_count; sector++)
- _sector_free(fs, sector);
- 802a032: 4629 mov r1, r5
- 802a034: 4620 mov r0, r4
- 802a036: f7ff ffb3 bl 8029fa0 <_sector_free>
- /* Mark all sectors to prevent half-erased filesystems. */
- for (int sector=0; sector<fs->flash->sector_count; sector++)
- _sector_set_status(fs, sector, SECTOR_FORMATTING);
- /* Erase, update version, mark as free. */
- for (int sector=0; sector<fs->flash->sector_count; sector++)
- 802a03a: 3501 adds r5, #1
- 802a03c: 6823 ldr r3, [r4, #0]
- 802a03e: 689b ldr r3, [r3, #8]
- 802a040: 429d cmp r5, r3
- 802a042: dbf6 blt.n 802a032 <ringfs_format+0x20>
- _sector_free(fs, sector);
- /* Start reading & writing at the first sector. */
- fs->read.sector = 0;
- 802a044: 2000 movs r0, #0
- 802a046: 6120 str r0, [r4, #16]
- fs->read.slot = 0;
- 802a048: 6160 str r0, [r4, #20]
- fs->write.sector = 0;
- 802a04a: 61a0 str r0, [r4, #24]
- fs->write.slot = 0;
- 802a04c: 61e0 str r0, [r4, #28]
- fs->cursor.sector = 0;
- 802a04e: 6220 str r0, [r4, #32]
- fs->cursor.slot = 0;
- 802a050: 6260 str r0, [r4, #36] ; 0x24
- return 0;
- }
- 802a052: bd38 pop {r3, r4, r5, pc}
- 0802a054 <ringfs_count_estimate>:
- return fs->slots_per_sector * (fs->flash->sector_count - 1);
- }
- int ringfs_count_estimate(struct ringfs *fs)
- {
- int sector_diff = (fs->write.sector - fs->read.sector + fs->flash->sector_count) %
- 802a054: 6803 ldr r3, [r0, #0]
- 802a056: 6981 ldr r1, [r0, #24]
- 802a058: 6902 ldr r2, [r0, #16]
- 802a05a: 689b ldr r3, [r3, #8]
- 802a05c: 1a8a subs r2, r1, r2
- 802a05e: 18d2 adds r2, r2, r3
- 802a060: fb92 f1f3 sdiv r1, r2, r3
- 802a064: fb03 2311 mls r3, r3, r1, r2
- {
- return fs->slots_per_sector * (fs->flash->sector_count - 1);
- }
- int ringfs_count_estimate(struct ringfs *fs)
- {
- 802a068: b510 push {r4, lr}
- int sector_diff = (fs->write.sector - fs->read.sector + fs->flash->sector_count) %
- fs->flash->sector_count;
- return sector_diff * fs->slots_per_sector + fs->write.slot - fs->read.slot;
- 802a06a: 69c1 ldr r1, [r0, #28]
- 802a06c: 68c4 ldr r4, [r0, #12]
- 802a06e: 6940 ldr r0, [r0, #20]
- 802a070: fb04 1103 mla r1, r4, r3, r1
- }
- 802a074: 1a08 subs r0, r1, r0
- 802a076: bd10 pop {r4, pc}
- 0802a078 <ringfs_append>:
- * - the next sector: it must be free (invariant)
- * - the next-next sector: read & cursor heads are moved there if needed
- */
- /* Make sure the next sector is free. */
- int next_sector = (fs->write.sector+1) % fs->flash->sector_count;
- 802a078: 6803 ldr r3, [r0, #0]
- int ringfs_cursor_position(struct ringfs *fs) {
- return fs->cursor_position;
- }
- int ringfs_append(struct ringfs *fs, const void *object)
- {
- 802a07a: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
- * - the next sector: it must be free (invariant)
- * - the next-next sector: read & cursor heads are moved there if needed
- */
- /* Make sure the next sector is free. */
- int next_sector = (fs->write.sector+1) % fs->flash->sector_count;
- 802a07c: 6985 ldr r5, [r0, #24]
- 802a07e: 689b ldr r3, [r3, #8]
- 802a080: 3501 adds r5, #1
- 802a082: fb95 f2f3 sdiv r2, r5, r3
- 802a086: fb03 5512 mls r5, r3, r2, r5
- int ringfs_cursor_position(struct ringfs *fs) {
- return fs->cursor_position;
- }
- int ringfs_append(struct ringfs *fs, const void *object)
- {
- 802a08a: 460f mov r7, r1
- * - the next-next sector: read & cursor heads are moved there if needed
- */
- /* Make sure the next sector is free. */
- int next_sector = (fs->write.sector+1) % fs->flash->sector_count;
- _sector_get_status(fs, next_sector, &status);
- 802a08c: aa01 add r2, sp, #4
- 802a08e: 4629 mov r1, r5
- int ringfs_cursor_position(struct ringfs *fs) {
- return fs->cursor_position;
- }
- int ringfs_append(struct ringfs *fs, const void *object)
- {
- 802a090: 4604 mov r4, r0
- * - the next-next sector: read & cursor heads are moved there if needed
- */
- /* Make sure the next sector is free. */
- int next_sector = (fs->write.sector+1) % fs->flash->sector_count;
- _sector_get_status(fs, next_sector, &status);
- 802a092: f7ff ff6d bl 8029f70 <_sector_get_status>
- if (status != SECTOR_FREE) {
- 802a096: 9b01 ldr r3, [sp, #4]
- 802a098: f513 7f80 cmn.w r3, #256 ; 0x100
- 802a09c: d01b beq.n 802a0d6 <ringfs_append+0x5e>
- /* Next sector must be freed. But first... */
- /* Move the read & cursor heads out of the way. */
- if (fs->read.sector == next_sector)
- 802a09e: 6923 ldr r3, [r4, #16]
- 802a0a0: 42ab cmp r3, r5
- 802a0a2: d108 bne.n 802a0b6 <ringfs_append+0x3e>
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- loc->sector++;
- if (loc->sector >= fs->flash->sector_count)
- 802a0a4: 6821 ldr r1, [r4, #0]
- 802a0a6: 6889 ldr r1, [r1, #8]
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- loc->sector++;
- 802a0a8: 1c6a adds r2, r5, #1
- }
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- 802a0aa: 2300 movs r3, #0
- loc->sector++;
- if (loc->sector >= fs->flash->sector_count)
- 802a0ac: 428a cmp r2, r1
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- loc->sector++;
- 802a0ae: 6122 str r2, [r4, #16]
- }
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- 802a0b0: 6163 str r3, [r4, #20]
- loc->sector++;
- if (loc->sector >= fs->flash->sector_count)
- loc->sector = 0;
- 802a0b2: bfa8 it ge
- 802a0b4: 6123 strge r3, [r4, #16]
- /* Next sector must be freed. But first... */
- /* Move the read & cursor heads out of the way. */
- if (fs->read.sector == next_sector)
- _loc_advance_sector(fs, &fs->read);
- if (fs->cursor.sector == next_sector)
- 802a0b6: 6a23 ldr r3, [r4, #32]
- 802a0b8: 42ab cmp r3, r5
- 802a0ba: d108 bne.n 802a0ce <ringfs_append+0x56>
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- loc->sector++;
- if (loc->sector >= fs->flash->sector_count)
- 802a0bc: 6821 ldr r1, [r4, #0]
- 802a0be: 6889 ldr r1, [r1, #8]
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- loc->sector++;
- 802a0c0: 1c6a adds r2, r5, #1
- }
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- 802a0c2: 2300 movs r3, #0
- loc->sector++;
- if (loc->sector >= fs->flash->sector_count)
- 802a0c4: 428a cmp r2, r1
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- loc->sector++;
- 802a0c6: 6222 str r2, [r4, #32]
- }
- /** Advance a location to the beginning of the next sector. */
- static void _loc_advance_sector(struct ringfs *fs, struct ringfs_loc *loc)
- {
- loc->slot = 0;
- 802a0c8: 6263 str r3, [r4, #36] ; 0x24
- loc->sector++;
- if (loc->sector >= fs->flash->sector_count)
- loc->sector = 0;
- 802a0ca: bfa8 it ge
- 802a0cc: 6223 strge r3, [r4, #32]
- _loc_advance_sector(fs, &fs->read);
- if (fs->cursor.sector == next_sector)
- _loc_advance_sector(fs, &fs->cursor);
- /* Free the next sector. */
- _sector_free(fs, next_sector);
- 802a0ce: 4620 mov r0, r4
- 802a0d0: 4629 mov r1, r5
- 802a0d2: f7ff ff65 bl 8029fa0 <_sector_free>
- }
- /* Now we can make sure the current write sector is writable. */
- _sector_get_status(fs, fs->write.sector, &status);
- 802a0d6: 4620 mov r0, r4
- 802a0d8: 69a1 ldr r1, [r4, #24]
- 802a0da: aa01 add r2, sp, #4
- 802a0dc: f7ff ff48 bl 8029f70 <_sector_get_status>
- if (status == SECTOR_FREE) {
- 802a0e0: 9b01 ldr r3, [sp, #4]
- 802a0e2: f513 7f80 cmn.w r3, #256 ; 0x100
- 802a0e6: d105 bne.n 802a0f4 <ringfs_append+0x7c>
- /* Free sector. Mark as used. */
- _sector_set_status(fs, fs->write.sector, SECTOR_IN_USE);
- 802a0e8: 4620 mov r0, r4
- 802a0ea: 69a1 ldr r1, [r4, #24]
- 802a0ec: 4a15 ldr r2, [pc, #84] ; (802a144 <ringfs_append+0xcc>)
- 802a0ee: f7ff ff49 bl 8029f84 <_sector_set_status>
- 802a0f2: e008 b.n 802a106 <ringfs_append+0x8e>
- } else if (status != SECTOR_IN_USE) {
- 802a0f4: f513 3f80 cmn.w r3, #65536 ; 0x10000
- 802a0f8: d005 beq.n 802a106 <ringfs_append+0x8e>
- printf("ringfs_append: corrupted filesystem\r\n");
- 802a0fa: 4813 ldr r0, [pc, #76] ; (802a148 <ringfs_append+0xd0>)
- 802a0fc: f7fd fb3e bl 802777c <tfp_printf>
- return -1;
- 802a100: f04f 30ff mov.w r0, #4294967295
- 802a104: e01d b.n 802a142 <ringfs_append+0xca>
- }
- /* Preallocate slot. */
- _slot_set_status(fs, &fs->write, SLOT_RESERVED);
- 802a106: f104 0518 add.w r5, r4, #24
- 802a10a: f06f 02ff mvn.w r2, #255 ; 0xff
- 802a10e: 4629 mov r1, r5
- 802a110: 4620 mov r0, r4
- 802a112: f7ff ff1f bl 8029f54 <_slot_set_status>
- /* Write object. */
- fs->flash->program(fs->flash,
- _slot_address(fs, &fs->write) + sizeof(struct slot_header),
- 802a116: 4629 mov r1, r5
- 802a118: 4620 mov r0, r4
- 802a11a: f7ff ff01 bl 8029f20 <_slot_address>
- /* Preallocate slot. */
- _slot_set_status(fs, &fs->write, SLOT_RESERVED);
- /* Write object. */
- fs->flash->program(fs->flash,
- 802a11e: 6826 ldr r6, [r4, #0]
- 802a120: 68a3 ldr r3, [r4, #8]
- 802a122: f8d6 c010 ldr.w ip, [r6, #16]
- _slot_address(fs, &fs->write) + sizeof(struct slot_header),
- 802a126: 1d01 adds r1, r0, #4
- /* Preallocate slot. */
- _slot_set_status(fs, &fs->write, SLOT_RESERVED);
- /* Write object. */
- fs->flash->program(fs->flash,
- 802a128: 463a mov r2, r7
- 802a12a: 4630 mov r0, r6
- 802a12c: 47e0 blx ip
- _slot_address(fs, &fs->write) + sizeof(struct slot_header),
- object, fs->object_size);
- /* Commit write. */
- _slot_set_status(fs, &fs->write, SLOT_VALID);
- 802a12e: 4629 mov r1, r5
- 802a130: 4a04 ldr r2, [pc, #16] ; (802a144 <ringfs_append+0xcc>)
- 802a132: 4620 mov r0, r4
- 802a134: f7ff ff0e bl 8029f54 <_slot_set_status>
- /* Advance the write head. */
- _loc_advance_slot(fs, &fs->write);
- 802a138: 4620 mov r0, r4
- 802a13a: 4629 mov r1, r5
- 802a13c: f7ff ff4e bl 8029fdc <_loc_advance_slot>
- return 0;
- 802a140: 2000 movs r0, #0
- }
- 802a142: bdfe pop {r1, r2, r3, r4, r5, r6, r7, pc}
- 802a144: ffff0000 .word 0xffff0000
- 802a148: 08039dac .word 0x08039dac
- 0802a14c <ringfs_fetch>:
- int ringfs_fetch(struct ringfs *fs, void *object)
- {
- 802a14c: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr}
- 802a150: 4604 mov r4, r0
- 802a152: 4688 mov r8, r1
- /* Advance forward in search of a valid slot. */
- while (!_loc_equal(&fs->cursor, &fs->write)) {
- 802a154: f100 0520 add.w r5, r0, #32
- 802a158: e021 b.n 802a19e <ringfs_fetch+0x52>
- uint32_t status;
- _slot_get_status(fs, &fs->cursor, &status);
- 802a15a: 4620 mov r0, r4
- 802a15c: 4629 mov r1, r5
- 802a15e: aa01 add r2, sp, #4
- 802a160: f7ff feec bl 8029f3c <_slot_get_status>
- if (status == SLOT_VALID) {
- 802a164: 9b01 ldr r3, [sp, #4]
- 802a166: f513 3f80 cmn.w r3, #65536 ; 0x10000
- 802a16a: d114 bne.n 802a196 <ringfs_fetch+0x4a>
- fs->flash->read(fs->flash,
- _slot_address(fs, &fs->cursor) + sizeof(struct slot_header),
- 802a16c: 4629 mov r1, r5
- 802a16e: 4620 mov r0, r4
- 802a170: f7ff fed6 bl 8029f20 <_slot_address>
- uint32_t status;
- _slot_get_status(fs, &fs->cursor, &status);
- if (status == SLOT_VALID) {
- fs->flash->read(fs->flash,
- 802a174: 6827 ldr r7, [r4, #0]
- 802a176: 68a3 ldr r3, [r4, #8]
- 802a178: f8d7 c014 ldr.w ip, [r7, #20]
- _slot_address(fs, &fs->cursor) + sizeof(struct slot_header),
- 802a17c: 1d01 adds r1, r0, #4
- uint32_t status;
- _slot_get_status(fs, &fs->cursor, &status);
- if (status == SLOT_VALID) {
- fs->flash->read(fs->flash,
- 802a17e: 4642 mov r2, r8
- 802a180: 4638 mov r0, r7
- 802a182: 47e0 blx ip
- _slot_address(fs, &fs->cursor) + sizeof(struct slot_header),
- object, fs->object_size);
- _loc_advance_slot(fs, &fs->cursor);
- 802a184: 4620 mov r0, r4
- 802a186: 4629 mov r1, r5
- 802a188: f7ff ff28 bl 8029fdc <_loc_advance_slot>
- fs->cursor_position++;
- 802a18c: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802a18e: 3301 adds r3, #1
- 802a190: 62a3 str r3, [r4, #40] ; 0x28
- return 0;
- 802a192: 4630 mov r0, r6
- 802a194: e012 b.n 802a1bc <ringfs_fetch+0x70>
- }
- _loc_advance_slot(fs, &fs->cursor);
- 802a196: 4620 mov r0, r4
- 802a198: 4629 mov r1, r5
- 802a19a: f7ff ff1f bl 8029fdc <_loc_advance_slot>
- * @{
- */
- static bool _loc_equal(struct ringfs_loc *a, struct ringfs_loc *b)
- {
- return (a->sector == b->sector) && (a->slot == b->slot);
- 802a19e: 6a22 ldr r2, [r4, #32]
- 802a1a0: 69a3 ldr r3, [r4, #24]
- 802a1a2: 429a cmp r2, r3
- 802a1a4: d105 bne.n 802a1b2 <ringfs_fetch+0x66>
- 802a1a6: 6a66 ldr r6, [r4, #36] ; 0x24
- 802a1a8: 69e3 ldr r3, [r4, #28]
- 802a1aa: 1af1 subs r1, r6, r3
- 802a1ac: 424e negs r6, r1
- 802a1ae: 414e adcs r6, r1
- 802a1b0: e000 b.n 802a1b4 <ringfs_fetch+0x68>
- 802a1b2: 2600 movs r6, #0
- }
- int ringfs_fetch(struct ringfs *fs, void *object)
- {
- /* Advance forward in search of a valid slot. */
- while (!_loc_equal(&fs->cursor, &fs->write)) {
- 802a1b4: 2e00 cmp r6, #0
- 802a1b6: d0d0 beq.n 802a15a <ringfs_fetch+0xe>
- }
- _loc_advance_slot(fs, &fs->cursor);
- }
- return -1;
- 802a1b8: f04f 30ff mov.w r0, #4294967295
- }
- 802a1bc: e8bd 81fc ldmia.w sp!, {r2, r3, r4, r5, r6, r7, r8, pc}
- 0802a1c0 <ringfs_rewind>:
- return 0;
- }
- int ringfs_rewind(struct ringfs *fs)
- {
- fs->cursor = fs->read;
- 802a1c0: f100 0110 add.w r1, r0, #16
- fs->cursor_position = 0;
- return 0;
- }
- int ringfs_rewind(struct ringfs *fs)
- {
- 802a1c4: 4603 mov r3, r0
- fs->cursor = fs->read;
- 802a1c6: f100 0220 add.w r2, r0, #32
- 802a1ca: c903 ldmia r1, {r0, r1}
- 802a1cc: e882 0003 stmia.w r2, {r0, r1}
- fs->cursor_position = 0;
- 802a1d0: 2000 movs r0, #0
- 802a1d2: 6298 str r0, [r3, #40] ; 0x28
- return 0;
- }
- 802a1d4: 4770 bx lr
- 0802a1d6 <ringfs_scan>:
- return 0;
- }
- int ringfs_scan(struct ringfs *fs)
- {
- 802a1d6: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- /* The read sector is the first IN_USE sector *after* a FREE sector
- * (or the first one). */
- int read_sector = 0;
- /* The write sector is the last IN_USE sector *before* a FREE sector
- * (or the last one). */
- int write_sector = fs->flash->sector_count - 1;
- 802a1da: 6803 ldr r3, [r0, #0]
- 802a1dc: 689e ldr r6, [r3, #8]
- bool free_seen = false;
- /* If there's no IN_USE sector, we start at the first one. */
- bool used_seen = false;
- /* Iterate over sectors. */
- for (int sector=0; sector<fs->flash->sector_count; sector++) {
- 802a1de: 2500 movs r5, #0
- return 0;
- }
- int ringfs_scan(struct ringfs *fs)
- {
- 802a1e0: b085 sub sp, #20
- 802a1e2: 4604 mov r4, r0
- /* The read sector is the first IN_USE sector *after* a FREE sector
- * (or the first one). */
- int read_sector = 0;
- /* The write sector is the last IN_USE sector *before* a FREE sector
- * (or the last one). */
- int write_sector = fs->flash->sector_count - 1;
- 802a1e4: 3e01 subs r6, #1
- /* There must be at least one FREE sector available at all times. */
- bool free_seen = false;
- /* If there's no IN_USE sector, we start at the first one. */
- bool used_seen = false;
- 802a1e6: 46aa mov sl, r5
- int read_sector = 0;
- /* The write sector is the last IN_USE sector *before* a FREE sector
- * (or the last one). */
- int write_sector = fs->flash->sector_count - 1;
- /* There must be at least one FREE sector available at all times. */
- bool free_seen = false;
- 802a1e8: 46a8 mov r8, r5
- int ringfs_scan(struct ringfs *fs)
- {
- uint32_t previous_sector_status = SECTOR_FREE;
- /* The read sector is the first IN_USE sector *after* a FREE sector
- * (or the first one). */
- int read_sector = 0;
- 802a1ea: 46a9 mov r9, r5
- return 0;
- }
- int ringfs_scan(struct ringfs *fs)
- {
- uint32_t previous_sector_status = SECTOR_FREE;
- 802a1ec: f06f 07ff mvn.w r7, #255 ; 0xff
- bool free_seen = false;
- /* If there's no IN_USE sector, we start at the first one. */
- bool used_seen = false;
- /* Iterate over sectors. */
- for (int sector=0; sector<fs->flash->sector_count; sector++) {
- 802a1f0: e031 b.n 802a256 <ringfs_scan+0x80>
- uint32_t version;
- };
- static int _sector_address(struct ringfs *fs, int sector_offset)
- {
- return (fs->flash->sector_offset + sector_offset) * fs->flash->sector_size;
- 802a1f2: 6843 ldr r3, [r0, #4]
- for (int sector=0; sector<fs->flash->sector_count; sector++) {
- int addr = _sector_address(fs, sector);
- /* Read sector header. */
- struct sector_header header;
- fs->flash->read(fs->flash, addr, &header, sizeof(header));
- 802a1f4: f8d0 c014 ldr.w ip, [r0, #20]
- uint32_t version;
- };
- static int _sector_address(struct ringfs *fs, int sector_offset)
- {
- return (fs->flash->sector_offset + sector_offset) * fs->flash->sector_size;
- 802a1f8: eb05 0b03 add.w fp, r5, r3
- 802a1fc: 6803 ldr r3, [r0, #0]
- 802a1fe: fb03 fb0b mul.w fp, r3, fp
- for (int sector=0; sector<fs->flash->sector_count; sector++) {
- int addr = _sector_address(fs, sector);
- /* Read sector header. */
- struct sector_header header;
- fs->flash->read(fs->flash, addr, &header, sizeof(header));
- 802a202: 4659 mov r1, fp
- 802a204: 2308 movs r3, #8
- 802a206: aa02 add r2, sp, #8
- 802a208: 47e0 blx ip
- /* Detect partially-formatted partitions. */
- if (header.status == SECTOR_FORMATTING) {
- 802a20a: 9b02 ldr r3, [sp, #8]
- 802a20c: 2b00 cmp r3, #0
- 802a20e: d06b beq.n 802a2e8 <ringfs_scan+0x112>
- DBG printf("ringfs_scan: partially formatted partition\r\n");
- return -1;
- }
- /* Detect and fix partially erased sectors. */
- if (header.status == SECTOR_ERASING || header.status == SECTOR_ERASED) {
- 802a210: f1b3 4f7f cmp.w r3, #4278190080 ; 0xff000000
- 802a214: d001 beq.n 802a21a <ringfs_scan+0x44>
- 802a216: 3301 adds r3, #1
- 802a218: d106 bne.n 802a228 <ringfs_scan+0x52>
- _sector_free(fs, addr);
- 802a21a: 4620 mov r0, r4
- 802a21c: 4659 mov r1, fp
- 802a21e: f7ff febf bl 8029fa0 <_sector_free>
- header.status = SECTOR_FREE;
- 802a222: f06f 03ff mvn.w r3, #255 ; 0xff
- 802a226: 9302 str r3, [sp, #8]
- }
- /* Detect corrupted sectors. */
- if (header.status != SECTOR_FREE && header.status != SECTOR_IN_USE) {
- 802a228: 9b02 ldr r3, [sp, #8]
- 802a22a: f513 7f80 cmn.w r3, #256 ; 0x100
- 802a22e: d002 beq.n 802a236 <ringfs_scan+0x60>
- 802a230: f513 3f80 cmn.w r3, #65536 ; 0x10000
- 802a234: d158 bne.n 802a2e8 <ringfs_scan+0x112>
- return -1;
- }
- /* Detect obsolete versions. We can't do this earlier because the version
- * could have been invalid due to a partial erase. */
- if (header.version != fs->version) {
- 802a236: 6862 ldr r2, [r4, #4]
- 802a238: 9903 ldr r1, [sp, #12]
- 802a23a: 4291 cmp r1, r2
- 802a23c: d154 bne.n 802a2e8 <ringfs_scan+0x112>
- DBG printf("ringfs_scan: incompatible version 0x%08"PRIx32"\r\n", header.version);
- return -1;
- }
- /* Record the presence of a FREE sector. */
- if (header.status == SECTOR_FREE)
- 802a23e: f513 7f80 cmn.w r3, #256 ; 0x100
- 802a242: d05b beq.n 802a2fc <ringfs_scan+0x126>
- free_seen = true;
- /* Record the presence of a IN_USE sector. */
- if (header.status == SECTOR_IN_USE)
- 802a244: f513 3f80 cmn.w r3, #65536 ; 0x10000
- 802a248: d103 bne.n 802a252 <ringfs_scan+0x7c>
- 802a24a: e050 b.n 802a2ee <ringfs_scan+0x118>
- fs->cursor.slot = 0;
- return 0;
- }
- int ringfs_scan(struct ringfs *fs)
- 802a24c: 1e6e subs r6, r5, #1
- return -1;
- }
- /* Record the presence of a FREE sector. */
- if (header.status == SECTOR_FREE)
- free_seen = true;
- 802a24e: f04f 0801 mov.w r8, #1
- bool free_seen = false;
- /* If there's no IN_USE sector, we start at the first one. */
- bool used_seen = false;
- /* Iterate over sectors. */
- for (int sector=0; sector<fs->flash->sector_count; sector++) {
- 802a252: 3501 adds r5, #1
- _sector_free(fs, addr);
- header.status = SECTOR_FREE;
- }
- /* Detect corrupted sectors. */
- if (header.status != SECTOR_FREE && header.status != SECTOR_IN_USE) {
- 802a254: 461f mov r7, r3
- bool free_seen = false;
- /* If there's no IN_USE sector, we start at the first one. */
- bool used_seen = false;
- /* Iterate over sectors. */
- for (int sector=0; sector<fs->flash->sector_count; sector++) {
- 802a256: 6820 ldr r0, [r4, #0]
- 802a258: 6883 ldr r3, [r0, #8]
- 802a25a: 429d cmp r5, r3
- 802a25c: dbc9 blt.n 802a1f2 <ringfs_scan+0x1c>
- previous_sector_status = header.status;
- }
- /* Detect the lack of a FREE sector. */
- if (!free_seen) {
- 802a25e: f1b8 0f00 cmp.w r8, #0
- 802a262: d041 beq.n 802a2e8 <ringfs_scan+0x112>
- return -1;
- }
- /* Start writing at the first sector if the filesystem is empty. */
- if (!used_seen) {
- write_sector = 0;
- 802a264: f1ba 0f00 cmp.w sl, #0
- 802a268: bf08 it eq
- 802a26a: 2600 moveq r6, #0
- }
- /* Scan the write sector and skip all occupied slots at the beginning. */
- fs->write.sector = write_sector;
- fs->write.slot = 0;
- 802a26c: 2300 movs r3, #0
- if (!used_seen) {
- write_sector = 0;
- }
- /* Scan the write sector and skip all occupied slots at the beginning. */
- fs->write.sector = write_sector;
- 802a26e: 61a6 str r6, [r4, #24]
- fs->write.slot = 0;
- 802a270: 61e3 str r3, [r4, #28]
- while (fs->write.sector == write_sector) {
- uint32_t status;
- _slot_get_status(fs, &fs->write, &status);
- 802a272: f104 0518 add.w r5, r4, #24
- }
- /* Scan the write sector and skip all occupied slots at the beginning. */
- fs->write.sector = write_sector;
- fs->write.slot = 0;
- while (fs->write.sector == write_sector) {
- 802a276: e00b b.n 802a290 <ringfs_scan+0xba>
- uint32_t status;
- _slot_get_status(fs, &fs->write, &status);
- 802a278: 4620 mov r0, r4
- 802a27a: 4629 mov r1, r5
- 802a27c: aa01 add r2, sp, #4
- 802a27e: f7ff fe5d bl 8029f3c <_slot_get_status>
- if (status == SLOT_ERASED)
- 802a282: 9b01 ldr r3, [sp, #4]
- 802a284: 3301 adds r3, #1
- 802a286: d006 beq.n 802a296 <ringfs_scan+0xc0>
- break;
- _loc_advance_slot(fs, &fs->write);
- 802a288: 4620 mov r0, r4
- 802a28a: 4629 mov r1, r5
- 802a28c: f7ff fea6 bl 8029fdc <_loc_advance_slot>
- }
- /* Scan the write sector and skip all occupied slots at the beginning. */
- fs->write.sector = write_sector;
- fs->write.slot = 0;
- while (fs->write.sector == write_sector) {
- 802a290: 69a3 ldr r3, [r4, #24]
- 802a292: 42b3 cmp r3, r6
- 802a294: d0f0 beq.n 802a278 <ringfs_scan+0xa2>
- /* Position the read head at the start of the first IN_USE sector, then skip
- * over garbage/invalid slots until something of value is found or we reach
- * the write head which means there's no data. */
- fs->read.sector = read_sector;
- fs->read.slot = 0;
- 802a296: 2300 movs r3, #0
- /* If the sector was full, we're at the beginning of a FREE sector now. */
- /* Position the read head at the start of the first IN_USE sector, then skip
- * over garbage/invalid slots until something of value is found or we reach
- * the write head which means there's no data. */
- fs->read.sector = read_sector;
- 802a298: f8c4 9010 str.w r9, [r4, #16]
- fs->read.slot = 0;
- 802a29c: 6163 str r3, [r4, #20]
- while (!_loc_equal(&fs->read, &fs->write)) {
- 802a29e: f104 0510 add.w r5, r4, #16
- 802a2a2: e00c b.n 802a2be <ringfs_scan+0xe8>
- uint32_t status;
- _slot_get_status(fs, &fs->read, &status);
- 802a2a4: 4620 mov r0, r4
- 802a2a6: 4629 mov r1, r5
- 802a2a8: aa01 add r2, sp, #4
- 802a2aa: f7ff fe47 bl 8029f3c <_slot_get_status>
- if (status == SLOT_VALID)
- 802a2ae: 9b01 ldr r3, [sp, #4]
- 802a2b0: f513 3f80 cmn.w r3, #65536 ; 0x10000
- 802a2b4: d013 beq.n 802a2de <ringfs_scan+0x108>
- break;
- _loc_advance_slot(fs, &fs->read);
- 802a2b6: 4620 mov r0, r4
- 802a2b8: 4629 mov r1, r5
- 802a2ba: f7ff fe8f bl 8029fdc <_loc_advance_slot>
- * @{
- */
- static bool _loc_equal(struct ringfs_loc *a, struct ringfs_loc *b)
- {
- return (a->sector == b->sector) && (a->slot == b->slot);
- 802a2be: 6922 ldr r2, [r4, #16]
- 802a2c0: 69a3 ldr r3, [r4, #24]
- 802a2c2: 429a cmp r2, r3
- 802a2c4: d108 bne.n 802a2d8 <ringfs_scan+0x102>
- 802a2c6: 69e3 ldr r3, [r4, #28]
- 802a2c8: 6962 ldr r2, [r4, #20]
- 802a2ca: ebb2 0e03 subs.w lr, r2, r3
- 802a2ce: f1de 0300 rsbs r3, lr, #0
- 802a2d2: eb53 030e adcs.w r3, r3, lr
- 802a2d6: e000 b.n 802a2da <ringfs_scan+0x104>
- 802a2d8: 2300 movs r3, #0
- /* Position the read head at the start of the first IN_USE sector, then skip
- * over garbage/invalid slots until something of value is found or we reach
- * the write head which means there's no data. */
- fs->read.sector = read_sector;
- fs->read.slot = 0;
- while (!_loc_equal(&fs->read, &fs->write)) {
- 802a2da: 2b00 cmp r3, #0
- 802a2dc: d0e2 beq.n 802a2a4 <ringfs_scan+0xce>
- _loc_advance_slot(fs, &fs->read);
- }
- /* Move the read cursor to the read head position. */
- ringfs_rewind(fs);
- 802a2de: 4620 mov r0, r4
- 802a2e0: f7ff ff6e bl 802a1c0 <ringfs_rewind>
- return 0;
- 802a2e4: 2000 movs r0, #0
- 802a2e6: e00d b.n 802a304 <ringfs_scan+0x12e>
- }
- /* Detect the lack of a FREE sector. */
- if (!free_seen) {
- DBG printf("ringfs_scan: invariant violated: no FREE sector found\r\n");
- return -1;
- 802a2e8: f04f 30ff mov.w r0, #4294967295
- 802a2ec: e00a b.n 802a304 <ringfs_scan+0x12e>
- /* Record the presence of a IN_USE sector. */
- if (header.status == SECTOR_IN_USE)
- used_seen = true;
- /* Update read & write sectors according to the above rules. */
- if (header.status == SECTOR_IN_USE && previous_sector_status == SECTOR_FREE)
- 802a2ee: f517 7f80 cmn.w r7, #256 ; 0x100
- 802a2f2: bf08 it eq
- 802a2f4: 46a9 moveq r9, r5
- if (header.status == SECTOR_FREE)
- free_seen = true;
- /* Record the presence of a IN_USE sector. */
- if (header.status == SECTOR_IN_USE)
- used_seen = true;
- 802a2f6: f04f 0a01 mov.w sl, #1
- 802a2fa: e7aa b.n 802a252 <ringfs_scan+0x7c>
- /* Update read & write sectors according to the above rules. */
- if (header.status == SECTOR_IN_USE && previous_sector_status == SECTOR_FREE)
- read_sector = sector;
- if (header.status == SECTOR_FREE && previous_sector_status == SECTOR_IN_USE)
- 802a2fc: f517 3f80 cmn.w r7, #65536 ; 0x10000
- 802a300: d0a4 beq.n 802a24c <ringfs_scan+0x76>
- 802a302: e7a4 b.n 802a24e <ringfs_scan+0x78>
- /* Move the read cursor to the read head position. */
- ringfs_rewind(fs);
- return 0;
- }
- 802a304: b005 add sp, #20
- 802a306: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 0802a30a <vListInitialise>:
- void vListInitialise( List_t * const pxList )
- {
- /* The list structure contains a list item which is used to mark the
- end of the list. To initialise the list the list end is inserted
- as the only list entry. */
- pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */
- 802a30a: f100 0308 add.w r3, r0, #8
- 802a30e: 6043 str r3, [r0, #4]
- /* The list end value is the highest possible value in the list to
- ensure it remains at the end of the list. */
- pxList->xListEnd.xItemValue = portMAX_DELAY;
- 802a310: f04f 32ff mov.w r2, #4294967295
- /* The list end next and previous pointers point to itself so we know
- when the list is empty. */
- pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */
- 802a314: 60c3 str r3, [r0, #12]
- pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd );/*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */
- 802a316: 6103 str r3, [r0, #16]
- pxList->uxNumberOfItems = ( UBaseType_t ) 0U;
- 802a318: 2300 movs r3, #0
- as the only list entry. */
- pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */
- /* The list end value is the highest possible value in the list to
- ensure it remains at the end of the list. */
- pxList->xListEnd.xItemValue = portMAX_DELAY;
- 802a31a: 6082 str r2, [r0, #8]
- /* The list end next and previous pointers point to itself so we know
- when the list is empty. */
- pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */
- pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd );/*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */
- pxList->uxNumberOfItems = ( UBaseType_t ) 0U;
- 802a31c: 6003 str r3, [r0, #0]
- 802a31e: 4770 bx lr
- 0802a320 <vListInitialiseItem>:
- /*-----------------------------------------------------------*/
- void vListInitialiseItem( ListItem_t * const pxItem )
- {
- /* Make sure the list item is not recorded as being on a list. */
- pxItem->pvContainer = NULL;
- 802a320: 2300 movs r3, #0
- 802a322: 6103 str r3, [r0, #16]
- 802a324: 4770 bx lr
- 0802a326 <vListInsertEnd>:
- }
- /*-----------------------------------------------------------*/
- void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem )
- {
- ListItem_t * const pxIndex = pxList->pxIndex;
- 802a326: 6843 ldr r3, [r0, #4]
- pxNewListItem->pxPrevious = pxIndex->pxPrevious;
- pxIndex->pxPrevious->pxNext = pxNewListItem;
- pxIndex->pxPrevious = pxNewListItem;
- /* Remember which list the item is in. */
- pxNewListItem->pvContainer = ( void * ) pxList;
- 802a328: 6108 str r0, [r1, #16]
- /* Insert a new list item into pxList, but rather than sort the list,
- makes the new list item the last item to be removed by a call to
- listGET_OWNER_OF_NEXT_ENTRY(). */
- pxNewListItem->pxNext = pxIndex;
- pxNewListItem->pxPrevious = pxIndex->pxPrevious;
- 802a32a: 689a ldr r2, [r3, #8]
- listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );
- /* Insert a new list item into pxList, but rather than sort the list,
- makes the new list item the last item to be removed by a call to
- listGET_OWNER_OF_NEXT_ENTRY(). */
- pxNewListItem->pxNext = pxIndex;
- 802a32c: 604b str r3, [r1, #4]
- pxNewListItem->pxPrevious = pxIndex->pxPrevious;
- 802a32e: 608a str r2, [r1, #8]
- pxIndex->pxPrevious->pxNext = pxNewListItem;
- 802a330: 689a ldr r2, [r3, #8]
- pxIndex->pxPrevious = pxNewListItem;
- 802a332: 6099 str r1, [r3, #8]
- /* Remember which list the item is in. */
- pxNewListItem->pvContainer = ( void * ) pxList;
- ( pxList->uxNumberOfItems )++;
- 802a334: 6803 ldr r3, [r0, #0]
- /* Insert a new list item into pxList, but rather than sort the list,
- makes the new list item the last item to be removed by a call to
- listGET_OWNER_OF_NEXT_ENTRY(). */
- pxNewListItem->pxNext = pxIndex;
- pxNewListItem->pxPrevious = pxIndex->pxPrevious;
- pxIndex->pxPrevious->pxNext = pxNewListItem;
- 802a336: 6051 str r1, [r2, #4]
- pxIndex->pxPrevious = pxNewListItem;
- /* Remember which list the item is in. */
- pxNewListItem->pvContainer = ( void * ) pxList;
- ( pxList->uxNumberOfItems )++;
- 802a338: 3301 adds r3, #1
- 802a33a: 6003 str r3, [r0, #0]
- 802a33c: 4770 bx lr
- 0802a33e <vListInsert>:
- /*-----------------------------------------------------------*/
- void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
- {
- ListItem_t *pxIterator;
- const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;
- 802a33e: 680a ldr r2, [r1, #0]
- new list item should be placed after it. This ensures that TCB's which are
- stored in ready lists (all of which have the same xItemValue value) get a
- share of the CPU. However, if the xItemValue is the same as the back marker
- the iteration loop below will not end. Therefore the value is checked
- first, and the algorithm slightly modified if necessary. */
- if( xValueOfInsertion == portMAX_DELAY )
- 802a340: 1c53 adds r3, r2, #1
- ( pxList->uxNumberOfItems )++;
- }
- /*-----------------------------------------------------------*/
- void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
- {
- 802a342: b530 push {r4, r5, lr}
- new list item should be placed after it. This ensures that TCB's which are
- stored in ready lists (all of which have the same xItemValue value) get a
- share of the CPU. However, if the xItemValue is the same as the back marker
- the iteration loop below will not end. Therefore the value is checked
- first, and the algorithm slightly modified if necessary. */
- if( xValueOfInsertion == portMAX_DELAY )
- 802a344: d101 bne.n 802a34a <vListInsert+0xc>
- {
- pxIterator = pxList->xListEnd.pxPrevious;
- 802a346: 6903 ldr r3, [r0, #16]
- 802a348: e007 b.n 802a35a <vListInsert+0x1c>
- 4) Using a queue or semaphore before it has been initialised or
- before the scheduler has been started (are interrupts firing
- before vTaskStartScheduler() has been called?).
- **********************************************************************/
- for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */
- 802a34a: f100 0308 add.w r3, r0, #8
- 802a34e: e000 b.n 802a352 <vListInsert+0x14>
- 802a350: 4623 mov r3, r4
- 802a352: 685c ldr r4, [r3, #4]
- 802a354: 6825 ldr r5, [r4, #0]
- 802a356: 4295 cmp r5, r2
- 802a358: d9fa bls.n 802a350 <vListInsert+0x12>
- /* There is nothing to do here, just iterating to the wanted
- insertion position. */
- }
- }
- pxNewListItem->pxNext = pxIterator->pxNext;
- 802a35a: 685a ldr r2, [r3, #4]
- pxNewListItem->pxPrevious = pxIterator;
- pxIterator->pxNext = pxNewListItem;
- /* Remember which list the item is in. This allows fast removal of the
- item later. */
- pxNewListItem->pvContainer = ( void * ) pxList;
- 802a35c: 6108 str r0, [r1, #16]
- /* There is nothing to do here, just iterating to the wanted
- insertion position. */
- }
- }
- pxNewListItem->pxNext = pxIterator->pxNext;
- 802a35e: 604a str r2, [r1, #4]
- pxNewListItem->pxNext->pxPrevious = pxNewListItem;
- 802a360: 6091 str r1, [r2, #8]
- pxNewListItem->pxPrevious = pxIterator;
- pxIterator->pxNext = pxNewListItem;
- 802a362: 6059 str r1, [r3, #4]
- }
- }
- pxNewListItem->pxNext = pxIterator->pxNext;
- pxNewListItem->pxNext->pxPrevious = pxNewListItem;
- pxNewListItem->pxPrevious = pxIterator;
- 802a364: 608b str r3, [r1, #8]
- /* Remember which list the item is in. This allows fast removal of the
- item later. */
- pxNewListItem->pvContainer = ( void * ) pxList;
- ( pxList->uxNumberOfItems )++;
- 802a366: 6803 ldr r3, [r0, #0]
- 802a368: 3301 adds r3, #1
- 802a36a: 6003 str r3, [r0, #0]
- 802a36c: bd30 pop {r4, r5, pc}
- 0802a36e <uxListRemove>:
- {
- /* The list item knows which list it is in. Obtain the list from the list
- item. */
- List_t * const pxList = ( List_t * ) pxItemToRemove->pvContainer;
- pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
- 802a36e: 6841 ldr r1, [r0, #4]
- 802a370: 6882 ldr r2, [r0, #8]
- UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )
- {
- /* The list item knows which list it is in. Obtain the list from the list
- item. */
- List_t * const pxList = ( List_t * ) pxItemToRemove->pvContainer;
- 802a372: 6903 ldr r3, [r0, #16]
- pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
- 802a374: 608a str r2, [r1, #8]
- pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
- 802a376: 6882 ldr r2, [r0, #8]
- 802a378: 6051 str r1, [r2, #4]
- /* Make sure the index is left pointing to a valid item. */
- if( pxList->pxIndex == pxItemToRemove )
- 802a37a: 6859 ldr r1, [r3, #4]
- 802a37c: 4281 cmp r1, r0
- {
- pxList->pxIndex = pxItemToRemove->pxPrevious;
- 802a37e: bf08 it eq
- 802a380: 605a streq r2, [r3, #4]
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- pxItemToRemove->pvContainer = NULL;
- 802a382: 2200 movs r2, #0
- 802a384: 6102 str r2, [r0, #16]
- ( pxList->uxNumberOfItems )--;
- 802a386: 6818 ldr r0, [r3, #0]
- 802a388: 3801 subs r0, #1
- 802a38a: 6018 str r0, [r3, #0]
- return pxList->uxNumberOfItems;
- }
- 802a38c: 4770 bx lr
- 0802a38e <prvUnlockQueue>:
- }
- }
- /*-----------------------------------------------------------*/
- static void prvUnlockQueue( Queue_t * const pxQueue )
- {
- 802a38e: b538 push {r3, r4, r5, lr}
- 802a390: 4604 mov r4, r0
- {
- /* Tasks that are removed from the event list will get added to
- the pending ready list as the scheduler is still suspended. */
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
- {
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
- 802a392: f104 0524 add.w r5, r4, #36 ; 0x24
- /* The lock counts contains the number of extra data items placed or
- removed from the queue while the queue was locked. When a queue is
- locked items can be added or removed, but the event lists cannot be
- updated. */
- taskENTER_CRITICAL();
- 802a396: f001 fa2f bl 802b7f8 <vPortEnterCritical>
- {
- /* See if data was added to the queue while it was locked. */
- while( pxQueue->xTxLock > queueLOCKED_UNMODIFIED )
- 802a39a: e00a b.n 802a3b2 <prvUnlockQueue+0x24>
- }
- #else /* configUSE_QUEUE_SETS */
- {
- /* Tasks that are removed from the event list will get added to
- the pending ready list as the scheduler is still suspended. */
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
- 802a39c: 6a63 ldr r3, [r4, #36] ; 0x24
- 802a39e: b15b cbz r3, 802a3b8 <prvUnlockQueue+0x2a>
- {
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
- 802a3a0: 4628 mov r0, r5
- 802a3a2: f000 ff1d bl 802b1e0 <xTaskRemoveFromEventList>
- 802a3a6: b108 cbz r0, 802a3ac <prvUnlockQueue+0x1e>
- {
- /* The task waiting has a higher priority so record that a
- context switch is required. */
- vTaskMissedYield();
- 802a3a8: f000 ff94 bl 802b2d4 <vTaskMissedYield>
- break;
- }
- }
- #endif /* configUSE_QUEUE_SETS */
- --( pxQueue->xTxLock );
- 802a3ac: 6ca3 ldr r3, [r4, #72] ; 0x48
- 802a3ae: 3b01 subs r3, #1
- 802a3b0: 64a3 str r3, [r4, #72] ; 0x48
- locked items can be added or removed, but the event lists cannot be
- updated. */
- taskENTER_CRITICAL();
- {
- /* See if data was added to the queue while it was locked. */
- while( pxQueue->xTxLock > queueLOCKED_UNMODIFIED )
- 802a3b2: 6ca3 ldr r3, [r4, #72] ; 0x48
- 802a3b4: 2b00 cmp r3, #0
- 802a3b6: dcf1 bgt.n 802a39c <prvUnlockQueue+0xe>
- #endif /* configUSE_QUEUE_SETS */
- --( pxQueue->xTxLock );
- }
- pxQueue->xTxLock = queueUNLOCKED;
- 802a3b8: f04f 33ff mov.w r3, #4294967295
- 802a3bc: 64a3 str r3, [r4, #72] ; 0x48
- }
- taskEXIT_CRITICAL();
- 802a3be: f001 fa47 bl 802b850 <vPortExitCritical>
- {
- while( pxQueue->xRxLock > queueLOCKED_UNMODIFIED )
- {
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
- {
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
- 802a3c2: f104 0510 add.w r5, r4, #16
- pxQueue->xTxLock = queueUNLOCKED;
- }
- taskEXIT_CRITICAL();
- /* Do the same for the Rx lock. */
- taskENTER_CRITICAL();
- 802a3c6: f001 fa17 bl 802b7f8 <vPortEnterCritical>
- {
- while( pxQueue->xRxLock > queueLOCKED_UNMODIFIED )
- 802a3ca: e00a b.n 802a3e2 <prvUnlockQueue+0x54>
- {
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
- 802a3cc: 6923 ldr r3, [r4, #16]
- 802a3ce: b15b cbz r3, 802a3e8 <prvUnlockQueue+0x5a>
- {
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
- 802a3d0: 4628 mov r0, r5
- 802a3d2: f000 ff05 bl 802b1e0 <xTaskRemoveFromEventList>
- 802a3d6: b108 cbz r0, 802a3dc <prvUnlockQueue+0x4e>
- {
- vTaskMissedYield();
- 802a3d8: f000 ff7c bl 802b2d4 <vTaskMissedYield>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- --( pxQueue->xRxLock );
- 802a3dc: 6c63 ldr r3, [r4, #68] ; 0x44
- 802a3de: 3b01 subs r3, #1
- 802a3e0: 6463 str r3, [r4, #68] ; 0x44
- taskEXIT_CRITICAL();
- /* Do the same for the Rx lock. */
- taskENTER_CRITICAL();
- {
- while( pxQueue->xRxLock > queueLOCKED_UNMODIFIED )
- 802a3e2: 6c63 ldr r3, [r4, #68] ; 0x44
- 802a3e4: 2b00 cmp r3, #0
- 802a3e6: dcf1 bgt.n 802a3cc <prvUnlockQueue+0x3e>
- {
- break;
- }
- }
- pxQueue->xRxLock = queueUNLOCKED;
- 802a3e8: f04f 33ff mov.w r3, #4294967295
- 802a3ec: 6463 str r3, [r4, #68] ; 0x44
- }
- taskEXIT_CRITICAL();
- }
- 802a3ee: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- }
- }
- pxQueue->xRxLock = queueUNLOCKED;
- }
- taskEXIT_CRITICAL();
- 802a3f2: f001 ba2d b.w 802b850 <vPortExitCritical>
- 0802a3f6 <prvCopyDataFromQueue>:
- }
- /*-----------------------------------------------------------*/
- static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer )
- {
- if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )
- 802a3f6: 6c02 ldr r2, [r0, #64] ; 0x40
- return xReturn;
- }
- /*-----------------------------------------------------------*/
- static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer )
- {
- 802a3f8: b530 push {r4, r5, lr}
- 802a3fa: 4603 mov r3, r0
- if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )
- 802a3fc: b16a cbz r2, 802a41a <prvCopyDataFromQueue+0x24>
- {
- pxQueue->u.pcReadFrom += pxQueue->uxItemSize;
- 802a3fe: 68c4 ldr r4, [r0, #12]
- if( pxQueue->u.pcReadFrom >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */
- 802a400: 6845 ldr r5, [r0, #4]
- static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer )
- {
- if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )
- {
- pxQueue->u.pcReadFrom += pxQueue->uxItemSize;
- 802a402: 18a4 adds r4, r4, r2
- if( pxQueue->u.pcReadFrom >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */
- 802a404: 42ac cmp r4, r5
- static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer )
- {
- if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )
- {
- pxQueue->u.pcReadFrom += pxQueue->uxItemSize;
- 802a406: 60c4 str r4, [r0, #12]
- if( pxQueue->u.pcReadFrom >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */
- {
- pxQueue->u.pcReadFrom = pxQueue->pcHead;
- 802a408: bf24 itt cs
- 802a40a: 6804 ldrcs r4, [r0, #0]
- 802a40c: 60c4 strcs r4, [r0, #12]
- }
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 MISRA exception as the casts are only redundant for some ports. Also previous logic ensures a null pointer can only be passed to memcpy() when the count is 0. */
- 802a40e: 4608 mov r0, r1
- 802a410: 68d9 ldr r1, [r3, #12]
- }
- }
- 802a412: e8bd 4030 ldmia.w sp!, {r4, r5, lr}
- }
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 MISRA exception as the casts are only redundant for some ports. Also previous logic ensures a null pointer can only be passed to memcpy() when the count is 0. */
- 802a416: f7f7 bab9 b.w 802198c <memcpy>
- 802a41a: bd30 pop {r4, r5, pc}
- 0802a41c <prvCopyDataToQueue>:
- #endif /* configUSE_TRACE_FACILITY */
- /*-----------------------------------------------------------*/
- static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition )
- {
- 802a41c: b538 push {r3, r4, r5, lr}
- 802a41e: 4615 mov r5, r2
- BaseType_t xReturn = pdFALSE;
- if( pxQueue->uxItemSize == ( UBaseType_t ) 0 )
- 802a420: 6c02 ldr r2, [r0, #64] ; 0x40
- #endif /* configUSE_TRACE_FACILITY */
- /*-----------------------------------------------------------*/
- static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition )
- {
- 802a422: 4604 mov r4, r0
- BaseType_t xReturn = pdFALSE;
- if( pxQueue->uxItemSize == ( UBaseType_t ) 0 )
- 802a424: b93a cbnz r2, 802a436 <prvCopyDataToQueue+0x1a>
- {
- #if ( configUSE_MUTEXES == 1 )
- {
- if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
- 802a426: 6805 ldr r5, [r0, #0]
- 802a428: b105 cbz r5, 802a42c <prvCopyDataToQueue+0x10>
- 802a42a: e028 b.n 802a47e <prvCopyDataToQueue+0x62>
- {
- /* The mutex is no longer being held. */
- xReturn = xTaskPriorityDisinherit( ( void * ) pxQueue->pxMutexHolder );
- 802a42c: 6840 ldr r0, [r0, #4]
- 802a42e: f000 ffb3 bl 802b398 <xTaskPriorityDisinherit>
- pxQueue->pxMutexHolder = NULL;
- 802a432: 6065 str r5, [r4, #4]
- 802a434: e024 b.n 802a480 <prvCopyDataToQueue+0x64>
- mtCOVERAGE_TEST_MARKER();
- }
- }
- #endif /* configUSE_MUTEXES */
- }
- else if( xPosition == queueSEND_TO_BACK )
- 802a436: b96d cbnz r5, 802a454 <prvCopyDataToQueue+0x38>
- {
- ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 MISRA exception as the casts are only redundant for some ports, plus previous logic ensures a null pointer can only be passed to memcpy() if the copy size is 0. */
- 802a438: 6880 ldr r0, [r0, #8]
- 802a43a: f7f7 faa7 bl 802198c <memcpy>
- pxQueue->pcWriteTo += pxQueue->uxItemSize;
- 802a43e: 68a2 ldr r2, [r4, #8]
- 802a440: 6c23 ldr r3, [r4, #64] ; 0x40
- 802a442: 18d3 adds r3, r2, r3
- if( pxQueue->pcWriteTo >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
- 802a444: 6862 ldr r2, [r4, #4]
- #endif /* configUSE_MUTEXES */
- }
- else if( xPosition == queueSEND_TO_BACK )
- {
- ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 MISRA exception as the casts are only redundant for some ports, plus previous logic ensures a null pointer can only be passed to memcpy() if the copy size is 0. */
- pxQueue->pcWriteTo += pxQueue->uxItemSize;
- 802a446: 60a3 str r3, [r4, #8]
- if( pxQueue->pcWriteTo >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
- 802a448: 4293 cmp r3, r2
- 802a44a: d318 bcc.n 802a47e <prvCopyDataToQueue+0x62>
- {
- pxQueue->pcWriteTo = pxQueue->pcHead;
- 802a44c: 6823 ldr r3, [r4, #0]
- #endif /* configUSE_TRACE_FACILITY */
- /*-----------------------------------------------------------*/
- static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition )
- {
- BaseType_t xReturn = pdFALSE;
- 802a44e: 4628 mov r0, r5
- {
- ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 MISRA exception as the casts are only redundant for some ports, plus previous logic ensures a null pointer can only be passed to memcpy() if the copy size is 0. */
- pxQueue->pcWriteTo += pxQueue->uxItemSize;
- if( pxQueue->pcWriteTo >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
- {
- pxQueue->pcWriteTo = pxQueue->pcHead;
- 802a450: 60a3 str r3, [r4, #8]
- 802a452: e015 b.n 802a480 <prvCopyDataToQueue+0x64>
- mtCOVERAGE_TEST_MARKER();
- }
- }
- else
- {
- ( void ) memcpy( ( void * ) pxQueue->u.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- 802a454: 68c0 ldr r0, [r0, #12]
- 802a456: f7f7 fa99 bl 802198c <memcpy>
- pxQueue->u.pcReadFrom -= pxQueue->uxItemSize;
- 802a45a: 6c23 ldr r3, [r4, #64] ; 0x40
- 802a45c: 68e2 ldr r2, [r4, #12]
- if( pxQueue->u.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
- 802a45e: 6821 ldr r1, [r4, #0]
- }
- }
- else
- {
- ( void ) memcpy( ( void * ) pxQueue->u.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- pxQueue->u.pcReadFrom -= pxQueue->uxItemSize;
- 802a460: 425b negs r3, r3
- 802a462: 18d2 adds r2, r2, r3
- if( pxQueue->u.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
- 802a464: 428a cmp r2, r1
- }
- }
- else
- {
- ( void ) memcpy( ( void * ) pxQueue->u.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- pxQueue->u.pcReadFrom -= pxQueue->uxItemSize;
- 802a466: 60e2 str r2, [r4, #12]
- if( pxQueue->u.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
- 802a468: d202 bcs.n 802a470 <prvCopyDataToQueue+0x54>
- {
- pxQueue->u.pcReadFrom = ( pxQueue->pcTail - pxQueue->uxItemSize );
- 802a46a: 6862 ldr r2, [r4, #4]
- 802a46c: 18d3 adds r3, r2, r3
- 802a46e: 60e3 str r3, [r4, #12]
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- if( xPosition == queueOVERWRITE )
- 802a470: 2d02 cmp r5, #2
- 802a472: d104 bne.n 802a47e <prvCopyDataToQueue+0x62>
- {
- if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )
- 802a474: 6ba3 ldr r3, [r4, #56] ; 0x38
- 802a476: b113 cbz r3, 802a47e <prvCopyDataToQueue+0x62>
- {
- /* An item is not being added but overwritten, so subtract
- one from the recorded number of items in the queue so when
- one is added again below the number of recorded items remains
- correct. */
- --( pxQueue->uxMessagesWaiting );
- 802a478: 6ba3 ldr r3, [r4, #56] ; 0x38
- 802a47a: 3b01 subs r3, #1
- 802a47c: 63a3 str r3, [r4, #56] ; 0x38
- #endif /* configUSE_TRACE_FACILITY */
- /*-----------------------------------------------------------*/
- static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition )
- {
- BaseType_t xReturn = pdFALSE;
- 802a47e: 2000 movs r0, #0
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- ++( pxQueue->uxMessagesWaiting );
- 802a480: 6ba3 ldr r3, [r4, #56] ; 0x38
- 802a482: 3301 adds r3, #1
- 802a484: 63a3 str r3, [r4, #56] ; 0x38
- return xReturn;
- }
- 802a486: bd38 pop {r3, r4, r5, pc}
- 0802a488 <xQueueGenericReset>:
- } \
- taskEXIT_CRITICAL()
- /*-----------------------------------------------------------*/
- BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue )
- {
- 802a488: b538 push {r3, r4, r5, lr}
- 802a48a: 460d mov r5, r1
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- 802a48c: 4604 mov r4, r0
- 802a48e: b910 cbnz r0, 802a496 <xQueueGenericReset+0xe>
- 802a490: f001 f9aa bl 802b7e8 <ulPortSetInterruptMask>
- 802a494: e7fe b.n 802a494 <xQueueGenericReset+0xc>
- taskENTER_CRITICAL();
- 802a496: f001 f9af bl 802b7f8 <vPortEnterCritical>
- {
- pxQueue->pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize );
- 802a49a: 6823 ldr r3, [r4, #0]
- 802a49c: 6be0 ldr r0, [r4, #60] ; 0x3c
- 802a49e: 6c22 ldr r2, [r4, #64] ; 0x40
- pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- pxQueue->pcWriteTo = pxQueue->pcHead;
- 802a4a0: 60a3 str r3, [r4, #8]
- configASSERT( pxQueue );
- taskENTER_CRITICAL();
- {
- pxQueue->pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize );
- 802a4a2: fb00 3102 mla r1, r0, r2, r3
- pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- pxQueue->pcWriteTo = pxQueue->pcHead;
- pxQueue->u.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - ( UBaseType_t ) 1U ) * pxQueue->uxItemSize );
- 802a4a6: 3801 subs r0, #1
- 802a4a8: fb02 3300 mla r3, r2, r0, r3
- configASSERT( pxQueue );
- taskENTER_CRITICAL();
- {
- pxQueue->pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize );
- 802a4ac: 6061 str r1, [r4, #4]
- pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- pxQueue->pcWriteTo = pxQueue->pcHead;
- pxQueue->u.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - ( UBaseType_t ) 1U ) * pxQueue->uxItemSize );
- 802a4ae: 60e3 str r3, [r4, #12]
- configASSERT( pxQueue );
- taskENTER_CRITICAL();
- {
- pxQueue->pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize );
- pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- 802a4b0: 2100 movs r1, #0
- pxQueue->pcWriteTo = pxQueue->pcHead;
- pxQueue->u.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - ( UBaseType_t ) 1U ) * pxQueue->uxItemSize );
- pxQueue->xRxLock = queueUNLOCKED;
- 802a4b2: f04f 33ff mov.w r3, #4294967295
- configASSERT( pxQueue );
- taskENTER_CRITICAL();
- {
- pxQueue->pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize );
- pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- 802a4b6: 63a1 str r1, [r4, #56] ; 0x38
- pxQueue->pcWriteTo = pxQueue->pcHead;
- pxQueue->u.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - ( UBaseType_t ) 1U ) * pxQueue->uxItemSize );
- pxQueue->xRxLock = queueUNLOCKED;
- 802a4b8: 6463 str r3, [r4, #68] ; 0x44
- pxQueue->xTxLock = queueUNLOCKED;
- 802a4ba: 64a3 str r3, [r4, #72] ; 0x48
- if( xNewQueue == pdFALSE )
- 802a4bc: b955 cbnz r5, 802a4d4 <xQueueGenericReset+0x4c>
- /* If there are tasks blocked waiting to read from the queue, then
- the tasks will remain blocked as after this function exits the queue
- will still be empty. If there are tasks blocked waiting to write to
- the queue, then one should be unblocked as after this function exits
- it will be possible to write to it. */
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
- 802a4be: 6923 ldr r3, [r4, #16]
- 802a4c0: b183 cbz r3, 802a4e4 <xQueueGenericReset+0x5c>
- {
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) == pdTRUE )
- 802a4c2: f104 0010 add.w r0, r4, #16
- 802a4c6: f000 fe8b bl 802b1e0 <xTaskRemoveFromEventList>
- 802a4ca: 2801 cmp r0, #1
- 802a4cc: d10a bne.n 802a4e4 <xQueueGenericReset+0x5c>
- {
- queueYIELD_IF_USING_PREEMPTION();
- 802a4ce: f001 f97f bl 802b7d0 <vPortYield>
- 802a4d2: e007 b.n 802a4e4 <xQueueGenericReset+0x5c>
- }
- }
- else
- {
- /* Ensure the event queues start in the correct state. */
- vListInitialise( &( pxQueue->xTasksWaitingToSend ) );
- 802a4d4: f104 0010 add.w r0, r4, #16
- 802a4d8: f7ff ff17 bl 802a30a <vListInitialise>
- vListInitialise( &( pxQueue->xTasksWaitingToReceive ) );
- 802a4dc: f104 0024 add.w r0, r4, #36 ; 0x24
- 802a4e0: f7ff ff13 bl 802a30a <vListInitialise>
- }
- }
- taskEXIT_CRITICAL();
- 802a4e4: f001 f9b4 bl 802b850 <vPortExitCritical>
- /* A value is returned for calling semantic consistency with previous
- versions. */
- return pdPASS;
- }
- 802a4e8: 2001 movs r0, #1
- 802a4ea: bd38 pop {r3, r4, r5, pc}
- 0802a4ec <xQueueGenericCreate>:
- /*-----------------------------------------------------------*/
- QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType )
- {
- 802a4ec: b5f8 push {r3, r4, r5, r6, r7, lr}
- 802a4ee: 460d mov r5, r1
- 802a4f0: 4617 mov r7, r2
- /* Remove compiler warnings about unused parameters should
- configUSE_TRACE_FACILITY not be set to 1. */
- ( void ) ucQueueType;
- configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
- 802a4f2: 4606 mov r6, r0
- 802a4f4: b910 cbnz r0, 802a4fc <xQueueGenericCreate+0x10>
- 802a4f6: f001 f977 bl 802b7e8 <ulPortSetInterruptMask>
- 802a4fa: e7fe b.n 802a4fa <xQueueGenericCreate+0xe>
- if( uxItemSize == ( UBaseType_t ) 0 )
- 802a4fc: b111 cbz r1, 802a504 <xQueueGenericCreate+0x18>
- }
- else
- {
- /* The queue is one byte longer than asked for to make wrap checking
- easier/faster. */
- xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ) + ( size_t ) 1; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- 802a4fe: 4348 muls r0, r1
- 802a500: 3001 adds r0, #1
- 802a502: e000 b.n 802a506 <xQueueGenericCreate+0x1a>
- configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
- if( uxItemSize == ( UBaseType_t ) 0 )
- {
- /* There is not going to be a queue storage area. */
- xQueueSizeInBytes = ( size_t ) 0;
- 802a504: 4608 mov r0, r1
- easier/faster. */
- xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ) + ( size_t ) 1; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- }
- /* Allocate the new queue structure and storage area. */
- pcAllocatedBuffer = ( int8_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes );
- 802a506: 3054 adds r0, #84 ; 0x54
- 802a508: f001 fa84 bl 802ba14 <pvPortMalloc>
- if( pcAllocatedBuffer != NULL )
- 802a50c: 4604 mov r4, r0
- 802a50e: b138 cbz r0, 802a520 <xQueueGenericCreate+0x34>
- {
- pxNewQueue = ( Queue_t * ) pcAllocatedBuffer; /*lint !e826 MISRA The buffer cannot be to small because it was dimensioned by sizeof( Queue_t ) + xQueueSizeInBytes. */
- if( uxItemSize == ( UBaseType_t ) 0 )
- 802a510: b90d cbnz r5, 802a516 <xQueueGenericCreate+0x2a>
- {
- /* No RAM was allocated for the queue storage area, but PC head
- cannot be set to NULL because NULL is used as a key to say the queue
- is used as a mutex. Therefore just set pcHead to point to the queue
- as a benign value that is known to be within the memory map. */
- pxNewQueue->pcHead = ( int8_t * ) pxNewQueue;
- 802a512: 6020 str r0, [r4, #0]
- 802a514: e007 b.n 802a526 <xQueueGenericCreate+0x3a>
- }
- else
- {
- /* Jump past the queue structure to find the location of the queue
- storage area - adding the padding bytes to get a better alignment. */
- pxNewQueue->pcHead = pcAllocatedBuffer + sizeof( Queue_t );
- 802a516: f100 0354 add.w r3, r0, #84 ; 0x54
- 802a51a: 6003 str r3, [r0, #0]
- 802a51c: e003 b.n 802a526 <xQueueGenericCreate+0x3a>
- 802a51e: e7fe b.n 802a51e <xQueueGenericCreate+0x32>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- configASSERT( xReturn );
- 802a520: f001 f962 bl 802b7e8 <ulPortSetInterruptMask>
- 802a524: e7fb b.n 802a51e <xQueueGenericCreate+0x32>
- pxNewQueue->pcHead = pcAllocatedBuffer + sizeof( Queue_t );
- }
- /* Initialise the queue members as described above where the queue type
- is defined. */
- pxNewQueue->uxLength = uxQueueLength;
- 802a526: 63e6 str r6, [r4, #60] ; 0x3c
- pxNewQueue->uxItemSize = uxItemSize;
- 802a528: 6425 str r5, [r4, #64] ; 0x40
- ( void ) xQueueGenericReset( pxNewQueue, pdTRUE );
- 802a52a: 4620 mov r0, r4
- 802a52c: 2101 movs r1, #1
- 802a52e: f7ff ffab bl 802a488 <xQueueGenericReset>
- #if ( configUSE_TRACE_FACILITY == 1 )
- {
- pxNewQueue->ucQueueType = ucQueueType;
- 802a532: f884 7050 strb.w r7, [r4, #80] ; 0x50
- }
- configASSERT( xReturn );
- return xReturn;
- }
- 802a536: 4620 mov r0, r4
- 802a538: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 0802a53a <xQueueCreateCountingSemaphore>:
- /*-----------------------------------------------------------*/
- #if ( configUSE_COUNTING_SEMAPHORES == 1 )
- QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount )
- {
- 802a53a: b510 push {r4, lr}
- 802a53c: 460c mov r4, r1
- QueueHandle_t xHandle;
- configASSERT( uxMaxCount != 0 );
- 802a53e: b910 cbnz r0, 802a546 <xQueueCreateCountingSemaphore+0xc>
- 802a540: f001 f952 bl 802b7e8 <ulPortSetInterruptMask>
- 802a544: e7fe b.n 802a544 <xQueueCreateCountingSemaphore+0xa>
- configASSERT( uxInitialCount <= uxMaxCount );
- 802a546: 4281 cmp r1, r0
- 802a548: d902 bls.n 802a550 <xQueueCreateCountingSemaphore+0x16>
- 802a54a: f001 f94d bl 802b7e8 <ulPortSetInterruptMask>
- 802a54e: e7fe b.n 802a54e <xQueueCreateCountingSemaphore+0x14>
- xHandle = xQueueGenericCreate( uxMaxCount, queueSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_COUNTING_SEMAPHORE );
- 802a550: 2100 movs r1, #0
- 802a552: 2202 movs r2, #2
- 802a554: f7ff ffca bl 802a4ec <xQueueGenericCreate>
- if( xHandle != NULL )
- 802a558: b110 cbz r0, 802a560 <xQueueCreateCountingSemaphore+0x26>
- {
- ( ( Queue_t * ) xHandle )->uxMessagesWaiting = uxInitialCount;
- 802a55a: 6384 str r4, [r0, #56] ; 0x38
- 802a55c: bd10 pop {r4, pc}
- 802a55e: e7fe b.n 802a55e <xQueueCreateCountingSemaphore+0x24>
- else
- {
- traceCREATE_COUNTING_SEMAPHORE_FAILED();
- }
- configASSERT( xHandle );
- 802a560: f001 f942 bl 802b7e8 <ulPortSetInterruptMask>
- 802a564: e7fb b.n 802a55e <xQueueCreateCountingSemaphore+0x24>
- 0802a566 <xQueueGenericSend>:
- #endif /* configUSE_COUNTING_SEMAPHORES */
- /*-----------------------------------------------------------*/
- BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition )
- {
- 802a566: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- 802a56a: b085 sub sp, #20
- 802a56c: 460f mov r7, r1
- 802a56e: 9201 str r2, [sp, #4]
- 802a570: 461d mov r5, r3
- BaseType_t xEntryTimeSet = pdFALSE, xYieldRequired;
- TimeOut_t xTimeOut;
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- 802a572: 4604 mov r4, r0
- 802a574: b910 cbnz r0, 802a57c <xQueueGenericSend+0x16>
- 802a576: f001 f937 bl 802b7e8 <ulPortSetInterruptMask>
- 802a57a: e7fe b.n 802a57a <xQueueGenericSend+0x14>
- configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
- 802a57c: 2900 cmp r1, #0
- 802a57e: d17b bne.n 802a678 <xQueueGenericSend+0x112>
- 802a580: 6c03 ldr r3, [r0, #64] ; 0x40
- 802a582: 2b00 cmp r3, #0
- 802a584: d078 beq.n 802a678 <xQueueGenericSend+0x112>
- 802a586: e074 b.n 802a672 <xQueueGenericSend+0x10c>
- 802a588: e7fe b.n 802a588 <xQueueGenericSend+0x22>
- configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
- 802a58a: 6be3 ldr r3, [r4, #60] ; 0x3c
- 802a58c: 2b01 cmp r3, #1
- 802a58e: d176 bne.n 802a67e <xQueueGenericSend+0x118>
- 802a590: e078 b.n 802a684 <xQueueGenericSend+0x11e>
- 802a592: e7fe b.n 802a592 <xQueueGenericSend+0x2c>
- #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
- {
- configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
- 802a594: 9e01 ldr r6, [sp, #4]
- 802a596: b126 cbz r6, 802a5a2 <xQueueGenericSend+0x3c>
- 802a598: e079 b.n 802a68e <xQueueGenericSend+0x128>
- 802a59a: e7fe b.n 802a59a <xQueueGenericSend+0x34>
- 802a59c: 2601 movs r6, #1
- 802a59e: e002 b.n 802a5a6 <xQueueGenericSend+0x40>
- 802a5a0: 2600 movs r6, #0
- /* Interrupts and other tasks can send to and receive from the queue
- now the critical section has been exited. */
- vTaskSuspendAll();
- prvLockQueue( pxQueue );
- 802a5a2: f04f 0800 mov.w r8, #0
- /* This function relaxes the coding standard somewhat to allow return
- statements within the function itself. This is done in the interest
- of execution time efficiency. */
- for( ;; )
- {
- taskENTER_CRITICAL();
- 802a5a6: f001 f927 bl 802b7f8 <vPortEnterCritical>
- {
- /* Is there room on the queue now? The running task must be
- the highest priority task wanting to access the queue. If
- the head item in the queue is to be overwritten then it does
- not matter if the queue is full. */
- if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
- 802a5aa: 6ba2 ldr r2, [r4, #56] ; 0x38
- 802a5ac: 6be3 ldr r3, [r4, #60] ; 0x3c
- 802a5ae: 429a cmp r2, r3
- 802a5b0: d301 bcc.n 802a5b6 <xQueueGenericSend+0x50>
- 802a5b2: 2d02 cmp r5, #2
- 802a5b4: d115 bne.n 802a5e2 <xQueueGenericSend+0x7c>
- {
- traceQUEUE_SEND( pxQueue );
- xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
- 802a5b6: 4620 mov r0, r4
- 802a5b8: 4639 mov r1, r7
- 802a5ba: 462a mov r2, r5
- 802a5bc: f7ff ff2e bl 802a41c <prvCopyDataToQueue>
- }
- #else /* configUSE_QUEUE_SETS */
- {
- /* If there was a task waiting for data to arrive on the
- queue then unblock it now. */
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
- 802a5c0: 6a63 ldr r3, [r4, #36] ; 0x24
- 802a5c2: b143 cbz r3, 802a5d6 <xQueueGenericSend+0x70>
- {
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) == pdTRUE )
- 802a5c4: f104 0024 add.w r0, r4, #36 ; 0x24
- 802a5c8: f000 fe0a bl 802b1e0 <xTaskRemoveFromEventList>
- 802a5cc: 2801 cmp r0, #1
- 802a5ce: d104 bne.n 802a5da <xQueueGenericSend+0x74>
- {
- /* The unblocked task has a priority higher than
- our own so yield immediately. Yes it is ok to do
- this from within the critical section - the kernel
- takes care of that. */
- queueYIELD_IF_USING_PREEMPTION();
- 802a5d0: f001 f8fe bl 802b7d0 <vPortYield>
- 802a5d4: e001 b.n 802a5da <xQueueGenericSend+0x74>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- else if( xYieldRequired != pdFALSE )
- 802a5d6: 2800 cmp r0, #0
- 802a5d8: d1fa bne.n 802a5d0 <xQueueGenericSend+0x6a>
- mtCOVERAGE_TEST_MARKER();
- }
- }
- #endif /* configUSE_QUEUE_SETS */
- taskEXIT_CRITICAL();
- 802a5da: f001 f939 bl 802b850 <vPortExitCritical>
- return pdPASS;
- 802a5de: 2001 movs r0, #1
- 802a5e0: e058 b.n 802a694 <xQueueGenericSend+0x12e>
- }
- else
- {
- if( xTicksToWait == ( TickType_t ) 0 )
- 802a5e2: f8dd 9004 ldr.w r9, [sp, #4]
- 802a5e6: f1b9 0f00 cmp.w r9, #0
- 802a5ea: d102 bne.n 802a5f2 <xQueueGenericSend+0x8c>
- {
- /* The queue was full and no block time is specified (or
- the block time has expired) so leave now. */
- taskEXIT_CRITICAL();
- 802a5ec: f001 f930 bl 802b850 <vPortExitCritical>
- 802a5f0: e03d b.n 802a66e <xQueueGenericSend+0x108>
- /* Return to the original privilege level before exiting
- the function. */
- traceQUEUE_SEND_FAILED( pxQueue );
- return errQUEUE_FULL;
- }
- else if( xEntryTimeSet == pdFALSE )
- 802a5f2: b916 cbnz r6, 802a5fa <xQueueGenericSend+0x94>
- {
- /* The queue was full and a block time was specified so
- configure the timeout structure. */
- vTaskSetTimeOutState( &xTimeOut );
- 802a5f4: a802 add r0, sp, #8
- 802a5f6: f000 fe2f bl 802b258 <vTaskSetTimeOutState>
- /* Entry time was already set. */
- mtCOVERAGE_TEST_MARKER();
- }
- }
- }
- taskEXIT_CRITICAL();
- 802a5fa: f001 f929 bl 802b850 <vPortExitCritical>
- /* Interrupts and other tasks can send to and receive from the queue
- now the critical section has been exited. */
- vTaskSuspendAll();
- 802a5fe: f000 fbab bl 802ad58 <vTaskSuspendAll>
- prvLockQueue( pxQueue );
- 802a602: f001 f8f9 bl 802b7f8 <vPortEnterCritical>
- 802a606: 6c63 ldr r3, [r4, #68] ; 0x44
- 802a608: 3301 adds r3, #1
- 802a60a: bf08 it eq
- 802a60c: f8c4 8044 streq.w r8, [r4, #68] ; 0x44
- 802a610: 6ca3 ldr r3, [r4, #72] ; 0x48
- 802a612: 3301 adds r3, #1
- 802a614: bf08 it eq
- 802a616: f8c4 8048 streq.w r8, [r4, #72] ; 0x48
- 802a61a: f001 f919 bl 802b850 <vPortExitCritical>
- /* Update the timeout state to see if it has expired yet. */
- if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
- 802a61e: a802 add r0, sp, #8
- 802a620: a901 add r1, sp, #4
- 802a622: f000 fe29 bl 802b278 <xTaskCheckForTimeOut>
- 802a626: b9e8 cbnz r0, 802a664 <xQueueGenericSend+0xfe>
- static BaseType_t prvIsQueueFull( const Queue_t *pxQueue )
- {
- BaseType_t xReturn;
- taskENTER_CRITICAL();
- 802a628: f001 f8e6 bl 802b7f8 <vPortEnterCritical>
- {
- if( pxQueue->uxMessagesWaiting == pxQueue->uxLength )
- 802a62c: f8d4 9038 ldr.w r9, [r4, #56] ; 0x38
- 802a630: 6be6 ldr r6, [r4, #60] ; 0x3c
- else
- {
- xReturn = pdFALSE;
- }
- }
- taskEXIT_CRITICAL();
- 802a632: f001 f90d bl 802b850 <vPortExitCritical>
- prvLockQueue( pxQueue );
- /* Update the timeout state to see if it has expired yet. */
- if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
- {
- if( prvIsQueueFull( pxQueue ) != pdFALSE )
- 802a636: 45b1 cmp r9, r6
- 802a638: d10e bne.n 802a658 <xQueueGenericSend+0xf2>
- {
- traceBLOCKING_ON_QUEUE_SEND( pxQueue );
- vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait );
- 802a63a: f104 0010 add.w r0, r4, #16
- 802a63e: 9901 ldr r1, [sp, #4]
- 802a640: f000 fd72 bl 802b128 <vTaskPlaceOnEventList>
- /* Unlocking the queue means queue events can effect the
- event list. It is possible that interrupts occurring now
- remove this task from the event list again - but as the
- scheduler is suspended the task will go onto the pending
- ready last instead of the actual ready list. */
- prvUnlockQueue( pxQueue );
- 802a644: 4620 mov r0, r4
- 802a646: f7ff fea2 bl 802a38e <prvUnlockQueue>
- /* Resuming the scheduler will move tasks from the pending
- ready list into the ready list - so it is feasible that this
- task is already in a ready list before it yields - in which
- case the yield will not cause a context switch unless there
- is also a higher priority task in the pending ready list. */
- if( xTaskResumeAll() == pdFALSE )
- 802a64a: f000 fc21 bl 802ae90 <xTaskResumeAll>
- 802a64e: 2800 cmp r0, #0
- 802a650: d1a4 bne.n 802a59c <xQueueGenericSend+0x36>
- {
- portYIELD_WITHIN_API();
- 802a652: f001 f8bd bl 802b7d0 <vPortYield>
- 802a656: e7a1 b.n 802a59c <xQueueGenericSend+0x36>
- }
- }
- else
- {
- /* Try again. */
- prvUnlockQueue( pxQueue );
- 802a658: 4620 mov r0, r4
- 802a65a: f7ff fe98 bl 802a38e <prvUnlockQueue>
- ( void ) xTaskResumeAll();
- 802a65e: f000 fc17 bl 802ae90 <xTaskResumeAll>
- 802a662: e79b b.n 802a59c <xQueueGenericSend+0x36>
- }
- }
- else
- {
- /* The timeout has expired. */
- prvUnlockQueue( pxQueue );
- 802a664: 4620 mov r0, r4
- 802a666: f7ff fe92 bl 802a38e <prvUnlockQueue>
- ( void ) xTaskResumeAll();
- 802a66a: f000 fc11 bl 802ae90 <xTaskResumeAll>
- /* Return to the original privilege level before exiting the
- function. */
- traceQUEUE_SEND_FAILED( pxQueue );
- return errQUEUE_FULL;
- 802a66e: 2000 movs r0, #0
- 802a670: e010 b.n 802a694 <xQueueGenericSend+0x12e>
- BaseType_t xEntryTimeSet = pdFALSE, xYieldRequired;
- TimeOut_t xTimeOut;
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
- 802a672: f001 f8b9 bl 802b7e8 <ulPortSetInterruptMask>
- 802a676: e787 b.n 802a588 <xQueueGenericSend+0x22>
- configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
- 802a678: 2d02 cmp r5, #2
- 802a67a: d103 bne.n 802a684 <xQueueGenericSend+0x11e>
- 802a67c: e785 b.n 802a58a <xQueueGenericSend+0x24>
- 802a67e: f001 f8b3 bl 802b7e8 <ulPortSetInterruptMask>
- 802a682: e786 b.n 802a592 <xQueueGenericSend+0x2c>
- #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
- {
- configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
- 802a684: f000 fe2c bl 802b2e0 <xTaskGetSchedulerState>
- 802a688: 2800 cmp r0, #0
- 802a68a: d189 bne.n 802a5a0 <xQueueGenericSend+0x3a>
- 802a68c: e782 b.n 802a594 <xQueueGenericSend+0x2e>
- 802a68e: f001 f8ab bl 802b7e8 <ulPortSetInterruptMask>
- 802a692: e782 b.n 802a59a <xQueueGenericSend+0x34>
- function. */
- traceQUEUE_SEND_FAILED( pxQueue );
- return errQUEUE_FULL;
- }
- }
- }
- 802a694: b005 add sp, #20
- 802a696: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
- 0802a69a <xQueueCreateMutex>:
- /*-----------------------------------------------------------*/
- #if ( configUSE_MUTEXES == 1 )
- QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType )
- {
- 802a69a: b570 push {r4, r5, r6, lr}
- 802a69c: 4606 mov r6, r0
- /* Prevent compiler warnings about unused parameters if
- configUSE_TRACE_FACILITY does not equal 1. */
- ( void ) ucQueueType;
- /* Allocate the new queue structure. */
- pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) );
- 802a69e: 2054 movs r0, #84 ; 0x54
- 802a6a0: f001 f9b8 bl 802ba14 <pvPortMalloc>
- if( pxNewQueue != NULL )
- 802a6a4: 4604 mov r4, r0
- 802a6a6: b108 cbz r0, 802a6ac <xQueueCreateMutex+0x12>
- 802a6a8: e003 b.n 802a6b2 <xQueueCreateMutex+0x18>
- 802a6aa: e7fe b.n 802a6aa <xQueueCreateMutex+0x10>
- else
- {
- traceCREATE_MUTEX_FAILED();
- }
- configASSERT( pxNewQueue );
- 802a6ac: f001 f89c bl 802b7e8 <ulPortSetInterruptMask>
- 802a6b0: e7fb b.n 802a6aa <xQueueCreateMutex+0x10>
- /* Each mutex has a length of 1 (like a binary semaphore) and
- an item size of 0 as nothing is actually copied into or out
- of the mutex. */
- pxNewQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- pxNewQueue->uxLength = ( UBaseType_t ) 1U;
- 802a6b2: 2301 movs r3, #1
- /* Allocate the new queue structure. */
- pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) );
- if( pxNewQueue != NULL )
- {
- /* Information required for priority inheritance. */
- pxNewQueue->pxMutexHolder = NULL;
- 802a6b4: 2500 movs r5, #0
- /* Each mutex has a length of 1 (like a binary semaphore) and
- an item size of 0 as nothing is actually copied into or out
- of the mutex. */
- pxNewQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- pxNewQueue->uxLength = ( UBaseType_t ) 1U;
- 802a6b6: 63c3 str r3, [r0, #60] ; 0x3c
- pxNewQueue->uxItemSize = ( UBaseType_t ) 0U;
- pxNewQueue->xRxLock = queueUNLOCKED;
- 802a6b8: f04f 33ff mov.w r3, #4294967295
- pxNewQueue->u.pcReadFrom = NULL;
- /* Each mutex has a length of 1 (like a binary semaphore) and
- an item size of 0 as nothing is actually copied into or out
- of the mutex. */
- pxNewQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- 802a6bc: 6385 str r5, [r0, #56] ; 0x38
- /* Allocate the new queue structure. */
- pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) );
- if( pxNewQueue != NULL )
- {
- /* Information required for priority inheritance. */
- pxNewQueue->pxMutexHolder = NULL;
- 802a6be: 6045 str r5, [r0, #4]
- an item size of 0 as nothing is actually copied into or out
- of the mutex. */
- pxNewQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- pxNewQueue->uxLength = ( UBaseType_t ) 1U;
- pxNewQueue->uxItemSize = ( UBaseType_t ) 0U;
- pxNewQueue->xRxLock = queueUNLOCKED;
- 802a6c0: 6443 str r3, [r0, #68] ; 0x44
- pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) );
- if( pxNewQueue != NULL )
- {
- /* Information required for priority inheritance. */
- pxNewQueue->pxMutexHolder = NULL;
- pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX;
- 802a6c2: 6005 str r5, [r0, #0]
- of the mutex. */
- pxNewQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- pxNewQueue->uxLength = ( UBaseType_t ) 1U;
- pxNewQueue->uxItemSize = ( UBaseType_t ) 0U;
- pxNewQueue->xRxLock = queueUNLOCKED;
- pxNewQueue->xTxLock = queueUNLOCKED;
- 802a6c4: 6483 str r3, [r0, #72] ; 0x48
- pxNewQueue->pxMutexHolder = NULL;
- pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX;
- /* Queues used as a mutex no data is actually copied into or out
- of the queue. */
- pxNewQueue->pcWriteTo = NULL;
- 802a6c6: 6085 str r5, [r0, #8]
- pxNewQueue->u.pcReadFrom = NULL;
- 802a6c8: 60c5 str r5, [r0, #12]
- /* Each mutex has a length of 1 (like a binary semaphore) and
- an item size of 0 as nothing is actually copied into or out
- of the mutex. */
- pxNewQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
- pxNewQueue->uxLength = ( UBaseType_t ) 1U;
- pxNewQueue->uxItemSize = ( UBaseType_t ) 0U;
- 802a6ca: 6405 str r5, [r0, #64] ; 0x40
- pxNewQueue->xRxLock = queueUNLOCKED;
- pxNewQueue->xTxLock = queueUNLOCKED;
- #if ( configUSE_TRACE_FACILITY == 1 )
- {
- pxNewQueue->ucQueueType = ucQueueType;
- 802a6cc: f880 6050 strb.w r6, [r0, #80] ; 0x50
- pxNewQueue->pxQueueSetContainer = NULL;
- }
- #endif
- /* Ensure the event queues start with the correct state. */
- vListInitialise( &( pxNewQueue->xTasksWaitingToSend ) );
- 802a6d0: 3010 adds r0, #16
- 802a6d2: f7ff fe1a bl 802a30a <vListInitialise>
- vListInitialise( &( pxNewQueue->xTasksWaitingToReceive ) );
- 802a6d6: f104 0024 add.w r0, r4, #36 ; 0x24
- 802a6da: f7ff fe16 bl 802a30a <vListInitialise>
- traceCREATE_MUTEX( pxNewQueue );
- /* Start with the semaphore in the expected state. */
- ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK );
- 802a6de: 4620 mov r0, r4
- 802a6e0: 4629 mov r1, r5
- 802a6e2: 462a mov r2, r5
- 802a6e4: 462b mov r3, r5
- 802a6e6: f7ff ff3e bl 802a566 <xQueueGenericSend>
- traceCREATE_MUTEX_FAILED();
- }
- configASSERT( pxNewQueue );
- return pxNewQueue;
- }
- 802a6ea: 4620 mov r0, r4
- 802a6ec: bd70 pop {r4, r5, r6, pc}
- 0802a6ee <xQueueGenericSendFromISR>:
- #endif /* configUSE_ALTERNATIVE_API */
- /*-----------------------------------------------------------*/
- BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition )
- {
- 802a6ee: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 802a6f2: 460f mov r7, r1
- 802a6f4: 4616 mov r6, r2
- 802a6f6: 461d mov r5, r3
- BaseType_t xReturn;
- UBaseType_t uxSavedInterruptStatus;
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- 802a6f8: 4604 mov r4, r0
- 802a6fa: b910 cbnz r0, 802a702 <xQueueGenericSendFromISR+0x14>
- 802a6fc: f001 f874 bl 802b7e8 <ulPortSetInterruptMask>
- 802a700: e7fe b.n 802a700 <xQueueGenericSendFromISR+0x12>
- configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
- 802a702: bb41 cbnz r1, 802a756 <xQueueGenericSendFromISR+0x68>
- 802a704: 6c03 ldr r3, [r0, #64] ; 0x40
- 802a706: b333 cbz r3, 802a756 <xQueueGenericSendFromISR+0x68>
- 802a708: e022 b.n 802a750 <xQueueGenericSendFromISR+0x62>
- 802a70a: e7fe b.n 802a70a <xQueueGenericSendFromISR+0x1c>
- configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
- 802a70c: 6be3 ldr r3, [r4, #60] ; 0x3c
- 802a70e: 2b01 cmp r3, #1
- 802a710: d124 bne.n 802a75c <xQueueGenericSendFromISR+0x6e>
- 802a712: e026 b.n 802a762 <xQueueGenericSendFromISR+0x74>
- 802a714: e7fe b.n 802a714 <xQueueGenericSendFromISR+0x26>
- read, instead return a flag to say whether a context switch is required or
- not (i.e. has a task with a higher priority than us been woken by this
- post). */
- uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
- {
- if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
- 802a716: 2d02 cmp r5, #2
- 802a718: d118 bne.n 802a74c <xQueueGenericSendFromISR+0x5e>
- /* A task can only have an inherited priority if it is a mutex
- holder - and if there is a mutex holder then the mutex cannot be
- given from an ISR. Therefore, unlike the xQueueGenericGive()
- function, there is no need to determine the need for priority
- disinheritance here or to clear the mutex holder TCB member. */
- ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
- 802a71a: 4620 mov r0, r4
- 802a71c: 4639 mov r1, r7
- 802a71e: 462a mov r2, r5
- 802a720: f7ff fe7c bl 802a41c <prvCopyDataToQueue>
- /* The event list is not altered if the queue is locked. This will
- be done when the queue is unlocked later. */
- if( pxQueue->xTxLock == queueUNLOCKED )
- 802a724: 6ca3 ldr r3, [r4, #72] ; 0x48
- 802a726: 3301 adds r3, #1
- 802a728: d10b bne.n 802a742 <xQueueGenericSendFromISR+0x54>
- }
- }
- }
- #else /* configUSE_QUEUE_SETS */
- {
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
- 802a72a: 6a63 ldr r3, [r4, #36] ; 0x24
- 802a72c: b903 cbnz r3, 802a730 <xQueueGenericSendFromISR+0x42>
- 802a72e: e00b b.n 802a748 <xQueueGenericSendFromISR+0x5a>
- {
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
- 802a730: f104 0024 add.w r0, r4, #36 ; 0x24
- 802a734: f000 fd54 bl 802b1e0 <xTaskRemoveFromEventList>
- 802a738: b130 cbz r0, 802a748 <xQueueGenericSendFromISR+0x5a>
- {
- /* The task waiting has a higher priority so record that a
- context switch is required. */
- if( pxHigherPriorityTaskWoken != NULL )
- 802a73a: b12e cbz r6, 802a748 <xQueueGenericSendFromISR+0x5a>
- {
- *pxHigherPriorityTaskWoken = pdTRUE;
- 802a73c: 2401 movs r4, #1
- 802a73e: 6034 str r4, [r6, #0]
- 802a740: e019 b.n 802a776 <xQueueGenericSendFromISR+0x88>
- }
- else
- {
- /* Increment the lock count so the task that unlocks the queue
- knows that data was posted while it was locked. */
- ++( pxQueue->xTxLock );
- 802a742: 6ca3 ldr r3, [r4, #72] ; 0x48
- 802a744: 3301 adds r3, #1
- 802a746: 64a3 str r3, [r4, #72] ; 0x48
- }
- xReturn = pdPASS;
- 802a748: 2401 movs r4, #1
- 802a74a: e014 b.n 802a776 <xQueueGenericSendFromISR+0x88>
- }
- else
- {
- traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue );
- xReturn = errQUEUE_FULL;
- 802a74c: 2400 movs r4, #0
- 802a74e: e012 b.n 802a776 <xQueueGenericSendFromISR+0x88>
- BaseType_t xReturn;
- UBaseType_t uxSavedInterruptStatus;
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
- 802a750: f001 f84a bl 802b7e8 <ulPortSetInterruptMask>
- 802a754: e7d9 b.n 802a70a <xQueueGenericSendFromISR+0x1c>
- configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
- 802a756: 2d02 cmp r5, #2
- 802a758: d103 bne.n 802a762 <xQueueGenericSendFromISR+0x74>
- 802a75a: e7d7 b.n 802a70c <xQueueGenericSendFromISR+0x1e>
- 802a75c: f001 f844 bl 802b7e8 <ulPortSetInterruptMask>
- 802a760: e7d8 b.n 802a714 <xQueueGenericSendFromISR+0x26>
- that have been assigned a priority at or (logically) below the maximum
- system call interrupt priority. FreeRTOS maintains a separate interrupt
- safe API to ensure interrupt entry is as fast and as simple as possible.
- More information (albeit Cortex-M specific) is provided on the following
- link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
- portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
- 802a762: f001 f911 bl 802b988 <vPortValidateInterruptPriority>
- /* Similar to xQueueGenericSend, except without blocking if there is no room
- in the queue. Also don't directly wake a task that was blocked on a queue
- read, instead return a flag to say whether a context switch is required or
- not (i.e. has a task with a higher priority than us been woken by this
- post). */
- uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
- 802a766: f001 f83f bl 802b7e8 <ulPortSetInterruptMask>
- {
- if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
- 802a76a: 6ba2 ldr r2, [r4, #56] ; 0x38
- 802a76c: 6be3 ldr r3, [r4, #60] ; 0x3c
- 802a76e: 429a cmp r2, r3
- /* Similar to xQueueGenericSend, except without blocking if there is no room
- in the queue. Also don't directly wake a task that was blocked on a queue
- read, instead return a flag to say whether a context switch is required or
- not (i.e. has a task with a higher priority than us been woken by this
- post). */
- uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
- 802a770: 4680 mov r8, r0
- {
- if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
- 802a772: d2d0 bcs.n 802a716 <xQueueGenericSendFromISR+0x28>
- 802a774: e7d1 b.n 802a71a <xQueueGenericSendFromISR+0x2c>
- {
- traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue );
- xReturn = errQUEUE_FULL;
- }
- }
- portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
- 802a776: 4640 mov r0, r8
- 802a778: f001 f866 bl 802b848 <vPortClearInterruptMask>
- return xReturn;
- }
- 802a77c: 4620 mov r0, r4
- 802a77e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 0802a782 <xQueueGiveFromISR>:
- /*-----------------------------------------------------------*/
- BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken )
- {
- 802a782: b5f8 push {r3, r4, r5, r6, r7, lr}
- 802a784: 460d mov r5, r1
- BaseType_t xReturn;
- UBaseType_t uxSavedInterruptStatus;
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- 802a786: 4604 mov r4, r0
- 802a788: b910 cbnz r0, 802a790 <xQueueGiveFromISR+0xe>
- 802a78a: f001 f82d bl 802b7e8 <ulPortSetInterruptMask>
- 802a78e: e7fe b.n 802a78e <xQueueGiveFromISR+0xc>
- /* xQueueGenericSendFromISR() should be used in the item size is not 0. */
- configASSERT( pxQueue->uxItemSize == 0 );
- 802a790: 6c06 ldr r6, [r0, #64] ; 0x40
- 802a792: b116 cbz r6, 802a79a <xQueueGiveFromISR+0x18>
- 802a794: f001 f828 bl 802b7e8 <ulPortSetInterruptMask>
- 802a798: e7fe b.n 802a798 <xQueueGiveFromISR+0x16>
- that have been assigned a priority at or (logically) below the maximum
- system call interrupt priority. FreeRTOS maintains a separate interrupt
- safe API to ensure interrupt entry is as fast and as simple as possible.
- More information (albeit Cortex-M specific) is provided on the following
- link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
- portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
- 802a79a: f001 f8f5 bl 802b988 <vPortValidateInterruptPriority>
- /* Similar to xQueueGenericSendFromISR() but used with semaphores where the
- item size is 0. Don't directly wake a task that was blocked on a queue
- read, instead return a flag to say whether a context switch is required or
- not (i.e. has a task with a higher priority than us been woken by this
- post). */
- uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
- 802a79e: f001 f823 bl 802b7e8 <ulPortSetInterruptMask>
- {
- /* When the queue is used to implement a semaphore no data is ever
- moved through the queue but it is still valid to see if the queue 'has
- space'. */
- if( pxQueue->uxMessagesWaiting < pxQueue->uxLength )
- 802a7a2: 6ba2 ldr r2, [r4, #56] ; 0x38
- 802a7a4: 6be3 ldr r3, [r4, #60] ; 0x3c
- 802a7a6: 429a cmp r2, r3
- /* Similar to xQueueGenericSendFromISR() but used with semaphores where the
- item size is 0. Don't directly wake a task that was blocked on a queue
- read, instead return a flag to say whether a context switch is required or
- not (i.e. has a task with a higher priority than us been woken by this
- post). */
- uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
- 802a7a8: 4607 mov r7, r0
- {
- /* When the queue is used to implement a semaphore no data is ever
- moved through the queue but it is still valid to see if the queue 'has
- space'. */
- if( pxQueue->uxMessagesWaiting < pxQueue->uxLength )
- 802a7aa: d216 bcs.n 802a7da <xQueueGiveFromISR+0x58>
- holder - and if there is a mutex holder then the mutex cannot be
- given from an ISR. Therefore, unlike the xQueueGenericGive()
- function, there is no need to determine the need for priority
- disinheritance here or to clear the mutex holder TCB member. */
- ++( pxQueue->uxMessagesWaiting );
- 802a7ac: 6ba3 ldr r3, [r4, #56] ; 0x38
- 802a7ae: 3301 adds r3, #1
- 802a7b0: 63a3 str r3, [r4, #56] ; 0x38
- /* The event list is not altered if the queue is locked. This will
- be done when the queue is unlocked later. */
- if( pxQueue->xTxLock == queueUNLOCKED )
- 802a7b2: 6ca3 ldr r3, [r4, #72] ; 0x48
- 802a7b4: 3301 adds r3, #1
- 802a7b6: d10b bne.n 802a7d0 <xQueueGiveFromISR+0x4e>
- }
- }
- }
- #else /* configUSE_QUEUE_SETS */
- {
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
- 802a7b8: 6a63 ldr r3, [r4, #36] ; 0x24
- 802a7ba: b903 cbnz r3, 802a7be <xQueueGiveFromISR+0x3c>
- 802a7bc: e00b b.n 802a7d6 <xQueueGiveFromISR+0x54>
- {
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
- 802a7be: f104 0024 add.w r0, r4, #36 ; 0x24
- 802a7c2: f000 fd0d bl 802b1e0 <xTaskRemoveFromEventList>
- 802a7c6: b130 cbz r0, 802a7d6 <xQueueGiveFromISR+0x54>
- {
- /* The task waiting has a higher priority so record that a
- context switch is required. */
- if( pxHigherPriorityTaskWoken != NULL )
- 802a7c8: b12d cbz r5, 802a7d6 <xQueueGiveFromISR+0x54>
- {
- *pxHigherPriorityTaskWoken = pdTRUE;
- 802a7ca: 2401 movs r4, #1
- 802a7cc: 602c str r4, [r5, #0]
- 802a7ce: e005 b.n 802a7dc <xQueueGiveFromISR+0x5a>
- }
- else
- {
- /* Increment the lock count so the task that unlocks the queue
- knows that data was posted while it was locked. */
- ++( pxQueue->xTxLock );
- 802a7d0: 6ca3 ldr r3, [r4, #72] ; 0x48
- 802a7d2: 3301 adds r3, #1
- 802a7d4: 64a3 str r3, [r4, #72] ; 0x48
- }
- xReturn = pdPASS;
- 802a7d6: 2401 movs r4, #1
- 802a7d8: e000 b.n 802a7dc <xQueueGiveFromISR+0x5a>
- }
- else
- {
- traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue );
- xReturn = errQUEUE_FULL;
- 802a7da: 4634 mov r4, r6
- }
- }
- portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
- 802a7dc: 4638 mov r0, r7
- 802a7de: f001 f833 bl 802b848 <vPortClearInterruptMask>
- return xReturn;
- }
- 802a7e2: 4620 mov r0, r4
- 802a7e4: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 0802a7e6 <xQueueGenericReceive>:
- /*-----------------------------------------------------------*/
- BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeeking )
- {
- 802a7e6: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- 802a7ea: b085 sub sp, #20
- 802a7ec: 460e mov r6, r1
- 802a7ee: 9201 str r2, [sp, #4]
- 802a7f0: 4699 mov r9, r3
- BaseType_t xEntryTimeSet = pdFALSE;
- TimeOut_t xTimeOut;
- int8_t *pcOriginalReadPosition;
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- 802a7f2: 4604 mov r4, r0
- 802a7f4: b910 cbnz r0, 802a7fc <xQueueGenericReceive+0x16>
- 802a7f6: f000 fff7 bl 802b7e8 <ulPortSetInterruptMask>
- 802a7fa: e7fe b.n 802a7fa <xQueueGenericReceive+0x14>
- configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
- 802a7fc: 2900 cmp r1, #0
- 802a7fe: f040 8089 bne.w 802a914 <xQueueGenericReceive+0x12e>
- 802a802: 6c03 ldr r3, [r0, #64] ; 0x40
- 802a804: 2b00 cmp r3, #0
- 802a806: f000 8085 beq.w 802a914 <xQueueGenericReceive+0x12e>
- 802a80a: e080 b.n 802a90e <xQueueGenericReceive+0x128>
- 802a80c: e7fe b.n 802a80c <xQueueGenericReceive+0x26>
- #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
- {
- configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
- 802a80e: 9d01 ldr r5, [sp, #4]
- 802a810: b125 cbz r5, 802a81c <xQueueGenericReceive+0x36>
- 802a812: e085 b.n 802a920 <xQueueGenericReceive+0x13a>
- 802a814: e7fe b.n 802a814 <xQueueGenericReceive+0x2e>
- 802a816: 2501 movs r5, #1
- 802a818: e001 b.n 802a81e <xQueueGenericReceive+0x38>
- 802a81a: 2500 movs r5, #0
- /* Interrupts and other tasks can send to and receive from the queue
- now the critical section has been exited. */
- vTaskSuspendAll();
- prvLockQueue( pxQueue );
- 802a81c: 2700 movs r7, #0
- statements within the function itself. This is done in the interest
- of execution time efficiency. */
- for( ;; )
- {
- taskENTER_CRITICAL();
- 802a81e: f000 ffeb bl 802b7f8 <vPortEnterCritical>
- {
- /* Is there data in the queue now? To be running the calling task
- must be the highest priority task wanting to access the queue. */
- if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )
- 802a822: 6ba3 ldr r3, [r4, #56] ; 0x38
- 802a824: b33b cbz r3, 802a876 <xQueueGenericReceive+0x90>
- {
- /* Remember the read position in case the queue is only being
- peeked. */
- pcOriginalReadPosition = pxQueue->u.pcReadFrom;
- prvCopyDataFromQueue( pxQueue, pvBuffer );
- 802a826: 4620 mov r0, r4
- 802a828: 4631 mov r1, r6
- must be the highest priority task wanting to access the queue. */
- if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )
- {
- /* Remember the read position in case the queue is only being
- peeked. */
- pcOriginalReadPosition = pxQueue->u.pcReadFrom;
- 802a82a: 68e5 ldr r5, [r4, #12]
- prvCopyDataFromQueue( pxQueue, pvBuffer );
- 802a82c: f7ff fde3 bl 802a3f6 <prvCopyDataFromQueue>
- if( xJustPeeking == pdFALSE )
- 802a830: f1b9 0f00 cmp.w r9, #0
- 802a834: d112 bne.n 802a85c <xQueueGenericReceive+0x76>
- {
- traceQUEUE_RECEIVE( pxQueue );
- /* Actually removing data, not just peeking. */
- --( pxQueue->uxMessagesWaiting );
- 802a836: 6ba3 ldr r3, [r4, #56] ; 0x38
- 802a838: 3b01 subs r3, #1
- 802a83a: 63a3 str r3, [r4, #56] ; 0x38
- #if ( configUSE_MUTEXES == 1 )
- {
- if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
- 802a83c: 6823 ldr r3, [r4, #0]
- 802a83e: b913 cbnz r3, 802a846 <xQueueGenericReceive+0x60>
- {
- /* Record the information required to implement
- priority inheritance should it become necessary. */
- pxQueue->pxMutexHolder = ( int8_t * ) pvTaskIncrementMutexHeldCount(); /*lint !e961 Cast is not redundant as TaskHandle_t is a typedef. */
- 802a840: f000 fde8 bl 802b414 <pvTaskIncrementMutexHeldCount>
- 802a844: 6060 str r0, [r4, #4]
- mtCOVERAGE_TEST_MARKER();
- }
- }
- #endif /* configUSE_MUTEXES */
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
- 802a846: 6923 ldr r3, [r4, #16]
- 802a848: b18b cbz r3, 802a86e <xQueueGenericReceive+0x88>
- {
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) == pdTRUE )
- 802a84a: f104 0010 add.w r0, r4, #16
- 802a84e: f000 fcc7 bl 802b1e0 <xTaskRemoveFromEventList>
- 802a852: 2801 cmp r0, #1
- 802a854: d10b bne.n 802a86e <xQueueGenericReceive+0x88>
- {
- queueYIELD_IF_USING_PREEMPTION();
- 802a856: f000 ffbb bl 802b7d0 <vPortYield>
- 802a85a: e008 b.n 802a86e <xQueueGenericReceive+0x88>
- pointer. */
- pxQueue->u.pcReadFrom = pcOriginalReadPosition;
- /* The data is being left in the queue, so see if there are
- any other tasks waiting for the data. */
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
- 802a85c: 6a63 ldr r3, [r4, #36] ; 0x24
- {
- traceQUEUE_PEEK( pxQueue );
- /* The data is not being removed, so reset the read
- pointer. */
- pxQueue->u.pcReadFrom = pcOriginalReadPosition;
- 802a85e: 60e5 str r5, [r4, #12]
- /* The data is being left in the queue, so see if there are
- any other tasks waiting for the data. */
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
- 802a860: b12b cbz r3, 802a86e <xQueueGenericReceive+0x88>
- {
- /* Tasks that are removed from the event list will get added to
- the pending ready list as the scheduler is still suspended. */
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
- 802a862: f104 0024 add.w r0, r4, #36 ; 0x24
- 802a866: f000 fcbb bl 802b1e0 <xTaskRemoveFromEventList>
- 802a86a: 2800 cmp r0, #0
- 802a86c: d1f3 bne.n 802a856 <xQueueGenericReceive+0x70>
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- taskEXIT_CRITICAL();
- 802a86e: f000 ffef bl 802b850 <vPortExitCritical>
- return pdPASS;
- 802a872: 2001 movs r0, #1
- 802a874: e057 b.n 802a926 <xQueueGenericReceive+0x140>
- }
- else
- {
- if( xTicksToWait == ( TickType_t ) 0 )
- 802a876: f8dd 8004 ldr.w r8, [sp, #4]
- 802a87a: f1b8 0f00 cmp.w r8, #0
- 802a87e: d102 bne.n 802a886 <xQueueGenericReceive+0xa0>
- {
- /* The queue was empty and no block time is specified (or
- the block time has expired) so leave now. */
- taskEXIT_CRITICAL();
- 802a880: f000 ffe6 bl 802b850 <vPortExitCritical>
- 802a884: e041 b.n 802a90a <xQueueGenericReceive+0x124>
- traceQUEUE_RECEIVE_FAILED( pxQueue );
- return errQUEUE_EMPTY;
- }
- else if( xEntryTimeSet == pdFALSE )
- 802a886: b915 cbnz r5, 802a88e <xQueueGenericReceive+0xa8>
- {
- /* The queue was empty and a block time was specified so
- configure the timeout structure. */
- vTaskSetTimeOutState( &xTimeOut );
- 802a888: a802 add r0, sp, #8
- 802a88a: f000 fce5 bl 802b258 <vTaskSetTimeOutState>
- /* Entry time was already set. */
- mtCOVERAGE_TEST_MARKER();
- }
- }
- }
- taskEXIT_CRITICAL();
- 802a88e: f000 ffdf bl 802b850 <vPortExitCritical>
- /* Interrupts and other tasks can send to and receive from the queue
- now the critical section has been exited. */
- vTaskSuspendAll();
- 802a892: f000 fa61 bl 802ad58 <vTaskSuspendAll>
- prvLockQueue( pxQueue );
- 802a896: f000 ffaf bl 802b7f8 <vPortEnterCritical>
- 802a89a: 6c63 ldr r3, [r4, #68] ; 0x44
- 802a89c: 3301 adds r3, #1
- 802a89e: bf08 it eq
- 802a8a0: 6467 streq r7, [r4, #68] ; 0x44
- 802a8a2: 6ca3 ldr r3, [r4, #72] ; 0x48
- 802a8a4: 3301 adds r3, #1
- 802a8a6: bf08 it eq
- 802a8a8: 64a7 streq r7, [r4, #72] ; 0x48
- 802a8aa: f000 ffd1 bl 802b850 <vPortExitCritical>
- /* Update the timeout state to see if it has expired yet. */
- if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
- 802a8ae: a802 add r0, sp, #8
- 802a8b0: a901 add r1, sp, #4
- 802a8b2: f000 fce1 bl 802b278 <xTaskCheckForTimeOut>
- 802a8b6: bb18 cbnz r0, 802a900 <xQueueGenericReceive+0x11a>
- static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue )
- {
- BaseType_t xReturn;
- taskENTER_CRITICAL();
- 802a8b8: f000 ff9e bl 802b7f8 <vPortEnterCritical>
- {
- if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 )
- 802a8bc: 6ba5 ldr r5, [r4, #56] ; 0x38
- else
- {
- xReturn = pdFALSE;
- }
- }
- taskEXIT_CRITICAL();
- 802a8be: f000 ffc7 bl 802b850 <vPortExitCritical>
- prvLockQueue( pxQueue );
- /* Update the timeout state to see if it has expired yet. */
- if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
- {
- if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
- 802a8c2: b9bd cbnz r5, 802a8f4 <xQueueGenericReceive+0x10e>
- {
- traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
- #if ( configUSE_MUTEXES == 1 )
- {
- if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
- 802a8c4: 6823 ldr r3, [r4, #0]
- 802a8c6: b933 cbnz r3, 802a8d6 <xQueueGenericReceive+0xf0>
- {
- taskENTER_CRITICAL();
- 802a8c8: f000 ff96 bl 802b7f8 <vPortEnterCritical>
- {
- vTaskPriorityInherit( ( void * ) pxQueue->pxMutexHolder );
- 802a8cc: 6860 ldr r0, [r4, #4]
- 802a8ce: f000 fd17 bl 802b300 <vTaskPriorityInherit>
- }
- taskEXIT_CRITICAL();
- 802a8d2: f000 ffbd bl 802b850 <vPortExitCritical>
- mtCOVERAGE_TEST_MARKER();
- }
- }
- #endif
- vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
- 802a8d6: f104 0024 add.w r0, r4, #36 ; 0x24
- 802a8da: 9901 ldr r1, [sp, #4]
- 802a8dc: f000 fc24 bl 802b128 <vTaskPlaceOnEventList>
- prvUnlockQueue( pxQueue );
- 802a8e0: 4620 mov r0, r4
- 802a8e2: f7ff fd54 bl 802a38e <prvUnlockQueue>
- if( xTaskResumeAll() == pdFALSE )
- 802a8e6: f000 fad3 bl 802ae90 <xTaskResumeAll>
- 802a8ea: 2800 cmp r0, #0
- 802a8ec: d193 bne.n 802a816 <xQueueGenericReceive+0x30>
- {
- portYIELD_WITHIN_API();
- 802a8ee: f000 ff6f bl 802b7d0 <vPortYield>
- 802a8f2: e790 b.n 802a816 <xQueueGenericReceive+0x30>
- }
- }
- else
- {
- /* Try again. */
- prvUnlockQueue( pxQueue );
- 802a8f4: 4620 mov r0, r4
- 802a8f6: f7ff fd4a bl 802a38e <prvUnlockQueue>
- ( void ) xTaskResumeAll();
- 802a8fa: f000 fac9 bl 802ae90 <xTaskResumeAll>
- 802a8fe: e78a b.n 802a816 <xQueueGenericReceive+0x30>
- }
- }
- else
- {
- prvUnlockQueue( pxQueue );
- 802a900: 4620 mov r0, r4
- 802a902: f7ff fd44 bl 802a38e <prvUnlockQueue>
- ( void ) xTaskResumeAll();
- 802a906: f000 fac3 bl 802ae90 <xTaskResumeAll>
- traceQUEUE_RECEIVE_FAILED( pxQueue );
- return errQUEUE_EMPTY;
- 802a90a: 2000 movs r0, #0
- 802a90c: e00b b.n 802a926 <xQueueGenericReceive+0x140>
- TimeOut_t xTimeOut;
- int8_t *pcOriginalReadPosition;
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
- 802a90e: f000 ff6b bl 802b7e8 <ulPortSetInterruptMask>
- 802a912: e77b b.n 802a80c <xQueueGenericReceive+0x26>
- #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
- {
- configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
- 802a914: f000 fce4 bl 802b2e0 <xTaskGetSchedulerState>
- 802a918: 2800 cmp r0, #0
- 802a91a: f47f af7e bne.w 802a81a <xQueueGenericReceive+0x34>
- 802a91e: e776 b.n 802a80e <xQueueGenericReceive+0x28>
- 802a920: f000 ff62 bl 802b7e8 <ulPortSetInterruptMask>
- 802a924: e776 b.n 802a814 <xQueueGenericReceive+0x2e>
- ( void ) xTaskResumeAll();
- traceQUEUE_RECEIVE_FAILED( pxQueue );
- return errQUEUE_EMPTY;
- }
- }
- }
- 802a926: b005 add sp, #20
- 802a928: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
- 0802a92c <xQueueReceiveFromISR>:
- /*-----------------------------------------------------------*/
- BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken )
- {
- 802a92c: b5f8 push {r3, r4, r5, r6, r7, lr}
- 802a92e: 460e mov r6, r1
- 802a930: 4615 mov r5, r2
- BaseType_t xReturn;
- UBaseType_t uxSavedInterruptStatus;
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- 802a932: 4604 mov r4, r0
- 802a934: b910 cbnz r0, 802a93c <xQueueReceiveFromISR+0x10>
- 802a936: f000 ff57 bl 802b7e8 <ulPortSetInterruptMask>
- 802a93a: e7fe b.n 802a93a <xQueueReceiveFromISR+0xe>
- configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
- 802a93c: bb09 cbnz r1, 802a982 <xQueueReceiveFromISR+0x56>
- 802a93e: 6c03 ldr r3, [r0, #64] ; 0x40
- 802a940: b1fb cbz r3, 802a982 <xQueueReceiveFromISR+0x56>
- 802a942: e01b b.n 802a97c <xQueueReceiveFromISR+0x50>
- 802a944: e7fe b.n 802a944 <xQueueReceiveFromISR+0x18>
- /* Cannot block in an ISR, so check there is data available. */
- if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )
- {
- traceQUEUE_RECEIVE_FROM_ISR( pxQueue );
- prvCopyDataFromQueue( pxQueue, pvBuffer );
- 802a946: 4620 mov r0, r4
- 802a948: 4631 mov r1, r6
- 802a94a: f7ff fd54 bl 802a3f6 <prvCopyDataFromQueue>
- --( pxQueue->uxMessagesWaiting );
- 802a94e: 6ba3 ldr r3, [r4, #56] ; 0x38
- 802a950: 3b01 subs r3, #1
- 802a952: 63a3 str r3, [r4, #56] ; 0x38
- /* If the queue is locked the event list will not be modified.
- Instead update the lock count so the task that unlocks the queue
- will know that an ISR has removed data while the queue was
- locked. */
- if( pxQueue->xRxLock == queueUNLOCKED )
- 802a954: 6c63 ldr r3, [r4, #68] ; 0x44
- 802a956: 3301 adds r3, #1
- 802a958: d10b bne.n 802a972 <xQueueReceiveFromISR+0x46>
- {
- if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
- 802a95a: 6923 ldr r3, [r4, #16]
- 802a95c: b903 cbnz r3, 802a960 <xQueueReceiveFromISR+0x34>
- 802a95e: e00b b.n 802a978 <xQueueReceiveFromISR+0x4c>
- {
- if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
- 802a960: f104 0010 add.w r0, r4, #16
- 802a964: f000 fc3c bl 802b1e0 <xTaskRemoveFromEventList>
- 802a968: b130 cbz r0, 802a978 <xQueueReceiveFromISR+0x4c>
- {
- /* The task waiting has a higher priority than us so
- force a context switch. */
- if( pxHigherPriorityTaskWoken != NULL )
- 802a96a: b12d cbz r5, 802a978 <xQueueReceiveFromISR+0x4c>
- {
- *pxHigherPriorityTaskWoken = pdTRUE;
- 802a96c: 2401 movs r4, #1
- 802a96e: 602c str r4, [r5, #0]
- 802a970: e010 b.n 802a994 <xQueueReceiveFromISR+0x68>
- }
- else
- {
- /* Increment the lock count so the task that unlocks the queue
- knows that data was removed while it was locked. */
- ++( pxQueue->xRxLock );
- 802a972: 6c63 ldr r3, [r4, #68] ; 0x44
- 802a974: 3301 adds r3, #1
- 802a976: 6463 str r3, [r4, #68] ; 0x44
- }
- xReturn = pdPASS;
- 802a978: 2401 movs r4, #1
- 802a97a: e00b b.n 802a994 <xQueueReceiveFromISR+0x68>
- BaseType_t xReturn;
- UBaseType_t uxSavedInterruptStatus;
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
- 802a97c: f000 ff34 bl 802b7e8 <ulPortSetInterruptMask>
- 802a980: e7e0 b.n 802a944 <xQueueReceiveFromISR+0x18>
- that have been assigned a priority at or (logically) below the maximum
- system call interrupt priority. FreeRTOS maintains a separate interrupt
- safe API to ensure interrupt entry is as fast and as simple as possible.
- More information (albeit Cortex-M specific) is provided on the following
- link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
- portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
- 802a982: f001 f801 bl 802b988 <vPortValidateInterruptPriority>
- uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
- 802a986: f000 ff2f bl 802b7e8 <ulPortSetInterruptMask>
- {
- /* Cannot block in an ISR, so check there is data available. */
- if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )
- 802a98a: 6ba3 ldr r3, [r4, #56] ; 0x38
- safe API to ensure interrupt entry is as fast and as simple as possible.
- More information (albeit Cortex-M specific) is provided on the following
- link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
- portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
- uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
- 802a98c: 4607 mov r7, r0
- {
- /* Cannot block in an ISR, so check there is data available. */
- if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )
- 802a98e: 2b00 cmp r3, #0
- 802a990: d1d9 bne.n 802a946 <xQueueReceiveFromISR+0x1a>
- xReturn = pdPASS;
- }
- else
- {
- xReturn = pdFAIL;
- 802a992: 461c mov r4, r3
- traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue );
- }
- }
- portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
- 802a994: 4638 mov r0, r7
- 802a996: f000 ff57 bl 802b848 <vPortClearInterruptMask>
- return xReturn;
- }
- 802a99a: 4620 mov r0, r4
- 802a99c: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 0802a99e <uxQueueMessagesWaiting>:
- return xReturn;
- }
- /*-----------------------------------------------------------*/
- UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue )
- {
- 802a99e: b510 push {r4, lr}
- UBaseType_t uxReturn;
- configASSERT( xQueue );
- 802a9a0: 4604 mov r4, r0
- 802a9a2: b910 cbnz r0, 802a9aa <uxQueueMessagesWaiting+0xc>
- 802a9a4: f000 ff20 bl 802b7e8 <ulPortSetInterruptMask>
- 802a9a8: e7fe b.n 802a9a8 <uxQueueMessagesWaiting+0xa>
- taskENTER_CRITICAL();
- 802a9aa: f000 ff25 bl 802b7f8 <vPortEnterCritical>
- {
- uxReturn = ( ( Queue_t * ) xQueue )->uxMessagesWaiting;
- 802a9ae: 6ba4 ldr r4, [r4, #56] ; 0x38
- }
- taskEXIT_CRITICAL();
- 802a9b0: f000 ff4e bl 802b850 <vPortExitCritical>
- return uxReturn;
- } /*lint !e818 Pointer cannot be declared const as xQueue is a typedef not pointer. */
- 802a9b4: 4620 mov r0, r4
- 802a9b6: bd10 pop {r4, pc}
- 0802a9b8 <uxQueueSpacesAvailable>:
- /*-----------------------------------------------------------*/
- UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue )
- {
- 802a9b8: b510 push {r4, lr}
- UBaseType_t uxReturn;
- Queue_t *pxQueue;
- pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- 802a9ba: 4604 mov r4, r0
- 802a9bc: b910 cbnz r0, 802a9c4 <uxQueueSpacesAvailable+0xc>
- 802a9be: f000 ff13 bl 802b7e8 <ulPortSetInterruptMask>
- 802a9c2: e7fe b.n 802a9c2 <uxQueueSpacesAvailable+0xa>
- taskENTER_CRITICAL();
- 802a9c4: f000 ff18 bl 802b7f8 <vPortEnterCritical>
- {
- uxReturn = pxQueue->uxLength - pxQueue->uxMessagesWaiting;
- 802a9c8: 6ba3 ldr r3, [r4, #56] ; 0x38
- 802a9ca: 6be4 ldr r4, [r4, #60] ; 0x3c
- 802a9cc: 1ae4 subs r4, r4, r3
- }
- taskEXIT_CRITICAL();
- 802a9ce: f000 ff3f bl 802b850 <vPortExitCritical>
- return uxReturn;
- } /*lint !e818 Pointer cannot be declared const as xQueue is a typedef not pointer. */
- 802a9d2: 4620 mov r0, r4
- 802a9d4: bd10 pop {r4, pc}
- 0802a9d6 <vQueueDelete>:
- return uxReturn;
- } /*lint !e818 Pointer cannot be declared const as xQueue is a typedef not pointer. */
- /*-----------------------------------------------------------*/
- void vQueueDelete( QueueHandle_t xQueue )
- {
- 802a9d6: b508 push {r3, lr}
- Queue_t * const pxQueue = ( Queue_t * ) xQueue;
- configASSERT( pxQueue );
- 802a9d8: b910 cbnz r0, 802a9e0 <vQueueDelete+0xa>
- 802a9da: f000 ff05 bl 802b7e8 <ulPortSetInterruptMask>
- 802a9de: e7fe b.n 802a9de <vQueueDelete+0x8>
- {
- vQueueUnregisterQueue( pxQueue );
- }
- #endif
- vPortFree( pxQueue );
- }
- 802a9e0: e8bd 4008 ldmia.w sp!, {r3, lr}
- #if ( configQUEUE_REGISTRY_SIZE > 0 )
- {
- vQueueUnregisterQueue( pxQueue );
- }
- #endif
- vPortFree( pxQueue );
- 802a9e4: f001 b89c b.w 802bb20 <vPortFree>
- 0802a9e8 <vQueueWaitForMessageRestricted>:
- /*-----------------------------------------------------------*/
- #if ( configUSE_TIMERS == 1 )
- void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait )
- {
- 802a9e8: b538 push {r3, r4, r5, lr}
- 802a9ea: 4604 mov r4, r0
- 802a9ec: 460d mov r5, r1
- will not actually cause the task to block, just place it on a blocked
- list. It will not block until the scheduler is unlocked - at which
- time a yield will be performed. If an item is added to the queue while
- the queue is locked, and the calling task blocks on the queue, then the
- calling task will be immediately unblocked when the queue is unlocked. */
- prvLockQueue( pxQueue );
- 802a9ee: f000 ff03 bl 802b7f8 <vPortEnterCritical>
- 802a9f2: 6c63 ldr r3, [r4, #68] ; 0x44
- 802a9f4: 3301 adds r3, #1
- 802a9f6: d101 bne.n 802a9fc <vQueueWaitForMessageRestricted+0x14>
- 802a9f8: 2300 movs r3, #0
- 802a9fa: 6463 str r3, [r4, #68] ; 0x44
- 802a9fc: 6ca3 ldr r3, [r4, #72] ; 0x48
- 802a9fe: 3301 adds r3, #1
- 802aa00: d101 bne.n 802aa06 <vQueueWaitForMessageRestricted+0x1e>
- 802aa02: 2300 movs r3, #0
- 802aa04: 64a3 str r3, [r4, #72] ; 0x48
- 802aa06: f000 ff23 bl 802b850 <vPortExitCritical>
- if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0U )
- 802aa0a: 6ba3 ldr r3, [r4, #56] ; 0x38
- 802aa0c: b923 cbnz r3, 802aa18 <vQueueWaitForMessageRestricted+0x30>
- {
- /* There is nothing in the queue, block for the specified period. */
- vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
- 802aa0e: f104 0024 add.w r0, r4, #36 ; 0x24
- 802aa12: 4629 mov r1, r5
- 802aa14: f000 fbbc bl 802b190 <vTaskPlaceOnEventListRestricted>
- }
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- prvUnlockQueue( pxQueue );
- 802aa18: 4620 mov r0, r4
- }
- 802aa1a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- }
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- prvUnlockQueue( pxQueue );
- 802aa1e: f7ff bcb6 b.w 802a38e <prvUnlockQueue>
- 802aa22: 0000 movs r0, r0
- 0802aa24 <prvResetNextTaskUnblockTime>:
- static void prvResetNextTaskUnblockTime( void )
- {
- TCB_t *pxTCB;
- if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
- 802aa24: 4a06 ldr r2, [pc, #24] ; (802aa40 <prvResetNextTaskUnblockTime+0x1c>)
- 802aa26: 6813 ldr r3, [r2, #0]
- 802aa28: 6819 ldr r1, [r3, #0]
- 802aa2a: 4b06 ldr r3, [pc, #24] ; (802aa44 <prvResetNextTaskUnblockTime+0x20>)
- 802aa2c: b911 cbnz r1, 802aa34 <prvResetNextTaskUnblockTime+0x10>
- /* The new current delayed list is empty. Set
- xNextTaskUnblockTime to the maximum possible value so it is
- extremely unlikely that the
- if( xTickCount >= xNextTaskUnblockTime ) test will pass until
- there is an item in the delayed list. */
- xNextTaskUnblockTime = portMAX_DELAY;
- 802aa2e: f04f 32ff mov.w r2, #4294967295
- 802aa32: e003 b.n 802aa3c <prvResetNextTaskUnblockTime+0x18>
- {
- /* The new current delayed list is not empty, get the value of
- the item at the head of the delayed list. This is the time at
- which the task at the head of the delayed list should be removed
- from the Blocked state. */
- ( pxTCB ) = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList );
- 802aa34: 6812 ldr r2, [r2, #0]
- 802aa36: 68d2 ldr r2, [r2, #12]
- xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xGenericListItem ) );
- 802aa38: 68d2 ldr r2, [r2, #12]
- 802aa3a: 6852 ldr r2, [r2, #4]
- 802aa3c: 601a str r2, [r3, #0]
- 802aa3e: 4770 bx lr
- 802aa40: 20000bd0 .word 0x20000bd0
- 802aa44: 20000708 .word 0x20000708
- 0802aa48 <prvAddCurrentTaskToDelayedList>:
- /*-----------------------------------------------------------*/
- static void prvAddCurrentTaskToDelayedList( const TickType_t xTimeToWake )
- {
- /* The list item will be inserted in wake time order. */
- listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake );
- 802aa48: 4b0e ldr r3, [pc, #56] ; (802aa84 <prvAddCurrentTaskToDelayedList+0x3c>)
- 802aa4a: 681a ldr r2, [r3, #0]
- #endif /* vTaskDelete */
- }
- /*-----------------------------------------------------------*/
- static void prvAddCurrentTaskToDelayedList( const TickType_t xTimeToWake )
- {
- 802aa4c: b510 push {r4, lr}
- /* The list item will be inserted in wake time order. */
- listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake );
- 802aa4e: 6050 str r0, [r2, #4]
- if( xTimeToWake < xTickCount )
- 802aa50: 4a0d ldr r2, [pc, #52] ; (802aa88 <prvAddCurrentTaskToDelayedList+0x40>)
- 802aa52: 6812 ldr r2, [r2, #0]
- 802aa54: 4290 cmp r0, r2
- #endif /* vTaskDelete */
- }
- /*-----------------------------------------------------------*/
- static void prvAddCurrentTaskToDelayedList( const TickType_t xTimeToWake )
- {
- 802aa56: 4604 mov r4, r0
- /* The list item will be inserted in wake time order. */
- listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake );
- if( xTimeToWake < xTickCount )
- 802aa58: d207 bcs.n 802aa6a <prvAddCurrentTaskToDelayedList+0x22>
- {
- /* Wake time has overflowed. Place this item in the overflow list. */
- vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xGenericListItem ) );
- 802aa5a: 4a0c ldr r2, [pc, #48] ; (802aa8c <prvAddCurrentTaskToDelayedList+0x44>)
- 802aa5c: 6810 ldr r0, [r2, #0]
- 802aa5e: 6819 ldr r1, [r3, #0]
- 802aa60: 3104 adds r1, #4
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- }
- 802aa62: e8bd 4010 ldmia.w sp!, {r4, lr}
- listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake );
- if( xTimeToWake < xTickCount )
- {
- /* Wake time has overflowed. Place this item in the overflow list. */
- vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xGenericListItem ) );
- 802aa66: f7ff bc6a b.w 802a33e <vListInsert>
- }
- else
- {
- /* The wake time has not overflowed, so the current block list is used. */
- vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xGenericListItem ) );
- 802aa6a: 4a09 ldr r2, [pc, #36] ; (802aa90 <prvAddCurrentTaskToDelayedList+0x48>)
- 802aa6c: 6810 ldr r0, [r2, #0]
- 802aa6e: 6819 ldr r1, [r3, #0]
- 802aa70: 3104 adds r1, #4
- 802aa72: f7ff fc64 bl 802a33e <vListInsert>
- /* If the task entering the blocked state was placed at the head of the
- list of blocked tasks then xNextTaskUnblockTime needs to be updated
- too. */
- if( xTimeToWake < xNextTaskUnblockTime )
- 802aa76: 4b07 ldr r3, [pc, #28] ; (802aa94 <prvAddCurrentTaskToDelayedList+0x4c>)
- 802aa78: 681a ldr r2, [r3, #0]
- 802aa7a: 4294 cmp r4, r2
- {
- xNextTaskUnblockTime = xTimeToWake;
- 802aa7c: bf38 it cc
- 802aa7e: 601c strcc r4, [r3, #0]
- 802aa80: bd10 pop {r4, pc}
- 802aa82: bf00 nop
- 802aa84: 20000c80 .word 0x20000c80
- 802aa88: 20000c9c .word 0x20000c9c
- 802aa8c: 20000ca0 .word 0x20000ca0
- 802aa90: 20000bd0 .word 0x20000bd0
- 802aa94: 20000708 .word 0x20000708
- 0802aa98 <xTaskGenericCreate>:
- #endif
- /*-----------------------------------------------------------*/
- BaseType_t xTaskGenericCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask, StackType_t * const puxStackBuffer, const MemoryRegion_t * const xRegions ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
- {
- 802aa98: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 802aa9c: 9d0a ldr r5, [sp, #40] ; 0x28
- 802aa9e: f8dd 802c ldr.w r8, [sp, #44] ; 0x2c
- 802aaa2: 9e0c ldr r6, [sp, #48] ; 0x30
- 802aaa4: 460f mov r7, r1
- 802aaa6: 4693 mov fp, r2
- 802aaa8: 469a mov sl, r3
- BaseType_t xReturn;
- TCB_t * pxNewTCB;
- StackType_t *pxTopOfStack;
- configASSERT( pxTaskCode );
- 802aaaa: 4681 mov r9, r0
- 802aaac: b910 cbnz r0, 802aab4 <xTaskGenericCreate+0x1c>
- 802aaae: f000 fe9b bl 802b7e8 <ulPortSetInterruptMask>
- 802aab2: e7fe b.n 802aab2 <xTaskGenericCreate+0x1a>
- configASSERT( ( ( uxPriority & ( ~portPRIVILEGE_BIT ) ) < configMAX_PRIORITIES ) );
- 802aab4: 2d04 cmp r5, #4
- 802aab6: d902 bls.n 802aabe <xTaskGenericCreate+0x26>
- 802aab8: f000 fe96 bl 802b7e8 <ulPortSetInterruptMask>
- 802aabc: e7fe b.n 802aabc <xTaskGenericCreate+0x24>
- #else /* portSTACK_GROWTH */
- {
- StackType_t *pxStack;
- /* Allocate space for the stack used by the task being created. */
- pxStack = ( StackType_t * ) pvPortMallocAligned( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ), puxStackBuffer ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- 802aabe: b936 cbnz r6, 802aace <xTaskGenericCreate+0x36>
- 802aac0: 0090 lsls r0, r2, #2
- 802aac2: f000 ffa7 bl 802ba14 <pvPortMalloc>
- if( pxStack != NULL )
- 802aac6: 4606 mov r6, r0
- 802aac8: 2800 cmp r0, #0
- 802aaca: f000 809e beq.w 802ac0a <xTaskGenericCreate+0x172>
- {
- /* Allocate space for the TCB. Where the memory comes from depends
- on the implementation of the port malloc function. */
- pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) );
- 802aace: 205c movs r0, #92 ; 0x5c
- 802aad0: f000 ffa0 bl 802ba14 <pvPortMalloc>
- if( pxNewTCB != NULL )
- 802aad4: 4604 mov r4, r0
- 802aad6: b178 cbz r0, 802aaf8 <xTaskGenericCreate+0x60>
- {
- /* Store the stack location in the TCB. */
- pxNewTCB->pxStack = pxStack;
- 802aad8: 6306 str r6, [r0, #48] ; 0x30
- {
- /* Avoid dependency on memset() if it is not required. */
- #if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) )
- {
- /* Just to help debugging. */
- ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) usStackDepth * sizeof( StackType_t ) );
- 802aada: ea4f 028b mov.w r2, fp, lsl #2
- 802aade: 4630 mov r0, r6
- 802aae0: 21a5 movs r1, #165 ; 0xa5
- 802aae2: f7f7 f80d bl 8021b00 <memset>
- stack grows from high memory to low (as per the 80x86) or vice versa.
- portSTACK_GROWTH is used to make the result positive or negative as
- required by the port. */
- #if( portSTACK_GROWTH < 0 )
- {
- pxTopOfStack = pxNewTCB->pxStack + ( usStackDepth - ( uint16_t ) 1 );
- 802aae6: 6b23 ldr r3, [r4, #48] ; 0x30
- 802aae8: f10b 3bff add.w fp, fp, #4294967295
- 802aaec: eb03 0b8b add.w fp, r3, fp, lsl #2
- pxTopOfStack = ( StackType_t * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) & ( ( portPOINTER_SIZE_TYPE ) ~portBYTE_ALIGNMENT_MASK ) ); /*lint !e923 MISRA exception. Avoiding casts between pointers and integers is not practical. Size differences accounted for using portPOINTER_SIZE_TYPE type. */
- 802aaf0: f02b 0b07 bic.w fp, fp, #7
- static void prvInitialiseTCBVariables( TCB_t * const pxTCB, const char * const pcName, UBaseType_t uxPriority, const MemoryRegion_t * const xRegions, const uint16_t usStackDepth ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
- {
- UBaseType_t x;
- /* Store the task name in the TCB. */
- for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
- 802aaf4: 2600 movs r6, #0
- 802aaf6: e003 b.n 802ab00 <xTaskGenericCreate+0x68>
- }
- else
- {
- /* The stack cannot be used as the TCB was not created. Free it
- again. */
- vPortFree( pxStack );
- 802aaf8: 4630 mov r0, r6
- 802aafa: f001 f811 bl 802bb20 <vPortFree>
- 802aafe: e084 b.n 802ac0a <xTaskGenericCreate+0x172>
- static char *prvWriteNameToBuffer( char *pcBuffer, const char *pcTaskName );
- #endif
- /*-----------------------------------------------------------*/
- BaseType_t xTaskGenericCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask, StackType_t * const puxStackBuffer, const MemoryRegion_t * const xRegions ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
- 802ab00: 19a3 adds r3, r4, r6
- UBaseType_t x;
- /* Store the task name in the TCB. */
- for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
- {
- pxTCB->pcTaskName[ x ] = pcName[ x ];
- 802ab02: 5dba ldrb r2, [r7, r6]
- 802ab04: f883 2034 strb.w r2, [r3, #52] ; 0x34
- /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than
- configMAX_TASK_NAME_LEN characters just in case the memory after the
- string is not accessible (extremely unlikely). */
- if( pcName[ x ] == 0x00 )
- 802ab08: 5dbb ldrb r3, [r7, r6]
- 802ab0a: b113 cbz r3, 802ab12 <xTaskGenericCreate+0x7a>
- static void prvInitialiseTCBVariables( TCB_t * const pxTCB, const char * const pcName, UBaseType_t uxPriority, const MemoryRegion_t * const xRegions, const uint16_t usStackDepth ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
- {
- UBaseType_t x;
- /* Store the task name in the TCB. */
- for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
- 802ab0c: 3601 adds r6, #1
- 802ab0e: 2e10 cmp r6, #16
- 802ab10: d1f6 bne.n 802ab00 <xTaskGenericCreate+0x68>
- }
- }
- /* Ensure the name string is terminated in the case that the string length
- was greater or equal to configMAX_TASK_NAME_LEN. */
- pxTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = '\0';
- 802ab12: 2600 movs r6, #0
- pxTCB->uxBasePriority = uxPriority;
- pxTCB->uxMutexesHeld = 0;
- }
- #endif /* configUSE_MUTEXES */
- vListInitialiseItem( &( pxTCB->xGenericListItem ) );
- 802ab14: 1d27 adds r7, r4, #4
- 802ab16: 4638 mov r0, r7
- }
- }
- /* Ensure the name string is terminated in the case that the string length
- was greater or equal to configMAX_TASK_NAME_LEN. */
- pxTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = '\0';
- 802ab18: f884 6043 strb.w r6, [r4, #67] ; 0x43
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- pxTCB->uxPriority = uxPriority;
- 802ab1c: 62e5 str r5, [r4, #44] ; 0x2c
- #if ( configUSE_MUTEXES == 1 )
- {
- pxTCB->uxBasePriority = uxPriority;
- 802ab1e: 64e5 str r5, [r4, #76] ; 0x4c
- pxTCB->uxMutexesHeld = 0;
- 802ab20: 6526 str r6, [r4, #80] ; 0x50
- }
- #endif /* configUSE_MUTEXES */
- vListInitialiseItem( &( pxTCB->xGenericListItem ) );
- 802ab22: f7ff fbfd bl 802a320 <vListInitialiseItem>
- vListInitialiseItem( &( pxTCB->xEventListItem ) );
- 802ab26: f104 0018 add.w r0, r4, #24
- 802ab2a: f7ff fbf9 bl 802a320 <vListInitialiseItem>
- /* Set the pxTCB as a link back from the ListItem_t. This is so we can get
- back to the containing TCB from a generic item in a list. */
- listSET_LIST_ITEM_OWNER( &( pxTCB->xGenericListItem ), pxTCB );
- /* Event lists are always in priority order. */
- listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- 802ab2e: f1c5 0305 rsb r3, r5, #5
- }
- #endif /* portUSING_MPU_WRAPPERS */
- #if ( configUSE_TASK_NOTIFICATIONS == 1 )
- {
- pxTCB->ulNotifiedValue = 0;
- 802ab32: 6566 str r6, [r4, #84] ; 0x54
- vListInitialiseItem( &( pxTCB->xGenericListItem ) );
- vListInitialiseItem( &( pxTCB->xEventListItem ) );
- /* Set the pxTCB as a link back from the ListItem_t. This is so we can get
- back to the containing TCB from a generic item in a list. */
- listSET_LIST_ITEM_OWNER( &( pxTCB->xGenericListItem ), pxTCB );
- 802ab34: 6124 str r4, [r4, #16]
- /* Event lists are always in priority order. */
- listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- 802ab36: 61a3 str r3, [r4, #24]
- listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB );
- 802ab38: 6264 str r4, [r4, #36] ; 0x24
- #endif /* portUSING_MPU_WRAPPERS */
- #if ( configUSE_TASK_NOTIFICATIONS == 1 )
- {
- pxTCB->ulNotifiedValue = 0;
- pxTCB->eNotifyState = eNotWaitingNotification;
- 802ab3a: f884 6058 strb.w r6, [r4, #88] ; 0x58
- {
- pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters, xRunPrivileged );
- }
- #else /* portUSING_MPU_WRAPPERS */
- {
- pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters );
- 802ab3e: 4658 mov r0, fp
- 802ab40: 4649 mov r1, r9
- 802ab42: 4652 mov r2, sl
- 802ab44: f000 fe24 bl 802b790 <pxPortInitialiseStack>
- 802ab48: 6020 str r0, [r4, #0]
- }
- #endif /* portUSING_MPU_WRAPPERS */
- if( ( void * ) pxCreatedTask != NULL )
- 802ab4a: f1b8 0f00 cmp.w r8, #0
- 802ab4e: d001 beq.n 802ab54 <xTaskGenericCreate+0xbc>
- {
- /* Pass the TCB out - in an anonymous way. The calling function/
- task can use this as a handle to delete the task later if
- required.*/
- *pxCreatedTask = ( TaskHandle_t ) pxNewTCB;
- 802ab50: f8c8 4000 str.w r4, [r8]
- mtCOVERAGE_TEST_MARKER();
- }
- /* Ensure interrupts don't access the task lists while they are being
- updated. */
- taskENTER_CRITICAL();
- 802ab54: f000 fe50 bl 802b7f8 <vPortEnterCritical>
- {
- uxCurrentNumberOfTasks++;
- 802ab58: 4a2e ldr r2, [pc, #184] ; (802ac14 <xTaskGenericCreate+0x17c>)
- 802ab5a: 6813 ldr r3, [r2, #0]
- 802ab5c: 3301 adds r3, #1
- 802ab5e: 6013 str r3, [r2, #0]
- if( pxCurrentTCB == NULL )
- 802ab60: 4b2d ldr r3, [pc, #180] ; (802ac18 <xTaskGenericCreate+0x180>)
- 802ab62: 681e ldr r6, [r3, #0]
- 802ab64: bb36 cbnz r6, 802abb4 <xTaskGenericCreate+0x11c>
- {
- /* There are no other tasks, or all the other tasks are in
- the suspended state - make this the current task. */
- pxCurrentTCB = pxNewTCB;
- 802ab66: 601c str r4, [r3, #0]
- if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 )
- 802ab68: 6813 ldr r3, [r2, #0]
- 802ab6a: 2b01 cmp r3, #1
- 802ab6c: d12a bne.n 802abc4 <xTaskGenericCreate+0x12c>
- {
- UBaseType_t uxPriority;
- for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
- {
- vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
- 802ab6e: f8df 80d0 ldr.w r8, [pc, #208] ; 802ac40 <xTaskGenericCreate+0x1a8>
- 802ab72: f04f 0914 mov.w r9, #20
- 802ab76: fb09 8006 mla r0, r9, r6, r8
- static void prvInitialiseTaskLists( void )
- {
- UBaseType_t uxPriority;
- for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
- 802ab7a: 3601 adds r6, #1
- {
- vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
- 802ab7c: f7ff fbc5 bl 802a30a <vListInitialise>
- static void prvInitialiseTaskLists( void )
- {
- UBaseType_t uxPriority;
- for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
- 802ab80: 2e05 cmp r6, #5
- 802ab82: d1f8 bne.n 802ab76 <xTaskGenericCreate+0xde>
- {
- vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
- }
- vListInitialise( &xDelayedTaskList1 );
- 802ab84: f8df 80bc ldr.w r8, [pc, #188] ; 802ac44 <xTaskGenericCreate+0x1ac>
- vListInitialise( &xDelayedTaskList2 );
- 802ab88: 4e24 ldr r6, [pc, #144] ; (802ac1c <xTaskGenericCreate+0x184>)
- for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
- {
- vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
- }
- vListInitialise( &xDelayedTaskList1 );
- 802ab8a: 4640 mov r0, r8
- 802ab8c: f7ff fbbd bl 802a30a <vListInitialise>
- vListInitialise( &xDelayedTaskList2 );
- 802ab90: 4630 mov r0, r6
- 802ab92: f7ff fbba bl 802a30a <vListInitialise>
- vListInitialise( &xPendingReadyList );
- 802ab96: 4822 ldr r0, [pc, #136] ; (802ac20 <xTaskGenericCreate+0x188>)
- 802ab98: f7ff fbb7 bl 802a30a <vListInitialise>
- #if ( INCLUDE_vTaskDelete == 1 )
- {
- vListInitialise( &xTasksWaitingTermination );
- 802ab9c: 4821 ldr r0, [pc, #132] ; (802ac24 <xTaskGenericCreate+0x18c>)
- 802ab9e: f7ff fbb4 bl 802a30a <vListInitialise>
- }
- #endif /* INCLUDE_vTaskDelete */
- #if ( INCLUDE_vTaskSuspend == 1 )
- {
- vListInitialise( &xSuspendedTaskList );
- 802aba2: 4821 ldr r0, [pc, #132] ; (802ac28 <xTaskGenericCreate+0x190>)
- 802aba4: f7ff fbb1 bl 802a30a <vListInitialise>
- }
- #endif /* INCLUDE_vTaskSuspend */
- /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList
- using list2. */
- pxDelayedTaskList = &xDelayedTaskList1;
- 802aba8: 4b20 ldr r3, [pc, #128] ; (802ac2c <xTaskGenericCreate+0x194>)
- 802abaa: f8c3 8000 str.w r8, [r3]
- pxOverflowDelayedTaskList = &xDelayedTaskList2;
- 802abae: 4b20 ldr r3, [pc, #128] ; (802ac30 <xTaskGenericCreate+0x198>)
- 802abb0: 601e str r6, [r3, #0]
- 802abb2: e007 b.n 802abc4 <xTaskGenericCreate+0x12c>
- else
- {
- /* If the scheduler is not already running, make this task the
- current task if it is the highest priority task to be created
- so far. */
- if( xSchedulerRunning == pdFALSE )
- 802abb4: 4a1f ldr r2, [pc, #124] ; (802ac34 <xTaskGenericCreate+0x19c>)
- 802abb6: 6812 ldr r2, [r2, #0]
- 802abb8: b922 cbnz r2, 802abc4 <xTaskGenericCreate+0x12c>
- {
- if( pxCurrentTCB->uxPriority <= uxPriority )
- 802abba: 681a ldr r2, [r3, #0]
- 802abbc: 6ad2 ldr r2, [r2, #44] ; 0x2c
- 802abbe: 42aa cmp r2, r5
- {
- pxCurrentTCB = pxNewTCB;
- 802abc0: bf98 it ls
- 802abc2: 601c strls r4, [r3, #0]
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- uxTaskNumber++;
- 802abc4: 4a1c ldr r2, [pc, #112] ; (802ac38 <xTaskGenericCreate+0x1a0>)
- 802abc6: 6813 ldr r3, [r2, #0]
- 802abc8: 3301 adds r3, #1
- 802abca: 6013 str r3, [r2, #0]
- pxNewTCB->uxTCBNumber = uxTaskNumber;
- }
- #endif /* configUSE_TRACE_FACILITY */
- traceTASK_CREATE( pxNewTCB );
- prvAddTaskToReadyList( pxNewTCB );
- 802abcc: 4a1b ldr r2, [pc, #108] ; (802ac3c <xTaskGenericCreate+0x1a4>)
- uxTaskNumber++;
- #if ( configUSE_TRACE_FACILITY == 1 )
- {
- /* Add a counter into the TCB for tracing only. */
- pxNewTCB->uxTCBNumber = uxTaskNumber;
- 802abce: 6463 str r3, [r4, #68] ; 0x44
- }
- #endif /* configUSE_TRACE_FACILITY */
- traceTASK_CREATE( pxNewTCB );
- prvAddTaskToReadyList( pxNewTCB );
- 802abd0: 6ae3 ldr r3, [r4, #44] ; 0x2c
- 802abd2: 6811 ldr r1, [r2, #0]
- 802abd4: 2401 movs r4, #1
- 802abd6: fa04 f003 lsl.w r0, r4, r3
- 802abda: 4301 orrs r1, r0
- 802abdc: 6011 str r1, [r2, #0]
- 802abde: 4a18 ldr r2, [pc, #96] ; (802ac40 <xTaskGenericCreate+0x1a8>)
- 802abe0: 2014 movs r0, #20
- 802abe2: fb00 2003 mla r0, r0, r3, r2
- 802abe6: 4639 mov r1, r7
- 802abe8: f7ff fb9d bl 802a326 <vListInsertEnd>
- xReturn = pdPASS;
- portSETUP_TCB( pxNewTCB );
- }
- taskEXIT_CRITICAL();
- 802abec: f000 fe30 bl 802b850 <vPortExitCritical>
- traceTASK_CREATE_FAILED();
- }
- if( xReturn == pdPASS )
- {
- if( xSchedulerRunning != pdFALSE )
- 802abf0: 4b10 ldr r3, [pc, #64] ; (802ac34 <xTaskGenericCreate+0x19c>)
- 802abf2: 681b ldr r3, [r3, #0]
- 802abf4: b133 cbz r3, 802ac04 <xTaskGenericCreate+0x16c>
- {
- /* If the created task is of a higher priority than the current task
- then it should run now. */
- if( pxCurrentTCB->uxPriority < uxPriority )
- 802abf6: 4b08 ldr r3, [pc, #32] ; (802ac18 <xTaskGenericCreate+0x180>)
- 802abf8: 681b ldr r3, [r3, #0]
- 802abfa: 6adb ldr r3, [r3, #44] ; 0x2c
- 802abfc: 42ab cmp r3, r5
- 802abfe: d201 bcs.n 802ac04 <xTaskGenericCreate+0x16c>
- {
- taskYIELD_IF_USING_PREEMPTION();
- 802ac00: f000 fde6 bl 802b7d0 <vPortYield>
- #endif /* configUSE_TRACE_FACILITY */
- traceTASK_CREATE( pxNewTCB );
- prvAddTaskToReadyList( pxNewTCB );
- xReturn = pdPASS;
- 802ac04: 4620 mov r0, r4
- 802ac06: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- }
- taskEXIT_CRITICAL();
- }
- else
- {
- xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;
- 802ac0a: f04f 30ff mov.w r0, #4294967295
- mtCOVERAGE_TEST_MARKER();
- }
- }
- return xReturn;
- }
- 802ac0e: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 802ac12: bf00 nop
- 802ac14: 20000ca8 .word 0x20000ca8
- 802ac18: 20000c80 .word 0x20000c80
- 802ac1c: 20000bf0 .word 0x20000bf0
- 802ac20: 20000c84 .word 0x20000c84
- 802ac24: 20000c6c .word 0x20000c6c
- 802ac28: 20000cac .word 0x20000cac
- 802ac2c: 20000bd0 .word 0x20000bd0
- 802ac30: 20000ca0 .word 0x20000ca0
- 802ac34: 20000bd4 .word 0x20000bd4
- 802ac38: 20000ca4 .word 0x20000ca4
- 802ac3c: 20000cc0 .word 0x20000cc0
- 802ac40: 20000c08 .word 0x20000c08
- 802ac44: 20000bdc .word 0x20000bdc
- 0802ac48 <vTaskDelete>:
- /*-----------------------------------------------------------*/
- #if ( INCLUDE_vTaskDelete == 1 )
- void vTaskDelete( TaskHandle_t xTaskToDelete )
- {
- 802ac48: b538 push {r3, r4, r5, lr}
- 802ac4a: 4604 mov r4, r0
- TCB_t *pxTCB;
- taskENTER_CRITICAL();
- 802ac4c: f000 fdd4 bl 802b7f8 <vPortEnterCritical>
- {
- /* If null is passed in here then it is the calling task that is
- being deleted. */
- pxTCB = prvGetTCBFromHandle( xTaskToDelete );
- 802ac50: b90c cbnz r4, 802ac56 <vTaskDelete+0xe>
- 802ac52: 4b22 ldr r3, [pc, #136] ; (802acdc <vTaskDelete+0x94>)
- 802ac54: 681c ldr r4, [r3, #0]
- /* Remove task from the ready list and place in the termination list.
- This will stop the task from be scheduled. The idle task will check
- the termination list and free up any memory allocated by the
- scheduler for the TCB and stack. */
- if( uxListRemove( &( pxTCB->xGenericListItem ) ) == ( UBaseType_t ) 0 )
- 802ac56: 1d25 adds r5, r4, #4
- 802ac58: 4628 mov r0, r5
- 802ac5a: f7ff fb88 bl 802a36e <uxListRemove>
- 802ac5e: b968 cbnz r0, 802ac7c <vTaskDelete+0x34>
- {
- taskRESET_READY_PRIORITY( pxTCB->uxPriority );
- 802ac60: 6ae2 ldr r2, [r4, #44] ; 0x2c
- 802ac62: 491f ldr r1, [pc, #124] ; (802ace0 <vTaskDelete+0x98>)
- 802ac64: 2314 movs r3, #20
- 802ac66: 4353 muls r3, r2
- 802ac68: 58cb ldr r3, [r1, r3]
- 802ac6a: b93b cbnz r3, 802ac7c <vTaskDelete+0x34>
- 802ac6c: 4b1d ldr r3, [pc, #116] ; (802ace4 <vTaskDelete+0x9c>)
- 802ac6e: 2001 movs r0, #1
- 802ac70: 6819 ldr r1, [r3, #0]
- 802ac72: fa00 f202 lsl.w r2, r0, r2
- 802ac76: ea21 0202 bic.w r2, r1, r2
- 802ac7a: 601a str r2, [r3, #0]
- {
- mtCOVERAGE_TEST_MARKER();
- }
- /* Is the task waiting on an event also? */
- if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
- 802ac7c: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802ac7e: b11b cbz r3, 802ac88 <vTaskDelete+0x40>
- {
- ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
- 802ac80: f104 0018 add.w r0, r4, #24
- 802ac84: f7ff fb73 bl 802a36e <uxListRemove>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- vListInsertEnd( &xTasksWaitingTermination, &( pxTCB->xGenericListItem ) );
- 802ac88: 4817 ldr r0, [pc, #92] ; (802ace8 <vTaskDelete+0xa0>)
- 802ac8a: 4629 mov r1, r5
- 802ac8c: f7ff fb4b bl 802a326 <vListInsertEnd>
- /* Increment the ucTasksDeleted variable so the idle task knows
- there is a task that has been deleted and that it should therefore
- check the xTasksWaitingTermination list. */
- ++uxTasksDeleted;
- 802ac90: 4b16 ldr r3, [pc, #88] ; (802acec <vTaskDelete+0xa4>)
- 802ac92: 681a ldr r2, [r3, #0]
- 802ac94: 3201 adds r2, #1
- 802ac96: 601a str r2, [r3, #0]
- /* Increment the uxTaskNumberVariable also so kernel aware debuggers
- can detect that the task lists need re-generating. */
- uxTaskNumber++;
- 802ac98: 4b15 ldr r3, [pc, #84] ; (802acf0 <vTaskDelete+0xa8>)
- 802ac9a: 681a ldr r2, [r3, #0]
- 802ac9c: 3201 adds r2, #1
- 802ac9e: 601a str r2, [r3, #0]
- traceTASK_DELETE( pxTCB );
- }
- taskEXIT_CRITICAL();
- 802aca0: f000 fdd6 bl 802b850 <vPortExitCritical>
- /* Force a reschedule if it is the currently running task that has just
- been deleted. */
- if( xSchedulerRunning != pdFALSE )
- 802aca4: 4b13 ldr r3, [pc, #76] ; (802acf4 <vTaskDelete+0xac>)
- 802aca6: 681b ldr r3, [r3, #0]
- 802aca8: 2b00 cmp r3, #0
- 802acaa: d015 beq.n 802acd8 <vTaskDelete+0x90>
- {
- if( pxTCB == pxCurrentTCB )
- 802acac: 4b0b ldr r3, [pc, #44] ; (802acdc <vTaskDelete+0x94>)
- 802acae: 681b ldr r3, [r3, #0]
- 802acb0: 429c cmp r4, r3
- 802acb2: d109 bne.n 802acc8 <vTaskDelete+0x80>
- {
- configASSERT( uxSchedulerSuspended == 0 );
- 802acb4: 4b10 ldr r3, [pc, #64] ; (802acf8 <vTaskDelete+0xb0>)
- 802acb6: 681b ldr r3, [r3, #0]
- 802acb8: b113 cbz r3, 802acc0 <vTaskDelete+0x78>
- 802acba: f000 fd95 bl 802b7e8 <ulPortSetInterruptMask>
- 802acbe: e7fe b.n 802acbe <vTaskDelete+0x76>
- prvResetNextTaskUnblockTime();
- }
- taskEXIT_CRITICAL();
- }
- }
- }
- 802acc0: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- in which Windows specific clean up operations are performed,
- after which it is not possible to yield away from this task -
- hence xYieldPending is used to latch that a context switch is
- required. */
- portPRE_TASK_DELETE_HOOK( pxTCB, &xYieldPending );
- portYIELD_WITHIN_API();
- 802acc4: f000 bd84 b.w 802b7d0 <vPortYield>
- }
- else
- {
- /* Reset the next expected unblock time in case it referred to
- the task that has just been deleted. */
- taskENTER_CRITICAL();
- 802acc8: f000 fd96 bl 802b7f8 <vPortEnterCritical>
- {
- prvResetNextTaskUnblockTime();
- 802accc: f7ff feaa bl 802aa24 <prvResetNextTaskUnblockTime>
- }
- taskEXIT_CRITICAL();
- }
- }
- }
- 802acd0: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- the task that has just been deleted. */
- taskENTER_CRITICAL();
- {
- prvResetNextTaskUnblockTime();
- }
- taskEXIT_CRITICAL();
- 802acd4: f000 bdbc b.w 802b850 <vPortExitCritical>
- 802acd8: bd38 pop {r3, r4, r5, pc}
- 802acda: bf00 nop
- 802acdc: 20000c80 .word 0x20000c80
- 802ace0: 20000c08 .word 0x20000c08
- 802ace4: 20000cc0 .word 0x20000cc0
- 802ace8: 20000c6c .word 0x20000c6c
- 802acec: 20000bd8 .word 0x20000bd8
- 802acf0: 20000ca4 .word 0x20000ca4
- 802acf4: 20000bd4 .word 0x20000bd4
- 802acf8: 20000c98 .word 0x20000c98
- 0802acfc <vTaskStartScheduler>:
- #endif /* ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) */
- /*-----------------------------------------------------------*/
- void vTaskStartScheduler( void )
- {
- 802acfc: b530 push {r4, r5, lr}
- 802acfe: b085 sub sp, #20
- xReturn = xTaskCreate( prvIdleTask, "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), &xIdleTaskHandle ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
- }
- #else
- {
- /* Create the idle task without storing its handle. */
- xReturn = xTaskCreate( prvIdleTask, "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), NULL ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
- 802ad00: 2400 movs r4, #0
- 802ad02: 2280 movs r2, #128 ; 0x80
- 802ad04: 9400 str r4, [sp, #0]
- 802ad06: 9401 str r4, [sp, #4]
- 802ad08: 9402 str r4, [sp, #8]
- 802ad0a: 9403 str r4, [sp, #12]
- 802ad0c: 480e ldr r0, [pc, #56] ; (802ad48 <vTaskStartScheduler+0x4c>)
- 802ad0e: 490f ldr r1, [pc, #60] ; (802ad4c <vTaskStartScheduler+0x50>)
- 802ad10: 4623 mov r3, r4
- 802ad12: f7ff fec1 bl 802aa98 <xTaskGenericCreate>
- }
- #endif /* INCLUDE_xTaskGetIdleTaskHandle */
- #if ( configUSE_TIMERS == 1 )
- {
- if( xReturn == pdPASS )
- 802ad16: 2801 cmp r0, #1
- xReturn = xTaskCreate( prvIdleTask, "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), &xIdleTaskHandle ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
- }
- #else
- {
- /* Create the idle task without storing its handle. */
- xReturn = xTaskCreate( prvIdleTask, "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), NULL ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
- 802ad18: 4605 mov r5, r0
- }
- #endif /* INCLUDE_xTaskGetIdleTaskHandle */
- #if ( configUSE_TIMERS == 1 )
- {
- if( xReturn == pdPASS )
- 802ad1a: d10f bne.n 802ad3c <vTaskStartScheduler+0x40>
- {
- xReturn = xTimerCreateTimerTask();
- 802ad1c: f000 fbce bl 802b4bc <xTimerCreateTimerTask>
- mtCOVERAGE_TEST_MARKER();
- }
- }
- #endif /* configUSE_TIMERS */
- if( xReturn == pdPASS )
- 802ad20: 2801 cmp r0, #1
- #if ( configUSE_TIMERS == 1 )
- {
- if( xReturn == pdPASS )
- {
- xReturn = xTimerCreateTimerTask();
- 802ad22: 4605 mov r5, r0
- mtCOVERAGE_TEST_MARKER();
- }
- }
- #endif /* configUSE_TIMERS */
- if( xReturn == pdPASS )
- 802ad24: d10a bne.n 802ad3c <vTaskStartScheduler+0x40>
- /* Interrupts are turned off here, to ensure a tick does not occur
- before or during the call to xPortStartScheduler(). The stacks of
- the created tasks contain a status word with interrupts switched on
- so interrupts will automatically get re-enabled when the first task
- starts to run. */
- portDISABLE_INTERRUPTS();
- 802ad26: f000 fd5f bl 802b7e8 <ulPortSetInterruptMask>
- structure specific to the task that will run first. */
- _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
- }
- #endif /* configUSE_NEWLIB_REENTRANT */
- xSchedulerRunning = pdTRUE;
- 802ad2a: 4b09 ldr r3, [pc, #36] ; (802ad50 <vTaskStartScheduler+0x54>)
- 802ad2c: 601d str r5, [r3, #0]
- xTickCount = ( TickType_t ) 0U;
- 802ad2e: 4b09 ldr r3, [pc, #36] ; (802ad54 <vTaskStartScheduler+0x58>)
- 802ad30: 601c str r4, [r3, #0]
- /* This line will only be reached if the kernel could not be started,
- because there was not enough FreeRTOS heap to create the idle task
- or the timer task. */
- configASSERT( xReturn );
- }
- }
- 802ad32: b005 add sp, #20
- 802ad34: e8bd 4030 ldmia.w sp!, {r4, r5, lr}
- the run time counter time base. */
- portCONFIGURE_TIMER_FOR_RUN_TIME_STATS();
- /* Setting up the timer tick is hardware specific and thus in the
- portable interface. */
- if( xPortStartScheduler() != pdFALSE )
- 802ad38: f000 bde2 b.w 802b900 <xPortStartScheduler>
- else
- {
- /* This line will only be reached if the kernel could not be started,
- because there was not enough FreeRTOS heap to create the idle task
- or the timer task. */
- configASSERT( xReturn );
- 802ad3c: b915 cbnz r5, 802ad44 <vTaskStartScheduler+0x48>
- 802ad3e: f000 fd53 bl 802b7e8 <ulPortSetInterruptMask>
- 802ad42: e7fe b.n 802ad42 <vTaskStartScheduler+0x46>
- }
- }
- 802ad44: b005 add sp, #20
- 802ad46: bd30 pop {r4, r5, pc}
- 802ad48: 0802af69 .word 0x0802af69
- 802ad4c: 08039dd2 .word 0x08039dd2
- 802ad50: 20000bd4 .word 0x20000bd4
- 802ad54: 20000c9c .word 0x20000c9c
- 0802ad58 <vTaskSuspendAll>:
- {
- /* A critical section is not required as the variable is of type
- BaseType_t. Please read Richard Barry's reply in the following link to a
- post in the FreeRTOS support forum before reporting this as a bug! -
- http://goo.gl/wu4acr */
- ++uxSchedulerSuspended;
- 802ad58: 4b02 ldr r3, [pc, #8] ; (802ad64 <vTaskSuspendAll+0xc>)
- 802ad5a: 681a ldr r2, [r3, #0]
- 802ad5c: 3201 adds r2, #1
- 802ad5e: 601a str r2, [r3, #0]
- 802ad60: 4770 bx lr
- 802ad62: bf00 nop
- 802ad64: 20000c98 .word 0x20000c98
- 0802ad68 <xTaskGetTickCount>:
- TickType_t xTicks;
- /* Critical section required if running on a 16 bit processor. */
- portTICK_TYPE_ENTER_CRITICAL();
- {
- xTicks = xTickCount;
- 802ad68: 4b01 ldr r3, [pc, #4] ; (802ad70 <xTaskGetTickCount+0x8>)
- 802ad6a: 6818 ldr r0, [r3, #0]
- }
- portTICK_TYPE_EXIT_CRITICAL();
- return xTicks;
- }
- 802ad6c: 4770 bx lr
- 802ad6e: bf00 nop
- 802ad70: 20000c9c .word 0x20000c9c
- 0802ad74 <xTaskIncrementTick>:
- /* Called by the portable layer each time a tick interrupt occurs.
- Increments the tick then checks to see if the new tick value will cause any
- tasks to be unblocked. */
- traceTASK_INCREMENT_TICK( xTickCount );
- if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
- 802ad74: 4b3b ldr r3, [pc, #236] ; (802ae64 <xTaskIncrementTick+0xf0>)
- 802ad76: 681b ldr r3, [r3, #0]
- #endif /* configUSE_TICKLESS_IDLE */
- /*----------------------------------------------------------*/
- BaseType_t xTaskIncrementTick( void )
- {
- 802ad78: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- /* Called by the portable layer each time a tick interrupt occurs.
- Increments the tick then checks to see if the new tick value will cause any
- tasks to be unblocked. */
- traceTASK_INCREMENT_TICK( xTickCount );
- if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
- 802ad7c: 2b00 cmp r3, #0
- 802ad7e: d15b bne.n 802ae38 <xTaskIncrementTick+0xc4>
- {
- /* Increment the RTOS tick, switching the delayed and overflowed
- delayed lists if it wraps to 0. */
- ++xTickCount;
- 802ad80: 4b39 ldr r3, [pc, #228] ; (802ae68 <xTaskIncrementTick+0xf4>)
- 802ad82: 681a ldr r2, [r3, #0]
- 802ad84: 3201 adds r2, #1
- 802ad86: 601a str r2, [r3, #0]
- {
- /* Minor optimisation. The tick count cannot change in this
- block. */
- const TickType_t xConstTickCount = xTickCount;
- 802ad88: 681e ldr r6, [r3, #0]
- if( xConstTickCount == ( TickType_t ) 0U )
- 802ad8a: b98e cbnz r6, 802adb0 <xTaskIncrementTick+0x3c>
- {
- taskSWITCH_DELAYED_LISTS();
- 802ad8c: 4b37 ldr r3, [pc, #220] ; (802ae6c <xTaskIncrementTick+0xf8>)
- 802ad8e: 681a ldr r2, [r3, #0]
- 802ad90: 6812 ldr r2, [r2, #0]
- 802ad92: b112 cbz r2, 802ad9a <xTaskIncrementTick+0x26>
- 802ad94: f000 fd28 bl 802b7e8 <ulPortSetInterruptMask>
- 802ad98: e7fe b.n 802ad98 <xTaskIncrementTick+0x24>
- 802ad9a: 4a35 ldr r2, [pc, #212] ; (802ae70 <xTaskIncrementTick+0xfc>)
- 802ad9c: 6819 ldr r1, [r3, #0]
- 802ad9e: 6810 ldr r0, [r2, #0]
- 802ada0: 6018 str r0, [r3, #0]
- 802ada2: 4b34 ldr r3, [pc, #208] ; (802ae74 <xTaskIncrementTick+0x100>)
- 802ada4: 6011 str r1, [r2, #0]
- 802ada6: 681a ldr r2, [r3, #0]
- 802ada8: 3201 adds r2, #1
- 802adaa: 601a str r2, [r3, #0]
- 802adac: f7ff fe3a bl 802aa24 <prvResetNextTaskUnblockTime>
- /* See if this tick has made a timeout expire. Tasks are stored in
- the queue in the order of their wake time - meaning once one task
- has been found whose block time has not expired there is no need to
- look any further down the list. */
- if( xConstTickCount >= xNextTaskUnblockTime )
- 802adb0: 4b31 ldr r3, [pc, #196] ; (802ae78 <xTaskIncrementTick+0x104>)
- 802adb2: 681b ldr r3, [r3, #0]
- 802adb4: 2400 movs r4, #0
- 802adb6: 429e cmp r6, r3
- 802adb8: d200 bcs.n 802adbc <xTaskIncrementTick+0x48>
- 802adba: e032 b.n 802ae22 <xTaskIncrementTick+0xae>
- {
- for( ;; )
- {
- if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
- 802adbc: 4f2b ldr r7, [pc, #172] ; (802ae6c <xTaskIncrementTick+0xf8>)
- mtCOVERAGE_TEST_MARKER();
- }
- /* Place the unblocked task into the appropriate ready
- list. */
- prvAddTaskToReadyList( pxTCB );
- 802adbe: f8df 80cc ldr.w r8, [pc, #204] ; 802ae8c <xTaskIncrementTick+0x118>
- 802adc2: f8df a0bc ldr.w sl, [pc, #188] ; 802ae80 <xTaskIncrementTick+0x10c>
- look any further down the list. */
- if( xConstTickCount >= xNextTaskUnblockTime )
- {
- for( ;; )
- {
- if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
- 802adc6: 683b ldr r3, [r7, #0]
- 802adc8: 681b ldr r3, [r3, #0]
- 802adca: 2b00 cmp r3, #0
- 802adcc: d13a bne.n 802ae44 <xTaskIncrementTick+0xd0>
- /* The delayed list is empty. Set xNextTaskUnblockTime
- to the maximum possible value so it is extremely
- unlikely that the
- if( xTickCount >= xNextTaskUnblockTime ) test will pass
- next time through. */
- xNextTaskUnblockTime = portMAX_DELAY;
- 802adce: 4b2a ldr r3, [pc, #168] ; (802ae78 <xTaskIncrementTick+0x104>)
- 802add0: f04f 32ff mov.w r2, #4294967295
- 802add4: 601a str r2, [r3, #0]
- break;
- 802add6: e024 b.n 802ae22 <xTaskIncrementTick+0xae>
- /* It is not time to unblock this item yet, but the
- item value is the time at which the task at the head
- of the blocked list must be removed from the Blocked
- state - so record the item value in
- xNextTaskUnblockTime. */
- xNextTaskUnblockTime = xItemValue;
- 802add8: 4a27 ldr r2, [pc, #156] ; (802ae78 <xTaskIncrementTick+0x104>)
- 802adda: 6013 str r3, [r2, #0]
- break;
- 802addc: e021 b.n 802ae22 <xTaskIncrementTick+0xae>
- {
- mtCOVERAGE_TEST_MARKER();
- }
- /* It is time to remove the item from the Blocked state. */
- ( void ) uxListRemove( &( pxTCB->xGenericListItem ) );
- 802adde: f105 0904 add.w r9, r5, #4
- 802ade2: 4648 mov r0, r9
- 802ade4: f7ff fac3 bl 802a36e <uxListRemove>
- /* Is the task waiting on an event also? If so remove
- it from the event list. */
- if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
- 802ade8: 6aab ldr r3, [r5, #40] ; 0x28
- 802adea: b11b cbz r3, 802adf4 <xTaskIncrementTick+0x80>
- {
- ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
- 802adec: f105 0018 add.w r0, r5, #24
- 802adf0: f7ff fabd bl 802a36e <uxListRemove>
- mtCOVERAGE_TEST_MARKER();
- }
- /* Place the unblocked task into the appropriate ready
- list. */
- prvAddTaskToReadyList( pxTCB );
- 802adf4: 6aeb ldr r3, [r5, #44] ; 0x2c
- 802adf6: f8d8 1000 ldr.w r1, [r8]
- 802adfa: 2201 movs r2, #1
- 802adfc: fa02 f203 lsl.w r2, r2, r3
- 802ae00: 2014 movs r0, #20
- 802ae02: 430a orrs r2, r1
- 802ae04: fb00 a003 mla r0, r0, r3, sl
- 802ae08: 4649 mov r1, r9
- 802ae0a: f8c8 2000 str.w r2, [r8]
- 802ae0e: f7ff fa8a bl 802a326 <vListInsertEnd>
- {
- /* Preemption is on, but a context switch should
- only be performed if the unblocked task has a
- priority that is equal to or higher than the
- currently executing task. */
- if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
- 802ae12: 4b1a ldr r3, [pc, #104] ; (802ae7c <xTaskIncrementTick+0x108>)
- 802ae14: 6aea ldr r2, [r5, #44] ; 0x2c
- 802ae16: 681b ldr r3, [r3, #0]
- 802ae18: 6adb ldr r3, [r3, #44] ; 0x2c
- {
- xSwitchRequired = pdTRUE;
- 802ae1a: 429a cmp r2, r3
- 802ae1c: bf28 it cs
- 802ae1e: 2401 movcs r4, #1
- 802ae20: e7d1 b.n 802adc6 <xTaskIncrementTick+0x52>
- /* Tasks of equal priority to the currently running task will share
- processing time (time slice) if preemption is on, and the application
- writer has not explicitly turned time slicing off. */
- #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) )
- {
- if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 )
- 802ae22: 4b16 ldr r3, [pc, #88] ; (802ae7c <xTaskIncrementTick+0x108>)
- 802ae24: 681b ldr r3, [r3, #0]
- 802ae26: 6adb ldr r3, [r3, #44] ; 0x2c
- 802ae28: 2214 movs r2, #20
- 802ae2a: 4353 muls r3, r2
- 802ae2c: 4a14 ldr r2, [pc, #80] ; (802ae80 <xTaskIncrementTick+0x10c>)
- 802ae2e: 58d3 ldr r3, [r2, r3]
- {
- xSwitchRequired = pdTRUE;
- 802ae30: 2b01 cmp r3, #1
- 802ae32: bf88 it hi
- 802ae34: 2401 movhi r4, #1
- 802ae36: e00c b.n 802ae52 <xTaskIncrementTick+0xde>
- }
- #endif /* configUSE_TICK_HOOK */
- }
- else
- {
- ++uxPendedTicks;
- 802ae38: 4b12 ldr r3, [pc, #72] ; (802ae84 <xTaskIncrementTick+0x110>)
- 802ae3a: 681a ldr r2, [r3, #0]
- 802ae3c: 3201 adds r2, #1
- 802ae3e: 601a str r2, [r3, #0]
- BaseType_t xTaskIncrementTick( void )
- {
- TCB_t * pxTCB;
- TickType_t xItemValue;
- BaseType_t xSwitchRequired = pdFALSE;
- 802ae40: 2400 movs r4, #0
- 802ae42: e006 b.n 802ae52 <xTaskIncrementTick+0xde>
- {
- /* The delayed list is not empty, get the value of the
- item at the head of the delayed list. This is the time
- at which the task at the head of the delayed list must
- be removed from the Blocked state. */
- pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList );
- 802ae44: 683b ldr r3, [r7, #0]
- 802ae46: 68db ldr r3, [r3, #12]
- 802ae48: 68dd ldr r5, [r3, #12]
- xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xGenericListItem ) );
- 802ae4a: 686b ldr r3, [r5, #4]
- if( xConstTickCount < xItemValue )
- 802ae4c: 429e cmp r6, r3
- 802ae4e: d2c6 bcs.n 802adde <xTaskIncrementTick+0x6a>
- 802ae50: e7c2 b.n 802add8 <xTaskIncrementTick+0x64>
- #endif
- }
- #if ( configUSE_PREEMPTION == 1 )
- {
- if( xYieldPending != pdFALSE )
- 802ae52: 4b0d ldr r3, [pc, #52] ; (802ae88 <xTaskIncrementTick+0x114>)
- 802ae54: 681b ldr r3, [r3, #0]
- {
- xSwitchRequired = pdTRUE;
- 802ae56: 2b00 cmp r3, #0
- 802ae58: bf18 it ne
- 802ae5a: 2401 movne r4, #1
- }
- }
- #endif /* configUSE_PREEMPTION */
- return xSwitchRequired;
- }
- 802ae5c: 4620 mov r0, r4
- 802ae5e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 802ae62: bf00 nop
- 802ae64: 20000c98 .word 0x20000c98
- 802ae68: 20000c9c .word 0x20000c9c
- 802ae6c: 20000bd0 .word 0x20000bd0
- 802ae70: 20000ca0 .word 0x20000ca0
- 802ae74: 20000bcc .word 0x20000bcc
- 802ae78: 20000708 .word 0x20000708
- 802ae7c: 20000c80 .word 0x20000c80
- 802ae80: 20000c08 .word 0x20000c08
- 802ae84: 20000c04 .word 0x20000c04
- 802ae88: 20000cc4 .word 0x20000cc4
- 802ae8c: 20000cc0 .word 0x20000cc0
- 0802ae90 <xTaskResumeAll>:
- #endif /* configUSE_TICKLESS_IDLE */
- /*----------------------------------------------------------*/
- BaseType_t xTaskResumeAll( void )
- {
- 802ae90: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- TCB_t *pxTCB;
- BaseType_t xAlreadyYielded = pdFALSE;
- /* If uxSchedulerSuspended is zero then this function does not match a
- previous call to vTaskSuspendAll(). */
- configASSERT( uxSchedulerSuspended );
- 802ae94: 4c2c ldr r4, [pc, #176] ; (802af48 <xTaskResumeAll+0xb8>)
- 802ae96: 6823 ldr r3, [r4, #0]
- 802ae98: b913 cbnz r3, 802aea0 <xTaskResumeAll+0x10>
- 802ae9a: f000 fca5 bl 802b7e8 <ulPortSetInterruptMask>
- 802ae9e: e7fe b.n 802ae9e <xTaskResumeAll+0xe>
- /* It is possible that an ISR caused a task to be removed from an event
- list while the scheduler was suspended. If this was the case then the
- removed task will have been added to the xPendingReadyList. Once the
- scheduler has been resumed it is safe to move all the pending ready
- tasks from this list into their appropriate ready list. */
- taskENTER_CRITICAL();
- 802aea0: f000 fcaa bl 802b7f8 <vPortEnterCritical>
- {
- --uxSchedulerSuspended;
- 802aea4: 6823 ldr r3, [r4, #0]
- 802aea6: 3b01 subs r3, #1
- 802aea8: 6023 str r3, [r4, #0]
- if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
- 802aeaa: 6823 ldr r3, [r4, #0]
- 802aeac: b10b cbz r3, 802aeb2 <xTaskResumeAll+0x22>
- /*----------------------------------------------------------*/
- BaseType_t xTaskResumeAll( void )
- {
- TCB_t *pxTCB;
- BaseType_t xAlreadyYielded = pdFALSE;
- 802aeae: 2400 movs r4, #0
- 802aeb0: e044 b.n 802af3c <xTaskResumeAll+0xac>
- {
- --uxSchedulerSuspended;
- if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
- {
- if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U )
- 802aeb2: 4b26 ldr r3, [pc, #152] ; (802af4c <xTaskResumeAll+0xbc>)
- 802aeb4: 681b ldr r3, [r3, #0]
- 802aeb6: bb0b cbnz r3, 802aefc <xTaskResumeAll+0x6c>
- 802aeb8: e7f9 b.n 802aeae <xTaskResumeAll+0x1e>
- {
- /* Move any readied tasks from the pending list into the
- appropriate ready list. */
- while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
- {
- pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyList ) );
- 802aeba: 68f3 ldr r3, [r6, #12]
- 802aebc: 68dc ldr r4, [r3, #12]
- ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
- ( void ) uxListRemove( &( pxTCB->xGenericListItem ) );
- 802aebe: f104 0804 add.w r8, r4, #4
- /* Move any readied tasks from the pending list into the
- appropriate ready list. */
- while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
- {
- pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyList ) );
- ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
- 802aec2: f104 0018 add.w r0, r4, #24
- 802aec6: f7ff fa52 bl 802a36e <uxListRemove>
- ( void ) uxListRemove( &( pxTCB->xGenericListItem ) );
- 802aeca: 4640 mov r0, r8
- 802aecc: f7ff fa4f bl 802a36e <uxListRemove>
- prvAddTaskToReadyList( pxTCB );
- 802aed0: 6ae3 ldr r3, [r4, #44] ; 0x2c
- 802aed2: 682a ldr r2, [r5, #0]
- 802aed4: 2701 movs r7, #1
- 802aed6: fa07 f103 lsl.w r1, r7, r3
- 802aeda: 2014 movs r0, #20
- 802aedc: 430a orrs r2, r1
- 802aede: fb00 9003 mla r0, r0, r3, r9
- 802aee2: 4641 mov r1, r8
- 802aee4: 602a str r2, [r5, #0]
- 802aee6: f7ff fa1e bl 802a326 <vListInsertEnd>
- /* If the moved task has a priority higher than the current
- task then a yield must be performed. */
- if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
- 802aeea: 4b19 ldr r3, [pc, #100] ; (802af50 <xTaskResumeAll+0xc0>)
- 802aeec: 6ae2 ldr r2, [r4, #44] ; 0x2c
- 802aeee: 681b ldr r3, [r3, #0]
- 802aef0: 6adb ldr r3, [r3, #44] ; 0x2c
- 802aef2: 429a cmp r2, r3
- 802aef4: d306 bcc.n 802af04 <xTaskResumeAll+0x74>
- {
- xYieldPending = pdTRUE;
- 802aef6: 4b17 ldr r3, [pc, #92] ; (802af54 <xTaskResumeAll+0xc4>)
- 802aef8: 601f str r7, [r3, #0]
- 802aefa: e003 b.n 802af04 <xTaskResumeAll+0x74>
- {
- if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U )
- {
- /* Move any readied tasks from the pending list into the
- appropriate ready list. */
- while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
- 802aefc: 4e16 ldr r6, [pc, #88] ; (802af58 <xTaskResumeAll+0xc8>)
- {
- pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyList ) );
- ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
- ( void ) uxListRemove( &( pxTCB->xGenericListItem ) );
- prvAddTaskToReadyList( pxTCB );
- 802aefe: 4d17 ldr r5, [pc, #92] ; (802af5c <xTaskResumeAll+0xcc>)
- 802af00: f8df 9060 ldr.w r9, [pc, #96] ; 802af64 <xTaskResumeAll+0xd4>
- {
- if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U )
- {
- /* Move any readied tasks from the pending list into the
- appropriate ready list. */
- while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
- 802af04: 6833 ldr r3, [r6, #0]
- 802af06: 2b00 cmp r3, #0
- 802af08: d1d7 bne.n 802aeba <xTaskResumeAll+0x2a>
- /* If any ticks occurred while the scheduler was suspended then
- they should be processed now. This ensures the tick count does
- not slip, and that any delayed tasks are resumed at the correct
- time. */
- if( uxPendedTicks > ( UBaseType_t ) 0U )
- 802af0a: 4c15 ldr r4, [pc, #84] ; (802af60 <xTaskResumeAll+0xd0>)
- 802af0c: 6823 ldr r3, [r4, #0]
- 802af0e: b96b cbnz r3, 802af2c <xTaskResumeAll+0x9c>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- if( xYieldPending == pdTRUE )
- 802af10: 4b10 ldr r3, [pc, #64] ; (802af54 <xTaskResumeAll+0xc4>)
- 802af12: 681c ldr r4, [r3, #0]
- 802af14: 2c01 cmp r4, #1
- 802af16: d1ca bne.n 802aeae <xTaskResumeAll+0x1e>
- 802af18: e00e b.n 802af38 <xTaskResumeAll+0xa8>
- time. */
- if( uxPendedTicks > ( UBaseType_t ) 0U )
- {
- while( uxPendedTicks > ( UBaseType_t ) 0U )
- {
- if( xTaskIncrementTick() != pdFALSE )
- 802af1a: f7ff ff2b bl 802ad74 <xTaskIncrementTick>
- 802af1e: b108 cbz r0, 802af24 <xTaskResumeAll+0x94>
- {
- xYieldPending = pdTRUE;
- 802af20: 2301 movs r3, #1
- 802af22: 6033 str r3, [r6, #0]
- }
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- --uxPendedTicks;
- 802af24: 682b ldr r3, [r5, #0]
- 802af26: 3b01 subs r3, #1
- 802af28: 602b str r3, [r5, #0]
- 802af2a: e001 b.n 802af30 <xTaskResumeAll+0xa0>
- {
- while( uxPendedTicks > ( UBaseType_t ) 0U )
- {
- if( xTaskIncrementTick() != pdFALSE )
- {
- xYieldPending = pdTRUE;
- 802af2c: 4e09 ldr r6, [pc, #36] ; (802af54 <xTaskResumeAll+0xc4>)
- 802af2e: 4625 mov r5, r4
- they should be processed now. This ensures the tick count does
- not slip, and that any delayed tasks are resumed at the correct
- time. */
- if( uxPendedTicks > ( UBaseType_t ) 0U )
- {
- while( uxPendedTicks > ( UBaseType_t ) 0U )
- 802af30: 6823 ldr r3, [r4, #0]
- 802af32: 2b00 cmp r3, #0
- 802af34: d1f1 bne.n 802af1a <xTaskResumeAll+0x8a>
- 802af36: e7eb b.n 802af10 <xTaskResumeAll+0x80>
- #if( configUSE_PREEMPTION != 0 )
- {
- xAlreadyYielded = pdTRUE;
- }
- #endif
- taskYIELD_IF_USING_PREEMPTION();
- 802af38: f000 fc4a bl 802b7d0 <vPortYield>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- taskEXIT_CRITICAL();
- 802af3c: f000 fc88 bl 802b850 <vPortExitCritical>
- return xAlreadyYielded;
- }
- 802af40: 4620 mov r0, r4
- 802af42: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
- 802af46: bf00 nop
- 802af48: 20000c98 .word 0x20000c98
- 802af4c: 20000ca8 .word 0x20000ca8
- 802af50: 20000c80 .word 0x20000c80
- 802af54: 20000cc4 .word 0x20000cc4
- 802af58: 20000c84 .word 0x20000c84
- 802af5c: 20000cc0 .word 0x20000cc0
- 802af60: 20000c04 .word 0x20000c04
- 802af64: 20000c08 .word 0x20000c08
- 0802af68 <prvIdleTask>:
- *
- * void prvIdleTask( void *pvParameters );
- *
- */
- static portTASK_FUNCTION( prvIdleTask, pvParameters )
- {
- 802af68: b5f8 push {r3, r4, r5, r6, r7, lr}
- {
- BaseType_t xListIsEmpty;
- /* ucTasksDeleted is used to prevent vTaskSuspendAll() being called
- too often in the idle task. */
- while( uxTasksDeleted > ( UBaseType_t ) 0U )
- 802af6a: 4c14 ldr r4, [pc, #80] ; (802afbc <prvIdleTask+0x54>)
- {
- vTaskSuspendAll();
- {
- xListIsEmpty = listLIST_IS_EMPTY( &xTasksWaitingTermination );
- 802af6c: 4e14 ldr r6, [pc, #80] ; (802afc0 <prvIdleTask+0x58>)
- taskENTER_CRITICAL();
- {
- pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) );
- ( void ) uxListRemove( &( pxTCB->xGenericListItem ) );
- --uxCurrentNumberOfTasks;
- 802af6e: 4f15 ldr r7, [pc, #84] ; (802afc4 <prvIdleTask+0x5c>)
- {
- BaseType_t xListIsEmpty;
- /* ucTasksDeleted is used to prevent vTaskSuspendAll() being called
- too often in the idle task. */
- while( uxTasksDeleted > ( UBaseType_t ) 0U )
- 802af70: 6823 ldr r3, [r4, #0]
- 802af72: b1e3 cbz r3, 802afae <prvIdleTask+0x46>
- {
- vTaskSuspendAll();
- 802af74: f7ff fef0 bl 802ad58 <vTaskSuspendAll>
- {
- xListIsEmpty = listLIST_IS_EMPTY( &xTasksWaitingTermination );
- 802af78: 6835 ldr r5, [r6, #0]
- }
- ( void ) xTaskResumeAll();
- 802af7a: f7ff ff89 bl 802ae90 <xTaskResumeAll>
- if( xListIsEmpty == pdFALSE )
- 802af7e: 2d00 cmp r5, #0
- 802af80: d0f6 beq.n 802af70 <prvIdleTask+0x8>
- {
- TCB_t *pxTCB;
- taskENTER_CRITICAL();
- 802af82: f000 fc39 bl 802b7f8 <vPortEnterCritical>
- {
- pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) );
- 802af86: 68f3 ldr r3, [r6, #12]
- 802af88: 68dd ldr r5, [r3, #12]
- ( void ) uxListRemove( &( pxTCB->xGenericListItem ) );
- 802af8a: 1d28 adds r0, r5, #4
- 802af8c: f7ff f9ef bl 802a36e <uxListRemove>
- --uxCurrentNumberOfTasks;
- 802af90: 683b ldr r3, [r7, #0]
- 802af92: 3b01 subs r3, #1
- 802af94: 603b str r3, [r7, #0]
- --uxTasksDeleted;
- 802af96: 6823 ldr r3, [r4, #0]
- 802af98: 3b01 subs r3, #1
- 802af9a: 6023 str r3, [r4, #0]
- }
- taskEXIT_CRITICAL();
- 802af9c: f000 fc58 bl 802b850 <vPortExitCritical>
- vPortFreeAligned( pxTCB->pxStack );
- }
- }
- #else
- {
- vPortFreeAligned( pxTCB->pxStack );
- 802afa0: 6b28 ldr r0, [r5, #48] ; 0x30
- 802afa2: f000 fdbd bl 802bb20 <vPortFree>
- }
- #endif
- vPortFree( pxTCB );
- 802afa6: 4628 mov r0, r5
- 802afa8: f000 fdba bl 802bb20 <vPortFree>
- 802afac: e7e0 b.n 802af70 <prvIdleTask+0x8>
- A critical region is not required here as we are just reading from
- the list, and an occasional incorrect value will not matter. If
- the ready list at the idle priority contains more than one task
- then a task other than the idle task is ready to execute. */
- if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
- 802afae: 4b06 ldr r3, [pc, #24] ; (802afc8 <prvIdleTask+0x60>)
- 802afb0: 681b ldr r3, [r3, #0]
- 802afb2: 2b01 cmp r3, #1
- 802afb4: d9dc bls.n 802af70 <prvIdleTask+0x8>
- {
- taskYIELD();
- 802afb6: f000 fc0b bl 802b7d0 <vPortYield>
- 802afba: e7d9 b.n 802af70 <prvIdleTask+0x8>
- 802afbc: 20000bd8 .word 0x20000bd8
- 802afc0: 20000c6c .word 0x20000c6c
- 802afc4: 20000ca8 .word 0x20000ca8
- 802afc8: 20000c08 .word 0x20000c08
- 0802afcc <vTaskDelay>:
- /*-----------------------------------------------------------*/
- #if ( INCLUDE_vTaskDelay == 1 )
- void vTaskDelay( const TickType_t xTicksToDelay )
- {
- 802afcc: b538 push {r3, r4, r5, lr}
- TickType_t xTimeToWake;
- BaseType_t xAlreadyYielded = pdFALSE;
- /* A delay time of zero just forces a reschedule. */
- if( xTicksToDelay > ( TickType_t ) 0U )
- 802afce: 4604 mov r4, r0
- 802afd0: b918 cbnz r0, 802afda <vTaskDelay+0xe>
- }
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- 802afd2: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- /* Force a reschedule if xTaskResumeAll has not already done so, we may
- have put ourselves to sleep. */
- if( xAlreadyYielded == pdFALSE )
- {
- portYIELD_WITHIN_API();
- 802afd6: f000 bbfb b.w 802b7d0 <vPortYield>
- /* A delay time of zero just forces a reschedule. */
- if( xTicksToDelay > ( TickType_t ) 0U )
- {
- configASSERT( uxSchedulerSuspended == 0 );
- 802afda: 4b11 ldr r3, [pc, #68] ; (802b020 <vTaskDelay+0x54>)
- 802afdc: 681b ldr r3, [r3, #0]
- 802afde: b113 cbz r3, 802afe6 <vTaskDelay+0x1a>
- 802afe0: f000 fc02 bl 802b7e8 <ulPortSetInterruptMask>
- 802afe4: e7fe b.n 802afe4 <vTaskDelay+0x18>
- vTaskSuspendAll();
- 802afe6: f7ff feb7 bl 802ad58 <vTaskSuspendAll>
- This task cannot be in an event list as it is the currently
- executing task. */
- /* Calculate the time to wake - this may overflow but this is
- not a problem. */
- xTimeToWake = xTickCount + xTicksToDelay;
- 802afea: 4b0e ldr r3, [pc, #56] ; (802b024 <vTaskDelay+0x58>)
- 802afec: 681d ldr r5, [r3, #0]
- 802afee: 1965 adds r5, r4, r5
- /* We must remove ourselves from the ready list before adding
- ourselves to the blocked list as the same list item is used for
- both lists. */
- if( uxListRemove( &( pxCurrentTCB->xGenericListItem ) ) == ( UBaseType_t ) 0 )
- 802aff0: 4c0d ldr r4, [pc, #52] ; (802b028 <vTaskDelay+0x5c>)
- 802aff2: 6820 ldr r0, [r4, #0]
- 802aff4: 3004 adds r0, #4
- 802aff6: f7ff f9ba bl 802a36e <uxListRemove>
- 802affa: b948 cbnz r0, 802b010 <vTaskDelay+0x44>
- {
- /* The current task must be in a ready list, so there is
- no need to check, and the port reset macro can be called
- directly. */
- portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority );
- 802affc: 4b0b ldr r3, [pc, #44] ; (802b02c <vTaskDelay+0x60>)
- 802affe: 6819 ldr r1, [r3, #0]
- 802b000: 6822 ldr r2, [r4, #0]
- 802b002: 6ad2 ldr r2, [r2, #44] ; 0x2c
- 802b004: 2001 movs r0, #1
- 802b006: fa00 f202 lsl.w r2, r0, r2
- 802b00a: ea21 0202 bic.w r2, r1, r2
- 802b00e: 601a str r2, [r3, #0]
- }
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- prvAddCurrentTaskToDelayedList( xTimeToWake );
- 802b010: 4628 mov r0, r5
- 802b012: f7ff fd19 bl 802aa48 <prvAddCurrentTaskToDelayedList>
- }
- xAlreadyYielded = xTaskResumeAll();
- 802b016: f7ff ff3b bl 802ae90 <xTaskResumeAll>
- mtCOVERAGE_TEST_MARKER();
- }
- /* Force a reschedule if xTaskResumeAll has not already done so, we may
- have put ourselves to sleep. */
- if( xAlreadyYielded == pdFALSE )
- 802b01a: 2800 cmp r0, #0
- 802b01c: d0d9 beq.n 802afd2 <vTaskDelay+0x6>
- }
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- 802b01e: bd38 pop {r3, r4, r5, pc}
- 802b020: 20000c98 .word 0x20000c98
- 802b024: 20000c9c .word 0x20000c9c
- 802b028: 20000c80 .word 0x20000c80
- 802b02c: 20000cc0 .word 0x20000cc0
- 0802b030 <vTaskDelayUntil>:
- /*-----------------------------------------------------------*/
- #if ( INCLUDE_vTaskDelayUntil == 1 )
- void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement )
- {
- 802b030: b570 push {r4, r5, r6, lr}
- 802b032: 460c mov r4, r1
- TickType_t xTimeToWake;
- BaseType_t xAlreadyYielded, xShouldDelay = pdFALSE;
- configASSERT( pxPreviousWakeTime );
- 802b034: 4605 mov r5, r0
- 802b036: b910 cbnz r0, 802b03e <vTaskDelayUntil+0xe>
- 802b038: f000 fbd6 bl 802b7e8 <ulPortSetInterruptMask>
- 802b03c: e7fe b.n 802b03c <vTaskDelayUntil+0xc>
- configASSERT( ( xTimeIncrement > 0U ) );
- 802b03e: b911 cbnz r1, 802b046 <vTaskDelayUntil+0x16>
- 802b040: f000 fbd2 bl 802b7e8 <ulPortSetInterruptMask>
- 802b044: e7fe b.n 802b044 <vTaskDelayUntil+0x14>
- configASSERT( uxSchedulerSuspended == 0 );
- 802b046: 4b1c ldr r3, [pc, #112] ; (802b0b8 <vTaskDelayUntil+0x88>)
- 802b048: 681e ldr r6, [r3, #0]
- 802b04a: b116 cbz r6, 802b052 <vTaskDelayUntil+0x22>
- 802b04c: f000 fbcc bl 802b7e8 <ulPortSetInterruptMask>
- 802b050: e7fe b.n 802b050 <vTaskDelayUntil+0x20>
- vTaskSuspendAll();
- 802b052: f7ff fe81 bl 802ad58 <vTaskSuspendAll>
- {
- /* Minor optimisation. The tick count cannot change in this
- block. */
- const TickType_t xConstTickCount = xTickCount;
- 802b056: 4b19 ldr r3, [pc, #100] ; (802b0bc <vTaskDelayUntil+0x8c>)
- /* Generate the tick time at which the task wants to wake. */
- xTimeToWake = *pxPreviousWakeTime + xTimeIncrement;
- 802b058: 682a ldr r2, [r5, #0]
- vTaskSuspendAll();
- {
- /* Minor optimisation. The tick count cannot change in this
- block. */
- const TickType_t xConstTickCount = xTickCount;
- 802b05a: 6818 ldr r0, [r3, #0]
- /* Generate the tick time at which the task wants to wake. */
- xTimeToWake = *pxPreviousWakeTime + xTimeIncrement;
- if( xConstTickCount < *pxPreviousWakeTime )
- 802b05c: 4290 cmp r0, r2
- /* Minor optimisation. The tick count cannot change in this
- block. */
- const TickType_t xConstTickCount = xTickCount;
- /* Generate the tick time at which the task wants to wake. */
- xTimeToWake = *pxPreviousWakeTime + xTimeIncrement;
- 802b05e: 4414 add r4, r2
- if( xConstTickCount < *pxPreviousWakeTime )
- 802b060: d202 bcs.n 802b068 <vTaskDelayUntil+0x38>
- /* The tick count has overflowed since this function was
- lasted called. In this case the only time we should ever
- actually delay is if the wake time has also overflowed,
- and the wake time is greater than the tick time. When this
- is the case it is as if neither time had overflowed. */
- if( ( xTimeToWake < *pxPreviousWakeTime ) && ( xTimeToWake > xConstTickCount ) )
- 802b062: 4294 cmp r4, r2
- 802b064: d207 bcs.n 802b076 <vTaskDelayUntil+0x46>
- 802b066: e001 b.n 802b06c <vTaskDelayUntil+0x3c>
- else
- {
- /* The tick time has not overflowed. In this case we will
- delay if either the wake time has overflowed, and/or the
- tick time is less than the wake time. */
- if( ( xTimeToWake < *pxPreviousWakeTime ) || ( xTimeToWake > xConstTickCount ) )
- 802b068: 4294 cmp r4, r2
- 802b06a: d306 bcc.n 802b07a <vTaskDelayUntil+0x4a>
- 802b06c: 4284 cmp r4, r0
- 802b06e: bf94 ite ls
- 802b070: 2300 movls r3, #0
- 802b072: 2301 movhi r3, #1
- 802b074: e002 b.n 802b07c <vTaskDelayUntil+0x4c>
- #if ( INCLUDE_vTaskDelayUntil == 1 )
- void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement )
- {
- TickType_t xTimeToWake;
- BaseType_t xAlreadyYielded, xShouldDelay = pdFALSE;
- 802b076: 4633 mov r3, r6
- 802b078: e000 b.n 802b07c <vTaskDelayUntil+0x4c>
- /* The tick time has not overflowed. In this case we will
- delay if either the wake time has overflowed, and/or the
- tick time is less than the wake time. */
- if( ( xTimeToWake < *pxPreviousWakeTime ) || ( xTimeToWake > xConstTickCount ) )
- {
- xShouldDelay = pdTRUE;
- 802b07a: 2301 movs r3, #1
- mtCOVERAGE_TEST_MARKER();
- }
- }
- /* Update the wake time ready for the next call. */
- *pxPreviousWakeTime = xTimeToWake;
- 802b07c: 602c str r4, [r5, #0]
- if( xShouldDelay != pdFALSE )
- 802b07e: b193 cbz r3, 802b0a6 <vTaskDelayUntil+0x76>
- {
- traceTASK_DELAY_UNTIL();
- /* Remove the task from the ready list before adding it to the
- blocked list as the same list item is used for both lists. */
- if( uxListRemove( &( pxCurrentTCB->xGenericListItem ) ) == ( UBaseType_t ) 0 )
- 802b080: 4d0f ldr r5, [pc, #60] ; (802b0c0 <vTaskDelayUntil+0x90>)
- 802b082: 6828 ldr r0, [r5, #0]
- 802b084: 3004 adds r0, #4
- 802b086: f7ff f972 bl 802a36e <uxListRemove>
- 802b08a: b948 cbnz r0, 802b0a0 <vTaskDelayUntil+0x70>
- {
- /* The current task must be in a ready list, so there is
- no need to check, and the port reset macro can be called
- directly. */
- portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority );
- 802b08c: 4b0d ldr r3, [pc, #52] ; (802b0c4 <vTaskDelayUntil+0x94>)
- 802b08e: 6819 ldr r1, [r3, #0]
- 802b090: 682a ldr r2, [r5, #0]
- 802b092: 6ad2 ldr r2, [r2, #44] ; 0x2c
- 802b094: 2001 movs r0, #1
- 802b096: fa00 f202 lsl.w r2, r0, r2
- 802b09a: ea21 0202 bic.w r2, r1, r2
- 802b09e: 601a str r2, [r3, #0]
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- prvAddCurrentTaskToDelayedList( xTimeToWake );
- 802b0a0: 4620 mov r0, r4
- 802b0a2: f7ff fcd1 bl 802aa48 <prvAddCurrentTaskToDelayedList>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- xAlreadyYielded = xTaskResumeAll();
- 802b0a6: f7ff fef3 bl 802ae90 <xTaskResumeAll>
- /* Force a reschedule if xTaskResumeAll has not already done so, we may
- have put ourselves to sleep. */
- if( xAlreadyYielded == pdFALSE )
- 802b0aa: b918 cbnz r0, 802b0b4 <vTaskDelayUntil+0x84>
- }
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- 802b0ac: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- /* Force a reschedule if xTaskResumeAll has not already done so, we may
- have put ourselves to sleep. */
- if( xAlreadyYielded == pdFALSE )
- {
- portYIELD_WITHIN_API();
- 802b0b0: f000 bb8e b.w 802b7d0 <vPortYield>
- 802b0b4: bd70 pop {r4, r5, r6, pc}
- 802b0b6: bf00 nop
- 802b0b8: 20000c98 .word 0x20000c98
- 802b0bc: 20000c9c .word 0x20000c9c
- 802b0c0: 20000c80 .word 0x20000c80
- 802b0c4: 20000cc0 .word 0x20000cc0
- 0802b0c8 <vTaskSwitchContext>:
- #endif /* configUSE_APPLICATION_TASK_TAG */
- /*-----------------------------------------------------------*/
- void vTaskSwitchContext( void )
- {
- 802b0c8: b508 push {r3, lr}
- if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE )
- 802b0ca: 4b12 ldr r3, [pc, #72] ; (802b114 <vTaskSwitchContext+0x4c>)
- 802b0cc: 681a ldr r2, [r3, #0]
- 802b0ce: 4b12 ldr r3, [pc, #72] ; (802b118 <vTaskSwitchContext+0x50>)
- 802b0d0: b10a cbz r2, 802b0d6 <vTaskSwitchContext+0xe>
- {
- /* The scheduler is currently suspended - do not allow a context
- switch. */
- xYieldPending = pdTRUE;
- 802b0d2: 2201 movs r2, #1
- 802b0d4: e01c b.n 802b110 <vTaskSwitchContext+0x48>
- }
- else
- {
- xYieldPending = pdFALSE;
- 802b0d6: 601a str r2, [r3, #0]
- taskFIRST_CHECK_FOR_STACK_OVERFLOW();
- taskSECOND_CHECK_FOR_STACK_OVERFLOW();
- /* Select a new task to run using either the generic C or port
- optimised asm code. */
- taskSELECT_HIGHEST_PRIORITY_TASK();
- 802b0d8: 4b10 ldr r3, [pc, #64] ; (802b11c <vTaskSwitchContext+0x54>)
- 802b0da: 681a ldr r2, [r3, #0]
- /* Generic helper function. */
- __attribute__( ( always_inline ) ) static inline uint8_t ucPortCountLeadingZeros( uint32_t ulBitmap )
- {
- uint8_t ucReturn;
- __asm volatile ( "clz %0, %1" : "=r" ( ucReturn ) : "r" ( ulBitmap ) );
- 802b0dc: fab2 f282 clz r2, r2
- 802b0e0: b2d2 uxtb r2, r2
- 802b0e2: 2314 movs r3, #20
- 802b0e4: f1c2 021f rsb r2, r2, #31
- 802b0e8: 490d ldr r1, [pc, #52] ; (802b120 <vTaskSwitchContext+0x58>)
- 802b0ea: 435a muls r2, r3
- 802b0ec: 188b adds r3, r1, r2
- 802b0ee: 588a ldr r2, [r1, r2]
- 802b0f0: b912 cbnz r2, 802b0f8 <vTaskSwitchContext+0x30>
- 802b0f2: f000 fb79 bl 802b7e8 <ulPortSetInterruptMask>
- 802b0f6: e7fe b.n 802b0f6 <vTaskSwitchContext+0x2e>
- 802b0f8: 685a ldr r2, [r3, #4]
- 802b0fa: 6852 ldr r2, [r2, #4]
- 802b0fc: f103 0108 add.w r1, r3, #8
- 802b100: 428a cmp r2, r1
- 802b102: 605a str r2, [r3, #4]
- 802b104: bf04 itt eq
- 802b106: 6852 ldreq r2, [r2, #4]
- 802b108: 605a streq r2, [r3, #4]
- 802b10a: 685b ldr r3, [r3, #4]
- 802b10c: 68da ldr r2, [r3, #12]
- 802b10e: 4b05 ldr r3, [pc, #20] ; (802b124 <vTaskSwitchContext+0x5c>)
- 802b110: 601a str r2, [r3, #0]
- 802b112: bd08 pop {r3, pc}
- 802b114: 20000c98 .word 0x20000c98
- 802b118: 20000cc4 .word 0x20000cc4
- 802b11c: 20000cc0 .word 0x20000cc0
- 802b120: 20000c08 .word 0x20000c08
- 802b124: 20000c80 .word 0x20000c80
- 0802b128 <vTaskPlaceOnEventList>:
- }
- }
- /*-----------------------------------------------------------*/
- void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait )
- {
- 802b128: b538 push {r3, r4, r5, lr}
- 802b12a: 460d mov r5, r1
- TickType_t xTimeToWake;
- configASSERT( pxEventList );
- 802b12c: b910 cbnz r0, 802b134 <vTaskPlaceOnEventList+0xc>
- 802b12e: f000 fb5b bl 802b7e8 <ulPortSetInterruptMask>
- 802b132: e7fe b.n 802b132 <vTaskPlaceOnEventList+0xa>
- /* Place the event list item of the TCB in the appropriate event list.
- This is placed in the list in priority order so the highest priority task
- is the first to be woken by the event. The queue that contains the event
- list is locked, preventing simultaneous access from interrupts. */
- vListInsert( pxEventList, &( pxCurrentTCB->xEventListItem ) );
- 802b134: 4c12 ldr r4, [pc, #72] ; (802b180 <vTaskPlaceOnEventList+0x58>)
- 802b136: 6821 ldr r1, [r4, #0]
- 802b138: 3118 adds r1, #24
- 802b13a: f7ff f900 bl 802a33e <vListInsert>
- /* The task must be removed from from the ready list before it is added to
- the blocked list as the same list item is used for both lists. Exclusive
- access to the ready lists guaranteed because the scheduler is locked. */
- if( uxListRemove( &( pxCurrentTCB->xGenericListItem ) ) == ( UBaseType_t ) 0 )
- 802b13e: 6820 ldr r0, [r4, #0]
- 802b140: 3004 adds r0, #4
- 802b142: f7ff f914 bl 802a36e <uxListRemove>
- 802b146: b948 cbnz r0, 802b15c <vTaskPlaceOnEventList+0x34>
- {
- /* The current task must be in a ready list, so there is no need to
- check, and the port reset macro can be called directly. */
- portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority );
- 802b148: 4b0e ldr r3, [pc, #56] ; (802b184 <vTaskPlaceOnEventList+0x5c>)
- 802b14a: 6819 ldr r1, [r3, #0]
- 802b14c: 6822 ldr r2, [r4, #0]
- 802b14e: 6ad2 ldr r2, [r2, #44] ; 0x2c
- 802b150: 2001 movs r0, #1
- 802b152: fa00 f202 lsl.w r2, r0, r2
- 802b156: ea21 0202 bic.w r2, r1, r2
- 802b15a: 601a str r2, [r3, #0]
- mtCOVERAGE_TEST_MARKER();
- }
- #if ( INCLUDE_vTaskSuspend == 1 )
- {
- if( xTicksToWait == portMAX_DELAY )
- 802b15c: 1c69 adds r1, r5, #1
- 802b15e: d107 bne.n 802b170 <vTaskPlaceOnEventList+0x48>
- {
- /* Add the task to the suspended task list instead of a delayed task
- list to ensure the task is not woken by a timing event. It will
- block indefinitely. */
- vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xGenericListItem ) );
- 802b160: 4b07 ldr r3, [pc, #28] ; (802b180 <vTaskPlaceOnEventList+0x58>)
- 802b162: 4809 ldr r0, [pc, #36] ; (802b188 <vTaskPlaceOnEventList+0x60>)
- 802b164: 6819 ldr r1, [r3, #0]
- 802b166: 3104 adds r1, #4
- will handle it. */
- xTimeToWake = xTickCount + xTicksToWait;
- prvAddCurrentTaskToDelayedList( xTimeToWake );
- }
- #endif /* INCLUDE_vTaskSuspend */
- }
- 802b168: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- if( xTicksToWait == portMAX_DELAY )
- {
- /* Add the task to the suspended task list instead of a delayed task
- list to ensure the task is not woken by a timing event. It will
- block indefinitely. */
- vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xGenericListItem ) );
- 802b16c: f7ff b8db b.w 802a326 <vListInsertEnd>
- else
- {
- /* Calculate the time at which the task should be woken if the event
- does not occur. This may overflow but this doesn't matter, the
- scheduler will handle it. */
- xTimeToWake = xTickCount + xTicksToWait;
- 802b170: 4b06 ldr r3, [pc, #24] ; (802b18c <vTaskPlaceOnEventList+0x64>)
- 802b172: 6818 ldr r0, [r3, #0]
- prvAddCurrentTaskToDelayedList( xTimeToWake );
- 802b174: 1828 adds r0, r5, r0
- will handle it. */
- xTimeToWake = xTickCount + xTicksToWait;
- prvAddCurrentTaskToDelayedList( xTimeToWake );
- }
- #endif /* INCLUDE_vTaskSuspend */
- }
- 802b176: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- {
- /* Calculate the time at which the task should be woken if the event
- does not occur. This may overflow but this doesn't matter, the
- scheduler will handle it. */
- xTimeToWake = xTickCount + xTicksToWait;
- prvAddCurrentTaskToDelayedList( xTimeToWake );
- 802b17a: f7ff bc65 b.w 802aa48 <prvAddCurrentTaskToDelayedList>
- 802b17e: bf00 nop
- 802b180: 20000c80 .word 0x20000c80
- 802b184: 20000cc0 .word 0x20000cc0
- 802b188: 20000cac .word 0x20000cac
- 802b18c: 20000c9c .word 0x20000c9c
- 0802b190 <vTaskPlaceOnEventListRestricted>:
- /*-----------------------------------------------------------*/
- #if configUSE_TIMERS == 1
- void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, const TickType_t xTicksToWait )
- {
- 802b190: b538 push {r3, r4, r5, lr}
- 802b192: 460d mov r5, r1
- TickType_t xTimeToWake;
- configASSERT( pxEventList );
- 802b194: b910 cbnz r0, 802b19c <vTaskPlaceOnEventListRestricted+0xc>
- 802b196: f000 fb27 bl 802b7e8 <ulPortSetInterruptMask>
- 802b19a: e7fe b.n 802b19a <vTaskPlaceOnEventListRestricted+0xa>
- /* Place the event list item of the TCB in the appropriate event list.
- In this case it is assume that this is the only task that is going to
- be waiting on this event list, so the faster vListInsertEnd() function
- can be used in place of vListInsert. */
- vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) );
- 802b19c: 4c0d ldr r4, [pc, #52] ; (802b1d4 <vTaskPlaceOnEventListRestricted+0x44>)
- 802b19e: 6821 ldr r1, [r4, #0]
- 802b1a0: 3118 adds r1, #24
- 802b1a2: f7ff f8c0 bl 802a326 <vListInsertEnd>
- /* We must remove this task from the ready list before adding it to the
- blocked list as the same list item is used for both lists. This
- function is called form a critical section. */
- if( uxListRemove( &( pxCurrentTCB->xGenericListItem ) ) == ( UBaseType_t ) 0 )
- 802b1a6: 6820 ldr r0, [r4, #0]
- 802b1a8: 3004 adds r0, #4
- 802b1aa: f7ff f8e0 bl 802a36e <uxListRemove>
- 802b1ae: b948 cbnz r0, 802b1c4 <vTaskPlaceOnEventListRestricted+0x34>
- {
- /* The current task must be in a ready list, so there is no need to
- check, and the port reset macro can be called directly. */
- portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority );
- 802b1b0: 4b09 ldr r3, [pc, #36] ; (802b1d8 <vTaskPlaceOnEventListRestricted+0x48>)
- 802b1b2: 6819 ldr r1, [r3, #0]
- 802b1b4: 6822 ldr r2, [r4, #0]
- 802b1b6: 6ad2 ldr r2, [r2, #44] ; 0x2c
- 802b1b8: 2001 movs r0, #1
- 802b1ba: fa00 f202 lsl.w r2, r0, r2
- 802b1be: ea21 0202 bic.w r2, r1, r2
- 802b1c2: 601a str r2, [r3, #0]
- mtCOVERAGE_TEST_MARKER();
- }
- /* Calculate the time at which the task should be woken if the event does
- not occur. This may overflow but this doesn't matter. */
- xTimeToWake = xTickCount + xTicksToWait;
- 802b1c4: 4b05 ldr r3, [pc, #20] ; (802b1dc <vTaskPlaceOnEventListRestricted+0x4c>)
- 802b1c6: 6818 ldr r0, [r3, #0]
- traceTASK_DELAY_UNTIL();
- prvAddCurrentTaskToDelayedList( xTimeToWake );
- 802b1c8: 1828 adds r0, r5, r0
- }
- 802b1ca: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- /* Calculate the time at which the task should be woken if the event does
- not occur. This may overflow but this doesn't matter. */
- xTimeToWake = xTickCount + xTicksToWait;
- traceTASK_DELAY_UNTIL();
- prvAddCurrentTaskToDelayedList( xTimeToWake );
- 802b1ce: f7ff bc3b b.w 802aa48 <prvAddCurrentTaskToDelayedList>
- 802b1d2: bf00 nop
- 802b1d4: 20000c80 .word 0x20000c80
- 802b1d8: 20000cc0 .word 0x20000cc0
- 802b1dc: 20000c9c .word 0x20000c9c
- 0802b1e0 <xTaskRemoveFromEventList>:
- #endif /* configUSE_TIMERS */
- /*-----------------------------------------------------------*/
- BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList )
- {
- 802b1e0: b538 push {r3, r4, r5, lr}
- get called - the lock count on the queue will get modified instead. This
- means exclusive access to the event list is guaranteed here.
- This function assumes that a check has already been made to ensure that
- pxEventList is not empty. */
- pxUnblockedTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxEventList );
- 802b1e2: 68c3 ldr r3, [r0, #12]
- 802b1e4: 68dc ldr r4, [r3, #12]
- configASSERT( pxUnblockedTCB );
- 802b1e6: b914 cbnz r4, 802b1ee <xTaskRemoveFromEventList+0xe>
- 802b1e8: f000 fafe bl 802b7e8 <ulPortSetInterruptMask>
- 802b1ec: e7fe b.n 802b1ec <xTaskRemoveFromEventList+0xc>
- ( void ) uxListRemove( &( pxUnblockedTCB->xEventListItem ) );
- 802b1ee: f104 0518 add.w r5, r4, #24
- 802b1f2: 4628 mov r0, r5
- 802b1f4: f7ff f8bb bl 802a36e <uxListRemove>
- if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
- 802b1f8: 4b11 ldr r3, [pc, #68] ; (802b240 <xTaskRemoveFromEventList+0x60>)
- 802b1fa: 681b ldr r3, [r3, #0]
- 802b1fc: b983 cbnz r3, 802b220 <xTaskRemoveFromEventList+0x40>
- {
- ( void ) uxListRemove( &( pxUnblockedTCB->xGenericListItem ) );
- 802b1fe: 1d25 adds r5, r4, #4
- 802b200: 4628 mov r0, r5
- 802b202: f7ff f8b4 bl 802a36e <uxListRemove>
- prvAddTaskToReadyList( pxUnblockedTCB );
- 802b206: 4a0f ldr r2, [pc, #60] ; (802b244 <xTaskRemoveFromEventList+0x64>)
- 802b208: 6ae3 ldr r3, [r4, #44] ; 0x2c
- 802b20a: 6810 ldr r0, [r2, #0]
- 802b20c: 2101 movs r1, #1
- 802b20e: fa01 f103 lsl.w r1, r1, r3
- 802b212: 4301 orrs r1, r0
- 802b214: 6011 str r1, [r2, #0]
- 802b216: 4a0c ldr r2, [pc, #48] ; (802b248 <xTaskRemoveFromEventList+0x68>)
- 802b218: 2014 movs r0, #20
- 802b21a: fb00 2003 mla r0, r0, r3, r2
- 802b21e: e000 b.n 802b222 <xTaskRemoveFromEventList+0x42>
- }
- else
- {
- /* The delayed and ready lists cannot be accessed, so hold this task
- pending until the scheduler is resumed. */
- vListInsertEnd( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) );
- 802b220: 480a ldr r0, [pc, #40] ; (802b24c <xTaskRemoveFromEventList+0x6c>)
- 802b222: 4629 mov r1, r5
- 802b224: f7ff f87f bl 802a326 <vListInsertEnd>
- }
- if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority )
- 802b228: 4b09 ldr r3, [pc, #36] ; (802b250 <xTaskRemoveFromEventList+0x70>)
- 802b22a: 6ae2 ldr r2, [r4, #44] ; 0x2c
- 802b22c: 681b ldr r3, [r3, #0]
- 802b22e: 6adb ldr r3, [r3, #44] ; 0x2c
- 802b230: 429a cmp r2, r3
- 802b232: d903 bls.n 802b23c <xTaskRemoveFromEventList+0x5c>
- it should force a context switch now. */
- xReturn = pdTRUE;
- /* Mark that a yield is pending in case the user is not using the
- "xHigherPriorityTaskWoken" parameter to an ISR safe FreeRTOS function. */
- xYieldPending = pdTRUE;
- 802b234: 4b07 ldr r3, [pc, #28] ; (802b254 <xTaskRemoveFromEventList+0x74>)
- 802b236: 2001 movs r0, #1
- 802b238: 6018 str r0, [r3, #0]
- 802b23a: bd38 pop {r3, r4, r5, pc}
- }
- else
- {
- xReturn = pdFALSE;
- 802b23c: 2000 movs r0, #0
- prvResetNextTaskUnblockTime();
- }
- #endif
- return xReturn;
- }
- 802b23e: bd38 pop {r3, r4, r5, pc}
- 802b240: 20000c98 .word 0x20000c98
- 802b244: 20000cc0 .word 0x20000cc0
- 802b248: 20000c08 .word 0x20000c08
- 802b24c: 20000c84 .word 0x20000c84
- 802b250: 20000c80 .word 0x20000c80
- 802b254: 20000cc4 .word 0x20000cc4
- 0802b258 <vTaskSetTimeOutState>:
- return xReturn;
- }
- /*-----------------------------------------------------------*/
- void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut )
- {
- 802b258: b508 push {r3, lr}
- configASSERT( pxTimeOut );
- 802b25a: b910 cbnz r0, 802b262 <vTaskSetTimeOutState+0xa>
- 802b25c: f000 fac4 bl 802b7e8 <ulPortSetInterruptMask>
- 802b260: e7fe b.n 802b260 <vTaskSetTimeOutState+0x8>
- pxTimeOut->xOverflowCount = xNumOfOverflows;
- 802b262: 4b03 ldr r3, [pc, #12] ; (802b270 <vTaskSetTimeOutState+0x18>)
- 802b264: 681b ldr r3, [r3, #0]
- 802b266: 6003 str r3, [r0, #0]
- pxTimeOut->xTimeOnEntering = xTickCount;
- 802b268: 4b02 ldr r3, [pc, #8] ; (802b274 <vTaskSetTimeOutState+0x1c>)
- 802b26a: 681b ldr r3, [r3, #0]
- 802b26c: 6043 str r3, [r0, #4]
- 802b26e: bd08 pop {r3, pc}
- 802b270: 20000bcc .word 0x20000bcc
- 802b274: 20000c9c .word 0x20000c9c
- 0802b278 <xTaskCheckForTimeOut>:
- }
- /*-----------------------------------------------------------*/
- BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait )
- {
- 802b278: b538 push {r3, r4, r5, lr}
- 802b27a: 460d mov r5, r1
- BaseType_t xReturn;
- configASSERT( pxTimeOut );
- 802b27c: 4604 mov r4, r0
- 802b27e: b910 cbnz r0, 802b286 <xTaskCheckForTimeOut+0xe>
- 802b280: f000 fab2 bl 802b7e8 <ulPortSetInterruptMask>
- 802b284: e7fe b.n 802b284 <xTaskCheckForTimeOut+0xc>
- configASSERT( pxTicksToWait );
- 802b286: b911 cbnz r1, 802b28e <xTaskCheckForTimeOut+0x16>
- 802b288: f000 faae bl 802b7e8 <ulPortSetInterruptMask>
- 802b28c: e7fe b.n 802b28c <xTaskCheckForTimeOut+0x14>
- taskENTER_CRITICAL();
- 802b28e: f000 fab3 bl 802b7f8 <vPortEnterCritical>
- {
- /* Minor optimisation. The tick count cannot change in this block. */
- const TickType_t xConstTickCount = xTickCount;
- 802b292: 4b0e ldr r3, [pc, #56] ; (802b2cc <xTaskCheckForTimeOut+0x54>)
- 802b294: 681a ldr r2, [r3, #0]
- #if ( INCLUDE_vTaskSuspend == 1 )
- /* If INCLUDE_vTaskSuspend is set to 1 and the block time specified is
- the maximum block time then the task should block indefinitely, and
- therefore never time out. */
- if( *pxTicksToWait == portMAX_DELAY )
- 802b296: 682b ldr r3, [r5, #0]
- 802b298: 1c59 adds r1, r3, #1
- 802b29a: d010 beq.n 802b2be <xTaskCheckForTimeOut+0x46>
- xReturn = pdFALSE;
- }
- else /* We are not blocking indefinitely, perform the checks below. */
- #endif
- if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) ) /*lint !e525 Indentation preferred as is to make code within pre-processor directives clearer. */
- 802b29c: 490c ldr r1, [pc, #48] ; (802b2d0 <xTaskCheckForTimeOut+0x58>)
- 802b29e: 6808 ldr r0, [r1, #0]
- 802b2a0: 6821 ldr r1, [r4, #0]
- 802b2a2: 4288 cmp r0, r1
- 802b2a4: 6861 ldr r1, [r4, #4]
- 802b2a6: d001 beq.n 802b2ac <xTaskCheckForTimeOut+0x34>
- 802b2a8: 428a cmp r2, r1
- 802b2aa: d20a bcs.n 802b2c2 <xTaskCheckForTimeOut+0x4a>
- was called, but has also overflowed since vTaskSetTimeOut() was called.
- It must have wrapped all the way around and gone past us again. This
- passed since vTaskSetTimeout() was called. */
- xReturn = pdTRUE;
- }
- else if( ( xConstTickCount - pxTimeOut->xTimeOnEntering ) < *pxTicksToWait )
- 802b2ac: 1a50 subs r0, r2, r1
- 802b2ae: 4298 cmp r0, r3
- 802b2b0: d207 bcs.n 802b2c2 <xTaskCheckForTimeOut+0x4a>
- {
- /* Not a genuine timeout. Adjust parameters for time remaining. */
- *pxTicksToWait -= ( xConstTickCount - pxTimeOut->xTimeOnEntering );
- 802b2b2: 1a8a subs r2, r1, r2
- 802b2b4: 18d3 adds r3, r2, r3
- 802b2b6: 602b str r3, [r5, #0]
- vTaskSetTimeOutState( pxTimeOut );
- 802b2b8: 4620 mov r0, r4
- 802b2ba: f7ff ffcd bl 802b258 <vTaskSetTimeOutState>
- /* If INCLUDE_vTaskSuspend is set to 1 and the block time specified is
- the maximum block time then the task should block indefinitely, and
- therefore never time out. */
- if( *pxTicksToWait == portMAX_DELAY )
- {
- xReturn = pdFALSE;
- 802b2be: 2400 movs r4, #0
- 802b2c0: e000 b.n 802b2c4 <xTaskCheckForTimeOut+0x4c>
- {
- /* The tick count is greater than the time at which vTaskSetTimeout()
- was called, but has also overflowed since vTaskSetTimeOut() was called.
- It must have wrapped all the way around and gone past us again. This
- passed since vTaskSetTimeout() was called. */
- xReturn = pdTRUE;
- 802b2c2: 2401 movs r4, #1
- else
- {
- xReturn = pdTRUE;
- }
- }
- taskEXIT_CRITICAL();
- 802b2c4: f000 fac4 bl 802b850 <vPortExitCritical>
- return xReturn;
- }
- 802b2c8: 4620 mov r0, r4
- 802b2ca: bd38 pop {r3, r4, r5, pc}
- 802b2cc: 20000c9c .word 0x20000c9c
- 802b2d0: 20000bcc .word 0x20000bcc
- 0802b2d4 <vTaskMissedYield>:
- /*-----------------------------------------------------------*/
- void vTaskMissedYield( void )
- {
- xYieldPending = pdTRUE;
- 802b2d4: 4b01 ldr r3, [pc, #4] ; (802b2dc <vTaskMissedYield+0x8>)
- 802b2d6: 2201 movs r2, #1
- 802b2d8: 601a str r2, [r3, #0]
- 802b2da: 4770 bx lr
- 802b2dc: 20000cc4 .word 0x20000cc4
- 0802b2e0 <xTaskGetSchedulerState>:
- BaseType_t xTaskGetSchedulerState( void )
- {
- BaseType_t xReturn;
- if( xSchedulerRunning == pdFALSE )
- 802b2e0: 4b05 ldr r3, [pc, #20] ; (802b2f8 <xTaskGetSchedulerState+0x18>)
- 802b2e2: 681b ldr r3, [r3, #0]
- 802b2e4: b133 cbz r3, 802b2f4 <xTaskGetSchedulerState+0x14>
- {
- xReturn = taskSCHEDULER_NOT_STARTED;
- }
- else
- {
- if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
- 802b2e6: 4b05 ldr r3, [pc, #20] ; (802b2fc <xTaskGetSchedulerState+0x1c>)
- 802b2e8: 6818 ldr r0, [r3, #0]
- {
- xReturn = taskSCHEDULER_RUNNING;
- 802b2ea: 2800 cmp r0, #0
- 802b2ec: bf0c ite eq
- 802b2ee: 2002 moveq r0, #2
- 802b2f0: 2000 movne r0, #0
- 802b2f2: 4770 bx lr
- {
- BaseType_t xReturn;
- if( xSchedulerRunning == pdFALSE )
- {
- xReturn = taskSCHEDULER_NOT_STARTED;
- 802b2f4: 2001 movs r0, #1
- xReturn = taskSCHEDULER_SUSPENDED;
- }
- }
- return xReturn;
- }
- 802b2f6: 4770 bx lr
- 802b2f8: 20000bd4 .word 0x20000bd4
- 802b2fc: 20000c98 .word 0x20000c98
- 0802b300 <vTaskPriorityInherit>:
- /*-----------------------------------------------------------*/
- #if ( configUSE_MUTEXES == 1 )
- void vTaskPriorityInherit( TaskHandle_t const pxMutexHolder )
- {
- 802b300: b5f8 push {r3, r4, r5, r6, r7, lr}
- TCB_t * const pxTCB = ( TCB_t * ) pxMutexHolder;
- /* If the mutex was given back by an interrupt while the queue was
- locked then the mutex holder might now be NULL. */
- if( pxMutexHolder != NULL )
- 802b302: 4604 mov r4, r0
- 802b304: 2800 cmp r0, #0
- 802b306: d040 beq.n 802b38a <vTaskPriorityInherit+0x8a>
- {
- if( pxTCB->uxPriority < pxCurrentTCB->uxPriority )
- 802b308: 4a20 ldr r2, [pc, #128] ; (802b38c <vTaskPriorityInherit+0x8c>)
- 802b30a: 6ac3 ldr r3, [r0, #44] ; 0x2c
- 802b30c: 6811 ldr r1, [r2, #0]
- 802b30e: 6ac9 ldr r1, [r1, #44] ; 0x2c
- 802b310: 428b cmp r3, r1
- 802b312: d23a bcs.n 802b38a <vTaskPriorityInherit+0x8a>
- {
- /* Adjust the mutex holder state to account for its new
- priority. Only reset the event list item value if the value is
- not being used for anything else. */
- if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
- 802b314: 6981 ldr r1, [r0, #24]
- 802b316: 2900 cmp r1, #0
- 802b318: db04 blt.n 802b324 <vTaskPriorityInherit+0x24>
- {
- listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxCurrentTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- 802b31a: 6812 ldr r2, [r2, #0]
- 802b31c: 6ad2 ldr r2, [r2, #44] ; 0x2c
- 802b31e: f1c2 0205 rsb r2, r2, #5
- 802b322: 6182 str r2, [r0, #24]
- mtCOVERAGE_TEST_MARKER();
- }
- /* If the task being modified is in the ready state it will need to
- be moved into a new list. */
- if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxTCB->uxPriority ] ), &( pxTCB->xGenericListItem ) ) != pdFALSE )
- 802b324: 4e1a ldr r6, [pc, #104] ; (802b390 <vTaskPriorityInherit+0x90>)
- 802b326: 6962 ldr r2, [r4, #20]
- 802b328: 2714 movs r7, #20
- 802b32a: fb07 6303 mla r3, r7, r3, r6
- 802b32e: 429a cmp r2, r3
- 802b330: d127 bne.n 802b382 <vTaskPriorityInherit+0x82>
- 802b332: e01f b.n 802b374 <vTaskPriorityInherit+0x74>
- {
- if( uxListRemove( &( pxTCB->xGenericListItem ) ) == ( UBaseType_t ) 0 )
- {
- taskRESET_READY_PRIORITY( pxTCB->uxPriority );
- 802b334: 6ae2 ldr r2, [r4, #44] ; 0x2c
- 802b336: 4357 muls r7, r2
- 802b338: 59f3 ldr r3, [r6, r7]
- 802b33a: b93b cbnz r3, 802b34c <vTaskPriorityInherit+0x4c>
- 802b33c: 4b15 ldr r3, [pc, #84] ; (802b394 <vTaskPriorityInherit+0x94>)
- 802b33e: 2001 movs r0, #1
- 802b340: 6819 ldr r1, [r3, #0]
- 802b342: fa00 f202 lsl.w r2, r0, r2
- 802b346: ea21 0202 bic.w r2, r1, r2
- 802b34a: 601a str r2, [r3, #0]
- {
- mtCOVERAGE_TEST_MARKER();
- }
- /* Inherit the priority before being moved into the new list. */
- pxTCB->uxPriority = pxCurrentTCB->uxPriority;
- 802b34c: 4b0f ldr r3, [pc, #60] ; (802b38c <vTaskPriorityInherit+0x8c>)
- prvAddTaskToReadyList( pxTCB );
- 802b34e: 4a11 ldr r2, [pc, #68] ; (802b394 <vTaskPriorityInherit+0x94>)
- {
- mtCOVERAGE_TEST_MARKER();
- }
- /* Inherit the priority before being moved into the new list. */
- pxTCB->uxPriority = pxCurrentTCB->uxPriority;
- 802b350: 681b ldr r3, [r3, #0]
- prvAddTaskToReadyList( pxTCB );
- 802b352: 6810 ldr r0, [r2, #0]
- {
- mtCOVERAGE_TEST_MARKER();
- }
- /* Inherit the priority before being moved into the new list. */
- pxTCB->uxPriority = pxCurrentTCB->uxPriority;
- 802b354: 6adb ldr r3, [r3, #44] ; 0x2c
- prvAddTaskToReadyList( pxTCB );
- 802b356: 2101 movs r1, #1
- 802b358: fa01 f103 lsl.w r1, r1, r3
- 802b35c: 4301 orrs r1, r0
- 802b35e: 6011 str r1, [r2, #0]
- 802b360: 4a0b ldr r2, [pc, #44] ; (802b390 <vTaskPriorityInherit+0x90>)
- {
- mtCOVERAGE_TEST_MARKER();
- }
- /* Inherit the priority before being moved into the new list. */
- pxTCB->uxPriority = pxCurrentTCB->uxPriority;
- 802b362: 62e3 str r3, [r4, #44] ; 0x2c
- prvAddTaskToReadyList( pxTCB );
- 802b364: 2014 movs r0, #20
- 802b366: fb00 2003 mla r0, r0, r3, r2
- 802b36a: 4629 mov r1, r5
- }
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- 802b36c: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr}
- mtCOVERAGE_TEST_MARKER();
- }
- /* Inherit the priority before being moved into the new list. */
- pxTCB->uxPriority = pxCurrentTCB->uxPriority;
- prvAddTaskToReadyList( pxTCB );
- 802b370: f7fe bfd9 b.w 802a326 <vListInsertEnd>
- /* If the task being modified is in the ready state it will need to
- be moved into a new list. */
- if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxTCB->uxPriority ] ), &( pxTCB->xGenericListItem ) ) != pdFALSE )
- {
- if( uxListRemove( &( pxTCB->xGenericListItem ) ) == ( UBaseType_t ) 0 )
- 802b374: 1d25 adds r5, r4, #4
- 802b376: 4628 mov r0, r5
- 802b378: f7fe fff9 bl 802a36e <uxListRemove>
- 802b37c: 2800 cmp r0, #0
- 802b37e: d0d9 beq.n 802b334 <vTaskPriorityInherit+0x34>
- 802b380: e7e4 b.n 802b34c <vTaskPriorityInherit+0x4c>
- prvAddTaskToReadyList( pxTCB );
- }
- else
- {
- /* Just inherit the priority. */
- pxTCB->uxPriority = pxCurrentTCB->uxPriority;
- 802b382: 4b02 ldr r3, [pc, #8] ; (802b38c <vTaskPriorityInherit+0x8c>)
- 802b384: 681b ldr r3, [r3, #0]
- 802b386: 6adb ldr r3, [r3, #44] ; 0x2c
- 802b388: 62e3 str r3, [r4, #44] ; 0x2c
- 802b38a: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 802b38c: 20000c80 .word 0x20000c80
- 802b390: 20000c08 .word 0x20000c08
- 802b394: 20000cc0 .word 0x20000cc0
- 0802b398 <xTaskPriorityDisinherit>:
- /*-----------------------------------------------------------*/
- #if ( configUSE_MUTEXES == 1 )
- BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder )
- {
- 802b398: b538 push {r3, r4, r5, lr}
- TCB_t * const pxTCB = ( TCB_t * ) pxMutexHolder;
- BaseType_t xReturn = pdFALSE;
- if( pxMutexHolder != NULL )
- 802b39a: 4604 mov r4, r0
- 802b39c: b908 cbnz r0, 802b3a2 <xTaskPriorityDisinherit+0xa>
- #if ( configUSE_MUTEXES == 1 )
- BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder )
- {
- TCB_t * const pxTCB = ( TCB_t * ) pxMutexHolder;
- BaseType_t xReturn = pdFALSE;
- 802b39e: 2000 movs r0, #0
- 802b3a0: bd38 pop {r3, r4, r5, pc}
- if( pxMutexHolder != NULL )
- {
- configASSERT( pxTCB->uxMutexesHeld );
- 802b3a2: 6d03 ldr r3, [r0, #80] ; 0x50
- 802b3a4: b913 cbnz r3, 802b3ac <xTaskPriorityDisinherit+0x14>
- 802b3a6: f000 fa1f bl 802b7e8 <ulPortSetInterruptMask>
- 802b3aa: e7fe b.n 802b3aa <xTaskPriorityDisinherit+0x12>
- ( pxTCB->uxMutexesHeld )--;
- if( pxTCB->uxPriority != pxTCB->uxBasePriority )
- 802b3ac: 6ac1 ldr r1, [r0, #44] ; 0x2c
- 802b3ae: 6cc2 ldr r2, [r0, #76] ; 0x4c
- BaseType_t xReturn = pdFALSE;
- if( pxMutexHolder != NULL )
- {
- configASSERT( pxTCB->uxMutexesHeld );
- ( pxTCB->uxMutexesHeld )--;
- 802b3b0: 3b01 subs r3, #1
- if( pxTCB->uxPriority != pxTCB->uxBasePriority )
- 802b3b2: 4291 cmp r1, r2
- BaseType_t xReturn = pdFALSE;
- if( pxMutexHolder != NULL )
- {
- configASSERT( pxTCB->uxMutexesHeld );
- ( pxTCB->uxMutexesHeld )--;
- 802b3b4: 6503 str r3, [r0, #80] ; 0x50
- if( pxTCB->uxPriority != pxTCB->uxBasePriority )
- 802b3b6: d0f2 beq.n 802b39e <xTaskPriorityDisinherit+0x6>
- {
- /* Only disinherit if no other mutexes are held. */
- if( pxTCB->uxMutexesHeld == ( UBaseType_t ) 0 )
- 802b3b8: 2b00 cmp r3, #0
- 802b3ba: d1f0 bne.n 802b39e <xTaskPriorityDisinherit+0x6>
- /* A task can only have an inhertied priority if it holds
- the mutex. If the mutex is held by a task then it cannot be
- given from an interrupt, and if a mutex is given by the
- holding task then it must be the running state task. Remove
- the holding task from the ready list. */
- if( uxListRemove( &( pxTCB->xGenericListItem ) ) == ( UBaseType_t ) 0 )
- 802b3bc: 1d05 adds r5, r0, #4
- 802b3be: 4628 mov r0, r5
- 802b3c0: f7fe ffd5 bl 802a36e <uxListRemove>
- 802b3c4: b968 cbnz r0, 802b3e2 <xTaskPriorityDisinherit+0x4a>
- {
- taskRESET_READY_PRIORITY( pxTCB->uxPriority );
- 802b3c6: 6ae2 ldr r2, [r4, #44] ; 0x2c
- 802b3c8: 4910 ldr r1, [pc, #64] ; (802b40c <xTaskPriorityDisinherit+0x74>)
- 802b3ca: 2314 movs r3, #20
- 802b3cc: 4353 muls r3, r2
- 802b3ce: 58cb ldr r3, [r1, r3]
- 802b3d0: b93b cbnz r3, 802b3e2 <xTaskPriorityDisinherit+0x4a>
- 802b3d2: 4b0f ldr r3, [pc, #60] ; (802b410 <xTaskPriorityDisinherit+0x78>)
- 802b3d4: 2001 movs r0, #1
- 802b3d6: 6819 ldr r1, [r3, #0]
- 802b3d8: fa00 f202 lsl.w r2, r0, r2
- 802b3dc: ea21 0202 bic.w r2, r1, r2
- 802b3e0: 601a str r2, [r3, #0]
- }
- /* Disinherit the priority before adding the task into the
- new ready list. */
- traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
- pxTCB->uxPriority = pxTCB->uxBasePriority;
- 802b3e2: 6ce3 ldr r3, [r4, #76] ; 0x4c
- /* Reset the event list item value. It cannot be in use for
- any other purpose if this task is running, and it must be
- running to give back the mutex. */
- listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- 802b3e4: f1c3 0205 rsb r2, r3, #5
- 802b3e8: 61a2 str r2, [r4, #24]
- prvAddTaskToReadyList( pxTCB );
- 802b3ea: 4a09 ldr r2, [pc, #36] ; (802b410 <xTaskPriorityDisinherit+0x78>)
- }
- /* Disinherit the priority before adding the task into the
- new ready list. */
- traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
- pxTCB->uxPriority = pxTCB->uxBasePriority;
- 802b3ec: 62e3 str r3, [r4, #44] ; 0x2c
- /* Reset the event list item value. It cannot be in use for
- any other purpose if this task is running, and it must be
- running to give back the mutex. */
- listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
- prvAddTaskToReadyList( pxTCB );
- 802b3ee: 6811 ldr r1, [r2, #0]
- 802b3f0: 2401 movs r4, #1
- 802b3f2: fa04 f003 lsl.w r0, r4, r3
- 802b3f6: 4301 orrs r1, r0
- 802b3f8: 6011 str r1, [r2, #0]
- 802b3fa: 4a04 ldr r2, [pc, #16] ; (802b40c <xTaskPriorityDisinherit+0x74>)
- 802b3fc: 2014 movs r0, #20
- 802b3fe: fb00 2003 mla r0, r0, r3, r2
- 802b402: 4629 mov r1, r5
- 802b404: f7fe ff8f bl 802a326 <vListInsertEnd>
- in an order different to that in which they were taken.
- If a context switch did not occur when the first mutex was
- returned, even if a task was waiting on it, then a context
- switch should occur when the last mutex is returned whether
- a task is waiting on it or not. */
- xReturn = pdTRUE;
- 802b408: 4620 mov r0, r4
- {
- mtCOVERAGE_TEST_MARKER();
- }
- return xReturn;
- }
- 802b40a: bd38 pop {r3, r4, r5, pc}
- 802b40c: 20000c08 .word 0x20000c08
- 802b410: 20000cc0 .word 0x20000cc0
- 0802b414 <pvTaskIncrementMutexHeldCount>:
- void *pvTaskIncrementMutexHeldCount( void )
- {
- /* If xSemaphoreCreateMutex() is called before any tasks have been created
- then pxCurrentTCB will be NULL. */
- if( pxCurrentTCB != NULL )
- 802b414: 4b04 ldr r3, [pc, #16] ; (802b428 <pvTaskIncrementMutexHeldCount+0x14>)
- 802b416: 681a ldr r2, [r3, #0]
- 802b418: b11a cbz r2, 802b422 <pvTaskIncrementMutexHeldCount+0xe>
- {
- ( pxCurrentTCB->uxMutexesHeld )++;
- 802b41a: 681a ldr r2, [r3, #0]
- 802b41c: 6d11 ldr r1, [r2, #80] ; 0x50
- 802b41e: 3101 adds r1, #1
- 802b420: 6511 str r1, [r2, #80] ; 0x50
- }
- return pxCurrentTCB;
- 802b422: 6818 ldr r0, [r3, #0]
- }
- 802b424: 4770 bx lr
- 802b426: bf00 nop
- 802b428: 20000c80 .word 0x20000c80
- 0802b42c <prvCheckForValidListAndQueue>:
- pxOverflowTimerList = pxTemp;
- }
- /*-----------------------------------------------------------*/
- static void prvCheckForValidListAndQueue( void )
- {
- 802b42c: b5f8 push {r3, r4, r5, r6, r7, lr}
- /* Check that the list from which active timers are referenced, and the
- queue used to communicate with the timer service, have been
- initialised. */
- taskENTER_CRITICAL();
- {
- if( xTimerQueue == NULL )
- 802b42e: 4c0f ldr r4, [pc, #60] ; (802b46c <prvCheckForValidListAndQueue+0x40>)
- static void prvCheckForValidListAndQueue( void )
- {
- /* Check that the list from which active timers are referenced, and the
- queue used to communicate with the timer service, have been
- initialised. */
- taskENTER_CRITICAL();
- 802b430: f000 f9e2 bl 802b7f8 <vPortEnterCritical>
- {
- if( xTimerQueue == NULL )
- 802b434: 6825 ldr r5, [r4, #0]
- 802b436: b9ad cbnz r5, 802b464 <prvCheckForValidListAndQueue+0x38>
- {
- vListInitialise( &xActiveTimerList1 );
- 802b438: 4f0d ldr r7, [pc, #52] ; (802b470 <prvCheckForValidListAndQueue+0x44>)
- vListInitialise( &xActiveTimerList2 );
- 802b43a: 4e0e ldr r6, [pc, #56] ; (802b474 <prvCheckForValidListAndQueue+0x48>)
- initialised. */
- taskENTER_CRITICAL();
- {
- if( xTimerQueue == NULL )
- {
- vListInitialise( &xActiveTimerList1 );
- 802b43c: 4638 mov r0, r7
- 802b43e: f7fe ff64 bl 802a30a <vListInitialise>
- vListInitialise( &xActiveTimerList2 );
- 802b442: 4630 mov r0, r6
- 802b444: f7fe ff61 bl 802a30a <vListInitialise>
- pxCurrentTimerList = &xActiveTimerList1;
- 802b448: 4b0b ldr r3, [pc, #44] ; (802b478 <prvCheckForValidListAndQueue+0x4c>)
- 802b44a: 601f str r7, [r3, #0]
- pxOverflowTimerList = &xActiveTimerList2;
- 802b44c: 4b0b ldr r3, [pc, #44] ; (802b47c <prvCheckForValidListAndQueue+0x50>)
- xTimerQueue = xQueueCreate( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, sizeof( DaemonTaskMessage_t ) );
- 802b44e: 200a movs r0, #10
- 802b450: 210c movs r1, #12
- 802b452: 462a mov r2, r5
- if( xTimerQueue == NULL )
- {
- vListInitialise( &xActiveTimerList1 );
- vListInitialise( &xActiveTimerList2 );
- pxCurrentTimerList = &xActiveTimerList1;
- pxOverflowTimerList = &xActiveTimerList2;
- 802b454: 601e str r6, [r3, #0]
- xTimerQueue = xQueueCreate( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, sizeof( DaemonTaskMessage_t ) );
- 802b456: f7ff f849 bl 802a4ec <xQueueGenericCreate>
- 802b45a: 6020 str r0, [r4, #0]
- configASSERT( xTimerQueue );
- 802b45c: b910 cbnz r0, 802b464 <prvCheckForValidListAndQueue+0x38>
- 802b45e: f000 f9c3 bl 802b7e8 <ulPortSetInterruptMask>
- 802b462: e7fe b.n 802b462 <prvCheckForValidListAndQueue+0x36>
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- taskEXIT_CRITICAL();
- }
- 802b464: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr}
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- taskEXIT_CRITICAL();
- 802b468: f000 b9f2 b.w 802b850 <vPortExitCritical>
- 802b46c: 20000cf8 .word 0x20000cf8
- 802b470: 20000ccc .word 0x20000ccc
- 802b474: 20000ce0 .word 0x20000ce0
- 802b478: 20000cc8 .word 0x20000cc8
- 802b47c: 20000cfc .word 0x20000cfc
- 0802b480 <prvInsertTimerInActiveList>:
- return xTimeNow;
- }
- /*-----------------------------------------------------------*/
- static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime )
- {
- 802b480: b510 push {r4, lr}
- 802b482: 4604 mov r4, r0
- BaseType_t xProcessTimerNow = pdFALSE;
- listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime );
- listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
- if( xNextExpiryTime <= xTimeNow )
- 802b484: 4291 cmp r1, r2
- static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime )
- {
- BaseType_t xProcessTimerNow = pdFALSE;
- listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime );
- 802b486: 6041 str r1, [r0, #4]
- listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
- 802b488: 6120 str r0, [r4, #16]
- if( xNextExpiryTime <= xTimeNow )
- 802b48a: d805 bhi.n 802b498 <prvInsertTimerInActiveList+0x18>
- {
- /* Has the expiry time elapsed between the command to start/reset a
- timer was issued, and the time the command was processed? */
- if( ( xTimeNow - xCommandTime ) >= pxTimer->xTimerPeriodInTicks )
- 802b48c: 6981 ldr r1, [r0, #24]
- 802b48e: 1ad2 subs r2, r2, r3
- 802b490: 428a cmp r2, r1
- 802b492: d20c bcs.n 802b4ae <prvInsertTimerInActiveList+0x2e>
- processed actually exceeds the timers period. */
- xProcessTimerNow = pdTRUE;
- }
- else
- {
- vListInsert( pxOverflowTimerList, &( pxTimer->xTimerListItem ) );
- 802b494: 4b07 ldr r3, [pc, #28] ; (802b4b4 <prvInsertTimerInActiveList+0x34>)
- 802b496: e004 b.n 802b4a2 <prvInsertTimerInActiveList+0x22>
- }
- }
- else
- {
- if( ( xTimeNow < xCommandTime ) && ( xNextExpiryTime >= xCommandTime ) )
- 802b498: 429a cmp r2, r3
- 802b49a: d201 bcs.n 802b4a0 <prvInsertTimerInActiveList+0x20>
- 802b49c: 4299 cmp r1, r3
- 802b49e: d206 bcs.n 802b4ae <prvInsertTimerInActiveList+0x2e>
- its expiry time and should be processed immediately. */
- xProcessTimerNow = pdTRUE;
- }
- else
- {
- vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
- 802b4a0: 4b05 ldr r3, [pc, #20] ; (802b4b8 <prvInsertTimerInActiveList+0x38>)
- 802b4a2: 6818 ldr r0, [r3, #0]
- 802b4a4: 1d21 adds r1, r4, #4
- 802b4a6: f7fe ff4a bl 802a33e <vListInsert>
- }
- /*-----------------------------------------------------------*/
- static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime )
- {
- BaseType_t xProcessTimerNow = pdFALSE;
- 802b4aa: 2000 movs r0, #0
- 802b4ac: bd10 pop {r4, pc}
- timer was issued, and the time the command was processed? */
- if( ( xTimeNow - xCommandTime ) >= pxTimer->xTimerPeriodInTicks )
- {
- /* The time between a command being issued and the command being
- processed actually exceeds the timers period. */
- xProcessTimerNow = pdTRUE;
- 802b4ae: 2001 movs r0, #1
- vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
- }
- }
- return xProcessTimerNow;
- }
- 802b4b0: bd10 pop {r4, pc}
- 802b4b2: bf00 nop
- 802b4b4: 20000cfc .word 0x20000cfc
- 802b4b8: 20000cc8 .word 0x20000cc8
- 0802b4bc <xTimerCreateTimerTask>:
- static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, const BaseType_t xListWasEmpty ) PRIVILEGED_FUNCTION;
- /*-----------------------------------------------------------*/
- BaseType_t xTimerCreateTimerTask( void )
- {
- 802b4bc: b51f push {r0, r1, r2, r3, r4, lr}
- /* This function is called when the scheduler is started if
- configUSE_TIMERS is set to 1. Check that the infrastructure used by the
- timer service task has been created/initialised. If timers have already
- been created then the initialisation will already have been performed. */
- prvCheckForValidListAndQueue();
- 802b4be: f7ff ffb5 bl 802b42c <prvCheckForValidListAndQueue>
- if( xTimerQueue != NULL )
- 802b4c2: 4b0b ldr r3, [pc, #44] ; (802b4f0 <xTimerCreateTimerTask+0x34>)
- 802b4c4: 681b ldr r3, [r3, #0]
- 802b4c6: b913 cbnz r3, 802b4ce <xTimerCreateTimerTask+0x12>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- configASSERT( xReturn );
- 802b4c8: f000 f98e bl 802b7e8 <ulPortSetInterruptMask>
- 802b4cc: e00d b.n 802b4ea <xTimerCreateTimerTask+0x2e>
- xReturn = xTaskCreate( prvTimerTask, "Tmr Svc", ( uint16_t ) configTIMER_TASK_STACK_DEPTH, NULL, ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, &xTimerTaskHandle );
- }
- #else
- {
- /* Create the timer task without storing its handle. */
- xReturn = xTaskCreate( prvTimerTask, "Tmr Svc", ( uint16_t ) configTIMER_TASK_STACK_DEPTH, NULL, ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, NULL);
- 802b4ce: 2302 movs r3, #2
- 802b4d0: 9300 str r3, [sp, #0]
- 802b4d2: 2300 movs r3, #0
- 802b4d4: 9301 str r3, [sp, #4]
- 802b4d6: 9302 str r3, [sp, #8]
- 802b4d8: 9303 str r3, [sp, #12]
- 802b4da: 4806 ldr r0, [pc, #24] ; (802b4f4 <xTimerCreateTimerTask+0x38>)
- 802b4dc: 4906 ldr r1, [pc, #24] ; (802b4f8 <xTimerCreateTimerTask+0x3c>)
- 802b4de: f44f 7280 mov.w r2, #256 ; 0x100
- 802b4e2: f7ff fad9 bl 802aa98 <xTaskGenericCreate>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- configASSERT( xReturn );
- 802b4e6: b908 cbnz r0, 802b4ec <xTimerCreateTimerTask+0x30>
- 802b4e8: e7ee b.n 802b4c8 <xTimerCreateTimerTask+0xc>
- 802b4ea: e7fe b.n 802b4ea <xTimerCreateTimerTask+0x2e>
- return xReturn;
- }
- 802b4ec: b005 add sp, #20
- 802b4ee: bd00 pop {pc}
- 802b4f0: 20000cf8 .word 0x20000cf8
- 802b4f4: 0802b5f5 .word 0x0802b5f5
- 802b4f8: 08039de6 .word 0x08039de6
- 0802b4fc <xTimerCreate>:
- /*-----------------------------------------------------------*/
- TimerHandle_t xTimerCreate( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
- {
- 802b4fc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 802b500: 4680 mov r8, r0
- 802b502: 4617 mov r7, r2
- 802b504: 461e mov r6, r3
- Timer_t *pxNewTimer;
- /* Allocate the timer structure. */
- if( xTimerPeriodInTicks == ( TickType_t ) 0U )
- 802b506: 460d mov r5, r1
- 802b508: b191 cbz r1, 802b530 <xTimerCreate+0x34>
- {
- pxNewTimer = NULL;
- }
- else
- {
- pxNewTimer = ( Timer_t * ) pvPortMalloc( sizeof( Timer_t ) );
- 802b50a: 202c movs r0, #44 ; 0x2c
- 802b50c: f000 fa82 bl 802ba14 <pvPortMalloc>
- if( pxNewTimer != NULL )
- 802b510: 4604 mov r4, r0
- 802b512: b180 cbz r0, 802b536 <xTimerCreate+0x3a>
- {
- /* Ensure the infrastructure used by the timer service task has been
- created/initialised. */
- prvCheckForValidListAndQueue();
- 802b514: f7ff ff8a bl 802b42c <prvCheckForValidListAndQueue>
- /* Initialise the timer structure members using the function parameters. */
- pxNewTimer->pcTimerName = pcTimerName;
- pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks;
- pxNewTimer->uxAutoReload = uxAutoReload;
- pxNewTimer->pvTimerID = pvTimerID;
- pxNewTimer->pxCallbackFunction = pxCallbackFunction;
- 802b518: 9b06 ldr r3, [sp, #24]
- /* Ensure the infrastructure used by the timer service task has been
- created/initialised. */
- prvCheckForValidListAndQueue();
- /* Initialise the timer structure members using the function parameters. */
- pxNewTimer->pcTimerName = pcTimerName;
- 802b51a: f8c4 8000 str.w r8, [r4]
- pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks;
- 802b51e: 61a5 str r5, [r4, #24]
- pxNewTimer->uxAutoReload = uxAutoReload;
- 802b520: 61e7 str r7, [r4, #28]
- pxNewTimer->pvTimerID = pvTimerID;
- 802b522: 6226 str r6, [r4, #32]
- pxNewTimer->pxCallbackFunction = pxCallbackFunction;
- 802b524: 6263 str r3, [r4, #36] ; 0x24
- vListInitialiseItem( &( pxNewTimer->xTimerListItem ) );
- 802b526: 1d20 adds r0, r4, #4
- 802b528: f7fe fefa bl 802a320 <vListInitialiseItem>
- 802b52c: e003 b.n 802b536 <xTimerCreate+0x3a>
- 802b52e: e7fe b.n 802b52e <xTimerCreate+0x32>
- traceTIMER_CREATE_FAILED();
- }
- }
- /* 0 is not a valid value for xTimerPeriodInTicks. */
- configASSERT( ( xTimerPeriodInTicks > 0 ) );
- 802b530: f000 f95a bl 802b7e8 <ulPortSetInterruptMask>
- 802b534: e7fb b.n 802b52e <xTimerCreate+0x32>
- return ( TimerHandle_t ) pxNewTimer;
- }
- 802b536: 4620 mov r0, r4
- 802b538: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 0802b53c <xTimerGenericCommand>:
- /*-----------------------------------------------------------*/
- BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait )
- {
- 802b53c: b530 push {r4, r5, lr}
- BaseType_t xReturn = pdFAIL;
- DaemonTaskMessage_t xMessage;
- /* Send a message to the timer service task to perform a particular action
- on a particular timer definition. */
- if( xTimerQueue != NULL )
- 802b53e: 4c0f ldr r4, [pc, #60] ; (802b57c <xTimerGenericCommand+0x40>)
- return ( TimerHandle_t ) pxNewTimer;
- }
- /*-----------------------------------------------------------*/
- BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait )
- {
- 802b540: 4605 mov r5, r0
- BaseType_t xReturn = pdFAIL;
- DaemonTaskMessage_t xMessage;
- /* Send a message to the timer service task to perform a particular action
- on a particular timer definition. */
- if( xTimerQueue != NULL )
- 802b542: 6820 ldr r0, [r4, #0]
- return ( TimerHandle_t ) pxNewTimer;
- }
- /*-----------------------------------------------------------*/
- BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait )
- {
- 802b544: b085 sub sp, #20
- BaseType_t xReturn = pdFAIL;
- DaemonTaskMessage_t xMessage;
- /* Send a message to the timer service task to perform a particular action
- on a particular timer definition. */
- if( xTimerQueue != NULL )
- 802b546: b1b8 cbz r0, 802b578 <xTimerGenericCommand+0x3c>
- /* Send a command to the timer service task to start the xTimer timer. */
- xMessage.xMessageID = xCommandID;
- xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;
- xMessage.u.xTimerParameters.pxTimer = ( Timer_t * ) xTimer;
- if( xCommandID < tmrFIRST_FROM_ISR_COMMAND )
- 802b548: 2905 cmp r1, #5
- /* Send a message to the timer service task to perform a particular action
- on a particular timer definition. */
- if( xTimerQueue != NULL )
- {
- /* Send a command to the timer service task to start the xTimer timer. */
- xMessage.xMessageID = xCommandID;
- 802b54a: 9101 str r1, [sp, #4]
- xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;
- 802b54c: 9202 str r2, [sp, #8]
- xMessage.u.xTimerParameters.pxTimer = ( Timer_t * ) xTimer;
- 802b54e: 9503 str r5, [sp, #12]
- if( xCommandID < tmrFIRST_FROM_ISR_COMMAND )
- 802b550: dc0d bgt.n 802b56e <xTimerGenericCommand+0x32>
- {
- if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING )
- 802b552: f7ff fec5 bl 802b2e0 <xTaskGetSchedulerState>
- 802b556: 2802 cmp r0, #2
- {
- xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait );
- 802b558: a901 add r1, sp, #4
- 802b55a: 6820 ldr r0, [r4, #0]
- xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;
- xMessage.u.xTimerParameters.pxTimer = ( Timer_t * ) xTimer;
- if( xCommandID < tmrFIRST_FROM_ISR_COMMAND )
- {
- if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING )
- 802b55c: d102 bne.n 802b564 <xTimerGenericCommand+0x28>
- {
- xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait );
- 802b55e: 9a08 ldr r2, [sp, #32]
- 802b560: 2300 movs r3, #0
- 802b562: e001 b.n 802b568 <xTimerGenericCommand+0x2c>
- }
- else
- {
- xReturn = xQueueSendToBack( xTimerQueue, &xMessage, tmrNO_DELAY );
- 802b564: 2200 movs r2, #0
- 802b566: 4613 mov r3, r2
- 802b568: f7fe fffd bl 802a566 <xQueueGenericSend>
- 802b56c: e004 b.n 802b578 <xTimerGenericCommand+0x3c>
- }
- }
- else
- {
- xReturn = xQueueSendToBackFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken );
- 802b56e: 461a mov r2, r3
- 802b570: a901 add r1, sp, #4
- 802b572: 2300 movs r3, #0
- 802b574: f7ff f8bb bl 802a6ee <xQueueGenericSendFromISR>
- {
- mtCOVERAGE_TEST_MARKER();
- }
- return xReturn;
- }
- 802b578: b005 add sp, #20
- 802b57a: bd30 pop {r4, r5, pc}
- 802b57c: 20000cf8 .word 0x20000cf8
- 0802b580 <prvSwitchTimerLists>:
- }
- }
- /*-----------------------------------------------------------*/
- static void prvSwitchTimerLists( void )
- {
- 802b580: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr}
- /* The tick count has overflowed. The timer lists must be switched.
- If there are any timers still referenced from the current timer list
- then they must have expired and should be processed before the lists
- are switched. */
- while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
- 802b584: 4e19 ldr r6, [pc, #100] ; (802b5ec <prvSwitchTimerLists+0x6c>)
- listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
- vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
- }
- else
- {
- xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
- 802b586: f04f 0800 mov.w r8, #0
- 802b58a: e023 b.n 802b5d4 <prvSwitchTimerLists+0x54>
- If there are any timers still referenced from the current timer list
- then they must have expired and should be processed before the lists
- are switched. */
- while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
- {
- xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
- 802b58c: 68db ldr r3, [r3, #12]
- /* Remove the timer from the list. */
- pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList );
- 802b58e: 68dc ldr r4, [r3, #12]
- If there are any timers still referenced from the current timer list
- then they must have expired and should be processed before the lists
- are switched. */
- while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
- {
- xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
- 802b590: 681d ldr r5, [r3, #0]
- /* Remove the timer from the list. */
- pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList );
- ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
- 802b592: 1d27 adds r7, r4, #4
- 802b594: 4638 mov r0, r7
- 802b596: f7fe feea bl 802a36e <uxListRemove>
- traceTIMER_EXPIRED( pxTimer );
- /* Execute its callback, then send a command to restart the timer if
- it is an auto-reload timer. It cannot be restarted here as the lists
- have not yet been switched. */
- pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
- 802b59a: 6a63 ldr r3, [r4, #36] ; 0x24
- 802b59c: 4620 mov r0, r4
- 802b59e: 4798 blx r3
- if( pxTimer->uxAutoReload == ( UBaseType_t ) pdTRUE )
- 802b5a0: 69e3 ldr r3, [r4, #28]
- 802b5a2: 2b01 cmp r3, #1
- 802b5a4: d116 bne.n 802b5d4 <prvSwitchTimerLists+0x54>
- the timer going into the same timer list then it has already expired
- and the timer should be re-inserted into the current list so it is
- processed again within this loop. Otherwise a command should be sent
- to restart the timer to ensure it is only inserted into a list after
- the lists have been swapped. */
- xReloadTime = ( xNextExpireTime + pxTimer->xTimerPeriodInTicks );
- 802b5a6: 69a3 ldr r3, [r4, #24]
- 802b5a8: 18eb adds r3, r5, r3
- if( xReloadTime > xNextExpireTime )
- 802b5aa: 42ab cmp r3, r5
- 802b5ac: d906 bls.n 802b5bc <prvSwitchTimerLists+0x3c>
- {
- listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xReloadTime );
- 802b5ae: 6063 str r3, [r4, #4]
- listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
- 802b5b0: 6124 str r4, [r4, #16]
- vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
- 802b5b2: 6830 ldr r0, [r6, #0]
- 802b5b4: 4639 mov r1, r7
- 802b5b6: f7fe fec2 bl 802a33e <vListInsert>
- 802b5ba: e00b b.n 802b5d4 <prvSwitchTimerLists+0x54>
- }
- else
- {
- xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
- 802b5bc: 2100 movs r1, #0
- 802b5be: f8cd 8000 str.w r8, [sp]
- 802b5c2: 4620 mov r0, r4
- 802b5c4: 462a mov r2, r5
- 802b5c6: 460b mov r3, r1
- 802b5c8: f7ff ffb8 bl 802b53c <xTimerGenericCommand>
- configASSERT( xResult );
- 802b5cc: b910 cbnz r0, 802b5d4 <prvSwitchTimerLists+0x54>
- 802b5ce: f000 f90b bl 802b7e8 <ulPortSetInterruptMask>
- 802b5d2: e7fe b.n 802b5d2 <prvSwitchTimerLists+0x52>
- /* The tick count has overflowed. The timer lists must be switched.
- If there are any timers still referenced from the current timer list
- then they must have expired and should be processed before the lists
- are switched. */
- while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
- 802b5d4: 6833 ldr r3, [r6, #0]
- 802b5d6: 681a ldr r2, [r3, #0]
- 802b5d8: 2a00 cmp r2, #0
- 802b5da: d1d7 bne.n 802b58c <prvSwitchTimerLists+0xc>
- mtCOVERAGE_TEST_MARKER();
- }
- }
- pxTemp = pxCurrentTimerList;
- pxCurrentTimerList = pxOverflowTimerList;
- 802b5dc: 4a04 ldr r2, [pc, #16] ; (802b5f0 <prvSwitchTimerLists+0x70>)
- 802b5de: 4803 ldr r0, [pc, #12] ; (802b5ec <prvSwitchTimerLists+0x6c>)
- 802b5e0: 6811 ldr r1, [r2, #0]
- pxOverflowTimerList = pxTemp;
- 802b5e2: 6013 str r3, [r2, #0]
- mtCOVERAGE_TEST_MARKER();
- }
- }
- pxTemp = pxCurrentTimerList;
- pxCurrentTimerList = pxOverflowTimerList;
- 802b5e4: 6001 str r1, [r0, #0]
- pxOverflowTimerList = pxTemp;
- }
- 802b5e6: e8bd 81fc ldmia.w sp!, {r2, r3, r4, r5, r6, r7, r8, pc}
- 802b5ea: bf00 nop
- 802b5ec: 20000cc8 .word 0x20000cc8
- 802b5f0: 20000cfc .word 0x20000cfc
- 0802b5f4 <prvTimerTask>:
- pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
- }
- /*-----------------------------------------------------------*/
- static void prvTimerTask( void *pvParameters )
- {
- 802b5f4: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- TickType_t xTimeNow;
- PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */
- xTimeNow = xTaskGetTickCount();
- if( xTimeNow < xLastTime )
- 802b5f8: f8df 816c ldr.w r8, [pc, #364] ; 802b768 <prvTimerTask+0x174>
- pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
- }
- /*-----------------------------------------------------------*/
- static void prvTimerTask( void *pvParameters )
- {
- 802b5fc: b087 sub sp, #28
- 802b5fe: 46c1 mov r9, r8
- the timer with the nearest expiry time will expire. If there are no
- active timers then just set the next expire time to 0. That will cause
- this task to unblock when the tick count overflows, at which point the
- timer lists will be switched and the next expiry time can be
- re-assessed. */
- *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList );
- 802b600: 4b57 ldr r3, [pc, #348] ; (802b760 <prvTimerTask+0x16c>)
- 802b602: 681b ldr r3, [r3, #0]
- 802b604: 681f ldr r7, [r3, #0]
- 802b606: f1d7 0701 rsbs r7, r7, #1
- 802b60a: bf38 it cc
- 802b60c: 2700 movcc r7, #0
- if( *pxListWasEmpty == pdFALSE )
- 802b60e: b917 cbnz r7, 802b616 <prvTimerTask+0x22>
- {
- xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
- 802b610: 68db ldr r3, [r3, #12]
- 802b612: 681d ldr r5, [r3, #0]
- 802b614: e000 b.n 802b618 <prvTimerTask+0x24>
- }
- else
- {
- /* Ensure the task unblocks when the tick count rolls over. */
- xNextExpireTime = ( TickType_t ) 0U;
- 802b616: 2500 movs r5, #0
- static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, const BaseType_t xListWasEmpty )
- {
- TickType_t xTimeNow;
- BaseType_t xTimerListsWereSwitched;
- vTaskSuspendAll();
- 802b618: f7ff fb9e bl 802ad58 <vTaskSuspendAll>
- static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched )
- {
- TickType_t xTimeNow;
- PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */
- xTimeNow = xTaskGetTickCount();
- 802b61c: f7ff fba4 bl 802ad68 <xTaskGetTickCount>
- if( xTimeNow < xLastTime )
- 802b620: f8d8 3000 ldr.w r3, [r8]
- 802b624: 4298 cmp r0, r3
- static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched )
- {
- TickType_t xTimeNow;
- PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */
- xTimeNow = xTaskGetTickCount();
- 802b626: 4606 mov r6, r0
- if( xTimeNow < xLastTime )
- 802b628: d203 bcs.n 802b632 <prvTimerTask+0x3e>
- {
- prvSwitchTimerLists();
- 802b62a: f7ff ffa9 bl 802b580 <prvSwitchTimerLists>
- *pxTimerListsWereSwitched = pdTRUE;
- 802b62e: 2301 movs r3, #1
- 802b630: e000 b.n 802b634 <prvTimerTask+0x40>
- }
- else
- {
- *pxTimerListsWereSwitched = pdFALSE;
- 802b632: 2300 movs r3, #0
- }
- xLastTime = xTimeNow;
- 802b634: f8c9 6000 str.w r6, [r9]
- has expired or not. If obtaining the time causes the lists to switch
- then don't process this timer as any timers that remained in the list
- when the lists were switched will have been processed within the
- prvSampleTimeNow() function. */
- xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
- if( xTimerListsWereSwitched == pdFALSE )
- 802b638: 2b00 cmp r3, #0
- 802b63a: d132 bne.n 802b6a2 <prvTimerTask+0xae>
- {
- /* The tick count has not overflowed, has the timer expired? */
- if( ( xListWasEmpty == pdFALSE ) && ( xNextExpireTime <= xTimeNow ) )
- 802b63c: bb2f cbnz r7, 802b68a <prvTimerTask+0x96>
- 802b63e: 42b5 cmp r5, r6
- 802b640: d823 bhi.n 802b68a <prvTimerTask+0x96>
- {
- ( void ) xTaskResumeAll();
- 802b642: f7ff fc25 bl 802ae90 <xTaskResumeAll>
- /*-----------------------------------------------------------*/
- static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow )
- {
- BaseType_t xResult;
- Timer_t * const pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList );
- 802b646: 4b46 ldr r3, [pc, #280] ; (802b760 <prvTimerTask+0x16c>)
- 802b648: 681b ldr r3, [r3, #0]
- 802b64a: 68db ldr r3, [r3, #12]
- 802b64c: 68dc ldr r4, [r3, #12]
- /* Remove the timer from the list of active timers. A check has already
- been performed to ensure the list is not empty. */
- ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
- 802b64e: 1d20 adds r0, r4, #4
- 802b650: f7fe fe8d bl 802a36e <uxListRemove>
- traceTIMER_EXPIRED( pxTimer );
- /* If the timer is an auto reload timer then calculate the next
- expiry time and re-insert the timer in the list of active timers. */
- if( pxTimer->uxAutoReload == ( UBaseType_t ) pdTRUE )
- 802b654: 69e3 ldr r3, [r4, #28]
- 802b656: 2b01 cmp r3, #1
- 802b658: d113 bne.n 802b682 <prvTimerTask+0x8e>
- {
- /* The timer is inserted into a list using a time relative to anything
- other than the current time. It will therefore be inserted into the
- correct list relative to the time this task thinks it is now. */
- if( prvInsertTimerInActiveList( pxTimer, ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xNextExpireTime ) == pdTRUE )
- 802b65a: 69a1 ldr r1, [r4, #24]
- 802b65c: 4620 mov r0, r4
- 802b65e: 1869 adds r1, r5, r1
- 802b660: 4632 mov r2, r6
- 802b662: 462b mov r3, r5
- 802b664: f7ff ff0c bl 802b480 <prvInsertTimerInActiveList>
- 802b668: 2801 cmp r0, #1
- 802b66a: d10a bne.n 802b682 <prvTimerTask+0x8e>
- {
- /* The timer expired before it was added to the active timer
- list. Reload it now. */
- xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
- 802b66c: 9700 str r7, [sp, #0]
- 802b66e: 4620 mov r0, r4
- 802b670: 4639 mov r1, r7
- 802b672: 462a mov r2, r5
- 802b674: 463b mov r3, r7
- 802b676: f7ff ff61 bl 802b53c <xTimerGenericCommand>
- configASSERT( xResult );
- 802b67a: b910 cbnz r0, 802b682 <prvTimerTask+0x8e>
- 802b67c: f000 f8b4 bl 802b7e8 <ulPortSetInterruptMask>
- 802b680: e7fe b.n 802b680 <prvTimerTask+0x8c>
- {
- mtCOVERAGE_TEST_MARKER();
- }
- /* Call the timer callback. */
- pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
- 802b682: 6a63 ldr r3, [r4, #36] ; 0x24
- 802b684: 4620 mov r0, r4
- 802b686: 4798 blx r3
- 802b688: e05f b.n 802b74a <prvTimerTask+0x156>
- time has not been reached yet. This task should therefore
- block to wait for the next expire time or a command to be
- received - whichever comes first. The following line cannot
- be reached unless xNextExpireTime > xTimeNow, except in the
- case when the current timer list is empty. */
- vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ) );
- 802b68a: 4b36 ldr r3, [pc, #216] ; (802b764 <prvTimerTask+0x170>)
- 802b68c: 1ba9 subs r1, r5, r6
- 802b68e: 6818 ldr r0, [r3, #0]
- 802b690: f7ff f9aa bl 802a9e8 <vQueueWaitForMessageRestricted>
- if( xTaskResumeAll() == pdFALSE )
- 802b694: f7ff fbfc bl 802ae90 <xTaskResumeAll>
- 802b698: 2800 cmp r0, #0
- 802b69a: d156 bne.n 802b74a <prvTimerTask+0x156>
- {
- /* Yield to wait for either a command to arrive, or the
- block time to expire. If a command arrived between the
- critical section being exited and this yield then the yield
- will not cause the task to block. */
- portYIELD_WITHIN_API();
- 802b69c: f000 f898 bl 802b7d0 <vPortYield>
- 802b6a0: e053 b.n 802b74a <prvTimerTask+0x156>
- }
- }
- }
- else
- {
- ( void ) xTaskResumeAll();
- 802b6a2: f7ff fbf5 bl 802ae90 <xTaskResumeAll>
- 802b6a6: e050 b.n 802b74a <prvTimerTask+0x156>
- }
- #endif /* INCLUDE_xTimerPendFunctionCall */
- /* Commands that are positive are timer commands rather than pended
- function calls. */
- if( xMessage.xMessageID >= ( BaseType_t ) 0 )
- 802b6a8: 9b03 ldr r3, [sp, #12]
- 802b6aa: 2b00 cmp r3, #0
- 802b6ac: db4e blt.n 802b74c <prvTimerTask+0x158>
- {
- /* The messages uses the xTimerParameters member to work on a
- software timer. */
- pxTimer = xMessage.u.xTimerParameters.pxTimer;
- 802b6ae: 9c05 ldr r4, [sp, #20]
- if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE )
- 802b6b0: 6963 ldr r3, [r4, #20]
- 802b6b2: b113 cbz r3, 802b6ba <prvTimerTask+0xc6>
- {
- /* The timer is in a list, remove it. */
- ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
- 802b6b4: 1d20 adds r0, r4, #4
- 802b6b6: f7fe fe5a bl 802a36e <uxListRemove>
- static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched )
- {
- TickType_t xTimeNow;
- PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */
- xTimeNow = xTaskGetTickCount();
- 802b6ba: f7ff fb55 bl 802ad68 <xTaskGetTickCount>
- if( xTimeNow < xLastTime )
- 802b6be: f8d8 3000 ldr.w r3, [r8]
- 802b6c2: 4298 cmp r0, r3
- static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched )
- {
- TickType_t xTimeNow;
- PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */
- xTimeNow = xTaskGetTickCount();
- 802b6c4: 4605 mov r5, r0
- if( xTimeNow < xLastTime )
- 802b6c6: d201 bcs.n 802b6cc <prvTimerTask+0xd8>
- {
- prvSwitchTimerLists();
- 802b6c8: f7ff ff5a bl 802b580 <prvSwitchTimerLists>
- possibility of a higher priority task adding a message to the message
- queue with a time that is ahead of the timer daemon task (because it
- pre-empted the timer daemon task after the xTimeNow value was set). */
- xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
- switch( xMessage.xMessageID )
- 802b6cc: 9b03 ldr r3, [sp, #12]
- else
- {
- *pxTimerListsWereSwitched = pdFALSE;
- }
- xLastTime = xTimeNow;
- 802b6ce: f8c9 5000 str.w r5, [r9]
- possibility of a higher priority task adding a message to the message
- queue with a time that is ahead of the timer daemon task (because it
- pre-empted the timer daemon task after the xTimeNow value was set). */
- xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
- switch( xMessage.xMessageID )
- 802b6d2: 2b09 cmp r3, #9
- 802b6d4: d83a bhi.n 802b74c <prvTimerTask+0x158>
- 802b6d6: f04f 6204 mov.w r2, #138412032 ; 0x8400000
- 802b6da: 409a lsls r2, r3
- 802b6dc: d424 bmi.n 802b728 <prvTimerTask+0x134>
- 802b6de: f04f 4263 mov.w r2, #3808428032 ; 0xe3000000
- 802b6e2: 409a lsls r2, r3
- 802b6e4: d404 bmi.n 802b6f0 <prvTimerTask+0xfc>
- 802b6e6: f04f 6280 mov.w r2, #67108864 ; 0x4000000
- 802b6ea: 409a lsls r2, r3
- 802b6ec: d429 bmi.n 802b742 <prvTimerTask+0x14e>
- 802b6ee: e02d b.n 802b74c <prvTimerTask+0x158>
- case tmrCOMMAND_START_FROM_ISR :
- case tmrCOMMAND_RESET :
- case tmrCOMMAND_RESET_FROM_ISR :
- case tmrCOMMAND_START_DONT_TRACE :
- /* Start or restart a timer. */
- if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) == pdTRUE )
- 802b6f0: 9b04 ldr r3, [sp, #16]
- 802b6f2: 69a1 ldr r1, [r4, #24]
- 802b6f4: 4620 mov r0, r4
- 802b6f6: 1859 adds r1, r3, r1
- 802b6f8: 462a mov r2, r5
- 802b6fa: f7ff fec1 bl 802b480 <prvInsertTimerInActiveList>
- 802b6fe: 2801 cmp r0, #1
- 802b700: d124 bne.n 802b74c <prvTimerTask+0x158>
- {
- /* The timer expired before it was added to the active
- timer list. Process it now. */
- pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
- 802b702: 6a63 ldr r3, [r4, #36] ; 0x24
- 802b704: 4620 mov r0, r4
- 802b706: 4798 blx r3
- traceTIMER_EXPIRED( pxTimer );
- if( pxTimer->uxAutoReload == ( UBaseType_t ) pdTRUE )
- 802b708: 69e3 ldr r3, [r4, #28]
- 802b70a: 2b01 cmp r3, #1
- 802b70c: d11e bne.n 802b74c <prvTimerTask+0x158>
- {
- xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY );
- 802b70e: 69a2 ldr r2, [r4, #24]
- 802b710: 9b04 ldr r3, [sp, #16]
- 802b712: 2100 movs r1, #0
- 802b714: 18d2 adds r2, r2, r3
- 802b716: 9100 str r1, [sp, #0]
- 802b718: 4620 mov r0, r4
- 802b71a: 460b mov r3, r1
- 802b71c: f7ff ff0e bl 802b53c <xTimerGenericCommand>
- configASSERT( xResult );
- 802b720: b9a0 cbnz r0, 802b74c <prvTimerTask+0x158>
- 802b722: f000 f861 bl 802b7e8 <ulPortSetInterruptMask>
- 802b726: e7fe b.n 802b726 <prvTimerTask+0x132>
- There is nothing to do here. */
- break;
- case tmrCOMMAND_CHANGE_PERIOD :
- case tmrCOMMAND_CHANGE_PERIOD_FROM_ISR :
- pxTimer->xTimerPeriodInTicks = xMessage.u.xTimerParameters.xMessageValue;
- 802b728: 9904 ldr r1, [sp, #16]
- 802b72a: 61a1 str r1, [r4, #24]
- configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) );
- 802b72c: b911 cbnz r1, 802b734 <prvTimerTask+0x140>
- 802b72e: f000 f85b bl 802b7e8 <ulPortSetInterruptMask>
- 802b732: e7fe b.n 802b732 <prvTimerTask+0x13e>
- longer or shorter than the old one. The command time is
- therefore set to the current time, and as the period cannot be
- zero the next expiry time can only be in the future, meaning
- (unlike for the xTimerStart() case above) there is no fail case
- that needs to be handled here. */
- ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow );
- 802b734: 4620 mov r0, r4
- 802b736: 1869 adds r1, r5, r1
- 802b738: 462a mov r2, r5
- 802b73a: 462b mov r3, r5
- 802b73c: f7ff fea0 bl 802b480 <prvInsertTimerInActiveList>
- 802b740: e004 b.n 802b74c <prvTimerTask+0x158>
- break;
- case tmrCOMMAND_DELETE :
- /* The timer has already been removed from the active list,
- just free up the memory. */
- vPortFree( pxTimer );
- 802b742: 4620 mov r0, r4
- 802b744: f000 f9ec bl 802bb20 <vPortFree>
- 802b748: e000 b.n 802b74c <prvTimerTask+0x158>
- DaemonTaskMessage_t xMessage;
- Timer_t *pxTimer;
- BaseType_t xTimerListsWereSwitched, xResult;
- TickType_t xTimeNow;
- while( xQueueReceive( xTimerQueue, &xMessage, tmrNO_DELAY ) != pdFAIL ) /*lint !e603 xMessage does not have to be initialised as it is passed out, not in, and it is not used unless xQueueReceive() returns pdTRUE. */
- 802b74a: 4e06 ldr r6, [pc, #24] ; (802b764 <prvTimerTask+0x170>)
- 802b74c: 2200 movs r2, #0
- 802b74e: 6830 ldr r0, [r6, #0]
- 802b750: a903 add r1, sp, #12
- 802b752: 4613 mov r3, r2
- 802b754: f7ff f847 bl 802a7e6 <xQueueGenericReceive>
- 802b758: 2800 cmp r0, #0
- 802b75a: d1a5 bne.n 802b6a8 <prvTimerTask+0xb4>
- 802b75c: e750 b.n 802b600 <prvTimerTask+0xc>
- 802b75e: bf00 nop
- 802b760: 20000cc8 .word 0x20000cc8
- 802b764: 20000cf8 .word 0x20000cf8
- 802b768: 20000cf4 .word 0x20000cf4
- 0802b76c <pvTimerGetTimerID>:
- void *pvTimerGetTimerID( const TimerHandle_t xTimer )
- {
- Timer_t * const pxTimer = ( Timer_t * ) xTimer;
- return pxTimer->pvTimerID;
- }
- 802b76c: 6a00 ldr r0, [r0, #32]
- 802b76e: 4770 bx lr
- 0802b770 <prvPortStartFirstTask>:
- }
- /*-----------------------------------------------------------*/
- static void prvPortStartFirstTask( void )
- {
- __asm volatile(
- 802b770: 4806 ldr r0, [pc, #24] ; (802b78c <prvPortStartFirstTask+0x1c>)
- 802b772: 6800 ldr r0, [r0, #0]
- 802b774: 6800 ldr r0, [r0, #0]
- 802b776: f380 8808 msr MSP, r0
- 802b77a: b662 cpsie i
- 802b77c: b661 cpsie f
- 802b77e: f3bf 8f4f dsb sy
- 802b782: f3bf 8f6f isb sy
- 802b786: df00 svc 0
- 802b788: bf00 nop
- 802b78a: 0000 .short 0x0000
- 802b78c: e000ed08 .word 0xe000ed08
- 0802b790 <pxPortInitialiseStack>:
- StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
- {
- /* Simulate the stack frame as it would be created by a context switch
- interrupt. */
- pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */
- *pxTopOfStack = portINITIAL_XPSR; /* xPSR */
- 802b790: f04f 7380 mov.w r3, #16777216 ; 0x1000000
- pxTopOfStack--;
- *pxTopOfStack = ( StackType_t ) pxCode; /* PC */
- 802b794: e900 000a stmdb r0, {r1, r3}
- pxTopOfStack--;
- *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
- 802b798: 4b03 ldr r3, [pc, #12] ; (802b7a8 <pxPortInitialiseStack+0x18>)
- pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
- *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */
- 802b79a: f840 2c20 str.w r2, [r0, #-32]
- pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */
- *pxTopOfStack = portINITIAL_XPSR; /* xPSR */
- pxTopOfStack--;
- *pxTopOfStack = ( StackType_t ) pxCode; /* PC */
- pxTopOfStack--;
- *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
- 802b79e: f840 3c0c str.w r3, [r0, #-12]
- pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
- *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */
- pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */
- return pxTopOfStack;
- }
- 802b7a2: 3840 subs r0, #64 ; 0x40
- 802b7a4: 4770 bx lr
- 802b7a6: bf00 nop
- 802b7a8: 0802b82d .word 0x0802b82d
- 0802b7ac <SVC_Handler>:
- }
- /*-----------------------------------------------------------*/
- void vPortSVCHandler( void )
- {
- __asm volatile (
- 802b7ac: 4b07 ldr r3, [pc, #28] ; (802b7cc <pxCurrentTCBConst2>)
- 802b7ae: 6819 ldr r1, [r3, #0]
- 802b7b0: 6808 ldr r0, [r1, #0]
- 802b7b2: e8b0 0ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp}
- 802b7b6: f380 8809 msr PSP, r0
- 802b7ba: f3bf 8f6f isb sy
- 802b7be: f04f 0000 mov.w r0, #0
- 802b7c2: f380 8811 msr BASEPRI, r0
- 802b7c6: f04e 0e0d orr.w lr, lr, #13
- 802b7ca: 4770 bx lr
- 0802b7cc <pxCurrentTCBConst2>:
- 802b7cc: 20000c80 .word 0x20000c80
- 0802b7d0 <vPortYield>:
- /*-----------------------------------------------------------*/
- void vPortYield( void )
- {
- /* Set a PendSV to request a context switch. */
- portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
- 802b7d0: 4b04 ldr r3, [pc, #16] ; (802b7e4 <vPortYield+0x14>)
- 802b7d2: f04f 5280 mov.w r2, #268435456 ; 0x10000000
- 802b7d6: 601a str r2, [r3, #0]
- /* Barriers are normally not required but do ensure the code is completely
- within the specified behaviour for the architecture. */
- __asm volatile( "dsb" );
- 802b7d8: f3bf 8f4f dsb sy
- __asm volatile( "isb" );
- 802b7dc: f3bf 8f6f isb sy
- 802b7e0: 4770 bx lr
- 802b7e2: bf00 nop
- 802b7e4: e000ed04 .word 0xe000ed04
- 0802b7e8 <ulPortSetInterruptMask>:
- }
- /*-----------------------------------------------------------*/
- __attribute__(( naked )) uint32_t ulPortSetInterruptMask( void )
- {
- __asm volatile \
- 802b7e8: f3ef 8011 mrs r0, BASEPRI
- 802b7ec: f04f 0150 mov.w r1, #80 ; 0x50
- 802b7f0: f381 8811 msr BASEPRI, r1
- 802b7f4: 4770 bx lr
- );
- /* This return will not be reached but is necessary to prevent compiler
- warnings. */
- return 0;
- }
- 802b7f6: 2000 movs r0, #0
- 0802b7f8 <vPortEnterCritical>:
- __asm volatile( "isb" );
- }
- /*-----------------------------------------------------------*/
- void vPortEnterCritical( void )
- {
- 802b7f8: b508 push {r3, lr}
- portDISABLE_INTERRUPTS();
- 802b7fa: f7ff fff5 bl 802b7e8 <ulPortSetInterruptMask>
- uxCriticalNesting++;
- 802b7fe: 4a09 ldr r2, [pc, #36] ; (802b824 <vPortEnterCritical+0x2c>)
- 802b800: 6813 ldr r3, [r2, #0]
- 802b802: 3301 adds r3, #1
- 802b804: 6013 str r3, [r2, #0]
- __asm volatile( "dsb" );
- 802b806: f3bf 8f4f dsb sy
- __asm volatile( "isb" );
- 802b80a: f3bf 8f6f isb sy
- /* This is not the interrupt safe version of the enter critical function so
- assert() if it is being called from an interrupt context. Only API
- functions that end in "FromISR" can be used in an interrupt. Only assert if
- the critical nesting count is 1 to protect against recursive calls if the
- assert function also uses a critical section. */
- if( uxCriticalNesting == 1 )
- 802b80e: 2b01 cmp r3, #1
- 802b810: d107 bne.n 802b822 <vPortEnterCritical+0x2a>
- {
- configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );
- 802b812: 4b05 ldr r3, [pc, #20] ; (802b828 <vPortEnterCritical+0x30>)
- 802b814: 681b ldr r3, [r3, #0]
- 802b816: f013 0fff tst.w r3, #255 ; 0xff
- 802b81a: d002 beq.n 802b822 <vPortEnterCritical+0x2a>
- 802b81c: f7ff ffe4 bl 802b7e8 <ulPortSetInterruptMask>
- 802b820: e7fe b.n 802b820 <vPortEnterCritical+0x28>
- 802b822: bd08 pop {r3, pc}
- 802b824: 2000070c .word 0x2000070c
- 802b828: e000ed04 .word 0xe000ed04
- 0802b82c <prvTaskExitError>:
- return pxTopOfStack;
- }
- /*-----------------------------------------------------------*/
- static void prvTaskExitError( void )
- {
- 802b82c: b508 push {r3, lr}
- its caller as there is nothing to return to. If a task wants to exit it
- should instead call vTaskDelete( NULL ).
- Artificially force an assert() to be triggered if configASSERT() is
- defined, then stop here so application writers can catch the error. */
- configASSERT( uxCriticalNesting == ~0UL );
- 802b82e: 4b05 ldr r3, [pc, #20] ; (802b844 <prvTaskExitError+0x18>)
- 802b830: 681b ldr r3, [r3, #0]
- 802b832: 3301 adds r3, #1
- 802b834: d002 beq.n 802b83c <prvTaskExitError+0x10>
- 802b836: f7ff ffd7 bl 802b7e8 <ulPortSetInterruptMask>
- 802b83a: e7fe b.n 802b83a <prvTaskExitError+0xe>
- portDISABLE_INTERRUPTS();
- 802b83c: f7ff ffd4 bl 802b7e8 <ulPortSetInterruptMask>
- 802b840: e7fe b.n 802b840 <prvTaskExitError+0x14>
- 802b842: bf00 nop
- 802b844: 2000070c .word 0x2000070c
- 0802b848 <vPortClearInterruptMask>:
- }
- /*-----------------------------------------------------------*/
- __attribute__(( naked )) void vPortClearInterruptMask( uint32_t ulNewMaskValue )
- {
- __asm volatile \
- 802b848: f380 8811 msr BASEPRI, r0
- 802b84c: 4770 bx lr
- 802b84e: 0000 movs r0, r0
- 0802b850 <vPortExitCritical>:
- }
- }
- /*-----------------------------------------------------------*/
- void vPortExitCritical( void )
- {
- 802b850: b508 push {r3, lr}
- configASSERT( uxCriticalNesting );
- 802b852: 4b07 ldr r3, [pc, #28] ; (802b870 <vPortExitCritical+0x20>)
- 802b854: 6818 ldr r0, [r3, #0]
- 802b856: b910 cbnz r0, 802b85e <vPortExitCritical+0xe>
- 802b858: f7ff ffc6 bl 802b7e8 <ulPortSetInterruptMask>
- 802b85c: e7fe b.n 802b85c <vPortExitCritical+0xc>
- uxCriticalNesting--;
- 802b85e: 3801 subs r0, #1
- 802b860: 6018 str r0, [r3, #0]
- if( uxCriticalNesting == 0 )
- 802b862: b918 cbnz r0, 802b86c <vPortExitCritical+0x1c>
- {
- portENABLE_INTERRUPTS();
- }
- }
- 802b864: e8bd 4008 ldmia.w sp!, {r3, lr}
- {
- configASSERT( uxCriticalNesting );
- uxCriticalNesting--;
- if( uxCriticalNesting == 0 )
- {
- portENABLE_INTERRUPTS();
- 802b868: f7ff bfee b.w 802b848 <vPortClearInterruptMask>
- 802b86c: bd08 pop {r3, pc}
- 802b86e: bf00 nop
- 802b870: 2000070c .word 0x2000070c
- 0802b874 <PendSV_Handler>:
- void xPortPendSVHandler( void )
- {
- /* This is a naked function. */
- __asm volatile
- 802b874: f3ef 8009 mrs r0, PSP
- 802b878: f3bf 8f6f isb sy
- 802b87c: 4b0d ldr r3, [pc, #52] ; (802b8b4 <pxCurrentTCBConst>)
- 802b87e: 681a ldr r2, [r3, #0]
- 802b880: e920 0ff0 stmdb r0!, {r4, r5, r6, r7, r8, r9, sl, fp}
- 802b884: 6010 str r0, [r2, #0]
- 802b886: e92d 4008 stmdb sp!, {r3, lr}
- 802b88a: f04f 0050 mov.w r0, #80 ; 0x50
- 802b88e: f380 8811 msr BASEPRI, r0
- 802b892: f7ff fc19 bl 802b0c8 <vTaskSwitchContext>
- 802b896: f04f 0000 mov.w r0, #0
- 802b89a: f380 8811 msr BASEPRI, r0
- 802b89e: e8bd 4008 ldmia.w sp!, {r3, lr}
- 802b8a2: 6819 ldr r1, [r3, #0]
- 802b8a4: 6808 ldr r0, [r1, #0]
- 802b8a6: e8b0 0ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp}
- 802b8aa: f380 8809 msr PSP, r0
- 802b8ae: f3bf 8f6f isb sy
- 802b8b2: 4770 bx lr
- 0802b8b4 <pxCurrentTCBConst>:
- 802b8b4: 20000c80 .word 0x20000c80
- 0802b8b8 <SysTick_Handler>:
- );
- }
- /*-----------------------------------------------------------*/
- void xPortSysTickHandler( void )
- {
- 802b8b8: b508 push {r3, lr}
- /* The SysTick runs at the lowest interrupt priority, so when this interrupt
- executes all interrupts must be unmasked. There is therefore no need to
- save and then restore the interrupt mask value as its value is already
- known. */
- ( void ) portSET_INTERRUPT_MASK_FROM_ISR();
- 802b8ba: f7ff ff95 bl 802b7e8 <ulPortSetInterruptMask>
- {
- /* Increment the RTOS tick. */
- if( xTaskIncrementTick() != pdFALSE )
- 802b8be: f7ff fa59 bl 802ad74 <xTaskIncrementTick>
- 802b8c2: b118 cbz r0, 802b8cc <SysTick_Handler+0x14>
- {
- /* A context switch is required. Context switching is performed in
- the PendSV interrupt. Pend the PendSV interrupt. */
- portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
- 802b8c4: 4b04 ldr r3, [pc, #16] ; (802b8d8 <SysTick_Handler+0x20>)
- 802b8c6: f04f 5280 mov.w r2, #268435456 ; 0x10000000
- 802b8ca: 601a str r2, [r3, #0]
- }
- }
- portCLEAR_INTERRUPT_MASK_FROM_ISR( 0 );
- 802b8cc: 2000 movs r0, #0
- }
- 802b8ce: e8bd 4008 ldmia.w sp!, {r3, lr}
- /* A context switch is required. Context switching is performed in
- the PendSV interrupt. Pend the PendSV interrupt. */
- portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
- }
- }
- portCLEAR_INTERRUPT_MASK_FROM_ISR( 0 );
- 802b8d2: f7ff bfb9 b.w 802b848 <vPortClearInterruptMask>
- 802b8d6: bf00 nop
- 802b8d8: e000ed04 .word 0xe000ed04
- 0802b8dc <vPortSetupTimerInterrupt>:
- ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );
- }
- #endif /* configUSE_TICKLESS_IDLE */
- /* Configure SysTick to interrupt at the requested rate. */
- portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
- 802b8dc: 4b06 ldr r3, [pc, #24] ; (802b8f8 <vPortSetupTimerInterrupt+0x1c>)
- 802b8de: 681a ldr r2, [r3, #0]
- 802b8e0: f44f 737a mov.w r3, #1000 ; 0x3e8
- 802b8e4: fbb2 f2f3 udiv r2, r2, r3
- 802b8e8: 4b04 ldr r3, [pc, #16] ; (802b8fc <vPortSetupTimerInterrupt+0x20>)
- 802b8ea: 3a01 subs r2, #1
- 802b8ec: 601a str r2, [r3, #0]
- portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
- 802b8ee: 2207 movs r2, #7
- 802b8f0: f843 2c04 str.w r2, [r3, #-4]
- 802b8f4: 4770 bx lr
- 802b8f6: bf00 nop
- 802b8f8: 200005bc .word 0x200005bc
- 802b8fc: e000e014 .word 0xe000e014
- 0802b900 <xPortStartScheduler>:
- /*
- * See header file for description.
- */
- BaseType_t xPortStartScheduler( void )
- {
- 802b900: b507 push {r0, r1, r2, lr}
- functions can be called. ISR safe functions are those that end in
- "FromISR". FreeRTOS maintains separate thread and ISR API functions to
- ensure interrupt entry is as fast and simple as possible.
- Save the interrupt priority value that is about to be clobbered. */
- ulOriginalPriority = *pucFirstUserPriorityRegister;
- 802b902: 4b1d ldr r3, [pc, #116] ; (802b978 <xPortStartScheduler+0x78>)
- 802b904: 781a ldrb r2, [r3, #0]
- 802b906: 9201 str r2, [sp, #4]
- /* Determine the number of priority bits available. First write to all
- possible bits. */
- *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
- 802b908: 22ff movs r2, #255 ; 0xff
- 802b90a: 701a strb r2, [r3, #0]
- /* Read the value back to see how many bits stuck. */
- ucMaxPriorityValue = *pucFirstUserPriorityRegister;
- 802b90c: 781b ldrb r3, [r3, #0]
- 802b90e: f88d 3003 strb.w r3, [sp, #3]
- /* Use the same mask on the maximum system call priority. */
- ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;
- 802b912: f89d 2003 ldrb.w r2, [sp, #3]
- 802b916: 4b19 ldr r3, [pc, #100] ; (802b97c <xPortStartScheduler+0x7c>)
- 802b918: f002 0250 and.w r2, r2, #80 ; 0x50
- 802b91c: 701a strb r2, [r3, #0]
- /* Calculate the maximum acceptable priority group value for the number
- of bits read back. */
- ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;
- 802b91e: 4a18 ldr r2, [pc, #96] ; (802b980 <xPortStartScheduler+0x80>)
- 802b920: 2307 movs r3, #7
- 802b922: 6013 str r3, [r2, #0]
- while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
- 802b924: e005 b.n 802b932 <xPortStartScheduler+0x32>
- {
- ulMaxPRIGROUPValue--;
- ucMaxPriorityValue <<= ( uint8_t ) 0x01;
- 802b926: f89d 3003 ldrb.w r3, [sp, #3]
- 802b92a: 005b lsls r3, r3, #1
- 802b92c: f88d 3003 strb.w r3, [sp, #3]
- 802b930: 460b mov r3, r1
- ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;
- /* Calculate the maximum acceptable priority group value for the number
- of bits read back. */
- ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;
- while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
- 802b932: f89d 2003 ldrb.w r2, [sp, #3]
- 802b936: 1e59 subs r1, r3, #1
- 802b938: 0612 lsls r2, r2, #24
- 802b93a: d4f4 bmi.n 802b926 <xPortStartScheduler+0x26>
- }
- /* Shift the priority group value back to its position within the AIRCR
- register. */
- ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;
- ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;
- 802b93c: 4a10 ldr r2, [pc, #64] ; (802b980 <xPortStartScheduler+0x80>)
- ucMaxPriorityValue <<= ( uint8_t ) 0x01;
- }
- /* Shift the priority group value back to its position within the AIRCR
- register. */
- ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;
- 802b93e: 021b lsls r3, r3, #8
- ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;
- 802b940: f403 63e0 and.w r3, r3, #1792 ; 0x700
- 802b944: 6013 str r3, [r2, #0]
- /* Restore the clobbered interrupt priority register to its original
- value. */
- *pucFirstUserPriorityRegister = ulOriginalPriority;
- 802b946: 4b0c ldr r3, [pc, #48] ; (802b978 <xPortStartScheduler+0x78>)
- 802b948: 9a01 ldr r2, [sp, #4]
- 802b94a: 701a strb r2, [r3, #0]
- }
- #endif /* conifgASSERT_DEFINED */
- /* Make PendSV and SysTick the lowest priority interrupts. */
- portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;
- 802b94c: f8d3 2920 ldr.w r2, [r3, #2336] ; 0x920
- 802b950: f442 0270 orr.w r2, r2, #15728640 ; 0xf00000
- 802b954: f8c3 2920 str.w r2, [r3, #2336] ; 0x920
- portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;
- 802b958: f8d3 2920 ldr.w r2, [r3, #2336] ; 0x920
- 802b95c: f042 4270 orr.w r2, r2, #4026531840 ; 0xf0000000
- 802b960: f8c3 2920 str.w r2, [r3, #2336] ; 0x920
- /* Start the timer that generates the tick ISR. Interrupts are disabled
- here already. */
- vPortSetupTimerInterrupt();
- 802b964: f7ff ffba bl 802b8dc <vPortSetupTimerInterrupt>
- /* Initialise the critical nesting count ready for the first task. */
- uxCriticalNesting = 0;
- 802b968: 4b06 ldr r3, [pc, #24] ; (802b984 <xPortStartScheduler+0x84>)
- 802b96a: 2200 movs r2, #0
- 802b96c: 601a str r2, [r3, #0]
- /* Start the first task. */
- prvPortStartFirstTask();
- 802b96e: f7ff feff bl 802b770 <prvPortStartFirstTask>
- /* Should never get here as the tasks will now be executing! Call the task
- exit error function to prevent compiler warnings about a static function
- not being called in the case that the application writer overrides this
- functionality by defining configTASK_RETURN_ADDRESS. */
- prvTaskExitError();
- 802b972: f7ff ff5b bl 802b82c <prvTaskExitError>
- 802b976: bf00 nop
- 802b978: e000e400 .word 0xe000e400
- 802b97c: 20000d00 .word 0x20000d00
- 802b980: 20000d04 .word 0x20000d04
- 802b984: 2000070c .word 0x2000070c
- 0802b988 <vPortValidateInterruptPriority>:
- /*-----------------------------------------------------------*/
- #if( configASSERT_DEFINED == 1 )
- void vPortValidateInterruptPriority( void )
- {
- 802b988: b508 push {r3, lr}
- uint32_t ulCurrentInterrupt;
- uint8_t ucCurrentPriority;
- /* Obtain the number of the currently executing interrupt. */
- __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) );
- 802b98a: f3ef 8305 mrs r3, IPSR
- /* Is the interrupt number a user defined interrupt? */
- if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER )
- 802b98e: 2b0f cmp r3, #15
- 802b990: d908 bls.n 802b9a4 <vPortValidateInterruptPriority+0x1c>
- {
- /* Look up the interrupt's priority. */
- ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ];
- 802b992: 4a0a ldr r2, [pc, #40] ; (802b9bc <vPortValidateInterruptPriority+0x34>)
- 802b994: 5c9b ldrb r3, [r3, r2]
- interrupt entry is as fast and simple as possible.
- The following links provide detailed information:
- http://www.freertos.org/RTOS-Cortex-M3-M4.html
- http://www.freertos.org/FAQHelp.html */
- configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
- 802b996: 4a0a ldr r2, [pc, #40] ; (802b9c0 <vPortValidateInterruptPriority+0x38>)
- 802b998: 7812 ldrb r2, [r2, #0]
- 802b99a: 429a cmp r2, r3
- 802b99c: d902 bls.n 802b9a4 <vPortValidateInterruptPriority+0x1c>
- 802b99e: f7ff ff23 bl 802b7e8 <ulPortSetInterruptMask>
- 802b9a2: e7fe b.n 802b9a2 <vPortValidateInterruptPriority+0x1a>
- configuration then the correct setting can be achieved on all Cortex-M
- devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the
- scheduler. Note however that some vendor specific peripheral libraries
- assume a non-zero priority group setting, in which cases using a value
- of zero will result in unpredicable behaviour. */
- configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue );
- 802b9a4: 4b07 ldr r3, [pc, #28] ; (802b9c4 <vPortValidateInterruptPriority+0x3c>)
- 802b9a6: 681a ldr r2, [r3, #0]
- 802b9a8: 4b07 ldr r3, [pc, #28] ; (802b9c8 <vPortValidateInterruptPriority+0x40>)
- 802b9aa: 681b ldr r3, [r3, #0]
- 802b9ac: f402 62e0 and.w r2, r2, #1792 ; 0x700
- 802b9b0: 429a cmp r2, r3
- 802b9b2: d902 bls.n 802b9ba <vPortValidateInterruptPriority+0x32>
- 802b9b4: f7ff ff18 bl 802b7e8 <ulPortSetInterruptMask>
- 802b9b8: e7fe b.n 802b9b8 <vPortValidateInterruptPriority+0x30>
- 802b9ba: bd08 pop {r3, pc}
- 802b9bc: e000e3f0 .word 0xe000e3f0
- 802b9c0: 20000d00 .word 0x20000d00
- 802b9c4: e000ed0c .word 0xe000ed0c
- 802b9c8: 20000d04 .word 0x20000d04
- 0802b9cc <prvInsertBlockIntoFreeList>:
- xBlockAllocatedBit = ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 );
- }
- /*-----------------------------------------------------------*/
- static void prvInsertBlockIntoFreeList( BlockLink_t *pxBlockToInsert )
- {
- 802b9cc: b510 push {r4, lr}
- BlockLink_t *pxIterator;
- uint8_t *puc;
- /* Iterate through the list until a block is found that has a higher address
- than the block being inserted. */
- for( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock )
- 802b9ce: 4b0f ldr r3, [pc, #60] ; (802ba0c <prvInsertBlockIntoFreeList+0x40>)
- 802b9d0: e000 b.n 802b9d4 <prvInsertBlockIntoFreeList+0x8>
- 802b9d2: 4613 mov r3, r2
- 802b9d4: 681a ldr r2, [r3, #0]
- 802b9d6: 4282 cmp r2, r0
- 802b9d8: d3fb bcc.n 802b9d2 <prvInsertBlockIntoFreeList+0x6>
- }
- /* Do the block being inserted, and the block it is being inserted after
- make a contiguous block of memory? */
- puc = ( uint8_t * ) pxIterator;
- if( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert )
- 802b9da: 6859 ldr r1, [r3, #4]
- 802b9dc: 185c adds r4, r3, r1
- 802b9de: 4284 cmp r4, r0
- 802b9e0: d103 bne.n 802b9ea <prvInsertBlockIntoFreeList+0x1e>
- {
- pxIterator->xBlockSize += pxBlockToInsert->xBlockSize;
- 802b9e2: 6840 ldr r0, [r0, #4]
- 802b9e4: 1841 adds r1, r0, r1
- 802b9e6: 6059 str r1, [r3, #4]
- 802b9e8: 4618 mov r0, r3
- }
- /* Do the block being inserted, and the block it is being inserted before
- make a contiguous block of memory? */
- puc = ( uint8_t * ) pxBlockToInsert;
- if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock )
- 802b9ea: 6841 ldr r1, [r0, #4]
- 802b9ec: 1844 adds r4, r0, r1
- 802b9ee: 4294 cmp r4, r2
- 802b9f0: d106 bne.n 802ba00 <prvInsertBlockIntoFreeList+0x34>
- {
- if( pxIterator->pxNextFreeBlock != pxEnd )
- 802b9f2: 4c07 ldr r4, [pc, #28] ; (802ba10 <prvInsertBlockIntoFreeList+0x44>)
- 802b9f4: 6824 ldr r4, [r4, #0]
- 802b9f6: 42a2 cmp r2, r4
- 802b9f8: d002 beq.n 802ba00 <prvInsertBlockIntoFreeList+0x34>
- {
- /* Form one big block from the two blocks. */
- pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize;
- pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock;
- 802b9fa: ca14 ldmia r2, {r2, r4}
- if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock )
- {
- if( pxIterator->pxNextFreeBlock != pxEnd )
- {
- /* Form one big block from the two blocks. */
- pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize;
- 802b9fc: 1861 adds r1, r4, r1
- 802b9fe: 6041 str r1, [r0, #4]
- /* If the block being inserted plugged a gab, so was merged with the block
- before and the block after, then it's pxNextFreeBlock pointer will have
- already been set, and should not be set here as that would make it point
- to itself. */
- if( pxIterator != pxBlockToInsert )
- 802ba00: 4283 cmp r3, r0
- pxBlockToInsert->pxNextFreeBlock = pxEnd;
- }
- }
- else
- {
- pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock;
- 802ba02: 6002 str r2, [r0, #0]
- before and the block after, then it's pxNextFreeBlock pointer will have
- already been set, and should not be set here as that would make it point
- to itself. */
- if( pxIterator != pxBlockToInsert )
- {
- pxIterator->pxNextFreeBlock = pxBlockToInsert;
- 802ba04: bf18 it ne
- 802ba06: 6018 strne r0, [r3, #0]
- 802ba08: bd10 pop {r4, pc}
- 802ba0a: bf00 nop
- 802ba0c: 20000d10 .word 0x20000d10
- 802ba10: 20000d0c .word 0x20000d0c
- 0802ba14 <pvPortMalloc>:
- static size_t xBlockAllocatedBit = 0;
- /*-----------------------------------------------------------*/
- void *pvPortMalloc( size_t xWantedSize )
- {
- 802ba14: b5f8 push {r3, r4, r5, r6, r7, lr}
- 802ba16: 4605 mov r5, r0
- BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink;
- void *pvReturn = NULL;
- vTaskSuspendAll();
- 802ba18: f7ff f99e bl 802ad58 <vTaskSuspendAll>
- {
- /* If this is the first call to malloc then the heap will require
- initialisation to setup the list of free blocks. */
- if( pxEnd == NULL )
- 802ba1c: 4b3a ldr r3, [pc, #232] ; (802bb08 <pvPortMalloc+0xf4>)
- 802ba1e: 681b ldr r3, [r3, #0]
- 802ba20: bb1b cbnz r3, 802ba6a <pvPortMalloc+0x56>
- uint8_t *pucAlignedHeap;
- uint32_t ulAddress;
- size_t xTotalHeapSize = configTOTAL_HEAP_SIZE;
- /* Ensure the heap starts on a correctly aligned boundary. */
- ulAddress = ( uint32_t ) ucHeap;
- 802ba22: 4a3a ldr r2, [pc, #232] ; (802bb0c <pvPortMalloc+0xf8>)
- if( ( ulAddress & portBYTE_ALIGNMENT_MASK ) != 0 )
- 802ba24: 0756 lsls r6, r2, #29
- 802ba26: d007 beq.n 802ba38 <pvPortMalloc+0x24>
- {
- ulAddress += ( portBYTE_ALIGNMENT - 1 );
- 802ba28: 1dd3 adds r3, r2, #7
- ulAddress &= ~portBYTE_ALIGNMENT_MASK;
- 802ba2a: f023 0307 bic.w r3, r3, #7
- xTotalHeapSize -= ulAddress - ( uint32_t ) ucHeap;
- 802ba2e: f502 4270 add.w r2, r2, #61440 ; 0xf000
- 802ba32: 1ad1 subs r1, r2, r3
- ulAddress = ( uint32_t ) ucHeap;
- if( ( ulAddress & portBYTE_ALIGNMENT_MASK ) != 0 )
- {
- ulAddress += ( portBYTE_ALIGNMENT - 1 );
- ulAddress &= ~portBYTE_ALIGNMENT_MASK;
- 802ba34: 461a mov r2, r3
- 802ba36: e001 b.n 802ba3c <pvPortMalloc+0x28>
- static void prvHeapInit( void )
- {
- BlockLink_t *pxFirstFreeBlock;
- uint8_t *pucAlignedHeap;
- uint32_t ulAddress;
- size_t xTotalHeapSize = configTOTAL_HEAP_SIZE;
- 802ba38: f44f 4170 mov.w r1, #61440 ; 0xf000
- xStart.pxNextFreeBlock = ( void * ) pucAlignedHeap;
- xStart.xBlockSize = ( size_t ) 0;
- /* pxEnd is used to mark the end of the list of free blocks and is inserted
- at the end of the heap space. */
- ulAddress = ( ( uint32_t ) pucAlignedHeap ) + xTotalHeapSize;
- 802ba3c: 1851 adds r1, r2, r1
- ulAddress -= xHeapStructSize;
- 802ba3e: 3908 subs r1, #8
- ulAddress &= ~portBYTE_ALIGNMENT_MASK;
- 802ba40: f021 0107 bic.w r1, r1, #7
- pucAlignedHeap = ( uint8_t * ) ulAddress;
- /* xStart is used to hold a pointer to the first item in the list of free
- blocks. The void cast is used to prevent compiler warnings. */
- xStart.pxNextFreeBlock = ( void * ) pucAlignedHeap;
- 802ba44: 4832 ldr r0, [pc, #200] ; (802bb10 <pvPortMalloc+0xfc>)
- xStart.xBlockSize = ( size_t ) 0;
- 802ba46: 2300 movs r3, #0
- 802ba48: e880 000c stmia.w r0, {r2, r3}
- ulAddress = ( ( uint32_t ) pucAlignedHeap ) + xTotalHeapSize;
- ulAddress -= xHeapStructSize;
- ulAddress &= ~portBYTE_ALIGNMENT_MASK;
- pxEnd = ( void * ) ulAddress;
- pxEnd->xBlockSize = 0;
- pxEnd->pxNextFreeBlock = NULL;
- 802ba4c: 600b str r3, [r1, #0]
- at the end of the heap space. */
- ulAddress = ( ( uint32_t ) pucAlignedHeap ) + xTotalHeapSize;
- ulAddress -= xHeapStructSize;
- ulAddress &= ~portBYTE_ALIGNMENT_MASK;
- pxEnd = ( void * ) ulAddress;
- pxEnd->xBlockSize = 0;
- 802ba4e: 604b str r3, [r1, #4]
- pxEnd->pxNextFreeBlock = NULL;
- /* To start with there is a single free block that is sized to take up the
- entire heap space, minus the space taken by pxEnd. */
- pxFirstFreeBlock = ( void * ) pucAlignedHeap;
- pxFirstFreeBlock->xBlockSize = ulAddress - ( uint32_t ) pxFirstFreeBlock;
- 802ba50: 1a8b subs r3, r1, r2
- pxFirstFreeBlock->pxNextFreeBlock = pxEnd;
- 802ba52: e882 000a stmia.w r2, {r1, r3}
- /* Only one block exists - and it covers the entire usable heap space. */
- xMinimumEverFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
- 802ba56: 4a2f ldr r2, [pc, #188] ; (802bb14 <pvPortMalloc+0x100>)
- /* pxEnd is used to mark the end of the list of free blocks and is inserted
- at the end of the heap space. */
- ulAddress = ( ( uint32_t ) pucAlignedHeap ) + xTotalHeapSize;
- ulAddress -= xHeapStructSize;
- ulAddress &= ~portBYTE_ALIGNMENT_MASK;
- pxEnd = ( void * ) ulAddress;
- 802ba58: 482b ldr r0, [pc, #172] ; (802bb08 <pvPortMalloc+0xf4>)
- pxFirstFreeBlock = ( void * ) pucAlignedHeap;
- pxFirstFreeBlock->xBlockSize = ulAddress - ( uint32_t ) pxFirstFreeBlock;
- pxFirstFreeBlock->pxNextFreeBlock = pxEnd;
- /* Only one block exists - and it covers the entire usable heap space. */
- xMinimumEverFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
- 802ba5a: 6013 str r3, [r2, #0]
- xFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
- 802ba5c: 4a2e ldr r2, [pc, #184] ; (802bb18 <pvPortMalloc+0x104>)
- /* pxEnd is used to mark the end of the list of free blocks and is inserted
- at the end of the heap space. */
- ulAddress = ( ( uint32_t ) pucAlignedHeap ) + xTotalHeapSize;
- ulAddress -= xHeapStructSize;
- ulAddress &= ~portBYTE_ALIGNMENT_MASK;
- pxEnd = ( void * ) ulAddress;
- 802ba5e: 6001 str r1, [r0, #0]
- pxFirstFreeBlock->xBlockSize = ulAddress - ( uint32_t ) pxFirstFreeBlock;
- pxFirstFreeBlock->pxNextFreeBlock = pxEnd;
- /* Only one block exists - and it covers the entire usable heap space. */
- xMinimumEverFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
- xFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
- 802ba60: 6013 str r3, [r2, #0]
- /* Work out the position of the top bit in a size_t variable. */
- xBlockAllocatedBit = ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 );
- 802ba62: 4b2e ldr r3, [pc, #184] ; (802bb1c <pvPortMalloc+0x108>)
- 802ba64: f04f 4200 mov.w r2, #2147483648 ; 0x80000000
- 802ba68: 601a str r2, [r3, #0]
- /* Check the requested block size is not so large that the top bit is
- set. The top bit of the block size member of the BlockLink_t structure
- is used to determine who owns the block - the application or the
- kernel, so it must be free. */
- if( ( xWantedSize & xBlockAllocatedBit ) == 0 )
- 802ba6a: 4b2c ldr r3, [pc, #176] ; (802bb1c <pvPortMalloc+0x108>)
- 802ba6c: 681e ldr r6, [r3, #0]
- 802ba6e: 4235 tst r5, r6
- 802ba70: d140 bne.n 802baf4 <pvPortMalloc+0xe0>
- {
- /* The wanted size is increased so it can contain a BlockLink_t
- structure in addition to the requested amount of bytes. */
- if( xWantedSize > 0 )
- 802ba72: 2d00 cmp r5, #0
- 802ba74: d03f beq.n 802baf6 <pvPortMalloc+0xe2>
- {
- xWantedSize += xHeapStructSize;
- 802ba76: f105 0308 add.w r3, r5, #8
- /* Ensure that blocks are always aligned to the required number
- of bytes. */
- if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 )
- 802ba7a: 0758 lsls r0, r3, #29
- {
- /* Byte alignment required. */
- xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );
- 802ba7c: bf1c itt ne
- 802ba7e: f023 0307 bicne.w r3, r3, #7
- 802ba82: 3308 addne r3, #8
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- if( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) )
- 802ba84: 2b00 cmp r3, #0
- 802ba86: d033 beq.n 802baf0 <pvPortMalloc+0xdc>
- 802ba88: 4a23 ldr r2, [pc, #140] ; (802bb18 <pvPortMalloc+0x104>)
- 802ba8a: 6817 ldr r7, [r2, #0]
- 802ba8c: 42bb cmp r3, r7
- 802ba8e: d831 bhi.n 802baf4 <pvPortMalloc+0xe0>
- {
- /* Traverse the list from the start (lowest address) block until
- one of adequate size is found. */
- pxPreviousBlock = &xStart;
- pxBlock = xStart.pxNextFreeBlock;
- 802ba90: 4a1f ldr r2, [pc, #124] ; (802bb10 <pvPortMalloc+0xfc>)
- 802ba92: 6814 ldr r4, [r2, #0]
- while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
- 802ba94: e001 b.n 802ba9a <pvPortMalloc+0x86>
- 802ba96: 4622 mov r2, r4
- {
- pxPreviousBlock = pxBlock;
- pxBlock = pxBlock->pxNextFreeBlock;
- 802ba98: 4604 mov r4, r0
- {
- /* Traverse the list from the start (lowest address) block until
- one of adequate size is found. */
- pxPreviousBlock = &xStart;
- pxBlock = xStart.pxNextFreeBlock;
- while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
- 802ba9a: 6861 ldr r1, [r4, #4]
- 802ba9c: 4299 cmp r1, r3
- 802ba9e: d304 bcc.n 802baaa <pvPortMalloc+0x96>
- pxBlock = pxBlock->pxNextFreeBlock;
- }
- /* If the end marker was reached then a block of adequate size
- was not found. */
- if( pxBlock != pxEnd )
- 802baa0: 4819 ldr r0, [pc, #100] ; (802bb08 <pvPortMalloc+0xf4>)
- 802baa2: 6800 ldr r0, [r0, #0]
- 802baa4: 4284 cmp r4, r0
- 802baa6: d104 bne.n 802bab2 <pvPortMalloc+0x9e>
- 802baa8: e024 b.n 802baf4 <pvPortMalloc+0xe0>
- {
- /* Traverse the list from the start (lowest address) block until
- one of adequate size is found. */
- pxPreviousBlock = &xStart;
- pxBlock = xStart.pxNextFreeBlock;
- while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
- 802baaa: 6820 ldr r0, [r4, #0]
- 802baac: 2800 cmp r0, #0
- 802baae: d1f2 bne.n 802ba96 <pvPortMalloc+0x82>
- 802bab0: e7f6 b.n 802baa0 <pvPortMalloc+0x8c>
- BlockLink_t structure at its start. */
- pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize );
- /* This block is being returned for use so must be taken out
- of the list of free blocks. */
- pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;
- 802bab2: 6820 ldr r0, [r4, #0]
- was not found. */
- if( pxBlock != pxEnd )
- {
- /* Return the memory space pointed to - jumping over the
- BlockLink_t structure at its start. */
- pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize );
- 802bab4: 6815 ldr r5, [r2, #0]
- /* This block is being returned for use so must be taken out
- of the list of free blocks. */
- pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;
- 802bab6: 6010 str r0, [r2, #0]
- /* If the block is larger than required it can be split into
- two. */
- if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE )
- 802bab8: 1aca subs r2, r1, r3
- was not found. */
- if( pxBlock != pxEnd )
- {
- /* Return the memory space pointed to - jumping over the
- BlockLink_t structure at its start. */
- pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize );
- 802baba: 3508 adds r5, #8
- of the list of free blocks. */
- pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;
- /* If the block is larger than required it can be split into
- two. */
- if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE )
- 802babc: 2a10 cmp r2, #16
- 802babe: d909 bls.n 802bad4 <pvPortMalloc+0xc0>
- {
- /* This block is to be split into two. Create a new
- block following the number of bytes requested. The void
- cast is used to prevent byte alignment warnings from the
- compiler. */
- pxNewBlockLink = ( void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize );
- 802bac0: 18e0 adds r0, r4, r3
- configASSERT( ( ( ( uint32_t ) pxNewBlockLink ) & portBYTE_ALIGNMENT_MASK ) == 0 );
- 802bac2: 0741 lsls r1, r0, #29
- 802bac4: d002 beq.n 802bacc <pvPortMalloc+0xb8>
- 802bac6: f7ff fe8f bl 802b7e8 <ulPortSetInterruptMask>
- 802baca: e7fe b.n 802baca <pvPortMalloc+0xb6>
- /* Calculate the sizes of two blocks split from the
- single block. */
- pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize;
- 802bacc: 6042 str r2, [r0, #4]
- pxBlock->xBlockSize = xWantedSize;
- 802bace: 6063 str r3, [r4, #4]
- /* Insert the new block into the list of free blocks. */
- prvInsertBlockIntoFreeList( ( pxNewBlockLink ) );
- 802bad0: f7ff ff7c bl 802b9cc <prvInsertBlockIntoFreeList>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- xFreeBytesRemaining -= pxBlock->xBlockSize;
- 802bad4: 6862 ldr r2, [r4, #4]
- 802bad6: 4910 ldr r1, [pc, #64] ; (802bb18 <pvPortMalloc+0x104>)
- 802bad8: 1abb subs r3, r7, r2
- 802bada: 600b str r3, [r1, #0]
- if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining )
- 802badc: 490d ldr r1, [pc, #52] ; (802bb14 <pvPortMalloc+0x100>)
- 802bade: 6808 ldr r0, [r1, #0]
- 802bae0: 4283 cmp r3, r0
- {
- xMinimumEverFreeBytesRemaining = xFreeBytesRemaining;
- 802bae2: bf38 it cc
- 802bae4: 600b strcc r3, [r1, #0]
- mtCOVERAGE_TEST_MARKER();
- }
- /* The block is being returned - it is allocated and owned
- by the application and has no "next" block. */
- pxBlock->xBlockSize |= xBlockAllocatedBit;
- 802bae6: 4316 orrs r6, r2
- pxBlock->pxNextFreeBlock = NULL;
- 802bae8: 2300 movs r3, #0
- 802baea: e884 0048 stmia.w r4, {r3, r6}
- 802baee: e002 b.n 802baf6 <pvPortMalloc+0xe2>
- /*-----------------------------------------------------------*/
- void *pvPortMalloc( size_t xWantedSize )
- {
- BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink;
- void *pvReturn = NULL;
- 802baf0: 461d mov r5, r3
- 802baf2: e000 b.n 802baf6 <pvPortMalloc+0xe2>
- 802baf4: 2500 movs r5, #0
- mtCOVERAGE_TEST_MARKER();
- }
- traceMALLOC( pvReturn, xWantedSize );
- }
- ( void ) xTaskResumeAll();
- 802baf6: f7ff f9cb bl 802ae90 <xTaskResumeAll>
- mtCOVERAGE_TEST_MARKER();
- }
- }
- #endif
- configASSERT( ( ( ( uint32_t ) pvReturn ) & portBYTE_ALIGNMENT_MASK ) == 0 );
- 802bafa: 076b lsls r3, r5, #29
- 802bafc: d002 beq.n 802bb04 <pvPortMalloc+0xf0>
- 802bafe: f7ff fe73 bl 802b7e8 <ulPortSetInterruptMask>
- 802bb02: e7fe b.n 802bb02 <pvPortMalloc+0xee>
- return pvReturn;
- }
- 802bb04: 4628 mov r0, r5
- 802bb06: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 802bb08: 20000d0c .word 0x20000d0c
- 802bb0c: 10000000 .word 0x10000000
- 802bb10: 20000d10 .word 0x20000d10
- 802bb14: 20000d18 .word 0x20000d18
- 802bb18: 20000d08 .word 0x20000d08
- 802bb1c: 20000d1c .word 0x20000d1c
- 0802bb20 <vPortFree>:
- /*-----------------------------------------------------------*/
- void vPortFree( void *pv )
- {
- 802bb20: b510 push {r4, lr}
- uint8_t *puc = ( uint8_t * ) pv;
- BlockLink_t *pxLink;
- if( pv != NULL )
- 802bb22: 4604 mov r4, r0
- 802bb24: b310 cbz r0, 802bb6c <vPortFree+0x4c>
- /* This casting is to keep the compiler from issuing warnings. */
- pxLink = ( void * ) puc;
- /* Check the block is actually allocated. */
- configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 );
- 802bb26: 4a12 ldr r2, [pc, #72] ; (802bb70 <vPortFree+0x50>)
- 802bb28: f850 3c04 ldr.w r3, [r0, #-4]
- 802bb2c: 6812 ldr r2, [r2, #0]
- 802bb2e: 421a tst r2, r3
- 802bb30: d102 bne.n 802bb38 <vPortFree+0x18>
- 802bb32: f7ff fe59 bl 802b7e8 <ulPortSetInterruptMask>
- 802bb36: e7fe b.n 802bb36 <vPortFree+0x16>
- configASSERT( pxLink->pxNextFreeBlock == NULL );
- 802bb38: f850 1c08 ldr.w r1, [r0, #-8]
- 802bb3c: b111 cbz r1, 802bb44 <vPortFree+0x24>
- 802bb3e: f7ff fe53 bl 802b7e8 <ulPortSetInterruptMask>
- 802bb42: e7fe b.n 802bb42 <vPortFree+0x22>
- {
- if( pxLink->pxNextFreeBlock == NULL )
- {
- /* The block is being returned to the heap - it is no longer
- allocated. */
- pxLink->xBlockSize &= ~xBlockAllocatedBit;
- 802bb44: ea23 0302 bic.w r3, r3, r2
- 802bb48: f840 3c04 str.w r3, [r0, #-4]
- vTaskSuspendAll();
- 802bb4c: f7ff f904 bl 802ad58 <vTaskSuspendAll>
- {
- /* Add this block to the list of free blocks. */
- xFreeBytesRemaining += pxLink->xBlockSize;
- 802bb50: 4b08 ldr r3, [pc, #32] ; (802bb74 <vPortFree+0x54>)
- 802bb52: f854 1c04 ldr.w r1, [r4, #-4]
- 802bb56: 681a ldr r2, [r3, #0]
- traceFREE( pv, pxLink->xBlockSize );
- prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) );
- 802bb58: f1a4 0008 sub.w r0, r4, #8
- pxLink->xBlockSize &= ~xBlockAllocatedBit;
- vTaskSuspendAll();
- {
- /* Add this block to the list of free blocks. */
- xFreeBytesRemaining += pxLink->xBlockSize;
- 802bb5c: 188a adds r2, r1, r2
- 802bb5e: 601a str r2, [r3, #0]
- traceFREE( pv, pxLink->xBlockSize );
- prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) );
- 802bb60: f7ff ff34 bl 802b9cc <prvInsertBlockIntoFreeList>
- else
- {
- mtCOVERAGE_TEST_MARKER();
- }
- }
- }
- 802bb64: e8bd 4010 ldmia.w sp!, {r4, lr}
- /* Add this block to the list of free blocks. */
- xFreeBytesRemaining += pxLink->xBlockSize;
- traceFREE( pv, pxLink->xBlockSize );
- prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) );
- }
- ( void ) xTaskResumeAll();
- 802bb68: f7ff b992 b.w 802ae90 <xTaskResumeAll>
- 802bb6c: bd10 pop {r4, pc}
- 802bb6e: bf00 nop
- 802bb70: 20000d1c .word 0x20000d1c
- 802bb74: 20000d08 .word 0x20000d08
- 0802bb78 <http_sent_log_err>:
- static void http_sent_log_err(void * arg, err_t err)
- {
- (void)err;
- (void)arg;
- /* Clear file transfer in progress flag */
- fLogTransInprog = false;
- 802bb78: 4b01 ldr r3, [pc, #4] ; (802bb80 <http_sent_log_err+0x8>)
- 802bb7a: 2200 movs r2, #0
- 802bb7c: 701a strb r2, [r3, #0]
- 802bb7e: 4770 bx lr
- 802bb80: 20000d2c .word 0x20000d2c
- 0802bb84 <HTTP_UpdateUserLoginTime>:
- /**
- * @brief Обновление времени последней активности пользователя
- */
- static void HTTP_UpdateUserLoginTime(uint8_t user_id)
- {
- xTimerStart(users[user_id].LogoutTimer, 0);
- 802bb84: 4b07 ldr r3, [pc, #28] ; (802bba4 <HTTP_UpdateUserLoginTime+0x20>)
- 802bb86: 2214 movs r2, #20
- /**
- * @brief Обновление времени последней активности пользователя
- */
- static void HTTP_UpdateUserLoginTime(uint8_t user_id)
- {
- 802bb88: b513 push {r0, r1, r4, lr}
- xTimerStart(users[user_id].LogoutTimer, 0);
- 802bb8a: fb02 3000 mla r0, r2, r0, r3
- 802bb8e: 6904 ldr r4, [r0, #16]
- 802bb90: f7ff f8ea bl 802ad68 <xTaskGetTickCount>
- 802bb94: 2300 movs r3, #0
- 802bb96: 4602 mov r2, r0
- 802bb98: 9300 str r3, [sp, #0]
- 802bb9a: 4620 mov r0, r4
- 802bb9c: 2101 movs r1, #1
- 802bb9e: f7ff fccd bl 802b53c <xTimerGenericCommand>
- }
- 802bba2: bd1c pop {r2, r3, r4, pc}
- 802bba4: 2000e23c .word 0x2000e23c
- 0802bba8 <fs_open>:
- * @param name : pointer to a file name
- * @param file : pointer to a fs_file structure
- * @retval 1 if success, 0 if fail
- */
- static int fs_open(char *name, struct fs_file *file)
- {
- 802bba8: b570 push {r4, r5, r6, lr}
- struct fsdata_file_noconst *f;
- for (f = (struct fsdata_file_noconst *)FS_ROOT; f != NULL; f = (struct fsdata_file_noconst *)f->next)
- 802bbaa: 4c09 ldr r4, [pc, #36] ; (802bbd0 <fs_open+0x28>)
- * @param name : pointer to a file name
- * @param file : pointer to a fs_file structure
- * @retval 1 if success, 0 if fail
- */
- static int fs_open(char *name, struct fs_file *file)
- {
- 802bbac: 4606 mov r6, r0
- 802bbae: 460d mov r5, r1
- struct fsdata_file_noconst *f;
- for (f = (struct fsdata_file_noconst *)FS_ROOT; f != NULL; f = (struct fsdata_file_noconst *)f->next)
- {
- if (!strcmp(name, f->name))
- 802bbb0: 4630 mov r0, r6
- 802bbb2: 6861 ldr r1, [r4, #4]
- 802bbb4: f7f6 f830 bl 8021c18 <strcmp>
- 802bbb8: b928 cbnz r0, 802bbc6 <fs_open+0x1e>
- {
- file->data = f->data;
- 802bbba: 68a3 ldr r3, [r4, #8]
- 802bbbc: 602b str r3, [r5, #0]
- file->len = f->len;
- 802bbbe: 68e3 ldr r3, [r4, #12]
- return 1;
- 802bbc0: 2001 movs r0, #1
- for (f = (struct fsdata_file_noconst *)FS_ROOT; f != NULL; f = (struct fsdata_file_noconst *)f->next)
- {
- if (!strcmp(name, f->name))
- {
- file->data = f->data;
- file->len = f->len;
- 802bbc2: 606b str r3, [r5, #4]
- return 1;
- 802bbc4: bd70 pop {r4, r5, r6, pc}
- */
- static int fs_open(char *name, struct fs_file *file)
- {
- struct fsdata_file_noconst *f;
- for (f = (struct fsdata_file_noconst *)FS_ROOT; f != NULL; f = (struct fsdata_file_noconst *)f->next)
- 802bbc6: 6824 ldr r4, [r4, #0]
- 802bbc8: 2c00 cmp r4, #0
- 802bbca: d1f1 bne.n 802bbb0 <fs_open+0x8>
- file->data = f->data;
- file->len = f->len;
- return 1;
- }
- }
- return 0;
- 802bbcc: 4620 mov r0, r4
- }
- 802bbce: bd70 pop {r4, r5, r6, pc}
- 802bbd0: 080411f0 .word 0x080411f0
- 0802bbd4 <http_accept>:
- * @param pcb: pointer to a tcp_pcb structure
- * ¶m err: Lwip stack error code
- * @retval err
- */
- static err_t http_accept(void *arg, struct tcp_pcb *pcb, err_t err)
- {
- 802bbd4: b538 push {r3, r4, r5, lr}
- struct http_state *hs;
- /* Allocate memory for the structure that holds the state of the connection */
- hs = mem_malloc(sizeof(struct http_state));
- 802bbd6: 2008 movs r0, #8
- * @param pcb: pointer to a tcp_pcb structure
- * ¶m err: Lwip stack error code
- * @retval err
- */
- static err_t http_accept(void *arg, struct tcp_pcb *pcb, err_t err)
- {
- 802bbd8: 460c mov r4, r1
- struct http_state *hs;
- /* Allocate memory for the structure that holds the state of the connection */
- hs = mem_malloc(sizeof(struct http_state));
- 802bbda: f003 ff6d bl 802fab8 <mem_malloc>
- if (hs == NULL)
- 802bbde: 4601 mov r1, r0
- 802bbe0: b1a0 cbz r0, 802bc0c <http_accept+0x38>
- {
- return ERR_MEM;
- }
- /* Initialize the structure. */
- hs->file = NULL;
- 802bbe2: 2500 movs r5, #0
- 802bbe4: 6005 str r5, [r0, #0]
- hs->left = 0;
- 802bbe6: 6045 str r5, [r0, #4]
- /* Tell TCP that this is the structure we wish to be passed for our
- callbacks. */
- tcp_arg(pcb, hs);
- 802bbe8: 4620 mov r0, r4
- 802bbea: f004 fc55 bl 8030498 <tcp_arg>
- /* Tell TCP that we wish to be informed of incoming data by a call
- to the http_recv() function. */
- tcp_recv(pcb, http_recv);
- 802bbee: 4620 mov r0, r4
- 802bbf0: 4908 ldr r1, [pc, #32] ; (802bc14 <http_accept+0x40>)
- 802bbf2: f004 fc53 bl 803049c <tcp_recv>
- tcp_err(pcb, conn_err);
- 802bbf6: 4620 mov r0, r4
- 802bbf8: 4907 ldr r1, [pc, #28] ; (802bc18 <http_accept+0x44>)
- 802bbfa: f004 fc53 bl 80304a4 <tcp_err>
- tcp_poll(pcb, http_poll, 10);
- 802bbfe: 4620 mov r0, r4
- 802bc00: 4906 ldr r1, [pc, #24] ; (802bc1c <http_accept+0x48>)
- 802bc02: 220a movs r2, #10
- 802bc04: f004 fc53 bl 80304ae <tcp_poll>
- return ERR_OK;
- 802bc08: 4628 mov r0, r5
- 802bc0a: e000 b.n 802bc0e <http_accept+0x3a>
- /* Allocate memory for the structure that holds the state of the connection */
- hs = mem_malloc(sizeof(struct http_state));
- if (hs == NULL)
- {
- return ERR_MEM;
- 802bc0c: 20ff movs r0, #255 ; 0xff
- tcp_err(pcb, conn_err);
- tcp_poll(pcb, http_poll, 10);
- return ERR_OK;
- }
- 802bc0e: b240 sxtb r0, r0
- 802bc10: bd38 pop {r3, r4, r5, pc}
- 802bc12: bf00 nop
- 802bc14: 0802cc8d .word 0x0802cc8d
- 802bc18: 0802bc63 .word 0x0802bc63
- 802bc1c: 0802bc4b .word 0x0802bc4b
- 0802bc20 <send_data>:
- * @param pcb: pointer to a tcp_pcb struct
- * @param hs: pointer to a http_state struct
- * @retval none
- */
- static void send_data(struct tcp_pcb *pcb, struct http_state *hs)
- {
- 802bc20: b538 push {r3, r4, r5, lr}
- err_t err;
- u16_t len;
- /* We cannot send more data than space available in the send
- buffer */
- if (tcp_sndbuf(pcb) < hs->left)
- 802bc22: 684b ldr r3, [r1, #4]
- 802bc24: f8b0 5066 ldrh.w r5, [r0, #102] ; 0x66
- 802bc28: 429d cmp r5, r3
- {
- len = tcp_sndbuf(pcb);
- }
- else
- {
- len = hs->left;
- 802bc2a: bf28 it cs
- 802bc2c: b29d uxthcs r5, r3
- * @param pcb: pointer to a tcp_pcb struct
- * @param hs: pointer to a http_state struct
- * @retval none
- */
- static void send_data(struct tcp_pcb *pcb, struct http_state *hs)
- {
- 802bc2e: 460c mov r4, r1
- }
- else
- {
- len = hs->left;
- }
- err = tcp_write(pcb, hs->file, len, 0);
- 802bc30: 462a mov r2, r5
- 802bc32: 6809 ldr r1, [r1, #0]
- 802bc34: 2300 movs r3, #0
- 802bc36: f006 f834 bl 8031ca2 <tcp_write>
- if (err == ERR_OK)
- 802bc3a: b928 cbnz r0, 802bc48 <send_data+0x28>
- {
- hs->file += len;
- 802bc3c: 6823 ldr r3, [r4, #0]
- 802bc3e: 195b adds r3, r3, r5
- 802bc40: 6023 str r3, [r4, #0]
- hs->left -= len;
- 802bc42: 6863 ldr r3, [r4, #4]
- 802bc44: 1b5d subs r5, r3, r5
- 802bc46: 6065 str r5, [r4, #4]
- 802bc48: bd38 pop {r3, r4, r5, pc}
- 0802bc4a <http_poll>:
- * @param arg: pointer to an argument to be passed to callback function
- * @param pcb: pointer on tcp_pcb structure
- * @retval err_t
- */
- static err_t http_poll(void *arg, struct tcp_pcb *pcb)
- {
- 802bc4a: b508 push {r3, lr}
- if (arg == NULL)
- 802bc4c: 4603 mov r3, r0
- {
- tcp_close(pcb);
- 802bc4e: 4608 mov r0, r1
- * @param pcb: pointer on tcp_pcb structure
- * @retval err_t
- */
- static err_t http_poll(void *arg, struct tcp_pcb *pcb)
- {
- if (arg == NULL)
- 802bc50: b913 cbnz r3, 802bc58 <http_poll+0xe>
- {
- tcp_close(pcb);
- 802bc52: f004 fee5 bl 8030a20 <tcp_close>
- 802bc56: e002 b.n 802bc5e <http_poll+0x14>
- }
- else
- {
- send_data(pcb, (struct http_state *)arg);
- 802bc58: 4619 mov r1, r3
- 802bc5a: f7ff ffe1 bl 802bc20 <send_data>
- }
- return ERR_OK;
- }
- 802bc5e: 2000 movs r0, #0
- 802bc60: bd08 pop {r3, pc}
- 0802bc62 <conn_err>:
- static void conn_err(void *arg, err_t err)
- {
- struct http_state *hs;
- hs = arg;
- mem_free(hs);
- 802bc62: f003 be61 b.w 802f928 <mem_free>
- 0802bc66 <close_conn>:
- * @param pcb: pointer to a tcp_pcb struct
- * @param hs: pointer to a http_state struct
- * @retval
- */
- static void close_conn(struct tcp_pcb *pcb, struct http_state *hs)
- {
- 802bc66: b538 push {r3, r4, r5, lr}
- 802bc68: 4604 mov r4, r0
- 802bc6a: 460d mov r5, r1
- tcp_arg(pcb, NULL);
- 802bc6c: 2100 movs r1, #0
- 802bc6e: f004 fc13 bl 8030498 <tcp_arg>
- tcp_sent(pcb, NULL);
- 802bc72: 4620 mov r0, r4
- 802bc74: 2100 movs r1, #0
- 802bc76: f004 fc13 bl 80304a0 <tcp_sent>
- tcp_recv(pcb, NULL);
- 802bc7a: 4620 mov r0, r4
- 802bc7c: 2100 movs r1, #0
- 802bc7e: f004 fc0d bl 803049c <tcp_recv>
- mem_free(hs);
- 802bc82: 4628 mov r0, r5
- 802bc84: f003 fe50 bl 802f928 <mem_free>
- tcp_close(pcb);
- 802bc88: 4620 mov r0, r4
- }
- 802bc8a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- {
- tcp_arg(pcb, NULL);
- tcp_sent(pcb, NULL);
- tcp_recv(pcb, NULL);
- mem_free(hs);
- tcp_close(pcb);
- 802bc8e: f004 bec7 b.w 8030a20 <tcp_close>
- 0802bc92 <http_sent>:
- * @param pcb: pointer on tcp_pcb structure
- * @param len
- * @retval err : LwIP error code
- */
- static err_t http_sent(void *arg, struct tcp_pcb *pcb, u16_t len)
- {
- 802bc92: b508 push {r3, lr}
- 802bc94: 4603 mov r3, r0
- 802bc96: 4608 mov r0, r1
- struct http_state *hs;
- hs = arg;
- if (hs->left > 0)
- 802bc98: 685a ldr r2, [r3, #4]
- {
- send_data(pcb, hs);
- 802bc9a: 4619 mov r1, r3
- {
- struct http_state *hs;
- hs = arg;
- if (hs->left > 0)
- 802bc9c: b112 cbz r2, 802bca4 <http_sent+0x12>
- {
- send_data(pcb, hs);
- 802bc9e: f7ff ffbf bl 802bc20 <send_data>
- 802bca2: e001 b.n 802bca8 <http_sent+0x16>
- }
- else
- {
- close_conn(pcb, hs);
- 802bca4: f7ff ffdf bl 802bc66 <close_conn>
- }
- return ERR_OK;
- }
- 802bca8: 2000 movs r0, #0
- 802bcaa: bd08 pop {r3, pc}
- 0802bcac <http_sent_log>:
- /**
- * @brief Sent callback for log file transfer (messages as is, not ordered)
- */
- static err_t http_sent_log(void *arg, struct tcp_pcb *pcb, u16_t len)
- {
- 802bcac: b570 push {r4, r5, r6, lr}
- static bool start = true;
- (void)len;
- hs = arg;
- if (hs->left > 0)
- 802bcae: 6845 ldr r5, [r0, #4]
- /**
- * @brief Sent callback for log file transfer (messages as is, not ordered)
- */
- static err_t http_sent_log(void *arg, struct tcp_pcb *pcb, u16_t len)
- {
- 802bcb0: 4604 mov r4, r0
- 802bcb2: 460e mov r6, r1
- static bool start = true;
- (void)len;
- hs = arg;
- if (hs->left > 0)
- 802bcb4: b125 cbz r5, 802bcc0 <http_sent_log+0x14>
- {
- send_data(pcb, hs);
- 802bcb6: 4608 mov r0, r1
- 802bcb8: 4621 mov r1, r4
- 802bcba: f7ff ffb1 bl 802bc20 <send_data>
- 802bcbe: e036 b.n 802bd2e <http_sent_log+0x82>
- }
- else
- {
- memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
- 802bcc0: f44f 727a mov.w r2, #1000 ; 0x3e8
- 802bcc4: 481b ldr r0, [pc, #108] ; (802bd34 <http_sent_log+0x88>)
- 802bcc6: 4629 mov r1, r5
- 802bcc8: f7f5 ff1a bl 8021b00 <memset>
- if (log_ptr + FILE_BUF_MAX_LEN_LOG <= log_size) {
- 802bccc: 4b1a ldr r3, [pc, #104] ; (802bd38 <http_sent_log+0x8c>)
- 802bcce: 6818 ldr r0, [r3, #0]
- 802bcd0: 4b1a ldr r3, [pc, #104] ; (802bd3c <http_sent_log+0x90>)
- 802bcd2: 681a ldr r2, [r3, #0]
- 802bcd4: f500 7320 add.w r3, r0, #640 ; 0x280
- 802bcd8: 4293 cmp r3, r2
- 802bcda: 4b19 ldr r3, [pc, #100] ; (802bd40 <http_sent_log+0x94>)
- 802bcdc: d803 bhi.n 802bce6 <http_sent_log+0x3a>
- nbytes = LOG_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN_LOG, start);
- 802bcde: 4915 ldr r1, [pc, #84] ; (802bd34 <http_sent_log+0x88>)
- 802bce0: f44f 7220 mov.w r2, #640 ; 0x280
- 802bce4: e003 b.n 802bcee <http_sent_log+0x42>
- }
- else if (log_ptr < log_size) {
- 802bce6: 4290 cmp r0, r2
- 802bce8: d205 bcs.n 802bcf6 <http_sent_log+0x4a>
- nbytes = LOG_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
- 802bcea: 4912 ldr r1, [pc, #72] ; (802bd34 <http_sent_log+0x88>)
- 802bcec: 1a12 subs r2, r2, r0
- 802bcee: 781b ldrb r3, [r3, #0]
- 802bcf0: f7fd ff70 bl 8029bd4 <LOG_GetData>
- 802bcf4: 4605 mov r5, r0
- }
- else {
- nbytes = 0;
- }
- log_ptr += nbytes;
- 802bcf6: 4b10 ldr r3, [pc, #64] ; (802bd38 <http_sent_log+0x8c>)
- 802bcf8: 681a ldr r2, [r3, #0]
- 802bcfa: 18aa adds r2, r5, r2
- 802bcfc: 601a str r2, [r3, #0]
- start = false;
- 802bcfe: 4b10 ldr r3, [pc, #64] ; (802bd40 <http_sent_log+0x94>)
- 802bd00: 2200 movs r2, #0
- 802bd02: 701a strb r2, [r3, #0]
- if (nbytes == 0) {
- 802bd04: b945 cbnz r5, 802bd18 <http_sent_log+0x6c>
- /* File transfer finished. */
- start = true;
- 802bd06: 2201 movs r2, #1
- close_conn(pcb, hs);
- 802bd08: 4630 mov r0, r6
- 802bd0a: 4621 mov r1, r4
- log_ptr += nbytes;
- start = false;
- if (nbytes == 0) {
- /* File transfer finished. */
- start = true;
- 802bd0c: 701a strb r2, [r3, #0]
- close_conn(pcb, hs);
- 802bd0e: f7ff ffaa bl 802bc66 <close_conn>
- /* Clear file transfer in progress flag */
- fLogTransInprog = false;
- 802bd12: 4b0c ldr r3, [pc, #48] ; (802bd44 <http_sent_log+0x98>)
- 802bd14: 701d strb r5, [r3, #0]
- 802bd16: e00a b.n 802bd2e <http_sent_log+0x82>
- return ERR_OK;
- }
- hs->file = logFileBuf;
- 802bd18: 4b06 ldr r3, [pc, #24] ; (802bd34 <http_sent_log+0x88>)
- hs->left = nbytes;
- send_data(pcb, hs);
- 802bd1a: 4630 mov r0, r6
- 802bd1c: 4621 mov r1, r4
- return ERR_OK;
- }
- hs->file = logFileBuf;
- hs->left = nbytes;
- 802bd1e: e884 0028 stmia.w r4, {r3, r5}
- send_data(pcb, hs);
- 802bd22: f7ff ff7d bl 802bc20 <send_data>
- tcp_sent(pcb, http_sent_log);
- 802bd26: 4630 mov r0, r6
- 802bd28: 4907 ldr r1, [pc, #28] ; (802bd48 <http_sent_log+0x9c>)
- 802bd2a: f004 fbb9 bl 80304a0 <tcp_sent>
- }
- return ERR_OK;
- }
- 802bd2e: 2000 movs r0, #0
- 802bd30: bd70 pop {r4, r5, r6, pc}
- 802bd32: bf00 nop
- 802bd34: 2000cbd9 .word 0x2000cbd9
- 802bd38: 20000d24 .word 0x20000d24
- 802bd3c: 20000d30 .word 0x20000d30
- 802bd40: 20000710 .word 0x20000710
- 802bd44: 20000d2c .word 0x20000d2c
- 802bd48: 0802bcad .word 0x0802bcad
- 0802bd4c <http_sent_history>:
- /**
- * @brief Sent callback for log file transfer (messages as is, not ordered)
- */
- static err_t http_sent_history(void *arg, struct tcp_pcb *pcb, u16_t len)
- {
- 802bd4c: b570 push {r4, r5, r6, lr}
- static bool start = true;
- (void)len;
- hs = arg;
- if (hs->left > 0)
- 802bd4e: 6845 ldr r5, [r0, #4]
- /**
- * @brief Sent callback for log file transfer (messages as is, not ordered)
- */
- static err_t http_sent_history(void *arg, struct tcp_pcb *pcb, u16_t len)
- {
- 802bd50: 4604 mov r4, r0
- 802bd52: 460e mov r6, r1
- static bool start = true;
- (void)len;
- hs = arg;
- if (hs->left > 0)
- 802bd54: b125 cbz r5, 802bd60 <http_sent_history+0x14>
- {
- send_data(pcb, hs);
- 802bd56: 4608 mov r0, r1
- 802bd58: 4621 mov r1, r4
- 802bd5a: f7ff ff61 bl 802bc20 <send_data>
- 802bd5e: e036 b.n 802bdce <http_sent_history+0x82>
- }
- else
- {
- memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
- 802bd60: f44f 727a mov.w r2, #1000 ; 0x3e8
- 802bd64: 481b ldr r0, [pc, #108] ; (802bdd4 <http_sent_history+0x88>)
- 802bd66: 4629 mov r1, r5
- 802bd68: f7f5 feca bl 8021b00 <memset>
- if (log_ptr + FILE_BUF_MAX_LEN <= log_size) {
- 802bd6c: 4b1a ldr r3, [pc, #104] ; (802bdd8 <http_sent_history+0x8c>)
- 802bd6e: 6818 ldr r0, [r3, #0]
- 802bd70: 4b1a ldr r3, [pc, #104] ; (802bddc <http_sent_history+0x90>)
- 802bd72: 681a ldr r2, [r3, #0]
- 802bd74: f500 737a add.w r3, r0, #1000 ; 0x3e8
- 802bd78: 4293 cmp r3, r2
- 802bd7a: 4b19 ldr r3, [pc, #100] ; (802bde0 <http_sent_history+0x94>)
- 802bd7c: d803 bhi.n 802bd86 <http_sent_history+0x3a>
- nbytes = History_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN, start);
- 802bd7e: 4915 ldr r1, [pc, #84] ; (802bdd4 <http_sent_history+0x88>)
- 802bd80: f44f 727a mov.w r2, #1000 ; 0x3e8
- 802bd84: e003 b.n 802bd8e <http_sent_history+0x42>
- }
- else if (log_ptr < log_size) {
- 802bd86: 4290 cmp r0, r2
- 802bd88: d205 bcs.n 802bd96 <http_sent_history+0x4a>
- nbytes = History_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
- 802bd8a: 4912 ldr r1, [pc, #72] ; (802bdd4 <http_sent_history+0x88>)
- 802bd8c: 1a12 subs r2, r2, r0
- 802bd8e: 781b ldrb r3, [r3, #0]
- 802bd90: f7fe f826 bl 8029de0 <History_GetData>
- 802bd94: 4605 mov r5, r0
- }
- else {
- nbytes = 0;
- }
- log_ptr += nbytes;
- 802bd96: 4b10 ldr r3, [pc, #64] ; (802bdd8 <http_sent_history+0x8c>)
- 802bd98: 681a ldr r2, [r3, #0]
- 802bd9a: 18aa adds r2, r5, r2
- 802bd9c: 601a str r2, [r3, #0]
- start = false;
- 802bd9e: 4b10 ldr r3, [pc, #64] ; (802bde0 <http_sent_history+0x94>)
- 802bda0: 2200 movs r2, #0
- 802bda2: 701a strb r2, [r3, #0]
- if (nbytes == 0) {
- 802bda4: b945 cbnz r5, 802bdb8 <http_sent_history+0x6c>
- /* File transfer finished. */
- start = true;
- 802bda6: 2201 movs r2, #1
- close_conn(pcb, hs);
- 802bda8: 4630 mov r0, r6
- 802bdaa: 4621 mov r1, r4
- log_ptr += nbytes;
- start = false;
- if (nbytes == 0) {
- /* File transfer finished. */
- start = true;
- 802bdac: 701a strb r2, [r3, #0]
- close_conn(pcb, hs);
- 802bdae: f7ff ff5a bl 802bc66 <close_conn>
- /* Clear file transfer in progress flag */
- fLogTransInprog = false;
- 802bdb2: 4b0c ldr r3, [pc, #48] ; (802bde4 <http_sent_history+0x98>)
- 802bdb4: 701d strb r5, [r3, #0]
- 802bdb6: e00a b.n 802bdce <http_sent_history+0x82>
- return ERR_OK;
- }
- hs->file = logFileBuf;
- 802bdb8: 4b06 ldr r3, [pc, #24] ; (802bdd4 <http_sent_history+0x88>)
- hs->left = nbytes;
- send_data(pcb, hs);
- 802bdba: 4630 mov r0, r6
- 802bdbc: 4621 mov r1, r4
- return ERR_OK;
- }
- hs->file = logFileBuf;
- hs->left = nbytes;
- 802bdbe: e884 0028 stmia.w r4, {r3, r5}
- send_data(pcb, hs);
- 802bdc2: f7ff ff2d bl 802bc20 <send_data>
- tcp_sent(pcb, http_sent_history);
- 802bdc6: 4630 mov r0, r6
- 802bdc8: 4907 ldr r1, [pc, #28] ; (802bde8 <http_sent_history+0x9c>)
- 802bdca: f004 fb69 bl 80304a0 <tcp_sent>
- }
- return ERR_OK;
- }
- 802bdce: 2000 movs r0, #0
- 802bdd0: bd70 pop {r4, r5, r6, pc}
- 802bdd2: bf00 nop
- 802bdd4: 2000cbd9 .word 0x2000cbd9
- 802bdd8: 20000d24 .word 0x20000d24
- 802bddc: 20000d30 .word 0x20000d30
- 802bde0: 20000712 .word 0x20000712
- 802bde4: 20000d2c .word 0x20000d2c
- 802bde8: 0802bd4d .word 0x0802bd4d
- 0802bdec <LogoutTimerCallback>:
- }
- /**
- * @brief >Callback таймера логаута пользователя
- */
- void LogoutTimerCallback(TimerHandle_t pxTimer) {
- 802bdec: b51f push {r0, r1, r2, r3, r4, lr}
- uint8_t user_id = (uint8_t)pvTimerGetTimerID( pxTimer );
- 802bdee: f7ff fcbd bl 802b76c <pvTimerGetTimerID>
- if( sSettings.sRADIUS.Auth_enable )
- 802bdf2: 4b0a ldr r3, [pc, #40] ; (802be1c <LogoutTimerCallback+0x30>)
- 802bdf4: f893 3378 ldrb.w r3, [r3, #888] ; 0x378
- /**
- * @brief >Callback таймера логаута пользователя
- */
- void LogoutTimerCallback(TimerHandle_t pxTimer) {
- uint8_t user_id = (uint8_t)pvTimerGetTimerID( pxTimer );
- 802bdf8: 4604 mov r4, r0
- if( sSettings.sRADIUS.Auth_enable )
- 802bdfa: b173 cbz r3, 802be1a <LogoutTimerCallback+0x2e>
- static void HTTP_ForceUserLogout(uint8_t user_id)
- {
- char cookie[MAX_WEB_COOKIE_LEN];
- /* Flush user cookie by random value */
- sprintf(cookie, "%X", (unsigned int)GetRandomNumber());
- 802bdfc: f7fa f966 bl 80260cc <GetRandomNumber>
- 802be00: 4907 ldr r1, [pc, #28] ; (802be20 <LogoutTimerCallback+0x34>)
- 802be02: 4602 mov r2, r0
- 802be04: 4668 mov r0, sp
- 802be06: f7fb fd05 bl 8027814 <tfp_sprintf>
- /**
- * @brief Установка Cookie пользователя
- */
- static void HTTP_SetUserCookie(char *str, uint8_t user_id)
- {
- strcpy(users[user_id].cookie, str);
- 802be0a: 4b06 ldr r3, [pc, #24] ; (802be24 <LogoutTimerCallback+0x38>)
- 802be0c: b2e0 uxtb r0, r4
- 802be0e: 2214 movs r2, #20
- 802be10: fb00 3002 mla r0, r0, r2, r3
- 802be14: 4669 mov r1, sp
- 802be16: f7f5 ffed bl 8021df4 <strcpy>
- */
- void LogoutTimerCallback(TimerHandle_t pxTimer) {
- uint8_t user_id = (uint8_t)pvTimerGetTimerID( pxTimer );
- if( sSettings.sRADIUS.Auth_enable )
- HTTP_ForceUserLogout(user_id);
- }
- 802be1a: bd1f pop {r0, r1, r2, r3, r4, pc}
- 802be1c: 2000cfc4 .word 0x2000cfc4
- 802be20: 080409f6 .word 0x080409f6
- 802be24: 2000e23c .word 0x2000e23c
- 0802be28 <HTTP_Init>:
- * @brief Initialize the HTTP server (start its thread)
- * @param none
- * @retval None
- */
- void HTTP_Init()
- {
- 802be28: b5f0 push {r4, r5, r6, r7, lr}
- 802be2a: b087 sub sp, #28
- char buf[MAX_WEB_COOKIE_LEN];
- uint8_t user_id;
- //sys_thread_new("HTTP", http_server_netconn_thread, NULL, 3000, 2);
- struct tcp_pcb *pcb;
- /*create new pcb*/
- pcb = tcp_new();
- 802be2c: f004 ff26 bl 8030c7c <tcp_new>
- /* bind HTTP traffic to pcb */
- tcp_bind(pcb, IP_ADDR_ANY, 80);
- 802be30: 2250 movs r2, #80 ; 0x50
- char buf[MAX_WEB_COOKIE_LEN];
- uint8_t user_id;
- //sys_thread_new("HTTP", http_server_netconn_thread, NULL, 3000, 2);
- struct tcp_pcb *pcb;
- /*create new pcb*/
- pcb = tcp_new();
- 802be32: 4604 mov r4, r0
- /* bind HTTP traffic to pcb */
- tcp_bind(pcb, IP_ADDR_ANY, 80);
- 802be34: 4913 ldr r1, [pc, #76] ; (802be84 <HTTP_Init+0x5c>)
- /**
- * @brief Установка Cookie пользователя
- */
- static void HTTP_SetUserCookie(char *str, uint8_t user_id)
- {
- strcpy(users[user_id].cookie, str);
- 802be36: 4f14 ldr r7, [pc, #80] ; (802be88 <HTTP_Init+0x60>)
- sprintf(buf, "%X", (unsigned int)GetRandomNumber());
- HTTP_SetUserCookie(buf, user_id);
- /* Create user logout timers */
- users[user_id].LogoutTimer =
- xTimerCreate("LogoutTmr", WEB_LOGOUT_TIME, pdFALSE, ( void * ) user_id, LogoutTimerCallback);
- 802be38: 4e14 ldr r6, [pc, #80] ; (802be8c <HTTP_Init+0x64>)
- //sys_thread_new("HTTP", http_server_netconn_thread, NULL, 3000, 2);
- struct tcp_pcb *pcb;
- /*create new pcb*/
- pcb = tcp_new();
- /* bind HTTP traffic to pcb */
- tcp_bind(pcb, IP_ADDR_ANY, 80);
- 802be3a: f004 fa5b bl 80302f4 <tcp_bind>
- /* start listening on port 80 */
- pcb = tcp_listen(pcb);
- 802be3e: 4620 mov r0, r4
- 802be40: 21ff movs r1, #255 ; 0xff
- 802be42: f004 fa8f bl 8030364 <tcp_listen_with_backlog>
- /* define callback function for TCP connection setup */
- tcp_accept(pcb, http_accept);
- 802be46: 4912 ldr r1, [pc, #72] ; (802be90 <HTTP_Init+0x68>)
- 802be48: f004 fb2f bl 80304aa <tcp_accept>
- 802be4c: 2400 movs r4, #0
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- /* Flush user cookie by random value */
- sprintf(buf, "%X", (unsigned int)GetRandomNumber());
- 802be4e: f7fa f93d bl 80260cc <GetRandomNumber>
- /**
- * @brief Установка Cookie пользователя
- */
- static void HTTP_SetUserCookie(char *str, uint8_t user_id)
- {
- strcpy(users[user_id].cookie, str);
- 802be52: 2514 movs r5, #20
- pcb = tcp_listen(pcb);
- /* define callback function for TCP connection setup */
- tcp_accept(pcb, http_accept);
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- /* Flush user cookie by random value */
- sprintf(buf, "%X", (unsigned int)GetRandomNumber());
- 802be54: 4602 mov r2, r0
- /**
- * @brief Установка Cookie пользователя
- */
- static void HTTP_SetUserCookie(char *str, uint8_t user_id)
- {
- strcpy(users[user_id].cookie, str);
- 802be56: fb05 7504 mla r5, r5, r4, r7
- pcb = tcp_listen(pcb);
- /* define callback function for TCP connection setup */
- tcp_accept(pcb, http_accept);
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- /* Flush user cookie by random value */
- sprintf(buf, "%X", (unsigned int)GetRandomNumber());
- 802be5a: 490e ldr r1, [pc, #56] ; (802be94 <HTTP_Init+0x6c>)
- 802be5c: a802 add r0, sp, #8
- 802be5e: f7fb fcd9 bl 8027814 <tfp_sprintf>
- /**
- * @brief Установка Cookie пользователя
- */
- static void HTTP_SetUserCookie(char *str, uint8_t user_id)
- {
- strcpy(users[user_id].cookie, str);
- 802be62: a902 add r1, sp, #8
- 802be64: 4628 mov r0, r5
- 802be66: f7f5 ffc5 bl 8021df4 <strcpy>
- sprintf(buf, "%X", (unsigned int)GetRandomNumber());
- HTTP_SetUserCookie(buf, user_id);
- /* Create user logout timers */
- users[user_id].LogoutTimer =
- xTimerCreate("LogoutTmr", WEB_LOGOUT_TIME, pdFALSE, ( void * ) user_id, LogoutTimerCallback);
- 802be6a: 2200 movs r2, #0
- 802be6c: 4623 mov r3, r4
- 802be6e: 9600 str r6, [sp, #0]
- 802be70: 4809 ldr r0, [pc, #36] ; (802be98 <HTTP_Init+0x70>)
- 802be72: 490a ldr r1, [pc, #40] ; (802be9c <HTTP_Init+0x74>)
- 802be74: f7ff fb42 bl 802b4fc <xTimerCreate>
- 802be78: 3401 adds r4, #1
- tcp_bind(pcb, IP_ADDR_ANY, 80);
- /* start listening on port 80 */
- pcb = tcp_listen(pcb);
- /* define callback function for TCP connection setup */
- tcp_accept(pcb, http_accept);
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- 802be7a: 2c02 cmp r4, #2
- /* Flush user cookie by random value */
- sprintf(buf, "%X", (unsigned int)GetRandomNumber());
- HTTP_SetUserCookie(buf, user_id);
- /* Create user logout timers */
- users[user_id].LogoutTimer =
- 802be7c: 6128 str r0, [r5, #16]
- tcp_bind(pcb, IP_ADDR_ANY, 80);
- /* start listening on port 80 */
- pcb = tcp_listen(pcb);
- /* define callback function for TCP connection setup */
- tcp_accept(pcb, http_accept);
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- 802be7e: d1e6 bne.n 802be4e <HTTP_Init+0x26>
- /* Create user logout timers */
- users[user_id].LogoutTimer =
- xTimerCreate("LogoutTmr", WEB_LOGOUT_TIME, pdFALSE, ( void * ) user_id, LogoutTimerCallback);
- }
- }
- 802be80: b007 add sp, #28
- 802be82: bdf0 pop {r4, r5, r6, r7, pc}
- 802be84: 08045008 .word 0x08045008
- 802be88: 2000e23c .word 0x2000e23c
- 802be8c: 0802bded .word 0x0802bded
- 802be90: 0802bbd5 .word 0x0802bbd5
- 802be94: 080409f6 .word 0x080409f6
- 802be98: 080409f9 .word 0x080409f9
- 802be9c: 001b7740 .word 0x001b7740
- 0802bea0 <HTTP_SettingsPage>:
- /**
- * @brief
- * @retval None
- */
- int HTTP_SettingsPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802bea0: b570 push {r4, r5, r6, lr}
- 802bea2: 4602 mov r2, r0
- 802bea4: b088 sub sp, #32
- 802bea6: 460c mov r4, r1
- char tempStr[30];
- strncpy(tempStr, bufIn, 30);
- 802bea8: 4668 mov r0, sp
- 802beaa: 4611 mov r1, r2
- 802beac: 221e movs r2, #30
- /**
- * @brief
- * @retval None
- */
- int HTTP_SettingsPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802beae: 461e mov r6, r3
- char tempStr[30];
- strncpy(tempStr, bufIn, 30);
- 802beb0: f7f6 f8b6 bl 8022020 <strncpy>
-
- /* В запросе нет параметров, нужно формировать JSON ответ */
- if (strpbrk(tempStr,"?") == 0)
- 802beb4: 4668 mov r0, sp
- 802beb6: 490b ldr r1, [pc, #44] ; (802bee4 <HTTP_SettingsPage+0x44>)
- 802beb8: f7f6 f8e4 bl 8022084 <strpbrk>
- 802bebc: 4605 mov r5, r0
- /* В запросе есть параметры, нужно парсить и сохранять настройки */
- else
- {
- //HTTP_SetSettings(bufIn, lenBufIn);
-
- return SEND_REQUIRED_NO;
- 802bebe: 2001 movs r0, #1
- {
- char tempStr[30];
- strncpy(tempStr, bufIn, 30);
-
- /* В запросе нет параметров, нужно формировать JSON ответ */
- if (strpbrk(tempStr,"?") == 0)
- 802bec0: b975 cbnz r5, 802bee0 <HTTP_SettingsPage+0x40>
- {
- memset(bufOut, 0, SEND_BUF_MAX_LEN);
- 802bec2: 4629 mov r1, r5
- 802bec4: f44f 62fa mov.w r2, #2000 ; 0x7d0
- 802bec8: 4620 mov r0, r4
- 802beca: f7f5 fe19 bl 8021b00 <memset>
-
- HTTP_GetSettings(bufOut);
- 802bece: 4620 mov r0, r4
- 802bed0: f001 fbcc bl 802d66c <HTTP_GetSettings>
-
- //printf(bufOut);
-
- *lenBufOut = strlen(bufOut);
- 802bed4: 4620 mov r0, r4
- 802bed6: f7f5 ffeb bl 8021eb0 <strlen>
- 802beda: 8030 strh r0, [r6, #0]
-
- return SEND_REQUIRED_YES;
- 802bedc: 4628 mov r0, r5
- 802bede: e7ff b.n 802bee0 <HTTP_SettingsPage+0x40>
- {
- //HTTP_SetSettings(bufIn, lenBufIn);
-
- return SEND_REQUIRED_NO;
- }
- }
- 802bee0: b008 add sp, #32
- 802bee2: bd70 pop {r4, r5, r6, pc}
- 802bee4: 08040a03 .word 0x08040a03
- 0802bee8 <HTTP_InfoPage>:
- /**
- * @brief
- * @retval None
- */
- int HTTP_InfoPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802bee8: b570 push {r4, r5, r6, lr}
- 802beea: 4602 mov r2, r0
- 802beec: b088 sub sp, #32
- 802beee: 460c mov r4, r1
- char tempStr[30];
- strncpy(tempStr, bufIn, 30);
- 802bef0: 4668 mov r0, sp
- 802bef2: 4611 mov r1, r2
- 802bef4: 221e movs r2, #30
- /**
- * @brief
- * @retval None
- */
- int HTTP_InfoPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802bef6: 461e mov r6, r3
- char tempStr[30];
- strncpy(tempStr, bufIn, 30);
- 802bef8: f7f6 f892 bl 8022020 <strncpy>
-
- /* В запросе нет параметров, нужно формировать JSON ответ */
- if (strpbrk(tempStr,"?") == 0)
- 802befc: 4668 mov r0, sp
- 802befe: 490b ldr r1, [pc, #44] ; (802bf2c <HTTP_InfoPage+0x44>)
- 802bf00: f7f6 f8c0 bl 8022084 <strpbrk>
- 802bf04: 4605 mov r5, r0
- }
- /* В запросе есть параметры, нужно парсить и сохранять настройки */
- else
- {
- //HTTP_SetInfo(bufIn, lenBufIn);
- return SEND_REQUIRED_NO;
- 802bf06: 2001 movs r0, #1
- {
- char tempStr[30];
- strncpy(tempStr, bufIn, 30);
-
- /* В запросе нет параметров, нужно формировать JSON ответ */
- if (strpbrk(tempStr,"?") == 0)
- 802bf08: b975 cbnz r5, 802bf28 <HTTP_InfoPage+0x40>
- {
- memset(bufOut, 0, SEND_BUF_MAX_LEN);
- 802bf0a: 4629 mov r1, r5
- 802bf0c: f44f 62fa mov.w r2, #2000 ; 0x7d0
- 802bf10: 4620 mov r0, r4
- 802bf12: f7f5 fdf5 bl 8021b00 <memset>
-
- HTTP_GetInfo(bufOut);
- 802bf16: 4620 mov r0, r4
- 802bf18: f001 fd9a bl 802da50 <HTTP_GetInfo>
-
- *lenBufOut = strlen(bufOut);
- 802bf1c: 4620 mov r0, r4
- 802bf1e: f7f5 ffc7 bl 8021eb0 <strlen>
- 802bf22: 8030 strh r0, [r6, #0]
-
- return SEND_REQUIRED_YES;
- 802bf24: 4628 mov r0, r5
- 802bf26: e7ff b.n 802bf28 <HTTP_InfoPage+0x40>
- /*
- HTTP_SetSettings(bufIn, lenBufIn);
- return SEND_REQUIRED_NO;
- */
- }
- }
- 802bf28: b008 add sp, #32
- 802bf2a: bd70 pop {r4, r5, r6, pc}
- 802bf2c: 08040a03 .word 0x08040a03
- 0802bf30 <HTTP_UPSTest>:
- /**
- * @brief Запуск/останов теста UPS
- */
- void HTTP_UPSTest(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802bf30: b570 push {r4, r5, r6, lr}
- 802bf32: b08a sub sp, #40 ; 0x28
- 802bf34: 4606 mov r6, r0
- 802bf36: 460c mov r4, r1
- char *valueLen = 0;
- char tempValue[20];
- char tempValue2[20];
- int8_t res = 0;
- memset(tempValue, 0, 20);
- 802bf38: 2214 movs r2, #20
- 802bf3a: 2100 movs r1, #0
- 802bf3c: 4668 mov r0, sp
- /**
- * @brief Запуск/останов теста UPS
- */
- void HTTP_UPSTest(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802bf3e: 461d mov r5, r3
- char *valueLen = 0;
- char tempValue[20];
- char tempValue2[20];
- int8_t res = 0;
- memset(tempValue, 0, 20);
- 802bf40: f7f5 fdde bl 8021b00 <memset>
- memset(tempValue2, 0, 20);
- 802bf44: 2214 movs r2, #20
- 802bf46: 2100 movs r1, #0
- 802bf48: a805 add r0, sp, #20
- 802bf4a: f7f5 fdd9 bl 8021b00 <memset>
- strcpy(bufOut, HTTP_200_OK);
- 802bf4e: 4932 ldr r1, [pc, #200] ; (802c018 <HTTP_UPSTest+0xe8>)
- 802bf50: 4620 mov r0, r4
- 802bf52: f7f5 ff4f bl 8021df4 <strcpy>
- value = strstr(bufIn, "func");
- 802bf56: 4630 mov r0, r6
- 802bf58: 4930 ldr r1, [pc, #192] ; (802c01c <HTTP_UPSTest+0xec>)
- 802bf5a: f7f6 fa29 bl 80223b0 <strstr>
- valueLen = strpbrk(value, ":");
- 802bf5e: 4930 ldr r1, [pc, #192] ; (802c020 <HTTP_UPSTest+0xf0>)
- 802bf60: f7f6 f890 bl 8022084 <strpbrk>
- 802bf64: 4606 mov r6, r0
- strncpy(tempValue, (valueLen+1), (strlen(valueLen)-2));
- 802bf66: f7f5 ffa3 bl 8021eb0 <strlen>
- 802bf6a: 1c71 adds r1, r6, #1
- 802bf6c: 1e82 subs r2, r0, #2
- 802bf6e: 4668 mov r0, sp
- 802bf70: f7f6 f856 bl 8022020 <strncpy>
- if (strcmp(tempValue, "\"stop\"") == 0){
- 802bf74: 4668 mov r0, sp
- 802bf76: 492b ldr r1, [pc, #172] ; (802c024 <HTTP_UPSTest+0xf4>)
- 802bf78: f7f5 fe4e bl 8021c18 <strcmp>
- 802bf7c: b998 cbnz r0, 802bfa6 <HTTP_UPSTest+0x76>
- res = ups_metac_service_pdu(ups_cancel_test);
- 802bf7e: 2008 movs r0, #8
- 802bf80: f7fd f872 bl 8029068 <ups_metac_service_pdu>
- 802bf84: b2c6 uxtb r6, r0
- if(res == 1 || res == 0){
- 802bf86: 2e01 cmp r6, #1
- 802bf88: d807 bhi.n 802bf9a <HTTP_UPSTest+0x6a>
- strcat(bufOut, "Тест остановлен!");
- 802bf8a: 4927 ldr r1, [pc, #156] ; (802c028 <HTTP_UPSTest+0xf8>)
- 802bf8c: 4620 mov r0, r4
- 802bf8e: f7f5 fe1d bl 8021bcc <strcat>
- log_event_data(LOG_TEST_UPS, "Администратор (Остановлен)");
- 802bf92: 2006 movs r0, #6
- 802bf94: 4925 ldr r1, [pc, #148] ; (802c02c <HTTP_UPSTest+0xfc>)
- 802bf96: f7fd fd61 bl 8029a5c <log_event_data>
- }
- if(res == -1)
- 802bf9a: b276 sxtb r6, r6
- 802bf9c: 1c72 adds r2, r6, #1
- 802bf9e: d135 bne.n 802c00c <HTTP_UPSTest+0xdc>
- strcat(bufOut, "Тест не удалось остановить!");
- 802bfa0: 4620 mov r0, r4
- 802bfa2: 4923 ldr r1, [pc, #140] ; (802c030 <HTTP_UPSTest+0x100>)
- 802bfa4: e030 b.n 802c008 <HTTP_UPSTest+0xd8>
- *lenBufOut = strlen(bufOut);
- }
- else if (strcmp(tempValue, "\"discharge\"") == 0){
- 802bfa6: 4668 mov r0, sp
- 802bfa8: 4922 ldr r1, [pc, #136] ; (802c034 <HTTP_UPSTest+0x104>)
- 802bfaa: f7f5 fe35 bl 8021c18 <strcmp>
- 802bfae: b908 cbnz r0, 802bfb4 <HTTP_UPSTest+0x84>
- res = ups_metac_service_pdu(ups_test_low_bat);
- 802bfb0: 2002 movs r0, #2
- 802bfb2: e017 b.n 802bfe4 <HTTP_UPSTest+0xb4>
- }
- if(res == -1)
- strcat(bufOut, "Тест не удалось запустить!");
- *lenBufOut = strlen(bufOut);
- }
- else if (strncmp(tempValue, "\"time\"", 6) == 0){
- 802bfb4: 4668 mov r0, sp
- 802bfb6: 4920 ldr r1, [pc, #128] ; (802c038 <HTTP_UPSTest+0x108>)
- 802bfb8: 2206 movs r2, #6
- 802bfba: f7f5 ffdb bl 8021f74 <strncmp>
- 802bfbe: bb48 cbnz r0, 802c014 <HTTP_UPSTest+0xe4>
- valueLen = strpbrk(tempValue, ":");
- 802bfc0: 4917 ldr r1, [pc, #92] ; (802c020 <HTTP_UPSTest+0xf0>)
- 802bfc2: 4668 mov r0, sp
- 802bfc4: f7f6 f85e bl 8022084 <strpbrk>
- 802bfc8: 4606 mov r6, r0
- strncpy(tempValue2, (valueLen+2), (strlen(valueLen)-2));
- 802bfca: f7f5 ff71 bl 8021eb0 <strlen>
- 802bfce: 1cb1 adds r1, r6, #2
- 802bfd0: 1e82 subs r2, r0, #2
- 802bfd2: a805 add r0, sp, #20
- 802bfd4: f7f6 f824 bl 8022020 <strncpy>
- TimeParam = atoi(tempValue2);
- 802bfd8: a805 add r0, sp, #20
- 802bfda: f7f5 fc71 bl 80218c0 <atoi>
- 802bfde: 4b17 ldr r3, [pc, #92] ; (802c03c <HTTP_UPSTest+0x10c>)
- 802bfe0: 8018 strh r0, [r3, #0]
- res = ups_metac_service_pdu(ups_test_time);
- 802bfe2: 2003 movs r0, #3
- 802bfe4: f7fd f840 bl 8029068 <ups_metac_service_pdu>
- 802bfe8: b2c6 uxtb r6, r0
- if(res == 1 || res == 0){
- 802bfea: 2e01 cmp r6, #1
- 802bfec: d807 bhi.n 802bffe <HTTP_UPSTest+0xce>
- strcat(bufOut, "Тест запущен!");
- 802bfee: 4914 ldr r1, [pc, #80] ; (802c040 <HTTP_UPSTest+0x110>)
- 802bff0: 4620 mov r0, r4
- 802bff2: f7f5 fdeb bl 8021bcc <strcat>
- log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
- 802bff6: 2006 movs r0, #6
- 802bff8: 4912 ldr r1, [pc, #72] ; (802c044 <HTTP_UPSTest+0x114>)
- 802bffa: f7fd fd2f bl 8029a5c <log_event_data>
- }
- if(res == -1)
- 802bffe: b276 sxtb r6, r6
- 802c000: 1c73 adds r3, r6, #1
- 802c002: d103 bne.n 802c00c <HTTP_UPSTest+0xdc>
- strcat(bufOut, "Тест не удалось запустить!");
- 802c004: 4910 ldr r1, [pc, #64] ; (802c048 <HTTP_UPSTest+0x118>)
- 802c006: 4620 mov r0, r4
- 802c008: f7f5 fde0 bl 8021bcc <strcat>
- *lenBufOut = strlen(bufOut);
- 802c00c: 4620 mov r0, r4
- 802c00e: f7f5 ff4f bl 8021eb0 <strlen>
- 802c012: 8028 strh r0, [r5, #0]
- }
- }
- 802c014: b00a add sp, #40 ; 0x28
- 802c016: bd70 pop {r4, r5, r6, pc}
- 802c018: 08044669 .word 0x08044669
- 802c01c: 08040a05 .word 0x08040a05
- 802c020: 08044e49 .word 0x08044e49
- 802c024: 08040a0a .word 0x08040a0a
- 802c028: 08040a11 .word 0x08040a11
- 802c02c: 08040a30 .word 0x08040a30
- 802c030: 08040a62 .word 0x08040a62
- 802c034: 08040a95 .word 0x08040a95
- 802c038: 08040b17 .word 0x08040b17
- 802c03c: 20000b50 .word 0x20000b50
- 802c040: 08040aa1 .word 0x08040aa1
- 802c044: 08040aba .word 0x08040aba
- 802c048: 08040ae6 .word 0x08040ae6
- 0802c04c <HTTP_UPSshutdown>:
- /**
- * @brief Выклюение UPS
- */
- void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c04c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 802c050: b09a sub sp, #104 ; 0x68
- char *valueLenEnd = 0;
- char tempValue[50];
- char tempValue2[50];
- int8_t res = 0;
- memset(tempValue, 0, 50);
- 802c052: 2232 movs r2, #50 ; 0x32
- /**
- * @brief Выклюение UPS
- */
- void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c054: 4605 mov r5, r0
- 802c056: 460c mov r4, r1
- char *valueLenEnd = 0;
- char tempValue[50];
- char tempValue2[50];
- int8_t res = 0;
- memset(tempValue, 0, 50);
- 802c058: 4668 mov r0, sp
- 802c05a: 2100 movs r1, #0
- /**
- * @brief Выклюение UPS
- */
- void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c05c: 461e mov r6, r3
- char *valueLenEnd = 0;
- char tempValue[50];
- char tempValue2[50];
- int8_t res = 0;
- memset(tempValue, 0, 50);
- 802c05e: f7f5 fd4f bl 8021b00 <memset>
- strcpy(bufOut, HTTP_200_OK);
- 802c062: 4940 ldr r1, [pc, #256] ; (802c164 <HTTP_UPSshutdown+0x118>)
- 802c064: 4620 mov r0, r4
- 802c066: f7f5 fec5 bl 8021df4 <strcpy>
- value = strstr(bufIn, "func");
- 802c06a: 4628 mov r0, r5
- 802c06c: 493e ldr r1, [pc, #248] ; (802c168 <HTTP_UPSshutdown+0x11c>)
- 802c06e: f7f6 f99f bl 80223b0 <strstr>
- valueLen = strpbrk(value, ":");
- 802c072: 493e ldr r1, [pc, #248] ; (802c16c <HTTP_UPSshutdown+0x120>)
- 802c074: f7f6 f806 bl 8022084 <strpbrk>
- 802c078: 4605 mov r5, r0
- strncpy(tempValue, (valueLen+1), (strlen(valueLen)-2));
- 802c07a: f7f5 ff19 bl 8021eb0 <strlen>
- 802c07e: 1c69 adds r1, r5, #1
- 802c080: 1e82 subs r2, r0, #2
- 802c082: 4668 mov r0, sp
- 802c084: f7f5 ffcc bl 8022020 <strncpy>
- if (strcmp(tempValue, "\"cancel\"") == 0){
- 802c088: 4668 mov r0, sp
- 802c08a: 4939 ldr r1, [pc, #228] ; (802c170 <HTTP_UPSshutdown+0x124>)
- 802c08c: f7f5 fdc4 bl 8021c18 <strcmp>
- 802c090: b978 cbnz r0, 802c0b2 <HTTP_UPSshutdown+0x66>
- res = ups_metac_service_pdu(ups_cancel_shut_down);
- 802c092: 2007 movs r0, #7
- 802c094: f7fc ffe8 bl 8029068 <ups_metac_service_pdu>
- 802c098: b2c5 uxtb r5, r0
- if(res == 1 || res == 0)
- 802c09a: 2d01 cmp r5, #1
- 802c09c: d803 bhi.n 802c0a6 <HTTP_UPSshutdown+0x5a>
- strcat(bufOut, "Выключение ИБП отменено!");
- 802c09e: 4620 mov r0, r4
- 802c0a0: 4934 ldr r1, [pc, #208] ; (802c174 <HTTP_UPSshutdown+0x128>)
- 802c0a2: f7f5 fd93 bl 8021bcc <strcat>
- if(res == -1)
- 802c0a6: b26d sxtb r5, r5
- 802c0a8: 1c68 adds r0, r5, #1
- 802c0aa: d154 bne.n 802c156 <HTTP_UPSshutdown+0x10a>
- strcat(bufOut, "Выключение ИБП не удалось отменить!");
- 802c0ac: 4620 mov r0, r4
- 802c0ae: 4932 ldr r1, [pc, #200] ; (802c178 <HTTP_UPSshutdown+0x12c>)
- 802c0b0: e04f b.n 802c152 <HTTP_UPSshutdown+0x106>
- *lenBufOut = strlen(bufOut);
- }
- else if (strncmp(tempValue, "\"off\"", 5) == 0){
- 802c0b2: 4668 mov r0, sp
- 802c0b4: 4931 ldr r1, [pc, #196] ; (802c17c <HTTP_UPSshutdown+0x130>)
- 802c0b6: 2205 movs r2, #5
- 802c0b8: f7f5 ff5c bl 8021f74 <strncmp>
- 802c0bc: 4605 mov r5, r0
- 802c0be: 2800 cmp r0, #0
- 802c0c0: d14d bne.n 802c15e <HTTP_UPSshutdown+0x112>
- value = strstr(tempValue, "after");
- 802c0c2: 492f ldr r1, [pc, #188] ; (802c180 <HTTP_UPSshutdown+0x134>)
- 802c0c4: 4668 mov r0, sp
- 802c0c6: f7f6 f973 bl 80223b0 <strstr>
- valueLen = strpbrk(value, ":");
- 802c0ca: 4928 ldr r1, [pc, #160] ; (802c16c <HTTP_UPSshutdown+0x120>)
- if(res == -1)
- strcat(bufOut, "Выключение ИБП не удалось отменить!");
- *lenBufOut = strlen(bufOut);
- }
- else if (strncmp(tempValue, "\"off\"", 5) == 0){
- value = strstr(tempValue, "after");
- 802c0cc: 4680 mov r8, r0
- valueLen = strpbrk(value, ":");
- 802c0ce: f7f5 ffd9 bl 8022084 <strpbrk>
- valueLenEnd = strpbrk(value, ",");
- 802c0d2: 492c ldr r1, [pc, #176] ; (802c184 <HTTP_UPSshutdown+0x138>)
- strcat(bufOut, "Выключение ИБП не удалось отменить!");
- *lenBufOut = strlen(bufOut);
- }
- else if (strncmp(tempValue, "\"off\"", 5) == 0){
- value = strstr(tempValue, "after");
- valueLen = strpbrk(value, ":");
- 802c0d4: 4607 mov r7, r0
- valueLenEnd = strpbrk(value, ",");
- 802c0d6: 4640 mov r0, r8
- 802c0d8: f7f5 ffd4 bl 8022084 <strpbrk>
- memset(tempValue2, 0, 50);
- 802c0dc: 4629 mov r1, r5
- 802c0de: 2232 movs r2, #50 ; 0x32
- *lenBufOut = strlen(bufOut);
- }
- else if (strncmp(tempValue, "\"off\"", 5) == 0){
- value = strstr(tempValue, "after");
- valueLen = strpbrk(value, ":");
- valueLenEnd = strpbrk(value, ",");
- 802c0e0: 4680 mov r8, r0
- memset(tempValue2, 0, 50);
- 802c0e2: a80d add r0, sp, #52 ; 0x34
- 802c0e4: f7f5 fd0c bl 8021b00 <memset>
- strncpy(tempValue2, (valueLen+2), (valueLenEnd - valueLen - 2));
- 802c0e8: ebc7 0208 rsb r2, r7, r8
- 802c0ec: 3a02 subs r2, #2
- 802c0ee: 1cb9 adds r1, r7, #2
- 802c0f0: a80d add r0, sp, #52 ; 0x34
- 802c0f2: f7f5 ff95 bl 8022020 <strncpy>
- TimeParam = atoi(tempValue2);
- 802c0f6: a80d add r0, sp, #52 ; 0x34
- 802c0f8: f7f5 fbe2 bl 80218c0 <atoi>
- 802c0fc: 4b22 ldr r3, [pc, #136] ; (802c188 <HTTP_UPSshutdown+0x13c>)
- value = strstr(tempValue, "to");
- 802c0fe: 4923 ldr r1, [pc, #140] ; (802c18c <HTTP_UPSshutdown+0x140>)
- value = strstr(tempValue, "after");
- valueLen = strpbrk(value, ":");
- valueLenEnd = strpbrk(value, ",");
- memset(tempValue2, 0, 50);
- strncpy(tempValue2, (valueLen+2), (valueLenEnd - valueLen - 2));
- TimeParam = atoi(tempValue2);
- 802c100: 8018 strh r0, [r3, #0]
- value = strstr(tempValue, "to");
- 802c102: 4668 mov r0, sp
- 802c104: f7f6 f954 bl 80223b0 <strstr>
- valueLen = strpbrk(value, ":");
- 802c108: 4918 ldr r1, [pc, #96] ; (802c16c <HTTP_UPSshutdown+0x120>)
- 802c10a: f7f5 ffbb bl 8022084 <strpbrk>
- memset(tempValue2, 0, 50);
- 802c10e: 4629 mov r1, r5
- 802c110: 2232 movs r2, #50 ; 0x32
- valueLenEnd = strpbrk(value, ",");
- memset(tempValue2, 0, 50);
- strncpy(tempValue2, (valueLen+2), (valueLenEnd - valueLen - 2));
- TimeParam = atoi(tempValue2);
- value = strstr(tempValue, "to");
- valueLen = strpbrk(value, ":");
- 802c112: 4607 mov r7, r0
- memset(tempValue2, 0, 50);
- 802c114: a80d add r0, sp, #52 ; 0x34
- 802c116: f7f5 fcf3 bl 8021b00 <memset>
- strncpy(tempValue2, (valueLen+2), (strlen(valueLen) - 2));
- 802c11a: 4638 mov r0, r7
- 802c11c: f7f5 fec8 bl 8021eb0 <strlen>
- 802c120: 1cb9 adds r1, r7, #2
- 802c122: 1e82 subs r2, r0, #2
- 802c124: a80d add r0, sp, #52 ; 0x34
- 802c126: f7f5 ff7b bl 8022020 <strncpy>
- TimeParam2 = atoi(tempValue2);
- 802c12a: a80d add r0, sp, #52 ; 0x34
- 802c12c: f7f5 fbc8 bl 80218c0 <atoi>
- 802c130: 4b17 ldr r3, [pc, #92] ; (802c190 <HTTP_UPSshutdown+0x144>)
- 802c132: 8018 strh r0, [r3, #0]
- res = ups_metac_service_pdu(ups_shutdown_restore);
- 802c134: 2006 movs r0, #6
- 802c136: f7fc ff97 bl 8029068 <ups_metac_service_pdu>
- 802c13a: b2c5 uxtb r5, r0
- if(res == 1 || res == 0)
- 802c13c: 2d01 cmp r5, #1
- 802c13e: d803 bhi.n 802c148 <HTTP_UPSshutdown+0xfc>
- strcat(bufOut, "Перезагрузка ИБП!");
- 802c140: 4620 mov r0, r4
- 802c142: 4914 ldr r1, [pc, #80] ; (802c194 <HTTP_UPSshutdown+0x148>)
- 802c144: f7f5 fd42 bl 8021bcc <strcat>
- if(res == -1)
- 802c148: b26d sxtb r5, r5
- 802c14a: 1c69 adds r1, r5, #1
- 802c14c: d103 bne.n 802c156 <HTTP_UPSshutdown+0x10a>
- strcat(bufOut, "Отмена перезагрузки ИБП!");
- 802c14e: 4912 ldr r1, [pc, #72] ; (802c198 <HTTP_UPSshutdown+0x14c>)
- 802c150: 4620 mov r0, r4
- 802c152: f7f5 fd3b bl 8021bcc <strcat>
- *lenBufOut = strlen(bufOut);
- 802c156: 4620 mov r0, r4
- 802c158: f7f5 feaa bl 8021eb0 <strlen>
- 802c15c: 8030 strh r0, [r6, #0]
- }
- }
- 802c15e: b01a add sp, #104 ; 0x68
- 802c160: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 802c164: 08044669 .word 0x08044669
- 802c168: 08040a05 .word 0x08040a05
- 802c16c: 08044e49 .word 0x08044e49
- 802c170: 08040b1e .word 0x08040b1e
- 802c174: 08040b27 .word 0x08040b27
- 802c178: 08040b55 .word 0x08040b55
- 802c17c: 08040b97 .word 0x08040b97
- 802c180: 08040b9d .word 0x08040b9d
- 802c184: 08039b85 .word 0x08039b85
- 802c188: 20000b50 .word 0x20000b50
- 802c18c: 08040ba3 .word 0x08040ba3
- 802c190: 20000b1a .word 0x20000b1a
- 802c194: 08040ba6 .word 0x08040ba6
- 802c198: 08040bc7 .word 0x08040bc7
- 0802c19c <HTTP_ConfirmBootPwd>:
- /**
- * @brief Проверка пароля для перехода в режим bootloader
- * @retval None
- */
- void HTTP_ConfirmBootPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c19c: b500 push {lr}
- 802c19e: b093 sub sp, #76 ; 0x4c
- 802c1a0: 4601 mov r1, r0
- char tempStr[50];
- strncpy(tempStr, bufIn, 50);
- 802c1a2: 2232 movs r2, #50 ; 0x32
- 802c1a4: a805 add r0, sp, #20
- 802c1a6: f7f5 ff3b bl 8022020 <strncpy>
- char value[20];
- uint8_t valueLen;
-
- memset(value, 0, 20);
- 802c1aa: 4668 mov r0, sp
- 802c1ac: 2100 movs r1, #0
- 802c1ae: 2214 movs r2, #20
- 802c1b0: f7f5 fca6 bl 8021b00 <memset>
- //if (strcmp(BOOTLOADER_PASWORD, value) == 0)
- {
- // *bufOut = '1';
- /* Запускаем задачу отложенной перезагрузки. Контроллер должен успеть
- отправить ответ серверу о статусе пароля */
- HTTP_StartResetTask(true);
- 802c1b4: 2001 movs r0, #1
- 802c1b6: f001 fe37 bl 802de28 <HTTP_StartResetTask>
- /* else
- *bufOut = '0';*/
-
- //*lenBufOut = 1;
- }
- }
- 802c1ba: b013 add sp, #76 ; 0x4c
- 802c1bc: bd00 pop {pc}
- 802c1be: 0000 movs r0, r0
- 0802c1c0 <HTTP_LOGIN>:
- /* Wrong login or pass, return */
- return SEND_REQUIRED_NO;
- }
- void HTTP_LOGIN(char *bufOut, uint16_t *lenBufOut)
- {
- 802c1c0: b530 push {r4, r5, lr}
- 802c1c2: b093 sub sp, #76 ; 0x4c
- 802c1c4: 4604 mov r4, r0
- 802c1c6: 460d mov r5, r1
- char tempStr[50];
- uint8_t valueLen;
- char WebLogin[MAX_WEB_LOGIN_LEN];
- GetUserLogin(ADMIN, WebLogin, &valueLen);
- 802c1c8: 2000 movs r0, #0
- 802c1ca: a902 add r1, sp, #8
- 802c1cc: f10d 0207 add.w r2, sp, #7
- 802c1d0: f7fb fe0a bl 8027de8 <GetUserLogin>
- memset(tempStr, 0, 50);
- 802c1d4: 2100 movs r1, #0
- 802c1d6: 2232 movs r2, #50 ; 0x32
- 802c1d8: a805 add r0, sp, #20
- 802c1da: f7f5 fc91 bl 8021b00 <memset>
- /* TODO replace global flag with user-pass-cookie */
- Authenticated = true;
- 802c1de: 4b1b ldr r3, [pc, #108] ; (802c24c <HTTP_LOGIN+0x8c>)
- 802c1e0: 2201 movs r2, #1
- 802c1e2: 701a strb r2, [r3, #0]
- /* Generate cookie */
- sprintf(tempStr, "%X", (unsigned int)GetRandomNumber());
- 802c1e4: f7f9 ff72 bl 80260cc <GetRandomNumber>
- 802c1e8: 4919 ldr r1, [pc, #100] ; (802c250 <HTTP_LOGIN+0x90>)
- 802c1ea: 4602 mov r2, r0
- 802c1ec: a805 add r0, sp, #20
- 802c1ee: f7fb fb11 bl 8027814 <tfp_sprintf>
- /**
- * @brief Установка Cookie пользователя
- */
- static void HTTP_SetUserCookie(char *str, uint8_t user_id)
- {
- strcpy(users[user_id].cookie, str);
- 802c1f2: a905 add r1, sp, #20
- 802c1f4: 4817 ldr r0, [pc, #92] ; (802c254 <HTTP_LOGIN+0x94>)
- 802c1f6: f7f5 fdfd bl 8021df4 <strcpy>
- sprintf(tempStr, "%X", (unsigned int)GetRandomNumber());
- /* Set users cookie */
- HTTP_SetUserCookie(tempStr, ADMIN);
- HTTP_UpdateUserLoginTime(ADMIN);
- 802c1fa: 2000 movs r0, #0
- 802c1fc: f7ff fcc2 bl 802bb84 <HTTP_UpdateUserLoginTime>
- /* Send login and cookie back */
- strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\nSet-Cookie: uname=");
- 802c200: 4915 ldr r1, [pc, #84] ; (802c258 <HTTP_LOGIN+0x98>)
- 802c202: 4620 mov r0, r4
- 802c204: f7f5 fdf6 bl 8021df4 <strcpy>
- strcat(bufOut, WebLogin);
- 802c208: a902 add r1, sp, #8
- 802c20a: 4620 mov r0, r4
- 802c20c: f7f5 fcde bl 8021bcc <strcat>
- strcat(bufOut, "\r\nSet-Cookie: id=");
- 802c210: 4912 ldr r1, [pc, #72] ; (802c25c <HTTP_LOGIN+0x9c>)
- 802c212: 4620 mov r0, r4
- 802c214: f7f5 fcda bl 8021bcc <strcat>
- strcat(bufOut, tempStr);
- 802c218: a905 add r1, sp, #20
- 802c21a: 4620 mov r0, r4
- 802c21c: f7f5 fcd6 bl 8021bcc <strcat>
- strcat(bufOut, "\r\nSet-Cookie: role=0");
- 802c220: 490f ldr r1, [pc, #60] ; (802c260 <HTTP_LOGIN+0xa0>)
- 802c222: 4620 mov r0, r4
- 802c224: f7f5 fcd2 bl 8021bcc <strcat>
- strcat(bufOut, "\r\nSet-Cookie: auth=0");
- 802c228: 490e ldr r1, [pc, #56] ; (802c264 <HTTP_LOGIN+0xa4>)
- 802c22a: 4620 mov r0, r4
- 802c22c: f7f5 fcce bl 8021bcc <strcat>
- strcat(bufOut, "\r\n\r\n");
- 802c230: 490d ldr r1, [pc, #52] ; (802c268 <HTTP_LOGIN+0xa8>)
- 802c232: 4620 mov r0, r4
- 802c234: f7f5 fcca bl 8021bcc <strcat>
- strcat(bufOut,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/index.html\"/></head></html>\r\n\r\n");
- 802c238: 490c ldr r1, [pc, #48] ; (802c26c <HTTP_LOGIN+0xac>)
- 802c23a: 4620 mov r0, r4
- 802c23c: f7f5 fcc6 bl 8021bcc <strcat>
- *lenBufOut = strlen(bufOut);
- 802c240: 4620 mov r0, r4
- 802c242: f7f5 fe35 bl 8021eb0 <strlen>
- 802c246: 8028 strh r0, [r5, #0]
- }
- 802c248: b013 add sp, #76 ; 0x4c
- 802c24a: bd30 pop {r4, r5, pc}
- 802c24c: 20000d23 .word 0x20000d23
- 802c250: 080409f6 .word 0x080409f6
- 802c254: 2000e23c .word 0x2000e23c
- 802c258: 08040bf5 .word 0x08040bf5
- 802c25c: 08040c31 .word 0x08040c31
- 802c260: 08040c43 .word 0x08040c43
- 802c264: 08040c58 .word 0x08040c58
- 802c268: 08041130 .word 0x08041130
- 802c26c: 08040c6d .word 0x08040c6d
- 0802c270 <GetParamValue>:
- /**
- * @brief
- * @retval None
- */
- uint8_t GetParamValue(char *inStr, char *paramName, char *paramValue, uint8_t *paramLen)
- {
- 802c270: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 802c274: 4690 mov r8, r2
- 802c276: 461f mov r7, r3
- char *beginValue = 0;
- char *endValue = 0;
- int len = 0;
- char *strPtr = 0;
-
- strPtr = strstr(inStr, paramName);
- 802c278: f7f6 f89a bl 80223b0 <strstr>
-
- if (strPtr != 0)
- 802c27c: 4605 mov r5, r0
- 802c27e: b1e0 cbz r0, 802c2ba <GetParamValue+0x4a>
- {
- beginValue = strpbrk(strPtr,"=");
- 802c280: 490f ldr r1, [pc, #60] ; (802c2c0 <GetParamValue+0x50>)
- 802c282: f7f5 feff bl 8022084 <strpbrk>
- endValue = strpbrk(strPtr,"&");
- 802c286: 490f ldr r1, [pc, #60] ; (802c2c4 <GetParamValue+0x54>)
-
- strPtr = strstr(inStr, paramName);
-
- if (strPtr != 0)
- {
- beginValue = strpbrk(strPtr,"=");
- 802c288: 4606 mov r6, r0
- endValue = strpbrk(strPtr,"&");
- 802c28a: 4628 mov r0, r5
- 802c28c: f7f5 fefa bl 8022084 <strpbrk>
- if (endValue == 0)
- 802c290: 4604 mov r4, r0
- 802c292: b920 cbnz r0, 802c29e <GetParamValue+0x2e>
- endValue = strpbrk(strPtr," ");
- 802c294: 4628 mov r0, r5
- 802c296: 490c ldr r1, [pc, #48] ; (802c2c8 <GetParamValue+0x58>)
- 802c298: f7f5 fef4 bl 8022084 <strpbrk>
- 802c29c: 4604 mov r4, r0
- len = endValue - beginValue - 1;
- 802c29e: 1ba5 subs r5, r4, r6
- 802c2a0: 3d01 subs r5, #1
- strncpy(paramValue, beginValue + 1, len);
- 802c2a2: 4640 mov r0, r8
- 802c2a4: 1c71 adds r1, r6, #1
- 802c2a6: 462a mov r2, r5
- 802c2a8: f7f5 feba bl 8022020 <strncpy>
- *endValue = '0';
- 802c2ac: 2330 movs r3, #48 ; 0x30
- 802c2ae: 7023 strb r3, [r4, #0]
- *beginValue = '0';
- *paramLen = len;
- return 1;
- 802c2b0: 2001 movs r0, #1
- if (endValue == 0)
- endValue = strpbrk(strPtr," ");
- len = endValue - beginValue - 1;
- strncpy(paramValue, beginValue + 1, len);
- *endValue = '0';
- *beginValue = '0';
- 802c2b2: 7033 strb r3, [r6, #0]
- *paramLen = len;
- 802c2b4: 703d strb r5, [r7, #0]
- return 1;
- 802c2b6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- }
- else
- {
- *paramLen = 0;
- 802c2ba: 7038 strb r0, [r7, #0]
- return 0;
- }
- }
- 802c2bc: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 802c2c0: 08040de3 .word 0x08040de3
- 802c2c4: 08040cd9 .word 0x08040cd9
- 802c2c8: 08039ade .word 0x08039ade
- 0802c2cc <HTTP_ConfirmWebPwd>:
- /**
- * @brief Проверка пароля для входа в Web
- * @retval None
- */
- int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c2cc: b5f0 push {r4, r5, r6, r7, lr}
- 802c2ce: b0a9 sub sp, #164 ; 0xa4
- 802c2d0: 4604 mov r4, r0
- char *strPtr = 0;
- char WebPassword[MAX_WEB_PASSWD_LEN];
- char WebLogin[MAX_WEB_LOGIN_LEN];
- char buf[40];
- memset(login, 0, 20);
- 802c2d2: 2214 movs r2, #20
- /**
- * @brief Проверка пароля для входа в Web
- * @retval None
- */
- int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c2d4: 460d mov r5, r1
- char *strPtr = 0;
- char WebPassword[MAX_WEB_PASSWD_LEN];
- char WebLogin[MAX_WEB_LOGIN_LEN];
- char buf[40];
- memset(login, 0, 20);
- 802c2d6: a807 add r0, sp, #28
- 802c2d8: 2100 movs r1, #0
- /**
- * @brief Проверка пароля для входа в Web
- * @retval None
- */
- int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c2da: 461f mov r7, r3
- char *strPtr = 0;
- char WebPassword[MAX_WEB_PASSWD_LEN];
- char WebLogin[MAX_WEB_LOGIN_LEN];
- char buf[40];
- memset(login, 0, 20);
- 802c2dc: f7f5 fc10 bl 8021b00 <memset>
- memset(password, 0, 20);
- 802c2e0: 2100 movs r1, #0
- 802c2e2: 2214 movs r2, #20
- 802c2e4: a80c add r0, sp, #48 ; 0x30
- 802c2e6: f7f5 fc0b bl 8021b00 <memset>
- memset(tempStr, 0, 50);
- 802c2ea: 2100 movs r1, #0
- 802c2ec: 2232 movs r2, #50 ; 0x32
- 802c2ee: a81b add r0, sp, #108 ; 0x6c
- 802c2f0: f7f5 fc06 bl 8021b00 <memset>
- /* Get first 50 bytes of string */
- strncpy(tempStr, bufIn, 49);
- 802c2f4: 2231 movs r2, #49 ; 0x31
- 802c2f6: 4621 mov r1, r4
- 802c2f8: a81b add r0, sp, #108 ; 0x6c
- 802c2fa: f7f5 fe91 bl 8022020 <strncpy>
- /* Add " " to the string in order GetParamValue() can be able to parse the param */
- strcat(tempStr, " ");
- if (GetParamValue(tempStr, "login=", login, &valueLen) &&
- 802c2fe: f10d 0603 add.w r6, sp, #3
- /* Get first 50 bytes of string */
- strncpy(tempStr, bufIn, 49);
- /* Add " " to the string in order GetParamValue() can be able to parse the param */
- strcat(tempStr, " ");
- 802c302: 4941 ldr r1, [pc, #260] ; (802c408 <HTTP_ConfirmWebPwd+0x13c>)
- 802c304: a81b add r0, sp, #108 ; 0x6c
- 802c306: f7f5 fc61 bl 8021bcc <strcat>
- if (GetParamValue(tempStr, "login=", login, &valueLen) &&
- 802c30a: a81b add r0, sp, #108 ; 0x6c
- 802c30c: 493f ldr r1, [pc, #252] ; (802c40c <HTTP_ConfirmWebPwd+0x140>)
- 802c30e: aa07 add r2, sp, #28
- 802c310: 4633 mov r3, r6
- 802c312: f7ff ffad bl 802c270 <GetParamValue>
- 802c316: b920 cbnz r0, 802c322 <HTTP_ConfirmWebPwd+0x56>
- }
- }
- /* No valid login and pass found */
- /* TODO replace global flag with user-pass-cookie*/
- Authenticated = false;
- 802c318: 4b3d ldr r3, [pc, #244] ; (802c410 <HTTP_ConfirmWebPwd+0x144>)
- 802c31a: 2200 movs r2, #0
- 802c31c: 701a strb r2, [r3, #0]
- /* Wrong login or pass, return */
- return SEND_REQUIRED_NO;
- 802c31e: 2001 movs r0, #1
- 802c320: e070 b.n 802c404 <HTTP_ConfirmWebPwd+0x138>
- /* Add " " to the string in order GetParamValue() can be able to parse the param */
- strcat(tempStr, " ");
- if (GetParamValue(tempStr, "login=", login, &valueLen) &&
- GetParamValue(tempStr, "password=", password, &valueLen))
- 802c322: a81b add r0, sp, #108 ; 0x6c
- 802c324: 493b ldr r1, [pc, #236] ; (802c414 <HTTP_ConfirmWebPwd+0x148>)
- 802c326: aa0c add r2, sp, #48 ; 0x30
- 802c328: 4633 mov r3, r6
- 802c32a: f7ff ffa1 bl 802c270 <GetParamValue>
- strncpy(tempStr, bufIn, 49);
- /* Add " " to the string in order GetParamValue() can be able to parse the param */
- strcat(tempStr, " ");
- if (GetParamValue(tempStr, "login=", login, &valueLen) &&
- 802c32e: 2800 cmp r0, #0
- 802c330: d0f2 beq.n 802c318 <HTTP_ConfirmWebPwd+0x4c>
- 802c332: 2400 movs r4, #0
- GetParamValue(tempStr, "password=", password, &valueLen))
- {
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- GetUserLogin(user_id, WebLogin, &valueLen);
- 802c334: 4620 mov r0, r4
- 802c336: a904 add r1, sp, #16
- 802c338: 4632 mov r2, r6
- 802c33a: f7fb fd55 bl 8027de8 <GetUserLogin>
- GetUserPassword(user_id, WebPassword, &valueLen);
- 802c33e: 4620 mov r0, r4
- 802c340: a901 add r1, sp, #4
- 802c342: 4632 mov r2, r6
- 802c344: f7fb fd66 bl 8027e14 <GetUserPassword>
- /* Check login and password */
- if ((strncmp(WebLogin, login, MAX_WEB_LOGIN_LEN) == 0) &&
- 802c348: a804 add r0, sp, #16
- 802c34a: a907 add r1, sp, #28
- 802c34c: 220b movs r2, #11
- 802c34e: f7f5 fe11 bl 8021f74 <strncmp>
- 802c352: 2800 cmp r0, #0
- 802c354: d151 bne.n 802c3fa <HTTP_ConfirmWebPwd+0x12e>
- (strncmp(WebPassword, password, MAX_WEB_PASSWD_LEN) == 0)) {
- 802c356: a801 add r0, sp, #4
- 802c358: a90c add r1, sp, #48 ; 0x30
- 802c35a: 220b movs r2, #11
- 802c35c: f7f5 fe0a bl 8021f74 <strncmp>
- GetUserLogin(user_id, WebLogin, &valueLen);
- GetUserPassword(user_id, WebPassword, &valueLen);
- /* Check login and password */
- if ((strncmp(WebLogin, login, MAX_WEB_LOGIN_LEN) == 0) &&
- 802c360: 2800 cmp r0, #0
- 802c362: d14a bne.n 802c3fa <HTTP_ConfirmWebPwd+0x12e>
- if (user_id >= 1) {
- }
- /* TODO replace global flag with user-pass-cookie */
- Authenticated = true;
- 802c364: 4b2a ldr r3, [pc, #168] ; (802c410 <HTTP_ConfirmWebPwd+0x144>)
- 802c366: 2201 movs r2, #1
- 802c368: 701a strb r2, [r3, #0]
- /* Generate cookie */
- sprintf(tempStr, "%X", (unsigned int)GetRandomNumber());
- 802c36a: f7f9 feaf bl 80260cc <GetRandomNumber>
- 802c36e: 492a ldr r1, [pc, #168] ; (802c418 <HTTP_ConfirmWebPwd+0x14c>)
- 802c370: 4602 mov r2, r0
- 802c372: a81b add r0, sp, #108 ; 0x6c
- 802c374: f7fb fa4e bl 8027814 <tfp_sprintf>
- /**
- * @brief Установка Cookie пользователя
- */
- static void HTTP_SetUserCookie(char *str, uint8_t user_id)
- {
- strcpy(users[user_id].cookie, str);
- 802c378: 4b28 ldr r3, [pc, #160] ; (802c41c <HTTP_ConfirmWebPwd+0x150>)
- 802c37a: 2014 movs r0, #20
- 802c37c: fb00 3004 mla r0, r0, r4, r3
- 802c380: a91b add r1, sp, #108 ; 0x6c
- 802c382: f7f5 fd37 bl 8021df4 <strcpy>
- sprintf(tempStr, "%X", (unsigned int)GetRandomNumber());
- /* Set users cookie */
- HTTP_SetUserCookie(tempStr, user_id);
- HTTP_UpdateUserLoginTime(user_id);
- 802c386: 4620 mov r0, r4
- 802c388: f7ff fbfc bl 802bb84 <HTTP_UpdateUserLoginTime>
- /* Send login and cookie back */
- strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\nSet-Cookie: uname=");
- 802c38c: 4924 ldr r1, [pc, #144] ; (802c420 <HTTP_ConfirmWebPwd+0x154>)
- 802c38e: 4628 mov r0, r5
- 802c390: f7f5 fd30 bl 8021df4 <strcpy>
- strcat(bufOut, WebLogin);
- 802c394: a904 add r1, sp, #16
- 802c396: 4628 mov r0, r5
- 802c398: f7f5 fc18 bl 8021bcc <strcat>
- strcat(bufOut, "\r\nSet-Cookie: id=");
- 802c39c: 4921 ldr r1, [pc, #132] ; (802c424 <HTTP_ConfirmWebPwd+0x158>)
- 802c39e: 4628 mov r0, r5
- 802c3a0: f7f5 fc14 bl 8021bcc <strcat>
- strcat(bufOut, tempStr);
- 802c3a4: a91b add r1, sp, #108 ; 0x6c
- 802c3a6: 4628 mov r0, r5
- 802c3a8: f7f5 fc10 bl 8021bcc <strcat>
- sprintf(tempStr, "%d", user_id);
- 802c3ac: 4622 mov r2, r4
- 802c3ae: 491e ldr r1, [pc, #120] ; (802c428 <HTTP_ConfirmWebPwd+0x15c>)
- 802c3b0: a81b add r0, sp, #108 ; 0x6c
- 802c3b2: f7fb fa2f bl 8027814 <tfp_sprintf>
- strcat(bufOut, "\r\nSet-Cookie: role=");
- 802c3b6: 491d ldr r1, [pc, #116] ; (802c42c <HTTP_ConfirmWebPwd+0x160>)
- 802c3b8: 4628 mov r0, r5
- 802c3ba: f7f5 fc07 bl 8021bcc <strcat>
- strcat(bufOut, tempStr);
- 802c3be: a91b add r1, sp, #108 ; 0x6c
- 802c3c0: 4628 mov r0, r5
- 802c3c2: f7f5 fc03 bl 8021bcc <strcat>
- strcat(bufOut, "\r\n\r\n");
- 802c3c6: 491a ldr r1, [pc, #104] ; (802c430 <HTTP_ConfirmWebPwd+0x164>)
- 802c3c8: 4628 mov r0, r5
- 802c3ca: f7f5 fbff bl 8021bcc <strcat>
- strcat(bufOut,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/index.html\"/></head></html>\r\n\r\n");
- 802c3ce: 4919 ldr r1, [pc, #100] ; (802c434 <HTTP_ConfirmWebPwd+0x168>)
- 802c3d0: 4628 mov r0, r5
- 802c3d2: f7f5 fbfb bl 8021bcc <strcat>
- *lenBufOut = strlen(bufOut);
- 802c3d6: 4628 mov r0, r5
- 802c3d8: f7f5 fd6a bl 8021eb0 <strlen>
- switch (user_id) {
- case 0:
- snprintf(buf, sizeof(buf), "Администратор");
- break;
- case 1:
- snprintf(buf, sizeof(buf), "Пользователь");
- 802c3dc: 2128 movs r1, #40 ; 0x28
- strcat(bufOut, "\r\n\r\n");
- strcat(bufOut,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/index.html\"/></head></html>\r\n\r\n");
- *lenBufOut = strlen(bufOut);
- switch (user_id) {
- 802c3de: 2c01 cmp r4, #1
- case 0:
- snprintf(buf, sizeof(buf), "Администратор");
- 802c3e0: bf14 ite ne
- 802c3e2: 4a15 ldrne r2, [pc, #84] ; (802c438 <HTTP_ConfirmWebPwd+0x16c>)
- break;
- case 1:
- snprintf(buf, sizeof(buf), "Пользователь");
- 802c3e4: 4a15 ldreq r2, [pc, #84] ; (802c43c <HTTP_ConfirmWebPwd+0x170>)
- strcat(bufOut, "\r\nSet-Cookie: role=");
- strcat(bufOut, tempStr);
- strcat(bufOut, "\r\n\r\n");
- strcat(bufOut,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/index.html\"/></head></html>\r\n\r\n");
- *lenBufOut = strlen(bufOut);
- 802c3e6: 8038 strh r0, [r7, #0]
- switch (user_id) {
- case 0:
- snprintf(buf, sizeof(buf), "Администратор");
- break;
- case 1:
- snprintf(buf, sizeof(buf), "Пользователь");
- 802c3e8: a811 add r0, sp, #68 ; 0x44
- 802c3ea: f7fb f9f5 bl 80277d8 <tfp_snprintf>
- default:
- snprintf(buf, sizeof(buf), "", login);
- break;
- }
- log_event_data(LOG_LOGIN, buf);
- 802c3ee: 2005 movs r0, #5
- 802c3f0: a911 add r1, sp, #68 ; 0x44
- 802c3f2: f7fd fb33 bl 8029a5c <log_event_data>
- /* Запускаем задачу-таймер логаута. */
- /* TODO отправить ответ серверу о статусе пароля */
- return SEND_REQUIRED_YES;
- 802c3f6: 2000 movs r0, #0
- 802c3f8: e004 b.n 802c404 <HTTP_ConfirmWebPwd+0x138>
- strcat(tempStr, " ");
- if (GetParamValue(tempStr, "login=", login, &valueLen) &&
- GetParamValue(tempStr, "password=", password, &valueLen))
- {
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- 802c3fa: 3401 adds r4, #1
- 802c3fc: b2e4 uxtb r4, r4
- 802c3fe: 2c02 cmp r4, #2
- 802c400: d08a beq.n 802c318 <HTTP_ConfirmWebPwd+0x4c>
- 802c402: e797 b.n 802c334 <HTTP_ConfirmWebPwd+0x68>
- /* TODO replace global flag with user-pass-cookie*/
- Authenticated = false;
- /* Wrong login or pass, return */
- return SEND_REQUIRED_NO;
- }
- 802c404: b029 add sp, #164 ; 0xa4
- 802c406: bdf0 pop {r4, r5, r6, r7, pc}
- 802c408: 08039ade .word 0x08039ade
- 802c40c: 08040cdb .word 0x08040cdb
- 802c410: 20000d23 .word 0x20000d23
- 802c414: 08040ce2 .word 0x08040ce2
- 802c418: 080409f6 .word 0x080409f6
- 802c41c: 2000e23c .word 0x2000e23c
- 802c420: 08040bf5 .word 0x08040bf5
- 802c424: 08040c31 .word 0x08040c31
- 802c428: 080399a9 .word 0x080399a9
- 802c42c: 08040cec .word 0x08040cec
- 802c430: 08041130 .word 0x08041130
- 802c434: 08040c6d .word 0x08040c6d
- 802c438: 08039ab8 .word 0x08039ab8
- 802c43c: 08040d00 .word 0x08040d00
- 0802c440 <HTTP_SetInfo>:
- /**
- * @brief
- * @retval None
- */
- void HTTP_SetInfo(char *buf, uint16_t lenBuf)
- {
- 802c440: b530 push {r4, r5, lr}
- uint8_t valueLen = 0;
- 802c442: 2400 movs r4, #0
- /**
- * @brief
- * @retval None
- */
- void HTTP_SetInfo(char *buf, uint16_t lenBuf)
- {
- 802c444: b0bb sub sp, #236 ; 0xec
- 802c446: 4605 mov r5, r0
- char value[110];
- char str[110];
- // ClearParamString(buf);
-
- memset(value, 0, len);
- 802c448: 4621 mov r1, r4
- 802c44a: 226e movs r2, #110 ; 0x6e
- 802c44c: a802 add r0, sp, #8
- * @brief
- * @retval None
- */
- void HTTP_SetInfo(char *buf, uint16_t lenBuf)
- {
- uint8_t valueLen = 0;
- 802c44e: f88d 4007 strb.w r4, [sp, #7]
- char value[110];
- char str[110];
- // ClearParamString(buf);
-
- memset(value, 0, len);
- 802c452: f7f5 fb55 bl 8021b00 <memset>
-
- /* Владелец */
- GetParamValue(buf, "owner=", value, &valueLen);
- 802c456: f10d 0307 add.w r3, sp, #7
- 802c45a: aa02 add r2, sp, #8
- 802c45c: 4628 mov r0, r5
- 802c45e: 491e ldr r1, [pc, #120] ; (802c4d8 <HTTP_SetInfo+0x98>)
- 802c460: f7ff ff06 bl 802c270 <GetParamValue>
- url_decode(str, sizeof(str), value);
- 802c464: 216e movs r1, #110 ; 0x6e
- 802c466: aa02 add r2, sp, #8
- 802c468: a81e add r0, sp, #120 ; 0x78
- 802c46a: f7fc feb9 bl 80291e0 <url_decode>
- SetOwner(str);
- 802c46e: a81e add r0, sp, #120 ; 0x78
- 802c470: f7fb fefc bl 802826c <SetOwner>
- memset(value, 0, len);
- 802c474: 4621 mov r1, r4
- 802c476: 226e movs r2, #110 ; 0x6e
- 802c478: a802 add r0, sp, #8
- 802c47a: f7f5 fb41 bl 8021b00 <memset>
-
- /* Владелец */
- GetParamValue(buf, "sysLocation=", value, &valueLen);
- 802c47e: f10d 0307 add.w r3, sp, #7
- 802c482: aa02 add r2, sp, #8
- 802c484: 4628 mov r0, r5
- 802c486: 4915 ldr r1, [pc, #84] ; (802c4dc <HTTP_SetInfo+0x9c>)
- 802c488: f7ff fef2 bl 802c270 <GetParamValue>
- url_decode(str, sizeof(str), value);
- 802c48c: 216e movs r1, #110 ; 0x6e
- 802c48e: aa02 add r2, sp, #8
- 802c490: a81e add r0, sp, #120 ; 0x78
- 802c492: f7fc fea5 bl 80291e0 <url_decode>
- SetLocation(str);
- 802c496: a81e add r0, sp, #120 ; 0x78
- 802c498: f7fb fef8 bl 802828c <SetLocation>
- memset(value, 0, len);
- 802c49c: 4621 mov r1, r4
- 802c49e: 226e movs r2, #110 ; 0x6e
- 802c4a0: a802 add r0, sp, #8
- 802c4a2: f7f5 fb2d bl 8021b00 <memset>
-
- /* Комментарий */
- GetParamValue(buf, "comment=", value, &valueLen);
- 802c4a6: f10d 0307 add.w r3, sp, #7
- 802c4aa: aa02 add r2, sp, #8
- 802c4ac: 4628 mov r0, r5
- 802c4ae: 490c ldr r1, [pc, #48] ; (802c4e0 <HTTP_SetInfo+0xa0>)
- 802c4b0: f7ff fede bl 802c270 <GetParamValue>
- url_decode(str, sizeof(str), value);
- 802c4b4: 216e movs r1, #110 ; 0x6e
- 802c4b6: aa02 add r2, sp, #8
- 802c4b8: a81e add r0, sp, #120 ; 0x78
- 802c4ba: f7fc fe91 bl 80291e0 <url_decode>
- SetComment(str);
- 802c4be: a81e add r0, sp, #120 ; 0x78
- 802c4c0: f7fb fef2 bl 80282a8 <SetComment>
- memset(value, 0, len);
- 802c4c4: 4621 mov r1, r4
- 802c4c6: 226e movs r2, #110 ; 0x6e
- 802c4c8: a802 add r0, sp, #8
- 802c4ca: f7f5 fb19 bl 8021b00 <memset>
-
- HTTP_SaveSettings();
- 802c4ce: f001 fc75 bl 802ddbc <HTTP_SaveSettings>
- }
- 802c4d2: b03b add sp, #236 ; 0xec
- 802c4d4: bd30 pop {r4, r5, pc}
- 802c4d6: bf00 nop
- 802c4d8: 08040d19 .word 0x08040d19
- 802c4dc: 08040d20 .word 0x08040d20
- 802c4e0: 08040d2d .word 0x08040d2d
- 0802c4e4 <HTTP_SetSettings>:
- /**
- * @brief
- * @retval None
- */
- void HTTP_SetSettings(char *buf, uint16_t lenBuf)
- {
- 802c4e4: b530 push {r4, r5, lr}
- uint8_t valueLen = 0;
- 802c4e6: 2500 movs r5, #0
- /**
- * @brief
- * @retval None
- */
- void HTTP_SetSettings(char *buf, uint16_t lenBuf)
- {
- 802c4e8: b0a3 sub sp, #140 ; 0x8c
- 802c4ea: 4604 mov r4, r0
- //printf(buf);
-
- //ClearParamString(buf);
-
- memset(value, 0, len);
- 802c4ec: 2240 movs r2, #64 ; 0x40
- 802c4ee: 4629 mov r1, r5
- 802c4f0: a802 add r0, sp, #8
- * @brief
- * @retval None
- */
- void HTTP_SetSettings(char *buf, uint16_t lenBuf)
- {
- uint8_t valueLen = 0;
- 802c4f2: f88d 5007 strb.w r5, [sp, #7]
- //printf(buf);
-
- //ClearParamString(buf);
-
- memset(value, 0, len);
- 802c4f6: f7f5 fb03 bl 8021b00 <memset>
- memset(str, 0, MAX_WEB_PARAM_LEN);
- 802c4fa: 2240 movs r2, #64 ; 0x40
- 802c4fc: 4629 mov r1, r5
- 802c4fe: a812 add r0, sp, #72 ; 0x48
- 802c500: f7f5 fafe bl 8021b00 <memset>
-
- /* SNMP */
- GetParamValue(buf, "read_community=", value, &valueLen);
- 802c504: f10d 0307 add.w r3, sp, #7
- 802c508: 49b6 ldr r1, [pc, #728] ; (802c7e4 <HTTP_SetSettings+0x300>)
- 802c50a: aa02 add r2, sp, #8
- 802c50c: 4620 mov r0, r4
- 802c50e: f7ff feaf bl 802c270 <GetParamValue>
- SetReadCommunity(value);
- 802c512: a802 add r0, sp, #8
- 802c514: f7fb fe58 bl 80281c8 <SetReadCommunity>
- memset(value, 0, len);
- 802c518: 2240 movs r2, #64 ; 0x40
- 802c51a: 4629 mov r1, r5
- 802c51c: a802 add r0, sp, #8
- 802c51e: f7f5 faef bl 8021b00 <memset>
-
- GetParamValue(buf, "write_community=", value, &valueLen);
- 802c522: f10d 0307 add.w r3, sp, #7
- 802c526: 49b0 ldr r1, [pc, #704] ; (802c7e8 <HTTP_SetSettings+0x304>)
- 802c528: aa02 add r2, sp, #8
- 802c52a: 4620 mov r0, r4
- 802c52c: f7ff fea0 bl 802c270 <GetParamValue>
- SetWriteCommunity(value);
- 802c530: a802 add r0, sp, #8
- 802c532: f7fb fe4f bl 80281d4 <SetWriteCommunity>
- memset(value, 0, len);
- 802c536: 2240 movs r2, #64 ; 0x40
- 802c538: 4629 mov r1, r5
- 802c53a: a802 add r0, sp, #8
- 802c53c: f7f5 fae0 bl 8021b00 <memset>
-
- GetParamValue(buf, "managerIP=", value, &valueLen);
- 802c540: f10d 0307 add.w r3, sp, #7
- 802c544: 49a9 ldr r1, [pc, #676] ; (802c7ec <HTTP_SetSettings+0x308>)
- 802c546: aa02 add r2, sp, #8
- 802c548: 4620 mov r0, r4
- 802c54a: f7ff fe91 bl 802c270 <GetParamValue>
- SetManagerIp(value);
- 802c54e: a802 add r0, sp, #8
- 802c550: f7fb fe46 bl 80281e0 <SetManagerIp>
- memset(value, 0, len);
- 802c554: 2240 movs r2, #64 ; 0x40
- 802c556: 4629 mov r1, r5
- 802c558: a802 add r0, sp, #8
- 802c55a: f7f5 fad1 bl 8021b00 <memset>
- GetParamValue(buf, "managerIP2=", value, &valueLen);
- 802c55e: f10d 0307 add.w r3, sp, #7
- 802c562: 49a3 ldr r1, [pc, #652] ; (802c7f0 <HTTP_SetSettings+0x30c>)
- 802c564: aa02 add r2, sp, #8
- 802c566: 4620 mov r0, r4
- 802c568: f7ff fe82 bl 802c270 <GetParamValue>
- SetManagerIp2(value);
- 802c56c: a802 add r0, sp, #8
- 802c56e: f7fb fe45 bl 80281fc <SetManagerIp2>
- memset(value, 0, len);
- 802c572: 2240 movs r2, #64 ; 0x40
- 802c574: 4629 mov r1, r5
- 802c576: a802 add r0, sp, #8
- 802c578: f7f5 fac2 bl 8021b00 <memset>
- GetParamValue(buf, "managerIP3=", value, &valueLen);
- 802c57c: f10d 0307 add.w r3, sp, #7
- 802c580: 499c ldr r1, [pc, #624] ; (802c7f4 <HTTP_SetSettings+0x310>)
- 802c582: aa02 add r2, sp, #8
- 802c584: 4620 mov r0, r4
- 802c586: f7ff fe73 bl 802c270 <GetParamValue>
- SetManagerIp3(value);
- 802c58a: a802 add r0, sp, #8
- 802c58c: f7fb fe44 bl 8028218 <SetManagerIp3>
- memset(value, 0, len);
- 802c590: 2240 movs r2, #64 ; 0x40
- 802c592: 4629 mov r1, r5
- 802c594: a802 add r0, sp, #8
- 802c596: f7f5 fab3 bl 8021b00 <memset>
-
- GetParamValue(buf, "managerIP4=", value, &valueLen);
- 802c59a: f10d 0307 add.w r3, sp, #7
- 802c59e: 4996 ldr r1, [pc, #600] ; (802c7f8 <HTTP_SetSettings+0x314>)
- 802c5a0: aa02 add r2, sp, #8
- 802c5a2: 4620 mov r0, r4
- 802c5a4: f7ff fe64 bl 802c270 <GetParamValue>
- SetManagerIp4(value);
- 802c5a8: a802 add r0, sp, #8
- 802c5aa: f7fb fe43 bl 8028234 <SetManagerIp4>
- memset(value, 0, len);
- 802c5ae: 2240 movs r2, #64 ; 0x40
- 802c5b0: 4629 mov r1, r5
- 802c5b2: a802 add r0, sp, #8
- 802c5b4: f7f5 faa4 bl 8021b00 <memset>
- GetParamValue(buf, "managerIP5=", value, &valueLen);
- 802c5b8: f10d 0307 add.w r3, sp, #7
- 802c5bc: 498f ldr r1, [pc, #572] ; (802c7fc <HTTP_SetSettings+0x318>)
- 802c5be: aa02 add r2, sp, #8
- 802c5c0: 4620 mov r0, r4
- 802c5c2: f7ff fe55 bl 802c270 <GetParamValue>
- SetManagerIp5(value);
- 802c5c6: a802 add r0, sp, #8
- 802c5c8: f7fb fe42 bl 8028250 <SetManagerIp5>
- memset(value, 0, len);
- 802c5cc: 2240 movs r2, #64 ; 0x40
- 802c5ce: 4629 mov r1, r5
- 802c5d0: a802 add r0, sp, #8
- 802c5d2: f7f5 fa95 bl 8021b00 <memset>
- /* Сетевые параметры */
- GetParamValue(buf, "dhcp=", value, &valueLen);
- 802c5d6: 498a ldr r1, [pc, #552] ; (802c800 <HTTP_SetSettings+0x31c>)
- 802c5d8: aa02 add r2, sp, #8
- 802c5da: f10d 0307 add.w r3, sp, #7
- 802c5de: 4620 mov r0, r4
- 802c5e0: f7ff fe46 bl 802c270 <GetParamValue>
- SetDhcpStateStr(value);
- 802c5e4: a802 add r0, sp, #8
- 802c5e6: f7fb fdc1 bl 802816c <SetDhcpStateStr>
-
- if (strncmp(value, "on", 2) != 0) // Если dhcp off устанавливаем параметры
- 802c5ea: a802 add r0, sp, #8
- 802c5ec: 4985 ldr r1, [pc, #532] ; (802c804 <HTTP_SetSettings+0x320>)
- 802c5ee: 2202 movs r2, #2
- 802c5f0: f7f5 fcc0 bl 8021f74 <strncmp>
- 802c5f4: 2800 cmp r0, #0
- 802c5f6: d031 beq.n 802c65c <HTTP_SetSettings+0x178>
- {
- memset(value, 0, len);
- 802c5f8: 4629 mov r1, r5
- 802c5fa: 2240 movs r2, #64 ; 0x40
- 802c5fc: a802 add r0, sp, #8
- 802c5fe: f7f5 fa7f bl 8021b00 <memset>
- GetParamValue(buf, "ipaddr=", value, &valueLen);
- 802c602: f10d 0307 add.w r3, sp, #7
- 802c606: 4980 ldr r1, [pc, #512] ; (802c808 <HTTP_SetSettings+0x324>)
- 802c608: aa02 add r2, sp, #8
- 802c60a: 4620 mov r0, r4
- 802c60c: f7ff fe30 bl 802c270 <GetParamValue>
- SetIPStr(value);
- 802c610: a802 add r0, sp, #8
- 802c612: f7fb fd99 bl 8028148 <SetIPStr>
- memset(value, 0, len);
- 802c616: 4629 mov r1, r5
- 802c618: 2240 movs r2, #64 ; 0x40
- 802c61a: a802 add r0, sp, #8
- 802c61c: f7f5 fa70 bl 8021b00 <memset>
-
- GetParamValue(buf, "gw=", value, &valueLen);
- 802c620: f10d 0307 add.w r3, sp, #7
- 802c624: 4979 ldr r1, [pc, #484] ; (802c80c <HTTP_SetSettings+0x328>)
- 802c626: aa02 add r2, sp, #8
- 802c628: 4620 mov r0, r4
- 802c62a: f7ff fe21 bl 802c270 <GetParamValue>
- SetGatewayStr(value);
- 802c62e: a802 add r0, sp, #8
- 802c630: f7fb fd90 bl 8028154 <SetGatewayStr>
- memset(value, 0, len);
- 802c634: 4629 mov r1, r5
- 802c636: 2240 movs r2, #64 ; 0x40
- 802c638: a802 add r0, sp, #8
- 802c63a: f7f5 fa61 bl 8021b00 <memset>
-
- GetParamValue(buf, "mask=", value, &valueLen);
- 802c63e: 4974 ldr r1, [pc, #464] ; (802c810 <HTTP_SetSettings+0x32c>)
- 802c640: aa02 add r2, sp, #8
- 802c642: f10d 0307 add.w r3, sp, #7
- 802c646: 4620 mov r0, r4
- 802c648: f7ff fe12 bl 802c270 <GetParamValue>
- SetMaskStr(value);
- 802c64c: a802 add r0, sp, #8
- 802c64e: f7fb fd87 bl 8028160 <SetMaskStr>
- memset(value, 0, len);
- 802c652: a802 add r0, sp, #8
- 802c654: 4629 mov r1, r5
- 802c656: 2240 movs r2, #64 ; 0x40
- 802c658: f7f5 fa52 bl 8021b00 <memset>
- }
- memset(value, 0, len);
- 802c65c: 2100 movs r1, #0
- 802c65e: 2240 movs r2, #64 ; 0x40
- 802c660: a802 add r0, sp, #8
- 802c662: f7f5 fa4d bl 8021b00 <memset>
- GetParamValue(&buf[555], "auth=", value, &valueLen);
- 802c666: 496b ldr r1, [pc, #428] ; (802c814 <HTTP_SetSettings+0x330>)
- 802c668: aa02 add r2, sp, #8
- 802c66a: f10d 0307 add.w r3, sp, #7
- 802c66e: f204 202b addw r0, r4, #555 ; 0x22b
- 802c672: f7ff fdfd bl 802c270 <GetParamValue>
- SetAuthEnableStateStr(value);
- 802c676: a802 add r0, sp, #8
- 802c678: f7fb fe4e bl 8028318 <SetAuthEnableStateStr>
- if (strncmp(value, "on", 2) == 0){
- 802c67c: 4961 ldr r1, [pc, #388] ; (802c804 <HTTP_SetSettings+0x320>)
- 802c67e: a802 add r0, sp, #8
- 802c680: 2202 movs r2, #2
- 802c682: f7f5 fc77 bl 8021f74 <strncmp>
- 802c686: 4601 mov r1, r0
- 802c688: 2800 cmp r0, #0
- 802c68a: d156 bne.n 802c73a <HTTP_SetSettings+0x256>
- /* параметры RADIUS*/
- memset(value, 0, len);
- 802c68c: 2240 movs r2, #64 ; 0x40
- 802c68e: a802 add r0, sp, #8
- 802c690: f7f5 fa36 bl 8021b00 <memset>
- GetParamValue(buf, "rs_enabled=", value, &valueLen);
- 802c694: 4960 ldr r1, [pc, #384] ; (802c818 <HTTP_SetSettings+0x334>)
- 802c696: aa02 add r2, sp, #8
- 802c698: f10d 0307 add.w r3, sp, #7
- 802c69c: 4620 mov r0, r4
- 802c69e: f7ff fde7 bl 802c270 <GetParamValue>
- SetRDSEnableStateStr(value);
- 802c6a2: a802 add r0, sp, #8
- 802c6a4: f7fb fe26 bl 80282f4 <SetRDSEnableStateStr>
- if (strncmp(value, "on", 2) == 0) // Если raddius off устанавливаем параметры
- 802c6a8: a802 add r0, sp, #8
- 802c6aa: 4956 ldr r1, [pc, #344] ; (802c804 <HTTP_SetSettings+0x320>)
- 802c6ac: 2202 movs r2, #2
- 802c6ae: f7f5 fc61 bl 8021f74 <strncmp>
- 802c6b2: 4605 mov r5, r0
- 802c6b4: 2800 cmp r0, #0
- 802c6b6: d140 bne.n 802c73a <HTTP_SetSettings+0x256>
- {
- memset(value, 0, len);
- 802c6b8: 4629 mov r1, r5
- 802c6ba: 2240 movs r2, #64 ; 0x40
- 802c6bc: a802 add r0, sp, #8
- 802c6be: f7f5 fa1f bl 8021b00 <memset>
- GetParamValue(buf, "rs_server=", value, &valueLen);
- 802c6c2: f10d 0307 add.w r3, sp, #7
- 802c6c6: 4955 ldr r1, [pc, #340] ; (802c81c <HTTP_SetSettings+0x338>)
- 802c6c8: aa02 add r2, sp, #8
- 802c6ca: 4620 mov r0, r4
- 802c6cc: f7ff fdd0 bl 802c270 <GetParamValue>
- SetRDSIpStr(value);
- 802c6d0: a802 add r0, sp, #8
- 802c6d2: f7fb fdef bl 80282b4 <SetRDSIpStr>
- memset(value, 0, len);
- 802c6d6: 4629 mov r1, r5
- 802c6d8: 2240 movs r2, #64 ; 0x40
- 802c6da: a802 add r0, sp, #8
- 802c6dc: f7f5 fa10 bl 8021b00 <memset>
- GetParamValue(buf, "rs_port=", value, &valueLen);
- 802c6e0: f10d 0307 add.w r3, sp, #7
- 802c6e4: 494e ldr r1, [pc, #312] ; (802c820 <HTTP_SetSettings+0x33c>)
- 802c6e6: aa02 add r2, sp, #8
- 802c6e8: 4620 mov r0, r4
- 802c6ea: f7ff fdc1 bl 802c270 <GetParamValue>
- SetRDSPortStr(value);
- 802c6ee: a802 add r0, sp, #8
- 802c6f0: f7fb fde6 bl 80282c0 <SetRDSPortStr>
- memset(value, 0, len);
- 802c6f4: 4629 mov r1, r5
- 802c6f6: 2240 movs r2, #64 ; 0x40
- 802c6f8: a802 add r0, sp, #8
- 802c6fa: f7f5 fa01 bl 8021b00 <memset>
- GetParamValue(buf, "rs_pwd=", value, &valueLen);
- 802c6fe: f10d 0307 add.w r3, sp, #7
- 802c702: 4948 ldr r1, [pc, #288] ; (802c824 <HTTP_SetSettings+0x340>)
- 802c704: aa02 add r2, sp, #8
- 802c706: 4620 mov r0, r4
- 802c708: f7ff fdb2 bl 802c270 <GetParamValue>
- SetRDSPasswordkStr(value);
- 802c70c: a802 add r0, sp, #8
- 802c70e: f7fb fdeb bl 80282e8 <SetRDSPasswordkStr>
- memset(value, 0, len);
- 802c712: 4629 mov r1, r5
- 802c714: 2240 movs r2, #64 ; 0x40
- 802c716: a802 add r0, sp, #8
- 802c718: f7f5 f9f2 bl 8021b00 <memset>
- GetParamValue(buf, "rs_key=", value, &valueLen);
- 802c71c: 4942 ldr r1, [pc, #264] ; (802c828 <HTTP_SetSettings+0x344>)
- 802c71e: aa02 add r2, sp, #8
- 802c720: f10d 0307 add.w r3, sp, #7
- 802c724: 4620 mov r0, r4
- 802c726: f7ff fda3 bl 802c270 <GetParamValue>
- SetRDSKeyAccesstStr(value);
- 802c72a: a802 add r0, sp, #8
- 802c72c: f7fb fdd2 bl 80282d4 <SetRDSKeyAccesstStr>
- memset(value, 0, len);
- 802c730: a802 add r0, sp, #8
- 802c732: 4629 mov r1, r5
- 802c734: 2240 movs r2, #64 ; 0x40
- 802c736: f7f5 f9e3 bl 8021b00 <memset>
- }
- }
- memset(value, 0, len);
- 802c73a: 2100 movs r1, #0
- 802c73c: 2240 movs r2, #64 ; 0x40
- 802c73e: a802 add r0, sp, #8
- 802c740: f7f5 f9de bl 8021b00 <memset>
- // Параметры реле и сухих контактов
- GetParamValue(buf, "di1=", value, &valueLen);
- 802c744: f10d 0307 add.w r3, sp, #7
- 802c748: aa02 add r2, sp, #8
- 802c74a: 4938 ldr r1, [pc, #224] ; (802c82c <HTTP_SetSettings+0x348>)
- 802c74c: 4620 mov r0, r4
- 802c74e: f7ff fd8f bl 802c270 <GetParamValue>
- SetDINTypeActStr(value, 0);
- 802c752: a802 add r0, sp, #8
- 802c754: 2100 movs r1, #0
- 802c756: f7fb fed5 bl 8028504 <SetDINTypeActStr>
- memset(value, 0, len);
- 802c75a: 2100 movs r1, #0
- 802c75c: 2240 movs r2, #64 ; 0x40
- 802c75e: a802 add r0, sp, #8
- 802c760: f7f5 f9ce bl 8021b00 <memset>
- GetParamValue(buf, "ro1=", value, &valueLen);
- 802c764: f10d 0307 add.w r3, sp, #7
- 802c768: aa02 add r2, sp, #8
- 802c76a: 4931 ldr r1, [pc, #196] ; (802c830 <HTTP_SetSettings+0x34c>)
- 802c76c: 4620 mov r0, r4
- 802c76e: f7ff fd7f bl 802c270 <GetParamValue>
- SetROTypeActStr(value, 0);
- 802c772: a802 add r0, sp, #8
- 802c774: 2100 movs r1, #0
- 802c776: f7fb fee3 bl 8028540 <SetROTypeActStr>
- memset(value, 0, len);
- 802c77a: 2100 movs r1, #0
- 802c77c: 2240 movs r2, #64 ; 0x40
- 802c77e: a802 add r0, sp, #8
- 802c780: f7f5 f9be bl 8021b00 <memset>
- GetParamValue(buf, "ro2=", value, &valueLen);
- 802c784: f10d 0307 add.w r3, sp, #7
- 802c788: aa02 add r2, sp, #8
- 802c78a: 492a ldr r1, [pc, #168] ; (802c834 <HTTP_SetSettings+0x350>)
- 802c78c: 4620 mov r0, r4
- 802c78e: f7ff fd6f bl 802c270 <GetParamValue>
- SetROTypeActStr(value, 1);
- 802c792: a802 add r0, sp, #8
- 802c794: 2101 movs r1, #1
- 802c796: f7fb fed3 bl 8028540 <SetROTypeActStr>
- memset(value, 0, len);
- 802c79a: 2100 movs r1, #0
- 802c79c: 2240 movs r2, #64 ; 0x40
- 802c79e: a802 add r0, sp, #8
- 802c7a0: f7f5 f9ae bl 8021b00 <memset>
- // Параметры даты и времени
- GetParamValue(buf, "ntp=", value, &valueLen);
- 802c7a4: 4924 ldr r1, [pc, #144] ; (802c838 <HTTP_SetSettings+0x354>)
- 802c7a6: aa02 add r2, sp, #8
- 802c7a8: f10d 0307 add.w r3, sp, #7
- 802c7ac: 4620 mov r0, r4
- 802c7ae: f7ff fd5f bl 802c270 <GetParamValue>
- SetSntpStateStr(value);
- 802c7b2: a802 add r0, sp, #8
- 802c7b4: f7fb fe2a bl 802840c <SetSntpStateStr>
- if (strncmp(value, "1", 1) == 0) // Если ntp on устанавливаем параметры
- 802c7b8: a802 add r0, sp, #8
- 802c7ba: 4920 ldr r1, [pc, #128] ; (802c83c <HTTP_SetSettings+0x358>)
- 802c7bc: 2201 movs r2, #1
- 802c7be: f7f5 fbd9 bl 8021f74 <strncmp>
- 802c7c2: 4605 mov r5, r0
- {
- memset(value, 0, len);
- 802c7c4: a802 add r0, sp, #8
- // Параметры даты и времени
- GetParamValue(buf, "ntp=", value, &valueLen);
- SetSntpStateStr(value);
- if (strncmp(value, "1", 1) == 0) // Если ntp on устанавливаем параметры
- 802c7c6: 2d00 cmp r5, #0
- 802c7c8: d140 bne.n 802c84c <HTTP_SetSettings+0x368>
- {
- memset(value, 0, len);
- 802c7ca: 4629 mov r1, r5
- 802c7cc: 2240 movs r2, #64 ; 0x40
- 802c7ce: f7f5 f997 bl 8021b00 <memset>
- GetParamValue(buf, "ntpservip=", value, &valueLen);
- 802c7d2: 4620 mov r0, r4
- 802c7d4: 491a ldr r1, [pc, #104] ; (802c840 <HTTP_SetSettings+0x35c>)
- 802c7d6: aa02 add r2, sp, #8
- 802c7d8: f10d 0307 add.w r3, sp, #7
- 802c7dc: f7ff fd48 bl 802c270 <GetParamValue>
- 802c7e0: e030 b.n 802c844 <HTTP_SetSettings+0x360>
- 802c7e2: bf00 nop
- 802c7e4: 08040d36 .word 0x08040d36
- 802c7e8: 08040d46 .word 0x08040d46
- 802c7ec: 08040d57 .word 0x08040d57
- 802c7f0: 08040d62 .word 0x08040d62
- 802c7f4: 08040d6e .word 0x08040d6e
- 802c7f8: 08040d7a .word 0x08040d7a
- 802c7fc: 08040d86 .word 0x08040d86
- 802c800: 08040d92 .word 0x08040d92
- 802c804: 080399ee .word 0x080399ee
- 802c808: 08040d98 .word 0x08040d98
- 802c80c: 08040da0 .word 0x08040da0
- 802c810: 08040da4 .word 0x08040da4
- 802c814: 08040daa .word 0x08040daa
- 802c818: 08040db0 .word 0x08040db0
- 802c81c: 08040dbc .word 0x08040dbc
- 802c820: 08040dc7 .word 0x08040dc7
- 802c824: 08040dd0 .word 0x08040dd0
- 802c828: 08040dd8 .word 0x08040dd8
- 802c82c: 08040de0 .word 0x08040de0
- 802c830: 08040de5 .word 0x08040de5
- 802c834: 08040dea .word 0x08040dea
- 802c838: 08040def .word 0x08040def
- 802c83c: 08039cb4 .word 0x08039cb4
- 802c840: 08040df4 .word 0x08040df4
- SetSntpServerIpStr(value);
- 802c844: a802 add r0, sp, #8
- 802c846: f7fb fe01 bl 802844c <SetSntpServerIpStr>
- 802c84a: e023 b.n 802c894 <HTTP_SetSettings+0x3b0>
- memset(value, 0, len);
- }
- else if (strncmp(value, "0", 1) == 0){
- 802c84c: 4924 ldr r1, [pc, #144] ; (802c8e0 <HTTP_SetSettings+0x3fc>)
- 802c84e: 2201 movs r2, #1
- 802c850: f7f5 fb90 bl 8021f74 <strncmp>
- 802c854: 4605 mov r5, r0
- 802c856: bb10 cbnz r0, 802c89e <HTTP_SetSettings+0x3ba>
- GetParamValue(buf, "date=", value, &valueLen);
- 802c858: f10d 0307 add.w r3, sp, #7
- 802c85c: 4921 ldr r1, [pc, #132] ; (802c8e4 <HTTP_SetSettings+0x400>)
- 802c85e: aa02 add r2, sp, #8
- 802c860: 4620 mov r0, r4
- 802c862: f7ff fd05 bl 802c270 <GetParamValue>
- SetDateStr(value);
- 802c866: a802 add r0, sp, #8
- 802c868: f7fb fd68 bl 802833c <SetDateStr>
- memset(value, 0, len);
- 802c86c: 4629 mov r1, r5
- 802c86e: 2240 movs r2, #64 ; 0x40
- 802c870: a802 add r0, sp, #8
- 802c872: f7f5 f945 bl 8021b00 <memset>
- GetParamValue(buf, "time=", value, &valueLen);
- 802c876: 491c ldr r1, [pc, #112] ; (802c8e8 <HTTP_SetSettings+0x404>)
- 802c878: aa02 add r2, sp, #8
- 802c87a: f10d 0307 add.w r3, sp, #7
- 802c87e: 4620 mov r0, r4
- 802c880: f7ff fcf6 bl 802c270 <GetParamValue>
- url_decode(str, sizeof(str), value);
- 802c884: a812 add r0, sp, #72 ; 0x48
- 802c886: 2140 movs r1, #64 ; 0x40
- 802c888: aa02 add r2, sp, #8
- 802c88a: f7fc fca9 bl 80291e0 <url_decode>
- SetTimeStr(str);
- 802c88e: a812 add r0, sp, #72 ; 0x48
- 802c890: f7fb fd8c bl 80283ac <SetTimeStr>
- memset(value, 0, len);
- 802c894: a802 add r0, sp, #8
- 802c896: 4629 mov r1, r5
- 802c898: 2240 movs r2, #64 ; 0x40
- 802c89a: f7f5 f931 bl 8021b00 <memset>
- }
- GetParamValue(buf, "utc=", value, &valueLen);
- 802c89e: 4913 ldr r1, [pc, #76] ; (802c8ec <HTTP_SetSettings+0x408>)
- 802c8a0: aa02 add r2, sp, #8
- 802c8a2: f10d 0307 add.w r3, sp, #7
- 802c8a6: 4620 mov r0, r4
- 802c8a8: f7ff fce2 bl 802c270 <GetParamValue>
- SetSntpTimeZoneStr(value);
- 802c8ac: a802 add r0, sp, #8
- 802c8ae: f7fb fdd3 bl 8028458 <SetSntpTimeZoneStr>
- memset(value, 0, len);
- 802c8b2: 2100 movs r1, #0
- 802c8b4: 2240 movs r2, #64 ; 0x40
- 802c8b6: a802 add r0, sp, #8
- 802c8b8: f7f5 f922 bl 8021b00 <memset>
-
- /* Если параметры WEB изменились выставляем флаг, сохраняем настройки и перезагружаемся */
- if (GetStateWebReinit() == true)
- 802c8bc: f00b fada bl 8037e74 <GetStateWebReinit>
- 802c8c0: b150 cbz r0, 802c8d8 <HTTP_SetSettings+0x3f4>
- {
- SetWebReinitFlag(true);
- 802c8c2: 2001 movs r0, #1
- 802c8c4: f7fb fc34 bl 8028130 <SetWebReinitFlag>
- HTTP_SaveSettings();
- 802c8c8: f001 fa78 bl 802ddbc <HTTP_SaveSettings>
- /* Блокируем управление ключем на тау секунд*/
- //IO_KeyBlockOn();
- vTaskDelay(1010);
- 802c8cc: f240 30f2 movw r0, #1010 ; 0x3f2
- 802c8d0: f7fe fb7c bl 802afcc <vTaskDelay>
- Reboot();
- 802c8d4: f7fc fc16 bl 8029104 <Reboot>
- }
-
- HTTP_SaveSettings();
- 802c8d8: f001 fa70 bl 802ddbc <HTTP_SaveSettings>
- }
- 802c8dc: b023 add sp, #140 ; 0x8c
- 802c8de: bd30 pop {r4, r5, pc}
- 802c8e0: 08039a51 .word 0x08039a51
- 802c8e4: 08040e12 .word 0x08040e12
- 802c8e8: 08040dff .word 0x08040dff
- 802c8ec: 08040e05 .word 0x08040e05
- 0802c8f0 <GetCookieValue>:
- /**
- * @brief
- * @retval None
- */
- uint8_t GetCookieValue(char *inStr, char *paramName, char *paramValue, uint8_t *paramLen)
- {
- 802c8f0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 802c8f4: 4690 mov r8, r2
- 802c8f6: 461f mov r7, r3
- char *beginValue = 0;
- char *endValue = 0;
- int len = 0;
- char *strPtr = 0;
- strPtr = strstr(inStr, paramName);
- 802c8f8: f7f5 fd5a bl 80223b0 <strstr>
- if (strPtr != 0)
- 802c8fc: 4605 mov r5, r0
- 802c8fe: b1e0 cbz r0, 802c93a <GetCookieValue+0x4a>
- {
- beginValue = strpbrk(strPtr,"=");
- 802c900: 490f ldr r1, [pc, #60] ; (802c940 <GetCookieValue+0x50>)
- 802c902: f7f5 fbbf bl 8022084 <strpbrk>
- endValue = strpbrk(strPtr,";");
- 802c906: 490f ldr r1, [pc, #60] ; (802c944 <GetCookieValue+0x54>)
- strPtr = strstr(inStr, paramName);
- if (strPtr != 0)
- {
- beginValue = strpbrk(strPtr,"=");
- 802c908: 4606 mov r6, r0
- endValue = strpbrk(strPtr,";");
- 802c90a: 4628 mov r0, r5
- 802c90c: f7f5 fbba bl 8022084 <strpbrk>
- if (endValue == 0)
- 802c910: 4604 mov r4, r0
- 802c912: b920 cbnz r0, 802c91e <GetCookieValue+0x2e>
- endValue = strpbrk(strPtr,"\n");
- 802c914: 4628 mov r0, r5
- 802c916: 490c ldr r1, [pc, #48] ; (802c948 <GetCookieValue+0x58>)
- 802c918: f7f5 fbb4 bl 8022084 <strpbrk>
- 802c91c: 4604 mov r4, r0
- len = endValue - beginValue - 1;
- 802c91e: 1ba5 subs r5, r4, r6
- 802c920: 3d01 subs r5, #1
- strncpy(paramValue, beginValue + 1, len);
- 802c922: 4640 mov r0, r8
- 802c924: 1c71 adds r1, r6, #1
- 802c926: 462a mov r2, r5
- 802c928: f7f5 fb7a bl 8022020 <strncpy>
- *endValue = '0';
- 802c92c: 2330 movs r3, #48 ; 0x30
- 802c92e: 7023 strb r3, [r4, #0]
- *beginValue = '0';
- *paramLen = len;
- return 1;
- 802c930: 2001 movs r0, #1
- if (endValue == 0)
- endValue = strpbrk(strPtr,"\n");
- len = endValue - beginValue - 1;
- strncpy(paramValue, beginValue + 1, len);
- *endValue = '0';
- *beginValue = '0';
- 802c932: 7033 strb r3, [r6, #0]
- *paramLen = len;
- 802c934: 703d strb r5, [r7, #0]
- return 1;
- 802c936: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- }
- else
- {
- *paramLen = 0;
- 802c93a: 7038 strb r0, [r7, #0]
- return 0;
- }
- }
- 802c93c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 802c940: 08040de3 .word 0x08040de3
- 802c944: 08045b19 .word 0x08045b19
- 802c948: 08041133 .word 0x08041133
- 0802c94c <ClearParamString>:
- }
- }
- */
- void ClearParamString(char *inBuf)
- {
- 802c94c: b510 push {r4, lr}
- uint16_t len;
- char *str;
-
- str = strstr(inBuf, "HTTP");
- 802c94e: 4908 ldr r1, [pc, #32] ; (802c970 <ClearParamString+0x24>)
- }
- }
- */
- void ClearParamString(char *inBuf)
- {
- 802c950: 4604 mov r4, r0
- uint16_t len;
- char *str;
-
- str = strstr(inBuf, "HTTP");
- 802c952: f7f5 fd2d bl 80223b0 <strstr>
-
- if (str != 0)
- 802c956: b148 cbz r0, 802c96c <ClearParamString+0x20>
- {
- len = str - inBuf;
- 802c958: 1b02 subs r2, r0, r4
- memset(str, 0, RECIVE_BUF_MAX_LEN - len - 1);
- 802c95a: b292 uxth r2, r2
- 802c95c: f5c2 62bb rsb r2, r2, #1496 ; 0x5d8
- 802c960: 2100 movs r1, #0
- 802c962: 3203 adds r2, #3
- }
- }
- 802c964: e8bd 4010 ldmia.w sp!, {r4, lr}
- str = strstr(inBuf, "HTTP");
-
- if (str != 0)
- {
- len = str - inBuf;
- memset(str, 0, RECIVE_BUF_MAX_LEN - len - 1);
- 802c968: f7f5 b8ca b.w 8021b00 <memset>
- 802c96c: bd10 pop {r4, pc}
- 802c96e: bf00 nop
- 802c970: 08040e0a .word 0x08040e0a
- 0802c974 <HTTP_Prodate>:
- /**
- * @brief Установка даты производства
- */
- // TODO Убрать заглушку!
- void HTTP_Prodate(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c974: b5f0 push {r4, r5, r6, r7, lr}
- uint8_t valueLen = 0;
- 802c976: 2500 movs r5, #0
- /**
- * @brief Установка даты производства
- */
- // TODO Убрать заглушку!
- void HTTP_Prodate(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c978: b087 sub sp, #28
- 802c97a: 4606 mov r6, r0
- 802c97c: 460c mov r4, r1
- uint8_t valueLen = 0;
- char value[20];
-
- memset(bufOut, 0, SEND_BUF_MAX_LEN);
- 802c97e: f44f 62fa mov.w r2, #2000 ; 0x7d0
- 802c982: 4608 mov r0, r1
- 802c984: 4629 mov r1, r5
- /**
- * @brief Установка даты производства
- */
- // TODO Убрать заглушку!
- void HTTP_Prodate(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c986: 461f mov r7, r3
- uint8_t valueLen = 0;
- 802c988: f88d 5003 strb.w r5, [sp, #3]
- char value[20];
-
- memset(bufOut, 0, SEND_BUF_MAX_LEN);
- 802c98c: f7f5 f8b8 bl 8021b00 <memset>
-
- ClearParamString(bufIn);
- 802c990: 4630 mov r0, r6
- 802c992: f7ff ffdb bl 802c94c <ClearParamString>
-
- memset(value, 0, 20);
- 802c996: 4629 mov r1, r5
- 802c998: 2214 movs r2, #20
- 802c99a: a801 add r0, sp, #4
- 802c99c: f7f5 f8b0 bl 8021b00 <memset>
- GetParamValue(bufIn, "prodate=", value, &valueLen);
- 802c9a0: aa01 add r2, sp, #4
- 802c9a2: f10d 0303 add.w r3, sp, #3
- 802c9a6: 490b ldr r1, [pc, #44] ; (802c9d4 <HTTP_Prodate+0x60>)
- 802c9a8: 4630 mov r0, r6
- 802c9aa: f7ff fc61 bl 802c270 <GetParamValue>
- printf(value);
- printf("\r\n");
- */
-
- /* Устанавливаем дату производства */
- SETTINGS_SetProDate(value, valueLen);
- 802c9ae: f89d 1003 ldrb.w r1, [sp, #3]
- 802c9b2: a801 add r0, sp, #4
- 802c9b4: f7fc f82a bl 8028a0c <SETTINGS_SetProDate>
-
- /* Устанавливаем дату следующей профилактики +1 год */
- RTC_SetProfTime(value);
- 802c9b8: a801 add r0, sp, #4
- 802c9ba: f7f9 fec1 bl 8026740 <RTC_SetProfTime>
-
- /* Пока отправляем true */
- strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\nTrue");
- 802c9be: 4906 ldr r1, [pc, #24] ; (802c9d8 <HTTP_Prodate+0x64>)
- 802c9c0: 4620 mov r0, r4
- 802c9c2: f7f5 fa17 bl 8021df4 <strcpy>
- *lenBufOut = strlen(bufOut);
- 802c9c6: 4620 mov r0, r4
- 802c9c8: f7f5 fa72 bl 8021eb0 <strlen>
- 802c9cc: 8038 strh r0, [r7, #0]
-
- // TEST_SetServerFlag();
- }
- 802c9ce: b007 add sp, #28
- 802c9d0: bdf0 pop {r4, r5, r6, r7, pc}
- 802c9d2: bf00 nop
- 802c9d4: 08040e0f .word 0x08040e0f
- 802c9d8: 08040e18 .word 0x08040e18
- 0802c9dc <HTTP_UpsHistoryPage>:
- }
- }
- }
- int HTTP_UpsHistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c9dc: b5f0 push {r4, r5, r6, r7, lr}
- uint8_t i, valueLen = 0;
- 802c9de: 2500 movs r5, #0
- }
- }
- }
- int HTTP_UpsHistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c9e0: b087 sub sp, #28
- 802c9e2: 4607 mov r7, r0
- char value[20];
- uint32_t nbytes = 0;
- (void)lenBufIn;
- memset(bufOut, 0, FILE_BUF_MAX_LEN);
- 802c9e4: f44f 727a mov.w r2, #1000 ; 0x3e8
- 802c9e8: 4608 mov r0, r1
- }
- }
- }
- int HTTP_UpsHistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c9ea: 460c mov r4, r1
- char value[20];
- uint32_t nbytes = 0;
- (void)lenBufIn;
- memset(bufOut, 0, FILE_BUF_MAX_LEN);
- 802c9ec: 4629 mov r1, r5
- }
- }
- }
- int HTTP_UpsHistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802c9ee: 461e mov r6, r3
- uint8_t i, valueLen = 0;
- 802c9f0: f88d 5003 strb.w r5, [sp, #3]
- char value[20];
- uint32_t nbytes = 0;
- (void)lenBufIn;
- memset(bufOut, 0, FILE_BUF_MAX_LEN);
- 802c9f4: f7f5 f884 bl 8021b00 <memset>
- ClearParamString(bufIn);
- 802c9f8: 4638 mov r0, r7
- 802c9fa: f7ff ffa7 bl 802c94c <ClearParamString>
- memset(value, 0, 20);
- 802c9fe: 4629 mov r1, r5
- 802ca00: 2214 movs r2, #20
- 802ca02: a801 add r0, sp, #4
- 802ca04: f7f5 f87c bl 8021b00 <memset>
- GetParamValue(bufIn, "page=", value, &valueLen);
- 802ca08: 491c ldr r1, [pc, #112] ; (802ca7c <HTTP_UpsHistoryPage+0xa0>)
- 802ca0a: 4638 mov r0, r7
- 802ca0c: aa01 add r2, sp, #4
- 802ca0e: f10d 0303 add.w r3, sp, #3
- 802ca12: f7ff fc2d bl 802c270 <GetParamValue>
- if (strcmp(value, "all") == 0)
- 802ca16: a801 add r0, sp, #4
- 802ca18: 4919 ldr r1, [pc, #100] ; (802ca80 <HTTP_UpsHistoryPage+0xa4>)
- 802ca1a: f7f5 f8fd bl 8021c18 <strcmp>
- 802ca1e: b9d8 cbnz r0, 802ca58 <HTTP_UpsHistoryPage+0x7c>
- {
- if (!LOG_IsInit()) {
- 802ca20: f7fd f856 bl 8029ad0 <LOG_IsInit>
- 802ca24: b908 cbnz r0, 802ca2a <HTTP_UpsHistoryPage+0x4e>
- return SEND_REQUIRED_NO;
- 802ca26: 2001 movs r0, #1
- 802ca28: e026 b.n 802ca78 <HTTP_UpsHistoryPage+0x9c>
- }
- if (fLogTransInprog == false) {
- 802ca2a: 4d16 ldr r5, [pc, #88] ; (802ca84 <HTTP_UpsHistoryPage+0xa8>)
- 802ca2c: 782b ldrb r3, [r5, #0]
- 802ca2e: 2b00 cmp r3, #0
- 802ca30: d1f9 bne.n 802ca26 <HTTP_UpsHistoryPage+0x4a>
- // Send log as raw data
- log_ptr = 0;
- 802ca32: 4a15 ldr r2, [pc, #84] ; (802ca88 <HTTP_UpsHistoryPage+0xac>)
- 802ca34: 6013 str r3, [r2, #0]
- log_size = LOG_GetTotalSTRCount() * STRING_SIZE;
- 802ca36: f7fd f85d bl 8029af4 <LOG_GetTotalSTRCount>
- 802ca3a: 4b14 ldr r3, [pc, #80] ; (802ca8c <HTTP_UpsHistoryPage+0xb0>)
- sprintf(bufOut, "HTTP/1.1 200 OK\r\nContent-Length:%lu\r\n\r\n", log_size);
- 802ca3c: 4914 ldr r1, [pc, #80] ; (802ca90 <HTTP_UpsHistoryPage+0xb4>)
- if (fLogTransInprog == false) {
- // Send log as raw data
- log_ptr = 0;
- log_size = LOG_GetTotalSTRCount() * STRING_SIZE;
- 802ca3e: 0182 lsls r2, r0, #6
- sprintf(bufOut, "HTTP/1.1 200 OK\r\nContent-Length:%lu\r\n\r\n", log_size);
- 802ca40: 4620 mov r0, r4
- if (fLogTransInprog == false) {
- // Send log as raw data
- log_ptr = 0;
- log_size = LOG_GetTotalSTRCount() * STRING_SIZE;
- 802ca42: 601a str r2, [r3, #0]
- sprintf(bufOut, "HTTP/1.1 200 OK\r\nContent-Length:%lu\r\n\r\n", log_size);
- 802ca44: f7fa fee6 bl 8027814 <tfp_sprintf>
- *lenBufOut = strlen(bufOut);
- 802ca48: 4620 mov r0, r4
- 802ca4a: f7f5 fa31 bl 8021eb0 <strlen>
- // Set file transfer in progress flag
- fLogTransInprog = true;
- 802ca4e: 2301 movs r3, #1
- log_ptr = 0;
- log_size = LOG_GetTotalSTRCount() * STRING_SIZE;
- sprintf(bufOut, "HTTP/1.1 200 OK\r\nContent-Length:%lu\r\n\r\n", log_size);
- *lenBufOut = strlen(bufOut);
- 802ca50: 8030 strh r0, [r6, #0]
- // Set file transfer in progress flag
- fLogTransInprog = true;
- 802ca52: 702b strb r3, [r5, #0]
- return SEND_REQUIRED_FILE;
- 802ca54: 2002 movs r0, #2
- 802ca56: e00f b.n 802ca78 <HTTP_UpsHistoryPage+0x9c>
- // We send nothing if file transfer already in progress
- return SEND_REQUIRED_NO;
- }
- }
- else {
- if (!LOG_IsInit()) {
- 802ca58: f7fd f83a bl 8029ad0 <LOG_IsInit>
- 802ca5c: 2800 cmp r0, #0
- 802ca5e: d0e2 beq.n 802ca26 <HTTP_UpsHistoryPage+0x4a>
- return SEND_REQUIRED_NO;
- }
- else {
- HTTP_GetUpsHistoryPage(bufOut, atoi(value));
- 802ca60: a801 add r0, sp, #4
- 802ca62: f7f4 ff2d bl 80218c0 <atoi>
- 802ca66: 4601 mov r1, r0
- 802ca68: 4620 mov r0, r4
- 802ca6a: f001 f931 bl 802dcd0 <HTTP_GetUpsHistoryPage>
- *lenBufOut = strlen(bufOut);
- 802ca6e: 4620 mov r0, r4
- 802ca70: f7f5 fa1e bl 8021eb0 <strlen>
- 802ca74: 8030 strh r0, [r6, #0]
- return SEND_REQUIRED_YES;
- 802ca76: 4628 mov r0, r5
- }
- }
- }
- 802ca78: b007 add sp, #28
- 802ca7a: bdf0 pop {r4, r5, r6, r7, pc}
- 802ca7c: 08040e48 .word 0x08040e48
- 802ca80: 08040e4e .word 0x08040e4e
- 802ca84: 20000d2c .word 0x20000d2c
- 802ca88: 20000d24 .word 0x20000d24
- 802ca8c: 20000d30 .word 0x20000d30
- 802ca90: 08040e52 .word 0x08040e52
- 0802ca94 <HTTP_HistoryPage>:
- */
- }
- }
- int HTTP_HistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802ca94: b5f0 push {r4, r5, r6, r7, lr}
- uint8_t i, valueLen = 0;
- 802ca96: 2500 movs r5, #0
- */
- }
- }
- int HTTP_HistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802ca98: b087 sub sp, #28
- 802ca9a: 4607 mov r7, r0
- char value[20];
- uint32_t nbytes = 0;
- (void)lenBufIn;
- memset(bufOut, 0, FILE_BUF_MAX_LEN);
- 802ca9c: f44f 727a mov.w r2, #1000 ; 0x3e8
- 802caa0: 4608 mov r0, r1
- */
- }
- }
- int HTTP_HistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802caa2: 460c mov r4, r1
- char value[20];
- uint32_t nbytes = 0;
- (void)lenBufIn;
- memset(bufOut, 0, FILE_BUF_MAX_LEN);
- 802caa4: 4629 mov r1, r5
- */
- }
- }
- int HTTP_HistoryPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802caa6: 461e mov r6, r3
- uint8_t i, valueLen = 0;
- 802caa8: f88d 5003 strb.w r5, [sp, #3]
- char value[20];
- uint32_t nbytes = 0;
- (void)lenBufIn;
- memset(bufOut, 0, FILE_BUF_MAX_LEN);
- 802caac: f7f5 f828 bl 8021b00 <memset>
- ClearParamString(bufIn);
- 802cab0: 4638 mov r0, r7
- 802cab2: f7ff ff4b bl 802c94c <ClearParamString>
- memset(value, 0, 20);
- 802cab6: 4629 mov r1, r5
- 802cab8: 2214 movs r2, #20
- 802caba: a801 add r0, sp, #4
- 802cabc: f7f5 f820 bl 8021b00 <memset>
- GetParamValue(bufIn, "page=", value, &valueLen);
- 802cac0: 491d ldr r1, [pc, #116] ; (802cb38 <HTTP_HistoryPage+0xa4>)
- 802cac2: 4638 mov r0, r7
- 802cac4: aa01 add r2, sp, #4
- 802cac6: f10d 0303 add.w r3, sp, #3
- 802caca: f7ff fbd1 bl 802c270 <GetParamValue>
- if (strcmp(value, "all") == 0)
- 802cace: a801 add r0, sp, #4
- 802cad0: 491a ldr r1, [pc, #104] ; (802cb3c <HTTP_HistoryPage+0xa8>)
- 802cad2: f7f5 f8a1 bl 8021c18 <strcmp>
- 802cad6: b9e0 cbnz r0, 802cb12 <HTTP_HistoryPage+0x7e>
- {
- if (!LOG_IsInit()) {
- 802cad8: f7fc fffa bl 8029ad0 <LOG_IsInit>
- 802cadc: b908 cbnz r0, 802cae2 <HTTP_HistoryPage+0x4e>
- return SEND_REQUIRED_NO;
- 802cade: 2001 movs r0, #1
- 802cae0: e027 b.n 802cb32 <HTTP_HistoryPage+0x9e>
- }
- if (fLogTransInprog == false) {
- 802cae2: 4d17 ldr r5, [pc, #92] ; (802cb40 <HTTP_HistoryPage+0xac>)
- 802cae4: 782b ldrb r3, [r5, #0]
- 802cae6: 2b00 cmp r3, #0
- 802cae8: d1f9 bne.n 802cade <HTTP_HistoryPage+0x4a>
- // Send log as raw data
- log_ptr = 0;
- 802caea: 4a16 ldr r2, [pc, #88] ; (802cb44 <HTTP_HistoryPage+0xb0>)
- 802caec: 6013 str r3, [r2, #0]
- log_size = History_GetTotalSTRCount() * STRING_SIZE_HISTORY;
- 802caee: f7fd f8e5 bl 8029cbc <History_GetTotalSTRCount>
- 802caf2: 4b15 ldr r3, [pc, #84] ; (802cb48 <HTTP_HistoryPage+0xb4>)
- sprintf(bufOut, "HTTP/1.1 200 OK\r\nContent-Length:%lu\r\n\r\n", log_size);
- 802caf4: 4915 ldr r1, [pc, #84] ; (802cb4c <HTTP_HistoryPage+0xb8>)
- if (fLogTransInprog == false) {
- // Send log as raw data
- log_ptr = 0;
- log_size = History_GetTotalSTRCount() * STRING_SIZE_HISTORY;
- 802caf6: 2264 movs r2, #100 ; 0x64
- 802caf8: 4342 muls r2, r0
- sprintf(bufOut, "HTTP/1.1 200 OK\r\nContent-Length:%lu\r\n\r\n", log_size);
- 802cafa: 4620 mov r0, r4
- if (fLogTransInprog == false) {
- // Send log as raw data
- log_ptr = 0;
- log_size = History_GetTotalSTRCount() * STRING_SIZE_HISTORY;
- 802cafc: 601a str r2, [r3, #0]
- sprintf(bufOut, "HTTP/1.1 200 OK\r\nContent-Length:%lu\r\n\r\n", log_size);
- 802cafe: f7fa fe89 bl 8027814 <tfp_sprintf>
- *lenBufOut = strlen(bufOut);
- 802cb02: 4620 mov r0, r4
- 802cb04: f7f5 f9d4 bl 8021eb0 <strlen>
- // Set file transfer in progress flag
- fLogTransInprog = true;
- 802cb08: 2301 movs r3, #1
- log_ptr = 0;
- log_size = History_GetTotalSTRCount() * STRING_SIZE_HISTORY;
- sprintf(bufOut, "HTTP/1.1 200 OK\r\nContent-Length:%lu\r\n\r\n", log_size);
- *lenBufOut = strlen(bufOut);
- 802cb0a: 8030 strh r0, [r6, #0]
- // Set file transfer in progress flag
- fLogTransInprog = true;
- 802cb0c: 702b strb r3, [r5, #0]
- return SEND_REQUIRED_FILE;
- 802cb0e: 2002 movs r0, #2
- 802cb10: e00f b.n 802cb32 <HTTP_HistoryPage+0x9e>
- // We send nothing if file transfer already in progress
- return SEND_REQUIRED_NO;
- }
- }
- else {
- if (!LOG_IsInit()) {
- 802cb12: f7fc ffdd bl 8029ad0 <LOG_IsInit>
- 802cb16: 2800 cmp r0, #0
- 802cb18: d0e1 beq.n 802cade <HTTP_HistoryPage+0x4a>
- return SEND_REQUIRED_NO;
- }
- else {
- HTTP_GetHistoryPage(bufOut, atoi(value));
- 802cb1a: a801 add r0, sp, #4
- 802cb1c: f7f4 fed0 bl 80218c0 <atoi>
- 802cb20: 4601 mov r1, r0
- 802cb22: 4620 mov r0, r4
- 802cb24: f001 f872 bl 802dc0c <HTTP_GetHistoryPage>
- *lenBufOut = strlen(bufOut);
- 802cb28: 4620 mov r0, r4
- 802cb2a: f7f5 f9c1 bl 8021eb0 <strlen>
- 802cb2e: 8030 strh r0, [r6, #0]
- return SEND_REQUIRED_YES;
- 802cb30: 4628 mov r0, r5
- }
- }
- }
- 802cb32: b007 add sp, #28
- 802cb34: bdf0 pop {r4, r5, r6, r7, pc}
- 802cb36: bf00 nop
- 802cb38: 08040e48 .word 0x08040e48
- 802cb3c: 08040e4e .word 0x08040e4e
- 802cb40: 20000d2c .word 0x20000d2c
- 802cb44: 20000d24 .word 0x20000d24
- 802cb48: 20000d30 .word 0x20000d30
- 802cb4c: 08040e52 .word 0x08040e52
- 0802cb50 <HTTP_ChangeUserPwd>:
- /**
- * @brief Смена пароля пользователя
- * @retval None
- */
- int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802cb50: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 802cb54: b0b0 sub sp, #192 ; 0xc0
- 802cb56: 4605 mov r5, r0
- 802cb58: 460c mov r4, r1
- uint8_t valueLen, valueLen2, user_id;
- char WebLogin[MAX_WEB_LOGIN_LEN];
- (void)lenBufIn;
- memset(login, 0, 20);
- 802cb5a: 2214 movs r2, #20
- 802cb5c: 2100 movs r1, #0
- 802cb5e: a80a add r0, sp, #40 ; 0x28
- /**
- * @brief Смена пароля пользователя
- * @retval None
- */
- int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
- {
- 802cb60: 461e mov r6, r3
- uint8_t valueLen, valueLen2, user_id;
- char WebLogin[MAX_WEB_LOGIN_LEN];
- (void)lenBufIn;
- memset(login, 0, 20);
- 802cb62: f7f4 ffcd bl 8021b00 <memset>
- memset(password, 0, 20);
- 802cb66: 2100 movs r1, #0
- 802cb68: 2214 movs r2, #20
- 802cb6a: a80f add r0, sp, #60 ; 0x3c
- 802cb6c: f7f4 ffc8 bl 8021b00 <memset>
- memset(tempStr, 0, 50);
- memset(value, 0, 20);
- 802cb70: af05 add r7, sp, #20
- (void)lenBufIn;
- memset(login, 0, 20);
- memset(password, 0, 20);
- memset(tempStr, 0, 50);
- 802cb72: 2100 movs r1, #0
- 802cb74: 2232 movs r2, #50 ; 0x32
- 802cb76: a814 add r0, sp, #80 ; 0x50
- 802cb78: f7f4 ffc2 bl 8021b00 <memset>
- memset(value, 0, 20);
- 802cb7c: 2100 movs r1, #0
- 802cb7e: 2214 movs r2, #20
- 802cb80: 4638 mov r0, r7
- 802cb82: f7f4 ffbd bl 8021b00 <memset>
- ClearParamString(bufIn);
- 802cb86: 4628 mov r0, r5
- 802cb88: f7ff fee0 bl 802c94c <ClearParamString>
- strncpy(tempStr, bufIn, 110);
- 802cb8c: 226e movs r2, #110 ; 0x6e
- 802cb8e: 4629 mov r1, r5
- 802cb90: a814 add r0, sp, #80 ; 0x50
- 802cb92: f7f5 fa45 bl 8022020 <strncpy>
- strcpy(bufOut, HTTP_200_OK);
- if (GetParamValue(tempStr, "username=", login, &valueLen) &&
- 802cb96: f10d 0806 add.w r8, sp, #6
- ClearParamString(bufIn);
- strncpy(tempStr, bufIn, 110);
- strcpy(bufOut, HTTP_200_OK);
- 802cb9a: 4933 ldr r1, [pc, #204] ; (802cc68 <HTTP_ChangeUserPwd+0x118>)
- 802cb9c: 4620 mov r0, r4
- 802cb9e: f7f5 f929 bl 8021df4 <strcpy>
- if (GetParamValue(tempStr, "username=", login, &valueLen) &&
- 802cba2: a814 add r0, sp, #80 ; 0x50
- 802cba4: 4931 ldr r1, [pc, #196] ; (802cc6c <HTTP_ChangeUserPwd+0x11c>)
- 802cba6: aa0a add r2, sp, #40 ; 0x28
- 802cba8: 4643 mov r3, r8
- 802cbaa: f7ff fb61 bl 802c270 <GetParamValue>
- 802cbae: 2800 cmp r0, #0
- 802cbb0: d04e beq.n 802cc50 <HTTP_ChangeUserPwd+0x100>
- GetParamValue(tempStr, "oldpass=", password, &valueLen))
- 802cbb2: a814 add r0, sp, #80 ; 0x50
- 802cbb4: 492e ldr r1, [pc, #184] ; (802cc70 <HTTP_ChangeUserPwd+0x120>)
- 802cbb6: aa0f add r2, sp, #60 ; 0x3c
- 802cbb8: 4643 mov r3, r8
- 802cbba: f7ff fb59 bl 802c270 <GetParamValue>
- strncpy(tempStr, bufIn, 110);
- strcpy(bufOut, HTTP_200_OK);
- if (GetParamValue(tempStr, "username=", login, &valueLen) &&
- 802cbbe: 2800 cmp r0, #0
- 802cbc0: d046 beq.n 802cc50 <HTTP_ChangeUserPwd+0x100>
- 802cbc2: 2500 movs r5, #0
- GetParamValue(tempStr, "oldpass=", password, &valueLen))
- {
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++)
- {
- memset(value, 0, 20);
- 802cbc4: 2100 movs r1, #0
- 802cbc6: 2214 movs r2, #20
- 802cbc8: 4638 mov r0, r7
- 802cbca: f7f4 ff99 bl 8021b00 <memset>
- memset(WebLogin, 0, MAX_WEB_LOGIN_LEN);
- 802cbce: 2100 movs r1, #0
- 802cbd0: 220b movs r2, #11
- 802cbd2: a802 add r0, sp, #8
- 802cbd4: f7f4 ff94 bl 8021b00 <memset>
- GetUserLogin(user_id, WebLogin, &valueLen);
- 802cbd8: 4628 mov r0, r5
- 802cbda: a902 add r1, sp, #8
- 802cbdc: 4642 mov r2, r8
- 802cbde: f7fb f903 bl 8027de8 <GetUserLogin>
- GetUserPassword(user_id, value, &valueLen2);
- 802cbe2: 4628 mov r0, r5
- 802cbe4: 4639 mov r1, r7
- 802cbe6: f10d 0207 add.w r2, sp, #7
- 802cbea: f7fb f913 bl 8027e14 <GetUserPassword>
- /* Check login and password */
- if ((strncmp(WebLogin, login, MAX_WEB_LOGIN_LEN) == 0) &&
- 802cbee: a802 add r0, sp, #8
- 802cbf0: a90a add r1, sp, #40 ; 0x28
- 802cbf2: 220b movs r2, #11
- 802cbf4: f7f5 f9be bl 8021f74 <strncmp>
- 802cbf8: bb18 cbnz r0, 802cc42 <HTTP_ChangeUserPwd+0xf2>
- (memcmp(password, value, 11) == 0))
- 802cbfa: 4639 mov r1, r7
- 802cbfc: a80f add r0, sp, #60 ; 0x3c
- 802cbfe: 220b movs r2, #11
- 802cc00: f7f4 fe92 bl 8021928 <memcmp>
- memset(value, 0, 20);
- memset(WebLogin, 0, MAX_WEB_LOGIN_LEN);
- GetUserLogin(user_id, WebLogin, &valueLen);
- GetUserPassword(user_id, value, &valueLen2);
- /* Check login and password */
- if ((strncmp(WebLogin, login, MAX_WEB_LOGIN_LEN) == 0) &&
- 802cc04: 4601 mov r1, r0
- 802cc06: b9e0 cbnz r0, 802cc42 <HTTP_ChangeUserPwd+0xf2>
- (memcmp(password, value, 11) == 0))
- {
- memset(password, 0, 20);
- 802cc08: 2214 movs r2, #20
- 802cc0a: a80f add r0, sp, #60 ; 0x3c
- 802cc0c: f7f4 ff78 bl 8021b00 <memset>
- if (GetParamValue(tempStr, "newpass=", password, &valueLen))
- 802cc10: a814 add r0, sp, #80 ; 0x50
- 802cc12: 4918 ldr r1, [pc, #96] ; (802cc74 <HTTP_ChangeUserPwd+0x124>)
- 802cc14: aa0f add r2, sp, #60 ; 0x3c
- 802cc16: 4643 mov r3, r8
- 802cc18: f7ff fb2a bl 802c270 <GetParamValue>
- 802cc1c: b1c0 cbz r0, 802cc50 <HTTP_ChangeUserPwd+0x100>
- {
- memcpy(sSettings.sAuth[user_id].password, password, 11);
- 802cc1e: 4b16 ldr r3, [pc, #88] ; (802cc78 <HTTP_ChangeUserPwd+0x128>)
- 802cc20: 2217 movs r2, #23
- 802cc22: fb02 3005 mla r0, r2, r5, r3
- 802cc26: a90f add r1, sp, #60 ; 0x3c
- 802cc28: 220b movs r2, #11
- 802cc2a: 3005 adds r0, #5
- 802cc2c: f7f4 feae bl 802198c <memcpy>
- HTTP_SaveSettings();
- 802cc30: f001 f8c4 bl 802ddbc <HTTP_SaveSettings>
- log_event_data(LOG_PSW_CHANGE, "Администратор");
- 802cc34: 2003 movs r0, #3
- 802cc36: 4911 ldr r1, [pc, #68] ; (802cc7c <HTTP_ChangeUserPwd+0x12c>)
- 802cc38: f7fc ff10 bl 8029a5c <log_event_data>
- strcat(bufOut, "Пароль успешно изменён");
- 802cc3c: 4620 mov r0, r4
- 802cc3e: 4910 ldr r1, [pc, #64] ; (802cc80 <HTTP_ChangeUserPwd+0x130>)
- 802cc40: e008 b.n 802cc54 <HTTP_ChangeUserPwd+0x104>
- strcpy(bufOut, HTTP_200_OK);
- if (GetParamValue(tempStr, "username=", login, &valueLen) &&
- GetParamValue(tempStr, "oldpass=", password, &valueLen))
- {
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++)
- 802cc42: 3501 adds r5, #1
- 802cc44: b2ed uxtb r5, r5
- 802cc46: 2d02 cmp r5, #2
- 802cc48: d1bc bne.n 802cbc4 <HTTP_ChangeUserPwd+0x74>
- *lenBufOut = strlen(bufOut);
- return SEND_REQUIRED_YES;
- }
- }
- }
- strcat(bufOut, "Введён неверный пароль!");
- 802cc4a: 4620 mov r0, r4
- 802cc4c: 490d ldr r1, [pc, #52] ; (802cc84 <HTTP_ChangeUserPwd+0x134>)
- 802cc4e: e001 b.n 802cc54 <HTTP_ChangeUserPwd+0x104>
- *lenBufOut = strlen(bufOut);
- return SEND_REQUIRED_YES;
- }
- else {
- strcat(bufOut, "Введены некорректные данные!");
- 802cc50: 490d ldr r1, [pc, #52] ; (802cc88 <HTTP_ChangeUserPwd+0x138>)
- 802cc52: 4620 mov r0, r4
- 802cc54: f7f4 ffba bl 8021bcc <strcat>
- *lenBufOut = strlen(bufOut);
- 802cc58: 4620 mov r0, r4
- 802cc5a: f7f5 f929 bl 8021eb0 <strlen>
- 802cc5e: 8030 strh r0, [r6, #0]
- return SEND_REQUIRED_YES;
- }
- }
- 802cc60: 2000 movs r0, #0
- 802cc62: b030 add sp, #192 ; 0xc0
- 802cc64: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 802cc68: 08044669 .word 0x08044669
- 802cc6c: 08040e7a .word 0x08040e7a
- 802cc70: 08040e84 .word 0x08040e84
- 802cc74: 08040e8d .word 0x08040e8d
- 802cc78: 2000d2dc .word 0x2000d2dc
- 802cc7c: 08039ab8 .word 0x08039ab8
- 802cc80: 08040e96 .word 0x08040e96
- 802cc84: 08040ef7 .word 0x08040ef7
- 802cc88: 08040ec1 .word 0x08040ec1
- 0802cc8c <http_recv>:
- * @param p: pointer to a packet buffer
- * @param err: LwIP error code
- * @retval err
- */
- static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
- {
- 802cc8c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 802cc90: b09d sub sp, #116 ; 0x74
- 802cc92: 4690 mov r8, r2
- struct http_state *hs;
- char CookieBuf[50];
- char *CookiePtr = NULL;
- char name[MAX_WEB_COOKIE_LEN];
- char id[MAX_WEB_COOKIE_LEN];
- uint8_t nameLen = 0, idLen = 0;
- 802cc94: 2200 movs r2, #0
- * @param p: pointer to a packet buffer
- * @param err: LwIP error code
- * @retval err
- */
- static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
- {
- 802cc96: 4604 mov r4, r0
- 802cc98: 460d mov r5, r1
- struct http_state *hs;
- char CookieBuf[50];
- char *CookiePtr = NULL;
- char name[MAX_WEB_COOKIE_LEN];
- char id[MAX_WEB_COOKIE_LEN];
- uint8_t nameLen = 0, idLen = 0;
- 802cc9a: f88d 200a strb.w r2, [sp, #10]
- 802cc9e: f88d 200b strb.w r2, [sp, #11]
- struct fs_file file = {0, 0};
- 802cca2: 9205 str r2, [sp, #20]
- 802cca4: 9206 str r2, [sp, #24]
-
- hs = arg;
- if (err == ERR_OK && p != NULL)
- 802cca6: 2b00 cmp r3, #0
- 802cca8: f040 83ac bne.w 802d404 <http_recv+0x778>
- 802ccac: f1b8 0f00 cmp.w r8, #0
- 802ccb0: f000 83a8 beq.w 802d404 <http_recv+0x778>
- {
- tcp_recved(pcb, p->tot_len);
- 802ccb4: 4608 mov r0, r1
- 802ccb6: f8b8 1008 ldrh.w r1, [r8, #8]
- 802ccba: f003 fbbb bl 8030434 <tcp_recved>
-
- if (hs->file == NULL)
- 802ccbe: f8d4 9000 ldr.w r9, [r4]
- 802ccc2: f1b9 0f00 cmp.w r9, #0
- 802ccc6: f040 839a bne.w 802d3fe <http_recv+0x772>
- printLen = p->tot_len;
- memcpy(printBuf, p->payload , printLen);
- printf(printBuf);
- */
- receivedBufLen = p->tot_len;
- memcpy(receiveBuf, p->payload , receivedBufLen);
- 802ccca: f8df a2e0 ldr.w sl, [pc, #736] ; 802cfac <http_recv+0x320>
- {
- tcp_recved(pcb, p->tot_len);
-
- if (hs->file == NULL)
- {
- data = p->payload;
- 802ccce: f8d8 6004 ldr.w r6, [r8, #4]
- /*
- printLen = p->tot_len;
- memcpy(printBuf, p->payload , printLen);
- printf(printBuf);
- */
- receivedBufLen = p->tot_len;
- 802ccd2: f8b8 2008 ldrh.w r2, [r8, #8]
- 802ccd6: 4fa0 ldr r7, [pc, #640] ; (802cf58 <http_recv+0x2cc>)
- memcpy(receiveBuf, p->payload , receivedBufLen);
- 802ccd8: 4650 mov r0, sl
- 802ccda: 4631 mov r1, r6
- /*
- printLen = p->tot_len;
- memcpy(printBuf, p->payload , printLen);
- printf(printBuf);
- */
- receivedBufLen = p->tot_len;
- 802ccdc: 803a strh r2, [r7, #0]
- memcpy(receiveBuf, p->payload , receivedBufLen);
- 802ccde: f7f4 fe55 bl 802198c <memcpy>
- receiveBuf[receivedBufLen] = '\0';
- 802cce2: 883b ldrh r3, [r7, #0]
- // printf("receive %s \r\n", receiveBuf);
- /* Get cookie "uname" value */
- CookiePtr = strstr(receiveBuf, "uname=");
- 802cce4: 499d ldr r1, [pc, #628] ; (802cf5c <http_recv+0x2d0>)
- printf(printBuf);
- */
- receivedBufLen = p->tot_len;
- memcpy(receiveBuf, p->payload , receivedBufLen);
- receiveBuf[receivedBufLen] = '\0';
- 802cce6: f80a 9003 strb.w r9, [sl, r3]
- // printf("receive %s \r\n", receiveBuf);
- /* Get cookie "uname" value */
- CookiePtr = strstr(receiveBuf, "uname=");
- 802ccea: 4650 mov r0, sl
- 802ccec: f7f5 fb60 bl 80223b0 <strstr>
- strncpy(CookieBuf, CookiePtr, 50);
- 802ccf0: af0f add r7, sp, #60 ; 0x3c
- memcpy(receiveBuf, p->payload , receivedBufLen);
- receiveBuf[receivedBufLen] = '\0';
- // printf("receive %s \r\n", receiveBuf);
- /* Get cookie "uname" value */
- CookiePtr = strstr(receiveBuf, "uname=");
- 802ccf2: 4601 mov r1, r0
- strncpy(CookieBuf, CookiePtr, 50);
- 802ccf4: 2232 movs r2, #50 ; 0x32
- 802ccf6: 4638 mov r0, r7
- 802ccf8: f7f5 f992 bl 8022020 <strncpy>
- //printf("********CookieBuf1= %s\r\n", CookieBuf);
- memset(name, 0, MAX_WEB_COOKIE_LEN);
- 802ccfc: 4649 mov r1, r9
- 802ccfe: 2210 movs r2, #16
- 802cd00: a807 add r0, sp, #28
- 802cd02: f7f4 fefd bl 8021b00 <memset>
- GetCookieValue(CookieBuf, "uname=", name, &nameLen);
- 802cd06: f10d 030a add.w r3, sp, #10
- 802cd0a: aa07 add r2, sp, #28
- 802cd0c: 4993 ldr r1, [pc, #588] ; (802cf5c <http_recv+0x2d0>)
- 802cd0e: 4638 mov r0, r7
- 802cd10: f7ff fdee bl 802c8f0 <GetCookieValue>
- //printf("********CookieBuf2= %s\r\n", CookieBuf);
- //printf("********uname= %s\r\n", name);
- /* Get cookie "id" value */
- CookiePtr = strstr(receiveBuf, "id=");
- 802cd14: 4650 mov r0, sl
- 802cd16: 4992 ldr r1, [pc, #584] ; (802cf60 <http_recv+0x2d4>)
- 802cd18: f7f5 fb4a bl 80223b0 <strstr>
- strncpy(CookieBuf, CookiePtr, 50);
- //printf("********CookieBuf1= %s\r\n", CookieBuf);
- memset(id, 0, MAX_WEB_COOKIE_LEN);
- 802cd1c: f10d 0b2c add.w fp, sp, #44 ; 0x2c
- GetCookieValue(CookieBuf, "uname=", name, &nameLen);
- //printf("********CookieBuf2= %s\r\n", CookieBuf);
- //printf("********uname= %s\r\n", name);
- /* Get cookie "id" value */
- CookiePtr = strstr(receiveBuf, "id=");
- 802cd20: 4601 mov r1, r0
- strncpy(CookieBuf, CookiePtr, 50);
- 802cd22: 2232 movs r2, #50 ; 0x32
- 802cd24: 4638 mov r0, r7
- 802cd26: f7f5 f97b bl 8022020 <strncpy>
- //printf("********CookieBuf1= %s\r\n", CookieBuf);
- memset(id, 0, MAX_WEB_COOKIE_LEN);
- 802cd2a: 4649 mov r1, r9
- 802cd2c: 2210 movs r2, #16
- 802cd2e: 4658 mov r0, fp
- 802cd30: f7f4 fee6 bl 8021b00 <memset>
- GetCookieValue(CookieBuf, "id=", id, &idLen);
- 802cd34: 465a mov r2, fp
- 802cd36: f10d 030b add.w r3, sp, #11
- 802cd3a: 4638 mov r0, r7
- 802cd3c: 4988 ldr r1, [pc, #544] ; (802cf60 <http_recv+0x2d4>)
- 802cd3e: f7ff fdd7 bl 802c8f0 <GetCookieValue>
- /* Id of currently logged-in user */
- uint8_t user_id;
- /* Level of currently logged-in user */
- seclevel = 0xFF;
- 802cd42: 4b88 ldr r3, [pc, #544] ; (802cf64 <http_recv+0x2d8>)
- 802cd44: 22ff movs r2, #255 ; 0xff
- 802cd46: 701a strb r2, [r3, #0]
- /**
- * @brief Чтение Cookie пользователя
- */
- static void HTTP_GetUserCookie(uint8_t user_id, char *str, uint8_t *len)
- {
- sprintf(str, "%s", users[user_id].cookie);
- 802cd48: 4b87 ldr r3, [pc, #540] ; (802cf68 <http_recv+0x2dc>)
- uint8_t user_id;
- /* Level of currently logged-in user */
- seclevel = 0xFF;
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- HTTP_GetUserCookie(user_id, CookieBuf, &idLen);
- 802cd4a: 46ba mov sl, r7
- /**
- * @brief Чтение Cookie пользователя
- */
- static void HTTP_GetUserCookie(uint8_t user_id, char *str, uint8_t *len)
- {
- sprintf(str, "%s", users[user_id].cookie);
- 802cd4c: 2214 movs r2, #20
- 802cd4e: fb02 3209 mla r2, r2, r9, r3
- 802cd52: 4986 ldr r1, [pc, #536] ; (802cf6c <http_recv+0x2e0>)
- 802cd54: 9301 str r3, [sp, #4]
- 802cd56: 4650 mov r0, sl
- 802cd58: f7fa fd5c bl 8027814 <tfp_sprintf>
- *len = strlen(str);
- 802cd5c: 4650 mov r0, sl
- 802cd5e: f7f5 f8a7 bl 8021eb0 <strlen>
- 802cd62: 4602 mov r2, r0
- 802cd64: f88d 000b strb.w r0, [sp, #11]
- /* Level of currently logged-in user */
- seclevel = 0xFF;
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- HTTP_GetUserCookie(user_id, CookieBuf, &idLen);
- if (strncmp(id, CookieBuf, idLen) == 0 ) {
- 802cd68: b2d2 uxtb r2, r2
- 802cd6a: 4658 mov r0, fp
- 802cd6c: 4651 mov r1, sl
- 802cd6e: f7f5 f901 bl 8021f74 <strncmp>
- 802cd72: fa5f f789 uxtb.w r7, r9
- 802cd76: 4a7e ldr r2, [pc, #504] ; (802cf70 <http_recv+0x2e4>)
- 802cd78: 9b01 ldr r3, [sp, #4]
- 802cd7a: b940 cbnz r0, 802cd8e <http_recv+0x102>
- GetUserLevelInt(user_id, &seclevel);
- 802cd7c: 4638 mov r0, r7
- 802cd7e: 4979 ldr r1, [pc, #484] ; (802cf64 <http_recv+0x2d8>)
- 802cd80: 9201 str r2, [sp, #4]
- 802cd82: f7fb f85d bl 8027e40 <GetUserLevelInt>
- Authenticated = true;
- 802cd86: 9a01 ldr r2, [sp, #4]
- 802cd88: 2301 movs r3, #1
- 802cd8a: 7013 strb r3, [r2, #0]
- break;
- 802cd8c: e00a b.n 802cda4 <http_recv+0x118>
- }
- Authenticated = false;
- 802cd8e: 2100 movs r1, #0
- 802cd90: 7011 strb r1, [r2, #0]
- 802cd92: f109 0901 add.w r9, r9, #1
- seclevel = 0xFF;
- 802cd96: 4a73 ldr r2, [pc, #460] ; (802cf64 <http_recv+0x2d8>)
- 802cd98: 21ff movs r1, #255 ; 0xff
- /* Id of currently logged-in user */
- uint8_t user_id;
- /* Level of currently logged-in user */
- seclevel = 0xFF;
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- 802cd9a: f1b9 0f02 cmp.w r9, #2
- GetUserLevelInt(user_id, &seclevel);
- Authenticated = true;
- break;
- }
- Authenticated = false;
- seclevel = 0xFF;
- 802cd9e: 7011 strb r1, [r2, #0]
- /* Id of currently logged-in user */
- uint8_t user_id;
- /* Level of currently logged-in user */
- seclevel = 0xFF;
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
- 802cda0: d1d4 bne.n 802cd4c <http_recv+0xc0>
- 802cda2: 464f mov r7, r9
- }
- Authenticated = false;
- seclevel = 0xFF;
- }
- if ( Authenticated == false && sSettings.sRADIUS.Auth_enable == false)
- 802cda4: 4b72 ldr r3, [pc, #456] ; (802cf70 <http_recv+0x2e4>)
- 802cda6: 781b ldrb r3, [r3, #0]
- 802cda8: 2b00 cmp r3, #0
- 802cdaa: f040 8136 bne.w 802d01a <http_recv+0x38e>
- 802cdae: 4b71 ldr r3, [pc, #452] ; (802cf74 <http_recv+0x2e8>)
- 802cdb0: f893 3378 ldrb.w r3, [r3, #888] ; 0x378
- 802cdb4: b933 cbnz r3, 802cdc4 <http_recv+0x138>
- {
- HTTP_LOGIN(sendBuf, &sendBufLoadLen);
- 802cdb6: 4f70 ldr r7, [pc, #448] ; (802cf78 <http_recv+0x2ec>)
- 802cdb8: 4e70 ldr r6, [pc, #448] ; (802cf7c <http_recv+0x2f0>)
- 802cdba: 4638 mov r0, r7
- 802cdbc: 4631 mov r1, r6
- 802cdbe: f7ff f9ff bl 802c1c0 <HTTP_LOGIN>
- 802cdc2: e306 b.n 802d3d2 <http_recv+0x746>
- tcp_sent(pcb, http_sent);
- }
- else if ( Authenticated == false )//&& sSettings.sRADIUS.Auth_enable == true
- {
- if (strncmp(data, "GET /main.css", 13) == 0) // +
- 802cdc4: 4630 mov r0, r6
- 802cdc6: 496e ldr r1, [pc, #440] ; (802cf80 <http_recv+0x2f4>)
- 802cdc8: 220d movs r2, #13
- 802cdca: f7f5 f8d3 bl 8021f74 <strncmp>
- 802cdce: b900 cbnz r0, 802cdd2 <http_recv+0x146>
- 802cdd0: e129 b.n 802d026 <http_recv+0x39a>
- hs->file = file.data;
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /rotek.png", 14) == 0) // +
- 802cdd2: 4630 mov r0, r6
- 802cdd4: 496b ldr r1, [pc, #428] ; (802cf84 <http_recv+0x2f8>)
- 802cdd6: 220e movs r2, #14
- 802cdd8: f7f5 f8cc bl 8021f74 <strncmp>
- 802cddc: b900 cbnz r0, 802cde0 <http_recv+0x154>
- 802cdde: e12a b.n 802d036 <http_recv+0x3aa>
- hs->file = file.data;
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /favicon.ico", 16) == 0) // ?
- 802cde0: 4630 mov r0, r6
- 802cde2: 4969 ldr r1, [pc, #420] ; (802cf88 <http_recv+0x2fc>)
- 802cde4: 2210 movs r2, #16
- 802cde6: f7f5 f8c5 bl 8021f74 <strncmp>
- 802cdea: b900 cbnz r0, 802cdee <http_recv+0x162>
- 802cdec: e12b b.n 802d046 <http_recv+0x3ba>
- hs->file = file.data;
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /role.js", 12) == 0)
- 802cdee: 4630 mov r0, r6
- 802cdf0: 4966 ldr r1, [pc, #408] ; (802cf8c <http_recv+0x300>)
- 802cdf2: 220c movs r2, #12
- 802cdf4: f7f5 f8be bl 8021f74 <strncmp>
- 802cdf8: b900 cbnz r0, 802cdfc <http_recv+0x170>
- 802cdfa: e134 b.n 802d066 <http_recv+0x3da>
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if ((strncmp(data, "POST /login.cgi", 15) == 0) || (log_post_reqn > 0))
- 802cdfc: 4630 mov r0, r6
- 802cdfe: 4964 ldr r1, [pc, #400] ; (802cf90 <http_recv+0x304>)
- 802ce00: 220f movs r2, #15
- 802ce02: f7f5 f8b7 bl 8021f74 <strncmp>
- 802ce06: b120 cbz r0, 802ce12 <http_recv+0x186>
- 802ce08: 4b62 ldr r3, [pc, #392] ; (802cf94 <http_recv+0x308>)
- 802ce0a: 681b ldr r3, [r3, #0]
- 802ce0c: 2b00 cmp r3, #0
- 802ce0e: f000 80d5 beq.w 802cfbc <http_recv+0x330>
- {
- uint32_t i=0,size=0, S=1;
- int32_t j=0;
- char sizestring[6], *ptr;
- ContentLengthOffset =0;
- 802ce12: 4b61 ldr r3, [pc, #388] ; (802cf98 <http_recv+0x30c>)
- uint32_t i, offset = 0, req_data_received = 0;
- //printf("request 1: %d\r\n", receivedBufLen);
- /* parse packet for Content-length field */
- post_data_count = Parse_Content_Length(data, p->tot_len);
- 802ce14: f8b8 9008 ldrh.w r9, [r8, #8]
- {
- uint32_t i=0,size=0, S=1;
- int32_t j=0;
- char sizestring[6], *ptr;
- ContentLengthOffset =0;
- 802ce18: 2700 movs r7, #0
- 802ce1a: 601f str r7, [r3, #0]
- 802ce1c: e00a b.n 802ce34 <http_recv+0x1a8>
- /* find Content-Length data in packet buffer */
- for (i=0;i<len;i++)
- {
- if (strncmp ((char*)(data+i), Content_Length, 16)==0)
- 802ce1e: 19f0 adds r0, r6, r7
- 802ce20: 495e ldr r1, [pc, #376] ; (802cf9c <http_recv+0x310>)
- 802ce22: 2210 movs r2, #16
- 802ce24: f7f5 f8a6 bl 8021f74 <strncmp>
- 802ce28: b918 cbnz r0, 802ce32 <http_recv+0x1a6>
- {
- ContentLengthOffset = i+16;
- 802ce2a: 4b5b ldr r3, [pc, #364] ; (802cf98 <http_recv+0x30c>)
- 802ce2c: 3710 adds r7, #16
- 802ce2e: 601f str r7, [r3, #0]
- 802ce30: e002 b.n 802ce38 <http_recv+0x1ac>
- char sizestring[6], *ptr;
- ContentLengthOffset =0;
- /* find Content-Length data in packet buffer */
- for (i=0;i<len;i++)
- 802ce32: 3701 adds r7, #1
- 802ce34: 454f cmp r7, r9
- 802ce36: d3f2 bcc.n 802ce1e <http_recv+0x192>
- ContentLengthOffset = i+16;
- break;
- }
- }
- /* read Content-Length value */
- if (ContentLengthOffset)
- 802ce38: 4b57 ldr r3, [pc, #348] ; (802cf98 <http_recv+0x30c>)
- 802ce3a: 681a ldr r2, [r3, #0]
- 802ce3c: 4618 mov r0, r3
- 802ce3e: b90a cbnz r2, 802ce44 <http_recv+0x1b8>
- * @param len : buffer length
- * @retval size : Content_length in numeric format
- */
- static uint32_t Parse_Content_Length(char *data, uint32_t len)
- {
- uint32_t i=0,size=0, S=1;
- 802ce40: 2200 movs r2, #0
- 802ce42: e01d b.n 802ce80 <http_recv+0x1f4>
- }
- /* read Content-Length value */
- if (ContentLengthOffset)
- {
- i=0;
- ptr = (char*)(data + ContentLengthOffset);
- 802ce44: eb06 0e02 add.w lr, r6, r2
- }
- }
- /* read Content-Length value */
- if (ContentLengthOffset)
- {
- i=0;
- 802ce48: 2300 movs r3, #0
- 802ce4a: e002 b.n 802ce52 <http_recv+0x1c6>
- ptr = (char*)(data + ContentLengthOffset);
- while(*(ptr+i)!=0x0d)
- {
- sizestring[i] = *(ptr+i);
- 802ce4c: af03 add r7, sp, #12
- 802ce4e: 55d9 strb r1, [r3, r7]
- i++;
- 802ce50: 3301 adds r3, #1
- /* read Content-Length value */
- if (ContentLengthOffset)
- {
- i=0;
- ptr = (char*)(data + ContentLengthOffset);
- while(*(ptr+i)!=0x0d)
- 802ce52: f81e 1003 ldrb.w r1, [lr, r3]
- 802ce56: 290d cmp r1, #13
- 802ce58: eb03 0702 add.w r7, r3, r2
- 802ce5c: d1f6 bne.n 802ce4c <http_recv+0x1c0>
- 802ce5e: 6007 str r7, [r0, #0]
- {
- sizestring[i] = *(ptr+i);
- i++;
- ContentLengthOffset++;
- }
- if (i>0)
- 802ce60: 2b00 cmp r3, #0
- 802ce62: d0ed beq.n 802ce40 <http_recv+0x1b4>
- {
- /* transform string data into numeric format */
- for(j=i-1;j>=0;j--)
- 802ce64: 3b01 subs r3, #1
- * @param len : buffer length
- * @retval size : Content_length in numeric format
- */
- static uint32_t Parse_Content_Length(char *data, uint32_t len)
- {
- uint32_t i=0,size=0, S=1;
- 802ce66: 2101 movs r1, #1
- 802ce68: 2200 movs r2, #0
- {
- /* transform string data into numeric format */
- for(j=i-1;j>=0;j--)
- {
- size += (sizestring[j]-0x30)*S;
- S=S*10;
- 802ce6a: 200a movs r0, #10
- 802ce6c: e006 b.n 802ce7c <http_recv+0x1f0>
- if (i>0)
- {
- /* transform string data into numeric format */
- for(j=i-1;j>=0;j--)
- {
- size += (sizestring[j]-0x30)*S;
- 802ce6e: af03 add r7, sp, #12
- 802ce70: 5ddf ldrb r7, [r3, r7]
- 802ce72: 3f30 subs r7, #48 ; 0x30
- 802ce74: fb01 2207 mla r2, r1, r7, r2
- ContentLengthOffset++;
- }
- if (i>0)
- {
- /* transform string data into numeric format */
- for(j=i-1;j>=0;j--)
- 802ce78: 3b01 subs r3, #1
- {
- size += (sizestring[j]-0x30)*S;
- S=S*10;
- 802ce7a: 4341 muls r1, r0
- ContentLengthOffset++;
- }
- if (i>0)
- {
- /* transform string data into numeric format */
- for(j=i-1;j>=0;j--)
- 802ce7c: 2b00 cmp r3, #0
- 802ce7e: daf6 bge.n 802ce6e <http_recv+0x1e2>
- uint32_t i, offset = 0, req_data_received = 0;
- //printf("request 1: %d\r\n", receivedBufLen);
- /* parse packet for Content-length field */
- post_data_count = Parse_Content_Length(data, p->tot_len);
- 802ce80: 4f47 ldr r7, [pc, #284] ; (802cfa0 <http_recv+0x314>)
- //printf("Content-length: %d\r\n", (int)post_data_count);
- if (post_data_count < MAX_POST_REQ_LEN) {
- 802ce82: 2aff cmp r2, #255 ; 0xff
- uint32_t i, offset = 0, req_data_received = 0;
- //printf("request 1: %d\r\n", receivedBufLen);
- /* parse packet for Content-length field */
- post_data_count = Parse_Content_Length(data, p->tot_len);
- 802ce84: 603a str r2, [r7, #0]
- //printf("Content-length: %d\r\n", (int)post_data_count);
- if (post_data_count < MAX_POST_REQ_LEN) {
- 802ce86: d85e bhi.n 802cf46 <http_recv+0x2ba>
- memset(post_req_data, 0, MAX_POST_REQ_LEN);
- 802ce88: 4846 ldr r0, [pc, #280] ; (802cfa4 <http_recv+0x318>)
- /* parse packet for "\r\n\r\n" */
- for (i = 0; i < receivedBufLen; i++)
- 802ce8a: f8df 90cc ldr.w r9, [pc, #204] ; 802cf58 <http_recv+0x2cc>
- post_data_count = Parse_Content_Length(data, p->tot_len);
- //printf("Content-length: %d\r\n", (int)post_data_count);
- if (post_data_count < MAX_POST_REQ_LEN) {
- memset(post_req_data, 0, MAX_POST_REQ_LEN);
- 802ce8e: 2100 movs r1, #0
- 802ce90: f44f 7280 mov.w r2, #256 ; 0x100
- 802ce94: f7f4 fe34 bl 8021b00 <memset>
- /* parse packet for "\r\n\r\n" */
- for (i = 0; i < receivedBufLen; i++)
- 802ce98: 2700 movs r7, #0
- 802ce9a: e008 b.n 802ceae <http_recv+0x222>
- {
- if (strncmp ((char*)(data+i), "\r\n\r\n", 4) == 0)
- 802ce9c: 19f0 adds r0, r6, r7
- 802ce9e: 4942 ldr r1, [pc, #264] ; (802cfa8 <http_recv+0x31c>)
- 802cea0: 2204 movs r2, #4
- 802cea2: f7f5 f867 bl 8021f74 <strncmp>
- 802cea6: b908 cbnz r0, 802ceac <http_recv+0x220>
- {
- offset = i+4;
- 802cea8: 3704 adds r7, #4
- //printf("offset: %d\r\n", (int)offset);
- break;
- 802ceaa: e005 b.n 802ceb8 <http_recv+0x22c>
- if (post_data_count < MAX_POST_REQ_LEN) {
- memset(post_req_data, 0, MAX_POST_REQ_LEN);
- /* parse packet for "\r\n\r\n" */
- for (i = 0; i < receivedBufLen; i++)
- 802ceac: 3701 adds r7, #1
- 802ceae: f8b9 3000 ldrh.w r3, [r9]
- 802ceb2: 429f cmp r7, r3
- 802ceb4: d3f2 bcc.n 802ce9c <http_recv+0x210>
- tcp_sent(pcb, http_sent);
- }
- else if ((strncmp(data, "POST /login.cgi", 15) == 0) || (log_post_reqn > 0))
- {
- uint32_t i, offset = 0, req_data_received = 0;
- 802ceb6: 2700 movs r7, #0
- //printf("offset: %d\r\n", (int)offset);
- break;
- }
- }
- req_data_received = receivedBufLen - offset;
- 802ceb8: 4b27 ldr r3, [pc, #156] ; (802cf58 <http_recv+0x2cc>)
- 802ceba: f8b3 a000 ldrh.w sl, [r3]
- //printf("req data received: %d\r\n", (int)req_data_received);
- /* Check if "\r\n\r\n" was found */
- if (offset != 0) {
- 802cebe: b33f cbz r7, 802cf10 <http_recv+0x284>
- /* if data was splited in two packets */
- if (req_data_received < post_data_count) {
- 802cec0: f8df 90dc ldr.w r9, [pc, #220] ; 802cfa0 <http_recv+0x314>
- /* Copy request data to buffer */
- snprintf(post_req_data, req_data_received, "%s", receiveBuf);
- 802cec4: 4837 ldr r0, [pc, #220] ; (802cfa4 <http_recv+0x318>)
- /* Check if "\r\n\r\n" was found */
- if (offset != 0) {
- /* if data was splited in two packets */
- if (req_data_received < post_data_count) {
- 802cec6: f8d9 2000 ldr.w r2, [r9]
- //printf("offset: %d\r\n", (int)offset);
- break;
- }
- }
- req_data_received = receivedBufLen - offset;
- 802ceca: ebc7 0a0a rsb sl, r7, sl
- /* Check if "\r\n\r\n" was found */
- if (offset != 0) {
- /* if data was splited in two packets */
- if (req_data_received < post_data_count) {
- 802cece: 4592 cmp sl, r2
- 802ced0: d20b bcs.n 802ceea <http_recv+0x25e>
- /* Copy request data to buffer */
- snprintf(post_req_data, req_data_received, "%s", receiveBuf);
- 802ced2: 4b36 ldr r3, [pc, #216] ; (802cfac <http_recv+0x320>)
- 802ced4: 4a25 ldr r2, [pc, #148] ; (802cf6c <http_recv+0x2e0>)
- 802ced6: 4651 mov r1, sl
- 802ced8: f7fa fc7e bl 80277d8 <tfp_snprintf>
- //printf("copied: %d\r\n", (int)req_data_received);
- post_data_count -= req_data_received;
- 802cedc: f8d9 3000 ldr.w r3, [r9]
- 802cee0: ebca 0303 rsb r3, sl, r3
- 802cee4: f8c9 3000 str.w r3, [r9]
- 802cee8: e289 b.n 802d3fe <http_recv+0x772>
- }
- /* if data received completely */
- else {
- strncat(post_req_data, (char *)(data + offset), post_data_count);
- 802ceea: 19f1 adds r1, r6, r7
- 802ceec: f7f5 f810 bl 8021f10 <strncat>
- //printf("post_req_data: %s\r\n", post_req_data);
- if (HTTP_ConfirmWebPwd(post_req_data, sendBuf, strlen(post_req_data), &sendBufLoadLen) == SEND_REQUIRED_YES) {
- 802cef0: 482c ldr r0, [pc, #176] ; (802cfa4 <http_recv+0x318>)
- 802cef2: 4f21 ldr r7, [pc, #132] ; (802cf78 <http_recv+0x2ec>)
- 802cef4: 4e21 ldr r6, [pc, #132] ; (802cf7c <http_recv+0x2f0>)
- 802cef6: f7f4 ffdb bl 8021eb0 <strlen>
- 802cefa: 4639 mov r1, r7
- 802cefc: b282 uxth r2, r0
- 802cefe: 4633 mov r3, r6
- 802cf00: 4828 ldr r0, [pc, #160] ; (802cfa4 <http_recv+0x318>)
- 802cf02: f7ff f9e3 bl 802c2cc <HTTP_ConfirmWebPwd>
- 802cf06: 2800 cmp r0, #0
- 802cf08: d16f bne.n 802cfea <http_recv+0x35e>
- hs->file = sendBuf;
- 802cf0a: 6027 str r7, [r4, #0]
- hs->left = sendBufLoadLen;
- 802cf0c: 8833 ldrh r3, [r6, #0]
- 802cf0e: e073 b.n 802cff8 <http_recv+0x36c>
- /* request was fragmented before "\r\n\r\n" */
- else {
- //printf("no data found!\r\n");
- /* wait next packet */
- log_post_reqn++;
- 802cf10: 4e20 ldr r6, [pc, #128] ; (802cf94 <http_recv+0x308>)
- 802cf12: 6833 ldr r3, [r6, #0]
- 802cf14: 3301 adds r3, #1
- /* wait max 2 requests */
- if (log_post_reqn > 1) {
- 802cf16: 2b01 cmp r3, #1
- /* request was fragmented before "\r\n\r\n" */
- else {
- //printf("no data found!\r\n");
- /* wait next packet */
- log_post_reqn++;
- 802cf18: 6033 str r3, [r6, #0]
- /* wait max 2 requests */
- if (log_post_reqn > 1) {
- 802cf1a: f240 8270 bls.w 802d3fe <http_recv+0x772>
- /* Redirect to login page */
- fs_open("/login.html", &file);
- 802cf1e: a905 add r1, sp, #20
- 802cf20: 4823 ldr r0, [pc, #140] ; (802cfb0 <http_recv+0x324>)
- 802cf22: f7fe fe41 bl 802bba8 <fs_open>
- hs->file = file.data;
- 802cf26: 9b05 ldr r3, [sp, #20]
- 802cf28: 6023 str r3, [r4, #0]
- hs->left = file.len;
- 802cf2a: 9b06 ldr r3, [sp, #24]
- send_data(pcb, hs);
- 802cf2c: 4628 mov r0, r5
- /* wait max 2 requests */
- if (log_post_reqn > 1) {
- /* Redirect to login page */
- fs_open("/login.html", &file);
- hs->file = file.data;
- hs->left = file.len;
- 802cf2e: 6063 str r3, [r4, #4]
- send_data(pcb, hs);
- 802cf30: 4621 mov r1, r4
- 802cf32: f7fe fe75 bl 802bc20 <send_data>
- tcp_sent(pcb, http_sent);
- 802cf36: 4628 mov r0, r5
- 802cf38: 491e ldr r1, [pc, #120] ; (802cfb4 <http_recv+0x328>)
- 802cf3a: f003 fab1 bl 80304a0 <tcp_sent>
-
- /* End reqest */
- post_data_count = 0;
- 802cf3e: 4b18 ldr r3, [pc, #96] ; (802cfa0 <http_recv+0x314>)
- log_post_reqn = 0;
- 802cf40: 6037 str r7, [r6, #0]
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
-
- /* End reqest */
- post_data_count = 0;
- 802cf42: 601f str r7, [r3, #0]
- 802cf44: e25b b.n 802d3fe <http_recv+0x772>
- log_post_reqn = 0;
- }
- }
- }
- else {
- printf("Too long POST request!\r\n");
- 802cf46: 481c ldr r0, [pc, #112] ; (802cfb8 <http_recv+0x32c>)
- 802cf48: f7fa fc18 bl 802777c <tfp_printf>
- /* Ignore request */
- post_data_count = 0;
- log_post_reqn = 0;
- 802cf4c: 4a11 ldr r2, [pc, #68] ; (802cf94 <http_recv+0x308>)
- }
- }
- else {
- printf("Too long POST request!\r\n");
- /* Ignore request */
- post_data_count = 0;
- 802cf4e: 2300 movs r3, #0
- 802cf50: 603b str r3, [r7, #0]
- log_post_reqn = 0;
- 802cf52: 6013 str r3, [r2, #0]
- 802cf54: e05f b.n 802d016 <http_recv+0x38a>
- 802cf56: bf00 nop
- 802cf58: 20000d34 .word 0x20000d34
- 802cf5c: 08040c2a .word 0x08040c2a
- 802cf60: 08040c3f .word 0x08040c3f
- 802cf64: 20000711 .word 0x20000711
- 802cf68: 2000e23c .word 0x2000e23c
- 802cf6c: 080399bb .word 0x080399bb
- 802cf70: 20000d23 .word 0x20000d23
- 802cf74: 2000cfc4 .word 0x2000cfc4
- 802cf78: 2000d38c .word 0x2000d38c
- 802cf7c: 20000d20 .word 0x20000d20
- 802cf80: 08040f23 .word 0x08040f23
- 802cf84: 08040f31 .word 0x08040f31
- 802cf88: 08040f40 .word 0x08040f40
- 802cf8c: 08040f51 .word 0x08040f51
- 802cf90: 08040f5e .word 0x08040f5e
- 802cf94: 2000e238 .word 0x2000e238
- 802cf98: 20000d28 .word 0x20000d28
- 802cf9c: 0803c319 .word 0x0803c319
- 802cfa0: 2000e264 .word 0x2000e264
- 802cfa4: 2000e138 .word 0x2000e138
- 802cfa8: 08041130 .word 0x08041130
- 802cfac: 2000db5c .word 0x2000db5c
- 802cfb0: 08040f6e .word 0x08040f6e
- 802cfb4: 0802bc93 .word 0x0802bc93
- 802cfb8: 08040f7a .word 0x08040f7a
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- }
- else if (post_data_count > 0)
- 802cfbc: 4b87 ldr r3, [pc, #540] ; (802d1dc <http_recv+0x550>)
- 802cfbe: 681a ldr r2, [r3, #0]
- 802cfc0: 2a00 cmp r2, #0
- 802cfc2: d028 beq.n 802d016 <http_recv+0x38a>
- {
- strncat(post_req_data, data, post_data_count);
- 802cfc4: 4631 mov r1, r6
- 802cfc6: 4886 ldr r0, [pc, #536] ; (802d1e0 <http_recv+0x554>)
- 802cfc8: f7f4 ffa2 bl 8021f10 <strncat>
- //printf("copied: %d\r\n", (int)post_data_count);
- //printf("post_req_data: %s\r\n", post_req_data);
- if (HTTP_ConfirmWebPwd(post_req_data, sendBuf, strlen(post_req_data), &sendBufLoadLen) == SEND_REQUIRED_YES) {
- 802cfcc: 4884 ldr r0, [pc, #528] ; (802d1e0 <http_recv+0x554>)
- 802cfce: f7f4 ff6f bl 8021eb0 <strlen>
- 802cfd2: 4984 ldr r1, [pc, #528] ; (802d1e4 <http_recv+0x558>)
- 802cfd4: 4b84 ldr r3, [pc, #528] ; (802d1e8 <http_recv+0x55c>)
- 802cfd6: b282 uxth r2, r0
- 802cfd8: 4881 ldr r0, [pc, #516] ; (802d1e0 <http_recv+0x554>)
- 802cfda: f7ff f977 bl 802c2cc <HTTP_ConfirmWebPwd>
- 802cfde: b920 cbnz r0, 802cfea <http_recv+0x35e>
- hs->file = sendBuf;
- 802cfe0: 4b80 ldr r3, [pc, #512] ; (802d1e4 <http_recv+0x558>)
- 802cfe2: 6023 str r3, [r4, #0]
- hs->left = sendBufLoadLen;
- 802cfe4: 4b80 ldr r3, [pc, #512] ; (802d1e8 <http_recv+0x55c>)
- 802cfe6: 881b ldrh r3, [r3, #0]
- 802cfe8: e006 b.n 802cff8 <http_recv+0x36c>
- tcp_sent(pcb, http_sent);
- }
- else {
- /* Redirect to login page */
- fs_open("/login.html", &file);
- 802cfea: 4880 ldr r0, [pc, #512] ; (802d1ec <http_recv+0x560>)
- 802cfec: a905 add r1, sp, #20
- 802cfee: f7fe fddb bl 802bba8 <fs_open>
- hs->file = file.data;
- 802cff2: 9b05 ldr r3, [sp, #20]
- 802cff4: 6023 str r3, [r4, #0]
- hs->left = file.len;
- 802cff6: 9b06 ldr r3, [sp, #24]
- 802cff8: 6063 str r3, [r4, #4]
- send_data(pcb, hs);
- 802cffa: 4628 mov r0, r5
- 802cffc: 4621 mov r1, r4
- 802cffe: f7fe fe0f bl 802bc20 <send_data>
- tcp_sent(pcb, http_sent);
- 802d002: 4628 mov r0, r5
- 802d004: 497a ldr r1, [pc, #488] ; (802d1f0 <http_recv+0x564>)
- 802d006: f003 fa4b bl 80304a0 <tcp_sent>
- }
- /* End reqest */
- post_data_count = 0;
- 802d00a: 4a74 ldr r2, [pc, #464] ; (802d1dc <http_recv+0x550>)
- 802d00c: 2300 movs r3, #0
- 802d00e: 6013 str r3, [r2, #0]
- log_post_reqn = 0;
- 802d010: 4a78 ldr r2, [pc, #480] ; (802d1f4 <http_recv+0x568>)
- 802d012: 6013 str r3, [r2, #0]
- 802d014: e1f3 b.n 802d3fe <http_recv+0x772>
- }
- else
- {
- fs_open("/login.html", &file);
- 802d016: 4875 ldr r0, [pc, #468] ; (802d1ec <http_recv+0x560>)
- 802d018: e1e2 b.n 802d3e0 <http_recv+0x754>
- }
- else if ( Authenticated == true ) {
- if (strncmp(data, "GET /main.css", 13) == 0) // +
- 802d01a: 4630 mov r0, r6
- 802d01c: 4976 ldr r1, [pc, #472] ; (802d1f8 <http_recv+0x56c>)
- 802d01e: 220d movs r2, #13
- 802d020: f7f4 ffa8 bl 8021f74 <strncmp>
- 802d024: b908 cbnz r0, 802d02a <http_recv+0x39e>
- {
- fs_open("/main.css", &file);
- 802d026: 4875 ldr r0, [pc, #468] ; (802d1fc <http_recv+0x570>)
- 802d028: e1da b.n 802d3e0 <http_recv+0x754>
- hs->file = file.data;
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /rotek.png", 14) == 0) // +
- 802d02a: 4630 mov r0, r6
- 802d02c: 4974 ldr r1, [pc, #464] ; (802d200 <http_recv+0x574>)
- 802d02e: 220e movs r2, #14
- 802d030: f7f4 ffa0 bl 8021f74 <strncmp>
- 802d034: b908 cbnz r0, 802d03a <http_recv+0x3ae>
- {
- fs_open("/rotek.png", &file);
- 802d036: 4873 ldr r0, [pc, #460] ; (802d204 <http_recv+0x578>)
- 802d038: e1d2 b.n 802d3e0 <http_recv+0x754>
- hs->file = file.data;
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /favicon.ico", 16) == 0) // ?
- 802d03a: 4630 mov r0, r6
- 802d03c: 4972 ldr r1, [pc, #456] ; (802d208 <http_recv+0x57c>)
- 802d03e: 2210 movs r2, #16
- 802d040: f7f4 ff98 bl 8021f74 <strncmp>
- 802d044: b908 cbnz r0, 802d04a <http_recv+0x3be>
- {
- fs_open("/favicon.ico", &file);
- 802d046: 4871 ldr r0, [pc, #452] ; (802d20c <http_recv+0x580>)
- 802d048: e1ca b.n 802d3e0 <http_recv+0x754>
- hs->file = file.data;
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /main.js", 12) == 0) // +
- 802d04a: 4630 mov r0, r6
- 802d04c: 4970 ldr r1, [pc, #448] ; (802d210 <http_recv+0x584>)
- 802d04e: 220c movs r2, #12
- 802d050: f7f4 ff90 bl 8021f74 <strncmp>
- 802d054: b908 cbnz r0, 802d05a <http_recv+0x3ce>
- {
- fs_open("/main.js", &file);
- 802d056: 486f ldr r0, [pc, #444] ; (802d214 <http_recv+0x588>)
- 802d058: e1c2 b.n 802d3e0 <http_recv+0x754>
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
-
- }
- else if (strncmp(data, "GET /role.js", 12) == 0)
- 802d05a: 4630 mov r0, r6
- 802d05c: 496e ldr r1, [pc, #440] ; (802d218 <http_recv+0x58c>)
- 802d05e: 220c movs r2, #12
- 802d060: f7f4 ff88 bl 8021f74 <strncmp>
- 802d064: b908 cbnz r0, 802d06a <http_recv+0x3de>
- {
- fs_open("/role.js", &file);
- 802d066: 486d ldr r0, [pc, #436] ; (802d21c <http_recv+0x590>)
- 802d068: e1ba b.n 802d3e0 <http_recv+0x754>
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /settings.html", 18) == 0) // +
- 802d06a: 4630 mov r0, r6
- 802d06c: 496c ldr r1, [pc, #432] ; (802d220 <http_recv+0x594>)
- 802d06e: 2212 movs r2, #18
- 802d070: f7f4 ff80 bl 8021f74 <strncmp>
- 802d074: b940 cbnz r0, 802d088 <http_recv+0x3fc>
- {
- HTTP_UpdateUserLoginTime(user_id);
- 802d076: 4638 mov r0, r7
- 802d078: f7fe fd84 bl 802bb84 <HTTP_UpdateUserLoginTime>
- if (seclevel == 0){
- 802d07c: 4b69 ldr r3, [pc, #420] ; (802d224 <http_recv+0x598>)
- 802d07e: 781b ldrb r3, [r3, #0]
- 802d080: 2b00 cmp r3, #0
- 802d082: f040 81ac bne.w 802d3de <http_recv+0x752>
- 802d086: e15f b.n 802d348 <http_recv+0x6bc>
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- }
- else if (strncmp(data, "GET /info.html", 14) == 0) // +
- 802d088: 4630 mov r0, r6
- 802d08a: 4967 ldr r1, [pc, #412] ; (802d228 <http_recv+0x59c>)
- 802d08c: 220e movs r2, #14
- 802d08e: f7f4 ff71 bl 8021f74 <strncmp>
- 802d092: b920 cbnz r0, 802d09e <http_recv+0x412>
- {
- HTTP_UpdateUserLoginTime(user_id);
- 802d094: 4638 mov r0, r7
- 802d096: f7fe fd75 bl 802bb84 <HTTP_UpdateUserLoginTime>
- fs_open("/info.html", &file);
- 802d09a: 4864 ldr r0, [pc, #400] ; (802d22c <http_recv+0x5a0>)
- 802d09c: e1a0 b.n 802d3e0 <http_recv+0x754>
- hs->file = file.data;
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /history.html", 17) == 0)
- 802d09e: 4630 mov r0, r6
- 802d0a0: 4963 ldr r1, [pc, #396] ; (802d230 <http_recv+0x5a4>)
- 802d0a2: 2211 movs r2, #17
- 802d0a4: f7f4 ff66 bl 8021f74 <strncmp>
- 802d0a8: b920 cbnz r0, 802d0b4 <http_recv+0x428>
- {
- HTTP_UpdateUserLoginTime(user_id);
- 802d0aa: 4638 mov r0, r7
- 802d0ac: f7fe fd6a bl 802bb84 <HTTP_UpdateUserLoginTime>
- fs_open("/history.html", &file);
- 802d0b0: 4860 ldr r0, [pc, #384] ; (802d234 <http_recv+0x5a8>)
- 802d0b2: e195 b.n 802d3e0 <http_recv+0x754>
- hs->file = file.data;
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /ups_history.html", 21) == 0)
- 802d0b4: 4630 mov r0, r6
- 802d0b6: 4960 ldr r1, [pc, #384] ; (802d238 <http_recv+0x5ac>)
- 802d0b8: 2215 movs r2, #21
- 802d0ba: f7f4 ff5b bl 8021f74 <strncmp>
- 802d0be: b920 cbnz r0, 802d0ca <http_recv+0x43e>
- {
- HTTP_UpdateUserLoginTime(user_id);
- 802d0c0: 4638 mov r0, r7
- 802d0c2: f7fe fd5f bl 802bb84 <HTTP_UpdateUserLoginTime>
- fs_open("/ups_history.html", &file);
- 802d0c6: 485d ldr r0, [pc, #372] ; (802d23c <http_recv+0x5b0>)
- 802d0c8: e18a b.n 802d3e0 <http_recv+0x754>
- hs->file = file.data;
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /getJson.cgi", 16) == 0) // +
- 802d0ca: 4630 mov r0, r6
- 802d0cc: 495c ldr r1, [pc, #368] ; (802d240 <http_recv+0x5b4>)
- 802d0ce: 2210 movs r2, #16
- 802d0d0: f7f4 ff50 bl 8021f74 <strncmp>
- 802d0d4: b940 cbnz r0, 802d0e8 <http_recv+0x45c>
- {
- HTTP_GetParamsPage1(sendBuf);
- 802d0d6: 4e43 ldr r6, [pc, #268] ; (802d1e4 <http_recv+0x558>)
- 802d0d8: 4630 mov r0, r6
- 802d0da: f000 f9bf bl 802d45c <HTTP_GetParamsPage1>
- hs->file = sendBuf;
- 802d0de: 6026 str r6, [r4, #0]
- hs->left = strlen(sendBuf);
- 802d0e0: 4630 mov r0, r6
- 802d0e2: f7f4 fee5 bl 8021eb0 <strlen>
- 802d0e6: e042 b.n 802d16e <http_recv+0x4e2>
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /settings.cgi", 17) == 0) // +
- 802d0e8: 4630 mov r0, r6
- 802d0ea: 4956 ldr r1, [pc, #344] ; (802d244 <http_recv+0x5b8>)
- 802d0ec: 2211 movs r2, #17
- 802d0ee: f7f4 ff41 bl 8021f74 <strncmp>
- 802d0f2: b988 cbnz r0, 802d118 <http_recv+0x48c>
- {
- SET_PAGE = SET_PAGE_PAGE2;
- 802d0f4: 4b54 ldr r3, [pc, #336] ; (802d248 <http_recv+0x5bc>)
- 802d0f6: 2202 movs r2, #2
- 802d0f8: 701a strb r2, [r3, #0]
-
- if (seclevel == 0) {
- 802d0fa: 4b4a ldr r3, [pc, #296] ; (802d224 <http_recv+0x598>)
- 802d0fc: 781b ldrb r3, [r3, #0]
- 802d0fe: 2b00 cmp r3, #0
- 802d100: f040 817d bne.w 802d3fe <http_recv+0x772>
- if (HTTP_SettingsPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen) == SEND_REQUIRED_YES)
- 802d104: 4f37 ldr r7, [pc, #220] ; (802d1e4 <http_recv+0x558>)
- 802d106: 4e38 ldr r6, [pc, #224] ; (802d1e8 <http_recv+0x55c>)
- 802d108: 4b50 ldr r3, [pc, #320] ; (802d24c <http_recv+0x5c0>)
- 802d10a: 4851 ldr r0, [pc, #324] ; (802d250 <http_recv+0x5c4>)
- 802d10c: 881a ldrh r2, [r3, #0]
- 802d10e: 4639 mov r1, r7
- 802d110: 4633 mov r3, r6
- 802d112: f7fe fec5 bl 802bea0 <HTTP_SettingsPage>
- 802d116: e0e9 b.n 802d2ec <http_recv+0x660>
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }*/
- }
- }
- else if (strncmp(data, "POST /settings.cgi", 18) == 0)
- 802d118: 4630 mov r0, r6
- 802d11a: 494e ldr r1, [pc, #312] ; (802d254 <http_recv+0x5c8>)
- 802d11c: 2212 movs r2, #18
- 802d11e: f7f4 ff29 bl 8021f74 <strncmp>
- 802d122: 4681 mov r9, r0
- 802d124: bb28 cbnz r0, 802d172 <http_recv+0x4e6>
- {
- strncat(&receiveBuf, " ", 1);
- 802d126: 2201 movs r2, #1
- 802d128: 494b ldr r1, [pc, #300] ; (802d258 <http_recv+0x5cc>)
- 802d12a: 4849 ldr r0, [pc, #292] ; (802d250 <http_recv+0x5c4>)
- HTTP_SetSettings(receiveBuf, receivedBufLen);
- memset(sendBuf, 0, SEND_BUF_MAX_LEN);
- 802d12c: 4e2d ldr r6, [pc, #180] ; (802d1e4 <http_recv+0x558>)
- }*/
- }
- }
- else if (strncmp(data, "POST /settings.cgi", 18) == 0)
- {
- strncat(&receiveBuf, " ", 1);
- 802d12e: f7f4 feef bl 8021f10 <strncat>
- HTTP_SetSettings(receiveBuf, receivedBufLen);
- 802d132: 4b46 ldr r3, [pc, #280] ; (802d24c <http_recv+0x5c0>)
- 802d134: 4846 ldr r0, [pc, #280] ; (802d250 <http_recv+0x5c4>)
- 802d136: 8819 ldrh r1, [r3, #0]
- 802d138: f7ff f9d4 bl 802c4e4 <HTTP_SetSettings>
- memset(sendBuf, 0, SEND_BUF_MAX_LEN);
- 802d13c: f44f 62fa mov.w r2, #2000 ; 0x7d0
- 802d140: 4649 mov r1, r9
- 802d142: 4630 mov r0, r6
- 802d144: f7f4 fcdc bl 8021b00 <memset>
- strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
- 802d148: 4944 ldr r1, [pc, #272] ; (802d25c <http_recv+0x5d0>)
- 802d14a: 4630 mov r0, r6
- 802d14c: f7f4 fe52 bl 8021df4 <strcpy>
- strcat(sendBuf, "\r\n\r\n");
- 802d150: 4943 ldr r1, [pc, #268] ; (802d260 <http_recv+0x5d4>)
- 802d152: 4630 mov r0, r6
- 802d154: f7f4 fd3a bl 8021bcc <strcat>
- strcat(sendBuf,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/settings.html\"/></head></html>\r\n\r\n");
- 802d158: 4942 ldr r1, [pc, #264] ; (802d264 <http_recv+0x5d8>)
- 802d15a: 4630 mov r0, r6
- 802d15c: f7f4 fd36 bl 8021bcc <strcat>
- sendBufLoadLen = strlen(sendBuf);
- 802d160: 4630 mov r0, r6
- 802d162: f7f4 fea5 bl 8021eb0 <strlen>
- 802d166: 4b20 ldr r3, [pc, #128] ; (802d1e8 <http_recv+0x55c>)
- 802d168: 8018 strh r0, [r3, #0]
- hs->file = sendBuf;
- 802d16a: 6026 str r6, [r4, #0]
- hs->left = sendBufLoadLen;
- 802d16c: b280 uxth r0, r0
- 802d16e: 6060 str r0, [r4, #4]
- 802d170: e13d b.n 802d3ee <http_recv+0x762>
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /info.cgi", 13) == 0) // +
- 802d172: 4630 mov r0, r6
- 802d174: 493c ldr r1, [pc, #240] ; (802d268 <http_recv+0x5dc>)
- 802d176: 220d movs r2, #13
- 802d178: f7f4 fefc bl 8021f74 <strncmp>
- 802d17c: b948 cbnz r0, 802d192 <http_recv+0x506>
- {
- if (HTTP_InfoPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen) == SEND_REQUIRED_YES)
- 802d17e: 4f19 ldr r7, [pc, #100] ; (802d1e4 <http_recv+0x558>)
- 802d180: 4e19 ldr r6, [pc, #100] ; (802d1e8 <http_recv+0x55c>)
- 802d182: 4b32 ldr r3, [pc, #200] ; (802d24c <http_recv+0x5c0>)
- 802d184: 4832 ldr r0, [pc, #200] ; (802d250 <http_recv+0x5c4>)
- 802d186: 881a ldrh r2, [r3, #0]
- 802d188: 4639 mov r1, r7
- 802d18a: 4633 mov r3, r6
- 802d18c: f7fe feac bl 802bee8 <HTTP_InfoPage>
- 802d190: e0ac b.n 802d2ec <http_recv+0x660>
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }*/
- }
- else if (strncmp(data, "POST /info.cgi", 14) == 0)
- 802d192: 4630 mov r0, r6
- 802d194: 4935 ldr r1, [pc, #212] ; (802d26c <http_recv+0x5e0>)
- 802d196: 220e movs r2, #14
- 802d198: f7f4 feec bl 8021f74 <strncmp>
- 802d19c: 4681 mov r9, r0
- 802d19e: 2800 cmp r0, #0
- 802d1a0: d168 bne.n 802d274 <http_recv+0x5e8>
- {
- strncat(&receiveBuf, " ", 1);
- 802d1a2: 2201 movs r2, #1
- 802d1a4: 492c ldr r1, [pc, #176] ; (802d258 <http_recv+0x5cc>)
- 802d1a6: 482a ldr r0, [pc, #168] ; (802d250 <http_recv+0x5c4>)
- HTTP_SetInfo(receiveBuf, receivedBufLen);
- memset(sendBuf, 0, SEND_BUF_MAX_LEN);
- 802d1a8: 4e0e ldr r6, [pc, #56] ; (802d1e4 <http_recv+0x558>)
- tcp_sent(pcb, http_sent);
- }*/
- }
- else if (strncmp(data, "POST /info.cgi", 14) == 0)
- {
- strncat(&receiveBuf, " ", 1);
- 802d1aa: f7f4 feb1 bl 8021f10 <strncat>
- HTTP_SetInfo(receiveBuf, receivedBufLen);
- 802d1ae: 4b27 ldr r3, [pc, #156] ; (802d24c <http_recv+0x5c0>)
- 802d1b0: 4827 ldr r0, [pc, #156] ; (802d250 <http_recv+0x5c4>)
- 802d1b2: 8819 ldrh r1, [r3, #0]
- 802d1b4: f7ff f944 bl 802c440 <HTTP_SetInfo>
- memset(sendBuf, 0, SEND_BUF_MAX_LEN);
- 802d1b8: f44f 62fa mov.w r2, #2000 ; 0x7d0
- 802d1bc: 4649 mov r1, r9
- 802d1be: 4630 mov r0, r6
- 802d1c0: f7f4 fc9e bl 8021b00 <memset>
- strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
- 802d1c4: 4925 ldr r1, [pc, #148] ; (802d25c <http_recv+0x5d0>)
- 802d1c6: 4630 mov r0, r6
- 802d1c8: f7f4 fe14 bl 8021df4 <strcpy>
- strcat(sendBuf, "\r\n\r\n");
- 802d1cc: 4924 ldr r1, [pc, #144] ; (802d260 <http_recv+0x5d4>)
- 802d1ce: 4630 mov r0, r6
- 802d1d0: f7f4 fcfc bl 8021bcc <strcat>
- strcat(sendBuf,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/info.html\"/></head></html>\r\n\r\n");
- 802d1d4: 4630 mov r0, r6
- 802d1d6: 4926 ldr r1, [pc, #152] ; (802d270 <http_recv+0x5e4>)
- 802d1d8: e7c0 b.n 802d15c <http_recv+0x4d0>
- 802d1da: bf00 nop
- 802d1dc: 2000e264 .word 0x2000e264
- 802d1e0: 2000e138 .word 0x2000e138
- 802d1e4: 2000d38c .word 0x2000d38c
- 802d1e8: 20000d20 .word 0x20000d20
- 802d1ec: 08040f6e .word 0x08040f6e
- 802d1f0: 0802bc93 .word 0x0802bc93
- 802d1f4: 2000e238 .word 0x2000e238
- 802d1f8: 08040f23 .word 0x08040f23
- 802d1fc: 08040f27 .word 0x08040f27
- 802d200: 08040f31 .word 0x08040f31
- 802d204: 08040f35 .word 0x08040f35
- 802d208: 08040f40 .word 0x08040f40
- 802d20c: 08040f44 .word 0x08040f44
- 802d210: 08040f93 .word 0x08040f93
- 802d214: 08040f97 .word 0x08040f97
- 802d218: 08040f51 .word 0x08040f51
- 802d21c: 08040f55 .word 0x08040f55
- 802d220: 08040fa0 .word 0x08040fa0
- 802d224: 20000711 .word 0x20000711
- 802d228: 08040fbf .word 0x08040fbf
- 802d22c: 08040fc3 .word 0x08040fc3
- 802d230: 08040fce .word 0x08040fce
- 802d234: 08040fd2 .word 0x08040fd2
- 802d238: 08040fe0 .word 0x08040fe0
- 802d23c: 08040fe4 .word 0x08040fe4
- 802d240: 08040ff6 .word 0x08040ff6
- 802d244: 08041007 .word 0x08041007
- 802d248: 20000d22 .word 0x20000d22
- 802d24c: 20000d34 .word 0x20000d34
- 802d250: 2000db5c .word 0x2000db5c
- 802d254: 08041019 .word 0x08041019
- 802d258: 08039ade .word 0x08039ade
- 802d25c: 0804102c .word 0x0804102c
- 802d260: 08041130 .word 0x08041130
- 802d264: 0804103e .word 0x0804103e
- 802d268: 080410ad .word 0x080410ad
- 802d26c: 080410bb .word 0x080410bb
- 802d270: 080410ca .word 0x080410ca
- hs->file = sendBuf;
- hs->left = sendBufLoadLen;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else if (strncmp(data, "GET /history.cgi", 16) == 0)
- 802d274: 4630 mov r0, r6
- 802d276: 4965 ldr r1, [pc, #404] ; (802d40c <http_recv+0x780>)
- 802d278: 2210 movs r2, #16
- 802d27a: f7f4 fe7b bl 8021f74 <strncmp>
- 802d27e: b9a0 cbnz r0, 802d2aa <http_recv+0x61e>
- {
- int res;
- res = HTTP_HistoryPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- 802d280: 4b63 ldr r3, [pc, #396] ; (802d410 <http_recv+0x784>)
- 802d282: 4f64 ldr r7, [pc, #400] ; (802d414 <http_recv+0x788>)
- 802d284: 4e64 ldr r6, [pc, #400] ; (802d418 <http_recv+0x78c>)
- 802d286: 881a ldrh r2, [r3, #0]
- 802d288: 4864 ldr r0, [pc, #400] ; (802d41c <http_recv+0x790>)
- 802d28a: 4639 mov r1, r7
- 802d28c: 4633 mov r3, r6
- 802d28e: f7ff fc01 bl 802ca94 <HTTP_HistoryPage>
- if (res == SEND_REQUIRED_FILE)
- 802d292: 2802 cmp r0, #2
- 802d294: d12a bne.n 802d2ec <http_recv+0x660>
- {
- hs->file = sendBuf;
- hs->left = sendBufLoadLen;
- 802d296: 8833 ldrh r3, [r6, #0]
- res = HTTP_HistoryPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- if (res == SEND_REQUIRED_FILE)
- {
- hs->file = sendBuf;
- 802d298: 6027 str r7, [r4, #0]
- hs->left = sendBufLoadLen;
- send_data(pcb, hs);
- 802d29a: 4628 mov r0, r5
- 802d29c: 4621 mov r1, r4
- res = HTTP_HistoryPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- if (res == SEND_REQUIRED_FILE)
- {
- hs->file = sendBuf;
- hs->left = sendBufLoadLen;
- 802d29e: 6063 str r3, [r4, #4]
- send_data(pcb, hs);
- 802d2a0: f7fe fcbe bl 802bc20 <send_data>
- tcp_sent(pcb, http_sent_history);
- 802d2a4: 4628 mov r0, r5
- 802d2a6: 495e ldr r1, [pc, #376] ; (802d420 <http_recv+0x794>)
- 802d2a8: e019 b.n 802d2de <http_recv+0x652>
- hs->left = sendBufLoadLen;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- }
- else if (strncmp(data, "GET /ups_history.cgi", 19) == 0)
- 802d2aa: 4630 mov r0, r6
- 802d2ac: 495d ldr r1, [pc, #372] ; (802d424 <http_recv+0x798>)
- 802d2ae: 2213 movs r2, #19
- 802d2b0: f7f4 fe60 bl 8021f74 <strncmp>
- 802d2b4: b9f0 cbnz r0, 802d2f4 <http_recv+0x668>
- {
- int res;
- res = HTTP_UpsHistoryPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- 802d2b6: 4b56 ldr r3, [pc, #344] ; (802d410 <http_recv+0x784>)
- 802d2b8: 4f56 ldr r7, [pc, #344] ; (802d414 <http_recv+0x788>)
- 802d2ba: 4e57 ldr r6, [pc, #348] ; (802d418 <http_recv+0x78c>)
- 802d2bc: 881a ldrh r2, [r3, #0]
- 802d2be: 4857 ldr r0, [pc, #348] ; (802d41c <http_recv+0x790>)
- 802d2c0: 4639 mov r1, r7
- 802d2c2: 4633 mov r3, r6
- 802d2c4: f7ff fb8a bl 802c9dc <HTTP_UpsHistoryPage>
- if (res == SEND_REQUIRED_FILE)
- 802d2c8: 2802 cmp r0, #2
- 802d2ca: d10f bne.n 802d2ec <http_recv+0x660>
- {
- hs->file = sendBuf;
- hs->left = sendBufLoadLen;
- 802d2cc: 8833 ldrh r3, [r6, #0]
- res = HTTP_UpsHistoryPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- if (res == SEND_REQUIRED_FILE)
- {
- hs->file = sendBuf;
- 802d2ce: 6027 str r7, [r4, #0]
- hs->left = sendBufLoadLen;
- send_data(pcb, hs);
- 802d2d0: 4628 mov r0, r5
- 802d2d2: 4621 mov r1, r4
- res = HTTP_UpsHistoryPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- if (res == SEND_REQUIRED_FILE)
- {
- hs->file = sendBuf;
- hs->left = sendBufLoadLen;
- 802d2d4: 6063 str r3, [r4, #4]
- send_data(pcb, hs);
- 802d2d6: f7fe fca3 bl 802bc20 <send_data>
- tcp_sent(pcb, http_sent_log);
- 802d2da: 4953 ldr r1, [pc, #332] ; (802d428 <http_recv+0x79c>)
- 802d2dc: 4628 mov r0, r5
- 802d2de: f003 f8df bl 80304a0 <tcp_sent>
- tcp_err(pcb, http_sent_log_err);
- 802d2e2: 4628 mov r0, r5
- 802d2e4: 4951 ldr r1, [pc, #324] ; (802d42c <http_recv+0x7a0>)
- 802d2e6: f003 f8dd bl 80304a4 <tcp_err>
- 802d2ea: e088 b.n 802d3fe <http_recv+0x772>
- }
- else if (res == SEND_REQUIRED_YES) {
- 802d2ec: 2800 cmp r0, #0
- 802d2ee: f040 8086 bne.w 802d3fe <http_recv+0x772>
- 802d2f2: e06e b.n 802d3d2 <http_recv+0x746>
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- }
- /* Тест АКБ ИБП */
- else if (strncmp(data, "POST /bat_test.cgi", 18) == 0)
- 802d2f4: 4630 mov r0, r6
- 802d2f6: 494e ldr r1, [pc, #312] ; (802d430 <http_recv+0x7a4>)
- 802d2f8: 2212 movs r2, #18
- 802d2fa: f7f4 fe3b bl 8021f74 <strncmp>
- 802d2fe: b948 cbnz r0, 802d314 <http_recv+0x688>
- {
- HTTP_UPSTest(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- 802d300: 4f44 ldr r7, [pc, #272] ; (802d414 <http_recv+0x788>)
- 802d302: 4e45 ldr r6, [pc, #276] ; (802d418 <http_recv+0x78c>)
- 802d304: 4b42 ldr r3, [pc, #264] ; (802d410 <http_recv+0x784>)
- 802d306: 4845 ldr r0, [pc, #276] ; (802d41c <http_recv+0x790>)
- 802d308: 881a ldrh r2, [r3, #0]
- 802d30a: 4639 mov r1, r7
- 802d30c: 4633 mov r3, r6
- 802d30e: f7fe fe0f bl 802bf30 <HTTP_UPSTest>
- 802d312: e05e b.n 802d3d2 <http_recv+0x746>
- hs->left = sendBufLoadLen;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- /* Выключение ИБП */
- else if (strncmp(data, "POST /ups_power.cgi", 19) == 0)
- 802d314: 4630 mov r0, r6
- 802d316: 4947 ldr r1, [pc, #284] ; (802d434 <http_recv+0x7a8>)
- 802d318: 2213 movs r2, #19
- 802d31a: f7f4 fe2b bl 8021f74 <strncmp>
- 802d31e: b948 cbnz r0, 802d334 <http_recv+0x6a8>
- {
- HTTP_UPSshutdown(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- 802d320: 4f3c ldr r7, [pc, #240] ; (802d414 <http_recv+0x788>)
- 802d322: 4e3d ldr r6, [pc, #244] ; (802d418 <http_recv+0x78c>)
- 802d324: 4b3a ldr r3, [pc, #232] ; (802d410 <http_recv+0x784>)
- 802d326: 483d ldr r0, [pc, #244] ; (802d41c <http_recv+0x790>)
- 802d328: 881a ldrh r2, [r3, #0]
- 802d32a: 4639 mov r1, r7
- 802d32c: 4633 mov r3, r6
- 802d32e: f7fe fe8d bl 802c04c <HTTP_UPSshutdown>
- 802d332: e04e b.n 802d3d2 <http_recv+0x746>
- hs->left = sendBufLoadLen;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- /* Сброс настроек и сохранине */
- else if (strncmp(data, "GET /reset.cgi", 14) == 0)
- 802d334: 4630 mov r0, r6
- 802d336: 4940 ldr r1, [pc, #256] ; (802d438 <http_recv+0x7ac>)
- 802d338: 220e movs r2, #14
- 802d33a: f7f4 fe1b bl 8021f74 <strncmp>
- 802d33e: b928 cbnz r0, 802d34c <http_recv+0x6c0>
- {
- HTTP_ResetSettings();
- 802d340: f000 fd28 bl 802dd94 <HTTP_ResetSettings>
- HTTP_SaveSettings();
- 802d344: f000 fd3a bl 802ddbc <HTTP_SaveSettings>
- fs_open("/settings.html", &file);
- 802d348: 483c ldr r0, [pc, #240] ; (802d43c <http_recv+0x7b0>)
- 802d34a: e049 b.n 802d3e0 <http_recv+0x754>
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- /* Перезагрузка контроллера */
- else if (strncmp(data, "GET /reboot.cgi", 15) == 0)
- 802d34c: 4630 mov r0, r6
- 802d34e: 493c ldr r1, [pc, #240] ; (802d440 <http_recv+0x7b4>)
- 802d350: 220f movs r2, #15
- 802d352: f7f4 fe0f bl 8021f74 <strncmp>
- 802d356: b910 cbnz r0, 802d35e <http_recv+0x6d2>
- {
- HTTP_Reboot();
- 802d358: f000 fd5c bl 802de14 <HTTP_Reboot>
- 802d35c: e04f b.n 802d3fe <http_recv+0x772>
- }
- /* Подтверждение новых сетевых настроек */
- else if (strncmp(data, "GET /confirm.cgi", 16) == 0)
- 802d35e: 4630 mov r0, r6
- 802d360: 4938 ldr r1, [pc, #224] ; (802d444 <http_recv+0x7b8>)
- 802d362: 2210 movs r2, #16
- 802d364: f7f4 fe06 bl 8021f74 <strncmp>
- 802d368: b920 cbnz r0, 802d374 <http_recv+0x6e8>
- {
- SetWebReinitFlag(false);
- 802d36a: f7fa fee1 bl 8028130 <SetWebReinitFlag>
- SetConfirmWebParamsFlag();
- 802d36e: f7fa fee5 bl 802813c <SetConfirmWebParamsFlag>
- 802d372: e034 b.n 802d3de <http_recv+0x752>
- hs->left = file.len;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- /* Проверка пароля, переход в bootloader */
- else if (strncmp(data, "GET /fw_update.cgi", 18) == 0)
- 802d374: 4630 mov r0, r6
- 802d376: 4934 ldr r1, [pc, #208] ; (802d448 <http_recv+0x7bc>)
- 802d378: 2212 movs r2, #18
- 802d37a: f7f4 fdfb bl 8021f74 <strncmp>
- 802d37e: b948 cbnz r0, 802d394 <http_recv+0x708>
- {
- HTTP_ConfirmBootPwd(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- 802d380: 4f24 ldr r7, [pc, #144] ; (802d414 <http_recv+0x788>)
- 802d382: 4e25 ldr r6, [pc, #148] ; (802d418 <http_recv+0x78c>)
- 802d384: 4b22 ldr r3, [pc, #136] ; (802d410 <http_recv+0x784>)
- 802d386: 4825 ldr r0, [pc, #148] ; (802d41c <http_recv+0x790>)
- 802d388: 881a ldrh r2, [r3, #0]
- 802d38a: 4639 mov r1, r7
- 802d38c: 4633 mov r3, r6
- 802d38e: f7fe ff05 bl 802c19c <HTTP_ConfirmBootPwd>
- 802d392: e01e b.n 802d3d2 <http_recv+0x746>
- hs->left = sendBufLoadLen;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- /* Смена пароля пользователя */
- else if (strncmp(data, "POST /changepwd.cgi", 19) == 0)
- 802d394: 4630 mov r0, r6
- 802d396: 492d ldr r1, [pc, #180] ; (802d44c <http_recv+0x7c0>)
- 802d398: 2213 movs r2, #19
- 802d39a: f7f4 fdeb bl 8021f74 <strncmp>
- 802d39e: b948 cbnz r0, 802d3b4 <http_recv+0x728>
- {
- HTTP_ChangeUserPwd(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- 802d3a0: 4f1c ldr r7, [pc, #112] ; (802d414 <http_recv+0x788>)
- 802d3a2: 4e1d ldr r6, [pc, #116] ; (802d418 <http_recv+0x78c>)
- 802d3a4: 4b1a ldr r3, [pc, #104] ; (802d410 <http_recv+0x784>)
- 802d3a6: 481d ldr r0, [pc, #116] ; (802d41c <http_recv+0x790>)
- 802d3a8: 881a ldrh r2, [r3, #0]
- 802d3aa: 4639 mov r1, r7
- 802d3ac: 4633 mov r3, r6
- 802d3ae: f7ff fbcf bl 802cb50 <HTTP_ChangeUserPwd>
- 802d3b2: e00e b.n 802d3d2 <http_recv+0x746>
- hs->left = sendBufLoadLen;
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- // На производстве
- else if (strncmp(data, "GET /setProdate.cgi", 19) == 0)
- 802d3b4: 4630 mov r0, r6
- 802d3b6: 4926 ldr r1, [pc, #152] ; (802d450 <http_recv+0x7c4>)
- 802d3b8: 2213 movs r2, #19
- 802d3ba: f7f4 fddb bl 8021f74 <strncmp>
- 802d3be: b958 cbnz r0, 802d3d8 <http_recv+0x74c>
- {
- HTTP_Prodate(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
- 802d3c0: 4b13 ldr r3, [pc, #76] ; (802d410 <http_recv+0x784>)
- 802d3c2: 4f14 ldr r7, [pc, #80] ; (802d414 <http_recv+0x788>)
- 802d3c4: 4e14 ldr r6, [pc, #80] ; (802d418 <http_recv+0x78c>)
- 802d3c6: 881a ldrh r2, [r3, #0]
- 802d3c8: 4814 ldr r0, [pc, #80] ; (802d41c <http_recv+0x790>)
- 802d3ca: 4639 mov r1, r7
- 802d3cc: 4633 mov r3, r6
- 802d3ce: f7ff fad1 bl 802c974 <HTTP_Prodate>
- hs->file = sendBuf;
- 802d3d2: 6027 str r7, [r4, #0]
- hs->left = sendBufLoadLen;
- 802d3d4: 8833 ldrh r3, [r6, #0]
- 802d3d6: e009 b.n 802d3ec <http_recv+0x760>
- send_data(pcb, hs);
- tcp_sent(pcb, http_sent);
- }
- else
- {
- HTTP_UpdateUserLoginTime(user_id);
- 802d3d8: 4638 mov r0, r7
- 802d3da: f7fe fbd3 bl 802bb84 <HTTP_UpdateUserLoginTime>
- fs_open("/index.html", &file); // +
- 802d3de: 481d ldr r0, [pc, #116] ; (802d454 <http_recv+0x7c8>)
- 802d3e0: a905 add r1, sp, #20
- 802d3e2: f7fe fbe1 bl 802bba8 <fs_open>
- hs->file = file.data;
- 802d3e6: 9b05 ldr r3, [sp, #20]
- 802d3e8: 6023 str r3, [r4, #0]
- hs->left = file.len;
- 802d3ea: 9b06 ldr r3, [sp, #24]
- 802d3ec: 6063 str r3, [r4, #4]
- send_data(pcb, hs);
- 802d3ee: 4628 mov r0, r5
- 802d3f0: 4621 mov r1, r4
- 802d3f2: f7fe fc15 bl 802bc20 <send_data>
- tcp_sent(pcb, http_sent);
- 802d3f6: 4628 mov r0, r5
- 802d3f8: 4917 ldr r1, [pc, #92] ; (802d458 <http_recv+0x7cc>)
- 802d3fa: f003 f851 bl 80304a0 <tcp_sent>
- }
- }
- }
- pbuf_free(p);
- 802d3fe: 4640 mov r0, r8
- 802d400: f002 fd04 bl 802fe0c <pbuf_free>
- /* if (err == ERR_OK && p == NULL)
- {
- close_conn(pcb, hs);
- }*/
- return ERR_OK;
- }
- 802d404: 2000 movs r0, #0
- 802d406: b01d add sp, #116 ; 0x74
- 802d408: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 802d40c: 08041135 .word 0x08041135
- 802d410: 20000d34 .word 0x20000d34
- 802d414: 2000d38c .word 0x2000d38c
- 802d418: 20000d20 .word 0x20000d20
- 802d41c: 2000db5c .word 0x2000db5c
- 802d420: 0802bd4d .word 0x0802bd4d
- 802d424: 08041146 .word 0x08041146
- 802d428: 0802bcad .word 0x0802bcad
- 802d42c: 0802bb79 .word 0x0802bb79
- 802d430: 0804115b .word 0x0804115b
- 802d434: 0804116e .word 0x0804116e
- 802d438: 08041182 .word 0x08041182
- 802d43c: 08040fa4 .word 0x08040fa4
- 802d440: 08041191 .word 0x08041191
- 802d444: 080411a1 .word 0x080411a1
- 802d448: 080411b2 .word 0x080411b2
- 802d44c: 080411c5 .word 0x080411c5
- 802d450: 080411d9 .word 0x080411d9
- 802d454: 08040fb3 .word 0x08040fb3
- 802d458: 0802bc93 .word 0x0802bc93
- 0802d45c <HTTP_GetParamsPage1>:
- /**
- * @brief Возвращяет строку с настройками на первой странице
- * @retval None
- */
- void HTTP_GetParamsPage1(char *buf)
- {
- 802d45c: b510 push {r4, lr}
- char str[40];
- uint8_t len;
- memset(buf, 0, 1000);
- 802d45e: f44f 727a mov.w r2, #1000 ; 0x3e8
- /**
- * @brief Возвращяет строку с настройками на первой странице
- * @retval None
- */
- void HTTP_GetParamsPage1(char *buf)
- {
- 802d462: b08c sub sp, #48 ; 0x30
- 802d464: 4604 mov r4, r0
- char str[40];
- uint8_t len;
- memset(buf, 0, 1000);
- 802d466: 2100 movs r1, #0
- 802d468: f7f4 fb4a bl 8021b00 <memset>
-
- // Headers для поддержки saffari
- strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
- 802d46c: 4620 mov r0, r4
- 802d46e: 496f ldr r1, [pc, #444] ; (802d62c <HTTP_GetParamsPage1+0x1d0>)
- 802d470: f7f4 fcc0 bl 8021df4 <strcpy>
-
- // Параметры UPS
-
- GetInputVoltageStr(str, &len);
- 802d474: a802 add r0, sp, #8
- 802d476: f10d 0107 add.w r1, sp, #7
- 802d47a: f7fa fa03 bl 8027884 <GetInputVoltageStr>
- strcat(buf, "{\"AC\":\"");
- 802d47e: 4620 mov r0, r4
- 802d480: 496b ldr r1, [pc, #428] ; (802d630 <HTTP_GetParamsPage1+0x1d4>)
- 802d482: f7f4 fba3 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d486: f89d 2007 ldrb.w r2, [sp, #7]
- 802d48a: a902 add r1, sp, #8
- 802d48c: 4620 mov r0, r4
- 802d48e: f7f4 fd3f bl 8021f10 <strncat>
-
- GetOutputVoltageStr(str, &len);
- 802d492: a802 add r0, sp, #8
- 802d494: f10d 0107 add.w r1, sp, #7
- 802d498: f7fa fa0a bl 80278b0 <GetOutputVoltageStr>
- strcat(buf, "\",\"DC\":\"");
- 802d49c: 4620 mov r0, r4
- 802d49e: 4965 ldr r1, [pc, #404] ; (802d634 <HTTP_GetParamsPage1+0x1d8>)
- 802d4a0: f7f4 fb94 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d4a4: f89d 2007 ldrb.w r2, [sp, #7]
- 802d4a8: a902 add r1, sp, #8
- 802d4aa: 4620 mov r0, r4
- 802d4ac: f7f4 fd30 bl 8021f10 <strncat>
-
- GetInputFreqStr(str, &len);
- 802d4b0: a802 add r0, sp, #8
- 802d4b2: f10d 0107 add.w r1, sp, #7
- 802d4b6: f7fa f9b9 bl 802782c <GetInputFreqStr>
- strcat(buf, "\",\"in_freq\":\"");
- 802d4ba: 4620 mov r0, r4
- 802d4bc: 495e ldr r1, [pc, #376] ; (802d638 <HTTP_GetParamsPage1+0x1dc>)
- 802d4be: f7f4 fb85 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d4c2: f89d 2007 ldrb.w r2, [sp, #7]
- 802d4c6: a902 add r1, sp, #8
- 802d4c8: 4620 mov r0, r4
- 802d4ca: f7f4 fd21 bl 8021f10 <strncat>
-
- GetOutputFreqStr(str, &len);
- 802d4ce: a802 add r0, sp, #8
- 802d4d0: f10d 0107 add.w r1, sp, #7
- 802d4d4: f7fa f9c0 bl 8027858 <GetOutputFreqStr>
- strcat(buf, "\",\"out_freq\":\"");
- 802d4d8: 4620 mov r0, r4
- 802d4da: 4958 ldr r1, [pc, #352] ; (802d63c <HTTP_GetParamsPage1+0x1e0>)
- 802d4dc: f7f4 fb76 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d4e0: f89d 2007 ldrb.w r2, [sp, #7]
- 802d4e4: a902 add r1, sp, #8
- 802d4e6: 4620 mov r0, r4
- 802d4e8: f7f4 fd12 bl 8021f10 <strncat>
-
- GetPowerStr(str, &len);
- 802d4ec: a802 add r0, sp, #8
- 802d4ee: f10d 0107 add.w r1, sp, #7
- 802d4f2: f7fa f9f3 bl 80278dc <GetPowerStr>
- strcat(buf, "\",\"pwr\":\"");
- 802d4f6: 4620 mov r0, r4
- 802d4f8: 4951 ldr r1, [pc, #324] ; (802d640 <HTTP_GetParamsPage1+0x1e4>)
- 802d4fa: f7f4 fb67 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d4fe: f89d 2007 ldrb.w r2, [sp, #7]
- 802d502: a902 add r1, sp, #8
- 802d504: 4620 mov r0, r4
- 802d506: f7f4 fd03 bl 8021f10 <strncat>
-
- GetBatCapacityStr(str, &len);
- 802d50a: a802 add r0, sp, #8
- 802d50c: f10d 0107 add.w r1, sp, #7
- 802d510: f7fa f9f6 bl 8027900 <GetBatCapacityStr>
- strcat(buf, "\",\"bat_cap\":\"");
- 802d514: 4620 mov r0, r4
- 802d516: 494b ldr r1, [pc, #300] ; (802d644 <HTTP_GetParamsPage1+0x1e8>)
- 802d518: f7f4 fb58 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d51c: f89d 2007 ldrb.w r2, [sp, #7]
- 802d520: a902 add r1, sp, #8
- 802d522: 4620 mov r0, r4
- 802d524: f7f4 fcf4 bl 8021f10 <strncat>
-
- GetInternalTempStr(str, &len);
- 802d528: a802 add r0, sp, #8
- 802d52a: f10d 0107 add.w r1, sp, #7
- 802d52e: f7fa fa0b bl 8027948 <GetInternalTempStr>
- strcat(buf, "\",\"inner_temp\":\"");
- 802d532: 4620 mov r0, r4
- 802d534: 4944 ldr r1, [pc, #272] ; (802d648 <HTTP_GetParamsPage1+0x1ec>)
- 802d536: f7f4 fb49 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d53a: f89d 2007 ldrb.w r2, [sp, #7]
- 802d53e: a902 add r1, sp, #8
- 802d540: 4620 mov r0, r4
- 802d542: f7f4 fce5 bl 8021f10 <strncat>
-
- GetRuntimeStr(str, &len);
- 802d546: a802 add r0, sp, #8
- 802d548: f10d 0107 add.w r1, sp, #7
- 802d54c: f7fa f9ea bl 8027924 <GetRuntimeStr>
- strcat(buf, "\",\"bat_time_left\":\"");
- 802d550: 4620 mov r0, r4
- 802d552: 493e ldr r1, [pc, #248] ; (802d64c <HTTP_GetParamsPage1+0x1f0>)
- 802d554: f7f4 fb3a bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d558: a902 add r1, sp, #8
- 802d55a: f89d 2007 ldrb.w r2, [sp, #7]
- 802d55e: 4620 mov r0, r4
- 802d560: f7f4 fcd6 bl 8021f10 <strncat>
-
- GetDINStatusStr(str, &len, 0);
- 802d564: 2200 movs r2, #0
- 802d566: a802 add r0, sp, #8
- 802d568: f10d 0107 add.w r1, sp, #7
- 802d56c: f7fa faf0 bl 8027b50 <GetDINStatusStr>
- strcat(buf, "\",\"di1\":\"");
- 802d570: 4620 mov r0, r4
- 802d572: 4937 ldr r1, [pc, #220] ; (802d650 <HTTP_GetParamsPage1+0x1f4>)
- 802d574: f7f4 fb2a bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d578: a902 add r1, sp, #8
- 802d57a: f89d 2007 ldrb.w r2, [sp, #7]
- 802d57e: 4620 mov r0, r4
- 802d580: f7f4 fcc6 bl 8021f10 <strncat>
-
- GetDOUTStatusStr(str, &len, 0);
- 802d584: a802 add r0, sp, #8
- 802d586: f10d 0107 add.w r1, sp, #7
- 802d58a: 2200 movs r2, #0
- 802d58c: f7fa fb1a bl 8027bc4 <GetDOUTStatusStr>
- strcat(buf, "\",\"ro1\":\"");
- 802d590: 4620 mov r0, r4
- 802d592: 4930 ldr r1, [pc, #192] ; (802d654 <HTTP_GetParamsPage1+0x1f8>)
- 802d594: f7f4 fb1a bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d598: a902 add r1, sp, #8
- 802d59a: f89d 2007 ldrb.w r2, [sp, #7]
- 802d59e: 4620 mov r0, r4
- 802d5a0: f7f4 fcb6 bl 8021f10 <strncat>
-
- GetDOUTStatusStr(str, &len, 1);
- 802d5a4: 2201 movs r2, #1
- 802d5a6: a802 add r0, sp, #8
- 802d5a8: f10d 0107 add.w r1, sp, #7
- 802d5ac: f7fa fb0a bl 8027bc4 <GetDOUTStatusStr>
- strcat(buf, "\",\"ro2\":\"");
- 802d5b0: 4620 mov r0, r4
- 802d5b2: 4929 ldr r1, [pc, #164] ; (802d658 <HTTP_GetParamsPage1+0x1fc>)
- 802d5b4: f7f4 fb0a bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d5b8: f89d 2007 ldrb.w r2, [sp, #7]
- 802d5bc: a902 add r1, sp, #8
- 802d5be: 4620 mov r0, r4
- 802d5c0: f7f4 fca6 bl 8021f10 <strncat>
- // Мониторинг
- // load_monitor (нагрузка, 0 - норма, 1 - fail)
- // temp_monitor (внутренняя температура, 0 - норма, 1 - fail)
- // connect_monitor (связь с UPSом, 0 - норма, 1 - fail)
-
- GetAlarmMonitorStr(str, &len);
- 802d5c4: a802 add r0, sp, #8
- 802d5c6: f10d 0107 add.w r1, sp, #7
- 802d5ca: f7fa f9d3 bl 8027974 <GetAlarmMonitorStr>
- strcat(buf, "\",\"m_alarm\":\"");
- 802d5ce: 4620 mov r0, r4
- 802d5d0: 4922 ldr r1, [pc, #136] ; (802d65c <HTTP_GetParamsPage1+0x200>)
- 802d5d2: f7f4 fafb bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d5d6: f89d 2007 ldrb.w r2, [sp, #7]
- 802d5da: a902 add r1, sp, #8
- 802d5dc: 4620 mov r0, r4
- 802d5de: f7f4 fc97 bl 8021f10 <strncat>
- GetAlarmStr(str, &len);
- 802d5e2: a802 add r0, sp, #8
- 802d5e4: f10d 0107 add.w r1, sp, #7
- 802d5e8: f7fa f9ee bl 80279c8 <GetAlarmStr>
- strcat(buf, "\",\"u_alarm\":\"");
- 802d5ec: 4620 mov r0, r4
- 802d5ee: 491c ldr r1, [pc, #112] ; (802d660 <HTTP_GetParamsPage1+0x204>)
- 802d5f0: f7f4 faec bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d5f4: f89d 2007 ldrb.w r2, [sp, #7]
- 802d5f8: a902 add r1, sp, #8
- 802d5fa: 4620 mov r0, r4
- 802d5fc: f7f4 fc88 bl 8021f10 <strncat>
- // Признак изменения сетевых настроек
- GetWebReinitFlag(str, &len);
- 802d600: a802 add r0, sp, #8
- 802d602: f10d 0107 add.w r1, sp, #7
- 802d606: f7fa fd6d bl 80280e4 <GetWebReinitFlag>
- strcat(buf, "\",\"netsettings_changed\":\"");
- 802d60a: 4620 mov r0, r4
- 802d60c: 4915 ldr r1, [pc, #84] ; (802d664 <HTTP_GetParamsPage1+0x208>)
- 802d60e: f7f4 fadd bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d612: a902 add r1, sp, #8
- 802d614: f89d 2007 ldrb.w r2, [sp, #7]
- 802d618: 4620 mov r0, r4
- 802d61a: f7f4 fc79 bl 8021f10 <strncat>
- strncat(buf, "\"}", 2);
- 802d61e: 4620 mov r0, r4
- 802d620: 4911 ldr r1, [pc, #68] ; (802d668 <HTTP_GetParamsPage1+0x20c>)
- 802d622: 2202 movs r2, #2
- 802d624: f7f4 fc74 bl 8021f10 <strncat>
-
- //printf(buf);
- }
- 802d628: b00c add sp, #48 ; 0x30
- 802d62a: bd10 pop {r4, pc}
- 802d62c: 08044c64 .word 0x08044c64
- 802d630: 08044c90 .word 0x08044c90
- 802d634: 08044c98 .word 0x08044c98
- 802d638: 08044ca1 .word 0x08044ca1
- 802d63c: 08044caf .word 0x08044caf
- 802d640: 08044cbe .word 0x08044cbe
- 802d644: 08044cc8 .word 0x08044cc8
- 802d648: 08044cd6 .word 0x08044cd6
- 802d64c: 08044ce7 .word 0x08044ce7
- 802d650: 08044cfb .word 0x08044cfb
- 802d654: 08044d05 .word 0x08044d05
- 802d658: 08044d0f .word 0x08044d0f
- 802d65c: 08044d19 .word 0x08044d19
- 802d660: 08044d27 .word 0x08044d27
- 802d664: 08044d35 .word 0x08044d35
- 802d668: 08044d4f .word 0x08044d4f
- 0802d66c <HTTP_GetSettings>:
- /**
- * @brief Возвращяет строку с настройками на второй странице
- * @retval None
- */
- void HTTP_GetSettings(char *buf)
- {
- 802d66c: b510 push {r4, lr}
- char str[30];
- uint8_t len;
-
- /* Headers для поддержки saffari */
- strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
- 802d66e: 49bf ldr r1, [pc, #764] ; (802d96c <HTTP_GetSettings+0x300>)
- /**
- * @brief Возвращяет строку с настройками на второй странице
- * @retval None
- */
- void HTTP_GetSettings(char *buf)
- {
- 802d670: b08a sub sp, #40 ; 0x28
- 802d672: 4604 mov r4, r0
- char str[30];
- uint8_t len;
-
- /* Headers для поддержки saffari */
- strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
- 802d674: f7f4 fbbe bl 8021df4 <strcpy>
-
- /* SNMP */
- GetReadCommunity(str, &len);
- 802d678: a802 add r0, sp, #8
- 802d67a: f10d 0107 add.w r1, sp, #7
- 802d67e: f7fa fc61 bl 8027f44 <GetReadCommunity>
- strcat(buf, "{\"read_community\":\"");
- 802d682: 4620 mov r0, r4
- 802d684: 49ba ldr r1, [pc, #744] ; (802d970 <HTTP_GetSettings+0x304>)
- 802d686: f7f4 faa1 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d68a: f89d 2007 ldrb.w r2, [sp, #7]
- 802d68e: a902 add r1, sp, #8
- 802d690: 4620 mov r0, r4
- 802d692: f7f4 fc3d bl 8021f10 <strncat>
-
- GetWriteCommunity(str, &len);
- 802d696: a802 add r0, sp, #8
- 802d698: f10d 0107 add.w r1, sp, #7
- 802d69c: f7fa fc62 bl 8027f64 <GetWriteCommunity>
- strcat(buf, "\",\"write_community\":\"");
- 802d6a0: 4620 mov r0, r4
- 802d6a2: 49b4 ldr r1, [pc, #720] ; (802d974 <HTTP_GetSettings+0x308>)
- 802d6a4: f7f4 fa92 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d6a8: f89d 2007 ldrb.w r2, [sp, #7]
- 802d6ac: a902 add r1, sp, #8
- 802d6ae: 4620 mov r0, r4
- 802d6b0: f7f4 fc2e bl 8021f10 <strncat>
-
- GetManagerIp(str, &len);
- 802d6b4: a802 add r0, sp, #8
- 802d6b6: f10d 0107 add.w r1, sp, #7
- 802d6ba: f7fa fc63 bl 8027f84 <GetManagerIp>
- strcat(buf, "\",\"managerIP\":\"");
- 802d6be: 4620 mov r0, r4
- 802d6c0: 49ad ldr r1, [pc, #692] ; (802d978 <HTTP_GetSettings+0x30c>)
- 802d6c2: f7f4 fa83 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d6c6: f89d 2007 ldrb.w r2, [sp, #7]
- 802d6ca: a902 add r1, sp, #8
- 802d6cc: 4620 mov r0, r4
- 802d6ce: f7f4 fc1f bl 8021f10 <strncat>
-
- GetManagerIp2(str, &len);
- 802d6d2: a802 add r0, sp, #8
- 802d6d4: f10d 0107 add.w r1, sp, #7
- 802d6d8: f7fa fc64 bl 8027fa4 <GetManagerIp2>
- strcat(buf, "\",\"managerIP2\":\"");
- 802d6dc: 4620 mov r0, r4
- 802d6de: 49a7 ldr r1, [pc, #668] ; (802d97c <HTTP_GetSettings+0x310>)
- 802d6e0: f7f4 fa74 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d6e4: f89d 2007 ldrb.w r2, [sp, #7]
- 802d6e8: a902 add r1, sp, #8
- 802d6ea: 4620 mov r0, r4
- 802d6ec: f7f4 fc10 bl 8021f10 <strncat>
-
- GetManagerIp3(str, &len);
- 802d6f0: a802 add r0, sp, #8
- 802d6f2: f10d 0107 add.w r1, sp, #7
- 802d6f6: f7fa fc65 bl 8027fc4 <GetManagerIp3>
- strcat(buf, "\",\"managerIP3\":\"");
- 802d6fa: 4620 mov r0, r4
- 802d6fc: 49a0 ldr r1, [pc, #640] ; (802d980 <HTTP_GetSettings+0x314>)
- 802d6fe: f7f4 fa65 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d702: f89d 2007 ldrb.w r2, [sp, #7]
- 802d706: a902 add r1, sp, #8
- 802d708: 4620 mov r0, r4
- 802d70a: f7f4 fc01 bl 8021f10 <strncat>
- GetManagerIp4(str, &len);
- 802d70e: a802 add r0, sp, #8
- 802d710: f10d 0107 add.w r1, sp, #7
- 802d714: f7fa fc66 bl 8027fe4 <GetManagerIp4>
- strcat(buf, "\",\"managerIP4\":\"");
- 802d718: 4620 mov r0, r4
- 802d71a: 499a ldr r1, [pc, #616] ; (802d984 <HTTP_GetSettings+0x318>)
- 802d71c: f7f4 fa56 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d720: f89d 2007 ldrb.w r2, [sp, #7]
- 802d724: a902 add r1, sp, #8
- 802d726: 4620 mov r0, r4
- 802d728: f7f4 fbf2 bl 8021f10 <strncat>
- GetManagerIp5(str, &len);
- 802d72c: a802 add r0, sp, #8
- 802d72e: f10d 0107 add.w r1, sp, #7
- 802d732: f7fa fc67 bl 8028004 <GetManagerIp5>
- strcat(buf, "\",\"managerIP5\":\"");
- 802d736: 4620 mov r0, r4
- 802d738: 4993 ldr r1, [pc, #588] ; (802d988 <HTTP_GetSettings+0x31c>)
- 802d73a: f7f4 fa47 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d73e: a902 add r1, sp, #8
- 802d740: f89d 2007 ldrb.w r2, [sp, #7]
- 802d744: 4620 mov r0, r4
- 802d746: f7f4 fbe3 bl 8021f10 <strncat>
- /*Параметры реле и сухих контактов*/
- GetDINTypeActStr(str, &len, 0);
- 802d74a: 2200 movs r2, #0
- 802d74c: a802 add r0, sp, #8
- 802d74e: f10d 0107 add.w r1, sp, #7
- 802d752: f7fa f9e9 bl 8027b28 <GetDINTypeActStr>
- strcat(buf, "\",\"di1\":\"");
- 802d756: 4620 mov r0, r4
- 802d758: 498c ldr r1, [pc, #560] ; (802d98c <HTTP_GetSettings+0x320>)
- 802d75a: f7f4 fa37 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d75e: a902 add r1, sp, #8
- 802d760: f89d 2007 ldrb.w r2, [sp, #7]
- 802d764: 4620 mov r0, r4
- 802d766: f7f4 fbd3 bl 8021f10 <strncat>
- GetROTypeActStr(str, &len, 0);
- 802d76a: 2200 movs r2, #0
- 802d76c: a802 add r0, sp, #8
- 802d76e: f10d 0107 add.w r1, sp, #7
- 802d772: f7fa fa13 bl 8027b9c <GetROTypeActStr>
- strcat(buf, "\",\"ro1\":\"");
- 802d776: 4620 mov r0, r4
- 802d778: 4985 ldr r1, [pc, #532] ; (802d990 <HTTP_GetSettings+0x324>)
- 802d77a: f7f4 fa27 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d77e: a902 add r1, sp, #8
- 802d780: f89d 2007 ldrb.w r2, [sp, #7]
- 802d784: 4620 mov r0, r4
- 802d786: f7f4 fbc3 bl 8021f10 <strncat>
- GetROTypeActStr(str, &len, 1);
- 802d78a: 2201 movs r2, #1
- 802d78c: a802 add r0, sp, #8
- 802d78e: f10d 0107 add.w r1, sp, #7
- 802d792: f7fa fa03 bl 8027b9c <GetROTypeActStr>
- strcat(buf, "\",\"ro2\":\"");
- 802d796: 4620 mov r0, r4
- 802d798: 497e ldr r1, [pc, #504] ; (802d994 <HTTP_GetSettings+0x328>)
- 802d79a: f7f4 fa17 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d79e: f89d 2007 ldrb.w r2, [sp, #7]
- 802d7a2: a902 add r1, sp, #8
- 802d7a4: 4620 mov r0, r4
- 802d7a6: f7f4 fbb3 bl 8021f10 <strncat>
-
- /* WEB */
- GetIpStr(str, &len);
- 802d7aa: a802 add r0, sp, #8
- 802d7ac: f10d 0107 add.w r1, sp, #7
- 802d7b0: f7fa fb50 bl 8027e54 <GetIpStr>
- strcat(buf, "\",\"ipaddr\":\"");
- 802d7b4: 4620 mov r0, r4
- 802d7b6: 4978 ldr r1, [pc, #480] ; (802d998 <HTTP_GetSettings+0x32c>)
- 802d7b8: f7f4 fa08 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d7bc: f89d 2007 ldrb.w r2, [sp, #7]
- 802d7c0: a902 add r1, sp, #8
- 802d7c2: 4620 mov r0, r4
- 802d7c4: f7f4 fba4 bl 8021f10 <strncat>
-
- GetGatewayStr(str, &len);
- 802d7c8: a802 add r0, sp, #8
- 802d7ca: f10d 0107 add.w r1, sp, #7
- 802d7ce: f7fa fb57 bl 8027e80 <GetGatewayStr>
- strcat(buf, "\",\"gw\":\"");
- 802d7d2: 4620 mov r0, r4
- 802d7d4: 4971 ldr r1, [pc, #452] ; (802d99c <HTTP_GetSettings+0x330>)
- 802d7d6: f7f4 f9f9 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d7da: f89d 2007 ldrb.w r2, [sp, #7]
- 802d7de: a902 add r1, sp, #8
- 802d7e0: 4620 mov r0, r4
- 802d7e2: f7f4 fb95 bl 8021f10 <strncat>
-
- GetMaskStr(str, &len);
- 802d7e6: a802 add r0, sp, #8
- 802d7e8: f10d 0107 add.w r1, sp, #7
- 802d7ec: f7fa fb5e bl 8027eac <GetMaskStr>
- strcat(buf, "\",\"mask\":\"");
- 802d7f0: 4620 mov r0, r4
- 802d7f2: 496b ldr r1, [pc, #428] ; (802d9a0 <HTTP_GetSettings+0x334>)
- 802d7f4: f7f4 f9ea bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d7f8: f89d 2007 ldrb.w r2, [sp, #7]
- 802d7fc: a902 add r1, sp, #8
- 802d7fe: 4620 mov r0, r4
- 802d800: f7f4 fb86 bl 8021f10 <strncat>
-
- GetDhcpStateStr(str, &len);
- 802d804: a802 add r0, sp, #8
- 802d806: f10d 0107 add.w r1, sp, #7
- 802d80a: f7fa fb65 bl 8027ed8 <GetDhcpStateStr>
- strcat(buf, "\",\"dhcp\":");
- 802d80e: 4620 mov r0, r4
- 802d810: 4964 ldr r1, [pc, #400] ; (802d9a4 <HTTP_GetSettings+0x338>)
- 802d812: f7f4 f9db bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d816: f89d 2007 ldrb.w r2, [sp, #7]
- 802d81a: a902 add r1, sp, #8
- 802d81c: 4620 mov r0, r4
- 802d81e: f7f4 fb77 bl 8021f10 <strncat>
- GetAuthEnableStateStr(str, &len);
- 802d822: a802 add r0, sp, #8
- 802d824: f10d 0107 add.w r1, sp, #7
- 802d828: f7fa fc4e bl 80280c8 <GetAuthEnableStateStr>
- strcat(buf, ",\"auth\":");
- 802d82c: 4620 mov r0, r4
- 802d82e: 495e ldr r1, [pc, #376] ; (802d9a8 <HTTP_GetSettings+0x33c>)
- 802d830: f7f4 f9cc bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d834: f89d 2007 ldrb.w r2, [sp, #7]
- 802d838: a902 add r1, sp, #8
- 802d83a: 4620 mov r0, r4
- 802d83c: f7f4 fb68 bl 8021f10 <strncat>
- /* RADIUS */
- GetRDSIpStr(str, &len);
- 802d840: a802 add r0, sp, #8
- 802d842: f10d 0107 add.w r1, sp, #7
- 802d846: f7fa fbed bl 8028024 <GetRDSIpStr>
- strcat(buf, ",\"rs_server\":\"");
- 802d84a: 4620 mov r0, r4
- 802d84c: 4957 ldr r1, [pc, #348] ; (802d9ac <HTTP_GetSettings+0x340>)
- 802d84e: f7f4 f9bd bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d852: f89d 2007 ldrb.w r2, [sp, #7]
- 802d856: a902 add r1, sp, #8
- 802d858: 4620 mov r0, r4
- 802d85a: f7f4 fb59 bl 8021f10 <strncat>
- GetRDSPortStr(str, &len);
- 802d85e: a802 add r0, sp, #8
- 802d860: f10d 0107 add.w r1, sp, #7
- 802d864: f7fa fbee bl 8028044 <GetRDSPortStr>
- strcat(buf, "\",\"rs_port\":\"");
- 802d868: 4620 mov r0, r4
- 802d86a: 4951 ldr r1, [pc, #324] ; (802d9b0 <HTTP_GetSettings+0x344>)
- 802d86c: f7f4 f9ae bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d870: f89d 2007 ldrb.w r2, [sp, #7]
- 802d874: a902 add r1, sp, #8
- 802d876: 4620 mov r0, r4
- 802d878: f7f4 fb4a bl 8021f10 <strncat>
- GetRDSPasswordkStr(str, &len);
- 802d87c: a802 add r0, sp, #8
- 802d87e: f10d 0107 add.w r1, sp, #7
- 802d882: f7fa fc03 bl 802808c <GetRDSPasswordkStr>
- strcat(buf, "\",\"rs_pwd\":\"");
- 802d886: 4620 mov r0, r4
- 802d888: 494a ldr r1, [pc, #296] ; (802d9b4 <HTTP_GetSettings+0x348>)
- 802d88a: f7f4 f99f bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d88e: f89d 2007 ldrb.w r2, [sp, #7]
- 802d892: a902 add r1, sp, #8
- 802d894: 4620 mov r0, r4
- 802d896: f7f4 fb3b bl 8021f10 <strncat>
- GetRDSKeyAccesstStr(str, &len);
- 802d89a: a802 add r0, sp, #8
- 802d89c: f10d 0107 add.w r1, sp, #7
- 802d8a0: f7fa fbe2 bl 8028068 <GetRDSKeyAccesstStr>
- strcat(buf, "\",\"rs_key\":\"");
- 802d8a4: 4620 mov r0, r4
- 802d8a6: 4944 ldr r1, [pc, #272] ; (802d9b8 <HTTP_GetSettings+0x34c>)
- 802d8a8: f7f4 f990 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d8ac: f89d 2007 ldrb.w r2, [sp, #7]
- 802d8b0: a902 add r1, sp, #8
- 802d8b2: 4620 mov r0, r4
- 802d8b4: f7f4 fb2c bl 8021f10 <strncat>
- GetRDSEnableStateStr(str, &len);
- 802d8b8: a802 add r0, sp, #8
- 802d8ba: f10d 0107 add.w r1, sp, #7
- 802d8be: f7fa fbf5 bl 80280ac <GetRDSEnableStateStr>
- strcat(buf, "\",\"rs_enabled\":");
- 802d8c2: 4620 mov r0, r4
- 802d8c4: 493d ldr r1, [pc, #244] ; (802d9bc <HTTP_GetSettings+0x350>)
- 802d8c6: f7f4 f981 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d8ca: f89d 2007 ldrb.w r2, [sp, #7]
- 802d8ce: a902 add r1, sp, #8
- 802d8d0: 4620 mov r0, r4
- 802d8d2: f7f4 fb1d bl 8021f10 <strncat>
- /* Параметры даты и времени */
- GetDateStr(str, &len);
- 802d8d6: a802 add r0, sp, #8
- 802d8d8: f10d 0107 add.w r1, sp, #7
- 802d8dc: f7fa f886 bl 80279ec <GetDateStr>
- strcat(buf, ",\"date\":\"");
- 802d8e0: 4620 mov r0, r4
- 802d8e2: 4937 ldr r1, [pc, #220] ; (802d9c0 <HTTP_GetSettings+0x354>)
- 802d8e4: f7f4 f972 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d8e8: f89d 2007 ldrb.w r2, [sp, #7]
- 802d8ec: a902 add r1, sp, #8
- 802d8ee: 4620 mov r0, r4
- 802d8f0: f7f4 fb0e bl 8021f10 <strncat>
- GetTimeStr(str, &len);
- 802d8f4: a802 add r0, sp, #8
- 802d8f6: f10d 0107 add.w r1, sp, #7
- 802d8fa: f7fa f895 bl 8027a28 <GetTimeStr>
- strcat(buf, "\",\"time\":\"");
- 802d8fe: 4620 mov r0, r4
- 802d900: 4930 ldr r1, [pc, #192] ; (802d9c4 <HTTP_GetSettings+0x358>)
- 802d902: f7f4 f963 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d906: f89d 2007 ldrb.w r2, [sp, #7]
- 802d90a: a902 add r1, sp, #8
- 802d90c: 4620 mov r0, r4
- 802d90e: f7f4 faff bl 8021f10 <strncat>
- /* Параметры SNTP */
- GetSntpStateStr(str, &len);
- 802d912: a802 add r0, sp, #8
- 802d914: f10d 0107 add.w r1, sp, #7
- 802d918: f7fa f8b4 bl 8027a84 <GetSntpStateStr>
- strcat(buf, "\",\"ntp\":\"");
- 802d91c: 4620 mov r0, r4
- 802d91e: 492a ldr r1, [pc, #168] ; (802d9c8 <HTTP_GetSettings+0x35c>)
- 802d920: f7f4 f954 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d924: f89d 2007 ldrb.w r2, [sp, #7]
- 802d928: a902 add r1, sp, #8
- 802d92a: 4620 mov r0, r4
- 802d92c: f7f4 faf0 bl 8021f10 <strncat>
- GetSntpServerIpStr(str, &len);
- 802d930: a802 add r0, sp, #8
- 802d932: f10d 0107 add.w r1, sp, #7
- 802d936: f7fa f8bf bl 8027ab8 <GetSntpServerIpStr>
- strcat(buf, "\",\"ntpservip\":\"");
- 802d93a: 4620 mov r0, r4
- 802d93c: 4923 ldr r1, [pc, #140] ; (802d9cc <HTTP_GetSettings+0x360>)
- 802d93e: f7f4 f945 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d942: f89d 2007 ldrb.w r2, [sp, #7]
- 802d946: a902 add r1, sp, #8
- 802d948: 4620 mov r0, r4
- 802d94a: f7f4 fae1 bl 8021f10 <strncat>
- GetSntpTimeZoneStr(str, &len);
- 802d94e: a802 add r0, sp, #8
- 802d950: f10d 0107 add.w r1, sp, #7
- 802d954: f7fa f8c0 bl 8027ad8 <GetSntpTimeZoneStr>
- strcat(buf, "\",\"utc\":\"");
- 802d958: 4620 mov r0, r4
- 802d95a: 491d ldr r1, [pc, #116] ; (802d9d0 <HTTP_GetSettings+0x364>)
- 802d95c: f7f4 f936 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d960: f89d 2007 ldrb.w r2, [sp, #7]
- 802d964: a902 add r1, sp, #8
- 802d966: 4620 mov r0, r4
- 802d968: e034 b.n 802d9d4 <HTTP_GetSettings+0x368>
- 802d96a: bf00 nop
- 802d96c: 08044c64 .word 0x08044c64
- 802d970: 08044d52 .word 0x08044d52
- 802d974: 08044d66 .word 0x08044d66
- 802d978: 08044d7c .word 0x08044d7c
- 802d97c: 08044d8c .word 0x08044d8c
- 802d980: 08044d9d .word 0x08044d9d
- 802d984: 08044dae .word 0x08044dae
- 802d988: 08044dbf .word 0x08044dbf
- 802d98c: 08044cfb .word 0x08044cfb
- 802d990: 08044d05 .word 0x08044d05
- 802d994: 08044d0f .word 0x08044d0f
- 802d998: 08044dd0 .word 0x08044dd0
- 802d99c: 08044ddd .word 0x08044ddd
- 802d9a0: 08044de6 .word 0x08044de6
- 802d9a4: 08044df1 .word 0x08044df1
- 802d9a8: 08044dfb .word 0x08044dfb
- 802d9ac: 08044e04 .word 0x08044e04
- 802d9b0: 08044e13 .word 0x08044e13
- 802d9b4: 08044e21 .word 0x08044e21
- 802d9b8: 08044e2e .word 0x08044e2e
- 802d9bc: 08044e3b .word 0x08044e3b
- 802d9c0: 08044e4b .word 0x08044e4b
- 802d9c4: 08044e55 .word 0x08044e55
- 802d9c8: 08044e60 .word 0x08044e60
- 802d9cc: 08044e6a .word 0x08044e6a
- 802d9d0: 08044e7a .word 0x08044e7a
- 802d9d4: f7f4 fa9c bl 8021f10 <strncat>
- GetUnixTimeStr(str, &len);
- 802d9d8: a802 add r0, sp, #8
- 802d9da: f10d 0107 add.w r1, sp, #7
- 802d9de: f7fa f83b bl 8027a58 <GetUnixTimeStr>
- strcat(buf, "\",\"utm\":\"");
- 802d9e2: 4620 mov r0, r4
- 802d9e4: 4916 ldr r1, [pc, #88] ; (802da40 <HTTP_GetSettings+0x3d4>)
- 802d9e6: f7f4 f8f1 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802d9ea: f89d 2007 ldrb.w r2, [sp, #7]
- 802d9ee: a902 add r1, sp, #8
- 802d9f0: 4620 mov r0, r4
- 802d9f2: f7f4 fa8d bl 8021f10 <strncat>
- GetSntpLastDataStr(str, &len);
- 802d9f6: a802 add r0, sp, #8
- 802d9f8: f10d 0107 add.w r1, sp, #7
- 802d9fc: f7fa f884 bl 8027b08 <GetSntpLastDataStr>
- strcat(buf, "\",\"lastsynctime\":\"");
- 802da00: 4620 mov r0, r4
- 802da02: 4910 ldr r1, [pc, #64] ; (802da44 <HTTP_GetSettings+0x3d8>)
- 802da04: f7f4 f8e2 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802da08: f89d 2007 ldrb.w r2, [sp, #7]
- 802da0c: a902 add r1, sp, #8
- 802da0e: 4620 mov r0, r4
- 802da10: f7f4 fa7e bl 8021f10 <strncat>
-
- /* Признак изменения сетевых настроек */
- GetWebReinitFlag(str, &len);
- 802da14: a802 add r0, sp, #8
- 802da16: f10d 0107 add.w r1, sp, #7
- 802da1a: f7fa fb63 bl 80280e4 <GetWebReinitFlag>
- strcat(buf, "\",\"netsettings_changed\":\"");
- 802da1e: 4620 mov r0, r4
- 802da20: 4909 ldr r1, [pc, #36] ; (802da48 <HTTP_GetSettings+0x3dc>)
- 802da22: f7f4 f8d3 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802da26: a902 add r1, sp, #8
- 802da28: f89d 2007 ldrb.w r2, [sp, #7]
- 802da2c: 4620 mov r0, r4
- 802da2e: f7f4 fa6f bl 8021f10 <strncat>
-
- strncat(buf, "\"}", 2);
- 802da32: 4620 mov r0, r4
- 802da34: 4905 ldr r1, [pc, #20] ; (802da4c <HTTP_GetSettings+0x3e0>)
- 802da36: 2202 movs r2, #2
- 802da38: f7f4 fa6a bl 8021f10 <strncat>
-
- //printf(buf);
- }
- 802da3c: b00a add sp, #40 ; 0x28
- 802da3e: bd10 pop {r4, pc}
- 802da40: 08044e84 .word 0x08044e84
- 802da44: 08044e8e .word 0x08044e8e
- 802da48: 08044d35 .word 0x08044d35
- 802da4c: 08044d4f .word 0x08044d4f
- 0802da50 <HTTP_GetInfo>:
- * @brief Возвращяет строку с информацией об устройстве
- * @retval None
- */
- // TODO Согласовать максимальную длину строк
- void HTTP_GetInfo(char *buf)
- {
- 802da50: b510 push {r4, lr}
- char str[40];
- uint8_t len;
-
- /* Headers для поддержки saffari */
- strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
- 802da52: 4960 ldr r1, [pc, #384] ; (802dbd4 <HTTP_GetInfo+0x184>)
- * @brief Возвращяет строку с информацией об устройстве
- * @retval None
- */
- // TODO Согласовать максимальную длину строк
- void HTTP_GetInfo(char *buf)
- {
- 802da54: b08c sub sp, #48 ; 0x30
- 802da56: 4604 mov r4, r0
- char str[40];
- uint8_t len;
-
- /* Headers для поддержки saffari */
- strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
- 802da58: f7f4 f9cc bl 8021df4 <strcpy>
-
- GetWorkTimeStr(str, &len);
- 802da5c: a802 add r0, sp, #8
- 802da5e: f10d 0107 add.w r1, sp, #7
- 802da62: f7fa f8e7 bl 8027c34 <GetWorkTimeStr>
- strcat(buf, "{\"uptime\":\"");
- 802da66: 4620 mov r0, r4
- 802da68: 495b ldr r1, [pc, #364] ; (802dbd8 <HTTP_GetInfo+0x188>)
- 802da6a: f7f4 f8af bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802da6e: f89d 2007 ldrb.w r2, [sp, #7]
- 802da72: a902 add r1, sp, #8
- 802da74: 4620 mov r0, r4
- 802da76: f7f4 fa4b bl 8021f10 <strncat>
-
- GetModelStr(str, &len);
- 802da7a: a802 add r0, sp, #8
- 802da7c: f10d 0107 add.w r1, sp, #7
- 802da80: f7fa f8fe bl 8027c80 <GetModelStr>
- strcat(buf, "\",\"model\":\"");
- 802da84: 4620 mov r0, r4
- 802da86: 4955 ldr r1, [pc, #340] ; (802dbdc <HTTP_GetInfo+0x18c>)
- 802da88: f7f4 f8a0 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802da8c: f89d 2007 ldrb.w r2, [sp, #7]
- 802da90: a902 add r1, sp, #8
- 802da92: 4620 mov r0, r4
- 802da94: f7f4 fa3c bl 8021f10 <strncat>
-
- GetProductionDataStr(str, &len);
- 802da98: a802 add r0, sp, #8
- 802da9a: f10d 0107 add.w r1, sp, #7
- 802da9e: f7fa f901 bl 8027ca4 <GetProductionDataStr>
- strcat(buf, "\",\"prodate\":\"");
- 802daa2: 4620 mov r0, r4
- 802daa4: 494e ldr r1, [pc, #312] ; (802dbe0 <HTTP_GetInfo+0x190>)
- 802daa6: f7f4 f891 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802daaa: f89d 2007 ldrb.w r2, [sp, #7]
- 802daae: a902 add r1, sp, #8
- 802dab0: 4620 mov r0, r4
- 802dab2: f7f4 fa2d bl 8021f10 <strncat>
-
- GetVersionStr(str, &len);
- 802dab6: a802 add r0, sp, #8
- 802dab8: f10d 0107 add.w r1, sp, #7
- 802dabc: f7fa f904 bl 8027cc8 <GetVersionStr>
- strcat(buf, "\",\"fwversion\":\"");
- 802dac0: 4620 mov r0, r4
- 802dac2: 4948 ldr r1, [pc, #288] ; (802dbe4 <HTTP_GetInfo+0x194>)
- 802dac4: f7f4 f882 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802dac8: f89d 2007 ldrb.w r2, [sp, #7]
- 802dacc: a902 add r1, sp, #8
- 802dace: 4620 mov r0, r4
- 802dad0: f7f4 fa1e bl 8021f10 <strncat>
-
- GetMacStr(str, &len);
- 802dad4: a802 add r0, sp, #8
- 802dad6: f10d 0107 add.w r1, sp, #7
- 802dada: f7fa f907 bl 8027cec <GetMacStr>
- strcat(buf, "\",\"macaddr\":\"");
- 802dade: 4620 mov r0, r4
- 802dae0: 4941 ldr r1, [pc, #260] ; (802dbe8 <HTTP_GetInfo+0x198>)
- 802dae2: f7f4 f873 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802dae6: f89d 2007 ldrb.w r2, [sp, #7]
- 802daea: a902 add r1, sp, #8
- 802daec: 4620 mov r0, r4
- 802daee: f7f4 fa0f bl 8021f10 <strncat>
-
- GetSerialNumberStr(str, &len);
- 802daf2: a802 add r0, sp, #8
- 802daf4: f10d 0107 add.w r1, sp, #7
- 802daf8: f7fa f90a bl 8027d10 <GetSerialNumberStr>
- strcat(buf, "\",\"serno\":\"");
- 802dafc: 4620 mov r0, r4
- 802dafe: 493b ldr r1, [pc, #236] ; (802dbec <HTTP_GetInfo+0x19c>)
- 802db00: f7f4 f864 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802db04: f89d 2007 ldrb.w r2, [sp, #7]
- 802db08: a902 add r1, sp, #8
- 802db0a: 4620 mov r0, r4
- 802db0c: f7f4 fa00 bl 8021f10 <strncat>
-
- GetOwnerStr(str, &len);
- 802db10: a802 add r0, sp, #8
- 802db12: f10d 0107 add.w r1, sp, #7
- 802db16: f7fa f90d bl 8027d34 <GetOwnerStr>
- strcat(buf, "\",\"owner\":\"");
- 802db1a: 4620 mov r0, r4
- 802db1c: 4934 ldr r1, [pc, #208] ; (802dbf0 <HTTP_GetInfo+0x1a0>)
- 802db1e: f7f4 f855 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802db22: f89d 2007 ldrb.w r2, [sp, #7]
- 802db26: a902 add r1, sp, #8
- 802db28: 4620 mov r0, r4
- 802db2a: f7f4 f9f1 bl 8021f10 <strncat>
-
- GetLocationStr(str, &len);
- 802db2e: a802 add r0, sp, #8
- 802db30: f10d 0107 add.w r1, sp, #7
- 802db34: f7fa f910 bl 8027d58 <GetLocationStr>
- strcat(buf, "\",\"sysLocation\":\"");
- 802db38: 4620 mov r0, r4
- 802db3a: 492e ldr r1, [pc, #184] ; (802dbf4 <HTTP_GetInfo+0x1a4>)
- 802db3c: f7f4 f846 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802db40: f89d 2007 ldrb.w r2, [sp, #7]
- 802db44: a902 add r1, sp, #8
- 802db46: 4620 mov r0, r4
- 802db48: f7f4 f9e2 bl 8021f10 <strncat>
-
- GetCommentsStr(str, &len);
- 802db4c: a802 add r0, sp, #8
- 802db4e: f10d 0107 add.w r1, sp, #7
- 802db52: f7fa f913 bl 8027d7c <GetCommentsStr>
- strcat(buf, "\",\"comment\":\"");
- 802db56: 4620 mov r0, r4
- 802db58: 4927 ldr r1, [pc, #156] ; (802dbf8 <HTTP_GetInfo+0x1a8>)
- 802db5a: f7f4 f837 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802db5e: f89d 2007 ldrb.w r2, [sp, #7]
- 802db62: a902 add r1, sp, #8
- 802db64: 4620 mov r0, r4
- 802db66: f7f4 f9d3 bl 8021f10 <strncat>
- GetUPSModelStr(str, &len);
- 802db6a: a802 add r0, sp, #8
- 802db6c: f10d 0107 add.w r1, sp, #7
- 802db70: f7fa f916 bl 8027da0 <GetUPSModelStr>
- strcat(buf, "\",\"ups_model\":\"");
- 802db74: 4620 mov r0, r4
- 802db76: 4921 ldr r1, [pc, #132] ; (802dbfc <HTTP_GetInfo+0x1ac>)
- 802db78: f7f4 f828 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802db7c: f89d 2007 ldrb.w r2, [sp, #7]
- 802db80: a902 add r1, sp, #8
- 802db82: 4620 mov r0, r4
- 802db84: f7f4 f9c4 bl 8021f10 <strncat>
- GetUPSVersionStr(str, &len);
- 802db88: a802 add r0, sp, #8
- 802db8a: f10d 0107 add.w r1, sp, #7
- 802db8e: f7fa f919 bl 8027dc4 <GetUPSVersionStr>
- strcat(buf, "\",\"ups_fwversion\":\"");
- 802db92: 4620 mov r0, r4
- 802db94: 491a ldr r1, [pc, #104] ; (802dc00 <HTTP_GetInfo+0x1b0>)
- 802db96: f7f4 f819 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802db9a: f89d 2007 ldrb.w r2, [sp, #7]
- 802db9e: a902 add r1, sp, #8
- 802dba0: 4620 mov r0, r4
- 802dba2: f7f4 f9b5 bl 8021f10 <strncat>
-
- /* Признак изменения сетевых настроек */
- GetWebReinitFlag(str, &len);
- 802dba6: a802 add r0, sp, #8
- 802dba8: f10d 0107 add.w r1, sp, #7
- 802dbac: f7fa fa9a bl 80280e4 <GetWebReinitFlag>
- strcat(buf, "\",\"netsettings_changed\":\"");
- 802dbb0: 4620 mov r0, r4
- 802dbb2: 4914 ldr r1, [pc, #80] ; (802dc04 <HTTP_GetInfo+0x1b4>)
- 802dbb4: f7f4 f80a bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802dbb8: a902 add r1, sp, #8
- 802dbba: f89d 2007 ldrb.w r2, [sp, #7]
- 802dbbe: 4620 mov r0, r4
- 802dbc0: f7f4 f9a6 bl 8021f10 <strncat>
-
- strncat(buf, "\"}", 2);
- 802dbc4: 4620 mov r0, r4
- 802dbc6: 4910 ldr r1, [pc, #64] ; (802dc08 <HTTP_GetInfo+0x1b8>)
- 802dbc8: 2202 movs r2, #2
- 802dbca: f7f4 f9a1 bl 8021f10 <strncat>
-
- }
- 802dbce: b00c add sp, #48 ; 0x30
- 802dbd0: bd10 pop {r4, pc}
- 802dbd2: bf00 nop
- 802dbd4: 08044c64 .word 0x08044c64
- 802dbd8: 08044ea1 .word 0x08044ea1
- 802dbdc: 08044ead .word 0x08044ead
- 802dbe0: 08044eb9 .word 0x08044eb9
- 802dbe4: 08044ec7 .word 0x08044ec7
- 802dbe8: 08044ed7 .word 0x08044ed7
- 802dbec: 08044ee5 .word 0x08044ee5
- 802dbf0: 08044ef1 .word 0x08044ef1
- 802dbf4: 08044efd .word 0x08044efd
- 802dbf8: 08044f0f .word 0x08044f0f
- 802dbfc: 08044f1d .word 0x08044f1d
- 802dc00: 08044f2d .word 0x08044f2d
- 802dc04: 08044d35 .word 0x08044d35
- 802dc08: 08044d4f .word 0x08044d4f
- 0802dc0c <HTTP_GetHistoryPage>:
- void HTTP_GetHistoryPage(char* buf, uint32_t pageNumber)
- {
- 802dc0c: b530 push {r4, r5, lr}
- 802dc0e: 4605 mov r5, r0
- 802dc10: b087 sub sp, #28
- 802dc12: 460c mov r4, r1
- char str[16];
- uint16_t len;
- strcpy(buf, "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n");
- 802dc14: 4927 ldr r1, [pc, #156] ; (802dcb4 <HTTP_GetHistoryPage+0xa8>)
- 802dc16: f7f4 f8ed bl 8021df4 <strcpy>
- strcat(buf, "{\"page\": [");
- 802dc1a: 4628 mov r0, r5
- 802dc1c: 4926 ldr r1, [pc, #152] ; (802dcb8 <HTTP_GetHistoryPage+0xac>)
- 802dc1e: f7f3 ffd5 bl 8021bcc <strcat>
- History_GetPage(buf, pageNumber);
- 802dc22: 4621 mov r1, r4
- 802dc24: 4628 mov r0, r5
- 802dc26: f7fc f84f bl 8029cc8 <History_GetPage>
- len = strlen(buf);
- 802dc2a: 4628 mov r0, r5
- 802dc2c: f7f4 f940 bl 8021eb0 <strlen>
- 802dc30: f8ad 0006 strh.w r0, [sp, #6]
- buf +=len-1;
- 802dc34: b280 uxth r0, r0
- 802dc36: 1e43 subs r3, r0, #1
- 802dc38: 18ec adds r4, r5, r3
- *buf = 0;
- 802dc3a: 2100 movs r1, #0
- buf -=len-1;
- 802dc3c: f1c0 0001 rsb r0, r0, #1
- strcat(buf, "{\"page\": [");
- History_GetPage(buf, pageNumber);
- len = strlen(buf);
- buf +=len-1;
- *buf = 0;
- 802dc40: 54e9 strb r1, [r5, r3]
- buf -=len-1;
- 802dc42: 1824 adds r4, r4, r0
- /* Количество страниц */
- memset(str, 0, 16);
- 802dc44: 2210 movs r2, #16
- 802dc46: a802 add r0, sp, #8
- 802dc48: f7f3 ff5a bl 8021b00 <memset>
- sprintf(str, "%i", History_GetPageCount());
- 802dc4c: f7fc f82a bl 8029ca4 <History_GetPageCount>
- 802dc50: 491a ldr r1, [pc, #104] ; (802dcbc <HTTP_GetHistoryPage+0xb0>)
- 802dc52: 4602 mov r2, r0
- 802dc54: a802 add r0, sp, #8
- 802dc56: f7f9 fddd bl 8027814 <tfp_sprintf>
- strcat(buf, "],\"pages\":\"");
- 802dc5a: 4620 mov r0, r4
- 802dc5c: 4918 ldr r1, [pc, #96] ; (802dcc0 <HTTP_GetHistoryPage+0xb4>)
- 802dc5e: f7f3 ffb5 bl 8021bcc <strcat>
- strcat(buf, str);
- 802dc62: a902 add r1, sp, #8
- 802dc64: 4620 mov r0, r4
- 802dc66: f7f3 ffb1 bl 8021bcc <strcat>
- /* Часовой пояс */
- GetSntpTimeZoneStr(str, (uint8_t*)&len);
- 802dc6a: a802 add r0, sp, #8
- 802dc6c: f10d 0106 add.w r1, sp, #6
- 802dc70: f7f9 ff32 bl 8027ad8 <GetSntpTimeZoneStr>
- strcat(buf, "\",\"utc\":\"");
- 802dc74: 4620 mov r0, r4
- 802dc76: 4913 ldr r1, [pc, #76] ; (802dcc4 <HTTP_GetHistoryPage+0xb8>)
- 802dc78: f7f3 ffa8 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802dc7c: f8bd 2006 ldrh.w r2, [sp, #6]
- 802dc80: a902 add r1, sp, #8
- 802dc82: 4620 mov r0, r4
- 802dc84: f7f4 f944 bl 8021f10 <strncat>
- GetUnixTimeStr(str, (uint8_t*)&len);
- 802dc88: a802 add r0, sp, #8
- 802dc8a: f10d 0106 add.w r1, sp, #6
- 802dc8e: f7f9 fee3 bl 8027a58 <GetUnixTimeStr>
- strcat(buf, "\",\"utm\":\"");
- 802dc92: 4620 mov r0, r4
- 802dc94: 490c ldr r1, [pc, #48] ; (802dcc8 <HTTP_GetHistoryPage+0xbc>)
- 802dc96: f7f3 ff99 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802dc9a: a902 add r1, sp, #8
- 802dc9c: 4620 mov r0, r4
- 802dc9e: f8bd 2006 ldrh.w r2, [sp, #6]
- 802dca2: f7f4 f935 bl 8021f10 <strncat>
- strcat(buf, "\"}");
- 802dca6: 4620 mov r0, r4
- 802dca8: 4908 ldr r1, [pc, #32] ; (802dccc <HTTP_GetHistoryPage+0xc0>)
- 802dcaa: f7f3 ff8f bl 8021bcc <strcat>
- //printf(buf);
- }
- 802dcae: b007 add sp, #28
- 802dcb0: bd30 pop {r4, r5, pc}
- 802dcb2: bf00 nop
- 802dcb4: 08044f41 .word 0x08044f41
- 802dcb8: 08044f6d .word 0x08044f6d
- 802dcbc: 08044f78 .word 0x08044f78
- 802dcc0: 08044f7b .word 0x08044f7b
- 802dcc4: 08044e7a .word 0x08044e7a
- 802dcc8: 08044e84 .word 0x08044e84
- 802dccc: 08044d4f .word 0x08044d4f
- 0802dcd0 <HTTP_GetUpsHistoryPage>:
- void HTTP_GetUpsHistoryPage(char* buf, uint32_t pageNumber)
- {
- 802dcd0: b530 push {r4, r5, lr}
- 802dcd2: 4605 mov r5, r0
- 802dcd4: b087 sub sp, #28
- 802dcd6: 460c mov r4, r1
- char str[16];
- uint16_t len;
- strcpy(buf, "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n");
- 802dcd8: 4927 ldr r1, [pc, #156] ; (802dd78 <HTTP_GetUpsHistoryPage+0xa8>)
- 802dcda: f7f4 f88b bl 8021df4 <strcpy>
- strcat(buf, "{\"page\": [");
- 802dcde: 4628 mov r0, r5
- 802dce0: 4926 ldr r1, [pc, #152] ; (802dd7c <HTTP_GetUpsHistoryPage+0xac>)
- 802dce2: f7f3 ff73 bl 8021bcc <strcat>
- LOG_GetPage(buf, pageNumber);
- 802dce6: 4621 mov r1, r4
- 802dce8: 4628 mov r0, r5
- 802dcea: f7fb ff09 bl 8029b00 <LOG_GetPage>
- len = strlen(buf);
- 802dcee: 4628 mov r0, r5
- 802dcf0: f7f4 f8de bl 8021eb0 <strlen>
- 802dcf4: f8ad 0006 strh.w r0, [sp, #6]
- buf +=len-1;
- 802dcf8: b280 uxth r0, r0
- 802dcfa: 1e43 subs r3, r0, #1
- 802dcfc: 18ec adds r4, r5, r3
- *buf = 0;
- 802dcfe: 2100 movs r1, #0
- buf -=len-1;
- 802dd00: f1c0 0001 rsb r0, r0, #1
- strcat(buf, "{\"page\": [");
- LOG_GetPage(buf, pageNumber);
- len = strlen(buf);
- buf +=len-1;
- *buf = 0;
- 802dd04: 54e9 strb r1, [r5, r3]
- buf -=len-1;
- 802dd06: 1824 adds r4, r4, r0
- /* Количество страниц */
- memset(str, 0, 16);
- 802dd08: 2210 movs r2, #16
- 802dd0a: a802 add r0, sp, #8
- 802dd0c: f7f3 fef8 bl 8021b00 <memset>
- sprintf(str, "%i", LOG_GetPageCount());
- 802dd10: f7fb fee4 bl 8029adc <LOG_GetPageCount>
- 802dd14: 491a ldr r1, [pc, #104] ; (802dd80 <HTTP_GetUpsHistoryPage+0xb0>)
- 802dd16: 4602 mov r2, r0
- 802dd18: a802 add r0, sp, #8
- 802dd1a: f7f9 fd7b bl 8027814 <tfp_sprintf>
- strcat(buf, "],\"pages\":\"");
- 802dd1e: 4620 mov r0, r4
- 802dd20: 4918 ldr r1, [pc, #96] ; (802dd84 <HTTP_GetUpsHistoryPage+0xb4>)
- 802dd22: f7f3 ff53 bl 8021bcc <strcat>
- strcat(buf, str);
- 802dd26: a902 add r1, sp, #8
- 802dd28: 4620 mov r0, r4
- 802dd2a: f7f3 ff4f bl 8021bcc <strcat>
- /* Часовой пояс */
- GetSntpTimeZoneStr(str, (uint8_t*)&len);
- 802dd2e: a802 add r0, sp, #8
- 802dd30: f10d 0106 add.w r1, sp, #6
- 802dd34: f7f9 fed0 bl 8027ad8 <GetSntpTimeZoneStr>
- strcat(buf, "\",\"utc\":\"");
- 802dd38: 4620 mov r0, r4
- 802dd3a: 4913 ldr r1, [pc, #76] ; (802dd88 <HTTP_GetUpsHistoryPage+0xb8>)
- 802dd3c: f7f3 ff46 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802dd40: f8bd 2006 ldrh.w r2, [sp, #6]
- 802dd44: a902 add r1, sp, #8
- 802dd46: 4620 mov r0, r4
- 802dd48: f7f4 f8e2 bl 8021f10 <strncat>
- GetUnixTimeStr(str, (uint8_t*)&len);
- 802dd4c: a802 add r0, sp, #8
- 802dd4e: f10d 0106 add.w r1, sp, #6
- 802dd52: f7f9 fe81 bl 8027a58 <GetUnixTimeStr>
- strcat(buf, "\",\"utm\":\"");
- 802dd56: 4620 mov r0, r4
- 802dd58: 490c ldr r1, [pc, #48] ; (802dd8c <HTTP_GetUpsHistoryPage+0xbc>)
- 802dd5a: f7f3 ff37 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 802dd5e: a902 add r1, sp, #8
- 802dd60: 4620 mov r0, r4
- 802dd62: f8bd 2006 ldrh.w r2, [sp, #6]
- 802dd66: f7f4 f8d3 bl 8021f10 <strncat>
- strcat(buf, "\"}");
- 802dd6a: 4620 mov r0, r4
- 802dd6c: 4908 ldr r1, [pc, #32] ; (802dd90 <HTTP_GetUpsHistoryPage+0xc0>)
- 802dd6e: f7f3 ff2d bl 8021bcc <strcat>
- //printf(buf);
- }
- 802dd72: b007 add sp, #28
- 802dd74: bd30 pop {r4, r5, pc}
- 802dd76: bf00 nop
- 802dd78: 08044f41 .word 0x08044f41
- 802dd7c: 08044f6d .word 0x08044f6d
- 802dd80: 08044f78 .word 0x08044f78
- 802dd84: 08044f7b .word 0x08044f7b
- 802dd88: 08044e7a .word 0x08044e7a
- 802dd8c: 08044e84 .word 0x08044e84
- 802dd90: 08044d4f .word 0x08044d4f
- 0802dd94 <HTTP_ResetSettings>:
- /**
- * @brief Сброс настроек (всё кроме сетевых параметров)
- */
- void HTTP_ResetSettings(void)
- {
- 802dd94: b508 push {r3, lr}
- //taskENTER_CRITICAL();
- SNMP_SendUserTrap(DEVICE_RESTORED);
- 802dd96: 2003 movs r0, #3
- 802dd98: f00a f9d0 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
- 802dd9c: 4906 ldr r1, [pc, #24] ; (802ddb8 <HTTP_ResetSettings+0x24>)
- 802dd9e: 2001 movs r0, #1
- 802dda0: f7fb fe5c bl 8029a5c <log_event_data>
- vTaskDelay(500);
- 802dda4: f44f 70fa mov.w r0, #500 ; 0x1f4
- 802dda8: f7fd f910 bl 802afcc <vTaskDelay>
- SETTINGS_SetPartDefault();
- 802ddac: f7fa fdda bl 8028964 <SETTINGS_SetPartDefault>
- SETTINGS_Save();
-
- //taskEXIT_CRITICAL();
- }
- 802ddb0: e8bd 4008 ldmia.w sp!, {r3, lr}
- SNMP_SendUserTrap(DEVICE_RESTORED);
- log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
- vTaskDelay(500);
- SETTINGS_SetPartDefault();
- SETTINGS_Save();
- 802ddb4: f7fa bd6a b.w 802888c <SETTINGS_Save>
- 802ddb8: 08039ab8 .word 0x08039ab8
- 0802ddbc <HTTP_SaveSettings>:
- /**
- * @brief Сохранение настроек
- */
- void HTTP_SaveSettings(void)
- {
- 802ddbc: b508 push {r3, lr}
- // taskENTER_CRITICAL();
-
- SETTINGS_Save();
- 802ddbe: f7fa fd65 bl 802888c <SETTINGS_Save>
-
- log_event_data(LOG_SETTING_SAVE, "Администратор");
- 802ddc2: 4903 ldr r1, [pc, #12] ; (802ddd0 <HTTP_SaveSettings+0x14>)
- 802ddc4: 2004 movs r0, #4
- // taskEXIT_CRITICAL();
- }
- 802ddc6: e8bd 4008 ldmia.w sp!, {r3, lr}
- {
- // taskENTER_CRITICAL();
-
- SETTINGS_Save();
-
- log_event_data(LOG_SETTING_SAVE, "Администратор");
- 802ddca: f7fb be47 b.w 8029a5c <log_event_data>
- 802ddce: bf00 nop
- 802ddd0: 08039ab8 .word 0x08039ab8
- 0802ddd4 <vTaskReboot>:
- /**
- * @brief
- */
- void vTaskReboot(void * pvParameters)
- {
- 802ddd4: b510 push {r4, lr}
- 802ddd6: 4604 mov r4, r0
-
- for (;;)
- {
- mode = *(bool*)pvParameters;
-
- if (mode)
- 802ddd8: 7823 ldrb r3, [r4, #0]
- 802ddda: b16b cbz r3, 802ddf8 <vTaskReboot+0x24>
- {
- SNMP_SendUserTrap(FW_VERSION_UPDATE);
- 802dddc: 2001 movs r0, #1
- 802ddde: f00a f9ad bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_UPDATE_SOFT, "Администратор");
- 802dde2: 2002 movs r0, #2
- 802dde4: 490a ldr r1, [pc, #40] ; (802de10 <vTaskReboot+0x3c>)
- 802dde6: f7fb fe39 bl 8029a5c <log_event_data>
- SetLoadMode();
- 802ddea: f7fa f995 bl 8028118 <SetLoadMode>
- HTTP_SaveSettings();
- 802ddee: f7ff ffe5 bl 802ddbc <HTTP_SaveSettings>
- vTaskDelay(2000);
- 802ddf2: f44f 60fa mov.w r0, #2000 ; 0x7d0
- 802ddf6: e001 b.n 802ddfc <vTaskReboot+0x28>
- vTaskDelay(1010);
- Reboot();
- }
- else
- {
- vTaskDelay(1000);
- 802ddf8: f44f 707a mov.w r0, #1000 ; 0x3e8
- 802ddfc: f7fd f8e6 bl 802afcc <vTaskDelay>
- /* Блокируем управление ключем на тау секунд*/
- //IO_KeyBlockOn();
- vTaskDelay(1010);
- 802de00: f240 30f2 movw r0, #1010 ; 0x3f2
- 802de04: f7fd f8e2 bl 802afcc <vTaskDelay>
- Reboot();
- 802de08: f7fb f97c bl 8029104 <Reboot>
- 802de0c: e7e4 b.n 802ddd8 <vTaskReboot+0x4>
- 802de0e: bf00 nop
- 802de10: 08039ab8 .word 0x08039ab8
- 0802de14 <HTTP_Reboot>:
- /**
- * @brief Перезагрузка контроллера
- */
- void HTTP_Reboot(void)
- {
- 802de14: b508 push {r3, lr}
- vTaskDelay(1010);
- 802de16: f240 30f2 movw r0, #1010 ; 0x3f2
- 802de1a: f7fd f8d7 bl 802afcc <vTaskDelay>
- Reboot();
- }
- 802de1e: e8bd 4008 ldmia.w sp!, {r3, lr}
- * @brief Перезагрузка контроллера
- */
- void HTTP_Reboot(void)
- {
- vTaskDelay(1010);
- Reboot();
- 802de22: f7fb b96f b.w 8029104 <Reboot>
- 802de26: 0000 movs r0, r0
- 0802de28 <HTTP_StartResetTask>:
- * bootloader и перезаписаны настройки
- *
- * false - обычная перезагрузка
- */
- void HTTP_StartResetTask(bool fBootMode)
- {
- 802de28: b51f push {r0, r1, r2, r3, r4, lr}
- static bool temp;
-
- temp = fBootMode;
- 802de2a: 4b07 ldr r3, [pc, #28] ; (802de48 <HTTP_StartResetTask+0x20>)
- xTaskCreate(vTaskReboot, "RebootTask", configMINIMAL_STACK_SIZE,
- 802de2c: 4907 ldr r1, [pc, #28] ; (802de4c <HTTP_StartResetTask+0x24>)
- */
- void HTTP_StartResetTask(bool fBootMode)
- {
- static bool temp;
-
- temp = fBootMode;
- 802de2e: 7018 strb r0, [r3, #0]
- xTaskCreate(vTaskReboot, "RebootTask", configMINIMAL_STACK_SIZE,
- 802de30: 2200 movs r2, #0
- 802de32: 9200 str r2, [sp, #0]
- 802de34: 9201 str r2, [sp, #4]
- 802de36: 9202 str r2, [sp, #8]
- 802de38: 9203 str r2, [sp, #12]
- 802de3a: 4805 ldr r0, [pc, #20] ; (802de50 <HTTP_StartResetTask+0x28>)
- 802de3c: 2280 movs r2, #128 ; 0x80
- 802de3e: f7fc fe2b bl 802aa98 <xTaskGenericCreate>
- (void*)&temp, tskIDLE_PRIORITY, NULL);
- }
- 802de42: b005 add sp, #20
- 802de44: bd00 pop {pc}
- 802de46: bf00 nop
- 802de48: 20000d36 .word 0x20000d36
- 802de4c: 08044f87 .word 0x08044f87
- 802de50: 0802ddd5 .word 0x0802ddd5
- 0802de54 <netconn_recv_data>:
- * @return ERR_OK if data has been received, an error code otherwise (timeout,
- * memory error or another error)
- */
- static err_t
- netconn_recv_data(struct netconn *conn, void **new_buf)
- {
- 802de54: b530 push {r4, r5, lr}
- 802de56: b089 sub sp, #36 ; 0x24
- void *buf = NULL;
- 802de58: 2300 movs r3, #0
- * @return ERR_OK if data has been received, an error code otherwise (timeout,
- * memory error or another error)
- */
- static err_t
- netconn_recv_data(struct netconn *conn, void **new_buf)
- {
- 802de5a: 4604 mov r4, r0
- void *buf = NULL;
- 802de5c: 9301 str r3, [sp, #4]
- err_t err;
- #if LWIP_TCP
- struct api_msg msg;
- #endif /* LWIP_TCP */
- LWIP_ERROR("netconn_recv: invalid pointer", (new_buf != NULL), return ERR_ARG;);
- 802de5e: 460d mov r5, r1
- 802de60: b909 cbnz r1, 802de66 <netconn_recv_data+0x12>
- 802de62: 20f2 movs r0, #242 ; 0xf2
- 802de64: e055 b.n 802df12 <netconn_recv_data+0xbe>
- *new_buf = NULL;
- 802de66: 600b str r3, [r1, #0]
- LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;);
- 802de68: 2800 cmp r0, #0
- 802de6a: d0fa beq.n 802de62 <netconn_recv_data+0xe>
- LWIP_ERROR("netconn_accept: invalid recvmbox", sys_mbox_valid(&conn->recvmbox), return ERR_CONN;);
- 802de6c: 6903 ldr r3, [r0, #16]
- 802de6e: 2b00 cmp r3, #0
- 802de70: d04e beq.n 802df10 <netconn_recv_data+0xbc>
- err = conn->last_err;
- 802de72: 7a00 ldrb r0, [r0, #8]
- if (ERR_IS_FATAL(err)) {
- 802de74: b243 sxtb r3, r0
- 802de76: 3309 adds r3, #9
- 802de78: db4b blt.n 802df12 <netconn_recv_data+0xbe>
- before the fatal error occurred - is that a problem? */
- return err;
- }
- #if LWIP_SO_RCVTIMEO
- if (sys_arch_mbox_fetch(&conn->recvmbox, &buf, conn->recv_timeout) == SYS_ARCH_TIMEOUT) {
- 802de7a: f104 0010 add.w r0, r4, #16
- 802de7e: a901 add r1, sp, #4
- 802de80: 69a2 ldr r2, [r4, #24]
- 802de82: f009 fd43 bl 803790c <sys_arch_mbox_fetch>
- 802de86: 3001 adds r0, #1
- 802de88: d10b bne.n 802dea2 <netconn_recv_data+0x4e>
- NETCONN_SET_SAFE_ERR(conn, ERR_TIMEOUT);
- 802de8a: f009 fe1d bl 8037ac8 <sys_arch_protect>
- 802de8e: f994 3008 ldrsb.w r3, [r4, #8]
- 802de92: 3309 adds r3, #9
- 802de94: db01 blt.n 802de9a <netconn_recv_data+0x46>
- 802de96: 23fd movs r3, #253 ; 0xfd
- 802de98: 7223 strb r3, [r4, #8]
- 802de9a: f009 fe1f bl 8037adc <sys_arch_unprotect>
- return ERR_TIMEOUT;
- 802de9e: 20fd movs r0, #253 ; 0xfd
- 802dea0: e037 b.n 802df12 <netconn_recv_data+0xbe>
- sys_arch_mbox_fetch(&conn->recvmbox, &buf, 0);
- #endif /* LWIP_SO_RCVTIMEO*/
- #if LWIP_TCP
- #if (LWIP_UDP || LWIP_RAW)
- if (conn->type == NETCONN_TCP)
- 802dea2: 7823 ldrb r3, [r4, #0]
- 802dea4: 2b10 cmp r3, #16
- 802dea6: d127 bne.n 802def8 <netconn_recv_data+0xa4>
- #endif /* (LWIP_UDP || LWIP_RAW) */
- {
- if (!netconn_get_noautorecved(conn) || (buf == NULL)) {
- 802dea8: 7f23 ldrb r3, [r4, #28]
- 802deaa: f003 0308 and.w r3, r3, #8
- 802deae: b2db uxtb r3, r3
- 802deb0: b10b cbz r3, 802deb6 <netconn_recv_data+0x62>
- 802deb2: 9b01 ldr r3, [sp, #4]
- 802deb4: b95b cbnz r3, 802dece <netconn_recv_data+0x7a>
- /* Let the stack know that we have taken the data. */
- /* TODO: Speedup: Don't block and wait for the answer here
- (to prevent multiple thread-switches). */
- msg.function = do_recv;
- 802deb6: 4b18 ldr r3, [pc, #96] ; (802df18 <netconn_recv_data+0xc4>)
- msg.msg.conn = conn;
- 802deb8: 9403 str r4, [sp, #12]
- {
- if (!netconn_get_noautorecved(conn) || (buf == NULL)) {
- /* Let the stack know that we have taken the data. */
- /* TODO: Speedup: Don't block and wait for the answer here
- (to prevent multiple thread-switches). */
- msg.function = do_recv;
- 802deba: 9302 str r3, [sp, #8]
- msg.msg.conn = conn;
- if (buf != NULL) {
- 802debc: 9b01 ldr r3, [sp, #4]
- 802debe: b10b cbz r3, 802dec4 <netconn_recv_data+0x70>
- msg.msg.msg.r.len = ((struct pbuf *)buf)->tot_len;
- 802dec0: 891b ldrh r3, [r3, #8]
- 802dec2: e000 b.n 802dec6 <netconn_recv_data+0x72>
- } else {
- msg.msg.msg.r.len = 1;
- 802dec4: 2301 movs r3, #1
- }
- /* don't care for the return value of do_recv */
- TCPIP_APIMSG(&msg);
- 802dec6: a802 add r0, sp, #8
- msg.function = do_recv;
- msg.msg.conn = conn;
- if (buf != NULL) {
- msg.msg.msg.r.len = ((struct pbuf *)buf)->tot_len;
- } else {
- msg.msg.msg.r.len = 1;
- 802dec8: 9305 str r3, [sp, #20]
- }
- /* don't care for the return value of do_recv */
- TCPIP_APIMSG(&msg);
- 802deca: f000 fe25 bl 802eb18 <tcpip_apimsg>
- }
- /* If we are closed, we indicate that we no longer wish to use the socket */
- if (buf == NULL) {
- 802dece: 9a01 ldr r2, [sp, #4]
- 802ded0: b982 cbnz r2, 802def4 <netconn_recv_data+0xa0>
- API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0);
- 802ded2: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802ded4: b113 cbz r3, 802dedc <netconn_recv_data+0x88>
- 802ded6: 4620 mov r0, r4
- 802ded8: 2101 movs r1, #1
- 802deda: 4798 blx r3
- /* Avoid to lose any previous error code */
- NETCONN_SET_SAFE_ERR(conn, ERR_CLSD);
- 802dedc: f009 fdf4 bl 8037ac8 <sys_arch_protect>
- 802dee0: f994 3008 ldrsb.w r3, [r4, #8]
- 802dee4: 3309 adds r3, #9
- 802dee6: db01 blt.n 802deec <netconn_recv_data+0x98>
- 802dee8: 23f4 movs r3, #244 ; 0xf4
- 802deea: 7223 strb r3, [r4, #8]
- 802deec: f009 fdf6 bl 8037adc <sys_arch_unprotect>
- return ERR_CLSD;
- 802def0: 20f4 movs r0, #244 ; 0xf4
- 802def2: e00e b.n 802df12 <netconn_recv_data+0xbe>
- }
- len = ((struct pbuf *)buf)->tot_len;
- 802def4: 8912 ldrh r2, [r2, #8]
- 802def6: e002 b.n 802defe <netconn_recv_data+0xaa>
- else
- #endif /* LWIP_TCP && (LWIP_UDP || LWIP_RAW) */
- #if (LWIP_UDP || LWIP_RAW)
- {
- LWIP_ASSERT("buf != NULL", buf != NULL);
- len = netbuf_len((struct netbuf *)buf);
- 802def8: 9b01 ldr r3, [sp, #4]
- 802defa: 681b ldr r3, [r3, #0]
- 802defc: 891a ldrh r2, [r3, #8]
- #if LWIP_SO_RCVBUF
- SYS_ARCH_DEC(conn->recv_avail, len);
- #endif /* LWIP_SO_RCVBUF */
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVMINUS, len);
- 802defe: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802df00: b113 cbz r3, 802df08 <netconn_recv_data+0xb4>
- 802df02: 4620 mov r0, r4
- 802df04: 2101 movs r1, #1
- 802df06: 4798 blx r3
- LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_recv_data: received %p, len=%"U16_F"\n", buf, len));
- *new_buf = buf;
- 802df08: 9b01 ldr r3, [sp, #4]
- /* don't set conn->last_err: it's only ERR_OK, anyway */
- return ERR_OK;
- 802df0a: 2000 movs r0, #0
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVMINUS, len);
- LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_recv_data: received %p, len=%"U16_F"\n", buf, len));
- *new_buf = buf;
- 802df0c: 602b str r3, [r5, #0]
- 802df0e: e000 b.n 802df12 <netconn_recv_data+0xbe>
- #endif /* LWIP_TCP */
- LWIP_ERROR("netconn_recv: invalid pointer", (new_buf != NULL), return ERR_ARG;);
- *new_buf = NULL;
- LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;);
- LWIP_ERROR("netconn_accept: invalid recvmbox", sys_mbox_valid(&conn->recvmbox), return ERR_CONN;);
- 802df10: 20f3 movs r0, #243 ; 0xf3
- LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_recv_data: received %p, len=%"U16_F"\n", buf, len));
- *new_buf = buf;
- /* don't set conn->last_err: it's only ERR_OK, anyway */
- return ERR_OK;
- }
- 802df12: b240 sxtb r0, r0
- 802df14: b009 add sp, #36 ; 0x24
- 802df16: bd30 pop {r4, r5, pc}
- 802df18: 0802e98d .word 0x0802e98d
- 0802df1c <netconn_new_with_proto_and_callback>:
- * @return a newly allocated struct netconn or
- * NULL on memory error
- */
- struct netconn*
- netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, netconn_callback callback)
- {
- 802df1c: b530 push {r4, r5, lr}
- 802df1e: 460d mov r5, r1
- 802df20: b087 sub sp, #28
- struct netconn *conn;
- struct api_msg msg;
- conn = netconn_alloc(t, callback);
- 802df22: 4611 mov r1, r2
- 802df24: f000 fba0 bl 802e668 <netconn_alloc>
- if (conn != NULL) {
- 802df28: 4604 mov r4, r0
- 802df2a: b1a8 cbz r0, 802df58 <netconn_new_with_proto_and_callback+0x3c>
- msg.function = do_newconn;
- 802df2c: 4b0c ldr r3, [pc, #48] ; (802df60 <netconn_new_with_proto_and_callback+0x44>)
- msg.msg.msg.n.proto = proto;
- msg.msg.conn = conn;
- 802df2e: 9001 str r0, [sp, #4]
- if (TCPIP_APIMSG(&msg) != ERR_OK) {
- 802df30: 4668 mov r0, sp
- struct netconn *conn;
- struct api_msg msg;
- conn = netconn_alloc(t, callback);
- if (conn != NULL) {
- msg.function = do_newconn;
- 802df32: 9300 str r3, [sp, #0]
- msg.msg.msg.n.proto = proto;
- 802df34: f88d 500c strb.w r5, [sp, #12]
- msg.msg.conn = conn;
- if (TCPIP_APIMSG(&msg) != ERR_OK) {
- 802df38: f000 fdee bl 802eb18 <tcpip_apimsg>
- 802df3c: b160 cbz r0, 802df58 <netconn_new_with_proto_and_callback+0x3c>
- LWIP_ASSERT("conn has no op_completed", sys_sem_valid(&conn->op_completed));
- LWIP_ASSERT("conn has no recvmbox", sys_mbox_valid(&conn->recvmbox));
- #if LWIP_TCP
- LWIP_ASSERT("conn->acceptmbox shouldn't exist", !sys_mbox_valid(&conn->acceptmbox));
- #endif /* LWIP_TCP */
- sys_sem_free(&conn->op_completed);
- 802df3e: f104 000c add.w r0, r4, #12
- 802df42: f009 fda3 bl 8037a8c <sys_sem_free>
- sys_mbox_free(&conn->recvmbox);
- 802df46: f104 0010 add.w r0, r4, #16
- 802df4a: f009 fca7 bl 803789c <sys_mbox_free>
- memp_free(MEMP_NETCONN, conn);
- 802df4e: 4621 mov r1, r4
- 802df50: 2006 movs r0, #6
- 802df52: f001 fe51 bl 802fbf8 <memp_free>
- return NULL;
- 802df56: 2400 movs r4, #0
- }
- }
- return conn;
- }
- 802df58: 4620 mov r0, r4
- 802df5a: b007 add sp, #28
- 802df5c: bd30 pop {r4, r5, pc}
- 802df5e: bf00 nop
- 802df60: 0802e5d9 .word 0x0802e5d9
- 0802df64 <netconn_delete>:
- * @param conn the netconn to delete
- * @return ERR_OK if the connection was deleted
- */
- err_t
- netconn_delete(struct netconn *conn)
- {
- 802df64: b510 push {r4, lr}
- struct api_msg msg;
- /* No ASSERT here because possible to get a (conn == NULL) if we got an accept error */
- if (conn == NULL) {
- 802df66: 4604 mov r4, r0
- * @param conn the netconn to delete
- * @return ERR_OK if the connection was deleted
- */
- err_t
- netconn_delete(struct netconn *conn)
- {
- 802df68: b086 sub sp, #24
- struct api_msg msg;
- /* No ASSERT here because possible to get a (conn == NULL) if we got an accept error */
- if (conn == NULL) {
- 802df6a: b140 cbz r0, 802df7e <netconn_delete+0x1a>
- return ERR_OK;
- }
- msg.function = do_delconn;
- 802df6c: 4b05 ldr r3, [pc, #20] ; (802df84 <netconn_delete+0x20>)
- msg.msg.conn = conn;
- tcpip_apimsg(&msg);
- 802df6e: 4668 mov r0, sp
- if (conn == NULL) {
- return ERR_OK;
- }
- msg.function = do_delconn;
- msg.msg.conn = conn;
- 802df70: e88d 0018 stmia.w sp, {r3, r4}
- tcpip_apimsg(&msg);
- 802df74: f000 fdd0 bl 802eb18 <tcpip_apimsg>
- netconn_free(conn);
- 802df78: 4620 mov r0, r4
- 802df7a: f000 fbaf bl 802e6dc <netconn_free>
- /* don't care for return value of do_delconn since it only calls void functions */
- return ERR_OK;
- }
- 802df7e: 2000 movs r0, #0
- 802df80: b006 add sp, #24
- 802df82: bd10 pop {r4, pc}
- 802df84: 0802e77d .word 0x0802e77d
- 0802df88 <netconn_bind>:
- * @param port the local port to bind the netconn to (not used for RAW)
- * @return ERR_OK if bound, any other err_t on failure
- */
- err_t
- netconn_bind(struct netconn *conn, ip_addr_t *addr, u16_t port)
- {
- 802df88: b530 push {r4, r5, lr}
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_bind: invalid conn", (conn != NULL), return ERR_ARG;);
- 802df8a: 4604 mov r4, r0
- * @param port the local port to bind the netconn to (not used for RAW)
- * @return ERR_OK if bound, any other err_t on failure
- */
- err_t
- netconn_bind(struct netconn *conn, ip_addr_t *addr, u16_t port)
- {
- 802df8c: b087 sub sp, #28
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_bind: invalid conn", (conn != NULL), return ERR_ARG;);
- 802df8e: b198 cbz r0, 802dfb8 <netconn_bind+0x30>
- msg.function = do_bind;
- 802df90: 4b0b ldr r3, [pc, #44] ; (802dfc0 <netconn_bind+0x38>)
- msg.msg.conn = conn;
- msg.msg.msg.bc.ipaddr = addr;
- 802df92: 9103 str r1, [sp, #12]
- msg.msg.msg.bc.port = port;
- err = TCPIP_APIMSG(&msg);
- 802df94: 4668 mov r0, sp
- err_t err;
- LWIP_ERROR("netconn_bind: invalid conn", (conn != NULL), return ERR_ARG;);
- msg.function = do_bind;
- msg.msg.conn = conn;
- 802df96: e88d 0018 stmia.w sp, {r3, r4}
- msg.msg.msg.bc.ipaddr = addr;
- msg.msg.msg.bc.port = port;
- 802df9a: f8ad 2010 strh.w r2, [sp, #16]
- err = TCPIP_APIMSG(&msg);
- 802df9e: f000 fdbb bl 802eb18 <tcpip_apimsg>
- 802dfa2: 4605 mov r5, r0
- NETCONN_SET_SAFE_ERR(conn, err);
- 802dfa4: f009 fd90 bl 8037ac8 <sys_arch_protect>
- 802dfa8: f994 3008 ldrsb.w r3, [r4, #8]
- 802dfac: 3309 adds r3, #9
- 802dfae: bfa8 it ge
- 802dfb0: 7225 strbge r5, [r4, #8]
- 802dfb2: f009 fd93 bl 8037adc <sys_arch_unprotect>
- 802dfb6: e000 b.n 802dfba <netconn_bind+0x32>
- netconn_bind(struct netconn *conn, ip_addr_t *addr, u16_t port)
- {
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_bind: invalid conn", (conn != NULL), return ERR_ARG;);
- 802dfb8: 25f2 movs r5, #242 ; 0xf2
- msg.msg.msg.bc.port = port;
- err = TCPIP_APIMSG(&msg);
- NETCONN_SET_SAFE_ERR(conn, err);
- return err;
- }
- 802dfba: b268 sxtb r0, r5
- 802dfbc: b007 add sp, #28
- 802dfbe: bd30 pop {r4, r5, pc}
- 802dfc0: 0802e80f .word 0x0802e80f
- 0802dfc4 <netconn_connect>:
- * @param port the remote port to connect to (no used for RAW)
- * @return ERR_OK if connected, return value of tcp_/udp_/raw_connect otherwise
- */
- err_t
- netconn_connect(struct netconn *conn, ip_addr_t *addr, u16_t port)
- {
- 802dfc4: b530 push {r4, r5, lr}
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_connect: invalid conn", (conn != NULL), return ERR_ARG;);
- 802dfc6: 4604 mov r4, r0
- * @param port the remote port to connect to (no used for RAW)
- * @return ERR_OK if connected, return value of tcp_/udp_/raw_connect otherwise
- */
- err_t
- netconn_connect(struct netconn *conn, ip_addr_t *addr, u16_t port)
- {
- 802dfc8: b087 sub sp, #28
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_connect: invalid conn", (conn != NULL), return ERR_ARG;);
- 802dfca: b198 cbz r0, 802dff4 <netconn_connect+0x30>
- msg.function = do_connect;
- 802dfcc: 4b0b ldr r3, [pc, #44] ; (802dffc <netconn_connect+0x38>)
- msg.msg.conn = conn;
- msg.msg.msg.bc.ipaddr = addr;
- 802dfce: 9103 str r1, [sp, #12]
- msg.msg.msg.bc.port = port;
- /* This is the only function which need to not block tcpip_thread */
- err = tcpip_apimsg(&msg);
- 802dfd0: 4668 mov r0, sp
- err_t err;
- LWIP_ERROR("netconn_connect: invalid conn", (conn != NULL), return ERR_ARG;);
- msg.function = do_connect;
- msg.msg.conn = conn;
- 802dfd2: e88d 0018 stmia.w sp, {r3, r4}
- msg.msg.msg.bc.ipaddr = addr;
- msg.msg.msg.bc.port = port;
- 802dfd6: f8ad 2010 strh.w r2, [sp, #16]
- /* This is the only function which need to not block tcpip_thread */
- err = tcpip_apimsg(&msg);
- 802dfda: f000 fd9d bl 802eb18 <tcpip_apimsg>
- 802dfde: 4605 mov r5, r0
- NETCONN_SET_SAFE_ERR(conn, err);
- 802dfe0: f009 fd72 bl 8037ac8 <sys_arch_protect>
- 802dfe4: f994 3008 ldrsb.w r3, [r4, #8]
- 802dfe8: 3309 adds r3, #9
- 802dfea: bfa8 it ge
- 802dfec: 7225 strbge r5, [r4, #8]
- 802dfee: f009 fd75 bl 8037adc <sys_arch_unprotect>
- 802dff2: e000 b.n 802dff6 <netconn_connect+0x32>
- netconn_connect(struct netconn *conn, ip_addr_t *addr, u16_t port)
- {
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_connect: invalid conn", (conn != NULL), return ERR_ARG;);
- 802dff4: 25f2 movs r5, #242 ; 0xf2
- /* This is the only function which need to not block tcpip_thread */
- err = tcpip_apimsg(&msg);
- NETCONN_SET_SAFE_ERR(conn, err);
- return err;
- }
- 802dff6: b268 sxtb r0, r5
- 802dff8: b007 add sp, #28
- 802dffa: bd30 pop {r4, r5, pc}
- 802dffc: 0802e865 .word 0x0802e865
- 0802e000 <netconn_disconnect>:
- * @param conn the netconn to disconnect
- * @return TODO: return value is not set here...
- */
- err_t
- netconn_disconnect(struct netconn *conn)
- {
- 802e000: b530 push {r4, r5, lr}
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_disconnect: invalid conn", (conn != NULL), return ERR_ARG;);
- 802e002: 4604 mov r4, r0
- * @param conn the netconn to disconnect
- * @return TODO: return value is not set here...
- */
- err_t
- netconn_disconnect(struct netconn *conn)
- {
- 802e004: b087 sub sp, #28
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_disconnect: invalid conn", (conn != NULL), return ERR_ARG;);
- 802e006: b180 cbz r0, 802e02a <netconn_disconnect+0x2a>
- msg.function = do_disconnect;
- 802e008: 4b0a ldr r3, [pc, #40] ; (802e034 <netconn_disconnect+0x34>)
- msg.msg.conn = conn;
- err = TCPIP_APIMSG(&msg);
- 802e00a: 4668 mov r0, sp
- err_t err;
- LWIP_ERROR("netconn_disconnect: invalid conn", (conn != NULL), return ERR_ARG;);
- msg.function = do_disconnect;
- msg.msg.conn = conn;
- 802e00c: e88d 0018 stmia.w sp, {r3, r4}
- err = TCPIP_APIMSG(&msg);
- 802e010: f000 fd82 bl 802eb18 <tcpip_apimsg>
- 802e014: 4605 mov r5, r0
- NETCONN_SET_SAFE_ERR(conn, err);
- 802e016: f009 fd57 bl 8037ac8 <sys_arch_protect>
- 802e01a: f994 3008 ldrsb.w r3, [r4, #8]
- 802e01e: 3309 adds r3, #9
- 802e020: bfa8 it ge
- 802e022: 7225 strbge r5, [r4, #8]
- 802e024: f009 fd5a bl 8037adc <sys_arch_unprotect>
- 802e028: e000 b.n 802e02c <netconn_disconnect+0x2c>
- netconn_disconnect(struct netconn *conn)
- {
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_disconnect: invalid conn", (conn != NULL), return ERR_ARG;);
- 802e02a: 25f2 movs r5, #242 ; 0xf2
- msg.msg.conn = conn;
- err = TCPIP_APIMSG(&msg);
- NETCONN_SET_SAFE_ERR(conn, err);
- return err;
- }
- 802e02c: b268 sxtb r0, r5
- 802e02e: b007 add sp, #28
- 802e030: bd30 pop {r4, r5, pc}
- 802e032: bf00 nop
- 802e034: 0802e8f5 .word 0x0802e8f5
- 0802e038 <netconn_recv>:
- * @return ERR_OK if data has been received, an error code otherwise (timeout,
- * memory error or another error)
- */
- err_t
- netconn_recv(struct netconn *conn, struct netbuf **new_buf)
- {
- 802e038: b573 push {r0, r1, r4, r5, r6, lr}
- 802e03a: 4604 mov r4, r0
- #if LWIP_TCP
- struct netbuf *buf = NULL;
- err_t err;
- #endif /* LWIP_TCP */
- LWIP_ERROR("netconn_recv: invalid pointer", (new_buf != NULL), return ERR_ARG;);
- 802e03c: 460e mov r6, r1
- 802e03e: b909 cbnz r1, 802e044 <netconn_recv+0xc>
- 802e040: 24f2 movs r4, #242 ; 0xf2
- 802e042: e031 b.n 802e0a8 <netconn_recv+0x70>
- *new_buf = NULL;
- 802e044: 2300 movs r3, #0
- 802e046: 600b str r3, [r1, #0]
- LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;);
- 802e048: 2800 cmp r0, #0
- 802e04a: d0f9 beq.n 802e040 <netconn_recv+0x8>
- LWIP_ERROR("netconn_accept: invalid recvmbox", sys_mbox_valid(&conn->recvmbox), return ERR_CONN;);
- 802e04c: 6902 ldr r2, [r0, #16]
- 802e04e: b352 cbz r2, 802e0a6 <netconn_recv+0x6e>
- #if LWIP_TCP
- #if (LWIP_UDP || LWIP_RAW)
- if (conn->type == NETCONN_TCP)
- 802e050: 7802 ldrb r2, [r0, #0]
- 802e052: 2a10 cmp r2, #16
- 802e054: d123 bne.n 802e09e <netconn_recv+0x66>
- #endif /* (LWIP_UDP || LWIP_RAW) */
- {
- struct pbuf *p = NULL;
- /* This is not a listening netconn, since recvmbox is set */
- buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
- 802e056: 2005 movs r0, #5
- #if LWIP_TCP
- #if (LWIP_UDP || LWIP_RAW)
- if (conn->type == NETCONN_TCP)
- #endif /* (LWIP_UDP || LWIP_RAW) */
- {
- struct pbuf *p = NULL;
- 802e058: 9301 str r3, [sp, #4]
- /* This is not a listening netconn, since recvmbox is set */
- buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
- 802e05a: f001 fdb7 bl 802fbcc <memp_malloc>
- if (buf == NULL) {
- 802e05e: 4605 mov r5, r0
- 802e060: b958 cbnz r0, 802e07a <netconn_recv+0x42>
- NETCONN_SET_SAFE_ERR(conn, ERR_MEM);
- 802e062: f009 fd31 bl 8037ac8 <sys_arch_protect>
- 802e066: f994 3008 ldrsb.w r3, [r4, #8]
- 802e06a: 3309 adds r3, #9
- 802e06c: db01 blt.n 802e072 <netconn_recv+0x3a>
- 802e06e: 23ff movs r3, #255 ; 0xff
- 802e070: 7223 strb r3, [r4, #8]
- 802e072: f009 fd33 bl 8037adc <sys_arch_unprotect>
- return ERR_MEM;
- 802e076: 24ff movs r4, #255 ; 0xff
- 802e078: e016 b.n 802e0a8 <netconn_recv+0x70>
- }
- err = netconn_recv_data(conn, (void **)&p);
- 802e07a: 4620 mov r0, r4
- 802e07c: a901 add r1, sp, #4
- 802e07e: f7ff fee9 bl 802de54 <netconn_recv_data>
- if (err != ERR_OK) {
- 802e082: 4604 mov r4, r0
- 802e084: b120 cbz r0, 802e090 <netconn_recv+0x58>
- memp_free(MEMP_NETBUF, buf);
- 802e086: 2005 movs r0, #5
- 802e088: 4629 mov r1, r5
- 802e08a: f001 fdb5 bl 802fbf8 <memp_free>
- 802e08e: e00b b.n 802e0a8 <netconn_recv+0x70>
- return err;
- }
- LWIP_ASSERT("p != NULL", p != NULL);
- buf->p = p;
- 802e090: 9b01 ldr r3, [sp, #4]
- buf->ptr = p;
- buf->port = 0;
- 802e092: 81a8 strh r0, [r5, #12]
- memp_free(MEMP_NETBUF, buf);
- return err;
- }
- LWIP_ASSERT("p != NULL", p != NULL);
- buf->p = p;
- 802e094: 602b str r3, [r5, #0]
- buf->ptr = p;
- 802e096: 606b str r3, [r5, #4]
- buf->port = 0;
- ip_addr_set_any(&buf->addr);
- 802e098: 60a8 str r0, [r5, #8]
- *new_buf = buf;
- 802e09a: 6035 str r5, [r6, #0]
- 802e09c: e004 b.n 802e0a8 <netconn_recv+0x70>
- #if LWIP_TCP && (LWIP_UDP || LWIP_RAW)
- else
- #endif /* LWIP_TCP && (LWIP_UDP || LWIP_RAW) */
- {
- #if (LWIP_UDP || LWIP_RAW)
- return netconn_recv_data(conn, (void **)new_buf);
- 802e09e: f7ff fed9 bl 802de54 <netconn_recv_data>
- 802e0a2: 4604 mov r4, r0
- 802e0a4: e000 b.n 802e0a8 <netconn_recv+0x70>
- #endif /* LWIP_TCP */
- LWIP_ERROR("netconn_recv: invalid pointer", (new_buf != NULL), return ERR_ARG;);
- *new_buf = NULL;
- LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;);
- LWIP_ERROR("netconn_accept: invalid recvmbox", sys_mbox_valid(&conn->recvmbox), return ERR_CONN;);
- 802e0a6: 24f3 movs r4, #243 ; 0xf3
- {
- #if (LWIP_UDP || LWIP_RAW)
- return netconn_recv_data(conn, (void **)new_buf);
- #endif /* (LWIP_UDP || LWIP_RAW) */
- }
- }
- 802e0a8: b260 sxtb r0, r4
- 802e0aa: bd7c pop {r2, r3, r4, r5, r6, pc}
- 0802e0ac <netconn_send>:
- * @param buf a netbuf containing the data to send
- * @return ERR_OK if data was sent, any other err_t on error
- */
- err_t
- netconn_send(struct netconn *conn, struct netbuf *buf)
- {
- 802e0ac: b530 push {r4, r5, lr}
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_send: invalid conn", (conn != NULL), return ERR_ARG;);
- 802e0ae: 4604 mov r4, r0
- * @param buf a netbuf containing the data to send
- * @return ERR_OK if data was sent, any other err_t on error
- */
- err_t
- netconn_send(struct netconn *conn, struct netbuf *buf)
- {
- 802e0b0: b087 sub sp, #28
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_send: invalid conn", (conn != NULL), return ERR_ARG;);
- 802e0b2: b188 cbz r0, 802e0d8 <netconn_send+0x2c>
- LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_send: sending %"U16_F" bytes\n", buf->p->tot_len));
- msg.function = do_send;
- 802e0b4: 4b0a ldr r3, [pc, #40] ; (802e0e0 <netconn_send+0x34>)
- msg.msg.conn = conn;
- msg.msg.msg.b = buf;
- 802e0b6: 9103 str r1, [sp, #12]
- err = TCPIP_APIMSG(&msg);
- 802e0b8: 4668 mov r0, sp
- LWIP_ERROR("netconn_send: invalid conn", (conn != NULL), return ERR_ARG;);
- LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_send: sending %"U16_F" bytes\n", buf->p->tot_len));
- msg.function = do_send;
- msg.msg.conn = conn;
- 802e0ba: e88d 0018 stmia.w sp, {r3, r4}
- msg.msg.msg.b = buf;
- err = TCPIP_APIMSG(&msg);
- 802e0be: f000 fd2b bl 802eb18 <tcpip_apimsg>
- 802e0c2: 4605 mov r5, r0
- NETCONN_SET_SAFE_ERR(conn, err);
- 802e0c4: f009 fd00 bl 8037ac8 <sys_arch_protect>
- 802e0c8: f994 3008 ldrsb.w r3, [r4, #8]
- 802e0cc: 3309 adds r3, #9
- 802e0ce: bfa8 it ge
- 802e0d0: 7225 strbge r5, [r4, #8]
- 802e0d2: f009 fd03 bl 8037adc <sys_arch_unprotect>
- 802e0d6: e000 b.n 802e0da <netconn_send+0x2e>
- netconn_send(struct netconn *conn, struct netbuf *buf)
- {
- struct api_msg msg;
- err_t err;
- LWIP_ERROR("netconn_send: invalid conn", (conn != NULL), return ERR_ARG;);
- 802e0d8: 25f2 movs r5, #242 ; 0xf2
- msg.msg.msg.b = buf;
- err = TCPIP_APIMSG(&msg);
- NETCONN_SET_SAFE_ERR(conn, err);
- return err;
- }
- 802e0da: b268 sxtb r0, r5
- 802e0dc: b007 add sp, #28
- 802e0de: bd30 pop {r4, r5, pc}
- 802e0e0: 0802e91f .word 0x0802e91f
- 0802e0e4 <setup_tcp>:
- *
- * @param conn the TCP netconn to setup
- */
- static void
- setup_tcp(struct netconn *conn)
- {
- 802e0e4: b510 push {r4, lr}
- struct tcp_pcb *pcb;
- pcb = conn->pcb.tcp;
- 802e0e6: 6844 ldr r4, [r0, #4]
- *
- * @param conn the TCP netconn to setup
- */
- static void
- setup_tcp(struct netconn *conn)
- {
- 802e0e8: 4601 mov r1, r0
- struct tcp_pcb *pcb;
- pcb = conn->pcb.tcp;
- tcp_arg(pcb, conn);
- 802e0ea: 4620 mov r0, r4
- 802e0ec: f002 f9d4 bl 8030498 <tcp_arg>
- tcp_recv(pcb, recv_tcp);
- 802e0f0: 4620 mov r0, r4
- 802e0f2: 4909 ldr r1, [pc, #36] ; (802e118 <setup_tcp+0x34>)
- 802e0f4: f002 f9d2 bl 803049c <tcp_recv>
- tcp_sent(pcb, sent_tcp);
- 802e0f8: 4620 mov r0, r4
- 802e0fa: 4908 ldr r1, [pc, #32] ; (802e11c <setup_tcp+0x38>)
- 802e0fc: f002 f9d0 bl 80304a0 <tcp_sent>
- tcp_poll(pcb, poll_tcp, 4);
- 802e100: 4620 mov r0, r4
- 802e102: 4907 ldr r1, [pc, #28] ; (802e120 <setup_tcp+0x3c>)
- 802e104: 2204 movs r2, #4
- 802e106: f002 f9d2 bl 80304ae <tcp_poll>
- tcp_err(pcb, err_tcp);
- 802e10a: 4906 ldr r1, [pc, #24] ; (802e124 <setup_tcp+0x40>)
- 802e10c: 4620 mov r0, r4
- }
- 802e10e: e8bd 4010 ldmia.w sp!, {r4, lr}
- pcb = conn->pcb.tcp;
- tcp_arg(pcb, conn);
- tcp_recv(pcb, recv_tcp);
- tcp_sent(pcb, sent_tcp);
- tcp_poll(pcb, poll_tcp, 4);
- tcp_err(pcb, err_tcp);
- 802e112: f002 b9c7 b.w 80304a4 <tcp_err>
- 802e116: bf00 nop
- 802e118: 0802e529 .word 0x0802e529
- 802e11c: 0802e58f .word 0x0802e58f
- 802e120: 0802e3ff .word 0x0802e3ff
- 802e124: 0802e279 .word 0x0802e279
- 0802e128 <do_close_internal>:
- *
- * @param conn the TCP netconn to close
- */
- static void
- do_close_internal(struct netconn *conn)
- {
- 802e128: b5f8 push {r3, r4, r5, r6, r7, lr}
- LWIP_ASSERT("this is for tcp netconns only", (conn->type == NETCONN_TCP));
- LWIP_ASSERT("conn must be in state NETCONN_CLOSE", (conn->state == NETCONN_CLOSE));
- LWIP_ASSERT("pcb already closed", (conn->pcb.tcp != NULL));
- LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL);
- shut = conn->current_msg->msg.sd.shut;
- 802e12a: 6a43 ldr r3, [r0, #36] ; 0x24
- 802e12c: 7a1d ldrb r5, [r3, #8]
- shut_rx = shut & NETCONN_SHUT_RD;
- shut_tx = shut & NETCONN_SHUT_WR;
- /* shutting down both ends is the same as closing */
- close = shut == NETCONN_SHUT_RDWR;
- 802e12e: 1eeb subs r3, r5, #3
- LWIP_ASSERT("pcb already closed", (conn->pcb.tcp != NULL));
- LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL);
- shut = conn->current_msg->msg.sd.shut;
- shut_rx = shut & NETCONN_SHUT_RD;
- shut_tx = shut & NETCONN_SHUT_WR;
- 802e130: f005 0602 and.w r6, r5, #2
- LWIP_ASSERT("conn must be in state NETCONN_CLOSE", (conn->state == NETCONN_CLOSE));
- LWIP_ASSERT("pcb already closed", (conn->pcb.tcp != NULL));
- LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL);
- shut = conn->current_msg->msg.sd.shut;
- shut_rx = shut & NETCONN_SHUT_RD;
- 802e134: f005 0701 and.w r7, r5, #1
- shut_tx = shut & NETCONN_SHUT_WR;
- /* shutting down both ends is the same as closing */
- close = shut == NETCONN_SHUT_RDWR;
- 802e138: 425d negs r5, r3
- 802e13a: 415d adcs r5, r3
- *
- * @param conn the TCP netconn to close
- */
- static void
- do_close_internal(struct netconn *conn)
- {
- 802e13c: 4604 mov r4, r0
- LWIP_ASSERT("pcb already closed", (conn->pcb.tcp != NULL));
- LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL);
- shut = conn->current_msg->msg.sd.shut;
- shut_rx = shut & NETCONN_SHUT_RD;
- shut_tx = shut & NETCONN_SHUT_WR;
- 802e13e: b2f6 uxtb r6, r6
- /* shutting down both ends is the same as closing */
- close = shut == NETCONN_SHUT_RDWR;
- /* Set back some callback pointers */
- if (close) {
- 802e140: b11d cbz r5, 802e14a <do_close_internal+0x22>
- tcp_arg(conn->pcb.tcp, NULL);
- 802e142: 6840 ldr r0, [r0, #4]
- 802e144: 2100 movs r1, #0
- 802e146: f002 f9a7 bl 8030498 <tcp_arg>
- }
- if (conn->pcb.tcp->state == LISTEN) {
- 802e14a: 6860 ldr r0, [r4, #4]
- 802e14c: 7e03 ldrb r3, [r0, #24]
- 802e14e: 2b01 cmp r3, #1
- 802e150: d104 bne.n 802e15c <do_close_internal+0x34>
- tcp_accept(conn->pcb.tcp, NULL);
- 802e152: 2100 movs r1, #0
- 802e154: f002 f9a9 bl 80304aa <tcp_accept>
- tcp_poll(conn->pcb.tcp, NULL, 4);
- tcp_err(conn->pcb.tcp, NULL);
- }
- }
- /* Try to close the connection */
- if (close) {
- 802e158: b9bd cbnz r5, 802e18a <do_close_internal+0x62>
- 802e15a: e01a b.n 802e192 <do_close_internal+0x6a>
- }
- if (conn->pcb.tcp->state == LISTEN) {
- tcp_accept(conn->pcb.tcp, NULL);
- } else {
- /* some callbacks have to be reset if tcp_close is not successful */
- if (shut_rx) {
- 802e15c: b137 cbz r7, 802e16c <do_close_internal+0x44>
- tcp_recv(conn->pcb.tcp, NULL);
- 802e15e: 2100 movs r1, #0
- 802e160: f002 f99c bl 803049c <tcp_recv>
- tcp_accept(conn->pcb.tcp, NULL);
- 802e164: 6860 ldr r0, [r4, #4]
- 802e166: 2100 movs r1, #0
- 802e168: f002 f99f bl 80304aa <tcp_accept>
- }
- if (shut_tx) {
- 802e16c: b11e cbz r6, 802e176 <do_close_internal+0x4e>
- tcp_sent(conn->pcb.tcp, NULL);
- 802e16e: 6860 ldr r0, [r4, #4]
- 802e170: 2100 movs r1, #0
- 802e172: f002 f995 bl 80304a0 <tcp_sent>
- }
- if (close) {
- 802e176: b165 cbz r5, 802e192 <do_close_internal+0x6a>
- tcp_poll(conn->pcb.tcp, NULL, 4);
- 802e178: 6860 ldr r0, [r4, #4]
- 802e17a: 2100 movs r1, #0
- 802e17c: 2204 movs r2, #4
- 802e17e: f002 f996 bl 80304ae <tcp_poll>
- tcp_err(conn->pcb.tcp, NULL);
- 802e182: 6860 ldr r0, [r4, #4]
- 802e184: 2100 movs r1, #0
- 802e186: f002 f98d bl 80304a4 <tcp_err>
- }
- }
- /* Try to close the connection */
- if (close) {
- err = tcp_close(conn->pcb.tcp);
- 802e18a: 6860 ldr r0, [r4, #4]
- 802e18c: f002 fc48 bl 8030a20 <tcp_close>
- 802e190: e004 b.n 802e19c <do_close_internal+0x74>
- } else {
- err = tcp_shutdown(conn->pcb.tcp, shut_rx, shut_tx);
- 802e192: 6860 ldr r0, [r4, #4]
- 802e194: 4639 mov r1, r7
- 802e196: 4632 mov r2, r6
- 802e198: f002 fc1c bl 80309d4 <tcp_shutdown>
- 802e19c: 4602 mov r2, r0
- }
- if (err == ERR_OK) {
- 802e19e: b9f0 cbnz r0, 802e1de <do_close_internal+0xb6>
- /* Closing succeeded */
- conn->current_msg->err = ERR_OK;
- 802e1a0: 6a63 ldr r3, [r4, #36] ; 0x24
- 802e1a2: 7118 strb r0, [r3, #4]
- conn->current_msg = NULL;
- 802e1a4: 6260 str r0, [r4, #36] ; 0x24
- conn->state = NETCONN_NONE;
- 802e1a6: 7060 strb r0, [r4, #1]
- if (close) {
- 802e1a8: b12d cbz r5, 802e1b6 <do_close_internal+0x8e>
- /* Set back some callback pointers as conn is going away */
- conn->pcb.tcp = NULL;
- /* Trigger select() in socket layer. Make sure everybody notices activity
- on the connection, error first! */
- API_EVENT(conn, NETCONN_EVT_ERROR, 0);
- 802e1aa: 6aa3 ldr r3, [r4, #40] ; 0x28
- conn->current_msg->err = ERR_OK;
- conn->current_msg = NULL;
- conn->state = NETCONN_NONE;
- if (close) {
- /* Set back some callback pointers as conn is going away */
- conn->pcb.tcp = NULL;
- 802e1ac: 6060 str r0, [r4, #4]
- /* Trigger select() in socket layer. Make sure everybody notices activity
- on the connection, error first! */
- API_EVENT(conn, NETCONN_EVT_ERROR, 0);
- 802e1ae: b113 cbz r3, 802e1b6 <do_close_internal+0x8e>
- 802e1b0: 4620 mov r0, r4
- 802e1b2: 2104 movs r1, #4
- 802e1b4: 4798 blx r3
- }
- if (shut_rx) {
- 802e1b6: b12f cbz r7, 802e1c4 <do_close_internal+0x9c>
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);
- 802e1b8: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802e1ba: b11b cbz r3, 802e1c4 <do_close_internal+0x9c>
- 802e1bc: 2100 movs r1, #0
- 802e1be: 4620 mov r0, r4
- 802e1c0: 460a mov r2, r1
- 802e1c2: 4798 blx r3
- }
- if (shut_tx) {
- 802e1c4: b12e cbz r6, 802e1d2 <do_close_internal+0xaa>
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
- 802e1c6: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802e1c8: b11b cbz r3, 802e1d2 <do_close_internal+0xaa>
- 802e1ca: 4620 mov r0, r4
- 802e1cc: 2102 movs r1, #2
- 802e1ce: 2200 movs r2, #0
- 802e1d0: 4798 blx r3
- }
- /* wake up the application task */
- sys_sem_signal(&conn->op_completed);
- 802e1d2: f104 000c add.w r0, r4, #12
- tcp_arg(conn->pcb.tcp, conn);
- /* don't restore recv callback: we don't want to receive any more data */
- }
- /* If closing didn't succeed, we get called again either
- from poll_tcp or from sent_tcp */
- }
- 802e1d6: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr}
- }
- if (shut_tx) {
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
- }
- /* wake up the application task */
- sys_sem_signal(&conn->op_completed);
- 802e1da: f009 bc45 b.w 8037a68 <sys_sem_signal>
- } else {
- /* Closing failed, restore some of the callbacks */
- /* Closing of listen pcb will never fail! */
- LWIP_ASSERT("Closing a listen pcb may not fail!", (conn->pcb.tcp->state != LISTEN));
- tcp_sent(conn->pcb.tcp, sent_tcp);
- 802e1de: 6860 ldr r0, [r4, #4]
- 802e1e0: 4908 ldr r1, [pc, #32] ; (802e204 <do_close_internal+0xdc>)
- 802e1e2: f002 f95d bl 80304a0 <tcp_sent>
- tcp_poll(conn->pcb.tcp, poll_tcp, 4);
- 802e1e6: 6860 ldr r0, [r4, #4]
- 802e1e8: 4907 ldr r1, [pc, #28] ; (802e208 <do_close_internal+0xe0>)
- 802e1ea: 2204 movs r2, #4
- 802e1ec: f002 f95f bl 80304ae <tcp_poll>
- tcp_err(conn->pcb.tcp, err_tcp);
- 802e1f0: 6860 ldr r0, [r4, #4]
- 802e1f2: 4906 ldr r1, [pc, #24] ; (802e20c <do_close_internal+0xe4>)
- 802e1f4: f002 f956 bl 80304a4 <tcp_err>
- tcp_arg(conn->pcb.tcp, conn);
- 802e1f8: 6860 ldr r0, [r4, #4]
- 802e1fa: 4621 mov r1, r4
- /* don't restore recv callback: we don't want to receive any more data */
- }
- /* If closing didn't succeed, we get called again either
- from poll_tcp or from sent_tcp */
- }
- 802e1fc: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr}
- /* Closing of listen pcb will never fail! */
- LWIP_ASSERT("Closing a listen pcb may not fail!", (conn->pcb.tcp->state != LISTEN));
- tcp_sent(conn->pcb.tcp, sent_tcp);
- tcp_poll(conn->pcb.tcp, poll_tcp, 4);
- tcp_err(conn->pcb.tcp, err_tcp);
- tcp_arg(conn->pcb.tcp, conn);
- 802e200: f002 b94a b.w 8030498 <tcp_arg>
- 802e204: 0802e58f .word 0x0802e58f
- 802e208: 0802e3ff .word 0x0802e3ff
- 802e20c: 0802e279 .word 0x0802e279
- 0802e210 <do_connected>:
- *
- * @see tcp.h (struct tcp_pcb.connected) for parameters and return values
- */
- static err_t
- do_connected(void *arg, struct tcp_pcb *pcb, err_t err)
- {
- 802e210: b538 push {r3, r4, r5, lr}
- LWIP_UNUSED_ARG(pcb);
- conn = (struct netconn *)arg;
- if (conn == NULL) {
- 802e212: 4604 mov r4, r0
- 802e214: b358 cbz r0, 802e26e <do_connected+0x5e>
- LWIP_ASSERT("conn->state == NETCONN_CONNECT", conn->state == NETCONN_CONNECT);
- LWIP_ASSERT("(conn->current_msg != NULL) || conn->in_non_blocking_connect",
- (conn->current_msg != NULL) || IN_NONBLOCKING_CONNECT(conn));
- if (conn->current_msg != NULL) {
- 802e216: 6a43 ldr r3, [r0, #36] ; 0x24
- 802e218: b103 cbz r3, 802e21c <do_connected+0xc>
- conn->current_msg->err = err;
- 802e21a: 711a strb r2, [r3, #4]
- }
- if ((conn->type == NETCONN_TCP) && (err == ERR_OK)) {
- 802e21c: 7823 ldrb r3, [r4, #0]
- 802e21e: 2b10 cmp r3, #16
- 802e220: d103 bne.n 802e22a <do_connected+0x1a>
- 802e222: b912 cbnz r2, 802e22a <do_connected+0x1a>
- setup_tcp(conn);
- 802e224: 4620 mov r0, r4
- 802e226: f7ff ff5d bl 802e0e4 <setup_tcp>
- }
- was_blocking = !IN_NONBLOCKING_CONNECT(conn);
- 802e22a: 7f23 ldrb r3, [r4, #28]
- 802e22c: f083 0504 eor.w r5, r3, #4
- SET_NONBLOCKING_CONNECT(conn, 0);
- 802e230: f023 0304 bic.w r3, r3, #4
- 802e234: 7723 strb r3, [r4, #28]
- conn->current_msg->err = err;
- }
- if ((conn->type == NETCONN_TCP) && (err == ERR_OK)) {
- setup_tcp(conn);
- }
- was_blocking = !IN_NONBLOCKING_CONNECT(conn);
- 802e236: f3c5 0580 ubfx r5, r5, #2, #1
- SET_NONBLOCKING_CONNECT(conn, 0);
- conn->current_msg = NULL;
- 802e23a: 2300 movs r3, #0
- 802e23c: 6263 str r3, [r4, #36] ; 0x24
- conn->state = NETCONN_NONE;
- 802e23e: 7063 strb r3, [r4, #1]
- if (!was_blocking) {
- 802e240: b945 cbnz r5, 802e254 <do_connected+0x44>
- NETCONN_SET_SAFE_ERR(conn, ERR_OK);
- 802e242: f009 fc41 bl 8037ac8 <sys_arch_protect>
- 802e246: f994 3008 ldrsb.w r3, [r4, #8]
- 802e24a: 3309 adds r3, #9
- 802e24c: bfa8 it ge
- 802e24e: 7225 strbge r5, [r4, #8]
- 802e250: f009 fc44 bl 8037adc <sys_arch_unprotect>
- }
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
- 802e254: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802e256: b11b cbz r3, 802e260 <do_connected+0x50>
- 802e258: 4620 mov r0, r4
- 802e25a: 2102 movs r1, #2
- 802e25c: 2200 movs r2, #0
- 802e25e: 4798 blx r3
- if (was_blocking) {
- 802e260: b13d cbz r5, 802e272 <do_connected+0x62>
- sys_sem_signal(&conn->op_completed);
- 802e262: f104 000c add.w r0, r4, #12
- 802e266: f009 fbff bl 8037a68 <sys_sem_signal>
- }
- return ERR_OK;
- 802e26a: 2000 movs r0, #0
- 802e26c: e002 b.n 802e274 <do_connected+0x64>
- LWIP_UNUSED_ARG(pcb);
- conn = (struct netconn *)arg;
- if (conn == NULL) {
- return ERR_VAL;
- 802e26e: 20fa movs r0, #250 ; 0xfa
- 802e270: e000 b.n 802e274 <do_connected+0x64>
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
- if (was_blocking) {
- sys_sem_signal(&conn->op_completed);
- }
- return ERR_OK;
- 802e272: 4628 mov r0, r5
- }
- 802e274: b240 sxtb r0, r0
- 802e276: bd38 pop {r3, r4, r5, pc}
- 0802e278 <err_tcp>:
- *
- * @see tcp.h (struct tcp_pcb.err) for parameters
- */
- static void
- err_tcp(void *arg, err_t err)
- {
- 802e278: b5f8 push {r3, r4, r5, r6, r7, lr}
- 802e27a: 4604 mov r4, r0
- SYS_ARCH_DECL_PROTECT(lev);
- conn = (struct netconn *)arg;
- LWIP_ASSERT("conn != NULL", (conn != NULL));
- conn->pcb.tcp = NULL;
- 802e27c: 2500 movs r5, #0
- *
- * @see tcp.h (struct tcp_pcb.err) for parameters
- */
- static void
- err_tcp(void *arg, err_t err)
- {
- 802e27e: 460e mov r6, r1
- SYS_ARCH_DECL_PROTECT(lev);
- conn = (struct netconn *)arg;
- LWIP_ASSERT("conn != NULL", (conn != NULL));
- conn->pcb.tcp = NULL;
- 802e280: 6045 str r5, [r0, #4]
- /* no check since this is always fatal! */
- SYS_ARCH_PROTECT(lev);
- 802e282: f009 fc21 bl 8037ac8 <sys_arch_protect>
- conn->last_err = err;
- 802e286: 7226 strb r6, [r4, #8]
- SYS_ARCH_UNPROTECT(lev);
- 802e288: f009 fc28 bl 8037adc <sys_arch_unprotect>
- old_state = conn->state;
- conn->state = NETCONN_NONE;
- /* Notify the user layer about a connection error. Used to signal
- select. */
- API_EVENT(conn, NETCONN_EVT_ERROR, 0);
- 802e28c: 6aa3 ldr r3, [r4, #40] ; 0x28
- SYS_ARCH_PROTECT(lev);
- conn->last_err = err;
- SYS_ARCH_UNPROTECT(lev);
- /* reset conn->state now before waking up other threads */
- old_state = conn->state;
- 802e28e: 7867 ldrb r7, [r4, #1]
- conn->state = NETCONN_NONE;
- 802e290: 7065 strb r5, [r4, #1]
- /* Notify the user layer about a connection error. Used to signal
- select. */
- API_EVENT(conn, NETCONN_EVT_ERROR, 0);
- 802e292: b11b cbz r3, 802e29c <err_tcp+0x24>
- 802e294: 4620 mov r0, r4
- 802e296: 2104 movs r1, #4
- 802e298: 462a mov r2, r5
- 802e29a: 4798 blx r3
- /* Try to release selects pending on 'read' or 'write', too.
- They will get an error if they actually try to read or write. */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);
- 802e29c: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802e29e: b11b cbz r3, 802e2a8 <err_tcp+0x30>
- 802e2a0: 2100 movs r1, #0
- 802e2a2: 4620 mov r0, r4
- 802e2a4: 460a mov r2, r1
- 802e2a6: 4798 blx r3
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
- 802e2a8: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802e2aa: b11b cbz r3, 802e2b4 <err_tcp+0x3c>
- 802e2ac: 4620 mov r0, r4
- 802e2ae: 2102 movs r1, #2
- 802e2b0: 2200 movs r2, #0
- 802e2b2: 4798 blx r3
- /* pass NULL-message to recvmbox to wake up pending recv */
- if (sys_mbox_valid(&conn->recvmbox)) {
- 802e2b4: 6923 ldr r3, [r4, #16]
- 802e2b6: b123 cbz r3, 802e2c2 <err_tcp+0x4a>
- /* use trypost to prevent deadlock */
- sys_mbox_trypost(&conn->recvmbox, NULL);
- 802e2b8: f104 0010 add.w r0, r4, #16
- 802e2bc: 2100 movs r1, #0
- 802e2be: f009 fb0b bl 80378d8 <sys_mbox_trypost>
- }
- /* pass NULL-message to acceptmbox to wake up pending accept */
- if (sys_mbox_valid(&conn->acceptmbox)) {
- 802e2c2: 6963 ldr r3, [r4, #20]
- 802e2c4: b123 cbz r3, 802e2d0 <err_tcp+0x58>
- /* use trypost to preven deadlock */
- sys_mbox_trypost(&conn->acceptmbox, NULL);
- 802e2c6: f104 0014 add.w r0, r4, #20
- 802e2ca: 2100 movs r1, #0
- 802e2cc: f009 fb04 bl 80378d8 <sys_mbox_trypost>
- 802e2d0: 2f04 cmp r7, #4
- 802e2d2: d815 bhi.n 802e300 <err_tcp+0x88>
- 802e2d4: b27f sxtb r7, r7
- 802e2d6: f04f 43b0 mov.w r3, #1476395008 ; 0x58000000
- 802e2da: 40bb lsls r3, r7
- 802e2dc: d510 bpl.n 802e300 <err_tcp+0x88>
- if ((old_state == NETCONN_WRITE) || (old_state == NETCONN_CLOSE) ||
- (old_state == NETCONN_CONNECT)) {
- /* calling do_writemore/do_close_internal is not necessary
- since the pcb has already been deleted! */
- int was_nonblocking_connect = IN_NONBLOCKING_CONNECT(conn);
- 802e2de: 7f23 ldrb r3, [r4, #28]
- SET_NONBLOCKING_CONNECT(conn, 0);
- 802e2e0: f023 0204 bic.w r2, r3, #4
- if (!was_nonblocking_connect) {
- 802e2e4: f003 0304 and.w r3, r3, #4
- 802e2e8: b2db uxtb r3, r3
- if ((old_state == NETCONN_WRITE) || (old_state == NETCONN_CLOSE) ||
- (old_state == NETCONN_CONNECT)) {
- /* calling do_writemore/do_close_internal is not necessary
- since the pcb has already been deleted! */
- int was_nonblocking_connect = IN_NONBLOCKING_CONNECT(conn);
- SET_NONBLOCKING_CONNECT(conn, 0);
- 802e2ea: 7722 strb r2, [r4, #28]
- if (!was_nonblocking_connect) {
- 802e2ec: b943 cbnz r3, 802e300 <err_tcp+0x88>
- /* set error return code */
- LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL);
- conn->current_msg->err = err;
- 802e2ee: 6a62 ldr r2, [r4, #36] ; 0x24
- conn->current_msg = NULL;
- /* wake up the waiting task */
- sys_sem_signal(&conn->op_completed);
- 802e2f0: f104 000c add.w r0, r4, #12
- SET_NONBLOCKING_CONNECT(conn, 0);
- if (!was_nonblocking_connect) {
- /* set error return code */
- LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL);
- conn->current_msg->err = err;
- 802e2f4: 7116 strb r6, [r2, #4]
- conn->current_msg = NULL;
- 802e2f6: 6263 str r3, [r4, #36] ; 0x24
- sys_sem_signal(&conn->op_completed);
- }
- } else {
- LWIP_ASSERT("conn->current_msg == NULL", conn->current_msg == NULL);
- }
- }
- 802e2f8: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr}
- /* set error return code */
- LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL);
- conn->current_msg->err = err;
- conn->current_msg = NULL;
- /* wake up the waiting task */
- sys_sem_signal(&conn->op_completed);
- 802e2fc: f009 bbb4 b.w 8037a68 <sys_sem_signal>
- 802e300: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 0802e302 <do_writemore>:
- * @return ERR_OK
- * ERR_MEM if LWIP_TCPIP_CORE_LOCKING=1 and sending hasn't yet finished
- */
- static err_t
- do_writemore(struct netconn *conn)
- {
- 802e302: b5f8 push {r3, r4, r5, r6, r7, lr}
- err_t err;
- void *dataptr;
- u16_t len, available;
- u8_t write_finished = 0;
- size_t diff;
- u8_t dontblock = netconn_is_nonblocking(conn) ||
- 802e304: 7f03 ldrb r3, [r0, #28]
- 802e306: f003 0302 and.w r3, r3, #2
- 802e30a: b2db uxtb r3, r3
- * @return ERR_OK
- * ERR_MEM if LWIP_TCPIP_CORE_LOCKING=1 and sending hasn't yet finished
- */
- static err_t
- do_writemore(struct netconn *conn)
- {
- 802e30c: 4604 mov r4, r0
- err_t err;
- void *dataptr;
- u16_t len, available;
- u8_t write_finished = 0;
- size_t diff;
- u8_t dontblock = netconn_is_nonblocking(conn) ||
- 802e30e: b923 cbnz r3, 802e31a <do_writemore+0x18>
- (conn->current_msg->msg.w.apiflags & NETCONN_DONTBLOCK);
- 802e310: 6a43 ldr r3, [r0, #36] ; 0x24
- err_t err;
- void *dataptr;
- u16_t len, available;
- u8_t write_finished = 0;
- size_t diff;
- u8_t dontblock = netconn_is_nonblocking(conn) ||
- 802e312: 7c1f ldrb r7, [r3, #16]
- 802e314: f3c7 0780 ubfx r7, r7, #2, #1
- 802e318: e000 b.n 802e31c <do_writemore+0x1a>
- 802e31a: 2701 movs r7, #1
- (conn->current_msg->msg.w.apiflags & NETCONN_DONTBLOCK);
- u8_t apiflags = conn->current_msg->msg.w.apiflags;
- 802e31c: 6a62 ldr r2, [r4, #36] ; 0x24
- conn->current_msg->msg.w.len = conn->write_offset;
- }
- } else
- #endif /* LWIP_SO_SNDTIMEO */
- {
- dataptr = (u8_t*)conn->current_msg->msg.w.dataptr + conn->write_offset;
- 802e31e: 6a20 ldr r0, [r4, #32]
- u16_t len, available;
- u8_t write_finished = 0;
- size_t diff;
- u8_t dontblock = netconn_is_nonblocking(conn) ||
- (conn->current_msg->msg.w.apiflags & NETCONN_DONTBLOCK);
- u8_t apiflags = conn->current_msg->msg.w.apiflags;
- 802e320: 7c13 ldrb r3, [r2, #16]
- conn->current_msg->msg.w.len = conn->write_offset;
- }
- } else
- #endif /* LWIP_SO_SNDTIMEO */
- {
- dataptr = (u8_t*)conn->current_msg->msg.w.dataptr + conn->write_offset;
- 802e322: 6891 ldr r1, [r2, #8]
- diff = conn->current_msg->msg.w.len - conn->write_offset;
- 802e324: 68d2 ldr r2, [r2, #12]
- if (diff > 0xffffUL) { /* max_u16_t */
- 802e326: f64f 75ff movw r5, #65535 ; 0xffff
- }
- } else
- #endif /* LWIP_SO_SNDTIMEO */
- {
- dataptr = (u8_t*)conn->current_msg->msg.w.dataptr + conn->write_offset;
- diff = conn->current_msg->msg.w.len - conn->write_offset;
- 802e32a: 1a12 subs r2, r2, r0
- conn->current_msg->msg.w.len = conn->write_offset;
- }
- } else
- #endif /* LWIP_SO_SNDTIMEO */
- {
- dataptr = (u8_t*)conn->current_msg->msg.w.dataptr + conn->write_offset;
- 802e32c: 1809 adds r1, r1, r0
- #endif
- apiflags |= TCP_WRITE_FLAG_MORE;
- } else {
- len = (u16_t)diff;
- }
- available = tcp_sndbuf(conn->pcb.tcp);
- 802e32e: 6860 ldr r0, [r4, #4]
- } else
- #endif /* LWIP_SO_SNDTIMEO */
- {
- dataptr = (u8_t*)conn->current_msg->msg.w.dataptr + conn->write_offset;
- diff = conn->current_msg->msg.w.len - conn->write_offset;
- if (diff > 0xffffUL) { /* max_u16_t */
- 802e330: 42aa cmp r2, r5
- #if LWIP_TCPIP_CORE_LOCKING
- conn->flags |= NETCONN_FLAG_WRITE_DELAYED;
- #endif
- apiflags |= TCP_WRITE_FLAG_MORE;
- } else {
- len = (u16_t)diff;
- 802e332: bf98 it ls
- 802e334: b295 uxthls r5, r2
- }
- available = tcp_sndbuf(conn->pcb.tcp);
- 802e336: f8b0 2066 ldrh.w r2, [r0, #102] ; 0x66
- if (diff > 0xffffUL) { /* max_u16_t */
- len = 0xffff;
- #if LWIP_TCPIP_CORE_LOCKING
- conn->flags |= NETCONN_FLAG_WRITE_DELAYED;
- #endif
- apiflags |= TCP_WRITE_FLAG_MORE;
- 802e33a: bf88 it hi
- 802e33c: f043 0302 orrhi.w r3, r3, #2
- } else {
- len = (u16_t)diff;
- }
- available = tcp_sndbuf(conn->pcb.tcp);
- if (available < len) {
- 802e340: 42aa cmp r2, r5
- err_t err;
- void *dataptr;
- u16_t len, available;
- u8_t write_finished = 0;
- size_t diff;
- u8_t dontblock = netconn_is_nonblocking(conn) ||
- 802e342: b2ff uxtb r7, r7
- apiflags |= TCP_WRITE_FLAG_MORE;
- } else {
- len = (u16_t)diff;
- }
- available = tcp_sndbuf(conn->pcb.tcp);
- if (available < len) {
- 802e344: d206 bcs.n 802e354 <do_writemore+0x52>
- /* don't try to write more than sendbuf */
- len = available;
- if (dontblock){
- 802e346: b117 cbz r7, 802e34e <do_writemore+0x4c>
- if (!len) {
- 802e348: 4615 mov r5, r2
- 802e34a: b16a cbz r2, 802e368 <do_writemore+0x66>
- 802e34c: e002 b.n 802e354 <do_writemore+0x52>
- }
- } else {
- #if LWIP_TCPIP_CORE_LOCKING
- conn->flags |= NETCONN_FLAG_WRITE_DELAYED;
- #endif
- apiflags |= TCP_WRITE_FLAG_MORE;
- 802e34e: f043 0302 orr.w r3, r3, #2
- 802e352: 4615 mov r5, r2
- }
- }
- LWIP_ASSERT("do_writemore: invalid length!", ((conn->write_offset + len) <= conn->current_msg->msg.w.len));
- err = tcp_write(conn->pcb.tcp, dataptr, len, apiflags);
- 802e354: 462a mov r2, r5
- 802e356: f003 fca4 bl 8031ca2 <tcp_write>
- /* if OK or memory error, check available space */
- if ((err == ERR_OK) || (err == ERR_MEM)) {
- 802e35a: 1c43 adds r3, r0, #1
- 802e35c: b2db uxtb r3, r3
- 802e35e: 2b01 cmp r3, #1
- #endif
- apiflags |= TCP_WRITE_FLAG_MORE;
- }
- }
- LWIP_ASSERT("do_writemore: invalid length!", ((conn->write_offset + len) <= conn->current_msg->msg.w.len));
- err = tcp_write(conn->pcb.tcp, dataptr, len, apiflags);
- 802e360: 4606 mov r6, r0
- /* if OK or memory error, check available space */
- if ((err == ERR_OK) || (err == ERR_MEM)) {
- 802e362: d83e bhi.n 802e3e2 <do_writemore+0xe0>
- err_mem:
- if (dontblock && (len < conn->current_msg->msg.w.len)) {
- 802e364: b187 cbz r7, 802e388 <do_writemore+0x86>
- 802e366: e000 b.n 802e36a <do_writemore+0x68>
- if (available < len) {
- /* don't try to write more than sendbuf */
- len = available;
- if (dontblock){
- if (!len) {
- err = ERR_WOULDBLOCK;
- 802e368: 26f9 movs r6, #249 ; 0xf9
- LWIP_ASSERT("do_writemore: invalid length!", ((conn->write_offset + len) <= conn->current_msg->msg.w.len));
- err = tcp_write(conn->pcb.tcp, dataptr, len, apiflags);
- /* if OK or memory error, check available space */
- if ((err == ERR_OK) || (err == ERR_MEM)) {
- err_mem:
- if (dontblock && (len < conn->current_msg->msg.w.len)) {
- 802e36a: 6a63 ldr r3, [r4, #36] ; 0x24
- 802e36c: 68db ldr r3, [r3, #12]
- 802e36e: 429d cmp r5, r3
- 802e370: d20a bcs.n 802e388 <do_writemore+0x86>
- /* non-blocking write did not write everything: mark the pcb non-writable
- and let poll_tcp check writable space to mark the pcb writable again */
- API_EVENT(conn, NETCONN_EVT_SENDMINUS, len);
- 802e372: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802e374: b11b cbz r3, 802e37e <do_writemore+0x7c>
- 802e376: 4620 mov r0, r4
- 802e378: 2103 movs r1, #3
- 802e37a: 462a mov r2, r5
- 802e37c: 4798 blx r3
- conn->flags |= NETCONN_FLAG_CHECK_WRITESPACE;
- 802e37e: 7f23 ldrb r3, [r4, #28]
- 802e380: f043 0310 orr.w r3, r3, #16
- 802e384: 7723 strb r3, [r4, #28]
- 802e386: e010 b.n 802e3aa <do_writemore+0xa8>
- } else if ((tcp_sndbuf(conn->pcb.tcp) <= TCP_SNDLOWAT) ||
- 802e388: 6863 ldr r3, [r4, #4]
- 802e38a: f8b3 1066 ldrh.w r1, [r3, #102] ; 0x66
- 802e38e: f243 3254 movw r2, #13140 ; 0x3354
- 802e392: 4291 cmp r1, r2
- 802e394: d903 bls.n 802e39e <do_writemore+0x9c>
- 802e396: f8b3 3068 ldrh.w r3, [r3, #104] ; 0x68
- 802e39a: 2b23 cmp r3, #35 ; 0x23
- 802e39c: d905 bls.n 802e3aa <do_writemore+0xa8>
- (tcp_sndqueuelen(conn->pcb.tcp) >= TCP_SNDQUEUELOWAT)) {
- /* The queued byte- or pbuf-count exceeds the configured low-water limit,
- let select mark this pcb as non-writable. */
- API_EVENT(conn, NETCONN_EVT_SENDMINUS, len);
- 802e39e: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802e3a0: b11b cbz r3, 802e3aa <do_writemore+0xa8>
- 802e3a2: 4620 mov r0, r4
- 802e3a4: 2103 movs r1, #3
- 802e3a6: 462a mov r2, r5
- 802e3a8: 4798 blx r3
- }
- }
- if (err == ERR_OK) {
- 802e3aa: b996 cbnz r6, 802e3d2 <do_writemore+0xd0>
- conn->write_offset += len;
- 802e3ac: 6a23 ldr r3, [r4, #32]
- 802e3ae: 18ed adds r5, r5, r3
- if ((conn->write_offset == conn->current_msg->msg.w.len) || dontblock) {
- 802e3b0: 6a63 ldr r3, [r4, #36] ; 0x24
- API_EVENT(conn, NETCONN_EVT_SENDMINUS, len);
- }
- }
- if (err == ERR_OK) {
- conn->write_offset += len;
- 802e3b2: 6225 str r5, [r4, #32]
- if ((conn->write_offset == conn->current_msg->msg.w.len) || dontblock) {
- 802e3b4: 68da ldr r2, [r3, #12]
- 802e3b6: 4295 cmp r5, r2
- 802e3b8: 4632 mov r2, r6
- 802e3ba: d000 beq.n 802e3be <do_writemore+0xbc>
- 802e3bc: b11f cbz r7, 802e3c6 <do_writemore+0xc4>
- /* return sent length */
- conn->current_msg->msg.w.len = conn->write_offset;
- 802e3be: 60dd str r5, [r3, #12]
- /* everything was written */
- write_finished = 1;
- conn->write_offset = 0;
- 802e3c0: 6222 str r2, [r4, #32]
- conn->write_offset += len;
- if ((conn->write_offset == conn->current_msg->msg.w.len) || dontblock) {
- /* return sent length */
- conn->current_msg->msg.w.len = conn->write_offset;
- /* everything was written */
- write_finished = 1;
- 802e3c2: 2501 movs r5, #1
- 802e3c4: e000 b.n 802e3c8 <do_writemore+0xc6>
- do_writemore(struct netconn *conn)
- {
- err_t err;
- void *dataptr;
- u16_t len, available;
- u8_t write_finished = 0;
- 802e3c6: 4635 mov r5, r6
- conn->current_msg->msg.w.len = conn->write_offset;
- /* everything was written */
- write_finished = 1;
- conn->write_offset = 0;
- }
- tcp_output(conn->pcb.tcp);
- 802e3c8: 6860 ldr r0, [r4, #4]
- 802e3ca: f003 fe7d bl 80320c8 <tcp_output>
- the error to the application thread. */
- write_finished = 1;
- conn->current_msg->msg.w.len = 0;
- }
- }
- if (write_finished) {
- 802e3ce: b1a5 cbz r5, 802e3fa <do_writemore+0xf8>
- 802e3d0: e00a b.n 802e3e8 <do_writemore+0xe6>
- /* everything was written */
- write_finished = 1;
- conn->write_offset = 0;
- }
- tcp_output(conn->pcb.tcp);
- } else if ((err == ERR_MEM) && !dontblock) {
- 802e3d2: b273 sxtb r3, r6
- 802e3d4: 3301 adds r3, #1
- 802e3d6: d104 bne.n 802e3e2 <do_writemore+0xe0>
- 802e3d8: b91f cbnz r7, 802e3e2 <do_writemore+0xe0>
- /* If ERR_MEM, we wait for sent_tcp or poll_tcp to be called
- we do NOT return to the application thread, since ERR_MEM is
- only a temporary error! */
- /* tcp_write returned ERR_MEM, try tcp_output anyway */
- tcp_output(conn->pcb.tcp);
- 802e3da: 6860 ldr r0, [r4, #4]
- 802e3dc: f003 fe74 bl 80320c8 <tcp_output>
- 802e3e0: e00b b.n 802e3fa <do_writemore+0xf8>
- #endif
- } else {
- /* On errors != ERR_MEM, we don't try writing any more but return
- the error to the application thread. */
- write_finished = 1;
- conn->current_msg->msg.w.len = 0;
- 802e3e2: 6a63 ldr r3, [r4, #36] ; 0x24
- 802e3e4: 2200 movs r2, #0
- 802e3e6: 60da str r2, [r3, #12]
- }
- }
- if (write_finished) {
- /* everything was written: set back connection state
- and back to application task */
- conn->current_msg->err = err;
- 802e3e8: 6a63 ldr r3, [r4, #36] ; 0x24
- 802e3ea: 711e strb r6, [r3, #4]
- conn->current_msg = NULL;
- 802e3ec: 2300 movs r3, #0
- 802e3ee: 6263 str r3, [r4, #36] ; 0x24
- conn->state = NETCONN_NONE;
- 802e3f0: 7063 strb r3, [r4, #1]
- #if LWIP_TCPIP_CORE_LOCKING
- if ((conn->flags & NETCONN_FLAG_WRITE_DELAYED) != 0)
- #endif
- {
- sys_sem_signal(&conn->op_completed);
- 802e3f2: f104 000c add.w r0, r4, #12
- 802e3f6: f009 fb37 bl 8037a68 <sys_sem_signal>
- #if LWIP_TCPIP_CORE_LOCKING
- else
- return ERR_MEM;
- #endif
- return ERR_OK;
- }
- 802e3fa: 2000 movs r0, #0
- 802e3fc: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 0802e3fe <poll_tcp>:
- struct netconn *conn = (struct netconn *)arg;
- LWIP_UNUSED_ARG(pcb);
- LWIP_ASSERT("conn != NULL", (conn != NULL));
- if (conn->state == NETCONN_WRITE) {
- 802e3fe: 7843 ldrb r3, [r0, #1]
- 802e400: 2b01 cmp r3, #1
- *
- * @see tcp.h (struct tcp_pcb.poll) for parameters and return value
- */
- static err_t
- poll_tcp(void *arg, struct tcp_pcb *pcb)
- {
- 802e402: b510 push {r4, lr}
- 802e404: 4604 mov r4, r0
- struct netconn *conn = (struct netconn *)arg;
- LWIP_UNUSED_ARG(pcb);
- LWIP_ASSERT("conn != NULL", (conn != NULL));
- if (conn->state == NETCONN_WRITE) {
- 802e406: d102 bne.n 802e40e <poll_tcp+0x10>
- do_writemore(conn);
- 802e408: f7ff ff7b bl 802e302 <do_writemore>
- 802e40c: e003 b.n 802e416 <poll_tcp+0x18>
- } else if (conn->state == NETCONN_CLOSE) {
- 802e40e: 2b04 cmp r3, #4
- 802e410: d101 bne.n 802e416 <poll_tcp+0x18>
- do_close_internal(conn);
- 802e412: f7ff fe89 bl 802e128 <do_close_internal>
- }
- /* @todo: implement connect timeout here? */
- /* Did a nonblocking write fail before? Then check available write-space. */
- if (conn->flags & NETCONN_FLAG_CHECK_WRITESPACE) {
- 802e416: 7f22 ldrb r2, [r4, #28]
- 802e418: f002 0310 and.w r3, r2, #16
- 802e41c: b2db uxtb r3, r3
- 802e41e: b1a3 cbz r3, 802e44a <poll_tcp+0x4c>
- /* If the queued byte- or pbuf-count drops below the configured low-water limit,
- let select mark this pcb as writable again. */
- if ((conn->pcb.tcp != NULL) && (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT) &&
- 802e420: 6863 ldr r3, [r4, #4]
- 802e422: b193 cbz r3, 802e44a <poll_tcp+0x4c>
- 802e424: f8b3 0066 ldrh.w r0, [r3, #102] ; 0x66
- 802e428: f243 3154 movw r1, #13140 ; 0x3354
- 802e42c: 4288 cmp r0, r1
- 802e42e: d90c bls.n 802e44a <poll_tcp+0x4c>
- 802e430: f8b3 3068 ldrh.w r3, [r3, #104] ; 0x68
- 802e434: 2b23 cmp r3, #35 ; 0x23
- 802e436: d808 bhi.n 802e44a <poll_tcp+0x4c>
- (tcp_sndqueuelen(conn->pcb.tcp) < TCP_SNDQUEUELOWAT)) {
- conn->flags &= ~NETCONN_FLAG_CHECK_WRITESPACE;
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
- 802e438: 6aa3 ldr r3, [r4, #40] ; 0x28
- if (conn->flags & NETCONN_FLAG_CHECK_WRITESPACE) {
- /* If the queued byte- or pbuf-count drops below the configured low-water limit,
- let select mark this pcb as writable again. */
- if ((conn->pcb.tcp != NULL) && (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT) &&
- (tcp_sndqueuelen(conn->pcb.tcp) < TCP_SNDQUEUELOWAT)) {
- conn->flags &= ~NETCONN_FLAG_CHECK_WRITESPACE;
- 802e43a: f022 0210 bic.w r2, r2, #16
- 802e43e: 7722 strb r2, [r4, #28]
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
- 802e440: b11b cbz r3, 802e44a <poll_tcp+0x4c>
- 802e442: 4620 mov r0, r4
- 802e444: 2102 movs r1, #2
- 802e446: 2200 movs r2, #0
- 802e448: 4798 blx r3
- }
- }
- return ERR_OK;
- }
- 802e44a: 2000 movs r0, #0
- 802e44c: bd10 pop {r4, pc}
- 0802e44e <recv_udp>:
- * @see udp.h (struct udp_pcb.recv) for parameters
- */
- static void
- recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
- ip_addr_t *addr, u16_t port)
- {
- 802e44e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 802e452: 4616 mov r6, r2
- 802e454: 461f mov r7, r3
- 802e456: f8bd 8018 ldrh.w r8, [sp, #24]
- #if LWIP_SO_RCVBUF
- SYS_ARCH_GET(conn->recv_avail, recv_avail);
- if ((conn == NULL) || !sys_mbox_valid(&conn->recvmbox) ||
- ((recv_avail + (int)(p->tot_len)) > conn->recv_bufsize)) {
- #else /* LWIP_SO_RCVBUF */
- if ((conn == NULL) || !sys_mbox_valid(&conn->recvmbox)) {
- 802e45a: 4605 mov r5, r0
- 802e45c: b108 cbz r0, 802e462 <recv_udp+0x14>
- 802e45e: 6903 ldr r3, [r0, #16]
- 802e460: b923 cbnz r3, 802e46c <recv_udp+0x1e>
- #endif /* LWIP_SO_RCVBUF */
- pbuf_free(p);
- 802e462: 4630 mov r0, r6
- SYS_ARCH_INC(conn->recv_avail, len);
- #endif /* LWIP_SO_RCVBUF */
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, len);
- }
- }
- 802e464: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
- if ((conn == NULL) || !sys_mbox_valid(&conn->recvmbox) ||
- ((recv_avail + (int)(p->tot_len)) > conn->recv_bufsize)) {
- #else /* LWIP_SO_RCVBUF */
- if ((conn == NULL) || !sys_mbox_valid(&conn->recvmbox)) {
- #endif /* LWIP_SO_RCVBUF */
- pbuf_free(p);
- 802e468: f001 bcd0 b.w 802fe0c <pbuf_free>
- return;
- }
- buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
- 802e46c: 2005 movs r0, #5
- 802e46e: f001 fbad bl 802fbcc <memp_malloc>
- if (buf == NULL) {
- 802e472: 4604 mov r4, r0
- 802e474: 2800 cmp r0, #0
- 802e476: d0f4 beq.n 802e462 <recv_udp+0x14>
- pbuf_free(p);
- return;
- } else {
- buf->p = p;
- 802e478: 6006 str r6, [r0, #0]
- buf->ptr = p;
- 802e47a: 6046 str r6, [r0, #4]
- ip_addr_set(&buf->addr, addr);
- 802e47c: b107 cbz r7, 802e480 <recv_udp+0x32>
- 802e47e: 683f ldr r7, [r7, #0]
- }
- #endif /* LWIP_NETBUF_RECVINFO */
- }
- len = p->tot_len;
- if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) {
- 802e480: 4621 mov r1, r4
- pbuf_free(p);
- return;
- } else {
- buf->p = p;
- buf->ptr = p;
- ip_addr_set(&buf->addr, addr);
- 802e482: 60a7 str r7, [r4, #8]
- buf->port = port;
- 802e484: f8a4 800c strh.w r8, [r4, #12]
- }
- #endif /* LWIP_NETBUF_RECVINFO */
- }
- len = p->tot_len;
- if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) {
- 802e488: f105 0010 add.w r0, r5, #16
- buf->toport_chksum = udphdr->dest;
- }
- #endif /* LWIP_NETBUF_RECVINFO */
- }
- len = p->tot_len;
- 802e48c: 8936 ldrh r6, [r6, #8]
- if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) {
- 802e48e: f009 fa23 bl 80378d8 <sys_mbox_trypost>
- 802e492: 4601 mov r1, r0
- 802e494: b120 cbz r0, 802e4a0 <recv_udp+0x52>
- netbuf_delete(buf);
- 802e496: 4620 mov r0, r4
- SYS_ARCH_INC(conn->recv_avail, len);
- #endif /* LWIP_SO_RCVBUF */
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, len);
- }
- }
- 802e498: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
- #endif /* LWIP_NETBUF_RECVINFO */
- }
- len = p->tot_len;
- if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) {
- netbuf_delete(buf);
- 802e49c: f000 baa1 b.w 802e9e2 <netbuf_delete>
- } else {
- #if LWIP_SO_RCVBUF
- SYS_ARCH_INC(conn->recv_avail, len);
- #endif /* LWIP_SO_RCVBUF */
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, len);
- 802e4a0: 6aab ldr r3, [r5, #40] ; 0x28
- 802e4a2: b113 cbz r3, 802e4aa <recv_udp+0x5c>
- 802e4a4: 4628 mov r0, r5
- 802e4a6: 4632 mov r2, r6
- 802e4a8: 4798 blx r3
- 802e4aa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 802e4ae: 0000 movs r0, r0
- 0802e4b0 <recv_raw>:
- * @see raw.h (struct raw_pcb.recv) for parameters and return value
- */
- static u8_t
- recv_raw(void *arg, struct raw_pcb *pcb, struct pbuf *p,
- ip_addr_t *addr)
- {
- 802e4b0: b5f8 push {r3, r4, r5, r6, r7, lr}
- 802e4b2: 460f mov r7, r1
- 802e4b4: 4614 mov r4, r2
- struct netconn *conn;
- LWIP_UNUSED_ARG(addr);
- conn = (struct netconn *)arg;
- if ((conn != NULL) && sys_mbox_valid(&conn->recvmbox)) {
- 802e4b6: 4605 mov r5, r0
- 802e4b8: 2800 cmp r0, #0
- 802e4ba: d031 beq.n 802e520 <recv_raw+0x70>
- 802e4bc: 6903 ldr r3, [r0, #16]
- 802e4be: 2b00 cmp r3, #0
- 802e4c0: d02e beq.n 802e520 <recv_raw+0x70>
- if ((recv_avail + (int)(p->tot_len)) > conn->recv_bufsize) {
- return 0;
- }
- #endif /* LWIP_SO_RCVBUF */
- /* copy the whole packet into new pbufs */
- q = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM);
- 802e4c2: 8911 ldrh r1, [r2, #8]
- 802e4c4: 2003 movs r0, #3
- 802e4c6: 2200 movs r2, #0
- 802e4c8: f001 fced bl 802fea6 <pbuf_alloc>
- if(q != NULL) {
- 802e4cc: 4606 mov r6, r0
- 802e4ce: b338 cbz r0, 802e520 <recv_raw+0x70>
- if (pbuf_copy(q, p) != ERR_OK) {
- 802e4d0: 4621 mov r1, r4
- 802e4d2: f001 fd9f bl 8030014 <pbuf_copy>
- 802e4d6: b1e0 cbz r0, 802e512 <recv_raw+0x62>
- if (q != NULL) {
- u16_t len;
- buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
- if (buf == NULL) {
- pbuf_free(q);
- 802e4d8: 4630 mov r0, r6
- 802e4da: f001 fc97 bl 802fe0c <pbuf_free>
- return 0;
- 802e4de: e01f b.n 802e520 <recv_raw+0x70>
- }
- buf->p = q;
- buf->ptr = q;
- ip_addr_copy(buf->addr, *ip_current_src_addr());
- 802e4e0: 4b10 ldr r3, [pc, #64] ; (802e524 <recv_raw+0x74>)
- if (buf == NULL) {
- pbuf_free(q);
- return 0;
- }
- buf->p = q;
- 802e4e2: 6026 str r6, [r4, #0]
- buf->ptr = q;
- ip_addr_copy(buf->addr, *ip_current_src_addr());
- 802e4e4: 681b ldr r3, [r3, #0]
- pbuf_free(q);
- return 0;
- }
- buf->p = q;
- buf->ptr = q;
- 802e4e6: 6066 str r6, [r4, #4]
- ip_addr_copy(buf->addr, *ip_current_src_addr());
- 802e4e8: 60a3 str r3, [r4, #8]
- buf->port = pcb->protocol;
- 802e4ea: 7c3b ldrb r3, [r7, #16]
- len = q->tot_len;
- 802e4ec: 8936 ldrh r6, [r6, #8]
- }
- buf->p = q;
- buf->ptr = q;
- ip_addr_copy(buf->addr, *ip_current_src_addr());
- buf->port = pcb->protocol;
- 802e4ee: 81a3 strh r3, [r4, #12]
- len = q->tot_len;
- if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) {
- 802e4f0: 4621 mov r1, r4
- 802e4f2: f105 0010 add.w r0, r5, #16
- 802e4f6: f009 f9ef bl 80378d8 <sys_mbox_trypost>
- 802e4fa: 4601 mov r1, r0
- 802e4fc: b118 cbz r0, 802e506 <recv_raw+0x56>
- netbuf_delete(buf);
- 802e4fe: 4620 mov r0, r4
- 802e500: f000 fa6f bl 802e9e2 <netbuf_delete>
- return 0;
- 802e504: e00c b.n 802e520 <recv_raw+0x70>
- } else {
- #if LWIP_SO_RCVBUF
- SYS_ARCH_INC(conn->recv_avail, len);
- #endif /* LWIP_SO_RCVBUF */
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, len);
- 802e506: 6aab ldr r3, [r5, #40] ; 0x28
- 802e508: b153 cbz r3, 802e520 <recv_raw+0x70>
- 802e50a: 4628 mov r0, r5
- 802e50c: 4632 mov r2, r6
- 802e50e: 4798 blx r3
- 802e510: e006 b.n 802e520 <recv_raw+0x70>
- }
- }
- if (q != NULL) {
- u16_t len;
- buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
- 802e512: 2005 movs r0, #5
- 802e514: f001 fb5a bl 802fbcc <memp_malloc>
- if (buf == NULL) {
- 802e518: 4604 mov r4, r0
- 802e51a: 2800 cmp r0, #0
- 802e51c: d1e0 bne.n 802e4e0 <recv_raw+0x30>
- 802e51e: e7db b.n 802e4d8 <recv_raw+0x28>
- }
- }
- }
- return 0; /* do not eat the packet */
- }
- 802e520: 2000 movs r0, #0
- 802e522: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 802e524: 2000f6dc .word 0x2000f6dc
- 0802e528 <recv_tcp>:
- *
- * @see tcp.h (struct tcp_pcb.recv) for parameters and return value
- */
- static err_t
- recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
- {
- 802e528: b5f8 push {r3, r4, r5, r6, r7, lr}
- 802e52a: 4614 mov r4, r2
- 802e52c: 461f mov r7, r3
- LWIP_ASSERT("recv_tcp must have a pcb argument", pcb != NULL);
- LWIP_ASSERT("recv_tcp must have an argument", arg != NULL);
- conn = (struct netconn *)arg;
- LWIP_ASSERT("recv_tcp: recv for wrong pcb!", conn->pcb.tcp == pcb);
- if (conn == NULL) {
- 802e52e: 4605 mov r5, r0
- 802e530: b340 cbz r0, 802e584 <recv_tcp+0x5c>
- return ERR_VAL;
- }
- if (!sys_mbox_valid(&conn->recvmbox)) {
- 802e532: 6906 ldr r6, [r0, #16]
- 802e534: b956 cbnz r6, 802e54c <recv_tcp+0x24>
- /* recvmbox already deleted */
- if (p != NULL) {
- 802e536: b90a cbnz r2, 802e53c <recv_tcp+0x14>
- tcp_recved(pcb, p->tot_len);
- pbuf_free(p);
- }
- return ERR_OK;
- 802e538: 2000 movs r0, #0
- 802e53a: e026 b.n 802e58a <recv_tcp+0x62>
- return ERR_VAL;
- }
- if (!sys_mbox_valid(&conn->recvmbox)) {
- /* recvmbox already deleted */
- if (p != NULL) {
- tcp_recved(pcb, p->tot_len);
- 802e53c: 4608 mov r0, r1
- 802e53e: 8911 ldrh r1, [r2, #8]
- 802e540: f001 ff78 bl 8030434 <tcp_recved>
- pbuf_free(p);
- 802e544: 4620 mov r0, r4
- 802e546: f001 fc61 bl 802fe0c <pbuf_free>
- 802e54a: e7f5 b.n 802e538 <recv_tcp+0x10>
- /* Unlike for UDP or RAW pcbs, don't check for available space
- using recv_avail since that could break the connection
- (data is already ACKed) */
- /* don't overwrite fatal errors! */
- NETCONN_SET_SAFE_ERR(conn, err);
- 802e54c: f009 fabc bl 8037ac8 <sys_arch_protect>
- 802e550: f995 3008 ldrsb.w r3, [r5, #8]
- 802e554: 3309 adds r3, #9
- 802e556: bfa8 it ge
- 802e558: 722f strbge r7, [r5, #8]
- 802e55a: f009 fabf bl 8037adc <sys_arch_unprotect>
- if (p != NULL) {
- 802e55e: b10c cbz r4, 802e564 <recv_tcp+0x3c>
- len = p->tot_len;
- 802e560: 8926 ldrh r6, [r4, #8]
- 802e562: e000 b.n 802e566 <recv_tcp+0x3e>
- } else {
- len = 0;
- 802e564: 4626 mov r6, r4
- }
- if (sys_mbox_trypost(&conn->recvmbox, p) != ERR_OK) {
- 802e566: 4621 mov r1, r4
- 802e568: f105 0010 add.w r0, r5, #16
- 802e56c: f009 f9b4 bl 80378d8 <sys_mbox_trypost>
- 802e570: 4604 mov r4, r0
- 802e572: b948 cbnz r0, 802e588 <recv_tcp+0x60>
- } else {
- #if LWIP_SO_RCVBUF
- SYS_ARCH_INC(conn->recv_avail, len);
- #endif /* LWIP_SO_RCVBUF */
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, len);
- 802e574: 6aab ldr r3, [r5, #40] ; 0x28
- 802e576: 2b00 cmp r3, #0
- 802e578: d0de beq.n 802e538 <recv_tcp+0x10>
- 802e57a: 4628 mov r0, r5
- 802e57c: 4621 mov r1, r4
- 802e57e: 4632 mov r2, r6
- 802e580: 4798 blx r3
- 802e582: e7d9 b.n 802e538 <recv_tcp+0x10>
- LWIP_ASSERT("recv_tcp must have an argument", arg != NULL);
- conn = (struct netconn *)arg;
- LWIP_ASSERT("recv_tcp: recv for wrong pcb!", conn->pcb.tcp == pcb);
- if (conn == NULL) {
- return ERR_VAL;
- 802e584: 20fa movs r0, #250 ; 0xfa
- 802e586: e000 b.n 802e58a <recv_tcp+0x62>
- len = 0;
- }
- if (sys_mbox_trypost(&conn->recvmbox, p) != ERR_OK) {
- /* don't deallocate p: it is presented to us later again from tcp_fasttmr! */
- return ERR_MEM;
- 802e588: 20ff movs r0, #255 ; 0xff
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, len);
- }
- return ERR_OK;
- }
- 802e58a: b240 sxtb r0, r0
- 802e58c: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 0802e58e <sent_tcp>:
- *
- * @see tcp.h (struct tcp_pcb.sent) for parameters and return value
- */
- static err_t
- sent_tcp(void *arg, struct tcp_pcb *pcb, u16_t len)
- {
- 802e58e: b538 push {r3, r4, r5, lr}
- struct netconn *conn = (struct netconn *)arg;
- LWIP_UNUSED_ARG(pcb);
- LWIP_ASSERT("conn != NULL", (conn != NULL));
- if (conn->state == NETCONN_WRITE) {
- 802e590: 7843 ldrb r3, [r0, #1]
- 802e592: 2b01 cmp r3, #1
- *
- * @see tcp.h (struct tcp_pcb.sent) for parameters and return value
- */
- static err_t
- sent_tcp(void *arg, struct tcp_pcb *pcb, u16_t len)
- {
- 802e594: 4604 mov r4, r0
- 802e596: 4615 mov r5, r2
- struct netconn *conn = (struct netconn *)arg;
- LWIP_UNUSED_ARG(pcb);
- LWIP_ASSERT("conn != NULL", (conn != NULL));
- if (conn->state == NETCONN_WRITE) {
- 802e598: d102 bne.n 802e5a0 <sent_tcp+0x12>
- do_writemore(conn);
- 802e59a: f7ff feb2 bl 802e302 <do_writemore>
- 802e59e: e003 b.n 802e5a8 <sent_tcp+0x1a>
- } else if (conn->state == NETCONN_CLOSE) {
- 802e5a0: 2b04 cmp r3, #4
- 802e5a2: d101 bne.n 802e5a8 <sent_tcp+0x1a>
- do_close_internal(conn);
- 802e5a4: f7ff fdc0 bl 802e128 <do_close_internal>
- }
- if (conn) {
- /* If the queued byte- or pbuf-count drops below the configured low-water limit,
- let select mark this pcb as writable again. */
- if ((conn->pcb.tcp != NULL) && (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT) &&
- 802e5a8: 6863 ldr r3, [r4, #4]
- 802e5aa: b19b cbz r3, 802e5d4 <sent_tcp+0x46>
- 802e5ac: f8b3 1066 ldrh.w r1, [r3, #102] ; 0x66
- 802e5b0: f243 3254 movw r2, #13140 ; 0x3354
- 802e5b4: 4291 cmp r1, r2
- 802e5b6: d90d bls.n 802e5d4 <sent_tcp+0x46>
- 802e5b8: f8b3 3068 ldrh.w r3, [r3, #104] ; 0x68
- 802e5bc: 2b23 cmp r3, #35 ; 0x23
- 802e5be: d809 bhi.n 802e5d4 <sent_tcp+0x46>
- (tcp_sndqueuelen(conn->pcb.tcp) < TCP_SNDQUEUELOWAT)) {
- conn->flags &= ~NETCONN_FLAG_CHECK_WRITESPACE;
- 802e5c0: 7f23 ldrb r3, [r4, #28]
- 802e5c2: f023 0310 bic.w r3, r3, #16
- 802e5c6: 7723 strb r3, [r4, #28]
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, len);
- 802e5c8: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802e5ca: b11b cbz r3, 802e5d4 <sent_tcp+0x46>
- 802e5cc: 4620 mov r0, r4
- 802e5ce: 2102 movs r1, #2
- 802e5d0: 462a mov r2, r5
- 802e5d2: 4798 blx r3
- }
- }
-
- return ERR_OK;
- }
- 802e5d4: 2000 movs r0, #0
- 802e5d6: bd38 pop {r3, r4, r5, pc}
- 0802e5d8 <do_newconn>:
- *
- * @param msg the api_msg_msg describing the connection type
- */
- void
- do_newconn(struct api_msg_msg *msg)
- {
- 802e5d8: b538 push {r3, r4, r5, lr}
- msg->err = ERR_OK;
- 802e5da: 2300 movs r3, #0
- if(msg->conn->pcb.tcp == NULL) {
- 802e5dc: 6805 ldr r5, [r0, #0]
- * @param msg the api_msg_msg describing the connection type
- */
- void
- do_newconn(struct api_msg_msg *msg)
- {
- msg->err = ERR_OK;
- 802e5de: 7103 strb r3, [r0, #4]
- if(msg->conn->pcb.tcp == NULL) {
- 802e5e0: 686b ldr r3, [r5, #4]
- *
- * @param msg the api_msg_msg describing the connection type
- */
- void
- do_newconn(struct api_msg_msg *msg)
- {
- 802e5e2: 4604 mov r4, r0
- msg->err = ERR_OK;
- if(msg->conn->pcb.tcp == NULL) {
- 802e5e4: 2b00 cmp r3, #0
- 802e5e6: d134 bne.n 802e652 <do_newconn+0x7a>
- pcb_new(struct api_msg_msg *msg)
- {
- LWIP_ASSERT("pcb_new: pcb already allocated", msg->conn->pcb.tcp == NULL);
- /* Allocate a PCB for this connection */
- switch(NETCONNTYPE_GROUP(msg->conn->type)) {
- 802e5e8: 782b ldrb r3, [r5, #0]
- 802e5ea: f003 03f0 and.w r3, r3, #240 ; 0xf0
- 802e5ee: 2b20 cmp r3, #32
- 802e5f0: d010 beq.n 802e614 <do_newconn+0x3c>
- 802e5f2: 2b40 cmp r3, #64 ; 0x40
- 802e5f4: d002 beq.n 802e5fc <do_newconn+0x24>
- 802e5f6: 2b10 cmp r3, #16
- 802e5f8: d129 bne.n 802e64e <do_newconn+0x76>
- 802e5fa: e01d b.n 802e638 <do_newconn+0x60>
- #if LWIP_RAW
- case NETCONN_RAW:
- msg->conn->pcb.raw = raw_new(msg->msg.n.proto);
- 802e5fc: 7a00 ldrb r0, [r0, #8]
- 802e5fe: f001 fe31 bl 8030264 <raw_new>
- 802e602: 6068 str r0, [r5, #4]
- if(msg->conn->pcb.raw == NULL) {
- 802e604: 6822 ldr r2, [r4, #0]
- 802e606: 6850 ldr r0, [r2, #4]
- 802e608: b900 cbnz r0, 802e60c <do_newconn+0x34>
- 802e60a: e01b b.n 802e644 <do_newconn+0x6c>
- msg->err = ERR_MEM;
- break;
- }
- raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn);
- 802e60c: 4914 ldr r1, [pc, #80] ; (802e660 <do_newconn+0x88>)
- 802e60e: f001 fdc7 bl 80301a0 <raw_recv>
- 802e612: e01e b.n 802e652 <do_newconn+0x7a>
- break;
- #endif /* LWIP_RAW */
- #if LWIP_UDP
- case NETCONN_UDP:
- msg->conn->pcb.udp = udp_new();
- 802e614: f004 fa84 bl 8032b20 <udp_new>
- 802e618: 6068 str r0, [r5, #4]
- if(msg->conn->pcb.udp == NULL) {
- 802e61a: 6822 ldr r2, [r4, #0]
- 802e61c: 6853 ldr r3, [r2, #4]
- 802e61e: b903 cbnz r3, 802e622 <do_newconn+0x4a>
- 802e620: e010 b.n 802e644 <do_newconn+0x6c>
- #if LWIP_UDPLITE
- if (msg->conn->type==NETCONN_UDPLITE) {
- udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE);
- }
- #endif /* LWIP_UDPLITE */
- if (msg->conn->type==NETCONN_UDPNOCHKSUM) {
- 802e622: 7812 ldrb r2, [r2, #0]
- 802e624: 2a22 cmp r2, #34 ; 0x22
- 802e626: d101 bne.n 802e62c <do_newconn+0x54>
- udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
- 802e628: 2201 movs r2, #1
- 802e62a: 741a strb r2, [r3, #16]
- }
- udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
- 802e62c: 6822 ldr r2, [r4, #0]
- 802e62e: 490d ldr r1, [pc, #52] ; (802e664 <do_newconn+0x8c>)
- 802e630: 6850 ldr r0, [r2, #4]
- 802e632: f004 fa55 bl 8032ae0 <udp_recv>
- 802e636: e00c b.n 802e652 <do_newconn+0x7a>
- break;
- #endif /* LWIP_UDP */
- #if LWIP_TCP
- case NETCONN_TCP:
- msg->conn->pcb.tcp = tcp_new();
- 802e638: f002 fb20 bl 8030c7c <tcp_new>
- 802e63c: 6068 str r0, [r5, #4]
- if(msg->conn->pcb.tcp == NULL) {
- 802e63e: 6820 ldr r0, [r4, #0]
- 802e640: 6843 ldr r3, [r0, #4]
- 802e642: b90b cbnz r3, 802e648 <do_newconn+0x70>
- msg->err = ERR_MEM;
- 802e644: 23ff movs r3, #255 ; 0xff
- 802e646: e003 b.n 802e650 <do_newconn+0x78>
- break;
- }
- setup_tcp(msg->conn);
- 802e648: f7ff fd4c bl 802e0e4 <setup_tcp>
- 802e64c: e001 b.n 802e652 <do_newconn+0x7a>
- break;
- #endif /* LWIP_TCP */
- default:
- /* Unsupported netconn type, e.g. protocol disabled */
- msg->err = ERR_VAL;
- 802e64e: 23fa movs r3, #250 ; 0xfa
- 802e650: 7123 strb r3, [r4, #4]
- }
- /* Else? This "new" connection already has a PCB allocated. */
- /* Is this an error condition? Should it be deleted? */
- /* We currently just are happy and return. */
- TCPIP_APIMSG_ACK(msg);
- 802e652: 6820 ldr r0, [r4, #0]
- 802e654: 300c adds r0, #12
- }
- 802e656: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- }
- /* Else? This "new" connection already has a PCB allocated. */
- /* Is this an error condition? Should it be deleted? */
- /* We currently just are happy and return. */
- TCPIP_APIMSG_ACK(msg);
- 802e65a: f009 ba05 b.w 8037a68 <sys_sem_signal>
- 802e65e: bf00 nop
- 802e660: 0802e4b1 .word 0x0802e4b1
- 802e664: 0802e44f .word 0x0802e44f
- 0802e668 <netconn_alloc>:
- * @return a newly allocated struct netconn or
- * NULL on memory error
- */
- struct netconn*
- netconn_alloc(enum netconn_type t, netconn_callback callback)
- {
- 802e668: b5f8 push {r3, r4, r5, r6, r7, lr}
- 802e66a: 4605 mov r5, r0
- struct netconn *conn;
- int size;
- conn = (struct netconn *)memp_malloc(MEMP_NETCONN);
- 802e66c: 2006 movs r0, #6
- * @return a newly allocated struct netconn or
- * NULL on memory error
- */
- struct netconn*
- netconn_alloc(enum netconn_type t, netconn_callback callback)
- {
- 802e66e: 460f mov r7, r1
- struct netconn *conn;
- int size;
- conn = (struct netconn *)memp_malloc(MEMP_NETCONN);
- 802e670: f001 faac bl 802fbcc <memp_malloc>
- if (conn == NULL) {
- 802e674: 4604 mov r4, r0
- 802e676: b378 cbz r0, 802e6d8 <netconn_alloc+0x70>
- return NULL;
- }
- conn->last_err = ERR_OK;
- 802e678: 2300 movs r3, #0
- 802e67a: 7203 strb r3, [r0, #8]
- conn->type = t;
- 802e67c: 7005 strb r5, [r0, #0]
- conn->pcb.tcp = NULL;
- 802e67e: 6043 str r3, [r0, #4]
- #if (DEFAULT_RAW_RECVMBOX_SIZE == DEFAULT_UDP_RECVMBOX_SIZE) && \
- (DEFAULT_RAW_RECVMBOX_SIZE == DEFAULT_TCP_RECVMBOX_SIZE)
- size = DEFAULT_RAW_RECVMBOX_SIZE;
- #else
- switch(NETCONNTYPE_GROUP(t)) {
- 802e680: f005 00f0 and.w r0, r5, #240 ; 0xf0
- 802e684: 2820 cmp r0, #32
- 802e686: d008 beq.n 802e69a <netconn_alloc+0x32>
- 802e688: 2840 cmp r0, #64 ; 0x40
- 802e68a: d002 beq.n 802e692 <netconn_alloc+0x2a>
- 802e68c: 2810 cmp r0, #16
- 802e68e: d11e bne.n 802e6ce <netconn_alloc+0x66>
- 802e690: e001 b.n 802e696 <netconn_alloc+0x2e>
- #if LWIP_RAW
- case NETCONN_RAW:
- size = DEFAULT_RAW_RECVMBOX_SIZE;
- 802e692: 250a movs r5, #10
- 802e694: e002 b.n 802e69c <netconn_alloc+0x34>
- size = DEFAULT_UDP_RECVMBOX_SIZE;
- break;
- #endif /* LWIP_UDP */
- #if LWIP_TCP
- case NETCONN_TCP:
- size = DEFAULT_TCP_RECVMBOX_SIZE;
- 802e696: 2546 movs r5, #70 ; 0x46
- break;
- 802e698: e000 b.n 802e69c <netconn_alloc+0x34>
- size = DEFAULT_RAW_RECVMBOX_SIZE;
- break;
- #endif /* LWIP_RAW */
- #if LWIP_UDP
- case NETCONN_UDP:
- size = DEFAULT_UDP_RECVMBOX_SIZE;
- 802e69a: 2514 movs r5, #20
- LWIP_ASSERT("netconn_alloc: undefined netconn_type", 0);
- goto free_and_return;
- }
- #endif
- if (sys_sem_new(&conn->op_completed, 0) != ERR_OK) {
- 802e69c: f104 060c add.w r6, r4, #12
- 802e6a0: 4630 mov r0, r6
- 802e6a2: 2100 movs r1, #0
- 802e6a4: f009 f980 bl 80379a8 <sys_sem_new>
- 802e6a8: b988 cbnz r0, 802e6ce <netconn_alloc+0x66>
- goto free_and_return;
- }
- if (sys_mbox_new(&conn->recvmbox, size) != ERR_OK) {
- 802e6aa: f104 0010 add.w r0, r4, #16
- 802e6ae: 4629 mov r1, r5
- 802e6b0: f009 f8e6 bl 8037880 <sys_mbox_new>
- 802e6b4: b118 cbz r0, 802e6be <netconn_alloc+0x56>
- sys_sem_free(&conn->op_completed);
- 802e6b6: 4630 mov r0, r6
- 802e6b8: f009 f9e8 bl 8037a8c <sys_sem_free>
- goto free_and_return;
- 802e6bc: e007 b.n 802e6ce <netconn_alloc+0x66>
- }
- #if LWIP_TCP
- sys_mbox_set_invalid(&conn->acceptmbox);
- 802e6be: 6160 str r0, [r4, #20]
- #endif
- conn->state = NETCONN_NONE;
- 802e6c0: 7060 strb r0, [r4, #1]
- #if LWIP_SOCKET
- /* initialize socket to -1 since 0 is a valid socket */
- conn->socket = -1;
- #endif /* LWIP_SOCKET */
- conn->callback = callback;
- 802e6c2: 62a7 str r7, [r4, #40] ; 0x28
- #if LWIP_TCP
- conn->current_msg = NULL;
- 802e6c4: 6260 str r0, [r4, #36] ; 0x24
- conn->write_offset = 0;
- 802e6c6: 6220 str r0, [r4, #32]
- #endif /* LWIP_TCP */
- #if LWIP_SO_SNDTIMEO
- conn->send_timeout = 0;
- #endif /* LWIP_SO_SNDTIMEO */
- #if LWIP_SO_RCVTIMEO
- conn->recv_timeout = 0;
- 802e6c8: 61a0 str r0, [r4, #24]
- #endif /* LWIP_SO_RCVTIMEO */
- #if LWIP_SO_RCVBUF
- conn->recv_bufsize = RECV_BUFSIZE_DEFAULT;
- conn->recv_avail = 0;
- #endif /* LWIP_SO_RCVBUF */
- conn->flags = 0;
- 802e6ca: 7720 strb r0, [r4, #28]
- return conn;
- 802e6cc: e004 b.n 802e6d8 <netconn_alloc+0x70>
- free_and_return:
- memp_free(MEMP_NETCONN, conn);
- 802e6ce: 4621 mov r1, r4
- 802e6d0: 2006 movs r0, #6
- 802e6d2: f001 fa91 bl 802fbf8 <memp_free>
- return NULL;
- 802e6d6: 2400 movs r4, #0
- }
- 802e6d8: 4620 mov r0, r4
- 802e6da: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 0802e6dc <netconn_free>:
- *
- * @param conn the netconn to free
- */
- void
- netconn_free(struct netconn *conn)
- {
- 802e6dc: b510 push {r4, lr}
- 802e6de: 4604 mov r4, r0
- #if LWIP_TCP
- LWIP_ASSERT("acceptmbox must be deallocated before calling this function",
- !sys_mbox_valid(&conn->acceptmbox));
- #endif /* LWIP_TCP */
- sys_sem_free(&conn->op_completed);
- 802e6e0: 300c adds r0, #12
- 802e6e2: f009 f9d3 bl 8037a8c <sys_sem_free>
- sys_sem_set_invalid(&conn->op_completed);
- 802e6e6: 2300 movs r3, #0
- memp_free(MEMP_NETCONN, conn);
- 802e6e8: 2006 movs r0, #6
- 802e6ea: 4621 mov r1, r4
- LWIP_ASSERT("acceptmbox must be deallocated before calling this function",
- !sys_mbox_valid(&conn->acceptmbox));
- #endif /* LWIP_TCP */
- sys_sem_free(&conn->op_completed);
- sys_sem_set_invalid(&conn->op_completed);
- 802e6ec: 60e3 str r3, [r4, #12]
- memp_free(MEMP_NETCONN, conn);
- }
- 802e6ee: e8bd 4010 ldmia.w sp!, {r4, lr}
- #endif /* LWIP_TCP */
- sys_sem_free(&conn->op_completed);
- sys_sem_set_invalid(&conn->op_completed);
- memp_free(MEMP_NETCONN, conn);
- 802e6f2: f001 ba81 b.w 802fbf8 <memp_free>
- 0802e6f6 <netconn_drain>:
- #endif /* LWIP_TCP */
- /* This runs in tcpip_thread, so we don't need to lock against rx packets */
- /* Delete and drain the recvmbox. */
- if (sys_mbox_valid(&conn->recvmbox)) {
- 802e6f6: 6903 ldr r3, [r0, #16]
- * @bytes_drained bytes drained from recvmbox
- * @accepts_drained pending connections drained from acceptmbox
- */
- static void
- netconn_drain(struct netconn *conn)
- {
- 802e6f8: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
- 802e6fa: 4604 mov r4, r0
- #endif /* LWIP_TCP */
- /* This runs in tcpip_thread, so we don't need to lock against rx packets */
- /* Delete and drain the recvmbox. */
- if (sys_mbox_valid(&conn->recvmbox)) {
- 802e6fc: b993 cbnz r3, 802e724 <netconn_drain+0x2e>
- 802e6fe: e01e b.n 802e73e <netconn_drain+0x48>
- while (sys_mbox_tryfetch(&conn->recvmbox, &mem) != SYS_MBOX_EMPTY) {
- #if LWIP_TCP
- if (conn->type == NETCONN_TCP) {
- 802e700: 7823 ldrb r3, [r4, #0]
- 802e702: 2b10 cmp r3, #16
- 802e704: d10a bne.n 802e71c <netconn_drain+0x26>
- if(mem != NULL) {
- 802e706: 9d01 ldr r5, [sp, #4]
- 802e708: b175 cbz r5, 802e728 <netconn_drain+0x32>
- p = (struct pbuf*)mem;
- /* pcb might be set to NULL already by err_tcp() */
- if (conn->pcb.tcp != NULL) {
- 802e70a: 6860 ldr r0, [r4, #4]
- 802e70c: b110 cbz r0, 802e714 <netconn_drain+0x1e>
- tcp_recved(conn->pcb.tcp, p->tot_len);
- 802e70e: 8929 ldrh r1, [r5, #8]
- 802e710: f001 fe90 bl 8030434 <tcp_recved>
- }
- pbuf_free(p);
- 802e714: 4628 mov r0, r5
- 802e716: f001 fb79 bl 802fe0c <pbuf_free>
- 802e71a: e005 b.n 802e728 <netconn_drain+0x32>
- }
- } else
- #endif /* LWIP_TCP */
- {
- netbuf_delete((struct netbuf *)mem);
- 802e71c: 9801 ldr r0, [sp, #4]
- 802e71e: f000 f960 bl 802e9e2 <netbuf_delete>
- 802e722: e001 b.n 802e728 <netconn_drain+0x32>
- /* This runs in tcpip_thread, so we don't need to lock against rx packets */
- /* Delete and drain the recvmbox. */
- if (sys_mbox_valid(&conn->recvmbox)) {
- while (sys_mbox_tryfetch(&conn->recvmbox, &mem) != SYS_MBOX_EMPTY) {
- 802e724: f100 0610 add.w r6, r0, #16
- 802e728: 4630 mov r0, r6
- 802e72a: a901 add r1, sp, #4
- 802e72c: f009 f924 bl 8037978 <sys_arch_mbox_tryfetch>
- 802e730: 3001 adds r0, #1
- 802e732: d1e5 bne.n 802e700 <netconn_drain+0xa>
- #endif /* LWIP_TCP */
- {
- netbuf_delete((struct netbuf *)mem);
- }
- }
- sys_mbox_free(&conn->recvmbox);
- 802e734: 4630 mov r0, r6
- 802e736: f009 f8b1 bl 803789c <sys_mbox_free>
- sys_mbox_set_invalid(&conn->recvmbox);
- 802e73a: 2300 movs r3, #0
- 802e73c: 6123 str r3, [r4, #16]
- }
- /* Delete and drain the acceptmbox. */
- #if LWIP_TCP
- if (sys_mbox_valid(&conn->acceptmbox)) {
- 802e73e: 6963 ldr r3, [r4, #20]
- 802e740: b96b cbnz r3, 802e75e <netconn_drain+0x68>
- 802e742: e01a b.n 802e77a <netconn_drain+0x84>
- while (sys_mbox_tryfetch(&conn->acceptmbox, &mem) != SYS_MBOX_EMPTY) {
- struct netconn *newconn = (struct netconn *)mem;
- 802e744: 9d01 ldr r5, [sp, #4]
- /* pcb might be set to NULL already by err_tcp() */
- if (conn->pcb.tcp != NULL) {
- tcp_accepted(conn->pcb.tcp);
- }
- /* drain recvmbox */
- netconn_drain(newconn);
- 802e746: 4628 mov r0, r5
- 802e748: f7ff ffd5 bl 802e6f6 <netconn_drain>
- if (newconn->pcb.tcp != NULL) {
- 802e74c: 6868 ldr r0, [r5, #4]
- 802e74e: b110 cbz r0, 802e756 <netconn_drain+0x60>
- tcp_abort(newconn->pcb.tcp);
- 802e750: f002 f88e bl 8030870 <tcp_abort>
- newconn->pcb.tcp = NULL;
- 802e754: 606f str r7, [r5, #4]
- }
- netconn_free(newconn);
- 802e756: 4628 mov r0, r5
- 802e758: f7ff ffc0 bl 802e6dc <netconn_free>
- 802e75c: e002 b.n 802e764 <netconn_drain+0x6e>
- }
- /* Delete and drain the acceptmbox. */
- #if LWIP_TCP
- if (sys_mbox_valid(&conn->acceptmbox)) {
- while (sys_mbox_tryfetch(&conn->acceptmbox, &mem) != SYS_MBOX_EMPTY) {
- 802e75e: f104 0614 add.w r6, r4, #20
- }
- /* drain recvmbox */
- netconn_drain(newconn);
- if (newconn->pcb.tcp != NULL) {
- tcp_abort(newconn->pcb.tcp);
- newconn->pcb.tcp = NULL;
- 802e762: 2700 movs r7, #0
- }
- /* Delete and drain the acceptmbox. */
- #if LWIP_TCP
- if (sys_mbox_valid(&conn->acceptmbox)) {
- while (sys_mbox_tryfetch(&conn->acceptmbox, &mem) != SYS_MBOX_EMPTY) {
- 802e764: 4630 mov r0, r6
- 802e766: a901 add r1, sp, #4
- 802e768: f009 f906 bl 8037978 <sys_arch_mbox_tryfetch>
- 802e76c: 3001 adds r0, #1
- 802e76e: d1e9 bne.n 802e744 <netconn_drain+0x4e>
- tcp_abort(newconn->pcb.tcp);
- newconn->pcb.tcp = NULL;
- }
- netconn_free(newconn);
- }
- sys_mbox_free(&conn->acceptmbox);
- 802e770: 4630 mov r0, r6
- 802e772: f009 f893 bl 803789c <sys_mbox_free>
- sys_mbox_set_invalid(&conn->acceptmbox);
- 802e776: 2300 movs r3, #0
- 802e778: 6163 str r3, [r4, #20]
- }
- #endif /* LWIP_TCP */
- }
- 802e77a: bdfe pop {r1, r2, r3, r4, r5, r6, r7, pc}
- 0802e77c <do_delconn>:
- *
- * @param msg the api_msg_msg pointing to the connection
- */
- void
- do_delconn(struct api_msg_msg *msg)
- {
- 802e77c: b510 push {r4, lr}
- 802e77e: 4604 mov r4, r0
- /* @todo TCP: abort running write/connect? */
- if ((msg->conn->state != NETCONN_NONE) &&
- 802e780: 6800 ldr r0, [r0, #0]
- 802e782: 7843 ldrb r3, [r0, #1]
- 802e784: 2b03 cmp r3, #3
- 802e786: d805 bhi.n 802e794 <do_delconn+0x18>
- 802e788: f990 3001 ldrsb.w r3, [r0, #1]
- 802e78c: f04f 4230 mov.w r2, #2952790016 ; 0xb0000000
- 802e790: 409a lsls r2, r3
- 802e792: d402 bmi.n 802e79a <do_delconn+0x1e>
- (msg->conn->state != NETCONN_LISTEN) &&
- (msg->conn->state != NETCONN_CONNECT)) {
- /* this only happens for TCP netconns */
- LWIP_ASSERT("msg->conn->type == NETCONN_TCP", msg->conn->type == NETCONN_TCP);
- msg->err = ERR_INPROGRESS;
- 802e794: 23fb movs r3, #251 ; 0xfb
- 802e796: 7123 strb r3, [r4, #4]
- 802e798: e030 b.n 802e7fc <do_delconn+0x80>
- } else {
- LWIP_ASSERT("blocking connect in progress",
- (msg->conn->state != NETCONN_CONNECT) || IN_NONBLOCKING_CONNECT(msg->conn));
- /* Drain and delete mboxes */
- netconn_drain(msg->conn);
- 802e79a: f7ff ffac bl 802e6f6 <netconn_drain>
- if (msg->conn->pcb.tcp != NULL) {
- 802e79e: 6823 ldr r3, [r4, #0]
- 802e7a0: 6858 ldr r0, [r3, #4]
- 802e7a2: b1f8 cbz r0, 802e7e4 <do_delconn+0x68>
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
- 802e7a4: 781a ldrb r2, [r3, #0]
- 802e7a6: f002 02f0 and.w r2, r2, #240 ; 0xf0
- 802e7aa: 2a20 cmp r2, #32
- 802e7ac: d007 beq.n 802e7be <do_delconn+0x42>
- 802e7ae: 2a40 cmp r2, #64 ; 0x40
- 802e7b0: d002 beq.n 802e7b8 <do_delconn+0x3c>
- 802e7b2: 2a10 cmp r2, #16
- 802e7b4: d113 bne.n 802e7de <do_delconn+0x62>
- 802e7b6: e008 b.n 802e7ca <do_delconn+0x4e>
- #if LWIP_RAW
- case NETCONN_RAW:
- raw_remove(msg->conn->pcb.raw);
- 802e7b8: f001 fd3e bl 8030238 <raw_remove>
- break;
- 802e7bc: e00f b.n 802e7de <do_delconn+0x62>
- #endif /* LWIP_RAW */
- #if LWIP_UDP
- case NETCONN_UDP:
- msg->conn->pcb.udp->recv_arg = NULL;
- 802e7be: 2200 movs r2, #0
- 802e7c0: 61c2 str r2, [r0, #28]
- udp_remove(msg->conn->pcb.udp);
- 802e7c2: 6858 ldr r0, [r3, #4]
- 802e7c4: f004 f990 bl 8032ae8 <udp_remove>
- break;
- 802e7c8: e009 b.n 802e7de <do_delconn+0x62>
- #endif /* LWIP_UDP */
- #if LWIP_TCP
- case NETCONN_TCP:
- LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL &&
- msg->conn->write_offset == 0);
- msg->conn->state = NETCONN_CLOSE;
- 802e7ca: 2204 movs r2, #4
- 802e7cc: 705a strb r2, [r3, #1]
- msg->msg.sd.shut = NETCONN_SHUT_RDWR;
- msg->conn->current_msg = msg;
- do_close_internal(msg->conn);
- 802e7ce: 4618 mov r0, r3
- #if LWIP_TCP
- case NETCONN_TCP:
- LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL &&
- msg->conn->write_offset == 0);
- msg->conn->state = NETCONN_CLOSE;
- msg->msg.sd.shut = NETCONN_SHUT_RDWR;
- 802e7d0: 2203 movs r2, #3
- 802e7d2: 7222 strb r2, [r4, #8]
- msg->conn->current_msg = msg;
- 802e7d4: 625c str r4, [r3, #36] ; 0x24
- API_EVENT(msg->conn, NETCONN_EVT_SENDPLUS, 0);
- }
- if (sys_sem_valid(&msg->conn->op_completed)) {
- sys_sem_signal(&msg->conn->op_completed);
- }
- }
- 802e7d6: e8bd 4010 ldmia.w sp!, {r4, lr}
- LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL &&
- msg->conn->write_offset == 0);
- msg->conn->state = NETCONN_CLOSE;
- msg->msg.sd.shut = NETCONN_SHUT_RDWR;
- msg->conn->current_msg = msg;
- do_close_internal(msg->conn);
- 802e7da: f7ff bca5 b.w 802e128 <do_close_internal>
- return;
- #endif /* LWIP_TCP */
- default:
- break;
- }
- msg->conn->pcb.tcp = NULL;
- 802e7de: 6823 ldr r3, [r4, #0]
- 802e7e0: 2200 movs r2, #0
- 802e7e2: 605a str r2, [r3, #4]
- }
- /* tcp netconns don't come here! */
- /* @todo: this lets select make the socket readable and writable,
- which is wrong! errfd instead? */
- API_EVENT(msg->conn, NETCONN_EVT_RCVPLUS, 0);
- 802e7e4: 6820 ldr r0, [r4, #0]
- 802e7e6: 6a83 ldr r3, [r0, #40] ; 0x28
- 802e7e8: b113 cbz r3, 802e7f0 <do_delconn+0x74>
- 802e7ea: 2100 movs r1, #0
- 802e7ec: 460a mov r2, r1
- 802e7ee: 4798 blx r3
- API_EVENT(msg->conn, NETCONN_EVT_SENDPLUS, 0);
- 802e7f0: 6820 ldr r0, [r4, #0]
- 802e7f2: 6a83 ldr r3, [r0, #40] ; 0x28
- 802e7f4: b113 cbz r3, 802e7fc <do_delconn+0x80>
- 802e7f6: 2102 movs r1, #2
- 802e7f8: 2200 movs r2, #0
- 802e7fa: 4798 blx r3
- }
- if (sys_sem_valid(&msg->conn->op_completed)) {
- 802e7fc: 6820 ldr r0, [r4, #0]
- 802e7fe: 68c3 ldr r3, [r0, #12]
- 802e800: b123 cbz r3, 802e80c <do_delconn+0x90>
- sys_sem_signal(&msg->conn->op_completed);
- 802e802: 300c adds r0, #12
- }
- }
- 802e804: e8bd 4010 ldmia.w sp!, {r4, lr}
- which is wrong! errfd instead? */
- API_EVENT(msg->conn, NETCONN_EVT_RCVPLUS, 0);
- API_EVENT(msg->conn, NETCONN_EVT_SENDPLUS, 0);
- }
- if (sys_sem_valid(&msg->conn->op_completed)) {
- sys_sem_signal(&msg->conn->op_completed);
- 802e808: f009 b92e b.w 8037a68 <sys_sem_signal>
- 802e80c: bd10 pop {r4, pc}
- 0802e80e <do_bind>:
- * @param msg the api_msg_msg pointing to the connection and containing
- * the IP address and port to bind to
- */
- void
- do_bind(struct api_msg_msg *msg)
- {
- 802e80e: b510 push {r4, lr}
- if (ERR_IS_FATAL(msg->conn->last_err)) {
- 802e810: 6803 ldr r3, [r0, #0]
- 802e812: 7a1a ldrb r2, [r3, #8]
- 802e814: b251 sxtb r1, r2
- 802e816: 3109 adds r1, #9
- * @param msg the api_msg_msg pointing to the connection and containing
- * the IP address and port to bind to
- */
- void
- do_bind(struct api_msg_msg *msg)
- {
- 802e818: 4604 mov r4, r0
- if (ERR_IS_FATAL(msg->conn->last_err)) {
- 802e81a: da01 bge.n 802e820 <do_bind+0x12>
- msg->err = msg->conn->last_err;
- 802e81c: 7102 strb r2, [r0, #4]
- 802e81e: e01b b.n 802e858 <do_bind+0x4a>
- } else {
- msg->err = ERR_VAL;
- 802e820: 22fa movs r2, #250 ; 0xfa
- 802e822: 7102 strb r2, [r0, #4]
- if (msg->conn->pcb.tcp != NULL) {
- 802e824: 6858 ldr r0, [r3, #4]
- 802e826: b1b8 cbz r0, 802e858 <do_bind+0x4a>
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
- 802e828: 781b ldrb r3, [r3, #0]
- 802e82a: f003 03f0 and.w r3, r3, #240 ; 0xf0
- 802e82e: 2b20 cmp r3, #32
- 802e830: d008 beq.n 802e844 <do_bind+0x36>
- 802e832: 2b40 cmp r3, #64 ; 0x40
- 802e834: d002 beq.n 802e83c <do_bind+0x2e>
- 802e836: 2b10 cmp r3, #16
- 802e838: d10e bne.n 802e858 <do_bind+0x4a>
- 802e83a: e008 b.n 802e84e <do_bind+0x40>
- #if LWIP_RAW
- case NETCONN_RAW:
- msg->err = raw_bind(msg->conn->pcb.raw, msg->msg.bc.ipaddr);
- 802e83c: 68a1 ldr r1, [r4, #8]
- 802e83e: f001 fca5 bl 803018c <raw_bind>
- 802e842: e008 b.n 802e856 <do_bind+0x48>
- break;
- #endif /* LWIP_RAW */
- #if LWIP_UDP
- case NETCONN_UDP:
- msg->err = udp_bind(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
- 802e844: 68a1 ldr r1, [r4, #8]
- 802e846: 89a2 ldrh r2, [r4, #12]
- 802e848: f004 f852 bl 80328f0 <udp_bind>
- 802e84c: e003 b.n 802e856 <do_bind+0x48>
- break;
- #endif /* LWIP_UDP */
- #if LWIP_TCP
- case NETCONN_TCP:
- msg->err = tcp_bind(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, msg->msg.bc.port);
- 802e84e: 68a1 ldr r1, [r4, #8]
- 802e850: 89a2 ldrh r2, [r4, #12]
- 802e852: f001 fd4f bl 80302f4 <tcp_bind>
- 802e856: 7120 strb r0, [r4, #4]
- default:
- break;
- }
- }
- }
- TCPIP_APIMSG_ACK(msg);
- 802e858: 6820 ldr r0, [r4, #0]
- 802e85a: 300c adds r0, #12
- }
- 802e85c: e8bd 4010 ldmia.w sp!, {r4, lr}
- default:
- break;
- }
- }
- }
- TCPIP_APIMSG_ACK(msg);
- 802e860: f009 b902 b.w 8037a68 <sys_sem_signal>
- 0802e864 <do_connect>:
- * @param msg the api_msg_msg pointing to the connection and containing
- * the IP address and port to connect to
- */
- void
- do_connect(struct api_msg_msg *msg)
- {
- 802e864: b510 push {r4, lr}
- if (msg->conn->pcb.tcp == NULL) {
- 802e866: 6803 ldr r3, [r0, #0]
- * @param msg the api_msg_msg pointing to the connection and containing
- * the IP address and port to connect to
- */
- void
- do_connect(struct api_msg_msg *msg)
- {
- 802e868: 4604 mov r4, r0
- if (msg->conn->pcb.tcp == NULL) {
- 802e86a: 6858 ldr r0, [r3, #4]
- 802e86c: b908 cbnz r0, 802e872 <do_connect+0xe>
- /* This may happen when calling netconn_connect() a second time */
- msg->err = ERR_CLSD;
- 802e86e: 23f4 movs r3, #244 ; 0xf4
- 802e870: e037 b.n 802e8e2 <do_connect+0x7e>
- } else {
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
- 802e872: 781a ldrb r2, [r3, #0]
- 802e874: f002 02f0 and.w r2, r2, #240 ; 0xf0
- 802e878: 2a20 cmp r2, #32
- 802e87a: d008 beq.n 802e88e <do_connect+0x2a>
- 802e87c: 2a40 cmp r2, #64 ; 0x40
- 802e87e: d002 beq.n 802e886 <do_connect+0x22>
- 802e880: 2a10 cmp r2, #16
- 802e882: d12d bne.n 802e8e0 <do_connect+0x7c>
- 802e884: e009 b.n 802e89a <do_connect+0x36>
- #if LWIP_RAW
- case NETCONN_RAW:
- msg->err = raw_connect(msg->conn->pcb.raw, msg->msg.bc.ipaddr);
- 802e886: 68a1 ldr r1, [r4, #8]
- 802e888: f001 fc85 bl 8030196 <raw_connect>
- 802e88c: e003 b.n 802e896 <do_connect+0x32>
- break;
- #endif /* LWIP_RAW */
- #if LWIP_UDP
- case NETCONN_UDP:
- msg->err = udp_connect(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
- 802e88e: 68a1 ldr r1, [r4, #8]
- 802e890: 89a2 ldrh r2, [r4, #12]
- 802e892: f004 f8f7 bl 8032a84 <udp_connect>
- 802e896: 7120 strb r0, [r4, #4]
- break;
- 802e898: e024 b.n 802e8e4 <do_connect+0x80>
- #endif /* LWIP_UDP */
- #if LWIP_TCP
- case NETCONN_TCP:
- /* Prevent connect while doing any other action. */
- if (msg->conn->state != NETCONN_NONE) {
- 802e89a: 785a ldrb r2, [r3, #1]
- 802e89c: b10a cbz r2, 802e8a2 <do_connect+0x3e>
- msg->err = ERR_ISCONN;
- 802e89e: 23f7 movs r3, #247 ; 0xf7
- 802e8a0: e01f b.n 802e8e2 <do_connect+0x7e>
- } else {
- setup_tcp(msg->conn);
- 802e8a2: 4618 mov r0, r3
- 802e8a4: f7ff fc1e bl 802e0e4 <setup_tcp>
- msg->err = tcp_connect(msg->conn->pcb.tcp, msg->msg.bc.ipaddr,
- 802e8a8: 6823 ldr r3, [r4, #0]
- 802e8aa: 68a1 ldr r1, [r4, #8]
- 802e8ac: 6858 ldr r0, [r3, #4]
- 802e8ae: 89a2 ldrh r2, [r4, #12]
- 802e8b0: 4b0f ldr r3, [pc, #60] ; (802e8f0 <do_connect+0x8c>)
- 802e8b2: f002 f9f5 bl 8030ca0 <tcp_connect>
- 802e8b6: 7120 strb r0, [r4, #4]
- msg->msg.bc.port, do_connected);
- if (msg->err == ERR_OK) {
- 802e8b8: b9a0 cbnz r0, 802e8e4 <do_connect+0x80>
- u8_t non_blocking = netconn_is_nonblocking(msg->conn);
- 802e8ba: 6823 ldr r3, [r4, #0]
- 802e8bc: 7f1a ldrb r2, [r3, #28]
- msg->conn->state = NETCONN_CONNECT;
- 802e8be: 2103 movs r1, #3
- 802e8c0: 7059 strb r1, [r3, #1]
- SET_NONBLOCKING_CONNECT(msg->conn, non_blocking);
- 802e8c2: f002 0102 and.w r1, r2, #2
- 802e8c6: b2c9 uxtb r1, r1
- 802e8c8: b121 cbz r1, 802e8d4 <do_connect+0x70>
- 802e8ca: f042 0204 orr.w r2, r2, #4
- 802e8ce: 771a strb r2, [r3, #28]
- if (non_blocking) {
- msg->err = ERR_INPROGRESS;
- 802e8d0: 23fb movs r3, #251 ; 0xfb
- 802e8d2: e006 b.n 802e8e2 <do_connect+0x7e>
- msg->err = tcp_connect(msg->conn->pcb.tcp, msg->msg.bc.ipaddr,
- msg->msg.bc.port, do_connected);
- if (msg->err == ERR_OK) {
- u8_t non_blocking = netconn_is_nonblocking(msg->conn);
- msg->conn->state = NETCONN_CONNECT;
- SET_NONBLOCKING_CONNECT(msg->conn, non_blocking);
- 802e8d4: f022 0204 bic.w r2, r2, #4
- 802e8d8: 771a strb r2, [r3, #28]
- if (non_blocking) {
- msg->err = ERR_INPROGRESS;
- } else {
- msg->conn->current_msg = msg;
- 802e8da: 6823 ldr r3, [r4, #0]
- 802e8dc: 625c str r4, [r3, #36] ; 0x24
- /* sys_sem_signal() is called from do_connected (or err_tcp()),
- * when the connection is established! */
- return;
- 802e8de: bd10 pop {r4, pc}
- }
- }
- break;
- #endif /* LWIP_TCP */
- default:
- LWIP_ERROR("Invalid netconn type", 0, do{ msg->err = ERR_VAL; }while(0));
- 802e8e0: 23fa movs r3, #250 ; 0xfa
- 802e8e2: 7123 strb r3, [r4, #4]
- break;
- }
- }
- sys_sem_signal(&msg->conn->op_completed);
- 802e8e4: 6820 ldr r0, [r4, #0]
- 802e8e6: 300c adds r0, #12
- }
- 802e8e8: e8bd 4010 ldmia.w sp!, {r4, lr}
- default:
- LWIP_ERROR("Invalid netconn type", 0, do{ msg->err = ERR_VAL; }while(0));
- break;
- }
- }
- sys_sem_signal(&msg->conn->op_completed);
- 802e8ec: f009 b8bc b.w 8037a68 <sys_sem_signal>
- 802e8f0: 0802e211 .word 0x0802e211
- 0802e8f4 <do_disconnect>:
- */
- void
- do_disconnect(struct api_msg_msg *msg)
- {
- #if LWIP_UDP
- if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) {
- 802e8f4: 6803 ldr r3, [r0, #0]
- 802e8f6: 781a ldrb r2, [r3, #0]
- 802e8f8: f002 02f0 and.w r2, r2, #240 ; 0xf0
- 802e8fc: 2a20 cmp r2, #32
- *
- * @param msg the api_msg_msg pointing to the connection to disconnect
- */
- void
- do_disconnect(struct api_msg_msg *msg)
- {
- 802e8fe: b510 push {r4, lr}
- 802e900: 4604 mov r4, r0
- #if LWIP_UDP
- if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) {
- 802e902: d104 bne.n 802e90e <do_disconnect+0x1a>
- udp_disconnect(msg->conn->pcb.udp);
- 802e904: 6858 ldr r0, [r3, #4]
- 802e906: f004 f8e3 bl 8032ad0 <udp_disconnect>
- msg->err = ERR_OK;
- 802e90a: 2300 movs r3, #0
- 802e90c: e000 b.n 802e910 <do_disconnect+0x1c>
- } else
- #endif /* LWIP_UDP */
- {
- msg->err = ERR_VAL;
- 802e90e: 23fa movs r3, #250 ; 0xfa
- }
- TCPIP_APIMSG_ACK(msg);
- 802e910: 6820 ldr r0, [r4, #0]
- udp_disconnect(msg->conn->pcb.udp);
- msg->err = ERR_OK;
- } else
- #endif /* LWIP_UDP */
- {
- msg->err = ERR_VAL;
- 802e912: 7123 strb r3, [r4, #4]
- }
- TCPIP_APIMSG_ACK(msg);
- 802e914: 300c adds r0, #12
- }
- 802e916: e8bd 4010 ldmia.w sp!, {r4, lr}
- } else
- #endif /* LWIP_UDP */
- {
- msg->err = ERR_VAL;
- }
- TCPIP_APIMSG_ACK(msg);
- 802e91a: f009 b8a5 b.w 8037a68 <sys_sem_signal>
- 0802e91e <do_send>:
- *
- * @param msg the api_msg_msg pointing to the connection
- */
- void
- do_send(struct api_msg_msg *msg)
- {
- 802e91e: b510 push {r4, lr}
- if (ERR_IS_FATAL(msg->conn->last_err)) {
- 802e920: 6803 ldr r3, [r0, #0]
- 802e922: 7a1a ldrb r2, [r3, #8]
- 802e924: b251 sxtb r1, r2
- 802e926: 3109 adds r1, #9
- *
- * @param msg the api_msg_msg pointing to the connection
- */
- void
- do_send(struct api_msg_msg *msg)
- {
- 802e928: 4604 mov r4, r0
- if (ERR_IS_FATAL(msg->conn->last_err)) {
- 802e92a: da01 bge.n 802e930 <do_send+0x12>
- msg->err = msg->conn->last_err;
- 802e92c: 7102 strb r2, [r0, #4]
- 802e92e: e027 b.n 802e980 <do_send+0x62>
- } else {
- msg->err = ERR_CONN;
- 802e930: 22f3 movs r2, #243 ; 0xf3
- 802e932: 7102 strb r2, [r0, #4]
- if (msg->conn->pcb.tcp != NULL) {
- 802e934: 6858 ldr r0, [r3, #4]
- 802e936: b318 cbz r0, 802e980 <do_send+0x62>
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
- 802e938: 781b ldrb r3, [r3, #0]
- 802e93a: f003 03f0 and.w r3, r3, #240 ; 0xf0
- 802e93e: 2b20 cmp r3, #32
- 802e940: d00f beq.n 802e962 <do_send+0x44>
- 802e942: 2b40 cmp r3, #64 ; 0x40
- 802e944: d11c bne.n 802e980 <do_send+0x62>
- #if LWIP_RAW
- case NETCONN_RAW:
- if (ip_addr_isany(&msg->msg.b->addr)) {
- 802e946: 68a3 ldr r3, [r4, #8]
- 802e948: f113 0208 adds.w r2, r3, #8
- 802e94c: d001 beq.n 802e952 <do_send+0x34>
- 802e94e: 6899 ldr r1, [r3, #8]
- 802e950: b919 cbnz r1, 802e95a <do_send+0x3c>
- msg->err = raw_send(msg->conn->pcb.raw, msg->msg.b->p);
- 802e952: 6819 ldr r1, [r3, #0]
- 802e954: f001 fc6c bl 8030230 <raw_send>
- 802e958: e011 b.n 802e97e <do_send+0x60>
- } else {
- msg->err = raw_sendto(msg->conn->pcb.raw, msg->msg.b->p, &msg->msg.b->addr);
- 802e95a: 6819 ldr r1, [r3, #0]
- 802e95c: f001 fc23 bl 80301a6 <raw_sendto>
- 802e960: e00d b.n 802e97e <do_send+0x60>
- msg->err = udp_sendto_chksum(msg->conn->pcb.udp, msg->msg.b->p,
- &msg->msg.b->addr, msg->msg.b->port,
- msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum);
- }
- #else /* LWIP_CHECKSUM_ON_COPY */
- if (ip_addr_isany(&msg->msg.b->addr)) {
- 802e962: 68a3 ldr r3, [r4, #8]
- 802e964: f113 0208 adds.w r2, r3, #8
- 802e968: d001 beq.n 802e96e <do_send+0x50>
- 802e96a: 6899 ldr r1, [r3, #8]
- 802e96c: b919 cbnz r1, 802e976 <do_send+0x58>
- msg->err = udp_send(msg->conn->pcb.udp, msg->msg.b->p);
- 802e96e: 6819 ldr r1, [r3, #0]
- 802e970: f004 f883 bl 8032a7a <udp_send>
- 802e974: e003 b.n 802e97e <do_send+0x60>
- } else {
- msg->err = udp_sendto(msg->conn->pcb.udp, msg->msg.b->p, &msg->msg.b->addr, msg->msg.b->port);
- 802e976: 6819 ldr r1, [r3, #0]
- 802e978: 899b ldrh r3, [r3, #12]
- 802e97a: f004 f86a bl 8032a52 <udp_sendto>
- 802e97e: 7120 strb r0, [r4, #4]
- default:
- break;
- }
- }
- }
- TCPIP_APIMSG_ACK(msg);
- 802e980: 6820 ldr r0, [r4, #0]
- 802e982: 300c adds r0, #12
- }
- 802e984: e8bd 4010 ldmia.w sp!, {r4, lr}
- default:
- break;
- }
- }
- }
- TCPIP_APIMSG_ACK(msg);
- 802e988: f009 b86e b.w 8037a68 <sys_sem_signal>
- 0802e98c <do_recv>:
- *
- * @param msg the api_msg_msg pointing to the connection
- */
- void
- do_recv(struct api_msg_msg *msg)
- {
- 802e98c: b5f8 push {r3, r4, r5, r6, r7, lr}
- msg->err = ERR_OK;
- 802e98e: 2300 movs r3, #0
- 802e990: 7103 strb r3, [r0, #4]
- if (msg->conn->pcb.tcp != NULL) {
- 802e992: 6803 ldr r3, [r0, #0]
- 802e994: 685a ldr r2, [r3, #4]
- *
- * @param msg the api_msg_msg pointing to the connection
- */
- void
- do_recv(struct api_msg_msg *msg)
- {
- 802e996: 4604 mov r4, r0
- msg->err = ERR_OK;
- if (msg->conn->pcb.tcp != NULL) {
- 802e998: b92a cbnz r2, 802e9a6 <do_recv+0x1a>
- remaining -= recved;
- }while(remaining != 0);
- }
- }
- }
- TCPIP_APIMSG_ACK(msg);
- 802e99a: 6820 ldr r0, [r4, #0]
- 802e99c: 300c adds r0, #12
- }
- 802e99e: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr}
- remaining -= recved;
- }while(remaining != 0);
- }
- }
- }
- TCPIP_APIMSG_ACK(msg);
- 802e9a2: f009 b861 b.w 8037a68 <sys_sem_signal>
- void
- do_recv(struct api_msg_msg *msg)
- {
- msg->err = ERR_OK;
- if (msg->conn->pcb.tcp != NULL) {
- if (msg->conn->type == NETCONN_TCP) {
- 802e9a6: 781b ldrb r3, [r3, #0]
- 802e9a8: 2b10 cmp r3, #16
- 802e9aa: d1f6 bne.n 802e99a <do_recv+0xe>
- if (msg->conn->pcb.tcp->state == LISTEN) {
- tcp_accepted(msg->conn->pcb.tcp);
- } else
- #endif /* TCP_LISTEN_BACKLOG */
- {
- u32_t remaining = msg->msg.r.len;
- 802e9ac: 6885 ldr r5, [r0, #8]
- do {
- u16_t recved = (remaining > 0xffff) ? 0xffff : (u16_t)remaining;
- 802e9ae: f64f 77ff movw r7, #65535 ; 0xffff
- 802e9b2: 42bd cmp r5, r7
- tcp_recved(msg->conn->pcb.tcp, recved);
- 802e9b4: 6823 ldr r3, [r4, #0]
- } else
- #endif /* TCP_LISTEN_BACKLOG */
- {
- u32_t remaining = msg->msg.r.len;
- do {
- u16_t recved = (remaining > 0xffff) ? 0xffff : (u16_t)remaining;
- 802e9b6: bf94 ite ls
- 802e9b8: b2ae uxthls r6, r5
- 802e9ba: f64f 76ff movwhi r6, #65535 ; 0xffff
- tcp_recved(msg->conn->pcb.tcp, recved);
- 802e9be: 6858 ldr r0, [r3, #4]
- 802e9c0: 4631 mov r1, r6
- 802e9c2: f001 fd37 bl 8030434 <tcp_recved>
- remaining -= recved;
- }while(remaining != 0);
- 802e9c6: 1bad subs r5, r5, r6
- 802e9c8: d1f3 bne.n 802e9b2 <do_recv+0x26>
- 802e9ca: e7e6 b.n 802e99a <do_recv+0xe>
- 0802e9cc <netbuf_new>:
- * @return a pointer to a new netbuf
- * NULL on lack of memory
- */
- struct
- netbuf *netbuf_new(void)
- {
- 802e9cc: b508 push {r3, lr}
- struct netbuf *buf;
- buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
- 802e9ce: 2005 movs r0, #5
- 802e9d0: f001 f8fc bl 802fbcc <memp_malloc>
- if (buf != NULL) {
- 802e9d4: b120 cbz r0, 802e9e0 <netbuf_new+0x14>
- buf->p = NULL;
- 802e9d6: 2300 movs r3, #0
- 802e9d8: 6003 str r3, [r0, #0]
- buf->ptr = NULL;
- 802e9da: 6043 str r3, [r0, #4]
- ip_addr_set_any(&buf->addr);
- 802e9dc: 6083 str r3, [r0, #8]
- buf->port = 0;
- 802e9de: 8183 strh r3, [r0, #12]
- #endif /* LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY */
- return buf;
- } else {
- return NULL;
- }
- }
- 802e9e0: bd08 pop {r3, pc}
- 0802e9e2 <netbuf_delete>:
- *
- * @param buf pointer to a netbuf allocated by netbuf_new()
- */
- void
- netbuf_delete(struct netbuf *buf)
- {
- 802e9e2: b510 push {r4, lr}
- if (buf != NULL) {
- 802e9e4: 4604 mov r4, r0
- 802e9e6: b160 cbz r0, 802ea02 <netbuf_delete+0x20>
- if (buf->p != NULL) {
- 802e9e8: 6800 ldr r0, [r0, #0]
- 802e9ea: b120 cbz r0, 802e9f6 <netbuf_delete+0x14>
- pbuf_free(buf->p);
- 802e9ec: f001 fa0e bl 802fe0c <pbuf_free>
- buf->p = buf->ptr = NULL;
- 802e9f0: 2300 movs r3, #0
- 802e9f2: 6063 str r3, [r4, #4]
- 802e9f4: 6023 str r3, [r4, #0]
- }
- memp_free(MEMP_NETBUF, buf);
- 802e9f6: 2005 movs r0, #5
- 802e9f8: 4621 mov r1, r4
- }
- }
- 802e9fa: e8bd 4010 ldmia.w sp!, {r4, lr}
- if (buf != NULL) {
- if (buf->p != NULL) {
- pbuf_free(buf->p);
- buf->p = buf->ptr = NULL;
- }
- memp_free(MEMP_NETBUF, buf);
- 802e9fe: f001 b8fb b.w 802fbf8 <memp_free>
- 802ea02: bd10 pop {r4, pc}
- 0802ea04 <netbuf_alloc>:
- * @return pointer to the allocated memory
- * NULL if no memory could be allocated
- */
- void *
- netbuf_alloc(struct netbuf *buf, u16_t size)
- {
- 802ea04: b538 push {r3, r4, r5, lr}
- 802ea06: 460d mov r5, r1
- LWIP_ERROR("netbuf_alloc: invalid buf", (buf != NULL), return NULL;);
- 802ea08: 4604 mov r4, r0
- 802ea0a: b908 cbnz r0, 802ea10 <netbuf_alloc+0xc>
- 802ea0c: 2000 movs r0, #0
- 802ea0e: bd38 pop {r3, r4, r5, pc}
- /* Deallocate any previously allocated memory. */
- if (buf->p != NULL) {
- 802ea10: 6800 ldr r0, [r0, #0]
- 802ea12: b108 cbz r0, 802ea18 <netbuf_alloc+0x14>
- pbuf_free(buf->p);
- 802ea14: f001 f9fa bl 802fe0c <pbuf_free>
- }
- buf->p = pbuf_alloc(PBUF_TRANSPORT, size, PBUF_RAM);
- 802ea18: 2000 movs r0, #0
- 802ea1a: 4629 mov r1, r5
- 802ea1c: 4602 mov r2, r0
- 802ea1e: f001 fa42 bl 802fea6 <pbuf_alloc>
- 802ea22: 6020 str r0, [r4, #0]
- if (buf->p == NULL) {
- 802ea24: 2800 cmp r0, #0
- 802ea26: d0f1 beq.n 802ea0c <netbuf_alloc+0x8>
- return NULL;
- }
- LWIP_ASSERT("check that first pbuf can hold size",
- (buf->p->len >= size));
- buf->ptr = buf->p;
- 802ea28: 6060 str r0, [r4, #4]
- return buf->p->payload;
- 802ea2a: 6840 ldr r0, [r0, #4]
- }
- 802ea2c: bd38 pop {r3, r4, r5, pc}
- 0802ea2e <netbuf_data>:
- * ERR_BUF on error.
- */
- err_t
- netbuf_data(struct netbuf *buf, void **dataptr, u16_t *len)
- {
- LWIP_ERROR("netbuf_data: invalid buf", (buf != NULL), return ERR_ARG;);
- 802ea2e: b150 cbz r0, 802ea46 <netbuf_data+0x18>
- LWIP_ERROR("netbuf_data: invalid dataptr", (dataptr != NULL), return ERR_ARG;);
- 802ea30: b149 cbz r1, 802ea46 <netbuf_data+0x18>
- LWIP_ERROR("netbuf_data: invalid len", (len != NULL), return ERR_ARG;);
- 802ea32: b142 cbz r2, 802ea46 <netbuf_data+0x18>
- if (buf->ptr == NULL) {
- 802ea34: 6843 ldr r3, [r0, #4]
- 802ea36: b143 cbz r3, 802ea4a <netbuf_data+0x1c>
- return ERR_BUF;
- }
- *dataptr = buf->ptr->payload;
- 802ea38: 685b ldr r3, [r3, #4]
- 802ea3a: 600b str r3, [r1, #0]
- *len = buf->ptr->len;
- 802ea3c: 6843 ldr r3, [r0, #4]
- 802ea3e: 895b ldrh r3, [r3, #10]
- return ERR_OK;
- 802ea40: 2000 movs r0, #0
- if (buf->ptr == NULL) {
- return ERR_BUF;
- }
- *dataptr = buf->ptr->payload;
- *len = buf->ptr->len;
- 802ea42: 8013 strh r3, [r2, #0]
- return ERR_OK;
- 802ea44: e002 b.n 802ea4c <netbuf_data+0x1e>
- * ERR_BUF on error.
- */
- err_t
- netbuf_data(struct netbuf *buf, void **dataptr, u16_t *len)
- {
- LWIP_ERROR("netbuf_data: invalid buf", (buf != NULL), return ERR_ARG;);
- 802ea46: 20f2 movs r0, #242 ; 0xf2
- 802ea48: e000 b.n 802ea4c <netbuf_data+0x1e>
- LWIP_ERROR("netbuf_data: invalid dataptr", (dataptr != NULL), return ERR_ARG;);
- LWIP_ERROR("netbuf_data: invalid len", (len != NULL), return ERR_ARG;);
- if (buf->ptr == NULL) {
- return ERR_BUF;
- 802ea4a: 20fe movs r0, #254 ; 0xfe
- }
- *dataptr = buf->ptr->payload;
- *len = buf->ptr->len;
- return ERR_OK;
- }
- 802ea4c: b240 sxtb r0, r0
- 802ea4e: 4770 bx lr
- 0802ea50 <tcpip_thread>:
- tcpip_thread(void *arg)
- {
- struct tcpip_msg *msg;
- LWIP_UNUSED_ARG(arg);
- if (tcpip_init_done != NULL) {
- 802ea50: 4b1e ldr r3, [pc, #120] ; (802eacc <tcpip_thread+0x7c>)
- 802ea52: 681b ldr r3, [r3, #0]
- *
- * @param arg unused argument
- */
- static void
- tcpip_thread(void *arg)
- {
- 802ea54: b507 push {r0, r1, r2, lr}
- struct tcpip_msg *msg;
- LWIP_UNUSED_ARG(arg);
- if (tcpip_init_done != NULL) {
- 802ea56: b113 cbz r3, 802ea5e <tcpip_thread+0xe>
- tcpip_init_done(tcpip_init_done_arg);
- 802ea58: 4a1d ldr r2, [pc, #116] ; (802ead0 <tcpip_thread+0x80>)
- 802ea5a: 6810 ldr r0, [r2, #0]
- 802ea5c: 4798 blx r3
- LOCK_TCPIP_CORE();
- while (1) { /* MAIN Loop */
- UNLOCK_TCPIP_CORE();
- LWIP_TCPIP_THREAD_ALIVE();
- /* wait for a message, timeouts are processed while waiting */
- sys_timeouts_mbox_fetch(&mbox, (void **)&msg);
- 802ea5e: 481d ldr r0, [pc, #116] ; (802ead4 <tcpip_thread+0x84>)
- 802ea60: a901 add r1, sp, #4
- 802ea62: f003 fe49 bl 80326f8 <sys_timeouts_mbox_fetch>
- LOCK_TCPIP_CORE();
- switch (msg->type) {
- 802ea66: 9b01 ldr r3, [sp, #4]
- 802ea68: 781a ldrb r2, [r3, #0]
- 802ea6a: 2a05 cmp r2, #5
- 802ea6c: d8f7 bhi.n 802ea5e <tcpip_thread+0xe>
- 802ea6e: e8df f002 tbb [pc, r2]
- 802ea72: 0703 .short 0x0703
- 802ea74: 28201b15 .word 0x28201b15
- #if LWIP_NETCONN
- case TCPIP_MSG_API:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API message %p\n", (void *)msg));
- msg->msg.apimsg->function(&(msg->msg.apimsg->msg));
- 802ea78: 6898 ldr r0, [r3, #8]
- 802ea7a: 6803 ldr r3, [r0, #0]
- 802ea7c: 3004 adds r0, #4
- 802ea7e: e7ed b.n 802ea5c <tcpip_thread+0xc>
- #if !LWIP_TCPIP_CORE_LOCKING_INPUT
- case TCPIP_MSG_INPKT:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PACKET %p\n", (void *)msg));
- #if LWIP_ETHERNET
- if (msg->msg.inp.netif->flags & (NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET)) {
- 802ea80: 68d9 ldr r1, [r3, #12]
- ethernet_input(msg->msg.inp.p, msg->msg.inp.netif);
- 802ea82: 6898 ldr r0, [r3, #8]
- #if !LWIP_TCPIP_CORE_LOCKING_INPUT
- case TCPIP_MSG_INPKT:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PACKET %p\n", (void *)msg));
- #if LWIP_ETHERNET
- if (msg->msg.inp.netif->flags & (NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET)) {
- 802ea84: f891 202d ldrb.w r2, [r1, #45] ; 0x2d
- 802ea88: f012 0f60 tst.w r2, #96 ; 0x60
- 802ea8c: d002 beq.n 802ea94 <tcpip_thread+0x44>
- ethernet_input(msg->msg.inp.p, msg->msg.inp.netif);
- 802ea8e: f008 fcb7 bl 8037400 <ethernet_input>
- 802ea92: e001 b.n 802ea98 <tcpip_thread+0x48>
- } else
- #endif /* LWIP_ETHERNET */
- {
- ip_input(msg->msg.inp.p, msg->msg.inp.netif);
- 802ea94: f004 fa8a bl 8032fac <ip_input>
- }
- memp_free(MEMP_TCPIP_MSG_INPKT, msg);
- 802ea98: 2008 movs r0, #8
- 802ea9a: e00e b.n 802eaba <tcpip_thread+0x6a>
- #endif /* LWIP_NETIF_API */
- #if LWIP_TCPIP_TIMEOUT
- case TCPIP_MSG_TIMEOUT:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: TIMEOUT %p\n", (void *)msg));
- sys_timeout(msg->msg.tmo.msecs, msg->msg.tmo.h, msg->msg.tmo.arg);
- 802ea9c: f103 0008 add.w r0, r3, #8
- 802eaa0: c807 ldmia r0, {r0, r1, r2}
- 802eaa2: f003 fd5b bl 803255c <sys_timeout>
- 802eaa6: e007 b.n 802eab8 <tcpip_thread+0x68>
- memp_free(MEMP_TCPIP_MSG_API, msg);
- break;
- case TCPIP_MSG_UNTIMEOUT:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: UNTIMEOUT %p\n", (void *)msg));
- sys_untimeout(msg->msg.tmo.h, msg->msg.tmo.arg);
- 802eaa8: 68d8 ldr r0, [r3, #12]
- 802eaaa: 6919 ldr r1, [r3, #16]
- 802eaac: f003 fe00 bl 80326b0 <sys_untimeout>
- 802eab0: e002 b.n 802eab8 <tcpip_thread+0x68>
- break;
- #endif /* LWIP_TCPIP_TIMEOUT */
- case TCPIP_MSG_CALLBACK:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK %p\n", (void *)msg));
- msg->msg.cb.function(msg->msg.cb.ctx);
- 802eab2: 689a ldr r2, [r3, #8]
- 802eab4: 68d8 ldr r0, [r3, #12]
- 802eab6: 4790 blx r2
- memp_free(MEMP_TCPIP_MSG_API, msg);
- 802eab8: 2007 movs r0, #7
- 802eaba: 9901 ldr r1, [sp, #4]
- 802eabc: f001 f89c bl 802fbf8 <memp_free>
- break;
- 802eac0: e7cd b.n 802ea5e <tcpip_thread+0xe>
- case TCPIP_MSG_CALLBACK_STATIC:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK_STATIC %p\n", (void *)msg));
- msg->msg.cb.function(msg->msg.cb.ctx);
- 802eac2: 689a ldr r2, [r3, #8]
- 802eac4: 68d8 ldr r0, [r3, #12]
- 802eac6: 4790 blx r2
- break;
- 802eac8: e7c9 b.n 802ea5e <tcpip_thread+0xe>
- 802eaca: bf00 nop
- 802eacc: 20000d40 .word 0x20000d40
- 802ead0: 20000d3c .word 0x20000d3c
- 802ead4: 20000d38 .word 0x20000d38
- 0802ead8 <tcpip_input>:
- * NETIF_FLAG_ETHERNET flags)
- * @param inp the network interface on which the packet was received
- */
- err_t
- tcpip_input(struct pbuf *p, struct netif *inp)
- {
- 802ead8: b5f8 push {r3, r4, r5, r6, r7, lr}
- UNLOCK_TCPIP_CORE();
- return ret;
- #else /* LWIP_TCPIP_CORE_LOCKING_INPUT */
- struct tcpip_msg *msg;
- if (!sys_mbox_valid(&mbox)) {
- 802eada: 4d0e ldr r5, [pc, #56] ; (802eb14 <tcpip_input+0x3c>)
- 802eadc: 682b ldr r3, [r5, #0]
- * NETIF_FLAG_ETHERNET flags)
- * @param inp the network interface on which the packet was received
- */
- err_t
- tcpip_input(struct pbuf *p, struct netif *inp)
- {
- 802eade: 4606 mov r6, r0
- 802eae0: 460f mov r7, r1
- UNLOCK_TCPIP_CORE();
- return ret;
- #else /* LWIP_TCPIP_CORE_LOCKING_INPUT */
- struct tcpip_msg *msg;
- if (!sys_mbox_valid(&mbox)) {
- 802eae2: b193 cbz r3, 802eb0a <tcpip_input+0x32>
- return ERR_VAL;
- }
- msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_INPKT);
- 802eae4: 2008 movs r0, #8
- 802eae6: f001 f871 bl 802fbcc <memp_malloc>
- if (msg == NULL) {
- 802eaea: 4604 mov r4, r0
- 802eaec: b178 cbz r0, 802eb0e <tcpip_input+0x36>
- return ERR_MEM;
- }
- msg->type = TCPIP_MSG_INPKT;
- 802eaee: 2301 movs r3, #1
- 802eaf0: 7003 strb r3, [r0, #0]
- msg->msg.inp.p = p;
- 802eaf2: 6086 str r6, [r0, #8]
- msg->msg.inp.netif = inp;
- 802eaf4: 60c7 str r7, [r0, #12]
- if (sys_mbox_trypost(&mbox, msg) != ERR_OK) {
- 802eaf6: 4621 mov r1, r4
- 802eaf8: 4628 mov r0, r5
- 802eafa: f008 feed bl 80378d8 <sys_mbox_trypost>
- 802eafe: b138 cbz r0, 802eb10 <tcpip_input+0x38>
- memp_free(MEMP_TCPIP_MSG_INPKT, msg);
- 802eb00: 2008 movs r0, #8
- 802eb02: 4621 mov r1, r4
- 802eb04: f001 f878 bl 802fbf8 <memp_free>
- 802eb08: e001 b.n 802eb0e <tcpip_input+0x36>
- return ret;
- #else /* LWIP_TCPIP_CORE_LOCKING_INPUT */
- struct tcpip_msg *msg;
- if (!sys_mbox_valid(&mbox)) {
- return ERR_VAL;
- 802eb0a: 20fa movs r0, #250 ; 0xfa
- 802eb0c: e000 b.n 802eb10 <tcpip_input+0x38>
- }
- msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_INPKT);
- if (msg == NULL) {
- return ERR_MEM;
- 802eb0e: 20ff movs r0, #255 ; 0xff
- memp_free(MEMP_TCPIP_MSG_INPKT, msg);
- return ERR_MEM;
- }
- return ERR_OK;
- #endif /* LWIP_TCPIP_CORE_LOCKING_INPUT */
- }
- 802eb10: b240 sxtb r0, r0
- 802eb12: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 802eb14: 20000d38 .word 0x20000d38
- 0802eb18 <tcpip_apimsg>:
- * @param apimsg a struct containing the function to call and its parameters
- * @return ERR_OK if the function was called, another err_t if not
- */
- err_t
- tcpip_apimsg(struct api_msg *apimsg)
- {
- 802eb18: b530 push {r4, r5, lr}
- 802eb1a: 4604 mov r4, r0
- #ifdef LWIP_DEBUG
- /* catch functions that don't set err */
- apimsg->msg.err = ERR_VAL;
- #endif
-
- if (sys_mbox_valid(&mbox)) {
- 802eb1c: 480a ldr r0, [pc, #40] ; (802eb48 <tcpip_apimsg+0x30>)
- 802eb1e: 6803 ldr r3, [r0, #0]
- * @param apimsg a struct containing the function to call and its parameters
- * @return ERR_OK if the function was called, another err_t if not
- */
- err_t
- tcpip_apimsg(struct api_msg *apimsg)
- {
- 802eb20: b087 sub sp, #28
- #ifdef LWIP_DEBUG
- /* catch functions that don't set err */
- apimsg->msg.err = ERR_VAL;
- #endif
-
- if (sys_mbox_valid(&mbox)) {
- 802eb22: b16b cbz r3, 802eb40 <tcpip_apimsg+0x28>
- msg.type = TCPIP_MSG_API;
- 802eb24: 2500 movs r5, #0
- msg.msg.apimsg = apimsg;
- sys_mbox_post(&mbox, &msg);
- 802eb26: a901 add r1, sp, #4
- /* catch functions that don't set err */
- apimsg->msg.err = ERR_VAL;
- #endif
-
- if (sys_mbox_valid(&mbox)) {
- msg.type = TCPIP_MSG_API;
- 802eb28: f88d 5004 strb.w r5, [sp, #4]
- msg.msg.apimsg = apimsg;
- 802eb2c: 9403 str r4, [sp, #12]
- sys_mbox_post(&mbox, &msg);
- 802eb2e: f008 fec3 bl 80378b8 <sys_mbox_post>
- sys_arch_sem_wait(&apimsg->msg.conn->op_completed, 0);
- 802eb32: 6860 ldr r0, [r4, #4]
- 802eb34: 4629 mov r1, r5
- 802eb36: 300c adds r0, #12
- 802eb38: f008 ff53 bl 80379e2 <sys_arch_sem_wait>
- return apimsg->msg.err;
- 802eb3c: 7a20 ldrb r0, [r4, #8]
- 802eb3e: e000 b.n 802eb42 <tcpip_apimsg+0x2a>
- }
- return ERR_VAL;
- 802eb40: 20fa movs r0, #250 ; 0xfa
- }
- 802eb42: b240 sxtb r0, r0
- 802eb44: b007 add sp, #28
- 802eb46: bd30 pop {r4, r5, pc}
- 802eb48: 20000d38 .word 0x20000d38
- 0802eb4c <tcpip_init>:
- * @param initfunc a function to call when tcpip_thread is running and finished initializing
- * @param arg argument to pass to initfunc
- */
- void
- tcpip_init(tcpip_init_done_fn initfunc, void *arg)
- {
- 802eb4c: b537 push {r0, r1, r2, r4, r5, lr}
- 802eb4e: 4604 mov r4, r0
- 802eb50: 460d mov r5, r1
- lwip_init();
- 802eb52: f000 feb3 bl 802f8bc <lwip_init>
- tcpip_init_done = initfunc;
- 802eb56: 4b09 ldr r3, [pc, #36] ; (802eb7c <tcpip_init+0x30>)
- tcpip_init_done_arg = arg;
- if(sys_mbox_new(&mbox, TCPIP_MBOX_SIZE) != ERR_OK) {
- 802eb58: 4809 ldr r0, [pc, #36] ; (802eb80 <tcpip_init+0x34>)
- void
- tcpip_init(tcpip_init_done_fn initfunc, void *arg)
- {
- lwip_init();
- tcpip_init_done = initfunc;
- 802eb5a: 601c str r4, [r3, #0]
- tcpip_init_done_arg = arg;
- 802eb5c: 4b09 ldr r3, [pc, #36] ; (802eb84 <tcpip_init+0x38>)
- if(sys_mbox_new(&mbox, TCPIP_MBOX_SIZE) != ERR_OK) {
- 802eb5e: 2132 movs r1, #50 ; 0x32
- tcpip_init(tcpip_init_done_fn initfunc, void *arg)
- {
- lwip_init();
- tcpip_init_done = initfunc;
- tcpip_init_done_arg = arg;
- 802eb60: 601d str r5, [r3, #0]
- if(sys_mbox_new(&mbox, TCPIP_MBOX_SIZE) != ERR_OK) {
- 802eb62: f008 fe8d bl 8037880 <sys_mbox_new>
- if(sys_mutex_new(&lock_tcpip_core) != ERR_OK) {
- LWIP_ASSERT("failed to create lock_tcpip_core", 0);
- }
- #endif /* LWIP_TCPIP_CORE_LOCKING */
- sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO);
- 802eb66: 2303 movs r3, #3
- 802eb68: 9300 str r3, [sp, #0]
- 802eb6a: 4907 ldr r1, [pc, #28] ; (802eb88 <tcpip_init+0x3c>)
- 802eb6c: 4807 ldr r0, [pc, #28] ; (802eb8c <tcpip_init+0x40>)
- 802eb6e: 2200 movs r2, #0
- 802eb70: f44f 73c8 mov.w r3, #400 ; 0x190
- 802eb74: f008 ff90 bl 8037a98 <sys_thread_new>
- }
- 802eb78: bd3e pop {r1, r2, r3, r4, r5, pc}
- 802eb7a: bf00 nop
- 802eb7c: 20000d40 .word 0x20000d40
- 802eb80: 20000d38 .word 0x20000d38
- 802eb84: 20000d3c .word 0x20000d3c
- 802eb88: 0802ea51 .word 0x0802ea51
- 802eb8c: 08044f92 .word 0x08044f92
- 0802eb90 <lwip_htons>:
- * @return n in network byte order
- */
- u16_t
- lwip_htons(u16_t n)
- {
- return ((n & 0xff) << 8) | ((n & 0xff00) >> 8);
- 802eb90: 0a03 lsrs r3, r0, #8
- 802eb92: ea43 2000 orr.w r0, r3, r0, lsl #8
- }
- 802eb96: b280 uxth r0, r0
- 802eb98: 4770 bx lr
- 0802eb9a <lwip_ntohs>:
- * @return n in network byte order
- */
- u16_t
- lwip_htons(u16_t n)
- {
- return ((n & 0xff) << 8) | ((n & 0xff00) >> 8);
- 802eb9a: 0a03 lsrs r3, r0, #8
- 802eb9c: ea43 2000 orr.w r0, r3, r0, lsl #8
- */
- u16_t
- lwip_ntohs(u16_t n)
- {
- return lwip_htons(n);
- }
- 802eba0: b280 uxth r0, r0
- 802eba2: 4770 bx lr
- 0802eba4 <lwip_htonl>:
- {
- return ((n & 0xff) << 24) |
- ((n & 0xff00) << 8) |
- ((n & 0xff0000UL) >> 8) |
- ((n & 0xff000000UL) >> 24);
- }
- 802eba4: ba00 rev r0, r0
- 802eba6: 4770 bx lr
- 0802eba8 <lwip_ntohl>:
- * @return n in host byte order
- */
- u32_t
- lwip_ntohl(u32_t n)
- {
- return lwip_htonl(n);
- 802eba8: f7ff bffc b.w 802eba4 <lwip_htonl>
- 0802ebac <dhcp_set_state>:
- * If the state changed, reset the number of tries.
- */
- static void
- dhcp_set_state(struct dhcp *dhcp, u8_t new_state)
- {
- if (new_state != dhcp->state) {
- 802ebac: 7b03 ldrb r3, [r0, #12]
- 802ebae: 428b cmp r3, r1
- 802ebb0: d003 beq.n 802ebba <dhcp_set_state+0xe>
- dhcp->state = new_state;
- dhcp->tries = 0;
- 802ebb2: 2300 movs r3, #0
- */
- static void
- dhcp_set_state(struct dhcp *dhcp, u8_t new_state)
- {
- if (new_state != dhcp->state) {
- dhcp->state = new_state;
- 802ebb4: 7301 strb r1, [r0, #12]
- dhcp->tries = 0;
- 802ebb6: 7343 strb r3, [r0, #13]
- dhcp->request_timeout = 0;
- 802ebb8: 8343 strh r3, [r0, #26]
- 802ebba: 4770 bx lr
- 0802ebbc <dhcp_option>:
- */
- static void
- dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len)
- {
- LWIP_ASSERT("dhcp_option: dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = option_type;
- 802ebbc: 8b03 ldrh r3, [r0, #24]
- * DHCP message.
- *
- */
- static void
- dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len)
- {
- 802ebbe: b510 push {r4, lr}
- LWIP_ASSERT("dhcp_option: dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = option_type;
- 802ebc0: 6944 ldr r4, [r0, #20]
- 802ebc2: 18e4 adds r4, r4, r3
- 802ebc4: f884 10f0 strb.w r1, [r4, #240] ; 0xf0
- dhcp->msg_out->options[dhcp->options_out_len++] = option_len;
- 802ebc8: 6941 ldr r1, [r0, #20]
- */
- static void
- dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len)
- {
- LWIP_ASSERT("dhcp_option: dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = option_type;
- 802ebca: 1c5c adds r4, r3, #1
- dhcp->msg_out->options[dhcp->options_out_len++] = option_len;
- 802ebcc: fa11 f184 uxtah r1, r1, r4
- 802ebd0: 3302 adds r3, #2
- 802ebd2: f881 20f0 strb.w r2, [r1, #240] ; 0xf0
- 802ebd6: 8303 strh r3, [r0, #24]
- 802ebd8: bd10 pop {r4, pc}
- 0802ebda <dhcp_option_byte>:
- */
- static void
- dhcp_option_byte(struct dhcp *dhcp, u8_t value)
- {
- LWIP_ASSERT("dhcp_option_byte: dhcp->options_out_len < DHCP_OPTIONS_LEN", dhcp->options_out_len < DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = value;
- 802ebda: 8b03 ldrh r3, [r0, #24]
- 802ebdc: 6942 ldr r2, [r0, #20]
- 802ebde: 18d2 adds r2, r2, r3
- 802ebe0: 3301 adds r3, #1
- 802ebe2: f882 10f0 strb.w r1, [r2, #240] ; 0xf0
- 802ebe6: 8303 strh r3, [r0, #24]
- 802ebe8: 4770 bx lr
- 0802ebea <dhcp_option_short>:
- static void
- dhcp_option_short(struct dhcp *dhcp, u16_t value)
- {
- LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff00U) >> 8);
- 802ebea: 8b03 ldrh r3, [r0, #24]
- 802ebec: 6942 ldr r2, [r0, #20]
- 802ebee: 18d2 adds r2, r2, r3
- dhcp->msg_out->options[dhcp->options_out_len++] = value;
- }
- static void
- dhcp_option_short(struct dhcp *dhcp, u16_t value)
- {
- 802ebf0: b510 push {r4, lr}
- LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff00U) >> 8);
- 802ebf2: 0a0c lsrs r4, r1, #8
- 802ebf4: f882 40f0 strb.w r4, [r2, #240] ; 0xf0
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t) (value & 0x00ffU);
- 802ebf8: 6942 ldr r2, [r0, #20]
- static void
- dhcp_option_short(struct dhcp *dhcp, u16_t value)
- {
- LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff00U) >> 8);
- 802ebfa: 1c5c adds r4, r3, #1
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t) (value & 0x00ffU);
- 802ebfc: fa12 f284 uxtah r2, r2, r4
- 802ec00: 3302 adds r3, #2
- 802ec02: f882 10f0 strb.w r1, [r2, #240] ; 0xf0
- 802ec06: 8303 strh r3, [r0, #24]
- 802ec08: bd10 pop {r4, pc}
- 0802ec0a <dhcp_option_long>:
- static void
- dhcp_option_long(struct dhcp *dhcp, u32_t value)
- {
- LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24);
- 802ec0a: 8b03 ldrh r3, [r0, #24]
- 802ec0c: 6942 ldr r2, [r0, #20]
- 802ec0e: 18d2 adds r2, r2, r3
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t) (value & 0x00ffU);
- }
- static void
- dhcp_option_long(struct dhcp *dhcp, u32_t value)
- {
- 802ec10: b510 push {r4, lr}
- LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24);
- 802ec12: 0e0c lsrs r4, r1, #24
- 802ec14: f882 40f0 strb.w r4, [r2, #240] ; 0xf0
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16);
- 802ec18: 6942 ldr r2, [r0, #20]
- static void
- dhcp_option_long(struct dhcp *dhcp, u32_t value)
- {
- LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24);
- 802ec1a: 1c5c adds r4, r3, #1
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16);
- 802ec1c: fa12 f284 uxtah r2, r2, r4
- 802ec20: f3c1 4407 ubfx r4, r1, #16, #8
- 802ec24: f882 40f0 strb.w r4, [r2, #240] ; 0xf0
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8);
- 802ec28: 6942 ldr r2, [r0, #20]
- static void
- dhcp_option_long(struct dhcp *dhcp, u32_t value)
- {
- LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16);
- 802ec2a: 1c9c adds r4, r3, #2
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8);
- 802ec2c: fa12 f284 uxtah r2, r2, r4
- 802ec30: f3c1 2407 ubfx r4, r1, #8, #8
- 802ec34: f882 40f0 strb.w r4, [r2, #240] ; 0xf0
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x000000ffUL));
- 802ec38: 6942 ldr r2, [r0, #20]
- dhcp_option_long(struct dhcp *dhcp, u32_t value)
- {
- LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16);
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8);
- 802ec3a: 1cdc adds r4, r3, #3
- dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x000000ffUL));
- 802ec3c: fa12 f284 uxtah r2, r2, r4
- 802ec40: 3304 adds r3, #4
- 802ec42: f882 10f0 strb.w r1, [r2, #240] ; 0xf0
- 802ec46: 8303 strh r3, [r0, #24]
- 802ec48: bd10 pop {r4, pc}
- 0802ec4a <dhcp_option_trailer>:
- * @param dhcp DHCP state structure
- */
- static void
- dhcp_option_trailer(struct dhcp *dhcp)
- {
- LWIP_ERROR("dhcp_option_trailer: dhcp != NULL", (dhcp != NULL), return;);
- 802ec4a: b190 cbz r0, 802ec72 <dhcp_option_trailer+0x28>
- LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL);
- LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END;
- 802ec4c: 8b03 ldrh r3, [r0, #24]
- 802ec4e: 6942 ldr r2, [r0, #20]
- 802ec50: 18d2 adds r2, r2, r3
- 802ec52: 21ff movs r1, #255 ; 0xff
- 802ec54: 3301 adds r3, #1
- 802ec56: f882 10f0 strb.w r1, [r2, #240] ; 0xf0
- 802ec5a: 8303 strh r3, [r0, #24]
- /* packet is too small, or not 4 byte aligned? */
- while (((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) &&
- (dhcp->options_out_len < DHCP_OPTIONS_LEN)) {
- /* add a fill/padding byte */
- dhcp->msg_out->options[dhcp->options_out_len++] = 0;
- 802ec5c: 2100 movs r1, #0
- LWIP_ERROR("dhcp_option_trailer: dhcp != NULL", (dhcp != NULL), return;);
- LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL);
- LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END;
- /* packet is too small, or not 4 byte aligned? */
- while (((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) &&
- 802ec5e: e005 b.n 802ec6c <dhcp_option_trailer+0x22>
- (dhcp->options_out_len < DHCP_OPTIONS_LEN)) {
- /* add a fill/padding byte */
- dhcp->msg_out->options[dhcp->options_out_len++] = 0;
- 802ec60: 6942 ldr r2, [r0, #20]
- 802ec62: 18d2 adds r2, r2, r3
- 802ec64: 3301 adds r3, #1
- 802ec66: f882 10f0 strb.w r1, [r2, #240] ; 0xf0
- 802ec6a: 8303 strh r3, [r0, #24]
- LWIP_ERROR("dhcp_option_trailer: dhcp != NULL", (dhcp != NULL), return;);
- LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL);
- LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN);
- dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END;
- /* packet is too small, or not 4 byte aligned? */
- while (((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) &&
- 802ec6c: 8b03 ldrh r3, [r0, #24]
- 802ec6e: 2b43 cmp r3, #67 ; 0x43
- 802ec70: d9f6 bls.n 802ec60 <dhcp_option_trailer+0x16>
- 802ec72: 4770 bx lr
- 0802ec74 <dhcp_create_msg>:
- * @param dhcp dhcp control struct
- * @param message_type message type of the request
- */
- static err_t
- dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type)
- {
- 802ec74: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 802ec78: 460c mov r4, r1
- 802ec7a: 4617 mov r7, r2
- if (!xid_initialised) {
- xid = DHCP_GLOBAL_XID;
- xid_initialised = !xid_initialised;
- }
- #endif
- LWIP_ERROR("dhcp_create_msg: netif != NULL", (netif != NULL), return ERR_ARG;);
- 802ec7c: 4606 mov r6, r0
- 802ec7e: 2800 cmp r0, #0
- 802ec80: f000 808e beq.w 802eda0 <dhcp_create_msg+0x12c>
- LWIP_ERROR("dhcp_create_msg: dhcp != NULL", (dhcp != NULL), return ERR_VAL;);
- 802ec84: 2900 cmp r1, #0
- 802ec86: f000 808d beq.w 802eda4 <dhcp_create_msg+0x130>
- LWIP_ASSERT("dhcp_create_msg: dhcp->p_out == NULL", dhcp->p_out == NULL);
- LWIP_ASSERT("dhcp_create_msg: dhcp->msg_out == NULL", dhcp->msg_out == NULL);
- dhcp->p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM);
- 802ec8a: 2000 movs r0, #0
- 802ec8c: f44f 719a mov.w r1, #308 ; 0x134
- 802ec90: 4602 mov r2, r0
- 802ec92: f001 f908 bl 802fea6 <pbuf_alloc>
- 802ec96: 6120 str r0, [r4, #16]
- if (dhcp->p_out == NULL) {
- 802ec98: 2800 cmp r0, #0
- 802ec9a: f000 8085 beq.w 802eda8 <dhcp_create_msg+0x134>
- }
- LWIP_ASSERT("dhcp_create_msg: check that first pbuf can hold struct dhcp_msg",
- (dhcp->p_out->len >= sizeof(struct dhcp_msg)));
- /* reuse transaction identifier in retransmissions */
- if (dhcp->tries == 0) {
- 802ec9e: 7b62 ldrb r2, [r4, #13]
- 802eca0: 4b43 ldr r3, [pc, #268] ; (802edb0 <dhcp_create_msg+0x13c>)
- 802eca2: b912 cbnz r2, 802ecaa <dhcp_create_msg+0x36>
- #if DHCP_CREATE_RAND_XID && defined(LWIP_RAND)
- xid = LWIP_RAND();
- #else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */
- xid++;
- 802eca4: 681a ldr r2, [r3, #0]
- 802eca6: 3201 adds r2, #1
- 802eca8: 601a str r2, [r3, #0]
- #endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */
- }
- dhcp->xid = xid;
- 802ecaa: 681b ldr r3, [r3, #0]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE,
- ("transaction id xid(%"X32_F")\n", xid));
- dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload;
- 802ecac: 6842 ldr r2, [r0, #4]
- xid = LWIP_RAND();
- #else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */
- xid++;
- #endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */
- }
- dhcp->xid = xid;
- 802ecae: 6023 str r3, [r4, #0]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE,
- ("transaction id xid(%"X32_F")\n", xid));
- dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload;
- dhcp->msg_out->op = DHCP_BOOTREQUEST;
- 802ecb0: 2301 movs r3, #1
- }
- dhcp->xid = xid;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE,
- ("transaction id xid(%"X32_F")\n", xid));
- dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload;
- 802ecb2: 6162 str r2, [r4, #20]
- dhcp->msg_out->op = DHCP_BOOTREQUEST;
- 802ecb4: 7013 strb r3, [r2, #0]
- /* TODO: make link layer independent */
- dhcp->msg_out->htype = DHCP_HTYPE_ETH;
- 802ecb6: 6962 ldr r2, [r4, #20]
- 802ecb8: 7053 strb r3, [r2, #1]
- dhcp->msg_out->hlen = netif->hwaddr_len;
- 802ecba: 6963 ldr r3, [r4, #20]
- 802ecbc: f896 2026 ldrb.w r2, [r6, #38] ; 0x26
- 802ecc0: 709a strb r2, [r3, #2]
- dhcp->msg_out->hops = 0;
- 802ecc2: 6963 ldr r3, [r4, #20]
- 802ecc4: 2500 movs r5, #0
- 802ecc6: 70dd strb r5, [r3, #3]
- dhcp->msg_out->xid = htonl(dhcp->xid);
- 802ecc8: 6820 ldr r0, [r4, #0]
- 802ecca: f8d4 8014 ldr.w r8, [r4, #20]
- 802ecce: f7ff ff69 bl 802eba4 <lwip_htonl>
- 802ecd2: f8c8 0004 str.w r0, [r8, #4]
- dhcp->msg_out->secs = 0;
- 802ecd6: 6963 ldr r3, [r4, #20]
- /* we don't need the broadcast flag since we can receive unicast traffic
- before being fully configured! */
- dhcp->msg_out->flags = 0;
- ip_addr_set_zero(&dhcp->msg_out->ciaddr);
- /* set ciaddr to netif->ip_addr based on message_type and state */
- if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) ||
- 802ecd8: 2f08 cmp r7, #8
- /* TODO: make link layer independent */
- dhcp->msg_out->htype = DHCP_HTYPE_ETH;
- dhcp->msg_out->hlen = netif->hwaddr_len;
- dhcp->msg_out->hops = 0;
- dhcp->msg_out->xid = htonl(dhcp->xid);
- dhcp->msg_out->secs = 0;
- 802ecda: 721d strb r5, [r3, #8]
- 802ecdc: 725d strb r5, [r3, #9]
- /* we don't need the broadcast flag since we can receive unicast traffic
- before being fully configured! */
- dhcp->msg_out->flags = 0;
- 802ecde: 729d strb r5, [r3, #10]
- 802ece0: 72dd strb r5, [r3, #11]
- ip_addr_set_zero(&dhcp->msg_out->ciaddr);
- 802ece2: 731d strb r5, [r3, #12]
- 802ece4: 735d strb r5, [r3, #13]
- 802ece6: 739d strb r5, [r3, #14]
- 802ece8: 73dd strb r5, [r3, #15]
- /* set ciaddr to netif->ip_addr based on message_type and state */
- if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) ||
- 802ecea: d007 beq.n 802ecfc <dhcp_create_msg+0x88>
- 802ecec: 2f04 cmp r7, #4
- 802ecee: d005 beq.n 802ecfc <dhcp_create_msg+0x88>
- 802ecf0: 2f03 cmp r7, #3
- 802ecf2: d105 bne.n 802ed00 <dhcp_create_msg+0x8c>
- ((message_type == DHCP_REQUEST) && /* DHCP_BOUND not used for sending! */
- ((dhcp->state==DHCP_RENEWING) || dhcp->state==DHCP_REBINDING))) {
- 802ecf4: 7b22 ldrb r2, [r4, #12]
- before being fully configured! */
- dhcp->msg_out->flags = 0;
- ip_addr_set_zero(&dhcp->msg_out->ciaddr);
- /* set ciaddr to netif->ip_addr based on message_type and state */
- if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) ||
- ((message_type == DHCP_REQUEST) && /* DHCP_BOUND not used for sending! */
- 802ecf6: 3a04 subs r2, #4
- 802ecf8: 2a01 cmp r2, #1
- 802ecfa: d801 bhi.n 802ed00 <dhcp_create_msg+0x8c>
- ((dhcp->state==DHCP_RENEWING) || dhcp->state==DHCP_REBINDING))) {
- ip_addr_copy(dhcp->msg_out->ciaddr, netif->ip_addr);
- 802ecfc: 6872 ldr r2, [r6, #4]
- 802ecfe: 60da str r2, [r3, #12]
- }
- ip_addr_set_zero(&dhcp->msg_out->yiaddr);
- 802ed00: 2500 movs r5, #0
- 802ed02: 741d strb r5, [r3, #16]
- 802ed04: 745d strb r5, [r3, #17]
- 802ed06: 749d strb r5, [r3, #18]
- 802ed08: 74dd strb r5, [r3, #19]
- ip_addr_set_zero(&dhcp->msg_out->siaddr);
- 802ed0a: 751d strb r5, [r3, #20]
- 802ed0c: 755d strb r5, [r3, #21]
- 802ed0e: 759d strb r5, [r3, #22]
- 802ed10: 75dd strb r5, [r3, #23]
- ip_addr_set_zero(&dhcp->msg_out->giaddr);
- 802ed12: 761d strb r5, [r3, #24]
- 802ed14: 765d strb r5, [r3, #25]
- 802ed16: 769d strb r5, [r3, #26]
- 802ed18: 76dd strb r5, [r3, #27]
- for (i = 0; i < DHCP_CHADDR_LEN; i++) {
- /* copy netif hardware address, pad with zeroes */
- dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/;
- 802ed1a: f896 1026 ldrb.w r1, [r6, #38] ; 0x26
- 802ed1e: 6962 ldr r2, [r4, #20]
- 802ed20: b2ab uxth r3, r5
- 802ed22: 4299 cmp r1, r3
- * @param netif the netif under DHCP control
- * @param dhcp dhcp control struct
- * @param message_type message type of the request
- */
- static err_t
- dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type)
- 802ed24: bf88 it hi
- 802ed26: 1973 addhi r3, r6, r5
- ip_addr_set_zero(&dhcp->msg_out->yiaddr);
- ip_addr_set_zero(&dhcp->msg_out->siaddr);
- ip_addr_set_zero(&dhcp->msg_out->giaddr);
- for (i = 0; i < DHCP_CHADDR_LEN; i++) {
- /* copy netif hardware address, pad with zeroes */
- dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/;
- 802ed28: 442a add r2, r5
- 802ed2a: bf8c ite hi
- 802ed2c: f893 3027 ldrbhi.w r3, [r3, #39] ; 0x27
- 802ed30: 2300 movls r3, #0
- 802ed32: 3501 adds r5, #1
- ip_addr_copy(dhcp->msg_out->ciaddr, netif->ip_addr);
- }
- ip_addr_set_zero(&dhcp->msg_out->yiaddr);
- ip_addr_set_zero(&dhcp->msg_out->siaddr);
- ip_addr_set_zero(&dhcp->msg_out->giaddr);
- for (i = 0; i < DHCP_CHADDR_LEN; i++) {
- 802ed34: 2d10 cmp r5, #16
- /* copy netif hardware address, pad with zeroes */
- dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/;
- 802ed36: 7713 strb r3, [r2, #28]
- ip_addr_copy(dhcp->msg_out->ciaddr, netif->ip_addr);
- }
- ip_addr_set_zero(&dhcp->msg_out->yiaddr);
- ip_addr_set_zero(&dhcp->msg_out->siaddr);
- ip_addr_set_zero(&dhcp->msg_out->giaddr);
- for (i = 0; i < DHCP_CHADDR_LEN; i++) {
- 802ed38: d1ef bne.n 802ed1a <dhcp_create_msg+0xa6>
- 802ed3a: 2300 movs r3, #0
- /* copy netif hardware address, pad with zeroes */
- dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/;
- }
- for (i = 0; i < DHCP_SNAME_LEN; i++) {
- dhcp->msg_out->sname[i] = 0;
- 802ed3c: 4619 mov r1, r3
- 802ed3e: 6962 ldr r2, [r4, #20]
- 802ed40: 18d2 adds r2, r2, r3
- 802ed42: 3301 adds r3, #1
- ip_addr_set_zero(&dhcp->msg_out->giaddr);
- for (i = 0; i < DHCP_CHADDR_LEN; i++) {
- /* copy netif hardware address, pad with zeroes */
- dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/;
- }
- for (i = 0; i < DHCP_SNAME_LEN; i++) {
- 802ed44: 2b40 cmp r3, #64 ; 0x40
- dhcp->msg_out->sname[i] = 0;
- 802ed46: f882 102c strb.w r1, [r2, #44] ; 0x2c
- ip_addr_set_zero(&dhcp->msg_out->giaddr);
- for (i = 0; i < DHCP_CHADDR_LEN; i++) {
- /* copy netif hardware address, pad with zeroes */
- dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/;
- }
- for (i = 0; i < DHCP_SNAME_LEN; i++) {
- 802ed4a: d1f8 bne.n 802ed3e <dhcp_create_msg+0xca>
- 802ed4c: 2200 movs r2, #0
- dhcp->msg_out->sname[i] = 0;
- }
- for (i = 0; i < DHCP_FILE_LEN; i++) {
- dhcp->msg_out->file[i] = 0;
- 802ed4e: 4610 mov r0, r2
- 802ed50: 6963 ldr r3, [r4, #20]
- 802ed52: 1899 adds r1, r3, r2
- 802ed54: 3201 adds r2, #1
- 802ed56: 2300 movs r3, #0
- dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/;
- }
- for (i = 0; i < DHCP_SNAME_LEN; i++) {
- dhcp->msg_out->sname[i] = 0;
- }
- for (i = 0; i < DHCP_FILE_LEN; i++) {
- 802ed58: 2a80 cmp r2, #128 ; 0x80
- dhcp->msg_out->file[i] = 0;
- 802ed5a: f881 006c strb.w r0, [r1, #108] ; 0x6c
- dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/;
- }
- for (i = 0; i < DHCP_SNAME_LEN; i++) {
- dhcp->msg_out->sname[i] = 0;
- }
- for (i = 0; i < DHCP_FILE_LEN; i++) {
- 802ed5e: d1f7 bne.n 802ed50 <dhcp_create_msg+0xdc>
- dhcp->msg_out->file[i] = 0;
- }
- dhcp->msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE);
- 802ed60: 6962 ldr r2, [r4, #20]
- 802ed62: f06f 007d mvn.w r0, #125 ; 0x7d
- 802ed66: 2163 movs r1, #99 ; 0x63
- 802ed68: f882 00ed strb.w r0, [r2, #237] ; 0xed
- 802ed6c: 2053 movs r0, #83 ; 0x53
- 802ed6e: f882 10ec strb.w r1, [r2, #236] ; 0xec
- 802ed72: f882 00ee strb.w r0, [r2, #238] ; 0xee
- 802ed76: f882 10ef strb.w r1, [r2, #239] ; 0xef
- dhcp->options_out_len = 0;
- 802ed7a: 8323 strh r3, [r4, #24]
- /* fill options field with an incrementing array (for debugging purposes) */
- for (i = 0; i < DHCP_OPTIONS_LEN; i++) {
- dhcp->msg_out->options[i] = (u8_t)i; /* for debugging only, no matter if truncated */
- 802ed7c: 6962 ldr r2, [r4, #20]
- 802ed7e: 18d2 adds r2, r2, r3
- 802ed80: f882 30f0 strb.w r3, [r2, #240] ; 0xf0
- 802ed84: 3301 adds r3, #1
- dhcp->msg_out->file[i] = 0;
- }
- dhcp->msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE);
- dhcp->options_out_len = 0;
- /* fill options field with an incrementing array (for debugging purposes) */
- for (i = 0; i < DHCP_OPTIONS_LEN; i++) {
- 802ed86: 2b44 cmp r3, #68 ; 0x44
- 802ed88: d1f8 bne.n 802ed7c <dhcp_create_msg+0x108>
- dhcp->msg_out->options[i] = (u8_t)i; /* for debugging only, no matter if truncated */
- }
- /* Add option MESSAGE_TYPE */
- dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN);
- 802ed8a: 4620 mov r0, r4
- 802ed8c: 2135 movs r1, #53 ; 0x35
- 802ed8e: 2201 movs r2, #1
- 802ed90: f7ff ff14 bl 802ebbc <dhcp_option>
- dhcp_option_byte(dhcp, message_type);
- 802ed94: 4620 mov r0, r4
- 802ed96: 4639 mov r1, r7
- 802ed98: f7ff ff1f bl 802ebda <dhcp_option_byte>
- return ERR_OK;
- 802ed9c: 2000 movs r0, #0
- 802ed9e: e004 b.n 802edaa <dhcp_create_msg+0x136>
- if (!xid_initialised) {
- xid = DHCP_GLOBAL_XID;
- xid_initialised = !xid_initialised;
- }
- #endif
- LWIP_ERROR("dhcp_create_msg: netif != NULL", (netif != NULL), return ERR_ARG;);
- 802eda0: 20f2 movs r0, #242 ; 0xf2
- 802eda2: e002 b.n 802edaa <dhcp_create_msg+0x136>
- LWIP_ERROR("dhcp_create_msg: dhcp != NULL", (dhcp != NULL), return ERR_VAL;);
- 802eda4: 20fa movs r0, #250 ; 0xfa
- 802eda6: e000 b.n 802edaa <dhcp_create_msg+0x136>
- LWIP_ASSERT("dhcp_create_msg: dhcp->msg_out == NULL", dhcp->msg_out == NULL);
- dhcp->p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM);
- if (dhcp->p_out == NULL) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS,
- ("dhcp_create_msg(): could not allocate pbuf\n"));
- return ERR_MEM;
- 802eda8: 20ff movs r0, #255 ; 0xff
- }
- /* Add option MESSAGE_TYPE */
- dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN);
- dhcp_option_byte(dhcp, message_type);
- return ERR_OK;
- }
- 802edaa: b240 sxtb r0, r0
- 802edac: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 802edb0: 20000714 .word 0x20000714
- 0802edb4 <dhcp_delete_msg>:
- *
- * @param dhcp the dhcp struct to free the request from
- */
- static void
- dhcp_delete_msg(struct dhcp *dhcp)
- {
- 802edb4: b510 push {r4, lr}
- LWIP_ERROR("dhcp_delete_msg: dhcp != NULL", (dhcp != NULL), return;);
- 802edb6: 4604 mov r4, r0
- 802edb8: b130 cbz r0, 802edc8 <dhcp_delete_msg+0x14>
- LWIP_ASSERT("dhcp_delete_msg: dhcp->p_out != NULL", dhcp->p_out != NULL);
- LWIP_ASSERT("dhcp_delete_msg: dhcp->msg_out != NULL", dhcp->msg_out != NULL);
- if (dhcp->p_out != NULL) {
- 802edba: 6900 ldr r0, [r0, #16]
- 802edbc: b108 cbz r0, 802edc2 <dhcp_delete_msg+0xe>
- pbuf_free(dhcp->p_out);
- 802edbe: f001 f825 bl 802fe0c <pbuf_free>
- }
- dhcp->p_out = NULL;
- 802edc2: 2300 movs r3, #0
- 802edc4: 6123 str r3, [r4, #16]
- dhcp->msg_out = NULL;
- 802edc6: 6163 str r3, [r4, #20]
- 802edc8: bd10 pop {r4, pc}
- 802edca: 0000 movs r0, r0
- 0802edcc <dhcp_discover>:
- *
- * @param netif the netif under DHCP control
- */
- static err_t
- dhcp_discover(struct netif *netif)
- {
- 802edcc: b573 push {r0, r1, r4, r5, r6, lr}
- struct dhcp *dhcp = netif->dhcp;
- 802edce: 6a04 ldr r4, [r0, #32]
- err_t result = ERR_OK;
- u16_t msecs;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n"));
- ip_addr_set_any(&dhcp->offered_ip_addr);
- 802edd0: 2300 movs r3, #0
- *
- * @param netif the netif under DHCP control
- */
- static err_t
- dhcp_discover(struct netif *netif)
- {
- 802edd2: 4605 mov r5, r0
- struct dhcp *dhcp = netif->dhcp;
- err_t result = ERR_OK;
- u16_t msecs;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n"));
- ip_addr_set_any(&dhcp->offered_ip_addr);
- 802edd4: 6263 str r3, [r4, #36] ; 0x24
- dhcp_set_state(dhcp, DHCP_SELECTING);
- 802edd6: 4620 mov r0, r4
- 802edd8: 2106 movs r1, #6
- 802edda: f7ff fee7 bl 802ebac <dhcp_set_state>
- /* create and initialize the DHCP message header */
- result = dhcp_create_msg(netif, dhcp, DHCP_DISCOVER);
- 802edde: 4628 mov r0, r5
- 802ede0: 4621 mov r1, r4
- 802ede2: 2201 movs r2, #1
- 802ede4: f7ff ff46 bl 802ec74 <dhcp_create_msg>
- if (result == ERR_OK) {
- 802ede8: 4606 mov r6, r0
- 802edea: 2800 cmp r0, #0
- 802edec: d130 bne.n 802ee50 <dhcp_discover+0x84>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: making request\n"));
- dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- 802edee: 2202 movs r2, #2
- 802edf0: 4620 mov r0, r4
- 802edf2: 2139 movs r1, #57 ; 0x39
- 802edf4: f7ff fee2 bl 802ebbc <dhcp_option>
- dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif));
- 802edf8: 4620 mov r0, r4
- 802edfa: 8ca9 ldrh r1, [r5, #36] ; 0x24
- 802edfc: f7ff fef5 bl 802ebea <dhcp_option_short>
- dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/);
- 802ee00: 2204 movs r2, #4
- 802ee02: 4620 mov r0, r4
- 802ee04: 2137 movs r1, #55 ; 0x37
- 802ee06: f7ff fed9 bl 802ebbc <dhcp_option>
- dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK);
- 802ee0a: 4620 mov r0, r4
- 802ee0c: 2101 movs r1, #1
- 802ee0e: f7ff fee4 bl 802ebda <dhcp_option_byte>
- dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER);
- 802ee12: 4620 mov r0, r4
- 802ee14: 2103 movs r1, #3
- 802ee16: f7ff fee0 bl 802ebda <dhcp_option_byte>
- dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST);
- 802ee1a: 4620 mov r0, r4
- 802ee1c: 211c movs r1, #28
- 802ee1e: f7ff fedc bl 802ebda <dhcp_option_byte>
- dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER);
- 802ee22: 2106 movs r1, #6
- 802ee24: 4620 mov r0, r4
- 802ee26: f7ff fed8 bl 802ebda <dhcp_option_byte>
- dhcp_option_trailer(dhcp);
- 802ee2a: 4620 mov r0, r4
- 802ee2c: f7ff ff0d bl 802ec4a <dhcp_option_trailer>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: realloc()ing\n"));
- pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len);
- 802ee30: 8b21 ldrh r1, [r4, #24]
- 802ee32: 6920 ldr r0, [r4, #16]
- 802ee34: 31f0 adds r1, #240 ; 0xf0
- 802ee36: b289 uxth r1, r1
- 802ee38: f001 f80f bl 802fe5a <pbuf_realloc>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, DHCP_SERVER_PORT)\n"));
- udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif);
- 802ee3c: 9500 str r5, [sp, #0]
- 802ee3e: 6860 ldr r0, [r4, #4]
- 802ee40: 6921 ldr r1, [r4, #16]
- 802ee42: 4a0f ldr r2, [pc, #60] ; (802ee80 <dhcp_discover+0xb4>)
- 802ee44: 2343 movs r3, #67 ; 0x43
- 802ee46: f003 fda3 bl 8032990 <udp_sendto_if>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: deleting()ing\n"));
- dhcp_delete_msg(dhcp);
- 802ee4a: 4620 mov r0, r4
- 802ee4c: f7ff ffb2 bl 802edb4 <dhcp_delete_msg>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802ee50: 7b63 ldrb r3, [r4, #13]
- 802ee52: 3301 adds r3, #1
- 802ee54: b2db uxtb r3, r3
- if(dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) {
- dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON;
- autoip_start(netif);
- }
- #endif /* LWIP_DHCP_AUTOIP_COOP */
- msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000;
- 802ee56: 2b05 cmp r3, #5
- 802ee58: bf98 it ls
- 802ee5a: f44f 727a movls.w r2, #1000 ; 0x3e8
- dhcp_delete_msg(dhcp);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802ee5e: 7363 strb r3, [r4, #13]
- if(dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) {
- dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON;
- autoip_start(netif);
- }
- #endif /* LWIP_DHCP_AUTOIP_COOP */
- msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000;
- 802ee60: bf9a itte ls
- 802ee62: fa02 f303 lslls.w r3, r2, r3
- 802ee66: b29b uxthls r3, r3
- 802ee68: f64e 2360 movwhi r3, #60000 ; 0xea60
- dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS;
- 802ee6c: f44f 72fa mov.w r2, #500 ; 0x1f4
- 802ee70: f203 13f3 addw r3, r3, #499 ; 0x1f3
- 802ee74: fb93 f3f2 sdiv r3, r3, r2
- 802ee78: 8363 strh r3, [r4, #26]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
- }
- 802ee7a: 4630 mov r0, r6
- 802ee7c: bd7c pop {r2, r3, r4, r5, r6, pc}
- 802ee7e: bf00 nop
- 802ee80: 08045004 .word 0x08045004
- 0802ee84 <dhcp_rebind>:
- *
- * @param netif network interface which must rebind with a DHCP server
- */
- static err_t
- dhcp_rebind(struct netif *netif)
- {
- 802ee84: b573 push {r0, r1, r4, r5, r6, lr}
- struct dhcp *dhcp = netif->dhcp;
- 802ee86: 6a04 ldr r4, [r0, #32]
- *
- * @param netif network interface which must rebind with a DHCP server
- */
- static err_t
- dhcp_rebind(struct netif *netif)
- {
- 802ee88: 4605 mov r5, r0
- struct dhcp *dhcp = netif->dhcp;
- err_t result;
- u16_t msecs;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind()\n"));
- dhcp_set_state(dhcp, DHCP_REBINDING);
- 802ee8a: 2104 movs r1, #4
- 802ee8c: 4620 mov r0, r4
- 802ee8e: f7ff fe8d bl 802ebac <dhcp_set_state>
- /* create and initialize the DHCP message header */
- result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST);
- 802ee92: 4628 mov r0, r5
- 802ee94: 4621 mov r1, r4
- 802ee96: 2203 movs r2, #3
- 802ee98: f7ff feec bl 802ec74 <dhcp_create_msg>
- if (result == ERR_OK) {
- 802ee9c: 4606 mov r6, r0
- 802ee9e: b9d8 cbnz r0, 802eed8 <dhcp_rebind+0x54>
- dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- 802eea0: 2202 movs r2, #2
- 802eea2: 4620 mov r0, r4
- 802eea4: 2139 movs r1, #57 ; 0x39
- 802eea6: f7ff fe89 bl 802ebbc <dhcp_option>
- dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif));
- 802eeaa: 8ca9 ldrh r1, [r5, #36] ; 0x24
- 802eeac: 4620 mov r0, r4
- 802eeae: f7ff fe9c bl 802ebea <dhcp_option_short>
- dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4);
- dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr));
- #endif
- dhcp_option_trailer(dhcp);
- 802eeb2: 4620 mov r0, r4
- 802eeb4: f7ff fec9 bl 802ec4a <dhcp_option_trailer>
- pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len);
- 802eeb8: 8b21 ldrh r1, [r4, #24]
- 802eeba: 6920 ldr r0, [r4, #16]
- 802eebc: 31f0 adds r1, #240 ; 0xf0
- 802eebe: b289 uxth r1, r1
- 802eec0: f000 ffcb bl 802fe5a <pbuf_realloc>
- /* broadcast to server */
- udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif);
- 802eec4: 9500 str r5, [sp, #0]
- 802eec6: 6860 ldr r0, [r4, #4]
- 802eec8: 6921 ldr r1, [r4, #16]
- 802eeca: 4a0e ldr r2, [pc, #56] ; (802ef04 <dhcp_rebind+0x80>)
- 802eecc: 2343 movs r3, #67 ; 0x43
- 802eece: f003 fd5f bl 8032990 <udp_sendto_if>
- dhcp_delete_msg(dhcp);
- 802eed2: 4620 mov r0, r4
- 802eed4: f7ff ff6e bl 802edb4 <dhcp_delete_msg>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802eed8: 7b63 ldrb r3, [r4, #13]
- 802eeda: 3301 adds r3, #1
- 802eedc: b2db uxtb r3, r3
- msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000;
- 802eede: 2b09 cmp r3, #9
- dhcp_delete_msg(dhcp);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802eee0: 7363 strb r3, [r4, #13]
- msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000;
- 802eee2: d804 bhi.n 802eeee <dhcp_rebind+0x6a>
- 802eee4: f44f 727a mov.w r2, #1000 ; 0x3e8
- 802eee8: 4353 muls r3, r2
- 802eeea: b29b uxth r3, r3
- 802eeec: e001 b.n 802eef2 <dhcp_rebind+0x6e>
- 802eeee: f242 7310 movw r3, #10000 ; 0x2710
- dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS;
- 802eef2: f44f 72fa mov.w r2, #500 ; 0x1f4
- 802eef6: f203 13f3 addw r3, r3, #499 ; 0x1f3
- 802eefa: fb93 f3f2 sdiv r3, r3, r2
- 802eefe: 8363 strh r3, [r4, #26]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
- }
- 802ef00: 4630 mov r0, r6
- 802ef02: bd7c pop {r2, r3, r4, r5, r6, pc}
- 802ef04: 08045004 .word 0x08045004
- 0802ef08 <dhcp_reboot>:
- *
- * @param netif network interface which must reboot
- */
- static err_t
- dhcp_reboot(struct netif *netif)
- {
- 802ef08: b573 push {r0, r1, r4, r5, r6, lr}
- struct dhcp *dhcp = netif->dhcp;
- 802ef0a: 6a04 ldr r4, [r0, #32]
- *
- * @param netif network interface which must reboot
- */
- static err_t
- dhcp_reboot(struct netif *netif)
- {
- 802ef0c: 4605 mov r5, r0
- struct dhcp *dhcp = netif->dhcp;
- err_t result;
- u16_t msecs;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot()\n"));
- dhcp_set_state(dhcp, DHCP_REBOOTING);
- 802ef0e: 2103 movs r1, #3
- 802ef10: 4620 mov r0, r4
- 802ef12: f7ff fe4b bl 802ebac <dhcp_set_state>
- /* create and initialize the DHCP message header */
- result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST);
- 802ef16: 4628 mov r0, r5
- 802ef18: 4621 mov r1, r4
- 802ef1a: 2203 movs r2, #3
- 802ef1c: f7ff feaa bl 802ec74 <dhcp_create_msg>
- if (result == ERR_OK) {
- 802ef20: 4606 mov r6, r0
- 802ef22: bb40 cbnz r0, 802ef76 <dhcp_reboot+0x6e>
- dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- 802ef24: 2202 movs r2, #2
- 802ef26: 4620 mov r0, r4
- 802ef28: 2139 movs r1, #57 ; 0x39
- 802ef2a: f7ff fe47 bl 802ebbc <dhcp_option>
- dhcp_option_short(dhcp, 576);
- 802ef2e: 4620 mov r0, r4
- 802ef30: f44f 7110 mov.w r1, #576 ; 0x240
- 802ef34: f7ff fe59 bl 802ebea <dhcp_option_short>
- dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4);
- 802ef38: 2204 movs r2, #4
- 802ef3a: 2132 movs r1, #50 ; 0x32
- 802ef3c: 4620 mov r0, r4
- 802ef3e: f7ff fe3d bl 802ebbc <dhcp_option>
- dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr)));
- 802ef42: 6a60 ldr r0, [r4, #36] ; 0x24
- 802ef44: f7ff fe30 bl 802eba8 <lwip_ntohl>
- 802ef48: 4601 mov r1, r0
- 802ef4a: 4620 mov r0, r4
- 802ef4c: f7ff fe5d bl 802ec0a <dhcp_option_long>
- dhcp_option_trailer(dhcp);
- 802ef50: 4620 mov r0, r4
- 802ef52: f7ff fe7a bl 802ec4a <dhcp_option_trailer>
- pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len);
- 802ef56: 8b21 ldrh r1, [r4, #24]
- 802ef58: 6920 ldr r0, [r4, #16]
- 802ef5a: 31f0 adds r1, #240 ; 0xf0
- 802ef5c: b289 uxth r1, r1
- 802ef5e: f000 ff7c bl 802fe5a <pbuf_realloc>
- /* broadcast to server */
- udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif);
- 802ef62: 9500 str r5, [sp, #0]
- 802ef64: 6860 ldr r0, [r4, #4]
- 802ef66: 6921 ldr r1, [r4, #16]
- 802ef68: 4a0e ldr r2, [pc, #56] ; (802efa4 <dhcp_reboot+0x9c>)
- 802ef6a: 2343 movs r3, #67 ; 0x43
- 802ef6c: f003 fd10 bl 8032990 <udp_sendto_if>
- dhcp_delete_msg(dhcp);
- 802ef70: 4620 mov r0, r4
- 802ef72: f7ff ff1f bl 802edb4 <dhcp_delete_msg>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802ef76: 7b63 ldrb r3, [r4, #13]
- 802ef78: 3301 adds r3, #1
- 802ef7a: b2db uxtb r3, r3
- msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000;
- 802ef7c: 2b09 cmp r3, #9
- dhcp_delete_msg(dhcp);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802ef7e: 7363 strb r3, [r4, #13]
- msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000;
- 802ef80: d804 bhi.n 802ef8c <dhcp_reboot+0x84>
- 802ef82: f44f 727a mov.w r2, #1000 ; 0x3e8
- 802ef86: 4353 muls r3, r2
- 802ef88: b29b uxth r3, r3
- 802ef8a: e001 b.n 802ef90 <dhcp_reboot+0x88>
- 802ef8c: f242 7310 movw r3, #10000 ; 0x2710
- dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS;
- 802ef90: f44f 72fa mov.w r2, #500 ; 0x1f4
- 802ef94: f203 13f3 addw r3, r3, #499 ; 0x1f3
- 802ef98: fb93 f3f2 sdiv r3, r3, r2
- 802ef9c: 8363 strh r3, [r4, #26]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
- }
- 802ef9e: 4630 mov r0, r6
- 802efa0: bd7c pop {r2, r3, r4, r5, r6, pc}
- 802efa2: bf00 nop
- 802efa4: 08045004 .word 0x08045004
- 0802efa8 <dhcp_select>:
- * @param netif the netif under DHCP control
- * @return lwIP specific error (see error.h)
- */
- static err_t
- dhcp_select(struct netif *netif)
- {
- 802efa8: b573 push {r0, r1, r4, r5, r6, lr}
- struct dhcp *dhcp = netif->dhcp;
- 802efaa: 6a04 ldr r4, [r0, #32]
- * @param netif the netif under DHCP control
- * @return lwIP specific error (see error.h)
- */
- static err_t
- dhcp_select(struct netif *netif)
- {
- 802efac: 4605 mov r5, r0
- struct dhcp *dhcp = netif->dhcp;
- err_t result;
- u16_t msecs;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- dhcp_set_state(dhcp, DHCP_REQUESTING);
- 802efae: 2101 movs r1, #1
- 802efb0: 4620 mov r0, r4
- 802efb2: f7ff fdfb bl 802ebac <dhcp_set_state>
- /* create and initialize the DHCP message header */
- result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST);
- 802efb6: 4628 mov r0, r5
- 802efb8: 4621 mov r1, r4
- 802efba: 2203 movs r2, #3
- 802efbc: f7ff fe5a bl 802ec74 <dhcp_create_msg>
- if (result == ERR_OK) {
- 802efc0: 4606 mov r6, r0
- 802efc2: 2800 cmp r0, #0
- 802efc4: d148 bne.n 802f058 <dhcp_select+0xb0>
- dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- 802efc6: 2202 movs r2, #2
- 802efc8: 4620 mov r0, r4
- 802efca: 2139 movs r1, #57 ; 0x39
- 802efcc: f7ff fdf6 bl 802ebbc <dhcp_option>
- dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif));
- 802efd0: 4620 mov r0, r4
- 802efd2: 8ca9 ldrh r1, [r5, #36] ; 0x24
- 802efd4: f7ff fe09 bl 802ebea <dhcp_option_short>
- /* MUST request the offered IP address */
- dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4);
- 802efd8: 2204 movs r2, #4
- 802efda: 2132 movs r1, #50 ; 0x32
- 802efdc: 4620 mov r0, r4
- 802efde: f7ff fded bl 802ebbc <dhcp_option>
- dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr)));
- 802efe2: 6a60 ldr r0, [r4, #36] ; 0x24
- 802efe4: f7ff fde0 bl 802eba8 <lwip_ntohl>
- 802efe8: 4601 mov r1, r0
- 802efea: 4620 mov r0, r4
- 802efec: f7ff fe0d bl 802ec0a <dhcp_option_long>
- dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4);
- 802eff0: 2204 movs r2, #4
- 802eff2: 2136 movs r1, #54 ; 0x36
- 802eff4: 4620 mov r0, r4
- 802eff6: f7ff fde1 bl 802ebbc <dhcp_option>
- dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->server_ip_addr)));
- 802effa: 6a20 ldr r0, [r4, #32]
- 802effc: f7ff fdd4 bl 802eba8 <lwip_ntohl>
- 802f000: 4601 mov r1, r0
- 802f002: 4620 mov r0, r4
- 802f004: f7ff fe01 bl 802ec0a <dhcp_option_long>
- dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/);
- 802f008: 2204 movs r2, #4
- 802f00a: 4620 mov r0, r4
- 802f00c: 2137 movs r1, #55 ; 0x37
- 802f00e: f7ff fdd5 bl 802ebbc <dhcp_option>
- dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK);
- 802f012: 4620 mov r0, r4
- 802f014: 2101 movs r1, #1
- 802f016: f7ff fde0 bl 802ebda <dhcp_option_byte>
- dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER);
- 802f01a: 4620 mov r0, r4
- 802f01c: 2103 movs r1, #3
- 802f01e: f7ff fddc bl 802ebda <dhcp_option_byte>
- dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST);
- 802f022: 4620 mov r0, r4
- 802f024: 211c movs r1, #28
- 802f026: f7ff fdd8 bl 802ebda <dhcp_option_byte>
- dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER);
- 802f02a: 2106 movs r1, #6
- 802f02c: 4620 mov r0, r4
- 802f02e: f7ff fdd4 bl 802ebda <dhcp_option_byte>
- #if LWIP_NETIF_HOSTNAME
- dhcp_option_hostname(dhcp, netif);
- #endif /* LWIP_NETIF_HOSTNAME */
- dhcp_option_trailer(dhcp);
- 802f032: 4620 mov r0, r4
- 802f034: f7ff fe09 bl 802ec4a <dhcp_option_trailer>
- /* shrink the pbuf to the actual content length */
- pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len);
- 802f038: 8b21 ldrh r1, [r4, #24]
- 802f03a: 6920 ldr r0, [r4, #16]
- 802f03c: 31f0 adds r1, #240 ; 0xf0
- 802f03e: b289 uxth r1, r1
- 802f040: f000 ff0b bl 802fe5a <pbuf_realloc>
- /* send broadcast to any DHCP server */
- udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif);
- 802f044: 9500 str r5, [sp, #0]
- 802f046: 6860 ldr r0, [r4, #4]
- 802f048: 6921 ldr r1, [r4, #16]
- 802f04a: 4a0f ldr r2, [pc, #60] ; (802f088 <dhcp_select+0xe0>)
- 802f04c: 2343 movs r3, #67 ; 0x43
- 802f04e: f003 fc9f bl 8032990 <udp_sendto_if>
- dhcp_delete_msg(dhcp);
- 802f052: 4620 mov r0, r4
- 802f054: f7ff feae bl 802edb4 <dhcp_delete_msg>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802f058: 7b63 ldrb r3, [r4, #13]
- 802f05a: 3301 adds r3, #1
- 802f05c: b2db uxtb r3, r3
- msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000;
- 802f05e: 2b05 cmp r3, #5
- 802f060: bf98 it ls
- 802f062: f44f 727a movls.w r2, #1000 ; 0x3e8
- dhcp_delete_msg(dhcp);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802f066: 7363 strb r3, [r4, #13]
- msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000;
- 802f068: bf9a itte ls
- 802f06a: fa02 f303 lslls.w r3, r2, r3
- 802f06e: b29b uxthls r3, r3
- 802f070: f64e 2360 movwhi r3, #60000 ; 0xea60
- dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS;
- 802f074: f44f 72fa mov.w r2, #500 ; 0x1f4
- 802f078: f203 13f3 addw r3, r3, #499 ; 0x1f3
- 802f07c: fb93 f3f2 sdiv r3, r3, r2
- 802f080: 8363 strh r3, [r4, #26]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
- }
- 802f082: 4630 mov r0, r6
- 802f084: bd7c pop {r2, r3, r4, r5, r6, pc}
- 802f086: bf00 nop
- 802f088: 08045004 .word 0x08045004
- 0802f08c <dhcp_check>:
- *
- * @param netif the netif under DHCP control
- */
- static void
- dhcp_check(struct netif *netif)
- {
- 802f08c: b538 push {r3, r4, r5, lr}
- struct dhcp *dhcp = netif->dhcp;
- 802f08e: 6a04 ldr r4, [r0, #32]
- *
- * @param netif the netif under DHCP control
- */
- static void
- dhcp_check(struct netif *netif)
- {
- 802f090: 4605 mov r5, r0
- struct dhcp *dhcp = netif->dhcp;
- err_t result;
- u16_t msecs;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0],
- (s16_t)netif->name[1]));
- dhcp_set_state(dhcp, DHCP_CHECKING);
- 802f092: 2108 movs r1, #8
- 802f094: 4620 mov r0, r4
- 802f096: f7ff fd89 bl 802ebac <dhcp_set_state>
- /* create an ARP query for the offered IP address, expecting that no host
- responds, as the IP address should not be in use. */
- result = etharp_query(netif, &dhcp->offered_ip_addr, NULL);
- 802f09a: 4628 mov r0, r5
- 802f09c: f104 0124 add.w r1, r4, #36 ; 0x24
- 802f0a0: 2200 movs r2, #0
- 802f0a2: f008 f88d bl 80371c0 <etharp_query>
- if (result != ERR_OK) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_check: could not perform ARP query\n"));
- }
- dhcp->tries++;
- 802f0a6: 7b63 ldrb r3, [r4, #13]
- 802f0a8: 3301 adds r3, #1
- 802f0aa: 7363 strb r3, [r4, #13]
- msecs = 500;
- dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS;
- 802f0ac: 2301 movs r3, #1
- 802f0ae: 8363 strh r3, [r4, #26]
- 802f0b0: bd38 pop {r3, r4, r5, pc}
- 0802f0b2 <dhcp_bind>:
- *
- * @param netif network interface to bind to the offered address
- */
- static void
- dhcp_bind(struct netif *netif)
- {
- 802f0b2: b537 push {r0, r1, r2, r4, r5, lr}
- u32_t timeout;
- struct dhcp *dhcp;
- ip_addr_t sn_mask, gw_addr;
- LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;);
- 802f0b4: 4605 mov r5, r0
- 802f0b6: 2800 cmp r0, #0
- 802f0b8: d059 beq.n 802f16e <dhcp_bind+0xbc>
- dhcp = netif->dhcp;
- 802f0ba: 6a04 ldr r4, [r0, #32]
- LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;);
- 802f0bc: 2c00 cmp r4, #0
- 802f0be: d056 beq.n 802f16e <dhcp_bind+0xbc>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* temporary DHCP lease? */
- if (dhcp->offered_t1_renew != 0xffffffffUL) {
- 802f0c0: 6b63 ldr r3, [r4, #52] ; 0x34
- 802f0c2: 1c58 adds r0, r3, #1
- 802f0c4: d00d beq.n 802f0e2 <dhcp_bind+0x30>
- /* set renewal period timer */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew));
- timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS;
- 802f0c6: 223c movs r2, #60 ; 0x3c
- 802f0c8: 331e adds r3, #30
- 802f0ca: fbb3 f3f2 udiv r3, r3, r2
- if(timeout > 0xffff) {
- timeout = 0xffff;
- }
- dhcp->t1_timeout = (u16_t)timeout;
- 802f0ce: f64f 72ff movw r2, #65535 ; 0xffff
- 802f0d2: 4293 cmp r3, r2
- 802f0d4: bf28 it cs
- 802f0d6: 4613 movcs r3, r2
- 802f0d8: b29b uxth r3, r3
- 802f0da: 83a3 strh r3, [r4, #28]
- if (dhcp->t1_timeout == 0) {
- 802f0dc: b90b cbnz r3, 802f0e2 <dhcp_bind+0x30>
- dhcp->t1_timeout = 1;
- 802f0de: 2301 movs r3, #1
- 802f0e0: 83a3 strh r3, [r4, #28]
- }
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew*1000));
- }
- /* set renewal period timer */
- if (dhcp->offered_t2_rebind != 0xffffffffUL) {
- 802f0e2: 6ba3 ldr r3, [r4, #56] ; 0x38
- 802f0e4: 1c59 adds r1, r3, #1
- 802f0e6: d00d beq.n 802f104 <dhcp_bind+0x52>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind));
- timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS;
- 802f0e8: 223c movs r2, #60 ; 0x3c
- 802f0ea: 331e adds r3, #30
- 802f0ec: fbb3 f3f2 udiv r3, r3, r2
- if(timeout > 0xffff) {
- timeout = 0xffff;
- }
- dhcp->t2_timeout = (u16_t)timeout;
- 802f0f0: f64f 72ff movw r2, #65535 ; 0xffff
- 802f0f4: 4293 cmp r3, r2
- 802f0f6: bf28 it cs
- 802f0f8: 4613 movcs r3, r2
- 802f0fa: b29b uxth r3, r3
- 802f0fc: 83e3 strh r3, [r4, #30]
- if (dhcp->t2_timeout == 0) {
- 802f0fe: b90b cbnz r3, 802f104 <dhcp_bind+0x52>
- dhcp->t2_timeout = 1;
- 802f100: 2301 movs r3, #1
- 802f102: 83e3 strh r3, [r4, #30]
- }
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind*1000));
- }
- /* If we have sub 1 minute lease, t2 and t1 will kick in at the same time. */
- if ((dhcp->t1_timeout >= dhcp->t2_timeout) && (dhcp->t2_timeout > 0)) {
- 802f104: 8be3 ldrh r3, [r4, #30]
- 802f106: 8ba2 ldrh r2, [r4, #28]
- 802f108: 429a cmp r2, r3
- 802f10a: d302 bcc.n 802f112 <dhcp_bind+0x60>
- 802f10c: b10b cbz r3, 802f112 <dhcp_bind+0x60>
- dhcp->t1_timeout = 0;
- 802f10e: 2300 movs r3, #0
- 802f110: 83a3 strh r3, [r4, #28]
- }
- if (dhcp->subnet_mask_given) {
- 802f112: 7ba3 ldrb r3, [r4, #14]
- 802f114: b10b cbz r3, 802f11a <dhcp_bind+0x68>
- /* copy offered network mask */
- ip_addr_copy(sn_mask, dhcp->offered_sn_mask);
- 802f116: 6aa3 ldr r3, [r4, #40] ; 0x28
- 802f118: e00b b.n 802f132 <dhcp_bind+0x80>
- } else {
- /* subnet mask not given, choose a safe subnet mask given the network class */
- u8_t first_octet = ip4_addr1(&dhcp->offered_ip_addr);
- 802f11a: f894 3024 ldrb.w r3, [r4, #36] ; 0x24
- if (first_octet <= 127) {
- 802f11e: 061a lsls r2, r3, #24
- 802f120: d401 bmi.n 802f126 <dhcp_bind+0x74>
- ip4_addr_set_u32(&sn_mask, PP_HTONL(0xff000000UL));
- 802f122: 23ff movs r3, #255 ; 0xff
- 802f124: e005 b.n 802f132 <dhcp_bind+0x80>
- } else if (first_octet >= 192) {
- 802f126: 2bbf cmp r3, #191 ; 0xbf
- ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffffff00UL));
- 802f128: bf8c ite hi
- 802f12a: f06f 437f mvnhi.w r3, #4278190080 ; 0xff000000
- } else {
- ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffff0000UL));
- 802f12e: f64f 73ff movwls r3, #65535 ; 0xffff
- 802f132: 9300 str r3, [sp, #0]
- }
- }
- ip_addr_copy(gw_addr, dhcp->offered_gw_addr);
- 802f134: 6ae3 ldr r3, [r4, #44] ; 0x2c
- 802f136: 9301 str r3, [sp, #4]
- /* gateway address not given? */
- if (ip_addr_isany(&gw_addr)) {
- 802f138: b92b cbnz r3, 802f146 <dhcp_bind+0x94>
- /* copy network address */
- ip_addr_get_network(&gw_addr, &dhcp->offered_ip_addr, &sn_mask);
- 802f13a: 6a63 ldr r3, [r4, #36] ; 0x24
- 802f13c: 9a00 ldr r2, [sp, #0]
- 802f13e: 4013 ands r3, r2
- /* use first host address on network as gateway */
- ip4_addr_set_u32(&gw_addr, ip4_addr_get_u32(&gw_addr) | PP_HTONL(0x00000001UL));
- 802f140: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000
- 802f144: 9301 str r3, [sp, #4]
- }
- #endif /* LWIP_DHCP_AUTOIP_COOP */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F"\n",
- ip4_addr_get_u32(&dhcp->offered_ip_addr)));
- netif_set_ipaddr(netif, &dhcp->offered_ip_addr);
- 802f146: 4628 mov r0, r5
- 802f148: f104 0124 add.w r1, r4, #36 ; 0x24
- 802f14c: f000 fd6a bl 802fc24 <netif_set_ipaddr>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): SN: 0x%08"X32_F"\n",
- ip4_addr_get_u32(&sn_mask)));
- netif_set_netmask(netif, &sn_mask);
- 802f150: 4628 mov r0, r5
- 802f152: 4669 mov r1, sp
- 802f154: f000 fda6 bl 802fca4 <netif_set_netmask>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): GW: 0x%08"X32_F"\n",
- ip4_addr_get_u32(&gw_addr)));
- netif_set_gw(netif, &gw_addr);
- 802f158: a901 add r1, sp, #4
- 802f15a: 4628 mov r0, r5
- 802f15c: f000 fd9e bl 802fc9c <netif_set_gw>
- /* bring the interface up */
- netif_set_up(netif);
- 802f160: 4628 mov r0, r5
- 802f162: f000 fdf5 bl 802fd50 <netif_set_up>
- /* netif is now bound to DHCP leased address */
- dhcp_set_state(dhcp, DHCP_BOUND);
- 802f166: 4620 mov r0, r4
- 802f168: 210a movs r1, #10
- 802f16a: f7ff fd1f bl 802ebac <dhcp_set_state>
- }
- 802f16e: bd3e pop {r1, r2, r3, r4, r5, pc}
- 0802f170 <dhcp_recv>:
- /**
- * If an incoming DHCP message is in response to us, then trigger the state machine
- */
- static void
- dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- {
- 802f170: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 802f174: 4692 mov sl, r2
- 802f176: b08b sub sp, #44 ; 0x2c
- LWIP_UNUSED_ARG(addr);
- LWIP_UNUSED_ARG(port);
- LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL);
- if (p->len < DHCP_MIN_REPLY_LEN) {
- 802f178: f8ba 300a ldrh.w r3, [sl, #10]
- */
- static void
- dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- {
- struct netif *netif = (struct netif *)arg;
- struct dhcp *dhcp = netif->dhcp;
- 802f17c: f8d0 8020 ldr.w r8, [r0, #32]
- struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload;
- 802f180: 6852 ldr r2, [r2, #4]
- LWIP_UNUSED_ARG(addr);
- LWIP_UNUSED_ARG(port);
- LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL);
- if (p->len < DHCP_MIN_REPLY_LEN) {
- 802f182: 2b2b cmp r3, #43 ; 0x2b
- /**
- * If an incoming DHCP message is in response to us, then trigger the state machine
- */
- static void
- dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- {
- 802f184: 4605 mov r5, r0
- LWIP_UNUSED_ARG(addr);
- LWIP_UNUSED_ARG(port);
- LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL);
- if (p->len < DHCP_MIN_REPLY_LEN) {
- 802f186: f240 81b8 bls.w 802f4fa <dhcp_recv+0x38a>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP reply message or pbuf too short\n"));
- goto free_pbuf_and_return;
- }
- if (reply_msg->op != DHCP_BOOTREPLY) {
- 802f18a: 7813 ldrb r3, [r2, #0]
- 802f18c: 2b02 cmp r3, #2
- 802f18e: f040 81b4 bne.w 802f4fa <dhcp_recv+0x38a>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op));
- goto free_pbuf_and_return;
- }
- /* iterate through hardware address and match against DHCP message */
- for (i = 0; i < netif->hwaddr_len; i++) {
- 802f192: f890 1026 ldrb.w r1, [r0, #38] ; 0x26
- 802f196: 2300 movs r3, #0
- 802f198: e008 b.n 802f1ac <dhcp_recv+0x3c>
- /**
- * If an incoming DHCP message is in response to us, then trigger the state machine
- */
- static void
- dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- 802f19a: 18e8 adds r0, r5, r3
- 802f19c: 3301 adds r3, #1
- 802f19e: 18d4 adds r4, r2, r3
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op));
- goto free_pbuf_and_return;
- }
- /* iterate through hardware address and match against DHCP message */
- for (i = 0; i < netif->hwaddr_len; i++) {
- if (netif->hwaddr[i] != reply_msg->chaddr[i]) {
- 802f1a0: f890 0027 ldrb.w r0, [r0, #39] ; 0x27
- 802f1a4: 7ee4 ldrb r4, [r4, #27]
- 802f1a6: 4284 cmp r4, r0
- 802f1a8: f040 81a7 bne.w 802f4fa <dhcp_recv+0x38a>
- if (reply_msg->op != DHCP_BOOTREPLY) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op));
- goto free_pbuf_and_return;
- }
- /* iterate through hardware address and match against DHCP message */
- for (i = 0; i < netif->hwaddr_len; i++) {
- 802f1ac: b2d8 uxtb r0, r3
- 802f1ae: 4288 cmp r0, r1
- 802f1b0: d3f3 bcc.n 802f19a <dhcp_recv+0x2a>
- (u16_t)i, (u16_t)netif->hwaddr[i], (u16_t)i, (u16_t)reply_msg->chaddr[i]));
- goto free_pbuf_and_return;
- }
- }
- /* match transaction ID against what we expected */
- if (ntohl(reply_msg->xid) != dhcp->xid) {
- 802f1b2: 6850 ldr r0, [r2, #4]
- 802f1b4: f7ff fcf8 bl 802eba8 <lwip_ntohl>
- 802f1b8: f8d8 3000 ldr.w r3, [r8]
- 802f1bc: 4298 cmp r0, r3
- 802f1be: f040 819c bne.w 802f4fa <dhcp_recv+0x38a>
- struct pbuf *q;
- int parse_file_as_options = 0;
- int parse_sname_as_options = 0;
- /* clear received options */
- dhcp_clear_all_options(dhcp);
- 802f1c2: 2100 movs r1, #0
- 802f1c4: 220a movs r2, #10
- 802f1c6: 489d ldr r0, [pc, #628] ; (802f43c <dhcp_recv+0x2cc>)
- 802f1c8: f7f2 fc9a bl 8021b00 <memset>
- /* check that beginning of dhcp_msg (up to and including chaddr) is in first pbuf */
- if (p->len < DHCP_SNAME_OFS) {
- 802f1cc: f8ba 300a ldrh.w r3, [sl, #10]
- 802f1d0: 2b2b cmp r3, #43 ; 0x2b
- 802f1d2: f240 8192 bls.w 802f4fa <dhcp_recv+0x38a>
- return ERR_BUF;
- }
- dhcp->msg_in = (struct dhcp_msg *)p->payload;
- 802f1d6: f8da 3004 ldr.w r3, [sl, #4]
- /* parse options */
- /* start with options field */
- options_idx = DHCP_OPTIONS_OFS;
- /* parse options to the end of the received packet */
- options_idx_max = p->tot_len;
- 802f1da: f8ba 9008 ldrh.w r9, [sl, #8]
- dhcp_clear_all_options(dhcp);
- /* check that beginning of dhcp_msg (up to and including chaddr) is in first pbuf */
- if (p->len < DHCP_SNAME_OFS) {
- return ERR_BUF;
- }
- dhcp->msg_in = (struct dhcp_msg *)p->payload;
- 802f1de: f8c8 3008 str.w r3, [r8, #8]
- u16_t offset_max;
- u16_t options_idx;
- u16_t options_idx_max;
- struct pbuf *q;
- int parse_file_as_options = 0;
- int parse_sname_as_options = 0;
- 802f1e2: f04f 0b00 mov.w fp, #0
- #endif /* LWIP_DHCP_BOOTP_FILE */
- /* parse options */
- /* start with options field */
- options_idx = DHCP_OPTIONS_OFS;
- 802f1e6: 22f0 movs r2, #240 ; 0xf0
- 802f1e8: e004 b.n 802f1f4 <dhcp_recv+0x84>
- parse_file_as_options = 0;
- options_idx = DHCP_FILE_OFS;
- options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN;
- goto again;
- } else if (parse_sname_as_options) {
- parse_sname_as_options = 0;
- 802f1ea: f04f 0b00 mov.w fp, #0
- options_idx = DHCP_SNAME_OFS;
- options_idx_max = DHCP_SNAME_OFS + DHCP_SNAME_LEN;
- 802f1ee: f04f 096c mov.w r9, #108 ; 0x6c
- options_idx = DHCP_FILE_OFS;
- options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN;
- goto again;
- } else if (parse_sname_as_options) {
- parse_sname_as_options = 0;
- options_idx = DHCP_SNAME_OFS;
- 802f1f2: 222c movs r2, #44 ; 0x2c
- #endif /* LWIP_DHCP_BOOTP_FILE */
- /* parse options */
- /* start with options field */
- options_idx = DHCP_OPTIONS_OFS;
- 802f1f4: 4657 mov r7, sl
- 802f1f6: e009 b.n 802f20c <dhcp_recv+0x9c>
- again:
- q = p;
- while((q != NULL) && (options_idx >= q->len)) {
- options_idx -= q->len;
- options_idx_max -= q->len;
- q = q->next;
- 802f1f8: 683f ldr r7, [r7, #0]
- /* parse options to the end of the received packet */
- options_idx_max = p->tot_len;
- again:
- q = p;
- while((q != NULL) && (options_idx >= q->len)) {
- options_idx -= q->len;
- 802f1fa: 1ad2 subs r2, r2, r3
- options_idx_max -= q->len;
- 802f1fc: ebc3 0909 rsb r9, r3, r9
- /* parse options to the end of the received packet */
- options_idx_max = p->tot_len;
- again:
- q = p;
- while((q != NULL) && (options_idx >= q->len)) {
- options_idx -= q->len;
- 802f200: b292 uxth r2, r2
- options_idx_max -= q->len;
- 802f202: fa1f f989 uxth.w r9, r9
- options_idx = DHCP_OPTIONS_OFS;
- /* parse options to the end of the received packet */
- options_idx_max = p->tot_len;
- again:
- q = p;
- while((q != NULL) && (options_idx >= q->len)) {
- 802f206: 2f00 cmp r7, #0
- 802f208: f000 8177 beq.w 802f4fa <dhcp_recv+0x38a>
- 802f20c: 897b ldrh r3, [r7, #10]
- 802f20e: 429a cmp r2, r3
- 802f210: d2f2 bcs.n 802f1f8 <dhcp_recv+0x88>
- if (q == NULL) {
- return ERR_BUF;
- }
- offset = options_idx;
- offset_max = options_idx_max;
- options = (u8_t*)q->payload;
- 802f212: 6878 ldr r0, [r7, #4]
- 802f214: 9003 str r0, [sp, #12]
- 802f216: e0db b.n 802f3d0 <dhcp_recv+0x260>
- u8_t len;
- u8_t decode_len = 0;
- int decode_idx = -1;
- u16_t val_offset = offset + 2;
- /* len byte might be in the next pbuf */
- if (offset + 1 < q->len) {
- 802f218: 897b ldrh r3, [r7, #10]
- 802f21a: 1c50 adds r0, r2, #1
- 802f21c: 4298 cmp r0, r3
- 802f21e: da03 bge.n 802f228 <dhcp_recv+0xb8>
- len = options[offset + 1];
- 802f220: 9803 ldr r0, [sp, #12]
- 802f222: 1883 adds r3, r0, r2
- 802f224: 785b ldrb r3, [r3, #1]
- 802f226: e003 b.n 802f230 <dhcp_recv+0xc0>
- } else {
- len = (q->next != NULL ? ((u8_t*)q->next->payload)[0] : 0);
- 802f228: 683b ldr r3, [r7, #0]
- 802f22a: b10b cbz r3, 802f230 <dhcp_recv+0xc0>
- 802f22c: 685b ldr r3, [r3, #4]
- 802f22e: 781b ldrb r3, [r3, #0]
- }
- /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */
- decode_len = len;
- switch(op) {
- 802f230: 2933 cmp r1, #51 ; 0x33
- 802f232: d038 beq.n 802f2a6 <dhcp_recv+0x136>
- 802f234: d807 bhi.n 802f246 <dhcp_recv+0xd6>
- 802f236: 2901 cmp r1, #1
- 802f238: d019 beq.n 802f26e <dhcp_recv+0xfe>
- 802f23a: d311 bcc.n 802f260 <dhcp_recv+0xf0>
- 802f23c: 2903 cmp r1, #3
- 802f23e: d01d beq.n 802f27c <dhcp_recv+0x10c>
- 802f240: 2906 cmp r1, #6
- 802f242: d155 bne.n 802f2f0 <dhcp_recv+0x180>
- 802f244: e021 b.n 802f28a <dhcp_recv+0x11a>
- 802f246: 2936 cmp r1, #54 ; 0x36
- 802f248: d03d beq.n 802f2c6 <dhcp_recv+0x156>
- 802f24a: d804 bhi.n 802f256 <dhcp_recv+0xe6>
- 802f24c: 2934 cmp r1, #52 ; 0x34
- 802f24e: d031 beq.n 802f2b4 <dhcp_recv+0x144>
- 802f250: 2935 cmp r1, #53 ; 0x35
- 802f252: d14d bne.n 802f2f0 <dhcp_recv+0x180>
- 802f254: e035 b.n 802f2c2 <dhcp_recv+0x152>
- 802f256: 293a cmp r1, #58 ; 0x3a
- 802f258: d03c beq.n 802f2d4 <dhcp_recv+0x164>
- 802f25a: 293b cmp r1, #59 ; 0x3b
- 802f25c: d148 bne.n 802f2f0 <dhcp_recv+0x180>
- 802f25e: e040 b.n 802f2e2 <dhcp_recv+0x172>
- /* case(DHCP_OPTION_END): handled above */
- case(DHCP_OPTION_PAD):
- /* special option: no len encoded */
- decode_len = len = 0;
- /* will be increased below */
- offset--;
- 802f260: 1e51 subs r1, r2, #1
- decode_len = len;
- switch(op) {
- /* case(DHCP_OPTION_END): handled above */
- case(DHCP_OPTION_PAD):
- /* special option: no len encoded */
- decode_len = len = 0;
- 802f262: 2300 movs r3, #0
- /* will be increased below */
- offset--;
- 802f264: b289 uxth r1, r1
- /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */
- while((q != NULL) && (options[offset] != DHCP_OPTION_END) && (offset < offset_max)) {
- u8_t op = options[offset];
- u8_t len;
- u8_t decode_len = 0;
- int decode_idx = -1;
- 802f266: f04f 34ff mov.w r4, #4294967295
- decode_len = len;
- switch(op) {
- /* case(DHCP_OPTION_END): handled above */
- case(DHCP_OPTION_PAD):
- /* special option: no len encoded */
- decode_len = len = 0;
- 802f26a: 461e mov r6, r3
- 802f26c: e044 b.n 802f2f8 <dhcp_recv+0x188>
- /* will be increased below */
- offset--;
- break;
- case(DHCP_OPTION_SUBNET_MASK):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- 802f26e: 2b04 cmp r3, #4
- 802f270: f040 8143 bne.w 802f4fa <dhcp_recv+0x38a>
- 802f274: 461e mov r6, r3
- 802f276: 4611 mov r1, r2
- decode_idx = DHCP_OPTION_IDX_SUBNET_MASK;
- 802f278: 2406 movs r4, #6
- 802f27a: e03d b.n 802f2f8 <dhcp_recv+0x188>
- break;
- case(DHCP_OPTION_ROUTER):
- decode_len = 4; /* only copy the first given router */
- LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;);
- 802f27c: 2b03 cmp r3, #3
- 802f27e: f240 813c bls.w 802f4fa <dhcp_recv+0x38a>
- 802f282: 4611 mov r1, r2
- decode_idx = DHCP_OPTION_IDX_ROUTER;
- 802f284: 2407 movs r4, #7
- case(DHCP_OPTION_SUBNET_MASK):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_SUBNET_MASK;
- break;
- case(DHCP_OPTION_ROUTER):
- decode_len = 4; /* only copy the first given router */
- 802f286: 2604 movs r6, #4
- 802f288: e036 b.n 802f2f8 <dhcp_recv+0x188>
- LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_ROUTER;
- break;
- case(DHCP_OPTION_DNS_SERVER):
- /* special case: there might be more than one server */
- LWIP_ERROR("len % 4 == 0", len % 4 == 0, return ERR_VAL;);
- 802f28a: 0799 lsls r1, r3, #30
- 802f28c: f040 8135 bne.w 802f4fa <dhcp_recv+0x38a>
- /* limit number of DNS servers */
- decode_len = LWIP_MIN(len, 4 * DNS_MAX_SERVERS);
- 802f290: 2b08 cmp r3, #8
- 802f292: bf34 ite cc
- 802f294: 461e movcc r6, r3
- 802f296: 2608 movcs r6, #8
- 802f298: b2f6 uxtb r6, r6
- LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;);
- 802f29a: 42b3 cmp r3, r6
- 802f29c: f0c0 812d bcc.w 802f4fa <dhcp_recv+0x38a>
- 802f2a0: 4611 mov r1, r2
- decode_idx = DHCP_OPTION_IDX_DNS_SERVER;
- 802f2a2: 2408 movs r4, #8
- 802f2a4: e028 b.n 802f2f8 <dhcp_recv+0x188>
- break;
- case(DHCP_OPTION_LEASE_TIME):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- 802f2a6: 2b04 cmp r3, #4
- 802f2a8: f040 8127 bne.w 802f4fa <dhcp_recv+0x38a>
- 802f2ac: 461e mov r6, r3
- 802f2ae: 4611 mov r1, r2
- decode_idx = DHCP_OPTION_IDX_LEASE_TIME;
- 802f2b0: 2403 movs r4, #3
- 802f2b2: e021 b.n 802f2f8 <dhcp_recv+0x188>
- break;
- case(DHCP_OPTION_OVERLOAD):
- LWIP_ERROR("len == 1", len == 1, return ERR_VAL;);
- 802f2b4: 2b01 cmp r3, #1
- 802f2b6: f040 8120 bne.w 802f4fa <dhcp_recv+0x38a>
- 802f2ba: 461e mov r6, r3
- 802f2bc: 4611 mov r1, r2
- decode_idx = DHCP_OPTION_IDX_OVERLOAD;
- 802f2be: 2400 movs r4, #0
- 802f2c0: e01a b.n 802f2f8 <dhcp_recv+0x188>
- break;
- case(DHCP_OPTION_MESSAGE_TYPE):
- LWIP_ERROR("len == 1", len == 1, return ERR_VAL;);
- 802f2c2: 2b01 cmp r3, #1
- 802f2c4: e007 b.n 802f2d6 <dhcp_recv+0x166>
- decode_idx = DHCP_OPTION_IDX_MSG_TYPE;
- break;
- case(DHCP_OPTION_SERVER_ID):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- 802f2c6: 2b04 cmp r3, #4
- 802f2c8: f040 8117 bne.w 802f4fa <dhcp_recv+0x38a>
- 802f2cc: 461e mov r6, r3
- 802f2ce: 4611 mov r1, r2
- decode_idx = DHCP_OPTION_IDX_SERVER_ID;
- 802f2d0: 2402 movs r4, #2
- 802f2d2: e011 b.n 802f2f8 <dhcp_recv+0x188>
- break;
- case(DHCP_OPTION_T1):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- 802f2d4: 2b04 cmp r3, #4
- 802f2d6: f040 8110 bne.w 802f4fa <dhcp_recv+0x38a>
- 802f2da: 461e mov r6, r3
- 802f2dc: 4611 mov r1, r2
- decode_idx = DHCP_OPTION_IDX_T1;
- 802f2de: 461c mov r4, r3
- 802f2e0: e00a b.n 802f2f8 <dhcp_recv+0x188>
- break;
- case(DHCP_OPTION_T2):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- 802f2e2: 2b04 cmp r3, #4
- 802f2e4: f040 8109 bne.w 802f4fa <dhcp_recv+0x38a>
- 802f2e8: 461e mov r6, r3
- 802f2ea: 4611 mov r1, r2
- decode_idx = DHCP_OPTION_IDX_T2;
- 802f2ec: 2405 movs r4, #5
- 802f2ee: e003 b.n 802f2f8 <dhcp_recv+0x188>
- } else {
- len = (q->next != NULL ? ((u8_t*)q->next->payload)[0] : 0);
- }
- /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */
- decode_len = len;
- switch(op) {
- 802f2f0: 4611 mov r1, r2
- /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */
- while((q != NULL) && (options[offset] != DHCP_OPTION_END) && (offset < offset_max)) {
- u8_t op = options[offset];
- u8_t len;
- u8_t decode_len = 0;
- int decode_idx = -1;
- 802f2f2: f04f 34ff mov.w r4, #4294967295
- case(DHCP_OPTION_T2):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_T2;
- break;
- default:
- decode_len = 0;
- 802f2f6: 2600 movs r6, #0
- LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", op));
- break;
- }
- offset += len + 2;
- 802f2f8: 3102 adds r1, #2
- 802f2fa: fa13 f381 uxtah r3, r3, r1
- 802f2fe: b29b uxth r3, r3
- 802f300: 9301 str r3, [sp, #4]
- if (decode_len > 0) {
- 802f302: 2e00 cmp r6, #0
- 802f304: d04f beq.n 802f3a6 <dhcp_recv+0x236>
- while((q != NULL) && (options[offset] != DHCP_OPTION_END) && (offset < offset_max)) {
- u8_t op = options[offset];
- u8_t len;
- u8_t decode_len = 0;
- int decode_idx = -1;
- u16_t val_offset = offset + 2;
- 802f306: 3202 adds r2, #2
- 802f308: b292 uxth r2, r2
- LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", op));
- break;
- }
- offset += len + 2;
- if (decode_len > 0) {
- u32_t value = 0;
- 802f30a: a90a add r1, sp, #40 ; 0x28
- while((q != NULL) && (options[offset] != DHCP_OPTION_END) && (offset < offset_max)) {
- u8_t op = options[offset];
- u8_t len;
- u8_t decode_len = 0;
- int decode_idx = -1;
- u16_t val_offset = offset + 2;
- 802f30c: 9205 str r2, [sp, #20]
- LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", op));
- break;
- }
- offset += len + 2;
- if (decode_len > 0) {
- u32_t value = 0;
- 802f30e: 2300 movs r3, #0
- /**
- * If an incoming DHCP message is in response to us, then trigger the state machine
- */
- static void
- dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- 802f310: 4a4b ldr r2, [pc, #300] ; (802f440 <dhcp_recv+0x2d0>)
- LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", op));
- break;
- }
- offset += len + 2;
- if (decode_len > 0) {
- u32_t value = 0;
- 802f312: f841 3d04 str.w r3, [r1, #-4]!
- /**
- * If an incoming DHCP message is in response to us, then trigger the state machine
- */
- static void
- dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- 802f316: eb02 0284 add.w r2, r2, r4, lsl #2
- LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", op));
- break;
- }
- offset += len + 2;
- if (decode_len > 0) {
- u32_t value = 0;
- 802f31a: 9104 str r1, [sp, #16]
- /**
- * If an incoming DHCP message is in response to us, then trigger the state machine
- */
- static void
- dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- 802f31c: 9206 str r2, [sp, #24]
- 802f31e: 9302 str r3, [sp, #8]
- 802f320: 9805 ldr r0, [sp, #20]
- 802f322: 9902 ldr r1, [sp, #8]
- if (decode_len > 0) {
- u32_t value = 0;
- u16_t copy_len;
- decode_next:
- LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX);
- if (!dhcp_option_given(dhcp, decode_idx)) {
- 802f324: 4a45 ldr r2, [pc, #276] ; (802f43c <dhcp_recv+0x2cc>)
- /**
- * If an incoming DHCP message is in response to us, then trigger the state machine
- */
- static void
- dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- 802f326: 1843 adds r3, r0, r1
- if (decode_len > 0) {
- u32_t value = 0;
- u16_t copy_len;
- decode_next:
- LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX);
- if (!dhcp_option_given(dhcp, decode_idx)) {
- 802f328: 4844 ldr r0, [pc, #272] ; (802f43c <dhcp_recv+0x2cc>)
- 802f32a: 18a2 adds r2, r4, r2
- 802f32c: 9207 str r2, [sp, #28]
- 802f32e: 5c22 ldrb r2, [r4, r0]
- /**
- * If an incoming DHCP message is in response to us, then trigger the state machine
- */
- static void
- dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- 802f330: ebc1 0c06 rsb ip, r1, r6
- 802f334: b29b uxth r3, r3
- 802f336: fa5f fc8c uxtb.w ip, ip
- if (decode_len > 0) {
- u32_t value = 0;
- u16_t copy_len;
- decode_next:
- LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX);
- if (!dhcp_option_given(dhcp, decode_idx)) {
- 802f33a: 2a00 cmp r2, #0
- 802f33c: d133 bne.n 802f3a6 <dhcp_recv+0x236>
- copy_len = LWIP_MIN(decode_len, 4);
- pbuf_copy_partial(q, &value, copy_len, val_offset);
- 802f33e: f1bc 0f03 cmp.w ip, #3
- 802f342: bf94 ite ls
- 802f344: 4662 movls r2, ip
- 802f346: 2204 movhi r2, #4
- 802f348: 4638 mov r0, r7
- 802f34a: 9904 ldr r1, [sp, #16]
- 802f34c: f8cd c000 str.w ip, [sp]
- 802f350: f000 feaa bl 80300a8 <pbuf_copy_partial>
- if (decode_len > 4) {
- 802f354: f8dd c000 ldr.w ip, [sp]
- 802f358: f1bc 0f04 cmp.w ip, #4
- 802f35c: d90f bls.n 802f37e <dhcp_recv+0x20e>
- /* decode more than one u32_t */
- LWIP_ERROR("decode_len % 4 == 0", decode_len % 4 == 0, return ERR_VAL;);
- 802f35e: f01c 0f03 tst.w ip, #3
- 802f362: f040 80ca bne.w 802f4fa <dhcp_recv+0x38a>
- dhcp_got_option(dhcp, decode_idx);
- 802f366: 9907 ldr r1, [sp, #28]
- dhcp_set_option_value(dhcp, decode_idx, htonl(value));
- 802f368: 9809 ldr r0, [sp, #36] ; 0x24
- copy_len = LWIP_MIN(decode_len, 4);
- pbuf_copy_partial(q, &value, copy_len, val_offset);
- if (decode_len > 4) {
- /* decode more than one u32_t */
- LWIP_ERROR("decode_len % 4 == 0", decode_len % 4 == 0, return ERR_VAL;);
- dhcp_got_option(dhcp, decode_idx);
- 802f36a: 2201 movs r2, #1
- 802f36c: 700a strb r2, [r1, #0]
- dhcp_set_option_value(dhcp, decode_idx, htonl(value));
- 802f36e: f7ff fc19 bl 802eba4 <lwip_htonl>
- 802f372: 9b02 ldr r3, [sp, #8]
- 802f374: 9906 ldr r1, [sp, #24]
- decode_len -= 4;
- val_offset += 4;
- decode_idx++;
- 802f376: 3401 adds r4, #1
- pbuf_copy_partial(q, &value, copy_len, val_offset);
- if (decode_len > 4) {
- /* decode more than one u32_t */
- LWIP_ERROR("decode_len % 4 == 0", decode_len % 4 == 0, return ERR_VAL;);
- dhcp_got_option(dhcp, decode_idx);
- dhcp_set_option_value(dhcp, decode_idx, htonl(value));
- 802f378: 50c8 str r0, [r1, r3]
- 802f37a: 3304 adds r3, #4
- 802f37c: e7cf b.n 802f31e <dhcp_recv+0x1ae>
- decode_len -= 4;
- val_offset += 4;
- decode_idx++;
- goto decode_next;
- } else if (decode_len == 4) {
- 802f37e: d104 bne.n 802f38a <dhcp_recv+0x21a>
- value = ntohl(value);
- 802f380: 9809 ldr r0, [sp, #36] ; 0x24
- 802f382: f7ff fc11 bl 802eba8 <lwip_ntohl>
- 802f386: 9009 str r0, [sp, #36] ; 0x24
- 802f388: e006 b.n 802f398 <dhcp_recv+0x228>
- } else {
- LWIP_ERROR("invalid decode_len", decode_len == 1, return ERR_VAL;);
- 802f38a: f1bc 0f01 cmp.w ip, #1
- 802f38e: f040 80b4 bne.w 802f4fa <dhcp_recv+0x38a>
- value = ((u8_t*)&value)[0];
- 802f392: f89d 3024 ldrb.w r3, [sp, #36] ; 0x24
- 802f396: 9309 str r3, [sp, #36] ; 0x24
- }
- dhcp_got_option(dhcp, decode_idx);
- 802f398: 4a28 ldr r2, [pc, #160] ; (802f43c <dhcp_recv+0x2cc>)
- dhcp_set_option_value(dhcp, decode_idx, value);
- 802f39a: 4829 ldr r0, [pc, #164] ; (802f440 <dhcp_recv+0x2d0>)
- value = ntohl(value);
- } else {
- LWIP_ERROR("invalid decode_len", decode_len == 1, return ERR_VAL;);
- value = ((u8_t*)&value)[0];
- }
- dhcp_got_option(dhcp, decode_idx);
- 802f39c: 2301 movs r3, #1
- 802f39e: 5513 strb r3, [r2, r4]
- dhcp_set_option_value(dhcp, decode_idx, value);
- 802f3a0: 9b09 ldr r3, [sp, #36] ; 0x24
- 802f3a2: f840 3024 str.w r3, [r0, r4, lsl #2]
- }
- }
- if (offset >= q->len) {
- 802f3a6: 897b ldrh r3, [r7, #10]
- 802f3a8: 9901 ldr r1, [sp, #4]
- 802f3aa: 4299 cmp r1, r3
- 802f3ac: d30f bcc.n 802f3ce <dhcp_recv+0x25e>
- offset -= q->len;
- 802f3ae: 1aca subs r2, r1, r3
- offset_max -= q->len;
- 802f3b0: ebc3 0909 rsb r9, r3, r9
- dhcp_got_option(dhcp, decode_idx);
- dhcp_set_option_value(dhcp, decode_idx, value);
- }
- }
- if (offset >= q->len) {
- offset -= q->len;
- 802f3b4: b292 uxth r2, r2
- offset_max -= q->len;
- 802f3b6: fa1f f989 uxth.w r9, r9
- if ((offset < offset_max) && offset_max) {
- 802f3ba: 454a cmp r2, r9
- dhcp_got_option(dhcp, decode_idx);
- dhcp_set_option_value(dhcp, decode_idx, value);
- }
- }
- if (offset >= q->len) {
- offset -= q->len;
- 802f3bc: 9201 str r2, [sp, #4]
- offset_max -= q->len;
- if ((offset < offset_max) && offset_max) {
- 802f3be: d303 bcc.n 802f3c8 <dhcp_recv+0x258>
- break;
- }
- }
- }
- /* is this an overloaded message? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) {
- 802f3c0: 4a1e ldr r2, [pc, #120] ; (802f43c <dhcp_recv+0x2cc>)
- 802f3c2: 7813 ldrb r3, [r2, #0]
- 802f3c4: b963 cbnz r3, 802f3e0 <dhcp_recv+0x270>
- 802f3c6: e09f b.n 802f508 <dhcp_recv+0x398>
- }
- if (offset >= q->len) {
- offset -= q->len;
- offset_max -= q->len;
- if ((offset < offset_max) && offset_max) {
- q = q->next;
- 802f3c8: 683f ldr r7, [r7, #0]
- LWIP_ASSERT("next pbuf was null", q);
- options = (u8_t*)q->payload;
- 802f3ca: 687b ldr r3, [r7, #4]
- 802f3cc: 9303 str r3, [sp, #12]
- u32_t value = 0;
- u16_t copy_len;
- decode_next:
- LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX);
- if (!dhcp_option_given(dhcp, decode_idx)) {
- copy_len = LWIP_MIN(decode_len, 4);
- 802f3ce: 9a01 ldr r2, [sp, #4]
- }
- offset = options_idx;
- offset_max = options_idx_max;
- options = (u8_t*)q->payload;
- /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */
- while((q != NULL) && (options[offset] != DHCP_OPTION_END) && (offset < offset_max)) {
- 802f3d0: 9803 ldr r0, [sp, #12]
- 802f3d2: 5c81 ldrb r1, [r0, r2]
- 802f3d4: 29ff cmp r1, #255 ; 0xff
- 802f3d6: d0f3 beq.n 802f3c0 <dhcp_recv+0x250>
- 802f3d8: 454a cmp r2, r9
- 802f3da: f4ff af1d bcc.w 802f218 <dhcp_recv+0xa8>
- 802f3de: e7ef b.n 802f3c0 <dhcp_recv+0x250>
- }
- }
- }
- /* is this an overloaded message? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) {
- u32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD);
- 802f3e0: 4b17 ldr r3, [pc, #92] ; (802f440 <dhcp_recv+0x2d0>)
- dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD);
- 802f3e2: 4916 ldr r1, [pc, #88] ; (802f43c <dhcp_recv+0x2cc>)
- }
- }
- }
- /* is this an overloaded message? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) {
- u32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD);
- 802f3e4: 681b ldr r3, [r3, #0]
- dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD);
- 802f3e6: 2200 movs r2, #0
- if (overload == DHCP_OVERLOAD_FILE) {
- 802f3e8: 2b01 cmp r3, #1
- }
- }
- /* is this an overloaded message? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) {
- u32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD);
- dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD);
- 802f3ea: 700a strb r2, [r1, #0]
- if (overload == DHCP_OVERLOAD_FILE) {
- 802f3ec: f000 8093 beq.w 802f516 <dhcp_recv+0x3a6>
- parse_file_as_options = 1;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n"));
- } else if (overload == DHCP_OVERLOAD_SNAME) {
- 802f3f0: 2b02 cmp r3, #2
- 802f3f2: f43f aefa beq.w 802f1ea <dhcp_recv+0x7a>
- parse_sname_as_options = 1;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n"));
- } else if (overload == DHCP_OVERLOAD_SNAME_FILE) {
- 802f3f6: 2b03 cmp r3, #3
- 802f3f8: f040 8086 bne.w 802f508 <dhcp_recv+0x398>
- 802f3fc: e089 b.n 802f512 <dhcp_recv+0x3a2>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP_OPTION_MESSAGE_TYPE option not found\n"));
- goto free_pbuf_and_return;
- }
- /* read DHCP message type */
- msg_type = (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE);
- 802f3fe: 4a10 ldr r2, [pc, #64] ; (802f440 <dhcp_recv+0x2d0>)
- 802f400: 7911 ldrb r1, [r2, #4]
- /* message type is DHCP ACK? */
- if (msg_type == DHCP_ACK) {
- 802f402: 2905 cmp r1, #5
- 802f404: d140 bne.n 802f488 <dhcp_recv+0x318>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_ACK received\n"));
- /* in requesting state? */
- if (dhcp->state == DHCP_REQUESTING) {
- 802f406: f898 100c ldrb.w r1, [r8, #12]
- 802f40a: 2901 cmp r1, #1
- 802f40c: d135 bne.n 802f47a <dhcp_recv+0x30a>
- * @param netif the netif under DHCP control
- */
- static void
- dhcp_handle_ack(struct netif *netif)
- {
- struct dhcp *dhcp = netif->dhcp;
- 802f40e: 6a2c ldr r4, [r5, #32]
- #if LWIP_DHCP_BOOTP_FILE
- ip_addr_set_zero(&dhcp->offered_si_addr);
- #endif /* LWIP_DHCP_BOOTP_FILE */
- /* lease time given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_LEASE_TIME)) {
- 802f410: 78db ldrb r3, [r3, #3]
- #if LWIP_DNS
- u8_t n;
- #endif /* LWIP_DNS */
- /* clear options we might not get from the ACK */
- ip_addr_set_zero(&dhcp->offered_sn_mask);
- 802f412: f8c4 b028 str.w fp, [r4, #40] ; 0x28
- ip_addr_set_zero(&dhcp->offered_gw_addr);
- 802f416: f8c4 b02c str.w fp, [r4, #44] ; 0x2c
- #if LWIP_DHCP_BOOTP_FILE
- ip_addr_set_zero(&dhcp->offered_si_addr);
- #endif /* LWIP_DHCP_BOOTP_FILE */
- /* lease time given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_LEASE_TIME)) {
- 802f41a: b10b cbz r3, 802f420 <dhcp_recv+0x2b0>
- /* remember offered lease time */
- dhcp->offered_t0_lease = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_LEASE_TIME);
- 802f41c: 68d3 ldr r3, [r2, #12]
- 802f41e: 6323 str r3, [r4, #48] ; 0x30
- }
- /* renewal period given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T1)) {
- 802f420: 4b06 ldr r3, [pc, #24] ; (802f43c <dhcp_recv+0x2cc>)
- 802f422: 791a ldrb r2, [r3, #4]
- 802f424: b112 cbz r2, 802f42c <dhcp_recv+0x2bc>
- /* remember given renewal period */
- dhcp->offered_t1_renew = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T1);
- 802f426: 4a06 ldr r2, [pc, #24] ; (802f440 <dhcp_recv+0x2d0>)
- 802f428: 6912 ldr r2, [r2, #16]
- 802f42a: e001 b.n 802f430 <dhcp_recv+0x2c0>
- } else {
- /* calculate safe periods for renewal */
- dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2;
- 802f42c: 6b22 ldr r2, [r4, #48] ; 0x30
- 802f42e: 0852 lsrs r2, r2, #1
- }
- /* renewal period given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T2)) {
- 802f430: 795b ldrb r3, [r3, #5]
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T1)) {
- /* remember given renewal period */
- dhcp->offered_t1_renew = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T1);
- } else {
- /* calculate safe periods for renewal */
- dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2;
- 802f432: 6362 str r2, [r4, #52] ; 0x34
- }
- /* renewal period given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T2)) {
- 802f434: b133 cbz r3, 802f444 <dhcp_recv+0x2d4>
- /* remember given rebind period */
- dhcp->offered_t2_rebind = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T2);
- 802f436: 4b02 ldr r3, [pc, #8] ; (802f440 <dhcp_recv+0x2d0>)
- 802f438: 695b ldr r3, [r3, #20]
- 802f43a: e004 b.n 802f446 <dhcp_recv+0x2d6>
- 802f43c: 2000e268 .word 0x2000e268
- 802f440: 2000e274 .word 0x2000e274
- } else {
- /* calculate safe periods for rebinding */
- dhcp->offered_t2_rebind = dhcp->offered_t0_lease;
- 802f444: 6b23 ldr r3, [r4, #48] ; 0x30
- 802f446: 63a3 str r3, [r4, #56] ; 0x38
- }
- /* (y)our internet address */
- ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr);
- 802f448: 68a3 ldr r3, [r4, #8]
- boot file name copied in dhcp_parse_reply if not overloaded */
- ip_addr_copy(dhcp->offered_si_addr, dhcp->msg_in->siaddr);
- #endif /* LWIP_DHCP_BOOTP_FILE */
- /* subnet mask given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)) {
- 802f44a: 4a39 ldr r2, [pc, #228] ; (802f530 <dhcp_recv+0x3c0>)
- /* calculate safe periods for rebinding */
- dhcp->offered_t2_rebind = dhcp->offered_t0_lease;
- }
- /* (y)our internet address */
- ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr);
- 802f44c: 691b ldr r3, [r3, #16]
- 802f44e: 6263 str r3, [r4, #36] ; 0x24
- boot file name copied in dhcp_parse_reply if not overloaded */
- ip_addr_copy(dhcp->offered_si_addr, dhcp->msg_in->siaddr);
- #endif /* LWIP_DHCP_BOOTP_FILE */
- /* subnet mask given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)) {
- 802f450: 7993 ldrb r3, [r2, #6]
- 802f452: 4616 mov r6, r2
- 802f454: b12b cbz r3, 802f462 <dhcp_recv+0x2f2>
- /* remember given subnet mask */
- ip4_addr_set_u32(&dhcp->offered_sn_mask, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)));
- 802f456: 4b37 ldr r3, [pc, #220] ; (802f534 <dhcp_recv+0x3c4>)
- 802f458: 6998 ldr r0, [r3, #24]
- 802f45a: f7ff fba3 bl 802eba4 <lwip_htonl>
- dhcp->subnet_mask_given = 1;
- 802f45e: 2301 movs r3, #1
- #endif /* LWIP_DHCP_BOOTP_FILE */
- /* subnet mask given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)) {
- /* remember given subnet mask */
- ip4_addr_set_u32(&dhcp->offered_sn_mask, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)));
- 802f460: 62a0 str r0, [r4, #40] ; 0x28
- dhcp->subnet_mask_given = 1;
- } else {
- dhcp->subnet_mask_given = 0;
- 802f462: 73a3 strb r3, [r4, #14]
- }
- /* gateway router */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_ROUTER)) {
- 802f464: 79f3 ldrb r3, [r6, #7]
- 802f466: b123 cbz r3, 802f472 <dhcp_recv+0x302>
- ip4_addr_set_u32(&dhcp->offered_gw_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_ROUTER)));
- 802f468: 4b32 ldr r3, [pc, #200] ; (802f534 <dhcp_recv+0x3c4>)
- 802f46a: 69d8 ldr r0, [r3, #28]
- 802f46c: f7ff fb9a bl 802eba4 <lwip_htonl>
- 802f470: 62e0 str r0, [r4, #44] ; 0x2c
- /* in requesting state? */
- if (dhcp->state == DHCP_REQUESTING) {
- dhcp_handle_ack(netif);
- #if DHCP_DOES_ARP_CHECK
- /* check if the acknowledged lease address is already in use */
- dhcp_check(netif);
- 802f472: 4628 mov r0, r5
- 802f474: f7ff fe0a bl 802f08c <dhcp_check>
- 802f478: e03f b.n 802f4fa <dhcp_recv+0x38a>
- /* bind interface to the acknowledged lease address */
- dhcp_bind(netif);
- #endif
- }
- /* already bound to the given lease address? */
- else if ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING)) {
- 802f47a: 3903 subs r1, #3
- 802f47c: 2902 cmp r1, #2
- 802f47e: d83c bhi.n 802f4fa <dhcp_recv+0x38a>
- dhcp_bind(netif);
- 802f480: 4628 mov r0, r5
- 802f482: f7ff fe16 bl 802f0b2 <dhcp_bind>
- 802f486: e038 b.n 802f4fa <dhcp_recv+0x38a>
- }
- }
- /* received a DHCP_NAK in appropriate state? */
- else if ((msg_type == DHCP_NAK) &&
- 802f488: 2906 cmp r1, #6
- 802f48a: d121 bne.n 802f4d0 <dhcp_recv+0x360>
- 802f48c: f898 300c ldrb.w r3, [r8, #12]
- 802f490: 2b05 cmp r3, #5
- 802f492: d832 bhi.n 802f4fa <dhcp_recv+0x38a>
- 802f494: f998 300c ldrsb.w r3, [r8, #12]
- 802f498: f04f 42b8 mov.w r2, #1543503872 ; 0x5c000000
- 802f49c: 409a lsls r2, r3
- 802f49e: d52c bpl.n 802f4fa <dhcp_recv+0x38a>
- {
- struct dhcp *dhcp = netif->dhcp;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n",
- (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* Set the interface down since the address must no longer be used, as per RFC2131 */
- netif_set_down(netif);
- 802f4a0: 4628 mov r0, r5
- * @param netif the netif under DHCP control
- */
- static void
- dhcp_handle_nak(struct netif *netif)
- {
- struct dhcp *dhcp = netif->dhcp;
- 802f4a2: 6a2c ldr r4, [r5, #32]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n",
- (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* Set the interface down since the address must no longer be used, as per RFC2131 */
- netif_set_down(netif);
- 802f4a4: f000 fc6e bl 802fd84 <netif_set_down>
- /* remove IP address from interface */
- netif_set_ipaddr(netif, IP_ADDR_ANY);
- 802f4a8: 4628 mov r0, r5
- 802f4aa: 4923 ldr r1, [pc, #140] ; (802f538 <dhcp_recv+0x3c8>)
- 802f4ac: f000 fbba bl 802fc24 <netif_set_ipaddr>
- netif_set_gw(netif, IP_ADDR_ANY);
- 802f4b0: 4628 mov r0, r5
- 802f4b2: 4921 ldr r1, [pc, #132] ; (802f538 <dhcp_recv+0x3c8>)
- 802f4b4: f000 fbf2 bl 802fc9c <netif_set_gw>
- netif_set_netmask(netif, IP_ADDR_ANY);
- 802f4b8: 4628 mov r0, r5
- 802f4ba: 491f ldr r1, [pc, #124] ; (802f538 <dhcp_recv+0x3c8>)
- 802f4bc: f000 fbf2 bl 802fca4 <netif_set_netmask>
- /* Change to a defined state */
- dhcp_set_state(dhcp, DHCP_BACKING_OFF);
- 802f4c0: 4620 mov r0, r4
- 802f4c2: 210c movs r1, #12
- 802f4c4: f7ff fb72 bl 802ebac <dhcp_set_state>
- /* We can immediately restart discovery */
- dhcp_discover(netif);
- 802f4c8: 4628 mov r0, r5
- 802f4ca: f7ff fc7f bl 802edcc <dhcp_discover>
- 802f4ce: e014 b.n 802f4fa <dhcp_recv+0x38a>
- (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING ))) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_NAK received\n"));
- dhcp_handle_nak(netif);
- }
- /* received a DHCP_OFFER in DHCP_SELECTING state? */
- else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_SELECTING)) {
- 802f4d0: 2902 cmp r1, #2
- 802f4d2: d112 bne.n 802f4fa <dhcp_recv+0x38a>
- 802f4d4: f898 100c ldrb.w r1, [r8, #12]
- 802f4d8: 2906 cmp r1, #6
- 802f4da: d10e bne.n 802f4fa <dhcp_recv+0x38a>
- {
- struct dhcp *dhcp = netif->dhcp;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n",
- (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* obtain the server address */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) {
- 802f4dc: 789b ldrb r3, [r3, #2]
- dhcp_handle_nak(netif);
- }
- /* received a DHCP_OFFER in DHCP_SELECTING state? */
- else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_SELECTING)) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_OFFER received in DHCP_SELECTING state\n"));
- dhcp->request_timeout = 0;
- 802f4de: f8a8 b01a strh.w fp, [r8, #26]
- * @param netif the netif under DHCP control
- */
- static void
- dhcp_handle_offer(struct netif *netif)
- {
- struct dhcp *dhcp = netif->dhcp;
- 802f4e2: 6a2c ldr r4, [r5, #32]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n",
- (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* obtain the server address */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) {
- 802f4e4: b14b cbz r3, 802f4fa <dhcp_recv+0x38a>
- ip4_addr_set_u32(&dhcp->server_ip_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID)));
- 802f4e6: 6890 ldr r0, [r2, #8]
- 802f4e8: f7ff fb5c bl 802eba4 <lwip_htonl>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n",
- ip4_addr_get_u32(&dhcp->server_ip_addr)));
- /* remember offered address */
- ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr);
- 802f4ec: 68a3 ldr r3, [r4, #8]
- struct dhcp *dhcp = netif->dhcp;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n",
- (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* obtain the server address */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) {
- ip4_addr_set_u32(&dhcp->server_ip_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID)));
- 802f4ee: 6220 str r0, [r4, #32]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n",
- ip4_addr_get_u32(&dhcp->server_ip_addr)));
- /* remember offered address */
- ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr);
- 802f4f0: 691b ldr r3, [r3, #16]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n",
- ip4_addr_get_u32(&dhcp->offered_ip_addr)));
- dhcp_select(netif);
- 802f4f2: 4628 mov r0, r5
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) {
- ip4_addr_set_u32(&dhcp->server_ip_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID)));
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n",
- ip4_addr_get_u32(&dhcp->server_ip_addr)));
- /* remember offered address */
- ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr);
- 802f4f4: 6263 str r3, [r4, #36] ; 0x24
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n",
- ip4_addr_get_u32(&dhcp->offered_ip_addr)));
- dhcp_select(netif);
- 802f4f6: f7ff fd57 bl 802efa8 <dhcp_select>
- dhcp->request_timeout = 0;
- /* remember offered lease */
- dhcp_handle_offer(netif);
- }
- free_pbuf_and_return:
- dhcp->msg_in = NULL;
- 802f4fa: 2300 movs r3, #0
- 802f4fc: f8c8 3008 str.w r3, [r8, #8]
- pbuf_free(p);
- 802f500: 4650 mov r0, sl
- 802f502: f000 fc83 bl 802fe0c <pbuf_free>
- 802f506: e010 b.n 802f52a <dhcp_recv+0x3ba>
- /* if both are overloaded, parse file first and then sname (RFC 2131 ch. 4.1) */
- parse_file_as_options = 0;
- options_idx = DHCP_FILE_OFS;
- options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN;
- goto again;
- } else if (parse_sname_as_options) {
- 802f508: f1bb 0f00 cmp.w fp, #0
- 802f50c: f47f ae6d bne.w 802f1ea <dhcp_recv+0x7a>
- 802f510: e005 b.n 802f51e <dhcp_recv+0x3ae>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n"));
- } else if (overload == DHCP_OVERLOAD_SNAME) {
- parse_sname_as_options = 1;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n"));
- } else if (overload == DHCP_OVERLOAD_SNAME_FILE) {
- parse_sname_as_options = 1;
- 802f512: f04f 0b01 mov.w fp, #1
- }
- if (parse_file_as_options) {
- /* if both are overloaded, parse file first and then sname (RFC 2131 ch. 4.1) */
- parse_file_as_options = 0;
- options_idx = DHCP_FILE_OFS;
- options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN;
- 802f516: f04f 09ec mov.w r9, #236 ; 0xec
- #endif /* LWIP_DHCP_BOOTP_FILE */
- }
- if (parse_file_as_options) {
- /* if both are overloaded, parse file first and then sname (RFC 2131 ch. 4.1) */
- parse_file_as_options = 0;
- options_idx = DHCP_FILE_OFS;
- 802f51a: 226c movs r2, #108 ; 0x6c
- 802f51c: e66a b.n 802f1f4 <dhcp_recv+0x84>
- goto free_pbuf_and_return;
- }
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n"));
- /* obtain pointer to DHCP message type */
- if (!dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE)) {
- 802f51e: 4b04 ldr r3, [pc, #16] ; (802f530 <dhcp_recv+0x3c0>)
- 802f520: 785a ldrb r2, [r3, #1]
- 802f522: 2a00 cmp r2, #0
- 802f524: f47f af6b bne.w 802f3fe <dhcp_recv+0x28e>
- 802f528: e7e7 b.n 802f4fa <dhcp_recv+0x38a>
- dhcp_handle_offer(netif);
- }
- free_pbuf_and_return:
- dhcp->msg_in = NULL;
- pbuf_free(p);
- }
- 802f52a: b00b add sp, #44 ; 0x2c
- 802f52c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 802f530: 2000e268 .word 0x2000e268
- 802f534: 2000e274 .word 0x2000e274
- 802f538: 08045008 .word 0x08045008
- 0802f53c <dhcp_arp_reply>:
- *
- * @param netif the network interface on which the reply was received
- * @param addr The IP address we received a reply from
- */
- void dhcp_arp_reply(struct netif *netif, ip_addr_t *addr)
- {
- 802f53c: b537 push {r0, r1, r2, r4, r5, lr}
- LWIP_ERROR("netif != NULL", (netif != NULL), return;);
- 802f53e: 4605 mov r5, r0
- 802f540: 2800 cmp r0, #0
- 802f542: d037 beq.n 802f5b4 <dhcp_arp_reply+0x78>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n"));
- /* is a DHCP client doing an ARP check? */
- if ((netif->dhcp != NULL) && (netif->dhcp->state == DHCP_CHECKING)) {
- 802f544: 6a04 ldr r4, [r0, #32]
- 802f546: 2c00 cmp r4, #0
- 802f548: d034 beq.n 802f5b4 <dhcp_arp_reply+0x78>
- 802f54a: 7b23 ldrb r3, [r4, #12]
- 802f54c: 2b08 cmp r3, #8
- 802f54e: d131 bne.n 802f5b4 <dhcp_arp_reply+0x78>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n",
- ip4_addr_get_u32(addr)));
- /* did a host respond with the address we
- were offered by the DHCP server? */
- if (ip_addr_cmp(addr, &netif->dhcp->offered_ip_addr)) {
- 802f550: 680a ldr r2, [r1, #0]
- 802f552: 6a63 ldr r3, [r4, #36] ; 0x24
- 802f554: 429a cmp r2, r3
- 802f556: d12d bne.n 802f5b4 <dhcp_arp_reply+0x78>
- {
- struct dhcp *dhcp = netif->dhcp;
- err_t result = ERR_OK;
- u16_t msecs;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n"));
- dhcp_set_state(dhcp, DHCP_BACKING_OFF);
- 802f558: 4620 mov r0, r4
- 802f55a: 210c movs r1, #12
- 802f55c: f7ff fb26 bl 802ebac <dhcp_set_state>
- /* create and initialize the DHCP message header */
- result = dhcp_create_msg(netif, dhcp, DHCP_DECLINE);
- 802f560: 4628 mov r0, r5
- 802f562: 4621 mov r1, r4
- 802f564: 2204 movs r2, #4
- 802f566: f7ff fb85 bl 802ec74 <dhcp_create_msg>
- if (result == ERR_OK) {
- 802f56a: b9f0 cbnz r0, 802f5aa <dhcp_arp_reply+0x6e>
- dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4);
- 802f56c: 2204 movs r2, #4
- 802f56e: 2132 movs r1, #50 ; 0x32
- 802f570: 4620 mov r0, r4
- 802f572: f7ff fb23 bl 802ebbc <dhcp_option>
- dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr)));
- 802f576: 6a60 ldr r0, [r4, #36] ; 0x24
- 802f578: f7ff fb16 bl 802eba8 <lwip_ntohl>
- 802f57c: 4601 mov r1, r0
- 802f57e: 4620 mov r0, r4
- 802f580: f7ff fb43 bl 802ec0a <dhcp_option_long>
- dhcp_option_trailer(dhcp);
- 802f584: 4620 mov r0, r4
- 802f586: f7ff fb60 bl 802ec4a <dhcp_option_trailer>
- /* resize pbuf to reflect true size of options */
- pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len);
- 802f58a: 8b21 ldrh r1, [r4, #24]
- 802f58c: 6920 ldr r0, [r4, #16]
- 802f58e: 31f0 adds r1, #240 ; 0xf0
- 802f590: b289 uxth r1, r1
- 802f592: f000 fc62 bl 802fe5a <pbuf_realloc>
- /* per section 4.4.4, broadcast DECLINE messages */
- udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif);
- 802f596: 9500 str r5, [sp, #0]
- 802f598: 6860 ldr r0, [r4, #4]
- 802f59a: 6921 ldr r1, [r4, #16]
- 802f59c: 4a06 ldr r2, [pc, #24] ; (802f5b8 <dhcp_arp_reply+0x7c>)
- 802f59e: 2343 movs r3, #67 ; 0x43
- 802f5a0: f003 f9f6 bl 8032990 <udp_sendto_if>
- dhcp_delete_msg(dhcp);
- 802f5a4: 4620 mov r0, r4
- 802f5a6: f7ff fc05 bl 802edb4 <dhcp_delete_msg>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_decline: BACKING OFF\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS,
- ("dhcp_decline: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802f5aa: 7b63 ldrb r3, [r4, #13]
- 802f5ac: 3301 adds r3, #1
- 802f5ae: 7363 strb r3, [r4, #13]
- msecs = 10*1000;
- dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS;
- 802f5b0: 2314 movs r3, #20
- 802f5b2: 8363 strh r3, [r4, #26]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING,
- ("dhcp_arp_reply(): arp reply matched with offered address, declining\n"));
- dhcp_decline(netif);
- }
- }
- }
- 802f5b4: bd3e pop {r1, r2, r3, r4, r5, pc}
- 802f5b6: bf00 nop
- 802f5b8: 08045004 .word 0x08045004
- 0802f5bc <dhcp_renew>:
- *
- * @param netif network interface which must renew its lease
- */
- err_t
- dhcp_renew(struct netif *netif)
- {
- 802f5bc: b573 push {r0, r1, r4, r5, r6, lr}
- struct dhcp *dhcp = netif->dhcp;
- 802f5be: 6a04 ldr r4, [r0, #32]
- *
- * @param netif network interface which must renew its lease
- */
- err_t
- dhcp_renew(struct netif *netif)
- {
- 802f5c0: 4605 mov r5, r0
- struct dhcp *dhcp = netif->dhcp;
- err_t result;
- u16_t msecs;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_renew()\n"));
- dhcp_set_state(dhcp, DHCP_RENEWING);
- 802f5c2: 2105 movs r1, #5
- 802f5c4: 4620 mov r0, r4
- 802f5c6: f7ff faf1 bl 802ebac <dhcp_set_state>
- /* create and initialize the DHCP message header */
- result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST);
- 802f5ca: 4628 mov r0, r5
- 802f5cc: 4621 mov r1, r4
- 802f5ce: 2203 movs r2, #3
- 802f5d0: f7ff fb50 bl 802ec74 <dhcp_create_msg>
- if (result == ERR_OK) {
- 802f5d4: 4606 mov r6, r0
- 802f5d6: b9e0 cbnz r0, 802f612 <dhcp_renew+0x56>
- dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- 802f5d8: 2202 movs r2, #2
- 802f5da: 4620 mov r0, r4
- 802f5dc: 2139 movs r1, #57 ; 0x39
- 802f5de: f7ff faed bl 802ebbc <dhcp_option>
- dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif));
- 802f5e2: 8ca9 ldrh r1, [r5, #36] ; 0x24
- 802f5e4: 4620 mov r0, r4
- 802f5e6: f7ff fb00 bl 802ebea <dhcp_option_short>
- #if LWIP_NETIF_HOSTNAME
- dhcp_option_hostname(dhcp, netif);
- #endif /* LWIP_NETIF_HOSTNAME */
- /* append DHCP message trailer */
- dhcp_option_trailer(dhcp);
- 802f5ea: 4620 mov r0, r4
- 802f5ec: f7ff fb2d bl 802ec4a <dhcp_option_trailer>
- pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len);
- 802f5f0: 8b21 ldrh r1, [r4, #24]
- 802f5f2: 6920 ldr r0, [r4, #16]
- 802f5f4: 31f0 adds r1, #240 ; 0xf0
- 802f5f6: b289 uxth r1, r1
- 802f5f8: f000 fc2f bl 802fe5a <pbuf_realloc>
- udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif);
- 802f5fc: 9500 str r5, [sp, #0]
- 802f5fe: 6860 ldr r0, [r4, #4]
- 802f600: 6921 ldr r1, [r4, #16]
- 802f602: f104 0220 add.w r2, r4, #32
- 802f606: 2343 movs r3, #67 ; 0x43
- 802f608: f003 f9c2 bl 8032990 <udp_sendto_if>
- dhcp_delete_msg(dhcp);
- 802f60c: 4620 mov r0, r4
- 802f60e: f7ff fbd1 bl 802edb4 <dhcp_delete_msg>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802f612: 7b63 ldrb r3, [r4, #13]
- 802f614: 3301 adds r3, #1
- 802f616: b2db uxtb r3, r3
- /* back-off on retries, but to a maximum of 20 seconds */
- msecs = dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000;
- 802f618: 2b09 cmp r3, #9
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802f61a: 7363 strb r3, [r4, #13]
- /* back-off on retries, but to a maximum of 20 seconds */
- msecs = dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000;
- 802f61c: d804 bhi.n 802f628 <dhcp_renew+0x6c>
- 802f61e: f44f 62fa mov.w r2, #2000 ; 0x7d0
- 802f622: 4353 muls r3, r2
- 802f624: b29b uxth r3, r3
- 802f626: e001 b.n 802f62c <dhcp_renew+0x70>
- 802f628: f644 6320 movw r3, #20000 ; 0x4e20
- dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS;
- 802f62c: f44f 72fa mov.w r2, #500 ; 0x1f4
- 802f630: f203 13f3 addw r3, r3, #499 ; 0x1f3
- 802f634: fb93 f3f2 sdiv r3, r3, r2
- 802f638: 8363 strh r3, [r4, #26]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
- }
- 802f63a: 4630 mov r0, r6
- 802f63c: bd7c pop {r2, r3, r4, r5, r6, pc}
- 802f63e: 0000 movs r0, r0
- 0802f640 <dhcp_coarse_tmr>:
- /**
- * The DHCP timer that checks for lease renewal/rebind timeouts.
- */
- void
- dhcp_coarse_tmr()
- {
- 802f640: b538 push {r3, r4, r5, lr}
- struct netif *netif = netif_list;
- 802f642: 4b15 ldr r3, [pc, #84] ; (802f698 <dhcp_coarse_tmr+0x58>)
- 802f644: 4d15 ldr r5, [pc, #84] ; (802f69c <dhcp_coarse_tmr+0x5c>)
- 802f646: 681c ldr r4, [r3, #0]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n"));
- /* iterate through all network interfaces */
- while (netif != NULL) {
- 802f648: e023 b.n 802f692 <dhcp_coarse_tmr+0x52>
- /* only act on DHCP configured interfaces */
- if (netif->dhcp != NULL) {
- 802f64a: 6a23 ldr r3, [r4, #32]
- 802f64c: b303 cbz r3, 802f690 <dhcp_coarse_tmr+0x50>
- /* timer is active (non zero), and triggers (zeroes) now? */
- if (netif->dhcp->t2_timeout-- == 1) {
- 802f64e: 8bda ldrh r2, [r3, #30]
- 802f650: 1e51 subs r1, r2, #1
- 802f652: 2a01 cmp r2, #1
- 802f654: 83d9 strh r1, [r3, #30]
- 802f656: d10b bne.n 802f670 <dhcp_coarse_tmr+0x30>
- 802f658: 7b1a ldrb r2, [r3, #12]
- 802f65a: 2a0a cmp r2, #10
- 802f65c: d818 bhi.n 802f690 <dhcp_coarse_tmr+0x50>
- 802f65e: f993 300c ldrsb.w r3, [r3, #12]
- 802f662: fa15 f303 lsls.w r3, r5, r3
- 802f666: d513 bpl.n 802f690 <dhcp_coarse_tmr+0x50>
- /* just retry to rebind */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("dhcp_t2_timeout(): must rebind\n"));
- /* This slightly different to RFC2131: DHCPREQUEST will be sent from state
- DHCP_REBINDING, not DHCP_BOUND */
- dhcp_rebind(netif);
- 802f668: 4620 mov r0, r4
- 802f66a: f7ff fc0b bl 802ee84 <dhcp_rebind>
- 802f66e: e00f b.n 802f690 <dhcp_coarse_tmr+0x50>
- if (netif->dhcp->t2_timeout-- == 1) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n"));
- /* this clients' rebind timeout triggered */
- dhcp_t2_timeout(netif);
- /* timer is active (non zero), and triggers (zeroes) now */
- } else if (netif->dhcp->t1_timeout-- == 1) {
- 802f670: 8b9a ldrh r2, [r3, #28]
- 802f672: 1e51 subs r1, r2, #1
- 802f674: 2a01 cmp r2, #1
- 802f676: 8399 strh r1, [r3, #28]
- 802f678: d10a bne.n 802f690 <dhcp_coarse_tmr+0x50>
- 802f67a: 7b1a ldrb r2, [r3, #12]
- 802f67c: 2a0a cmp r2, #10
- 802f67e: d807 bhi.n 802f690 <dhcp_coarse_tmr+0x50>
- 802f680: f993 300c ldrsb.w r3, [r3, #12]
- 802f684: fa15 f303 lsls.w r3, r5, r3
- 802f688: d502 bpl.n 802f690 <dhcp_coarse_tmr+0x50>
- * eventually time-out if renew tries fail. */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("dhcp_t1_timeout(): must renew\n"));
- /* This slightly different to RFC2131: DHCPREQUEST will be sent from state
- DHCP_RENEWING, not DHCP_BOUND */
- dhcp_renew(netif);
- 802f68a: 4620 mov r0, r4
- 802f68c: f7ff ff96 bl 802f5bc <dhcp_renew>
- /* this clients' renewal timeout triggered */
- dhcp_t1_timeout(netif);
- }
- }
- /* proceed to next netif */
- netif = netif->next;
- 802f690: 6824 ldr r4, [r4, #0]
- dhcp_coarse_tmr()
- {
- struct netif *netif = netif_list;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n"));
- /* iterate through all network interfaces */
- while (netif != NULL) {
- 802f692: 2c00 cmp r4, #0
- 802f694: d1d9 bne.n 802f64a <dhcp_coarse_tmr+0xa>
- }
- }
- /* proceed to next netif */
- netif = netif->next;
- }
- }
- 802f696: bd38 pop {r3, r4, r5, pc}
- 802f698: 2000f6b0 .word 0x2000f6b0
- 802f69c: 44200000 .word 0x44200000
- 0802f6a0 <dhcp_release>:
- *
- * @param netif network interface which must release its lease
- */
- err_t
- dhcp_release(struct netif *netif)
- {
- 802f6a0: b573 push {r0, r1, r4, r5, r6, lr}
- struct dhcp *dhcp = netif->dhcp;
- 802f6a2: 6a04 ldr r4, [r0, #32]
- *
- * @param netif network interface which must release its lease
- */
- err_t
- dhcp_release(struct netif *netif)
- {
- 802f6a4: 4605 mov r5, r0
- err_t result;
- u16_t msecs;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release()\n"));
- /* idle DHCP client */
- dhcp_set_state(dhcp, DHCP_OFF);
- 802f6a6: 2100 movs r1, #0
- 802f6a8: 4620 mov r0, r4
- 802f6aa: f7ff fa7f bl 802ebac <dhcp_set_state>
- /* clean old DHCP offer */
- ip_addr_set_zero(&dhcp->server_ip_addr);
- 802f6ae: 2300 movs r3, #0
- 802f6b0: 6223 str r3, [r4, #32]
- ip_addr_set_zero(&dhcp->offered_ip_addr);
- 802f6b2: 6263 str r3, [r4, #36] ; 0x24
- ip_addr_set_zero(&dhcp->offered_sn_mask);
- 802f6b4: 62a3 str r3, [r4, #40] ; 0x28
- ip_addr_set_zero(&dhcp->offered_gw_addr);
- 802f6b6: 62e3 str r3, [r4, #44] ; 0x2c
- #if LWIP_DHCP_BOOTP_FILE
- ip_addr_set_zero(&dhcp->offered_si_addr);
- #endif /* LWIP_DHCP_BOOTP_FILE */
- dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0;
- 802f6b8: 63a3 str r3, [r4, #56] ; 0x38
- 802f6ba: 6363 str r3, [r4, #52] ; 0x34
- 802f6bc: 6323 str r3, [r4, #48] ; 0x30
-
- /* create and initialize the DHCP message header */
- result = dhcp_create_msg(netif, dhcp, DHCP_RELEASE);
- 802f6be: 4628 mov r0, r5
- 802f6c0: 4621 mov r1, r4
- 802f6c2: 2207 movs r2, #7
- 802f6c4: f7ff fad6 bl 802ec74 <dhcp_create_msg>
- if (result == ERR_OK) {
- 802f6c8: 4606 mov r6, r0
- 802f6ca: b998 cbnz r0, 802f6f4 <dhcp_release+0x54>
- dhcp_option_trailer(dhcp);
- 802f6cc: 4620 mov r0, r4
- 802f6ce: f7ff fabc bl 802ec4a <dhcp_option_trailer>
- pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len);
- 802f6d2: 8b21 ldrh r1, [r4, #24]
- 802f6d4: 6920 ldr r0, [r4, #16]
- 802f6d6: 31f0 adds r1, #240 ; 0xf0
- 802f6d8: b289 uxth r1, r1
- 802f6da: f000 fbbe bl 802fe5a <pbuf_realloc>
- udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif);
- 802f6de: 9500 str r5, [sp, #0]
- 802f6e0: 6860 ldr r0, [r4, #4]
- 802f6e2: 6921 ldr r1, [r4, #16]
- 802f6e4: f104 0220 add.w r2, r4, #32
- 802f6e8: 2343 movs r3, #67 ; 0x43
- 802f6ea: f003 f951 bl 8032990 <udp_sendto_if>
- dhcp_delete_msg(dhcp);
- 802f6ee: 4620 mov r0, r4
- 802f6f0: f7ff fb60 bl 802edb4 <dhcp_delete_msg>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_OFF\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802f6f4: 7b63 ldrb r3, [r4, #13]
- 802f6f6: 3301 adds r3, #1
- 802f6f8: b2db uxtb r3, r3
- msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000;
- 802f6fa: 2b09 cmp r3, #9
- dhcp_delete_msg(dhcp);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_OFF\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n"));
- }
- dhcp->tries++;
- 802f6fc: 7363 strb r3, [r4, #13]
- msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000;
- 802f6fe: d804 bhi.n 802f70a <dhcp_release+0x6a>
- 802f700: f44f 727a mov.w r2, #1000 ; 0x3e8
- 802f704: 4353 muls r3, r2
- 802f706: b29b uxth r3, r3
- 802f708: e001 b.n 802f70e <dhcp_release+0x6e>
- 802f70a: f242 7310 movw r3, #10000 ; 0x2710
- dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS;
- 802f70e: f44f 72fa mov.w r2, #500 ; 0x1f4
- 802f712: f203 13f3 addw r3, r3, #499 ; 0x1f3
- 802f716: fb93 f3f2 sdiv r3, r3, r2
- 802f71a: 8363 strh r3, [r4, #26]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release(): set request timeout %"U16_F" msecs\n", msecs));
- /* bring the interface down */
- netif_set_down(netif);
- 802f71c: 4628 mov r0, r5
- 802f71e: f000 fb31 bl 802fd84 <netif_set_down>
- /* remove IP address from interface */
- netif_set_ipaddr(netif, IP_ADDR_ANY);
- 802f722: 4628 mov r0, r5
- 802f724: 4906 ldr r1, [pc, #24] ; (802f740 <dhcp_release+0xa0>)
- 802f726: f000 fa7d bl 802fc24 <netif_set_ipaddr>
- netif_set_gw(netif, IP_ADDR_ANY);
- 802f72a: 4628 mov r0, r5
- 802f72c: 4904 ldr r1, [pc, #16] ; (802f740 <dhcp_release+0xa0>)
- 802f72e: f000 fab5 bl 802fc9c <netif_set_gw>
- netif_set_netmask(netif, IP_ADDR_ANY);
- 802f732: 4628 mov r0, r5
- 802f734: 4902 ldr r1, [pc, #8] ; (802f740 <dhcp_release+0xa0>)
- 802f736: f000 fab5 bl 802fca4 <netif_set_netmask>
-
- return result;
- }
- 802f73a: 4630 mov r0, r6
- 802f73c: bd7c pop {r2, r3, r4, r5, r6, pc}
- 802f73e: bf00 nop
- 802f740: 08045008 .word 0x08045008
- 0802f744 <dhcp_fine_tmr>:
- * A DHCP server is expected to respond within a short period of time.
- * This timer checks whether an outstanding DHCP request is timed out.
- */
- void
- dhcp_fine_tmr()
- {
- 802f744: b538 push {r3, r4, r5, lr}
- struct netif *netif = netif_list;
- 802f746: 4b26 ldr r3, [pc, #152] ; (802f7e0 <dhcp_fine_tmr+0x9c>)
- /* timer is active (non zero), and is about to trigger now */
- if (netif->dhcp->request_timeout > 1) {
- netif->dhcp->request_timeout--;
- }
- else if (netif->dhcp->request_timeout == 1) {
- netif->dhcp->request_timeout--;
- 802f748: 2500 movs r5, #0
- * This timer checks whether an outstanding DHCP request is timed out.
- */
- void
- dhcp_fine_tmr()
- {
- struct netif *netif = netif_list;
- 802f74a: 681c ldr r4, [r3, #0]
- /* loop through netif's */
- while (netif != NULL) {
- 802f74c: e044 b.n 802f7d8 <dhcp_fine_tmr+0x94>
- /* only act on DHCP configured interfaces */
- if (netif->dhcp != NULL) {
- 802f74e: 6a23 ldr r3, [r4, #32]
- 802f750: 2b00 cmp r3, #0
- 802f752: d040 beq.n 802f7d6 <dhcp_fine_tmr+0x92>
- /* timer is active (non zero), and is about to trigger now */
- if (netif->dhcp->request_timeout > 1) {
- 802f754: 8b5a ldrh r2, [r3, #26]
- 802f756: 2a01 cmp r2, #1
- 802f758: d902 bls.n 802f760 <dhcp_fine_tmr+0x1c>
- netif->dhcp->request_timeout--;
- 802f75a: 3a01 subs r2, #1
- 802f75c: 835a strh r2, [r3, #26]
- 802f75e: e03a b.n 802f7d6 <dhcp_fine_tmr+0x92>
- }
- else if (netif->dhcp->request_timeout == 1) {
- 802f760: d139 bne.n 802f7d6 <dhcp_fine_tmr+0x92>
- dhcp_timeout(struct netif *netif)
- {
- struct dhcp *dhcp = netif->dhcp;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n"));
- /* back-off period has passed, or server selection timed out */
- if ((dhcp->state == DHCP_BACKING_OFF) || (dhcp->state == DHCP_SELECTING)) {
- 802f762: 7b1a ldrb r2, [r3, #12]
- /* timer is active (non zero), and is about to trigger now */
- if (netif->dhcp->request_timeout > 1) {
- netif->dhcp->request_timeout--;
- }
- else if (netif->dhcp->request_timeout == 1) {
- netif->dhcp->request_timeout--;
- 802f764: 835d strh r5, [r3, #26]
- dhcp_timeout(struct netif *netif)
- {
- struct dhcp *dhcp = netif->dhcp;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n"));
- /* back-off period has passed, or server selection timed out */
- if ((dhcp->state == DHCP_BACKING_OFF) || (dhcp->state == DHCP_SELECTING)) {
- 802f766: 2a0c cmp r2, #12
- 802f768: d028 beq.n 802f7bc <dhcp_fine_tmr+0x78>
- 802f76a: 2a06 cmp r2, #6
- 802f76c: d100 bne.n 802f770 <dhcp_fine_tmr+0x2c>
- 802f76e: e025 b.n 802f7bc <dhcp_fine_tmr+0x78>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n"));
- dhcp_discover(netif);
- /* receiving the requested lease timed out */
- } else if (dhcp->state == DHCP_REQUESTING) {
- 802f770: 2a01 cmp r2, #1
- 802f772: d106 bne.n 802f782 <dhcp_fine_tmr+0x3e>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n"));
- if (dhcp->tries <= 5) {
- 802f774: 7b5b ldrb r3, [r3, #13]
- 802f776: 2b05 cmp r3, #5
- dhcp_select(netif);
- 802f778: 4620 mov r0, r4
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n"));
- dhcp_discover(netif);
- /* receiving the requested lease timed out */
- } else if (dhcp->state == DHCP_REQUESTING) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n"));
- if (dhcp->tries <= 5) {
- 802f77a: d81d bhi.n 802f7b8 <dhcp_fine_tmr+0x74>
- dhcp_select(netif);
- 802f77c: f7ff fc14 bl 802efa8 <dhcp_select>
- 802f780: e029 b.n 802f7d6 <dhcp_fine_tmr+0x92>
- dhcp_release(netif);
- dhcp_discover(netif);
- }
- #if DHCP_DOES_ARP_CHECK
- /* received no ARP reply for the offered address (which is good) */
- } else if (dhcp->state == DHCP_CHECKING) {
- 802f782: 2a08 cmp r2, #8
- 802f784: d109 bne.n 802f79a <dhcp_fine_tmr+0x56>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n"));
- if (dhcp->tries <= 1) {
- 802f786: 7b5b ldrb r3, [r3, #13]
- 802f788: 2b01 cmp r3, #1
- dhcp_check(netif);
- 802f78a: 4620 mov r0, r4
- }
- #if DHCP_DOES_ARP_CHECK
- /* received no ARP reply for the offered address (which is good) */
- } else if (dhcp->state == DHCP_CHECKING) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n"));
- if (dhcp->tries <= 1) {
- 802f78c: d802 bhi.n 802f794 <dhcp_fine_tmr+0x50>
- dhcp_check(netif);
- 802f78e: f7ff fc7d bl 802f08c <dhcp_check>
- 802f792: e020 b.n 802f7d6 <dhcp_fine_tmr+0x92>
- /* no ARP replies on the offered address,
- looks like the IP address is indeed free */
- } else {
- /* bind the interface to the offered address */
- dhcp_bind(netif);
- 802f794: f7ff fc8d bl 802f0b2 <dhcp_bind>
- 802f798: e01d b.n 802f7d6 <dhcp_fine_tmr+0x92>
- }
- #endif /* DHCP_DOES_ARP_CHECK */
- }
- /* did not get response to renew request? */
- else if (dhcp->state == DHCP_RENEWING) {
- 802f79a: 2a05 cmp r2, #5
- 802f79c: d103 bne.n 802f7a6 <dhcp_fine_tmr+0x62>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RENEWING, DHCP request timed out\n"));
- /* just retry renewal */
- /* note that the rebind timer will eventually time-out if renew does not work */
- dhcp_renew(netif);
- 802f79e: 4620 mov r0, r4
- 802f7a0: f7ff ff0c bl 802f5bc <dhcp_renew>
- 802f7a4: e017 b.n 802f7d6 <dhcp_fine_tmr+0x92>
- /* did not get response to rebind request? */
- } else if (dhcp->state == DHCP_REBINDING) {
- 802f7a6: 2a04 cmp r2, #4
- 802f7a8: d10a bne.n 802f7c0 <dhcp_fine_tmr+0x7c>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REBINDING, DHCP request timed out\n"));
- if (dhcp->tries <= 8) {
- 802f7aa: 7b5b ldrb r3, [r3, #13]
- 802f7ac: 2b08 cmp r3, #8
- dhcp_rebind(netif);
- 802f7ae: 4620 mov r0, r4
- /* note that the rebind timer will eventually time-out if renew does not work */
- dhcp_renew(netif);
- /* did not get response to rebind request? */
- } else if (dhcp->state == DHCP_REBINDING) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REBINDING, DHCP request timed out\n"));
- if (dhcp->tries <= 8) {
- 802f7b0: d802 bhi.n 802f7b8 <dhcp_fine_tmr+0x74>
- dhcp_rebind(netif);
- 802f7b2: f7ff fb67 bl 802ee84 <dhcp_rebind>
- 802f7b6: e00e b.n 802f7d6 <dhcp_fine_tmr+0x92>
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RELEASING, DISCOVERING\n"));
- dhcp_release(netif);
- 802f7b8: f7ff ff72 bl 802f6a0 <dhcp_release>
- dhcp_discover(netif);
- 802f7bc: 4620 mov r0, r4
- 802f7be: e008 b.n 802f7d2 <dhcp_fine_tmr+0x8e>
- }
- } else if (dhcp->state == DHCP_REBOOTING) {
- 802f7c0: 2a03 cmp r2, #3
- 802f7c2: d108 bne.n 802f7d6 <dhcp_fine_tmr+0x92>
- if (dhcp->tries < REBOOT_TRIES) {
- 802f7c4: 7b5b ldrb r3, [r3, #13]
- 802f7c6: 2b01 cmp r3, #1
- dhcp_reboot(netif);
- 802f7c8: 4620 mov r0, r4
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RELEASING, DISCOVERING\n"));
- dhcp_release(netif);
- dhcp_discover(netif);
- }
- } else if (dhcp->state == DHCP_REBOOTING) {
- if (dhcp->tries < REBOOT_TRIES) {
- 802f7ca: d802 bhi.n 802f7d2 <dhcp_fine_tmr+0x8e>
- dhcp_reboot(netif);
- 802f7cc: f7ff fb9c bl 802ef08 <dhcp_reboot>
- 802f7d0: e001 b.n 802f7d6 <dhcp_fine_tmr+0x92>
- } else {
- dhcp_discover(netif);
- 802f7d2: f7ff fafb bl 802edcc <dhcp_discover>
- /* this client's request timeout triggered */
- dhcp_timeout(netif);
- }
- }
- /* proceed to next network interface */
- netif = netif->next;
- 802f7d6: 6824 ldr r4, [r4, #0]
- void
- dhcp_fine_tmr()
- {
- struct netif *netif = netif_list;
- /* loop through netif's */
- while (netif != NULL) {
- 802f7d8: 2c00 cmp r4, #0
- 802f7da: d1b8 bne.n 802f74e <dhcp_fine_tmr+0xa>
- }
- }
- /* proceed to next network interface */
- netif = netif->next;
- }
- }
- 802f7dc: bd38 pop {r3, r4, r5, pc}
- 802f7de: bf00 nop
- 802f7e0: 2000f6b0 .word 0x2000f6b0
- 0802f7e4 <dhcp_stop>:
- *
- * @param netif The network interface to stop DHCP on
- */
- void
- dhcp_stop(struct netif *netif)
- {
- 802f7e4: b510 push {r4, lr}
- struct dhcp *dhcp;
- LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;);
- 802f7e6: b198 cbz r0, 802f810 <dhcp_stop+0x2c>
- dhcp = netif->dhcp;
- /* Remove the flag that says this netif is handled by DHCP. */
- netif->flags &= ~NETIF_FLAG_DHCP;
- 802f7e8: f890 302d ldrb.w r3, [r0, #45] ; 0x2d
- void
- dhcp_stop(struct netif *netif)
- {
- struct dhcp *dhcp;
- LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;);
- dhcp = netif->dhcp;
- 802f7ec: 6a04 ldr r4, [r0, #32]
- /* Remove the flag that says this netif is handled by DHCP. */
- netif->flags &= ~NETIF_FLAG_DHCP;
- 802f7ee: f023 0308 bic.w r3, r3, #8
- 802f7f2: f880 302d strb.w r3, [r0, #45] ; 0x2d
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_stop()\n"));
- /* netif is DHCP configured? */
- if (dhcp != NULL) {
- 802f7f6: b15c cbz r4, 802f810 <dhcp_stop+0x2c>
- autoip_stop(netif);
- dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF;
- }
- #endif /* LWIP_DHCP_AUTOIP_COOP */
- if (dhcp->pcb != NULL) {
- 802f7f8: 6860 ldr r0, [r4, #4]
- 802f7fa: b118 cbz r0, 802f804 <dhcp_stop+0x20>
- udp_remove(dhcp->pcb);
- 802f7fc: f003 f974 bl 8032ae8 <udp_remove>
- dhcp->pcb = NULL;
- 802f800: 2300 movs r3, #0
- 802f802: 6063 str r3, [r4, #4]
- }
- LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL);
- dhcp_set_state(dhcp, DHCP_OFF);
- 802f804: 4620 mov r0, r4
- 802f806: 2100 movs r1, #0
- }
- }
- 802f808: e8bd 4010 ldmia.w sp!, {r4, lr}
- if (dhcp->pcb != NULL) {
- udp_remove(dhcp->pcb);
- dhcp->pcb = NULL;
- }
- LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL);
- dhcp_set_state(dhcp, DHCP_OFF);
- 802f80c: f7ff b9ce b.w 802ebac <dhcp_set_state>
- 802f810: bd10 pop {r4, pc}
- 802f812: 0000 movs r0, r0
- 0802f814 <dhcp_start>:
- * - ERR_OK - No error
- * - ERR_MEM - Out of memory
- */
- err_t
- dhcp_start(struct netif *netif)
- {
- 802f814: b538 push {r3, r4, r5, lr}
- struct dhcp *dhcp;
- err_t result = ERR_OK;
- LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;);
- 802f816: 4604 mov r4, r0
- 802f818: b908 cbnz r0, 802f81e <dhcp_start+0xa>
- 802f81a: 20f2 movs r0, #242 ; 0xf2
- 802f81c: e047 b.n 802f8ae <dhcp_start+0x9a>
- dhcp = netif->dhcp;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* Remove the flag that says this netif is handled by DHCP,
- it is set when we succeeded starting. */
- netif->flags &= ~NETIF_FLAG_DHCP;
- 802f81e: f890 302d ldrb.w r3, [r0, #45] ; 0x2d
- {
- struct dhcp *dhcp;
- err_t result = ERR_OK;
- LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;);
- dhcp = netif->dhcp;
- 802f822: 6a05 ldr r5, [r0, #32]
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* Remove the flag that says this netif is handled by DHCP,
- it is set when we succeeded starting. */
- netif->flags &= ~NETIF_FLAG_DHCP;
- 802f824: f023 0208 bic.w r2, r3, #8
- /* check hwtype of the netif */
- if ((netif->flags & NETIF_FLAG_ETHARP) == 0) {
- 802f828: f003 0320 and.w r3, r3, #32
- 802f82c: b2db uxtb r3, r3
- LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;);
- dhcp = netif->dhcp;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* Remove the flag that says this netif is handled by DHCP,
- it is set when we succeeded starting. */
- netif->flags &= ~NETIF_FLAG_DHCP;
- 802f82e: f880 202d strb.w r2, [r0, #45] ; 0x2d
- /* check hwtype of the netif */
- if ((netif->flags & NETIF_FLAG_ETHARP) == 0) {
- 802f832: 2b00 cmp r3, #0
- 802f834: d0f1 beq.n 802f81a <dhcp_start+0x6>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): No ETHARP netif\n"));
- return ERR_ARG;
- }
- /* check MTU of the netif */
- if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) {
- 802f836: 8c83 ldrh r3, [r0, #36] ; 0x24
- 802f838: f5b3 7f10 cmp.w r3, #576 ; 0x240
- 802f83c: d200 bcs.n 802f840 <dhcp_start+0x2c>
- 802f83e: e02e b.n 802f89e <dhcp_start+0x8a>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): Cannot use this netif with DHCP: MTU is too small\n"));
- return ERR_MEM;
- }
- /* no DHCP client attached yet? */
- if (dhcp == NULL) {
- 802f840: b935 cbnz r5, 802f850 <dhcp_start+0x3c>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting new DHCP client\n"));
- dhcp = (struct dhcp *)mem_malloc(sizeof(struct dhcp));
- 802f842: 203c movs r0, #60 ; 0x3c
- 802f844: f000 f938 bl 802fab8 <mem_malloc>
- if (dhcp == NULL) {
- 802f848: 4605 mov r5, r0
- 802f84a: b340 cbz r0, 802f89e <dhcp_start+0x8a>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n"));
- return ERR_MEM;
- }
- /* store this dhcp client in the netif */
- netif->dhcp = dhcp;
- 802f84c: 6220 str r0, [r4, #32]
- 802f84e: e003 b.n 802f858 <dhcp_start+0x44>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp"));
- /* already has DHCP client attached */
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(): restarting DHCP configuration\n"));
- if (dhcp->pcb != NULL) {
- 802f850: 6868 ldr r0, [r5, #4]
- 802f852: b108 cbz r0, 802f858 <dhcp_start+0x44>
- udp_remove(dhcp->pcb);
- 802f854: f003 f948 bl 8032ae8 <udp_remove>
- LWIP_ASSERT("pbuf p_out wasn't freed", dhcp->p_out == NULL);
- LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL );
- }
-
- /* clear data structure */
- memset(dhcp, 0, sizeof(struct dhcp));
- 802f858: 2100 movs r1, #0
- 802f85a: 223c movs r2, #60 ; 0x3c
- 802f85c: 4628 mov r0, r5
- 802f85e: f7f2 f94f bl 8021b00 <memset>
- /* dhcp_set_state(&dhcp, DHCP_OFF); */
- /* allocate UDP PCB */
- dhcp->pcb = udp_new();
- 802f862: f003 f95d bl 8032b20 <udp_new>
- 802f866: 6068 str r0, [r5, #4]
- if (dhcp->pcb == NULL) {
- 802f868: b1c8 cbz r0, 802f89e <dhcp_start+0x8a>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not obtain pcb\n"));
- return ERR_MEM;
- }
- ip_set_option(dhcp->pcb, SOF_BROADCAST);
- 802f86a: 7a03 ldrb r3, [r0, #8]
- /* set up local and remote port for the pcb */
- udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT);
- 802f86c: 4911 ldr r1, [pc, #68] ; (802f8b4 <dhcp_start+0xa0>)
- dhcp->pcb = udp_new();
- if (dhcp->pcb == NULL) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not obtain pcb\n"));
- return ERR_MEM;
- }
- ip_set_option(dhcp->pcb, SOF_BROADCAST);
- 802f86e: f043 0320 orr.w r3, r3, #32
- 802f872: 7203 strb r3, [r0, #8]
- /* set up local and remote port for the pcb */
- udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT);
- 802f874: 2244 movs r2, #68 ; 0x44
- 802f876: 6868 ldr r0, [r5, #4]
- 802f878: f003 f83a bl 80328f0 <udp_bind>
- udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT);
- 802f87c: 490d ldr r1, [pc, #52] ; (802f8b4 <dhcp_start+0xa0>)
- 802f87e: 6868 ldr r0, [r5, #4]
- 802f880: 2243 movs r2, #67 ; 0x43
- 802f882: f003 f8ff bl 8032a84 <udp_connect>
- /* set up the recv callback and argument */
- udp_recv(dhcp->pcb, dhcp_recv, netif);
- 802f886: 6868 ldr r0, [r5, #4]
- 802f888: 490b ldr r1, [pc, #44] ; (802f8b8 <dhcp_start+0xa4>)
- 802f88a: 4622 mov r2, r4
- 802f88c: f003 f928 bl 8032ae0 <udp_recv>
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n"));
- /* (re)start the DHCP negotiation */
- result = dhcp_discover(netif);
- 802f890: 4620 mov r0, r4
- 802f892: f7ff fa9b bl 802edcc <dhcp_discover>
- if (result != ERR_OK) {
- 802f896: b120 cbz r0, 802f8a2 <dhcp_start+0x8e>
- /* free resources allocated above */
- dhcp_stop(netif);
- 802f898: 4620 mov r0, r4
- 802f89a: f7ff ffa3 bl 802f7e4 <dhcp_stop>
- return ERR_MEM;
- 802f89e: 20ff movs r0, #255 ; 0xff
- 802f8a0: e005 b.n 802f8ae <dhcp_start+0x9a>
- }
- /* Set the flag that says this netif is handled by DHCP. */
- netif->flags |= NETIF_FLAG_DHCP;
- 802f8a2: f894 302d ldrb.w r3, [r4, #45] ; 0x2d
- 802f8a6: f043 0308 orr.w r3, r3, #8
- 802f8aa: f884 302d strb.w r3, [r4, #45] ; 0x2d
- return result;
- }
- 802f8ae: b240 sxtb r0, r0
- 802f8b0: bd38 pop {r3, r4, r5, pc}
- 802f8b2: bf00 nop
- 802f8b4: 08045008 .word 0x08045008
- 802f8b8: 0802f171 .word 0x0802f171
- 0802f8bc <lwip_init>:
- /**
- * Perform Sanity check of user-configurable values, and initialize all modules.
- */
- void
- lwip_init(void)
- {
- 802f8bc: b508 push {r3, lr}
- /* Modules initialization */
- stats_init();
- #if !NO_SYS
- sys_init();
- 802f8be: f008 f8e8 bl 8037a92 <sys_init>
- #endif /* !NO_SYS */
- mem_init();
- 802f8c2: f000 f80f bl 802f8e4 <mem_init>
- memp_init();
- 802f8c6: f000 f95b bl 802fb80 <memp_init>
- pbuf_init();
- netif_init();
- 802f8ca: f000 f9a9 bl 802fc20 <netif_init>
- #endif /* LWIP_ARP */
- #if LWIP_RAW
- raw_init();
- #endif /* LWIP_RAW */
- #if LWIP_UDP
- udp_init();
- 802f8ce: f002 ff49 bl 8032764 <udp_init>
- #endif /* LWIP_UDP */
- #if LWIP_TCP
- tcp_init();
- 802f8d2: f000 fd0d bl 80302f0 <tcp_init>
- #endif /* LWIP_TCP */
- #if LWIP_SNMP
- snmp_init();
- 802f8d6: f005 ff0b bl 80356f0 <snmp_init>
- #endif /* LWIP_DNS */
- #if LWIP_TIMERS
- sys_timeouts_init();
- #endif /* LWIP_TIMERS */
- }
- 802f8da: e8bd 4008 ldmia.w sp!, {r3, lr}
- #if LWIP_DNS
- dns_init();
- #endif /* LWIP_DNS */
- #if LWIP_TIMERS
- sys_timeouts_init();
- 802f8de: f002 be6b b.w 80325b8 <sys_timeouts_init>
- 802f8e2: 0000 movs r0, r0
- 0802f8e4 <mem_init>:
- LWIP_ASSERT("Sanity check alignment",
- (SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT-1)) == 0);
- /* align the heap */
- ram = (u8_t *)LWIP_MEM_ALIGN(LWIP_RAM_HEAP_POINTER);
- 802f8e4: 4b0b ldr r3, [pc, #44] ; (802f914 <mem_init+0x30>)
- 802f8e6: 4a0c ldr r2, [pc, #48] ; (802f918 <mem_init+0x34>)
- mem = (struct mem *)(void *)ram;
- mem->next = MEM_SIZE_ALIGNED;
- mem->prev = 0;
- mem->used = 0;
- /* initialize the end of the heap */
- ram_end = (struct mem *)(void *)&ram[MEM_SIZE_ALIGNED];
- 802f8e8: 480c ldr r0, [pc, #48] ; (802f91c <mem_init+0x38>)
- LWIP_ASSERT("Sanity check alignment",
- (SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT-1)) == 0);
- /* align the heap */
- ram = (u8_t *)LWIP_MEM_ALIGN(LWIP_RAM_HEAP_POINTER);
- 802f8ea: f023 0303 bic.w r3, r3, #3
- 802f8ee: 6013 str r3, [r2, #0]
- /* initialize the start of the heap */
- mem = (struct mem *)(void *)ram;
- mem->next = MEM_SIZE_ALIGNED;
- 802f8f0: f44f 51a0 mov.w r1, #5120 ; 0x1400
- mem->prev = 0;
- 802f8f4: 2200 movs r2, #0
- 802f8f6: 805a strh r2, [r3, #2]
- mem->used = 0;
- 802f8f8: 711a strb r2, [r3, #4]
- /* initialize the end of the heap */
- ram_end = (struct mem *)(void *)&ram[MEM_SIZE_ALIGNED];
- 802f8fa: 185a adds r2, r3, r1
- 802f8fc: 6002 str r2, [r0, #0]
- ram_end->used = 1;
- 802f8fe: 2001 movs r0, #1
- 802f900: 7110 strb r0, [r2, #4]
- ram_end->next = MEM_SIZE_ALIGNED;
- ram_end->prev = MEM_SIZE_ALIGNED;
- 802f902: 8051 strh r1, [r2, #2]
- /* align the heap */
- ram = (u8_t *)LWIP_MEM_ALIGN(LWIP_RAM_HEAP_POINTER);
- /* initialize the start of the heap */
- mem = (struct mem *)(void *)ram;
- mem->next = MEM_SIZE_ALIGNED;
- 802f904: 8019 strh r1, [r3, #0]
- /* initialize the lowest-free pointer to the start of the heap */
- lfree = (struct mem *)(void *)ram;
- MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED);
- if(sys_mutex_new(&mem_mutex) != ERR_OK) {
- 802f906: 4806 ldr r0, [pc, #24] ; (802f920 <mem_init+0x3c>)
- mem->prev = 0;
- mem->used = 0;
- /* initialize the end of the heap */
- ram_end = (struct mem *)(void *)&ram[MEM_SIZE_ALIGNED];
- ram_end->used = 1;
- ram_end->next = MEM_SIZE_ALIGNED;
- 802f908: 8011 strh r1, [r2, #0]
- ram_end->prev = MEM_SIZE_ALIGNED;
- /* initialize the lowest-free pointer to the start of the heap */
- lfree = (struct mem *)(void *)ram;
- 802f90a: 4a06 ldr r2, [pc, #24] ; (802f924 <mem_init+0x40>)
- 802f90c: 6013 str r3, [r2, #0]
- MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED);
- if(sys_mutex_new(&mem_mutex) != ERR_OK) {
- 802f90e: f008 b88d b.w 8037a2c <sys_mutex_new>
- 802f912: bf00 nop
- 802f914: 2000e29f .word 0x2000e29f
- 802f918: 20000d50 .word 0x20000d50
- 802f91c: 20000d48 .word 0x20000d48
- 802f920: 20000d4c .word 0x20000d4c
- 802f924: 20000d44 .word 0x20000d44
- 0802f928 <mem_free>:
- * @param rmem is the data portion of a struct mem as returned by a previous
- * call to mem_malloc()
- */
- void
- mem_free(void *rmem)
- {
- 802f928: b570 push {r4, r5, r6, lr}
- struct mem *mem;
- LWIP_MEM_FREE_DECL_PROTECT();
- if (rmem == NULL) {
- 802f92a: 4604 mov r4, r0
- 802f92c: 2800 cmp r0, #0
- 802f92e: d04c beq.n 802f9ca <mem_free+0xa2>
- LWIP_ASSERT("mem_free: sanity check alignment", (((mem_ptr_t)rmem) & (MEM_ALIGNMENT-1)) == 0);
- LWIP_ASSERT("mem_free: legal memory", (u8_t *)rmem >= (u8_t *)ram &&
- (u8_t *)rmem < (u8_t *)ram_end);
- if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) {
- 802f930: 4b26 ldr r3, [pc, #152] ; (802f9cc <mem_free+0xa4>)
- 802f932: 681b ldr r3, [r3, #0]
- 802f934: 4298 cmp r0, r3
- 802f936: d303 bcc.n 802f940 <mem_free+0x18>
- 802f938: 4b25 ldr r3, [pc, #148] ; (802f9d0 <mem_free+0xa8>)
- 802f93a: 681b ldr r3, [r3, #0]
- 802f93c: 4298 cmp r0, r3
- 802f93e: d305 bcc.n 802f94c <mem_free+0x24>
- SYS_ARCH_DECL_PROTECT(lev);
- LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory\n"));
- /* protect mem stats from concurrent access */
- SYS_ARCH_PROTECT(lev);
- 802f940: f008 f8c2 bl 8037ac8 <sys_arch_protect>
- plug_holes(mem);
- #if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
- mem_free_count = 1;
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- LWIP_MEM_FREE_UNPROTECT();
- }
- 802f944: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- SYS_ARCH_DECL_PROTECT(lev);
- LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory\n"));
- /* protect mem stats from concurrent access */
- SYS_ARCH_PROTECT(lev);
- MEM_STATS_INC(illegal);
- SYS_ARCH_UNPROTECT(lev);
- 802f948: f008 b8c8 b.w 8037adc <sys_arch_unprotect>
- return;
- }
- /* protect the heap from concurrent access */
- LWIP_MEM_FREE_PROTECT();
- 802f94c: 4821 ldr r0, [pc, #132] ; (802f9d4 <mem_free+0xac>)
- 802f94e: f008 f879 bl 8037a44 <sys_mutex_lock>
- /* Get the corresponding struct mem ... */
- mem = (struct mem *)(void *)((u8_t *)rmem - SIZEOF_STRUCT_MEM);
- /* ... which has to be in a used state ... */
- LWIP_ASSERT("mem_free: mem->used", mem->used);
- /* ... and is now unused. */
- mem->used = 0;
- 802f952: 2300 movs r3, #0
- 802f954: f804 3c04 strb.w r3, [r4, #-4]
- if (mem < lfree) {
- 802f958: 4b1f ldr r3, [pc, #124] ; (802f9d8 <mem_free+0xb0>)
- LWIP_ASSERT("plug_holes: mem->used == 0", mem->used == 0);
- /* plug hole forward */
- LWIP_ASSERT("plug_holes: mem->next <= MEM_SIZE_ALIGNED", mem->next <= MEM_SIZE_ALIGNED);
- nmem = (struct mem *)(void *)&ram[mem->next];
- 802f95a: f834 0c08 ldrh.w r0, [r4, #-8]
- /* ... which has to be in a used state ... */
- LWIP_ASSERT("mem_free: mem->used", mem->used);
- /* ... and is now unused. */
- mem->used = 0;
- if (mem < lfree) {
- 802f95e: 6819 ldr r1, [r3, #0]
- return;
- }
- /* protect the heap from concurrent access */
- LWIP_MEM_FREE_PROTECT();
- /* Get the corresponding struct mem ... */
- mem = (struct mem *)(void *)((u8_t *)rmem - SIZEOF_STRUCT_MEM);
- 802f960: f1a4 0208 sub.w r2, r4, #8
- /* ... which has to be in a used state ... */
- LWIP_ASSERT("mem_free: mem->used", mem->used);
- /* ... and is now unused. */
- mem->used = 0;
- if (mem < lfree) {
- 802f964: 428a cmp r2, r1
- /* the newly freed struct is now the lowest */
- lfree = mem;
- 802f966: bf38 it cc
- 802f968: 601a strcc r2, [r3, #0]
- LWIP_ASSERT("plug_holes: mem->used == 0", mem->used == 0);
- /* plug hole forward */
- LWIP_ASSERT("plug_holes: mem->next <= MEM_SIZE_ALIGNED", mem->next <= MEM_SIZE_ALIGNED);
- nmem = (struct mem *)(void *)&ram[mem->next];
- 802f96a: 4b18 ldr r3, [pc, #96] ; (802f9cc <mem_free+0xa4>)
- 802f96c: 681b ldr r3, [r3, #0]
- 802f96e: 1819 adds r1, r3, r0
- if (mem != nmem && nmem->used == 0 && (u8_t *)nmem != (u8_t *)ram_end) {
- 802f970: 428a cmp r2, r1
- 802f972: d011 beq.n 802f998 <mem_free+0x70>
- 802f974: 790d ldrb r5, [r1, #4]
- 802f976: b97d cbnz r5, 802f998 <mem_free+0x70>
- 802f978: 4d15 ldr r5, [pc, #84] ; (802f9d0 <mem_free+0xa8>)
- 802f97a: 682d ldr r5, [r5, #0]
- 802f97c: 42a9 cmp r1, r5
- 802f97e: d00b beq.n 802f998 <mem_free+0x70>
- /* if mem->next is unused and not end of ram, combine mem and mem->next */
- if (lfree == nmem) {
- 802f980: 4d15 ldr r5, [pc, #84] ; (802f9d8 <mem_free+0xb0>)
- 802f982: 682e ldr r6, [r5, #0]
- 802f984: 428e cmp r6, r1
- lfree = mem;
- }
- mem->next = nmem->next;
- 802f986: 5a19 ldrh r1, [r3, r0]
- nmem = (struct mem *)(void *)&ram[mem->next];
- if (mem != nmem && nmem->used == 0 && (u8_t *)nmem != (u8_t *)ram_end) {
- /* if mem->next is unused and not end of ram, combine mem and mem->next */
- if (lfree == nmem) {
- lfree = mem;
- 802f988: bf08 it eq
- 802f98a: 602a streq r2, [r5, #0]
- }
- mem->next = nmem->next;
- 802f98c: f824 1c08 strh.w r1, [r4, #-8]
- ((struct mem *)(void *)&ram[nmem->next])->prev = (mem_size_t)((u8_t *)mem - ram);
- 802f990: 5a19 ldrh r1, [r3, r0]
- 802f992: 1859 adds r1, r3, r1
- 802f994: 1ad0 subs r0, r2, r3
- 802f996: 8048 strh r0, [r1, #2]
- }
- /* plug hole backward */
- pmem = (struct mem *)(void *)&ram[mem->prev];
- 802f998: f834 0c06 ldrh.w r0, [r4, #-6]
- 802f99c: 1819 adds r1, r3, r0
- if (pmem != mem && pmem->used == 0) {
- 802f99e: 4291 cmp r1, r2
- 802f9a0: d00e beq.n 802f9c0 <mem_free+0x98>
- 802f9a2: 790d ldrb r5, [r1, #4]
- 802f9a4: b965 cbnz r5, 802f9c0 <mem_free+0x98>
- /* if mem->prev is unused, combine mem and mem->prev */
- if (lfree == mem) {
- 802f9a6: 4d0c ldr r5, [pc, #48] ; (802f9d8 <mem_free+0xb0>)
- 802f9a8: 682e ldr r6, [r5, #0]
- 802f9aa: 4296 cmp r6, r2
- lfree = pmem;
- }
- pmem->next = mem->next;
- 802f9ac: f834 2c08 ldrh.w r2, [r4, #-8]
- /* plug hole backward */
- pmem = (struct mem *)(void *)&ram[mem->prev];
- if (pmem != mem && pmem->used == 0) {
- /* if mem->prev is unused, combine mem and mem->prev */
- if (lfree == mem) {
- lfree = pmem;
- 802f9b0: bf08 it eq
- 802f9b2: 6029 streq r1, [r5, #0]
- }
- pmem->next = mem->next;
- 802f9b4: 521a strh r2, [r3, r0]
- ((struct mem *)(void *)&ram[mem->next])->prev = (mem_size_t)((u8_t *)pmem - ram);
- 802f9b6: f834 2c08 ldrh.w r2, [r4, #-8]
- 802f9ba: 189a adds r2, r3, r2
- 802f9bc: 1acb subs r3, r1, r3
- 802f9be: 8053 strh r3, [r2, #2]
- /* finally, see if prev or next are free also */
- plug_holes(mem);
- #if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
- mem_free_count = 1;
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- LWIP_MEM_FREE_UNPROTECT();
- 802f9c0: 4804 ldr r0, [pc, #16] ; (802f9d4 <mem_free+0xac>)
- }
- 802f9c2: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- /* finally, see if prev or next are free also */
- plug_holes(mem);
- #if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
- mem_free_count = 1;
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- LWIP_MEM_FREE_UNPROTECT();
- 802f9c6: f008 b849 b.w 8037a5c <sys_mutex_unlock>
- 802f9ca: bd70 pop {r4, r5, r6, pc}
- 802f9cc: 20000d50 .word 0x20000d50
- 802f9d0: 20000d48 .word 0x20000d48
- 802f9d4: 20000d4c .word 0x20000d4c
- 802f9d8: 20000d44 .word 0x20000d44
- 0802f9dc <mem_trim>:
- * or NULL if newsize is > old size, in which case rmem is NOT touched
- * or freed!
- */
- void *
- mem_trim(void *rmem, mem_size_t newsize)
- {
- 802f9dc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- /* use the FREE_PROTECT here: it protects with sem OR SYS_ARCH_PROTECT */
- LWIP_MEM_FREE_DECL_PROTECT();
- /* Expand the size of the allocated memory region so that we can
- adjust for alignment. */
- newsize = LWIP_MEM_ALIGN_SIZE(newsize);
- 802f9e0: 3103 adds r1, #3
- 802f9e2: f64f 75fc movw r5, #65532 ; 0xfffc
- 802f9e6: 400d ands r5, r1
- if(newsize < MIN_SIZE_ALIGNED) {
- 802f9e8: 2d0b cmp r5, #11
- * or NULL if newsize is > old size, in which case rmem is NOT touched
- * or freed!
- */
- void *
- mem_trim(void *rmem, mem_size_t newsize)
- {
- 802f9ea: 4604 mov r4, r0
- /* Expand the size of the allocated memory region so that we can
- adjust for alignment. */
- newsize = LWIP_MEM_ALIGN_SIZE(newsize);
- if(newsize < MIN_SIZE_ALIGNED) {
- 802f9ec: d903 bls.n 802f9f6 <mem_trim+0x1a>
- /* every data block must be at least MIN_SIZE_ALIGNED long */
- newsize = MIN_SIZE_ALIGNED;
- }
- if (newsize > MEM_SIZE_ALIGNED) {
- 802f9ee: f5b5 5fa0 cmp.w r5, #5120 ; 0x1400
- 802f9f2: d901 bls.n 802f9f8 <mem_trim+0x1c>
- 802f9f4: e053 b.n 802fa9e <mem_trim+0xc2>
- adjust for alignment. */
- newsize = LWIP_MEM_ALIGN_SIZE(newsize);
- if(newsize < MIN_SIZE_ALIGNED) {
- /* every data block must be at least MIN_SIZE_ALIGNED long */
- newsize = MIN_SIZE_ALIGNED;
- 802f9f6: 250c movs r5, #12
- }
- LWIP_ASSERT("mem_trim: legal memory", (u8_t *)rmem >= (u8_t *)ram &&
- (u8_t *)rmem < (u8_t *)ram_end);
- if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) {
- 802f9f8: f8df 80b8 ldr.w r8, [pc, #184] ; 802fab4 <mem_trim+0xd8>
- 802f9fc: f8d8 3000 ldr.w r3, [r8]
- 802fa00: 429c cmp r4, r3
- 802fa02: d303 bcc.n 802fa0c <mem_trim+0x30>
- 802fa04: 4a28 ldr r2, [pc, #160] ; (802faa8 <mem_trim+0xcc>)
- 802fa06: 6812 ldr r2, [r2, #0]
- 802fa08: 4294 cmp r4, r2
- 802fa0a: d304 bcc.n 802fa16 <mem_trim+0x3a>
- SYS_ARCH_DECL_PROTECT(lev);
- LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_trim: illegal memory\n"));
- /* protect mem stats from concurrent access */
- SYS_ARCH_PROTECT(lev);
- 802fa0c: f008 f85c bl 8037ac8 <sys_arch_protect>
- MEM_STATS_INC(illegal);
- SYS_ARCH_UNPROTECT(lev);
- 802fa10: f008 f864 bl 8037adc <sys_arch_unprotect>
- return rmem;
- 802fa14: e044 b.n 802faa0 <mem_trim+0xc4>
- }
- /* Get the corresponding struct mem ... */
- mem = (struct mem *)(void *)((u8_t *)rmem - SIZEOF_STRUCT_MEM);
- 802fa16: f1a4 0608 sub.w r6, r4, #8
- /* ... and its offset pointer */
- ptr = (mem_size_t)((u8_t *)mem - ram);
- size = mem->next - ptr - SIZEOF_STRUCT_MEM;
- 802fa1a: f834 7c08 ldrh.w r7, [r4, #-8]
- return rmem;
- }
- /* Get the corresponding struct mem ... */
- mem = (struct mem *)(void *)((u8_t *)rmem - SIZEOF_STRUCT_MEM);
- /* ... and its offset pointer */
- ptr = (mem_size_t)((u8_t *)mem - ram);
- 802fa1e: 1af6 subs r6, r6, r3
- size = mem->next - ptr - SIZEOF_STRUCT_MEM;
- 802fa20: 3f08 subs r7, #8
- return rmem;
- }
- /* Get the corresponding struct mem ... */
- mem = (struct mem *)(void *)((u8_t *)rmem - SIZEOF_STRUCT_MEM);
- /* ... and its offset pointer */
- ptr = (mem_size_t)((u8_t *)mem - ram);
- 802fa22: b2b6 uxth r6, r6
- size = mem->next - ptr - SIZEOF_STRUCT_MEM;
- 802fa24: 1bbf subs r7, r7, r6
- 802fa26: b2bf uxth r7, r7
- LWIP_ASSERT("mem_trim can only shrink memory", newsize <= size);
- if (newsize > size) {
- 802fa28: 42bd cmp r5, r7
- 802fa2a: d838 bhi.n 802fa9e <mem_trim+0xc2>
- /* not supported */
- return NULL;
- }
- if (newsize == size) {
- 802fa2c: d038 beq.n 802faa0 <mem_trim+0xc4>
- /* No change in size, simply return */
- return rmem;
- }
- /* protect the heap from concurrent access */
- LWIP_MEM_FREE_PROTECT();
- 802fa2e: 481f ldr r0, [pc, #124] ; (802faac <mem_trim+0xd0>)
- 802fa30: f008 f808 bl 8037a44 <sys_mutex_lock>
- mem2 = (struct mem *)(void *)&ram[mem->next];
- 802fa34: f8d8 3000 ldr.w r3, [r8]
- 802fa38: f834 1c08 ldrh.w r1, [r4, #-8]
- 802fa3c: 185a adds r2, r3, r1
- if(mem2->used == 0) {
- 802fa3e: 7910 ldrb r0, [r2, #4]
- 802fa40: b978 cbnz r0, 802fa62 <mem_trim+0x86>
- /* The next struct is unused, we can simply move it at little */
- mem_size_t next;
- /* remember the old next pointer */
- next = mem2->next;
- 802fa42: 5a5f ldrh r7, [r3, r1]
- /* create new struct mem which is moved directly after the shrinked mem */
- ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize;
- 802fa44: f106 0108 add.w r1, r6, #8
- 802fa48: 186d adds r5, r5, r1
- if (lfree == mem2) {
- 802fa4a: 4919 ldr r1, [pc, #100] ; (802fab0 <mem_trim+0xd4>)
- 802fa4c: 6808 ldr r0, [r1, #0]
- /* The next struct is unused, we can simply move it at little */
- mem_size_t next;
- /* remember the old next pointer */
- next = mem2->next;
- /* create new struct mem which is moved directly after the shrinked mem */
- ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize;
- 802fa4e: b2ad uxth r5, r5
- if (lfree == mem2) {
- 802fa50: 4290 cmp r0, r2
- 802fa52: eb03 0205 add.w r2, r3, r5
- lfree = (struct mem *)(void *)&ram[ptr2];
- 802fa56: bf08 it eq
- 802fa58: 600a streq r2, [r1, #0]
- }
- mem2 = (struct mem *)(void *)&ram[ptr2];
- mem2->used = 0;
- 802fa5a: 2100 movs r1, #0
- 802fa5c: 7111 strb r1, [r2, #4]
- /* restore the next pointer */
- mem2->next = next;
- 802fa5e: 535f strh r7, [r3, r5]
- 802fa60: e010 b.n 802fa84 <mem_trim+0xa8>
- if (mem2->next != MEM_SIZE_ALIGNED) {
- ((struct mem *)(void *)&ram[mem2->next])->prev = ptr2;
- }
- MEM_STATS_DEC_USED(used, (size - newsize));
- /* no need to plug holes, we've already done that */
- } else if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED <= size) {
- 802fa62: f105 0214 add.w r2, r5, #20
- 802fa66: 42ba cmp r2, r7
- 802fa68: d815 bhi.n 802fa96 <mem_trim+0xba>
- * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty
- * region that couldn't hold data, but when mem->next gets freed,
- * the 2 regions would be combined, resulting in more free memory */
- ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize;
- mem2 = (struct mem *)(void *)&ram[ptr2];
- if (mem2 < lfree) {
- 802fa6a: 4811 ldr r0, [pc, #68] ; (802fab0 <mem_trim+0xd4>)
- * Old size ('size') must be big enough to contain at least 'newsize' plus a struct mem
- * ('SIZEOF_STRUCT_MEM') with some data ('MIN_SIZE_ALIGNED').
- * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty
- * region that couldn't hold data, but when mem->next gets freed,
- * the 2 regions would be combined, resulting in more free memory */
- ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize;
- 802fa6c: f106 0208 add.w r2, r6, #8
- 802fa70: 18ad adds r5, r5, r2
- mem2 = (struct mem *)(void *)&ram[ptr2];
- if (mem2 < lfree) {
- 802fa72: 6807 ldr r7, [r0, #0]
- * Old size ('size') must be big enough to contain at least 'newsize' plus a struct mem
- * ('SIZEOF_STRUCT_MEM') with some data ('MIN_SIZE_ALIGNED').
- * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty
- * region that couldn't hold data, but when mem->next gets freed,
- * the 2 regions would be combined, resulting in more free memory */
- ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize;
- 802fa74: b2ad uxth r5, r5
- mem2 = (struct mem *)(void *)&ram[ptr2];
- 802fa76: 195a adds r2, r3, r5
- if (mem2 < lfree) {
- 802fa78: 42ba cmp r2, r7
- lfree = mem2;
- 802fa7a: bf38 it cc
- 802fa7c: 6002 strcc r2, [r0, #0]
- }
- mem2->used = 0;
- mem2->next = mem->next;
- 802fa7e: 5359 strh r1, [r3, r5]
- ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize;
- mem2 = (struct mem *)(void *)&ram[ptr2];
- if (mem2 < lfree) {
- lfree = mem2;
- }
- mem2->used = 0;
- 802fa80: 2000 movs r0, #0
- 802fa82: 7110 strb r0, [r2, #4]
- mem2->next = mem->next;
- mem2->prev = ptr;
- 802fa84: 8056 strh r6, [r2, #2]
- mem->next = ptr2;
- 802fa86: f824 5c08 strh.w r5, [r4, #-8]
- if (mem2->next != MEM_SIZE_ALIGNED) {
- 802fa8a: 5b5a ldrh r2, [r3, r5]
- 802fa8c: f5b2 5fa0 cmp.w r2, #5120 ; 0x1400
- ((struct mem *)(void *)&ram[mem2->next])->prev = ptr2;
- 802fa90: bf1c itt ne
- 802fa92: 189b addne r3, r3, r2
- 802fa94: 805d strhne r5, [r3, #2]
- -> the remaining space stays unused since it is too small
- } */
- #if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
- mem_free_count = 1;
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- LWIP_MEM_FREE_UNPROTECT();
- 802fa96: 4805 ldr r0, [pc, #20] ; (802faac <mem_trim+0xd0>)
- 802fa98: f007 ffe0 bl 8037a5c <sys_mutex_unlock>
- return rmem;
- 802fa9c: e000 b.n 802faa0 <mem_trim+0xc4>
- /* every data block must be at least MIN_SIZE_ALIGNED long */
- newsize = MIN_SIZE_ALIGNED;
- }
- if (newsize > MEM_SIZE_ALIGNED) {
- return NULL;
- 802fa9e: 2400 movs r4, #0
- #if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
- mem_free_count = 1;
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- LWIP_MEM_FREE_UNPROTECT();
- return rmem;
- }
- 802faa0: 4620 mov r0, r4
- 802faa2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 802faa6: bf00 nop
- 802faa8: 20000d48 .word 0x20000d48
- 802faac: 20000d4c .word 0x20000d4c
- 802fab0: 20000d44 .word 0x20000d44
- 802fab4: 20000d50 .word 0x20000d50
- 0802fab8 <mem_malloc>:
- *
- * Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT).
- */
- void *
- mem_malloc(mem_size_t size)
- {
- 802fab8: b5f8 push {r3, r4, r5, r6, r7, lr}
- #if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
- u8_t local_mem_free_count = 0;
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- LWIP_MEM_ALLOC_DECL_PROTECT();
- if (size == 0) {
- 802faba: 2800 cmp r0, #0
- 802fabc: d056 beq.n 802fb6c <mem_malloc+0xb4>
- return NULL;
- }
- /* Expand the size of the allocated memory region so that we can
- adjust for alignment. */
- size = LWIP_MEM_ALIGN_SIZE(size);
- 802fabe: 3003 adds r0, #3
- 802fac0: f64f 74fc movw r4, #65532 ; 0xfffc
- 802fac4: 4004 ands r4, r0
- if(size < MIN_SIZE_ALIGNED) {
- 802fac6: 2c0b cmp r4, #11
- 802fac8: d903 bls.n 802fad2 <mem_malloc+0x1a>
- /* every data block must be at least MIN_SIZE_ALIGNED long */
- size = MIN_SIZE_ALIGNED;
- }
- if (size > MEM_SIZE_ALIGNED) {
- 802faca: f5b4 5fa0 cmp.w r4, #5120 ; 0x1400
- 802face: d901 bls.n 802fad4 <mem_malloc+0x1c>
- 802fad0: e04b b.n 802fb6a <mem_malloc+0xb2>
- adjust for alignment. */
- size = LWIP_MEM_ALIGN_SIZE(size);
- if(size < MIN_SIZE_ALIGNED) {
- /* every data block must be at least MIN_SIZE_ALIGNED long */
- size = MIN_SIZE_ALIGNED;
- 802fad2: 240c movs r4, #12
- if (size > MEM_SIZE_ALIGNED) {
- return NULL;
- }
- /* protect the heap from concurrent access */
- sys_mutex_lock(&mem_mutex);
- 802fad4: 4826 ldr r0, [pc, #152] ; (802fb70 <mem_malloc+0xb8>)
- 802fad6: f007 ffb5 bl 8037a44 <sys_mutex_lock>
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- /* Scan through the heap searching for a free block that is big enough,
- * beginning with the lowest free block.
- */
- for (ptr = (mem_size_t)((u8_t *)lfree - ram); ptr < MEM_SIZE_ALIGNED - size;
- 802fada: 4b26 ldr r3, [pc, #152] ; (802fb74 <mem_malloc+0xbc>)
- 802fadc: 6819 ldr r1, [r3, #0]
- 802fade: 4b26 ldr r3, [pc, #152] ; (802fb78 <mem_malloc+0xc0>)
- 802fae0: 681a ldr r2, [r3, #0]
- 802fae2: 1a8b subs r3, r1, r2
- 802fae4: b29b uxth r3, r3
- 802fae6: f5c4 5ea0 rsb lr, r4, #5120 ; 0x1400
- 802faea: e039 b.n 802fb60 <mem_malloc+0xa8>
- ptr = ((struct mem *)(void *)&ram[ptr])->next) {
- mem = (struct mem *)(void *)&ram[ptr];
- 802faec: 18d5 adds r5, r2, r3
- local_mem_free_count = 1;
- break;
- }
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- if ((!mem->used) &&
- 802faee: 792f ldrb r7, [r5, #4]
- 802faf0: 2f00 cmp r7, #0
- 802faf2: d134 bne.n 802fb5e <mem_malloc+0xa6>
- (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) {
- 802faf4: 5ad6 ldrh r6, [r2, r3]
- 802faf6: f1a6 0008 sub.w r0, r6, #8
- 802fafa: 1ac0 subs r0, r0, r3
- local_mem_free_count = 1;
- break;
- }
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- if ((!mem->used) &&
- 802fafc: 42a0 cmp r0, r4
- 802fafe: d32e bcc.n 802fb5e <mem_malloc+0xa6>
- (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) {
- /* mem is not used and at least perfect fit is possible:
- * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */
- if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) {
- 802fb00: f104 0e14 add.w lr, r4, #20
- 802fb04: 4570 cmp r0, lr
- 802fb06: d310 bcc.n 802fb2a <mem_malloc+0x72>
- * struct mem would fit in but no data between mem2 and mem2->next
- * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty
- * region that couldn't hold data, but when mem->next gets freed,
- * the 2 regions would be combined, resulting in more free memory
- */
- ptr2 = ptr + SIZEOF_STRUCT_MEM + size;
- 802fb08: 3408 adds r4, #8
- 802fb0a: 191c adds r4, r3, r4
- 802fb0c: b2a4 uxth r4, r4
- /* create mem2 struct */
- mem2 = (struct mem *)(void *)&ram[ptr2];
- 802fb0e: 1910 adds r0, r2, r4
- mem2->used = 0;
- mem2->next = mem->next;
- 802fb10: 5316 strh r6, [r2, r4]
- mem2->prev = ptr;
- 802fb12: 8043 strh r3, [r0, #2]
- /* and insert it between mem and mem->next */
- mem->next = ptr2;
- 802fb14: 802c strh r4, [r5, #0]
- mem->used = 1;
- 802fb16: 2301 movs r3, #1
- * the 2 regions would be combined, resulting in more free memory
- */
- ptr2 = ptr + SIZEOF_STRUCT_MEM + size;
- /* create mem2 struct */
- mem2 = (struct mem *)(void *)&ram[ptr2];
- mem2->used = 0;
- 802fb18: 7107 strb r7, [r0, #4]
- mem2->next = mem->next;
- mem2->prev = ptr;
- /* and insert it between mem and mem->next */
- mem->next = ptr2;
- mem->used = 1;
- 802fb1a: 712b strb r3, [r5, #4]
- if (mem2->next != MEM_SIZE_ALIGNED) {
- 802fb1c: 5b13 ldrh r3, [r2, r4]
- 802fb1e: f5b3 5fa0 cmp.w r3, #5120 ; 0x1400
- 802fb22: d004 beq.n 802fb2e <mem_malloc+0x76>
- ((struct mem *)(void *)&ram[mem2->next])->prev = ptr2;
- 802fb24: 18d2 adds r2, r2, r3
- 802fb26: 8054 strh r4, [r2, #2]
- 802fb28: e001 b.n 802fb2e <mem_malloc+0x76>
- * take care of this).
- * -> near fit or excact fit: do not split, no mem2 creation
- * also can't move mem->next directly behind mem, since mem->next
- * will always be used at this point!
- */
- mem->used = 1;
- 802fb2a: 2301 movs r3, #1
- 802fb2c: 712b strb r3, [r5, #4]
- MEM_STATS_INC_USED(used, mem->next - (mem_size_t)((u8_t *)mem - ram));
- }
- #if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
- mem_malloc_adjust_lfree:
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- if (mem == lfree) {
- 802fb2e: 428d cmp r5, r1
- 802fb30: d10f bne.n 802fb52 <mem_malloc+0x9a>
- struct mem *cur = lfree;
- /* Find next free block after mem and update lowest free pointer */
- while (cur->used && cur != ram_end) {
- 802fb32: 4b12 ldr r3, [pc, #72] ; (802fb7c <mem_malloc+0xc4>)
- 802fb34: 681a ldr r2, [r3, #0]
- /* If mem_free or mem_trim have run, we have to restart since they
- could have altered our current struct mem or lfree. */
- goto mem_malloc_adjust_lfree;
- }
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- cur = (struct mem *)(void *)&ram[cur->next];
- 802fb36: 4b10 ldr r3, [pc, #64] ; (802fb78 <mem_malloc+0xc0>)
- 802fb38: 6819 ldr r1, [r3, #0]
- 802fb3a: 462b mov r3, r5
- 802fb3c: e001 b.n 802fb42 <mem_malloc+0x8a>
- 802fb3e: 881b ldrh r3, [r3, #0]
- 802fb40: 18cb adds r3, r1, r3
- mem_malloc_adjust_lfree:
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- if (mem == lfree) {
- struct mem *cur = lfree;
- /* Find next free block after mem and update lowest free pointer */
- while (cur->used && cur != ram_end) {
- 802fb42: 7918 ldrb r0, [r3, #4]
- 802fb44: b910 cbnz r0, 802fb4c <mem_malloc+0x94>
- goto mem_malloc_adjust_lfree;
- }
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- cur = (struct mem *)(void *)&ram[cur->next];
- }
- lfree = cur;
- 802fb46: 4a0b ldr r2, [pc, #44] ; (802fb74 <mem_malloc+0xbc>)
- 802fb48: 6013 str r3, [r2, #0]
- 802fb4a: e002 b.n 802fb52 <mem_malloc+0x9a>
- mem_malloc_adjust_lfree:
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- if (mem == lfree) {
- struct mem *cur = lfree;
- /* Find next free block after mem and update lowest free pointer */
- while (cur->used && cur != ram_end) {
- 802fb4c: 4293 cmp r3, r2
- 802fb4e: d1f6 bne.n 802fb3e <mem_malloc+0x86>
- 802fb50: e7f9 b.n 802fb46 <mem_malloc+0x8e>
- }
- lfree = cur;
- LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used)));
- }
- LWIP_MEM_ALLOC_UNPROTECT();
- sys_mutex_unlock(&mem_mutex);
- 802fb52: 4807 ldr r0, [pc, #28] ; (802fb70 <mem_malloc+0xb8>)
- 802fb54: f007 ff82 bl 8037a5c <sys_mutex_unlock>
- LWIP_ASSERT("mem_malloc: allocated memory properly aligned.",
- ((mem_ptr_t)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0);
- LWIP_ASSERT("mem_malloc: sanity check alignment",
- (((mem_ptr_t)mem) & (MEM_ALIGNMENT-1)) == 0);
- return (u8_t *)mem + SIZEOF_STRUCT_MEM;
- 802fb58: f105 0008 add.w r0, r5, #8
- 802fb5c: bdf8 pop {r3, r4, r5, r6, r7, pc}
- /* Scan through the heap searching for a free block that is big enough,
- * beginning with the lowest free block.
- */
- for (ptr = (mem_size_t)((u8_t *)lfree - ram); ptr < MEM_SIZE_ALIGNED - size;
- ptr = ((struct mem *)(void *)&ram[ptr])->next) {
- 802fb5e: 882b ldrh r3, [r5, #0]
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- /* Scan through the heap searching for a free block that is big enough,
- * beginning with the lowest free block.
- */
- for (ptr = (mem_size_t)((u8_t *)lfree - ram); ptr < MEM_SIZE_ALIGNED - size;
- 802fb60: 4573 cmp r3, lr
- 802fb62: dbc3 blt.n 802faec <mem_malloc+0x34>
- } while(local_mem_free_count != 0);
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("mem_malloc: could not allocate %"S16_F" bytes\n", (s16_t)size));
- MEM_STATS_INC(err);
- LWIP_MEM_ALLOC_UNPROTECT();
- sys_mutex_unlock(&mem_mutex);
- 802fb64: 4802 ldr r0, [pc, #8] ; (802fb70 <mem_malloc+0xb8>)
- 802fb66: f007 ff79 bl 8037a5c <sys_mutex_unlock>
- u8_t local_mem_free_count = 0;
- #endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */
- LWIP_MEM_ALLOC_DECL_PROTECT();
- if (size == 0) {
- return NULL;
- 802fb6a: 2000 movs r0, #0
- LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("mem_malloc: could not allocate %"S16_F" bytes\n", (s16_t)size));
- MEM_STATS_INC(err);
- LWIP_MEM_ALLOC_UNPROTECT();
- sys_mutex_unlock(&mem_mutex);
- return NULL;
- }
- 802fb6c: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 802fb6e: bf00 nop
- 802fb70: 20000d4c .word 0x20000d4c
- 802fb74: 20000d44 .word 0x20000d44
- 802fb78: 20000d50 .word 0x20000d50
- 802fb7c: 20000d48 .word 0x20000d48
- 0802fb80 <memp_init>:
- MEMP_STATS_AVAIL(err, i, 0);
- MEMP_STATS_AVAIL(avail, i, memp_num[i]);
- }
- #if !MEMP_SEPARATE_POOLS
- memp = (struct memp *)LWIP_MEM_ALIGN(memp_memory);
- 802fb80: 4a0e ldr r2, [pc, #56] ; (802fbbc <memp_init+0x3c>)
- 802fb82: 490f ldr r1, [pc, #60] ; (802fbc0 <memp_init+0x40>)
- *
- * Carves out memp_memory into linked lists for each pool-type.
- */
- void
- memp_init(void)
- {
- 802fb84: b5f0 push {r4, r5, r6, r7, lr}
- MEMP_STATS_AVAIL(err, i, 0);
- MEMP_STATS_AVAIL(avail, i, memp_num[i]);
- }
- #if !MEMP_SEPARATE_POOLS
- memp = (struct memp *)LWIP_MEM_ALIGN(memp_memory);
- 802fb86: 2300 movs r3, #0
- memp_tab[i] = NULL;
- #if MEMP_SEPARATE_POOLS
- memp = (struct memp*)memp_bases[i];
- #endif /* MEMP_SEPARATE_POOLS */
- /* create a linked list of memp elements */
- for (j = 0; j < memp_num[i]; ++j) {
- 802fb88: 4e0e ldr r6, [pc, #56] ; (802fbc4 <memp_init+0x44>)
- memp->next = memp_tab[i];
- memp_tab[i] = memp;
- memp = (struct memp *)(void *)((u8_t *)memp + MEMP_SIZE + memp_sizes[i]
- 802fb8a: 4f0f ldr r7, [pc, #60] ; (802fbc8 <memp_init+0x48>)
- MEMP_STATS_AVAIL(err, i, 0);
- MEMP_STATS_AVAIL(avail, i, memp_num[i]);
- }
- #if !MEMP_SEPARATE_POOLS
- memp = (struct memp *)LWIP_MEM_ALIGN(memp_memory);
- 802fb8c: f022 0203 bic.w r2, r2, #3
- #endif /* !MEMP_SEPARATE_POOLS */
- /* for every pool: */
- for (i = 0; i < MEMP_MAX; ++i) {
- memp_tab[i] = NULL;
- 802fb90: 461d mov r5, r3
- 802fb92: f841 5b04 str.w r5, [r1], #4
- #if MEMP_SEPARATE_POOLS
- memp = (struct memp*)memp_bases[i];
- #endif /* MEMP_SEPARATE_POOLS */
- /* create a linked list of memp elements */
- for (j = 0; j < memp_num[i]; ++j) {
- 802fb96: f833 c006 ldrh.w ip, [r3, r6]
- 802fb9a: 2000 movs r0, #0
- 802fb9c: e008 b.n 802fbb0 <memp_init+0x30>
- memp->next = memp_tab[i];
- 802fb9e: f851 4c04 ldr.w r4, [r1, #-4]
- 802fba2: 6014 str r4, [r2, #0]
- memp_tab[i] = memp;
- memp = (struct memp *)(void *)((u8_t *)memp + MEMP_SIZE + memp_sizes[i]
- 802fba4: 5bdc ldrh r4, [r3, r7]
- memp = (struct memp*)memp_bases[i];
- #endif /* MEMP_SEPARATE_POOLS */
- /* create a linked list of memp elements */
- for (j = 0; j < memp_num[i]; ++j) {
- memp->next = memp_tab[i];
- memp_tab[i] = memp;
- 802fba6: f841 2c04 str.w r2, [r1, #-4]
- memp_tab[i] = NULL;
- #if MEMP_SEPARATE_POOLS
- memp = (struct memp*)memp_bases[i];
- #endif /* MEMP_SEPARATE_POOLS */
- /* create a linked list of memp elements */
- for (j = 0; j < memp_num[i]; ++j) {
- 802fbaa: 3001 adds r0, #1
- memp->next = memp_tab[i];
- memp_tab[i] = memp;
- memp = (struct memp *)(void *)((u8_t *)memp + MEMP_SIZE + memp_sizes[i]
- 802fbac: 1912 adds r2, r2, r4
- memp_tab[i] = NULL;
- #if MEMP_SEPARATE_POOLS
- memp = (struct memp*)memp_bases[i];
- #endif /* MEMP_SEPARATE_POOLS */
- /* create a linked list of memp elements */
- for (j = 0; j < memp_num[i]; ++j) {
- 802fbae: b280 uxth r0, r0
- 802fbb0: 4560 cmp r0, ip
- 802fbb2: d1f4 bne.n 802fb9e <memp_init+0x1e>
- 802fbb4: 3302 adds r3, #2
- #if !MEMP_SEPARATE_POOLS
- memp = (struct memp *)LWIP_MEM_ALIGN(memp_memory);
- #endif /* !MEMP_SEPARATE_POOLS */
- /* for every pool: */
- for (i = 0; i < MEMP_MAX; ++i) {
- 802fbb6: 2b20 cmp r3, #32
- 802fbb8: d1eb bne.n 802fb92 <memp_init+0x12>
- #if MEMP_OVERFLOW_CHECK
- memp_overflow_init();
- /* check everything a first time to see if it worked */
- memp_overflow_check_all();
- #endif /* MEMP_OVERFLOW_CHECK */
- }
- 802fbba: bdf0 pop {r4, r5, r6, r7, pc}
- 802fbbc: 20000d57 .word 0x20000d57
- 802fbc0: 2000c394 .word 0x2000c394
- 802fbc4: 08044fa0 .word 0x08044fa0
- 802fbc8: 08044fc0 .word 0x08044fc0
- 0802fbcc <memp_malloc>:
- #endif
- {
- struct memp *memp;
- SYS_ARCH_DECL_PROTECT(old_level);
-
- LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;);
- 802fbcc: 280f cmp r0, #15
- #if !MEMP_OVERFLOW_CHECK
- memp_malloc(memp_t type)
- #else
- memp_malloc_fn(memp_t type, const char* file, const int line)
- #endif
- {
- 802fbce: b538 push {r3, r4, r5, lr}
- 802fbd0: 4605 mov r5, r0
- struct memp *memp;
- SYS_ARCH_DECL_PROTECT(old_level);
-
- LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;);
- 802fbd2: d80b bhi.n 802fbec <memp_malloc+0x20>
- SYS_ARCH_PROTECT(old_level);
- 802fbd4: f007 ff78 bl 8037ac8 <sys_arch_protect>
- #if MEMP_OVERFLOW_CHECK >= 2
- memp_overflow_check_all();
- #endif /* MEMP_OVERFLOW_CHECK >= 2 */
- memp = memp_tab[type];
- 802fbd8: 4b06 ldr r3, [pc, #24] ; (802fbf4 <memp_malloc+0x28>)
- 802fbda: f853 4025 ldr.w r4, [r3, r5, lsl #2]
-
- if (memp != NULL) {
- 802fbde: b114 cbz r4, 802fbe6 <memp_malloc+0x1a>
- memp_tab[type] = memp->next;
- 802fbe0: 6822 ldr r2, [r4, #0]
- 802fbe2: f843 2025 str.w r2, [r3, r5, lsl #2]
- } else {
- LWIP_DEBUGF(MEMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("memp_malloc: out of memory in pool %s\n", memp_desc[type]));
- MEMP_STATS_INC(err, type);
- }
- SYS_ARCH_UNPROTECT(old_level);
- 802fbe6: f007 ff79 bl 8037adc <sys_arch_unprotect>
- return memp;
- 802fbea: e000 b.n 802fbee <memp_malloc+0x22>
- #endif
- {
- struct memp *memp;
- SYS_ARCH_DECL_PROTECT(old_level);
-
- LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;);
- 802fbec: 2400 movs r4, #0
- }
- SYS_ARCH_UNPROTECT(old_level);
- return memp;
- }
- 802fbee: 4620 mov r0, r4
- 802fbf0: bd38 pop {r3, r4, r5, pc}
- 802fbf2: bf00 nop
- 802fbf4: 2000c394 .word 0x2000c394
- 0802fbf8 <memp_free>:
- * @param type the pool where to put mem
- * @param mem the memp element to free
- */
- void
- memp_free(memp_t type, void *mem)
- {
- 802fbf8: b538 push {r3, r4, r5, lr}
- 802fbfa: 4605 mov r5, r0
- struct memp *memp;
- SYS_ARCH_DECL_PROTECT(old_level);
- if (mem == NULL) {
- 802fbfc: 460c mov r4, r1
- 802fbfe: b159 cbz r1, 802fc18 <memp_free+0x20>
- LWIP_ASSERT("memp_free: mem properly aligned",
- ((mem_ptr_t)mem % MEM_ALIGNMENT) == 0);
- memp = (struct memp *)(void *)((u8_t*)mem - MEMP_SIZE);
- SYS_ARCH_PROTECT(old_level);
- 802fc00: f007 ff62 bl 8037ac8 <sys_arch_protect>
- #endif /* MEMP_OVERFLOW_CHECK >= 2 */
- #endif /* MEMP_OVERFLOW_CHECK */
- MEMP_STATS_DEC(used, type);
-
- memp->next = memp_tab[type];
- 802fc04: 4b05 ldr r3, [pc, #20] ; (802fc1c <memp_free+0x24>)
- 802fc06: f853 2025 ldr.w r2, [r3, r5, lsl #2]
- 802fc0a: 6022 str r2, [r4, #0]
- memp_tab[type] = memp;
- 802fc0c: f843 4025 str.w r4, [r3, r5, lsl #2]
- #if MEMP_SANITY_CHECK
- LWIP_ASSERT("memp sanity", memp_sanity());
- #endif /* MEMP_SANITY_CHECK */
- SYS_ARCH_UNPROTECT(old_level);
- }
- 802fc10: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- #if MEMP_SANITY_CHECK
- LWIP_ASSERT("memp sanity", memp_sanity());
- #endif /* MEMP_SANITY_CHECK */
- SYS_ARCH_UNPROTECT(old_level);
- 802fc14: f007 bf62 b.w 8037adc <sys_arch_unprotect>
- 802fc18: bd38 pop {r3, r4, r5, pc}
- 802fc1a: bf00 nop
- 802fc1c: 2000c394 .word 0x2000c394
- 0802fc20 <netif_init>:
- }
- #endif /* LWIP_HAVE_LOOPIF */
- void
- netif_init(void)
- {
- 802fc20: 4770 bx lr
- 802fc22: 0000 movs r0, r0
- 0802fc24 <netif_set_ipaddr>:
- * @note call netif_set_addr() if you also want to change netmask and
- * default gateway
- */
- void
- netif_set_ipaddr(struct netif *netif, ip_addr_t *ipaddr)
- {
- 802fc24: b570 push {r4, r5, r6, lr}
- 802fc26: 4604 mov r4, r0
- #if LWIP_TCP
- struct tcp_pcb *pcb;
- struct tcp_pcb_listen *lpcb;
- /* address is actually being changed? */
- if (ipaddr && (ip_addr_cmp(ipaddr, &(netif->ip_addr))) == 0) {
- 802fc28: 460d mov r5, r1
- 802fc2a: b941 cbnz r1, 802fc3e <netif_set_ipaddr+0x1a>
- ip_addr_set(&(lpcb->local_ip), ipaddr);
- }
- }
- }
- #endif
- snmp_delete_ipaddridx_tree(netif);
- 802fc2c: 4620 mov r0, r4
- 802fc2e: f004 fed7 bl 80349e0 <snmp_delete_ipaddridx_tree>
- snmp_delete_iprteidx_tree(0,netif);
- 802fc32: 2000 movs r0, #0
- 802fc34: 4621 mov r1, r4
- 802fc36: f004 ff69 bl 8034b0c <snmp_delete_iprteidx_tree>
- /* set new IP address to netif */
- ip_addr_set(&(netif->ip_addr), ipaddr);
- 802fc3a: b9fd cbnz r5, 802fc7c <netif_set_ipaddr+0x58>
- 802fc3c: e01f b.n 802fc7e <netif_set_ipaddr+0x5a>
- #if LWIP_TCP
- struct tcp_pcb *pcb;
- struct tcp_pcb_listen *lpcb;
- /* address is actually being changed? */
- if (ipaddr && (ip_addr_cmp(ipaddr, &(netif->ip_addr))) == 0) {
- 802fc3e: 680a ldr r2, [r1, #0]
- 802fc40: 6843 ldr r3, [r0, #4]
- 802fc42: 429a cmp r2, r3
- 802fc44: d0f2 beq.n 802fc2c <netif_set_ipaddr+0x8>
- /* extern struct tcp_pcb *tcp_active_pcbs; defined by tcp.h */
- LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: netif address being changed\n"));
- pcb = tcp_active_pcbs;
- 802fc46: 4b13 ldr r3, [pc, #76] ; (802fc94 <netif_set_ipaddr+0x70>)
- 802fc48: 6818 ldr r0, [r3, #0]
- while (pcb != NULL) {
- 802fc4a: e007 b.n 802fc5c <netif_set_ipaddr+0x38>
- /* PCB bound to current local interface address? */
- if (ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr))
- 802fc4c: 6802 ldr r2, [r0, #0]
- 802fc4e: 6863 ldr r3, [r4, #4]
- 802fc50: 68c6 ldr r6, [r0, #12]
- 802fc52: 429a cmp r2, r3
- 802fc54: d101 bne.n 802fc5a <netif_set_ipaddr+0x36>
- #endif /* LWIP_AUTOIP */
- ) {
- /* this connection must be aborted */
- struct tcp_pcb *next = pcb->next;
- LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: aborting TCP pcb %p\n", (void *)pcb));
- tcp_abort(pcb);
- 802fc56: f000 fe0b bl 8030870 <tcp_abort>
- pcb = next;
- } else {
- pcb = pcb->next;
- 802fc5a: 4630 mov r0, r6
- /* address is actually being changed? */
- if (ipaddr && (ip_addr_cmp(ipaddr, &(netif->ip_addr))) == 0) {
- /* extern struct tcp_pcb *tcp_active_pcbs; defined by tcp.h */
- LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: netif address being changed\n"));
- pcb = tcp_active_pcbs;
- while (pcb != NULL) {
- 802fc5c: 2800 cmp r0, #0
- 802fc5e: d1f5 bne.n 802fc4c <netif_set_ipaddr+0x28>
- pcb = next;
- } else {
- pcb = pcb->next;
- }
- }
- for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {
- 802fc60: 4b0d ldr r3, [pc, #52] ; (802fc98 <netif_set_ipaddr+0x74>)
- 802fc62: 681b ldr r3, [r3, #0]
- 802fc64: e007 b.n 802fc76 <netif_set_ipaddr+0x52>
- /* PCB bound to current local interface address? */
- if ((!(ip_addr_isany(&(lpcb->local_ip)))) &&
- 802fc66: 681a ldr r2, [r3, #0]
- 802fc68: b122 cbz r2, 802fc74 <netif_set_ipaddr+0x50>
- 802fc6a: 6861 ldr r1, [r4, #4]
- 802fc6c: 428a cmp r2, r1
- (ip_addr_cmp(&(lpcb->local_ip), &(netif->ip_addr)))) {
- /* The PCB is listening to the old ipaddr and
- * is set to listen to the new one instead */
- ip_addr_set(&(lpcb->local_ip), ipaddr);
- 802fc6e: bf04 itt eq
- 802fc70: 682a ldreq r2, [r5, #0]
- 802fc72: 601a streq r2, [r3, #0]
- pcb = next;
- } else {
- pcb = pcb->next;
- }
- }
- for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {
- 802fc74: 68db ldr r3, [r3, #12]
- 802fc76: 2b00 cmp r3, #0
- 802fc78: d1f5 bne.n 802fc66 <netif_set_ipaddr+0x42>
- 802fc7a: e7d7 b.n 802fc2c <netif_set_ipaddr+0x8>
- }
- #endif
- snmp_delete_ipaddridx_tree(netif);
- snmp_delete_iprteidx_tree(0,netif);
- /* set new IP address to netif */
- ip_addr_set(&(netif->ip_addr), ipaddr);
- 802fc7c: 682d ldr r5, [r5, #0]
- snmp_insert_ipaddridx_tree(netif);
- 802fc7e: 4620 mov r0, r4
- }
- #endif
- snmp_delete_ipaddridx_tree(netif);
- snmp_delete_iprteidx_tree(0,netif);
- /* set new IP address to netif */
- ip_addr_set(&(netif->ip_addr), ipaddr);
- 802fc80: 6065 str r5, [r4, #4]
- snmp_insert_ipaddridx_tree(netif);
- 802fc82: f004 fe6b bl 803495c <snmp_insert_ipaddridx_tree>
- snmp_insert_iprteidx_tree(0,netif);
- 802fc86: 2000 movs r0, #0
- 802fc88: 4621 mov r1, r4
- netif->name[0], netif->name[1],
- ip4_addr1_16(&netif->ip_addr),
- ip4_addr2_16(&netif->ip_addr),
- ip4_addr3_16(&netif->ip_addr),
- ip4_addr4_16(&netif->ip_addr)));
- }
- 802fc8a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- snmp_delete_ipaddridx_tree(netif);
- snmp_delete_iprteidx_tree(0,netif);
- /* set new IP address to netif */
- ip_addr_set(&(netif->ip_addr), ipaddr);
- snmp_insert_ipaddridx_tree(netif);
- snmp_insert_iprteidx_tree(0,netif);
- 802fc8e: f004 bef1 b.w 8034a74 <snmp_insert_iprteidx_tree>
- 802fc92: bf00 nop
- 802fc94: 2000f6bc .word 0x2000f6bc
- 802fc98: 2000f6c4 .word 0x2000f6c4
- 0802fc9c <netif_set_gw>:
- * @note call netif_set_addr() if you also want to change ip address and netmask
- */
- void
- netif_set_gw(struct netif *netif, ip_addr_t *gw)
- {
- ip_addr_set(&(netif->gw), gw);
- 802fc9c: b101 cbz r1, 802fca0 <netif_set_gw+0x4>
- 802fc9e: 6809 ldr r1, [r1, #0]
- 802fca0: 60c1 str r1, [r0, #12]
- 802fca2: 4770 bx lr
- 0802fca4 <netif_set_netmask>:
- * @note call netif_set_addr() if you also want to change ip address and
- * default gateway
- */
- void
- netif_set_netmask(struct netif *netif, ip_addr_t *netmask)
- {
- 802fca4: b538 push {r3, r4, r5, lr}
- 802fca6: 4604 mov r4, r0
- 802fca8: 460d mov r5, r1
- snmp_delete_iprteidx_tree(0, netif);
- 802fcaa: 2000 movs r0, #0
- 802fcac: 4621 mov r1, r4
- 802fcae: f004 ff2d bl 8034b0c <snmp_delete_iprteidx_tree>
- /* set new netmask to netif */
- ip_addr_set(&(netif->netmask), netmask);
- 802fcb2: b105 cbz r5, 802fcb6 <netif_set_netmask+0x12>
- 802fcb4: 682d ldr r5, [r5, #0]
- snmp_insert_iprteidx_tree(0, netif);
- 802fcb6: 2000 movs r0, #0
- 802fcb8: 4621 mov r1, r4
- void
- netif_set_netmask(struct netif *netif, ip_addr_t *netmask)
- {
- snmp_delete_iprteidx_tree(0, netif);
- /* set new netmask to netif */
- ip_addr_set(&(netif->netmask), netmask);
- 802fcba: 60a5 str r5, [r4, #8]
- netif->name[0], netif->name[1],
- ip4_addr1_16(&netif->netmask),
- ip4_addr2_16(&netif->netmask),
- ip4_addr3_16(&netif->netmask),
- ip4_addr4_16(&netif->netmask)));
- }
- 802fcbc: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- netif_set_netmask(struct netif *netif, ip_addr_t *netmask)
- {
- snmp_delete_iprteidx_tree(0, netif);
- /* set new netmask to netif */
- ip_addr_set(&(netif->netmask), netmask);
- snmp_insert_iprteidx_tree(0, netif);
- 802fcc0: f004 bed8 b.w 8034a74 <snmp_insert_iprteidx_tree>
- 0802fcc4 <netif_set_addr>:
- * @param gw the new default gateway
- */
- void
- netif_set_addr(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask,
- ip_addr_t *gw)
- {
- 802fcc4: b570 push {r4, r5, r6, lr}
- 802fcc6: 4605 mov r5, r0
- 802fcc8: 4616 mov r6, r2
- 802fcca: 461c mov r4, r3
- netif_set_ipaddr(netif, ipaddr);
- 802fccc: f7ff ffaa bl 802fc24 <netif_set_ipaddr>
- netif_set_netmask(netif, netmask);
- 802fcd0: 4628 mov r0, r5
- 802fcd2: 4631 mov r1, r6
- 802fcd4: f7ff ffe6 bl 802fca4 <netif_set_netmask>
- * @note call netif_set_addr() if you also want to change ip address and netmask
- */
- void
- netif_set_gw(struct netif *netif, ip_addr_t *gw)
- {
- ip_addr_set(&(netif->gw), gw);
- 802fcd8: b104 cbz r4, 802fcdc <netif_set_addr+0x18>
- 802fcda: 6824 ldr r4, [r4, #0]
- 802fcdc: 60ec str r4, [r5, #12]
- 802fcde: bd70 pop {r4, r5, r6, pc}
- 0802fce0 <netif_add>:
- * @return netif, or NULL if failed.
- */
- struct netif *
- netif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask,
- ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input)
- {
- 802fce0: b5f8 push {r3, r4, r5, r6, r7, lr}
- netif->loop_first = NULL;
- netif->loop_last = NULL;
- #endif /* ENABLE_LOOPBACK */
- /* remember netif specific state information data */
- netif->state = state;
- 802fce2: 9e06 ldr r6, [sp, #24]
- 802fce4: 61c6 str r6, [r0, #28]
- netif->num = netif_num++;
- 802fce6: 4e10 ldr r6, [pc, #64] ; (802fd28 <netif_add+0x48>)
- 802fce8: 7837 ldrb r7, [r6, #0]
- 802fcea: f880 7030 strb.w r7, [r0, #48] ; 0x30
- 802fcee: 3701 adds r7, #1
- 802fcf0: 7037 strb r7, [r6, #0]
- netif->input = input;
- 802fcf2: 9e08 ldr r6, [sp, #32]
- {
- LWIP_ASSERT("No init function given", init != NULL);
- /* reset new interface configuration state */
- ip_addr_set_zero(&netif->ip_addr);
- 802fcf4: 2500 movs r5, #0
- * @return netif, or NULL if failed.
- */
- struct netif *
- netif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask,
- ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input)
- {
- 802fcf6: 4604 mov r4, r0
- LWIP_ASSERT("No init function given", init != NULL);
- /* reset new interface configuration state */
- ip_addr_set_zero(&netif->ip_addr);
- 802fcf8: 6045 str r5, [r0, #4]
- ip_addr_set_zero(&netif->netmask);
- 802fcfa: 6085 str r5, [r0, #8]
- ip_addr_set_zero(&netif->gw);
- 802fcfc: 60c5 str r5, [r0, #12]
- netif->flags = 0;
- 802fcfe: f880 502d strb.w r5, [r0, #45] ; 0x2d
- #if LWIP_DHCP
- /* netif not under DHCP control by default */
- netif->dhcp = NULL;
- 802fd02: 6205 str r5, [r0, #32]
- #endif /* ENABLE_LOOPBACK */
- /* remember netif specific state information data */
- netif->state = state;
- netif->num = netif_num++;
- netif->input = input;
- 802fd04: 6106 str r6, [r0, #16]
- NETIF_SET_HWADDRHINT(netif, NULL);
- #if ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS
- netif->loop_cnt_current = 0;
- #endif /* ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS */
- netif_set_addr(netif, ipaddr, netmask, gw);
- 802fd06: f7ff ffdd bl 802fcc4 <netif_set_addr>
- /* call user specified initialization function for netif */
- if (init(netif) != ERR_OK) {
- 802fd0a: 4620 mov r0, r4
- 802fd0c: 9b07 ldr r3, [sp, #28]
- 802fd0e: 4798 blx r3
- 802fd10: b930 cbnz r0, 802fd20 <netif_add+0x40>
- return NULL;
- }
- /* add this netif to the list */
- netif->next = netif_list;
- 802fd12: 4b06 ldr r3, [pc, #24] ; (802fd2c <netif_add+0x4c>)
- 802fd14: 681a ldr r2, [r3, #0]
- 802fd16: 6022 str r2, [r4, #0]
- netif_list = netif;
- 802fd18: 601c str r4, [r3, #0]
- snmp_inc_iflist();
- 802fd1a: f004 fd03 bl 8034724 <snmp_inc_iflist>
- LWIP_DEBUGF(NETIF_DEBUG, (" netmask "));
- ip_addr_debug_print(NETIF_DEBUG, netmask);
- LWIP_DEBUGF(NETIF_DEBUG, (" gw "));
- ip_addr_debug_print(NETIF_DEBUG, gw);
- LWIP_DEBUGF(NETIF_DEBUG, ("\n"));
- return netif;
- 802fd1e: e000 b.n 802fd22 <netif_add+0x42>
- netif_set_addr(netif, ipaddr, netmask, gw);
- /* call user specified initialization function for netif */
- if (init(netif) != ERR_OK) {
- return NULL;
- 802fd20: 462c mov r4, r5
- ip_addr_debug_print(NETIF_DEBUG, netmask);
- LWIP_DEBUGF(NETIF_DEBUG, (" gw "));
- ip_addr_debug_print(NETIF_DEBUG, gw);
- LWIP_DEBUGF(NETIF_DEBUG, ("\n"));
- return netif;
- }
- 802fd22: 4620 mov r0, r4
- 802fd24: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 802fd26: bf00 nop
- 802fd28: 2000c3d4 .word 0x2000c3d4
- 802fd2c: 2000f6b0 .word 0x2000f6b0
- 0802fd30 <netif_set_default>:
- *
- * @param netif the default network interface
- */
- void
- netif_set_default(struct netif *netif)
- {
- 802fd30: b510 push {r4, lr}
- if (netif == NULL) {
- 802fd32: 4604 mov r4, r0
- /* remove default route */
- snmp_delete_iprteidx_tree(1, netif);
- 802fd34: 4621 mov r1, r4
- 802fd36: 2001 movs r0, #1
- * @param netif the default network interface
- */
- void
- netif_set_default(struct netif *netif)
- {
- if (netif == NULL) {
- 802fd38: b914 cbnz r4, 802fd40 <netif_set_default+0x10>
- /* remove default route */
- snmp_delete_iprteidx_tree(1, netif);
- 802fd3a: f004 fee7 bl 8034b0c <snmp_delete_iprteidx_tree>
- 802fd3e: e001 b.n 802fd44 <netif_set_default+0x14>
- } else {
- /* install default route */
- snmp_insert_iprteidx_tree(1, netif);
- 802fd40: f004 fe98 bl 8034a74 <snmp_insert_iprteidx_tree>
- }
- netif_default = netif;
- 802fd44: 4b01 ldr r3, [pc, #4] ; (802fd4c <netif_set_default+0x1c>)
- 802fd46: 601c str r4, [r3, #0]
- 802fd48: bd10 pop {r4, pc}
- 802fd4a: bf00 nop
- 802fd4c: 2000f6b4 .word 0x2000f6b4
- 0802fd50 <netif_set_up>:
- * up once configured.
- *
- * @see dhcp_start()
- */
- void netif_set_up(struct netif *netif)
- {
- 802fd50: b510 push {r4, lr}
- if (!(netif->flags & NETIF_FLAG_UP)) {
- 802fd52: f890 302d ldrb.w r3, [r0, #45] ; 0x2d
- 802fd56: 07da lsls r2, r3, #31
- * up once configured.
- *
- * @see dhcp_start()
- */
- void netif_set_up(struct netif *netif)
- {
- 802fd58: 4604 mov r4, r0
- if (!(netif->flags & NETIF_FLAG_UP)) {
- 802fd5a: d412 bmi.n 802fd82 <netif_set_up+0x32>
- netif->flags |= NETIF_FLAG_UP;
- 802fd5c: f043 0301 orr.w r3, r3, #1
- 802fd60: f880 302d strb.w r3, [r0, #45] ; 0x2d
-
- #if LWIP_SNMP
- snmp_get_sysuptime(&netif->ts);
- 802fd64: 3038 adds r0, #56 ; 0x38
- 802fd66: f004 fc77 bl 8034658 <snmp_get_sysuptime>
- * @note: Enabling DHCP on a down interface will make it come
- * up once configured.
- *
- * @see dhcp_start()
- */
- void netif_set_up(struct netif *netif)
- 802fd6a: f894 302d ldrb.w r3, [r4, #45] ; 0x2d
- NETIF_STATUS_CALLBACK(netif);
- if (netif->flags & NETIF_FLAG_LINK_UP) {
- #if LWIP_ARP
- /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */
- if (netif->flags & (NETIF_FLAG_ETHARP)) {
- 802fd6e: f003 0330 and.w r3, r3, #48 ; 0x30
- 802fd72: 2b30 cmp r3, #48 ; 0x30
- 802fd74: d105 bne.n 802fd82 <netif_set_up+0x32>
- etharp_gratuitous(netif);
- 802fd76: 4620 mov r0, r4
- 802fd78: 1d21 adds r1, r4, #4
- igmp_report_groups( netif);
- }
- #endif /* LWIP_IGMP */
- }
- }
- }
- 802fd7a: e8bd 4010 ldmia.w sp!, {r4, lr}
- if (netif->flags & NETIF_FLAG_LINK_UP) {
- #if LWIP_ARP
- /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */
- if (netif->flags & (NETIF_FLAG_ETHARP)) {
- etharp_gratuitous(netif);
- 802fd7e: f007 b9c9 b.w 8037114 <etharp_request>
- 802fd82: bd10 pop {r4, pc}
- 0802fd84 <netif_set_down>:
- * up once configured.
- *
- * @see dhcp_start()
- */
- void netif_set_down(struct netif *netif)
- {
- 802fd84: b510 push {r4, lr}
- if (netif->flags & NETIF_FLAG_UP) {
- 802fd86: f890 302d ldrb.w r3, [r0, #45] ; 0x2d
- 802fd8a: 07d9 lsls r1, r3, #31
- * up once configured.
- *
- * @see dhcp_start()
- */
- void netif_set_down(struct netif *netif)
- {
- 802fd8c: 4604 mov r4, r0
- if (netif->flags & NETIF_FLAG_UP) {
- 802fd8e: d511 bpl.n 802fdb4 <netif_set_down+0x30>
- netif->flags &= ~NETIF_FLAG_UP;
- 802fd90: f023 0301 bic.w r3, r3, #1
- 802fd94: f880 302d strb.w r3, [r0, #45] ; 0x2d
- #if LWIP_SNMP
- snmp_get_sysuptime(&netif->ts);
- 802fd98: 3038 adds r0, #56 ; 0x38
- 802fd9a: f004 fc5d bl 8034658 <snmp_get_sysuptime>
- #endif
- #if LWIP_ARP
- if (netif->flags & NETIF_FLAG_ETHARP) {
- 802fd9e: f894 302d ldrb.w r3, [r4, #45] ; 0x2d
- 802fda2: f003 0320 and.w r3, r3, #32
- 802fda6: b2db uxtb r3, r3
- 802fda8: b123 cbz r3, 802fdb4 <netif_set_down+0x30>
- etharp_cleanup_netif(netif);
- 802fdaa: 4620 mov r0, r4
- }
- #endif /* LWIP_ARP */
- NETIF_STATUS_CALLBACK(netif);
- }
- }
- 802fdac: e8bd 4010 ldmia.w sp!, {r4, lr}
- snmp_get_sysuptime(&netif->ts);
- #endif
- #if LWIP_ARP
- if (netif->flags & NETIF_FLAG_ETHARP) {
- etharp_cleanup_netif(netif);
- 802fdb0: f007 b980 b.w 80370b4 <etharp_cleanup_netif>
- 802fdb4: bd10 pop {r4, pc}
- 0802fdb6 <pbuf_header>:
- * @return non-zero on failure, zero on success.
- *
- */
- u8_t
- pbuf_header(struct pbuf *p, s16_t header_size_increment)
- {
- 802fdb6: b510 push {r4, lr}
- u16_t type;
- void *payload;
- u16_t increment_magnitude;
- LWIP_ASSERT("p != NULL", p != NULL);
- if ((header_size_increment == 0) || (p == NULL)) {
- 802fdb8: b321 cbz r1, 802fe04 <pbuf_header+0x4e>
- 802fdba: b330 cbz r0, 802fe0a <pbuf_header+0x54>
- return 0;
- }
-
- if (header_size_increment < 0){
- 802fdbc: 2900 cmp r1, #0
- 802fdbe: da05 bge.n 802fdcc <pbuf_header+0x16>
- increment_magnitude = -header_size_increment;
- 802fdc0: 424b negs r3, r1
- /* Check that we aren't going to move off the end of the pbuf */
- LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;);
- 802fdc2: 8942 ldrh r2, [r0, #10]
- if ((header_size_increment == 0) || (p == NULL)) {
- return 0;
- }
-
- if (header_size_increment < 0){
- increment_magnitude = -header_size_increment;
- 802fdc4: b29b uxth r3, r3
- /* Check that we aren't going to move off the end of the pbuf */
- LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;);
- 802fdc6: 429a cmp r2, r3
- 802fdc8: d201 bcs.n 802fdce <pbuf_header+0x18>
- 802fdca: e01d b.n 802fe08 <pbuf_header+0x52>
- } else {
- increment_magnitude = header_size_increment;
- 802fdcc: b28b uxth r3, r1
- LWIP_ASSERT("p->payload - increment_magnitude >= p + SIZEOF_STRUCT_PBUF",
- (u8_t *)p->payload - increment_magnitude >= (u8_t *)p + SIZEOF_STRUCT_PBUF);
- #endif
- }
- type = p->type;
- 802fdce: 7b02 ldrb r2, [r0, #12]
- /* remember current payload pointer */
- payload = p->payload;
- 802fdd0: 6844 ldr r4, [r0, #4]
- /* pbuf types containing payloads? */
- if (type == PBUF_RAM || type == PBUF_POOL) {
- 802fdd2: b10a cbz r2, 802fdd8 <pbuf_header+0x22>
- 802fdd4: 2a03 cmp r2, #3
- 802fdd6: d105 bne.n 802fde4 <pbuf_header+0x2e>
- /* set new payload pointer */
- p->payload = (u8_t *)p->payload - header_size_increment;
- 802fdd8: 1a64 subs r4, r4, r1
- /* boundary check fails? */
- if ((u8_t *)p->payload < (u8_t *)p + SIZEOF_STRUCT_PBUF) {
- 802fdda: f100 0310 add.w r3, r0, #16
- 802fdde: 429c cmp r4, r3
- 802fde0: d312 bcc.n 802fe08 <pbuf_header+0x52>
- 802fde2: e008 b.n 802fdf6 <pbuf_header+0x40>
- p->payload = payload;
- /* bail out unsuccesfully */
- return 1;
- }
- /* pbuf types refering to external payloads? */
- } else if (type == PBUF_REF || type == PBUF_ROM) {
- 802fde4: 3a01 subs r2, #1
- 802fde6: 2a01 cmp r2, #1
- 802fde8: d80e bhi.n 802fe08 <pbuf_header+0x52>
- /* hide a header in the payload? */
- if ((header_size_increment < 0) && (increment_magnitude <= p->len)) {
- 802fdea: 2900 cmp r1, #0
- 802fdec: da0c bge.n 802fe08 <pbuf_header+0x52>
- 802fdee: 8942 ldrh r2, [r0, #10]
- 802fdf0: 429a cmp r2, r3
- 802fdf2: d309 bcc.n 802fe08 <pbuf_header+0x52>
- /* increase payload pointer */
- p->payload = (u8_t *)p->payload - header_size_increment;
- 802fdf4: 1a64 subs r4, r4, r1
- /* Unknown type */
- LWIP_ASSERT("bad pbuf type", 0);
- return 1;
- }
- /* modify pbuf length fields */
- p->len += header_size_increment;
- 802fdf6: 8943 ldrh r3, [r0, #10]
- /* pbuf types refering to external payloads? */
- } else if (type == PBUF_REF || type == PBUF_ROM) {
- /* hide a header in the payload? */
- if ((header_size_increment < 0) && (increment_magnitude <= p->len)) {
- /* increase payload pointer */
- p->payload = (u8_t *)p->payload - header_size_increment;
- 802fdf8: 6044 str r4, [r0, #4]
- /* Unknown type */
- LWIP_ASSERT("bad pbuf type", 0);
- return 1;
- }
- /* modify pbuf length fields */
- p->len += header_size_increment;
- 802fdfa: 18cb adds r3, r1, r3
- 802fdfc: 8143 strh r3, [r0, #10]
- p->tot_len += header_size_increment;
- 802fdfe: 8903 ldrh r3, [r0, #8]
- 802fe00: 18c9 adds r1, r1, r3
- 802fe02: 8101 strh r1, [r0, #8]
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_header: old %p new %p (%"S16_F")\n",
- (void *)payload, (void *)p->payload, header_size_increment));
- return 0;
- 802fe04: 2000 movs r0, #0
- 802fe06: bd10 pop {r4, pc}
- }
-
- if (header_size_increment < 0){
- increment_magnitude = -header_size_increment;
- /* Check that we aren't going to move off the end of the pbuf */
- LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;);
- 802fe08: 2001 movs r0, #1
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_header: old %p new %p (%"S16_F")\n",
- (void *)payload, (void *)p->payload, header_size_increment));
- return 0;
- }
- 802fe0a: bd10 pop {r4, pc}
- 0802fe0c <pbuf_free>:
- * 1->1->1 becomes .......
- *
- */
- u8_t
- pbuf_free(struct pbuf *p)
- {
- 802fe0c: b570 push {r4, r5, r6, lr}
- u16_t type;
- struct pbuf *q;
- u8_t count;
- if (p == NULL) {
- 802fe0e: 4604 mov r4, r0
- 802fe10: b300 cbz r0, 802fe54 <pbuf_free+0x48>
- 802fe12: 2500 movs r5, #0
- u16_t ref;
- SYS_ARCH_DECL_PROTECT(old_level);
- /* Since decrementing ref cannot be guaranteed to be a single machine operation
- * we must protect it. We put the new ref into a local variable to prevent
- * further protection. */
- SYS_ARCH_PROTECT(old_level);
- 802fe14: f007 fe58 bl 8037ac8 <sys_arch_protect>
- /* all pbufs in a chain are referenced at least once */
- LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0);
- /* decrease reference count (number of pointers to pbuf) */
- ref = --(p->ref);
- 802fe18: 89e6 ldrh r6, [r4, #14]
- 802fe1a: 3e01 subs r6, #1
- 802fe1c: b2b6 uxth r6, r6
- 802fe1e: 81e6 strh r6, [r4, #14]
- SYS_ARCH_UNPROTECT(old_level);
- 802fe20: f007 fe5c bl 8037adc <sys_arch_unprotect>
- /* this pbuf is no longer referenced to? */
- if (ref == 0) {
- 802fe24: b9be cbnz r6, 802fe56 <pbuf_free+0x4a>
- /* remember next pbuf in chain for next iteration */
- q = p->next;
- LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: deallocating %p\n", (void *)p));
- type = p->type;
- 802fe26: 7b23 ldrb r3, [r4, #12]
- ref = --(p->ref);
- SYS_ARCH_UNPROTECT(old_level);
- /* this pbuf is no longer referenced to? */
- if (ref == 0) {
- /* remember next pbuf in chain for next iteration */
- q = p->next;
- 802fe28: 6826 ldr r6, [r4, #0]
- pc->custom_free_function(p);
- } else
- #endif /* LWIP_SUPPORT_CUSTOM_PBUF */
- {
- /* is this a pbuf from the pool? */
- if (type == PBUF_POOL) {
- 802fe2a: 2b03 cmp r3, #3
- 802fe2c: d101 bne.n 802fe32 <pbuf_free+0x26>
- memp_free(MEMP_PBUF_POOL, p);
- 802fe2e: 200f movs r0, #15
- 802fe30: e003 b.n 802fe3a <pbuf_free+0x2e>
- /* is this a ROM or RAM referencing pbuf? */
- } else if (type == PBUF_ROM || type == PBUF_REF) {
- 802fe32: 3b01 subs r3, #1
- 802fe34: 2b01 cmp r3, #1
- 802fe36: d804 bhi.n 802fe42 <pbuf_free+0x36>
- memp_free(MEMP_PBUF, p);
- 802fe38: 200e movs r0, #14
- 802fe3a: 4621 mov r1, r4
- 802fe3c: f7ff fedc bl 802fbf8 <memp_free>
- 802fe40: e002 b.n 802fe48 <pbuf_free+0x3c>
- /* type == PBUF_RAM */
- } else {
- mem_free(p);
- 802fe42: 4620 mov r0, r4
- 802fe44: f7ff fd70 bl 802f928 <mem_free>
- }
- }
- count++;
- 802fe48: 3501 adds r5, #1
- 802fe4a: b2ed uxtb r5, r5
- p->type == PBUF_REF || p->type == PBUF_POOL);
- count = 0;
- /* de-allocate all consecutive pbufs from the head of the chain that
- * obtain a zero reference count after decrementing*/
- while (p != NULL) {
- 802fe4c: 4634 mov r4, r6
- 802fe4e: 2e00 cmp r6, #0
- 802fe50: d1e0 bne.n 802fe14 <pbuf_free+0x8>
- 802fe52: e000 b.n 802fe56 <pbuf_free+0x4a>
- if (p == NULL) {
- LWIP_ASSERT("p != NULL", p != NULL);
- /* if assertions are disabled, proceed with debug output */
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS,
- ("pbuf_free(p == NULL) was called.\n"));
- return 0;
- 802fe54: 4605 mov r5, r0
- }
- }
- PERF_STOP("pbuf_free");
- /* return number of de-allocated pbufs */
- return count;
- }
- 802fe56: 4628 mov r0, r5
- 802fe58: bd70 pop {r4, r5, r6, pc}
- 0802fe5a <pbuf_realloc>:
- *
- * @note Despite its name, pbuf_realloc cannot grow the size of a pbuf (chain).
- */
- void
- pbuf_realloc(struct pbuf *p, u16_t new_len)
- {
- 802fe5a: b538 push {r3, r4, r5, lr}
- p->type == PBUF_ROM ||
- p->type == PBUF_RAM ||
- p->type == PBUF_REF);
- /* desired length larger than current length? */
- if (new_len >= p->tot_len) {
- 802fe5c: 8903 ldrh r3, [r0, #8]
- 802fe5e: 4299 cmp r1, r3
- 802fe60: d220 bcs.n 802fea4 <pbuf_realloc+0x4a>
- return;
- }
- /* the pbuf chain grows by (new_len - p->tot_len) bytes
- * (which may be negative in case of shrinking) */
- grow = new_len - p->tot_len;
- 802fe62: 1aca subs r2, r1, r3
- /* first, step over any pbufs that should remain in the chain */
- rem_len = new_len;
- q = p;
- /* should this pbuf be kept? */
- while (rem_len > q->len) {
- 802fe64: 460d mov r5, r1
- 802fe66: 4604 mov r4, r0
- 802fe68: e005 b.n 802fe76 <pbuf_realloc+0x1c>
- /* decrease remaining length by pbuf length */
- rem_len -= q->len;
- 802fe6a: 1aed subs r5, r5, r3
- /* decrease total length indicator */
- LWIP_ASSERT("grow < max_u16_t", grow < 0xffff);
- q->tot_len += (u16_t)grow;
- 802fe6c: 8923 ldrh r3, [r4, #8]
- 802fe6e: 18d3 adds r3, r2, r3
- 802fe70: 8123 strh r3, [r4, #8]
- /* proceed to next pbuf in chain */
- q = q->next;
- 802fe72: 6824 ldr r4, [r4, #0]
- rem_len = new_len;
- q = p;
- /* should this pbuf be kept? */
- while (rem_len > q->len) {
- /* decrease remaining length by pbuf length */
- rem_len -= q->len;
- 802fe74: b2ad uxth r5, r5
- /* first, step over any pbufs that should remain in the chain */
- rem_len = new_len;
- q = p;
- /* should this pbuf be kept? */
- while (rem_len > q->len) {
- 802fe76: 8963 ldrh r3, [r4, #10]
- 802fe78: 429d cmp r5, r3
- 802fe7a: d8f6 bhi.n 802fe6a <pbuf_realloc+0x10>
- /* we have now reached the new last pbuf (in q) */
- /* rem_len == desired length for pbuf q */
- /* shrink allocated memory for PBUF_RAM */
- /* (other types merely adjust their length fields */
- if ((q->type == PBUF_RAM) && (rem_len != q->len)) {
- 802fe7c: 7b22 ldrb r2, [r4, #12]
- 802fe7e: b94a cbnz r2, 802fe94 <pbuf_realloc+0x3a>
- 802fe80: 429d cmp r5, r3
- 802fe82: d007 beq.n 802fe94 <pbuf_realloc+0x3a>
- /* reallocate and adjust the length of the pbuf that will be split */
- q = (struct pbuf *)mem_trim(q, (u16_t)((u8_t *)q->payload - (u8_t *)q) + rem_len);
- 802fe84: 6863 ldr r3, [r4, #4]
- 802fe86: 1b1b subs r3, r3, r4
- 802fe88: 18e9 adds r1, r5, r3
- 802fe8a: 4620 mov r0, r4
- 802fe8c: b289 uxth r1, r1
- 802fe8e: f7ff fda5 bl 802f9dc <mem_trim>
- 802fe92: 4604 mov r4, r0
- /* adjust length fields for new last pbuf */
- q->len = rem_len;
- q->tot_len = q->len;
- /* any remaining pbufs in chain? */
- if (q->next != NULL) {
- 802fe94: 6820 ldr r0, [r4, #0]
- /* reallocate and adjust the length of the pbuf that will be split */
- q = (struct pbuf *)mem_trim(q, (u16_t)((u8_t *)q->payload - (u8_t *)q) + rem_len);
- LWIP_ASSERT("mem_trim returned q == NULL", q != NULL);
- }
- /* adjust length fields for new last pbuf */
- q->len = rem_len;
- 802fe96: 8165 strh r5, [r4, #10]
- q->tot_len = q->len;
- 802fe98: 8125 strh r5, [r4, #8]
- /* any remaining pbufs in chain? */
- if (q->next != NULL) {
- 802fe9a: b108 cbz r0, 802fea0 <pbuf_realloc+0x46>
- /* free remaining pbufs in chain */
- pbuf_free(q->next);
- 802fe9c: f7ff ffb6 bl 802fe0c <pbuf_free>
- }
- /* q is last packet in chain */
- q->next = NULL;
- 802fea0: 2300 movs r3, #0
- 802fea2: 6023 str r3, [r4, #0]
- 802fea4: bd38 pop {r3, r4, r5, pc}
- 0802fea6 <pbuf_alloc>:
- * @return the allocated pbuf. If multiple pbufs where allocated, this
- * is the first pbuf of a pbuf chain.
- */
- struct pbuf *
- pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)
- {
- 802fea6: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- 802feaa: 460d mov r5, r1
- 802feac: 4617 mov r7, r2
- u16_t offset;
- s32_t rem_len; /* remaining length */
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F")\n", length));
- /* determine header offset */
- switch (layer) {
- 802feae: 2803 cmp r0, #3
- 802feb0: d87c bhi.n 802ffac <pbuf_alloc+0x106>
- 802feb2: e8df f000 tbb [pc, r0]
- 802feb6: 0802 .short 0x0802
- 802feb8: 0604 .short 0x0604
- case PBUF_TRANSPORT:
- /* add room for transport (often TCP) layer header */
- offset = PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN;
- 802feba: 2636 movs r6, #54 ; 0x36
- 802febc: e004 b.n 802fec8 <pbuf_alloc+0x22>
- /* add room for IP layer header */
- offset = PBUF_LINK_HLEN + PBUF_IP_HLEN;
- break;
- case PBUF_LINK:
- /* add room for link layer header */
- offset = PBUF_LINK_HLEN;
- 802febe: 260e movs r6, #14
- break;
- 802fec0: e002 b.n 802fec8 <pbuf_alloc+0x22>
- case PBUF_RAW:
- offset = 0;
- 802fec2: 2600 movs r6, #0
- break;
- 802fec4: e000 b.n 802fec8 <pbuf_alloc+0x22>
- /* add room for transport (often TCP) layer header */
- offset = PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN;
- break;
- case PBUF_IP:
- /* add room for IP layer header */
- offset = PBUF_LINK_HLEN + PBUF_IP_HLEN;
- 802fec6: 2622 movs r6, #34 ; 0x22
- default:
- LWIP_ASSERT("pbuf_alloc: bad pbuf layer", 0);
- return NULL;
- }
- switch (type) {
- 802fec8: 2f03 cmp r7, #3
- 802feca: d86f bhi.n 802ffac <pbuf_alloc+0x106>
- 802fecc: e8df f007 tbb [pc, r7]
- 802fed0: 025e5e46 .word 0x025e5e46
- case PBUF_POOL:
- /* allocate head of pbuf chain into p */
- p = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL);
- 802fed4: 200f movs r0, #15
- 802fed6: f7ff fe79 bl 802fbcc <memp_malloc>
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc: allocated pbuf %p\n", (void *)p));
- if (p == NULL) {
- 802feda: 4604 mov r4, r0
- 802fedc: b900 cbnz r0, 802fee0 <pbuf_alloc+0x3a>
- 802fede: e065 b.n 802ffac <pbuf_alloc+0x106>
- }
- p->type = type;
- p->next = NULL;
- /* make the payload pointer point 'offset' bytes into pbuf data memory */
- p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + (SIZEOF_STRUCT_PBUF + offset)));
- 802fee0: 1982 adds r2, r0, r6
- LWIP_ASSERT("pbuf_alloc: pbuf p->payload properly aligned",
- ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0);
- /* the total length of the pbuf chain is the requested size */
- p->tot_len = length;
- /* set the length of the first pbuf in the chain */
- p->len = LWIP_MIN(length, PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset));
- 802fee2: 3603 adds r6, #3
- 802fee4: f026 0603 bic.w r6, r6, #3
- }
- p->type = type;
- p->next = NULL;
- /* make the payload pointer point 'offset' bytes into pbuf data memory */
- p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + (SIZEOF_STRUCT_PBUF + offset)));
- 802fee8: 3213 adds r2, #19
- LWIP_ASSERT("pbuf_alloc: pbuf p->payload properly aligned",
- ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0);
- /* the total length of the pbuf chain is the requested size */
- p->tot_len = length;
- /* set the length of the first pbuf in the chain */
- p->len = LWIP_MIN(length, PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset));
- 802feea: f5c6 66c0 rsb r6, r6, #1536 ; 0x600
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc: allocated pbuf %p\n", (void *)p));
- if (p == NULL) {
- PBUF_POOL_IS_EMPTY();
- return NULL;
- }
- p->type = type;
- 802feee: 2303 movs r3, #3
- p->next = NULL;
- /* make the payload pointer point 'offset' bytes into pbuf data memory */
- p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + (SIZEOF_STRUCT_PBUF + offset)));
- 802fef0: f022 0203 bic.w r2, r2, #3
- LWIP_ASSERT("pbuf_alloc: pbuf p->payload properly aligned",
- ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0);
- /* the total length of the pbuf chain is the requested size */
- p->tot_len = length;
- /* set the length of the first pbuf in the chain */
- p->len = LWIP_MIN(length, PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset));
- 802fef4: 3604 adds r6, #4
- 802fef6: 42ae cmp r6, r5
- 802fef8: bfa8 it ge
- 802fefa: 462e movge r6, r5
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc: allocated pbuf %p\n", (void *)p));
- if (p == NULL) {
- PBUF_POOL_IS_EMPTY();
- return NULL;
- }
- p->type = type;
- 802fefc: 7303 strb r3, [r0, #12]
- p->next = NULL;
- /* make the payload pointer point 'offset' bytes into pbuf data memory */
- p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + (SIZEOF_STRUCT_PBUF + offset)));
- 802fefe: 6042 str r2, [r0, #4]
- if (p == NULL) {
- PBUF_POOL_IS_EMPTY();
- return NULL;
- }
- p->type = type;
- p->next = NULL;
- 802ff00: 2300 movs r3, #0
- ((u8_t*)p->payload + p->len <=
- (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED));
- LWIP_ASSERT("PBUF_POOL_BUFSIZE must be bigger than MEM_ALIGNMENT",
- (PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)) > 0 );
- /* set reference count (needed here in case we fail) */
- p->ref = 1;
- 802ff02: 2201 movs r2, #1
- LWIP_ASSERT("pbuf_alloc: pbuf p->payload properly aligned",
- ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0);
- /* the total length of the pbuf chain is the requested size */
- p->tot_len = length;
- /* set the length of the first pbuf in the chain */
- p->len = LWIP_MIN(length, PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset));
- 802ff04: 8146 strh r6, [r0, #10]
- if (p == NULL) {
- PBUF_POOL_IS_EMPTY();
- return NULL;
- }
- p->type = type;
- p->next = NULL;
- 802ff06: 6003 str r3, [r0, #0]
- /* make the payload pointer point 'offset' bytes into pbuf data memory */
- p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + (SIZEOF_STRUCT_PBUF + offset)));
- LWIP_ASSERT("pbuf_alloc: pbuf p->payload properly aligned",
- ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0);
- /* the total length of the pbuf chain is the requested size */
- p->tot_len = length;
- 802ff08: 8105 strh r5, [r0, #8]
- ((u8_t*)p->payload + p->len <=
- (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED));
- LWIP_ASSERT("PBUF_POOL_BUFSIZE must be bigger than MEM_ALIGNMENT",
- (PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)) > 0 );
- /* set reference count (needed here in case we fail) */
- p->ref = 1;
- 802ff0a: 81c2 strh r2, [r0, #14]
- /* now allocate the tail of the pbuf chain */
- /* remember first pbuf for linkage in next iteration */
- r = p;
- /* remaining length to be allocated */
- rem_len = length - p->len;
- 802ff0c: 1bae subs r6, r5, r6
- /* any remaining pbufs to be allocated? */
- while (rem_len > 0) {
- 802ff0e: 4607 mov r7, r0
- 802ff10: 4698 mov r8, r3
- r->next = q;
- /* set total length of this pbuf and next in chain */
- LWIP_ASSERT("rem_len < max_u16_t", rem_len < 0xffff);
- q->tot_len = (u16_t)rem_len;
- /* this pbuf length is pool size, unless smaller sized tail */
- q->len = LWIP_MIN((u16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED);
- 802ff12: f240 6903 movw r9, #1539 ; 0x603
- 802ff16: f240 6a04 movw sl, #1540 ; 0x604
- /* remember first pbuf for linkage in next iteration */
- r = p;
- /* remaining length to be allocated */
- rem_len = length - p->len;
- /* any remaining pbufs to be allocated? */
- while (rem_len > 0) {
- 802ff1a: e01c b.n 802ff56 <pbuf_alloc+0xb0>
- q = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL);
- 802ff1c: 200f movs r0, #15
- 802ff1e: f7ff fe55 bl 802fbcc <memp_malloc>
- if (q == NULL) {
- 802ff22: 4605 mov r5, r0
- 802ff24: b918 cbnz r0, 802ff2e <pbuf_alloc+0x88>
- PBUF_POOL_IS_EMPTY();
- /* free chain so far allocated */
- pbuf_free(p);
- 802ff26: 4620 mov r0, r4
- 802ff28: f7ff ff70 bl 802fe0c <pbuf_free>
- 802ff2c: e03e b.n 802ffac <pbuf_alloc+0x106>
- /* bail out unsuccesfully */
- return NULL;
- }
- q->type = type;
- 802ff2e: 2303 movs r3, #3
- /* set total length of this pbuf and next in chain */
- LWIP_ASSERT("rem_len < max_u16_t", rem_len < 0xffff);
- q->tot_len = (u16_t)rem_len;
- /* this pbuf length is pool size, unless smaller sized tail */
- q->len = LWIP_MIN((u16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED);
- q->payload = (void *)((u8_t *)q + SIZEOF_STRUCT_PBUF);
- 802ff30: f100 0210 add.w r2, r0, #16
- /* free chain so far allocated */
- pbuf_free(p);
- /* bail out unsuccesfully */
- return NULL;
- }
- q->type = type;
- 802ff34: 7303 strb r3, [r0, #12]
- q->next = NULL;
- /* make previous pbuf point to this pbuf */
- r->next = q;
- /* set total length of this pbuf and next in chain */
- LWIP_ASSERT("rem_len < max_u16_t", rem_len < 0xffff);
- q->tot_len = (u16_t)rem_len;
- 802ff36: b2b3 uxth r3, r6
- 802ff38: 8103 strh r3, [r0, #8]
- /* this pbuf length is pool size, unless smaller sized tail */
- q->len = LWIP_MIN((u16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED);
- q->payload = (void *)((u8_t *)q + SIZEOF_STRUCT_PBUF);
- 802ff3a: 6042 str r2, [r0, #4]
- r->next = q;
- /* set total length of this pbuf and next in chain */
- LWIP_ASSERT("rem_len < max_u16_t", rem_len < 0xffff);
- q->tot_len = (u16_t)rem_len;
- /* this pbuf length is pool size, unless smaller sized tail */
- q->len = LWIP_MIN((u16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED);
- 802ff3c: 454b cmp r3, r9
- 802ff3e: bf88 it hi
- 802ff40: 4653 movhi r3, sl
- LWIP_ASSERT("pbuf_alloc: pbuf q->payload properly aligned",
- ((mem_ptr_t)q->payload % MEM_ALIGNMENT) == 0);
- LWIP_ASSERT("check p->payload + p->len does not overflow pbuf",
- ((u8_t*)p->payload + p->len <=
- (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED));
- q->ref = 1;
- 802ff42: 2201 movs r2, #1
- /* bail out unsuccesfully */
- return NULL;
- }
- q->type = type;
- q->flags = 0;
- q->next = NULL;
- 802ff44: f8c0 8000 str.w r8, [r0]
- pbuf_free(p);
- /* bail out unsuccesfully */
- return NULL;
- }
- q->type = type;
- q->flags = 0;
- 802ff48: f880 800d strb.w r8, [r0, #13]
- q->next = NULL;
- /* make previous pbuf point to this pbuf */
- r->next = q;
- 802ff4c: 6038 str r0, [r7, #0]
- /* set total length of this pbuf and next in chain */
- LWIP_ASSERT("rem_len < max_u16_t", rem_len < 0xffff);
- q->tot_len = (u16_t)rem_len;
- /* this pbuf length is pool size, unless smaller sized tail */
- q->len = LWIP_MIN((u16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED);
- 802ff4e: 8143 strh r3, [r0, #10]
- LWIP_ASSERT("pbuf_alloc: pbuf q->payload properly aligned",
- ((mem_ptr_t)q->payload % MEM_ALIGNMENT) == 0);
- LWIP_ASSERT("check p->payload + p->len does not overflow pbuf",
- ((u8_t*)p->payload + p->len <=
- (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED));
- q->ref = 1;
- 802ff50: 81c2 strh r2, [r0, #14]
- /* calculate remaining length to be allocated */
- rem_len -= q->len;
- 802ff52: 1af6 subs r6, r6, r3
- 802ff54: 4607 mov r7, r0
- /* remember first pbuf for linkage in next iteration */
- r = p;
- /* remaining length to be allocated */
- rem_len = length - p->len;
- /* any remaining pbufs to be allocated? */
- while (rem_len > 0) {
- 802ff56: 2e00 cmp r6, #0
- 802ff58: dce0 bgt.n 802ff1c <pbuf_alloc+0x76>
- 802ff5a: e022 b.n 802ffa2 <pbuf_alloc+0xfc>
- /*r->next = NULL;*/
- break;
- case PBUF_RAM:
- /* If pbuf is to be allocated in RAM, allocate memory for it. */
- p = (struct pbuf*)mem_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length));
- 802ff5c: f106 0013 add.w r0, r6, #19
- 802ff60: 1ceb adds r3, r5, #3
- 802ff62: f023 0303 bic.w r3, r3, #3
- 802ff66: f020 0003 bic.w r0, r0, #3
- 802ff6a: 18c0 adds r0, r0, r3
- 802ff6c: b280 uxth r0, r0
- 802ff6e: f7ff fda3 bl 802fab8 <mem_malloc>
- if (p == NULL) {
- 802ff72: 4604 mov r4, r0
- 802ff74: b1d0 cbz r0, 802ffac <pbuf_alloc+0x106>
- return NULL;
- }
- /* Set up internal structure of the pbuf. */
- p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset));
- 802ff76: 1986 adds r6, r0, r6
- 802ff78: 3613 adds r6, #19
- p->len = p->tot_len = length;
- p->next = NULL;
- 802ff7a: 2300 movs r3, #0
- p = (struct pbuf*)mem_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length));
- if (p == NULL) {
- return NULL;
- }
- /* Set up internal structure of the pbuf. */
- p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset));
- 802ff7c: f026 0603 bic.w r6, r6, #3
- 802ff80: 6046 str r6, [r0, #4]
- p->len = p->tot_len = length;
- 802ff82: 8105 strh r5, [r0, #8]
- 802ff84: 8145 strh r5, [r0, #10]
- p->next = NULL;
- 802ff86: 6003 str r3, [r0, #0]
- p->type = type;
- 802ff88: 7303 strb r3, [r0, #12]
- 802ff8a: e00a b.n 802ffa2 <pbuf_alloc+0xfc>
- /* pbuf references existing (non-volatile static constant) ROM payload? */
- case PBUF_ROM:
- /* pbuf references existing (externally allocated) RAM payload? */
- case PBUF_REF:
- /* only allocate memory for the pbuf structure */
- p = (struct pbuf *)memp_malloc(MEMP_PBUF);
- 802ff8c: 200e movs r0, #14
- 802ff8e: f7ff fe1d bl 802fbcc <memp_malloc>
- if (p == NULL) {
- 802ff92: 4604 mov r4, r0
- 802ff94: b150 cbz r0, 802ffac <pbuf_alloc+0x106>
- ("pbuf_alloc: Could not allocate MEMP_PBUF for PBUF_%s.\n",
- (type == PBUF_ROM) ? "ROM" : "REF"));
- return NULL;
- }
- /* caller must set this field properly, afterwards */
- p->payload = NULL;
- 802ff96: 2300 movs r3, #0
- 802ff98: 6043 str r3, [r0, #4]
- p->len = p->tot_len = length;
- 802ff9a: 8105 strh r5, [r0, #8]
- 802ff9c: 8145 strh r5, [r0, #10]
- p->next = NULL;
- 802ff9e: 6003 str r3, [r0, #0]
- p->type = type;
- 802ffa0: 7307 strb r7, [r0, #12]
- default:
- LWIP_ASSERT("pbuf_alloc: erroneous type", 0);
- return NULL;
- }
- /* set reference count */
- p->ref = 1;
- 802ffa2: 2301 movs r3, #1
- 802ffa4: 81e3 strh r3, [r4, #14]
- /* set flags */
- p->flags = 0;
- 802ffa6: 2300 movs r3, #0
- 802ffa8: 7363 strb r3, [r4, #13]
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F") == %p\n", length, (void *)p));
- return p;
- 802ffaa: e000 b.n 802ffae <pbuf_alloc+0x108>
- p->next = NULL;
- p->type = type;
- break;
- default:
- LWIP_ASSERT("pbuf_alloc: erroneous type", 0);
- return NULL;
- 802ffac: 2400 movs r4, #0
- p->ref = 1;
- /* set flags */
- p->flags = 0;
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F") == %p\n", length, (void *)p));
- return p;
- }
- 802ffae: 4620 mov r0, r4
- 802ffb0: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 0802ffb4 <pbuf_clen>:
- * @return the number of pbufs in a chain
- */
- u8_t
- pbuf_clen(struct pbuf *p)
- {
- 802ffb4: 4603 mov r3, r0
- u8_t len;
- len = 0;
- 802ffb6: 2000 movs r0, #0
- while (p != NULL) {
- 802ffb8: e002 b.n 802ffc0 <pbuf_clen+0xc>
- ++len;
- 802ffba: 3001 adds r0, #1
- p = p->next;
- 802ffbc: 681b ldr r3, [r3, #0]
- {
- u8_t len;
- len = 0;
- while (p != NULL) {
- ++len;
- 802ffbe: b2c0 uxtb r0, r0
- pbuf_clen(struct pbuf *p)
- {
- u8_t len;
- len = 0;
- while (p != NULL) {
- 802ffc0: 2b00 cmp r3, #0
- 802ffc2: d1fa bne.n 802ffba <pbuf_clen+0x6>
- ++len;
- p = p->next;
- }
- return len;
- }
- 802ffc4: 4770 bx lr
- 0802ffc6 <pbuf_ref>:
- * @param p pbuf to increase reference counter of
- *
- */
- void
- pbuf_ref(struct pbuf *p)
- {
- 802ffc6: b510 push {r4, lr}
- SYS_ARCH_DECL_PROTECT(old_level);
- /* pbuf given? */
- if (p != NULL) {
- 802ffc8: 4604 mov r4, r0
- 802ffca: b140 cbz r0, 802ffde <pbuf_ref+0x18>
- SYS_ARCH_PROTECT(old_level);
- 802ffcc: f007 fd7c bl 8037ac8 <sys_arch_protect>
- ++(p->ref);
- 802ffd0: 89e3 ldrh r3, [r4, #14]
- 802ffd2: 3301 adds r3, #1
- 802ffd4: 81e3 strh r3, [r4, #14]
- SYS_ARCH_UNPROTECT(old_level);
- }
- }
- 802ffd6: e8bd 4010 ldmia.w sp!, {r4, lr}
- SYS_ARCH_DECL_PROTECT(old_level);
- /* pbuf given? */
- if (p != NULL) {
- SYS_ARCH_PROTECT(old_level);
- ++(p->ref);
- SYS_ARCH_UNPROTECT(old_level);
- 802ffda: f007 bd7f b.w 8037adc <sys_arch_unprotect>
- 802ffde: bd10 pop {r4, pc}
- 0802ffe0 <pbuf_cat>:
- * @see pbuf_chain()
- */
- void
- pbuf_cat(struct pbuf *h, struct pbuf *t)
- {
- 802ffe0: b510 push {r4, lr}
- struct pbuf *p;
- LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)",
- 802ffe2: b168 cbz r0, 8030000 <pbuf_cat+0x20>
- 802ffe4: b161 cbz r1, 8030000 <pbuf_cat+0x20>
- 802ffe6: e003 b.n 802fff0 <pbuf_cat+0x10>
- ((h != NULL) && (t != NULL)), return;);
- /* proceed to last pbuf of chain */
- for (p = h; p->next != NULL; p = p->next) {
- /* add total length of second chain to all totals of first chain */
- p->tot_len += t->tot_len;
- 802ffe8: 8904 ldrh r4, [r0, #8]
- 802ffea: 191b adds r3, r3, r4
- 802ffec: 8103 strh r3, [r0, #8]
- LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)",
- ((h != NULL) && (t != NULL)), return;);
- /* proceed to last pbuf of chain */
- for (p = h; p->next != NULL; p = p->next) {
- 802ffee: 4610 mov r0, r2
- 802fff0: 6802 ldr r2, [r0, #0]
- 802fff2: 890b ldrh r3, [r1, #8]
- 802fff4: 2a00 cmp r2, #0
- 802fff6: d1f7 bne.n 802ffe8 <pbuf_cat+0x8>
- }
- /* { p is last pbuf of first h chain, p->next == NULL } */
- LWIP_ASSERT("p->tot_len == p->len (of last pbuf in chain)", p->tot_len == p->len);
- LWIP_ASSERT("p->next == NULL", p->next == NULL);
- /* add total length of second chain to last pbuf total of first chain */
- p->tot_len += t->tot_len;
- 802fff8: 8902 ldrh r2, [r0, #8]
- /* chain last pbuf of head (p) with first of tail (t) */
- p->next = t;
- 802fffa: 6001 str r1, [r0, #0]
- }
- /* { p is last pbuf of first h chain, p->next == NULL } */
- LWIP_ASSERT("p->tot_len == p->len (of last pbuf in chain)", p->tot_len == p->len);
- LWIP_ASSERT("p->next == NULL", p->next == NULL);
- /* add total length of second chain to last pbuf total of first chain */
- p->tot_len += t->tot_len;
- 802fffc: 189b adds r3, r3, r2
- 802fffe: 8103 strh r3, [r0, #8]
- 8030000: bd10 pop {r4, pc}
- 08030002 <pbuf_chain>:
- * The ->ref field of the first pbuf of the tail chain is adjusted.
- *
- */
- void
- pbuf_chain(struct pbuf *h, struct pbuf *t)
- {
- 8030002: b510 push {r4, lr}
- 8030004: 460c mov r4, r1
- pbuf_cat(h, t);
- 8030006: f7ff ffeb bl 802ffe0 <pbuf_cat>
- /* t is now referenced by h */
- pbuf_ref(t);
- 803000a: 4620 mov r0, r4
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_chain: %p references %p\n", (void *)h, (void *)t));
- }
- 803000c: e8bd 4010 ldmia.w sp!, {r4, lr}
- void
- pbuf_chain(struct pbuf *h, struct pbuf *t)
- {
- pbuf_cat(h, t);
- /* t is now referenced by h */
- pbuf_ref(t);
- 8030010: f7ff bfd9 b.w 802ffc6 <pbuf_ref>
- 08030014 <pbuf_copy>:
- * ERR_ARG if one of the pbufs is NULL or p_to is not big
- * enough to hold p_from
- */
- err_t
- pbuf_copy(struct pbuf *p_to, struct pbuf *p_from)
- {
- 8030014: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8030018: 460c mov r4, r1
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy(%p, %p)\n",
- (void*)p_to, (void*)p_from));
- /* is the target big enough to hold the source? */
- LWIP_ERROR("pbuf_copy: target not big enough to hold source", ((p_to != NULL) &&
- 803001a: 4605 mov r5, r0
- 803001c: b908 cbnz r0, 8030022 <pbuf_copy+0xe>
- 803001e: 20f2 movs r0, #242 ; 0xf2
- 8030020: e03f b.n 80300a2 <pbuf_copy+0x8e>
- 8030022: 2900 cmp r1, #0
- 8030024: d0fb beq.n 803001e <pbuf_copy+0xa>
- 8030026: 8902 ldrh r2, [r0, #8]
- 8030028: 890b ldrh r3, [r1, #8]
- 803002a: 429a cmp r2, r3
- 803002c: d3f7 bcc.n 803001e <pbuf_copy+0xa>
- 803002e: 2600 movs r6, #0
- 8030030: 4637 mov r7, r6
- /* iterate through pbuf chain */
- do
- {
- /* copy one part of the original chain */
- if ((p_to->len - offset_to) >= (p_from->len - offset_from)) {
- 8030032: f8b4 800a ldrh.w r8, [r4, #10]
- 8030036: 896b ldrh r3, [r5, #10]
- len = p_from->len - offset_from;
- } else {
- /* current p_from does not fit into current p_to */
- len = p_to->len - offset_to;
- }
- MEMCPY((u8_t*)p_to->payload + offset_to, (u8_t*)p_from->payload + offset_from, len);
- 8030038: 6861 ldr r1, [r4, #4]
- 803003a: 6868 ldr r0, [r5, #4]
- /* iterate through pbuf chain */
- do
- {
- /* copy one part of the original chain */
- if ((p_to->len - offset_to) >= (p_from->len - offset_from)) {
- 803003c: ebc6 0808 rsb r8, r6, r8
- 8030040: 1bdb subs r3, r3, r7
- 8030042: 4543 cmp r3, r8
- /* complete current p_from fits into current p_to */
- len = p_from->len - offset_from;
- } else {
- /* current p_from does not fit into current p_to */
- len = p_to->len - offset_to;
- 8030044: bfb4 ite lt
- 8030046: fa1f f883 uxthlt.w r8, r3
- do
- {
- /* copy one part of the original chain */
- if ((p_to->len - offset_to) >= (p_from->len - offset_from)) {
- /* complete current p_from fits into current p_to */
- len = p_from->len - offset_from;
- 803004a: fa1f f888 uxthge.w r8, r8
- } else {
- /* current p_from does not fit into current p_to */
- len = p_to->len - offset_to;
- }
- MEMCPY((u8_t*)p_to->payload + offset_to, (u8_t*)p_from->payload + offset_from, len);
- 803004e: 19c0 adds r0, r0, r7
- 8030050: 1989 adds r1, r1, r6
- 8030052: 4642 mov r2, r8
- 8030054: f7f1 fc9a bl 802198c <memcpy>
- offset_to += len;
- offset_from += len;
- 8030058: 4446 add r6, r8
- LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len);
- LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len);
- if (offset_from >= p_from->len) {
- 803005a: 8963 ldrh r3, [r4, #10]
- /* current p_from does not fit into current p_to */
- len = p_to->len - offset_to;
- }
- MEMCPY((u8_t*)p_to->payload + offset_to, (u8_t*)p_from->payload + offset_from, len);
- offset_to += len;
- offset_from += len;
- 803005c: b2b6 uxth r6, r6
- LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len);
- LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len);
- if (offset_from >= p_from->len) {
- 803005e: 42b3 cmp r3, r6
- } else {
- /* current p_from does not fit into current p_to */
- len = p_to->len - offset_to;
- }
- MEMCPY((u8_t*)p_to->payload + offset_to, (u8_t*)p_from->payload + offset_from, len);
- offset_to += len;
- 8030060: 4447 add r7, r8
- if (offset_from >= p_from->len) {
- /* on to next p_from (if any) */
- offset_from = 0;
- p_from = p_from->next;
- }
- if (offset_to == p_to->len) {
- 8030062: 896b ldrh r3, [r5, #10]
- LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len);
- LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len);
- if (offset_from >= p_from->len) {
- /* on to next p_from (if any) */
- offset_from = 0;
- p_from = p_from->next;
- 8030064: bf98 it ls
- 8030066: 6824 ldrls r4, [r4, #0]
- } else {
- /* current p_from does not fit into current p_to */
- len = p_to->len - offset_to;
- }
- MEMCPY((u8_t*)p_to->payload + offset_to, (u8_t*)p_from->payload + offset_from, len);
- offset_to += len;
- 8030068: b2bf uxth r7, r7
- offset_from += len;
- LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len);
- LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len);
- if (offset_from >= p_from->len) {
- /* on to next p_from (if any) */
- offset_from = 0;
- 803006a: bf98 it ls
- 803006c: 2600 movls r6, #0
- p_from = p_from->next;
- }
- if (offset_to == p_to->len) {
- 803006e: 42bb cmp r3, r7
- 8030070: d105 bne.n 803007e <pbuf_copy+0x6a>
- /* on to next p_to (if any) */
- offset_to = 0;
- p_to = p_to->next;
- 8030072: 682d ldr r5, [r5, #0]
- LWIP_ERROR("p_to != NULL", (p_to != NULL) || (p_from == NULL) , return ERR_ARG;);
- 8030074: b915 cbnz r5, 803007c <pbuf_copy+0x68>
- 8030076: 2c00 cmp r4, #0
- 8030078: d1d1 bne.n 803001e <pbuf_copy+0xa>
- 803007a: e00f b.n 803009c <pbuf_copy+0x88>
- offset_from = 0;
- p_from = p_from->next;
- }
- if (offset_to == p_to->len) {
- /* on to next p_to (if any) */
- offset_to = 0;
- 803007c: 2700 movs r7, #0
- p_to = p_to->next;
- LWIP_ERROR("p_to != NULL", (p_to != NULL) || (p_from == NULL) , return ERR_ARG;);
- }
- if((p_from != NULL) && (p_from->len == p_from->tot_len)) {
- 803007e: b12c cbz r4, 803008c <pbuf_copy+0x78>
- 8030080: 8962 ldrh r2, [r4, #10]
- 8030082: 8923 ldrh r3, [r4, #8]
- 8030084: 429a cmp r2, r3
- 8030086: d101 bne.n 803008c <pbuf_copy+0x78>
- /* don't copy more than one packet! */
- LWIP_ERROR("pbuf_copy() does not allow packet queues!\n",
- 8030088: 6823 ldr r3, [r4, #0]
- 803008a: b94b cbnz r3, 80300a0 <pbuf_copy+0x8c>
- (p_from->next == NULL), return ERR_VAL;);
- }
- if((p_to != NULL) && (p_to->len == p_to->tot_len)) {
- 803008c: 896a ldrh r2, [r5, #10]
- 803008e: 892b ldrh r3, [r5, #8]
- 8030090: 429a cmp r2, r3
- 8030092: d101 bne.n 8030098 <pbuf_copy+0x84>
- /* don't copy more than one packet! */
- LWIP_ERROR("pbuf_copy() does not allow packet queues!\n",
- 8030094: 682b ldr r3, [r5, #0]
- 8030096: b91b cbnz r3, 80300a0 <pbuf_copy+0x8c>
- (p_to->next == NULL), return ERR_VAL;);
- }
- } while (p_from);
- 8030098: 2c00 cmp r4, #0
- 803009a: d1ca bne.n 8030032 <pbuf_copy+0x1e>
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy: end of chain reached.\n"));
- return ERR_OK;
- 803009c: 4620 mov r0, r4
- 803009e: e000 b.n 80300a2 <pbuf_copy+0x8e>
- LWIP_ERROR("p_to != NULL", (p_to != NULL) || (p_from == NULL) , return ERR_ARG;);
- }
- if((p_from != NULL) && (p_from->len == p_from->tot_len)) {
- /* don't copy more than one packet! */
- LWIP_ERROR("pbuf_copy() does not allow packet queues!\n",
- 80300a0: 20fa movs r0, #250 ; 0xfa
- (p_to->next == NULL), return ERR_VAL;);
- }
- } while (p_from);
- LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy: end of chain reached.\n"));
- return ERR_OK;
- }
- 80300a2: b240 sxtb r0, r0
- 80300a4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 080300a8 <pbuf_copy_partial>:
- * @param offset offset into the packet buffer from where to begin copying len bytes
- * @return the number of bytes copied, or 0 on failure
- */
- u16_t
- pbuf_copy_partial(struct pbuf *buf, void *dataptr, u16_t len, u16_t offset)
- {
- 80300a8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- 80300ac: 4688 mov r8, r1
- 80300ae: 4616 mov r6, r2
- struct pbuf *p;
- u16_t left;
- u16_t buf_copy_len;
- u16_t copied_total = 0;
- LWIP_ERROR("pbuf_copy_partial: invalid buf", (buf != NULL), return 0;);
- 80300b0: b328 cbz r0, 80300fe <pbuf_copy_partial+0x56>
- LWIP_ERROR("pbuf_copy_partial: invalid dataptr", (dataptr != NULL), return 0;);
- 80300b2: b331 cbz r1, 8030102 <pbuf_copy_partial+0x5a>
- 80300b4: 2400 movs r4, #0
- 80300b6: 4605 mov r5, r0
- 80300b8: 46a1 mov r9, r4
- 80300ba: e01c b.n 80300f6 <pbuf_copy_partial+0x4e>
- return 0;
- }
- /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */
- for(p = buf; len != 0 && p != NULL; p = p->next) {
- if ((offset != 0) && (offset >= p->len)) {
- 80300bc: b12b cbz r3, 80300ca <pbuf_copy_partial+0x22>
- 80300be: 896a ldrh r2, [r5, #10]
- 80300c0: 4293 cmp r3, r2
- 80300c2: d302 bcc.n 80300ca <pbuf_copy_partial+0x22>
- /* don't copy from this buffer -> on to the next */
- offset -= p->len;
- 80300c4: 1a9b subs r3, r3, r2
- 80300c6: b29b uxth r3, r3
- 80300c8: e014 b.n 80300f4 <pbuf_copy_partial+0x4c>
- } else {
- /* copy from this buffer. maybe only partially. */
- buf_copy_len = p->len - offset;
- 80300ca: 896f ldrh r7, [r5, #10]
- if (buf_copy_len > len)
- buf_copy_len = len;
- /* copy the necessary parts of the buffer */
- MEMCPY(&((char*)dataptr)[left], &((char*)p->payload)[offset], buf_copy_len);
- 80300cc: 6869 ldr r1, [r5, #4]
- if ((offset != 0) && (offset >= p->len)) {
- /* don't copy from this buffer -> on to the next */
- offset -= p->len;
- } else {
- /* copy from this buffer. maybe only partially. */
- buf_copy_len = p->len - offset;
- 80300ce: 1aff subs r7, r7, r3
- 80300d0: b2bf uxth r7, r7
- 80300d2: 42b7 cmp r7, r6
- 80300d4: bf28 it cs
- 80300d6: 4637 movcs r7, r6
- if (buf_copy_len > len)
- buf_copy_len = len;
- /* copy the necessary parts of the buffer */
- MEMCPY(&((char*)dataptr)[left], &((char*)p->payload)[offset], buf_copy_len);
- 80300d8: eb08 0009 add.w r0, r8, r9
- 80300dc: 18c9 adds r1, r1, r3
- 80300de: 463a mov r2, r7
- copied_total += buf_copy_len;
- 80300e0: 193c adds r4, r7, r4
- left += buf_copy_len;
- 80300e2: 44b9 add r9, r7
- len -= buf_copy_len;
- 80300e4: 1bf6 subs r6, r6, r7
- /* copy from this buffer. maybe only partially. */
- buf_copy_len = p->len - offset;
- if (buf_copy_len > len)
- buf_copy_len = len;
- /* copy the necessary parts of the buffer */
- MEMCPY(&((char*)dataptr)[left], &((char*)p->payload)[offset], buf_copy_len);
- 80300e6: f7f1 fc51 bl 802198c <memcpy>
- copied_total += buf_copy_len;
- 80300ea: b2a4 uxth r4, r4
- left += buf_copy_len;
- 80300ec: fa1f f989 uxth.w r9, r9
- len -= buf_copy_len;
- 80300f0: b2b6 uxth r6, r6
- offset = 0;
- 80300f2: 2300 movs r3, #0
- if((buf == NULL) || (dataptr == NULL)) {
- return 0;
- }
- /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */
- for(p = buf; len != 0 && p != NULL; p = p->next) {
- 80300f4: 682d ldr r5, [r5, #0]
- 80300f6: b12e cbz r6, 8030104 <pbuf_copy_partial+0x5c>
- 80300f8: 2d00 cmp r5, #0
- 80300fa: d1df bne.n 80300bc <pbuf_copy_partial+0x14>
- 80300fc: e002 b.n 8030104 <pbuf_copy_partial+0x5c>
- struct pbuf *p;
- u16_t left;
- u16_t buf_copy_len;
- u16_t copied_total = 0;
- LWIP_ERROR("pbuf_copy_partial: invalid buf", (buf != NULL), return 0;);
- 80300fe: 4604 mov r4, r0
- 8030100: e000 b.n 8030104 <pbuf_copy_partial+0x5c>
- 8030102: 460c mov r4, r1
- len -= buf_copy_len;
- offset = 0;
- }
- }
- return copied_total;
- }
- 8030104: 4620 mov r0, r4
- 8030106: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
- 803010a: 0000 movs r0, r0
- 0803010c <raw_input>:
- * caller).
- *
- */
- u8_t
- raw_input(struct pbuf *p, struct netif *inp)
- {
- 803010c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- u8_t eaten = 0;
- LWIP_UNUSED_ARG(inp);
- iphdr = (struct ip_hdr *)p->payload;
- proto = IPH_PROTO(iphdr);
- 8030110: 6843 ldr r3, [r0, #4]
- /* loop through all raw pcbs until the packet is eaten by one */
- /* this allows multiple pcbs to match against the packet by design */
- while ((eaten == 0) && (pcb != NULL)) {
- if ((pcb->protocol == proto) &&
- (ip_addr_isany(&pcb->local_ip) ||
- ip_addr_cmp(&(pcb->local_ip), ¤t_iphdr_dest))) {
- 8030112: f8df a074 ldr.w sl, [pc, #116] ; 8030188 <raw_input+0x7c>
- u8_t eaten = 0;
- LWIP_UNUSED_ARG(inp);
- iphdr = (struct ip_hdr *)p->payload;
- proto = IPH_PROTO(iphdr);
- 8030116: f893 9009 ldrb.w r9, [r3, #9]
- prev = NULL;
- pcb = raw_pcbs;
- 803011a: 4b19 ldr r3, [pc, #100] ; (8030180 <raw_input+0x74>)
- * caller).
- *
- */
- u8_t
- raw_input(struct pbuf *p, struct netif *inp)
- {
- 803011c: 4606 mov r6, r0
- iphdr = (struct ip_hdr *)p->payload;
- proto = IPH_PROTO(iphdr);
- prev = NULL;
- pcb = raw_pcbs;
- 803011e: 681c ldr r4, [r3, #0]
- LWIP_UNUSED_ARG(inp);
- iphdr = (struct ip_hdr *)p->payload;
- proto = IPH_PROTO(iphdr);
- prev = NULL;
- 8030120: 2500 movs r5, #0
- eaten = 1;
- if (prev != NULL) {
- /* move the pcb to the front of raw_pcbs so that is
- found faster next time */
- prev->next = pcb->next;
- pcb->next = raw_pcbs;
- 8030122: 4698 mov r8, r3
- 8030124: e023 b.n 803016e <raw_input+0x62>
- prev = NULL;
- pcb = raw_pcbs;
- /* loop through all raw pcbs until the packet is eaten by one */
- /* this allows multiple pcbs to match against the packet by design */
- while ((eaten == 0) && (pcb != NULL)) {
- if ((pcb->protocol == proto) &&
- 8030126: 7c23 ldrb r3, [r4, #16]
- 8030128: 454b cmp r3, r9
- 803012a: d118 bne.n 803015e <raw_input+0x52>
- (ip_addr_isany(&pcb->local_ip) ||
- 803012c: 6823 ldr r3, [r4, #0]
- 803012e: b11b cbz r3, 8030138 <raw_input+0x2c>
- 8030130: f8da 2000 ldr.w r2, [sl]
- 8030134: 4293 cmp r3, r2
- 8030136: d112 bne.n 803015e <raw_input+0x52>
- /* broadcast filter? */
- if (ip_get_option(pcb, SOF_BROADCAST) || !ip_addr_isbroadcast(¤t_iphdr_dest, inp))
- #endif /* IP_SOF_BROADCAST_RECV */
- {
- /* receive callback function available? */
- if (pcb->recv != NULL) {
- 8030138: 6967 ldr r7, [r4, #20]
- 803013a: b187 cbz r7, 803015e <raw_input+0x52>
- /* the receive callback function did not eat the packet? */
- if (pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr()) != 0) {
- 803013c: 69a0 ldr r0, [r4, #24]
- 803013e: 4b11 ldr r3, [pc, #68] ; (8030184 <raw_input+0x78>)
- 8030140: 4621 mov r1, r4
- 8030142: 4632 mov r2, r6
- 8030144: 47b8 blx r7
- 8030146: b150 cbz r0, 803015e <raw_input+0x52>
- /* receive function ate the packet */
- p = NULL;
- eaten = 1;
- if (prev != NULL) {
- 8030148: b15d cbz r5, 8030162 <raw_input+0x56>
- /* move the pcb to the front of raw_pcbs so that is
- found faster next time */
- prev->next = pcb->next;
- 803014a: 68e3 ldr r3, [r4, #12]
- 803014c: 60eb str r3, [r5, #12]
- pcb->next = raw_pcbs;
- 803014e: f8d8 3000 ldr.w r3, [r8]
- raw_pcbs = pcb;
- 8030152: f8c8 4000 str.w r4, [r8]
- eaten = 1;
- if (prev != NULL) {
- /* move the pcb to the front of raw_pcbs so that is
- found faster next time */
- prev->next = pcb->next;
- pcb->next = raw_pcbs;
- 8030156: 60e3 str r3, [r4, #12]
- /* receive callback function available? */
- if (pcb->recv != NULL) {
- /* the receive callback function did not eat the packet? */
- if (pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr()) != 0) {
- /* receive function ate the packet */
- p = NULL;
- 8030158: 2600 movs r6, #0
- eaten = 1;
- 803015a: 2301 movs r3, #1
- 803015c: e003 b.n 8030166 <raw_input+0x5a>
- pcb = raw_pcbs;
- /* loop through all raw pcbs until the packet is eaten by one */
- /* this allows multiple pcbs to match against the packet by design */
- while ((eaten == 0) && (pcb != NULL)) {
- if ((pcb->protocol == proto) &&
- (ip_addr_isany(&pcb->local_ip) ||
- 803015e: 2300 movs r3, #0
- 8030160: e001 b.n 8030166 <raw_input+0x5a>
- if (pcb->recv != NULL) {
- /* the receive callback function did not eat the packet? */
- if (pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr()) != 0) {
- /* receive function ate the packet */
- p = NULL;
- eaten = 1;
- 8030162: 2301 movs r3, #1
- /* receive callback function available? */
- if (pcb->recv != NULL) {
- /* the receive callback function did not eat the packet? */
- if (pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr()) != 0) {
- /* receive function ate the packet */
- p = NULL;
- 8030164: 462e mov r6, r5
- /* no receive callback function was set for this raw PCB */
- }
- /* drop the packet */
- }
- prev = pcb;
- pcb = pcb->next;
- 8030166: 68e2 ldr r2, [r4, #12]
- 8030168: 4625 mov r5, r4
- prev = NULL;
- pcb = raw_pcbs;
- /* loop through all raw pcbs until the packet is eaten by one */
- /* this allows multiple pcbs to match against the packet by design */
- while ((eaten == 0) && (pcb != NULL)) {
- 803016a: b92b cbnz r3, 8030178 <raw_input+0x6c>
- /* no receive callback function was set for this raw PCB */
- }
- /* drop the packet */
- }
- prev = pcb;
- pcb = pcb->next;
- 803016c: 4614 mov r4, r2
- prev = NULL;
- pcb = raw_pcbs;
- /* loop through all raw pcbs until the packet is eaten by one */
- /* this allows multiple pcbs to match against the packet by design */
- while ((eaten == 0) && (pcb != NULL)) {
- 803016e: 2c00 cmp r4, #0
- 8030170: d1d9 bne.n 8030126 <raw_input+0x1a>
- 8030172: 4620 mov r0, r4
- 8030174: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 8030178: 2001 movs r0, #1
- }
- prev = pcb;
- pcb = pcb->next;
- }
- return eaten;
- }
- 803017a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 803017e: bf00 nop
- 8030180: 2000c3d8 .word 0x2000c3d8
- 8030184: 2000f6dc .word 0x2000f6dc
- 8030188: 2000f6e4 .word 0x2000f6e4
- 0803018c <raw_bind>:
- * @see raw_disconnect()
- */
- err_t
- raw_bind(struct raw_pcb *pcb, ip_addr_t *ipaddr)
- {
- ip_addr_set(&pcb->local_ip, ipaddr);
- 803018c: b101 cbz r1, 8030190 <raw_bind+0x4>
- 803018e: 6809 ldr r1, [r1, #0]
- 8030190: 6001 str r1, [r0, #0]
- return ERR_OK;
- }
- 8030192: 2000 movs r0, #0
- 8030194: 4770 bx lr
- 08030196 <raw_connect>:
- * @see raw_disconnect() and raw_sendto()
- */
- err_t
- raw_connect(struct raw_pcb *pcb, ip_addr_t *ipaddr)
- {
- ip_addr_set(&pcb->remote_ip, ipaddr);
- 8030196: b101 cbz r1, 803019a <raw_connect+0x4>
- 8030198: 6809 ldr r1, [r1, #0]
- 803019a: 6041 str r1, [r0, #4]
- return ERR_OK;
- }
- 803019c: 2000 movs r0, #0
- 803019e: 4770 bx lr
- 080301a0 <raw_recv>:
- */
- void
- raw_recv(struct raw_pcb *pcb, raw_recv_fn recv, void *recv_arg)
- {
- /* remember recv() callback and user data */
- pcb->recv = recv;
- 80301a0: 6141 str r1, [r0, #20]
- pcb->recv_arg = recv_arg;
- 80301a2: 6182 str r2, [r0, #24]
- 80301a4: 4770 bx lr
- 080301a6 <raw_sendto>:
- * @param ipaddr the destination address of the IP packet
- *
- */
- err_t
- raw_sendto(struct raw_pcb *pcb, struct pbuf *p, ip_addr_t *ipaddr)
- {
- 80301a6: b5f0 push {r4, r5, r6, r7, lr}
- 80301a8: 4605 mov r5, r0
- 80301aa: b085 sub sp, #20
- 80301ac: 460c mov r4, r1
- struct pbuf *q; /* q will be sent down the stack */
-
- LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_sendto\n"));
-
- /* not enough space to add an IP header to first pbuf in given p chain? */
- if (pbuf_header(p, IP_HLEN)) {
- 80301ae: 4608 mov r0, r1
- 80301b0: 2114 movs r1, #20
- * @param ipaddr the destination address of the IP packet
- *
- */
- err_t
- raw_sendto(struct raw_pcb *pcb, struct pbuf *p, ip_addr_t *ipaddr)
- {
- 80301b2: 4617 mov r7, r2
- struct pbuf *q; /* q will be sent down the stack */
-
- LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_sendto\n"));
-
- /* not enough space to add an IP header to first pbuf in given p chain? */
- if (pbuf_header(p, IP_HLEN)) {
- 80301b4: f7ff fdff bl 802fdb6 <pbuf_header>
- 80301b8: b170 cbz r0, 80301d8 <raw_sendto+0x32>
- /* allocate header in new pbuf */
- q = pbuf_alloc(PBUF_IP, 0, PBUF_RAM);
- 80301ba: 2100 movs r1, #0
- 80301bc: 2001 movs r0, #1
- 80301be: 460a mov r2, r1
- 80301c0: f7ff fe71 bl 802fea6 <pbuf_alloc>
- /* new header pbuf could not be allocated? */
- if (q == NULL) {
- 80301c4: 4606 mov r6, r0
- 80301c6: b908 cbnz r0, 80301cc <raw_sendto+0x26>
- LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("raw_sendto: could not allocate header\n"));
- return ERR_MEM;
- 80301c8: 25ff movs r5, #255 ; 0xff
- 80301ca: e02e b.n 803022a <raw_sendto+0x84>
- }
- if (p->tot_len != 0) {
- 80301cc: 8923 ldrh r3, [r4, #8]
- 80301ce: b15b cbz r3, 80301e8 <raw_sendto+0x42>
- /* chain header q in front of given pbuf p */
- pbuf_chain(q, p);
- 80301d0: 4621 mov r1, r4
- 80301d2: f7ff ff16 bl 8030002 <pbuf_chain>
- 80301d6: e007 b.n 80301e8 <raw_sendto+0x42>
- /* { first pbuf q points to header pbuf } */
- LWIP_DEBUGF(RAW_DEBUG, ("raw_sendto: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p));
- } else {
- /* first pbuf q equals given pbuf */
- q = p;
- if(pbuf_header(q, -IP_HLEN)) {
- 80301d8: 4620 mov r0, r4
- 80301da: f06f 0113 mvn.w r1, #19
- 80301de: f7ff fdea bl 802fdb6 <pbuf_header>
- 80301e2: 2800 cmp r0, #0
- 80301e4: d1f0 bne.n 80301c8 <raw_sendto+0x22>
- 80301e6: 4626 mov r6, r4
- LWIP_ASSERT("Can't restore header we just removed!", 0);
- return ERR_MEM;
- }
- }
- if ((netif = ip_route(ipaddr)) == NULL) {
- 80301e8: 4638 mov r0, r7
- 80301ea: f002 febb bl 8032f64 <ip_route>
- 80301ee: b928 cbnz r0, 80301fc <raw_sendto+0x56>
- LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
- ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr)));
- /* free any temporary header pbuf allocated by pbuf_header() */
- if (q != p) {
- 80301f0: 42a6 cmp r6, r4
- 80301f2: d019 beq.n 8030228 <raw_sendto+0x82>
- pbuf_free(q);
- 80301f4: 4630 mov r0, r6
- 80301f6: f7ff fe09 bl 802fe0c <pbuf_free>
- 80301fa: e015 b.n 8030228 <raw_sendto+0x82>
- }
- return ERR_VAL;
- }
- #endif /* IP_SOF_BROADCAST */
- if (ip_addr_isany(&pcb->local_ip)) {
- 80301fc: 4629 mov r1, r5
- 80301fe: b10d cbz r5, 8030204 <raw_sendto+0x5e>
- 8030200: 682b ldr r3, [r5, #0]
- 8030202: b903 cbnz r3, 8030206 <raw_sendto+0x60>
- /* use outgoing network interface IP address as source address */
- src_ip = &(netif->ip_addr);
- 8030204: 1d01 adds r1, r0, #4
- /* use RAW PCB local IP address as source address */
- src_ip = &(pcb->local_ip);
- }
- NETIF_SET_HWADDRHINT(netif, &pcb->addr_hint);
- err = ip_output_if (q, src_ip, ipaddr, pcb->ttl, pcb->tos, pcb->protocol, netif);
- 8030206: 7a6a ldrb r2, [r5, #9]
- 8030208: 7aab ldrb r3, [r5, #10]
- 803020a: 9200 str r2, [sp, #0]
- 803020c: 7c2a ldrb r2, [r5, #16]
- 803020e: 9002 str r0, [sp, #8]
- 8030210: 9201 str r2, [sp, #4]
- 8030212: 4630 mov r0, r6
- 8030214: 463a mov r2, r7
- 8030216: f002 ffa9 bl 803316c <ip_output_if>
- NETIF_SET_HWADDRHINT(netif, NULL);
- /* did we chain a header earlier? */
- if (q != p) {
- 803021a: 42a6 cmp r6, r4
- /* use RAW PCB local IP address as source address */
- src_ip = &(pcb->local_ip);
- }
- NETIF_SET_HWADDRHINT(netif, &pcb->addr_hint);
- err = ip_output_if (q, src_ip, ipaddr, pcb->ttl, pcb->tos, pcb->protocol, netif);
- 803021c: 4605 mov r5, r0
- NETIF_SET_HWADDRHINT(netif, NULL);
- /* did we chain a header earlier? */
- if (q != p) {
- 803021e: d004 beq.n 803022a <raw_sendto+0x84>
- /* free the header */
- pbuf_free(q);
- 8030220: 4630 mov r0, r6
- 8030222: f7ff fdf3 bl 802fe0c <pbuf_free>
- 8030226: e000 b.n 803022a <raw_sendto+0x84>
- ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr)));
- /* free any temporary header pbuf allocated by pbuf_header() */
- if (q != p) {
- pbuf_free(q);
- }
- return ERR_RTE;
- 8030228: 25fc movs r5, #252 ; 0xfc
- if (q != p) {
- /* free the header */
- pbuf_free(q);
- }
- return err;
- }
- 803022a: b268 sxtb r0, r5
- 803022c: b005 add sp, #20
- 803022e: bdf0 pop {r4, r5, r6, r7, pc}
- 08030230 <raw_send>:
- *
- */
- err_t
- raw_send(struct raw_pcb *pcb, struct pbuf *p)
- {
- return raw_sendto(pcb, p, &pcb->remote_ip);
- 8030230: 1d02 adds r2, r0, #4
- 8030232: f7ff bfb8 b.w 80301a6 <raw_sendto>
- 8030236: 0000 movs r0, r0
- 08030238 <raw_remove>:
- void
- raw_remove(struct raw_pcb *pcb)
- {
- struct raw_pcb *pcb2;
- /* pcb to be removed is first in list? */
- if (raw_pcbs == pcb) {
- 8030238: 4a09 ldr r2, [pc, #36] ; (8030260 <raw_remove+0x28>)
- 803023a: 6813 ldr r3, [r2, #0]
- 803023c: 4283 cmp r3, r0
- *
- * @see raw_new()
- */
- void
- raw_remove(struct raw_pcb *pcb)
- {
- 803023e: 4601 mov r1, r0
- struct raw_pcb *pcb2;
- /* pcb to be removed is first in list? */
- if (raw_pcbs == pcb) {
- 8030240: d109 bne.n 8030256 <raw_remove+0x1e>
- /* make list start at 2nd pcb */
- raw_pcbs = raw_pcbs->next;
- 8030242: 68c3 ldr r3, [r0, #12]
- 8030244: 6013 str r3, [r2, #0]
- 8030246: e008 b.n 803025a <raw_remove+0x22>
- /* pcb not 1st in list */
- } else {
- for(pcb2 = raw_pcbs; pcb2 != NULL; pcb2 = pcb2->next) {
- /* find pcb in raw_pcbs list */
- if (pcb2->next != NULL && pcb2->next == pcb) {
- 8030248: 68da ldr r2, [r3, #12]
- 803024a: b11a cbz r2, 8030254 <raw_remove+0x1c>
- 803024c: 428a cmp r2, r1
- /* remove pcb from list */
- pcb2->next = pcb->next;
- 803024e: bf04 itt eq
- 8030250: 68ca ldreq r2, [r1, #12]
- 8030252: 60da streq r2, [r3, #12]
- if (raw_pcbs == pcb) {
- /* make list start at 2nd pcb */
- raw_pcbs = raw_pcbs->next;
- /* pcb not 1st in list */
- } else {
- for(pcb2 = raw_pcbs; pcb2 != NULL; pcb2 = pcb2->next) {
- 8030254: 68db ldr r3, [r3, #12]
- 8030256: 2b00 cmp r3, #0
- 8030258: d1f6 bne.n 8030248 <raw_remove+0x10>
- /* remove pcb from list */
- pcb2->next = pcb->next;
- }
- }
- }
- memp_free(MEMP_RAW_PCB, pcb);
- 803025a: 2000 movs r0, #0
- 803025c: f7ff bccc b.w 802fbf8 <memp_free>
- 8030260: 2000c3d8 .word 0x2000c3d8
- 08030264 <raw_new>:
- *
- * @see raw_remove()
- */
- struct raw_pcb *
- raw_new(u8_t proto)
- {
- 8030264: b538 push {r3, r4, r5, lr}
- 8030266: 4605 mov r5, r0
- struct raw_pcb *pcb;
- LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_new\n"));
- pcb = (struct raw_pcb *)memp_malloc(MEMP_RAW_PCB);
- 8030268: 2000 movs r0, #0
- 803026a: f7ff fcaf bl 802fbcc <memp_malloc>
- /* could allocate RAW PCB? */
- if (pcb != NULL) {
- 803026e: 4604 mov r4, r0
- 8030270: b150 cbz r0, 8030288 <raw_new+0x24>
- /* initialize PCB to all zeroes */
- memset(pcb, 0, sizeof(struct raw_pcb));
- 8030272: 221c movs r2, #28
- 8030274: 2100 movs r1, #0
- 8030276: f7f1 fc43 bl 8021b00 <memset>
- pcb->protocol = proto;
- pcb->ttl = RAW_TTL;
- 803027a: 23ff movs r3, #255 ; 0xff
- 803027c: 72a3 strb r3, [r4, #10]
- pcb->next = raw_pcbs;
- 803027e: 4b03 ldr r3, [pc, #12] ; (803028c <raw_new+0x28>)
- pcb = (struct raw_pcb *)memp_malloc(MEMP_RAW_PCB);
- /* could allocate RAW PCB? */
- if (pcb != NULL) {
- /* initialize PCB to all zeroes */
- memset(pcb, 0, sizeof(struct raw_pcb));
- pcb->protocol = proto;
- 8030280: 7425 strb r5, [r4, #16]
- pcb->ttl = RAW_TTL;
- pcb->next = raw_pcbs;
- 8030282: 681a ldr r2, [r3, #0]
- raw_pcbs = pcb;
- 8030284: 601c str r4, [r3, #0]
- if (pcb != NULL) {
- /* initialize PCB to all zeroes */
- memset(pcb, 0, sizeof(struct raw_pcb));
- pcb->protocol = proto;
- pcb->ttl = RAW_TTL;
- pcb->next = raw_pcbs;
- 8030286: 60e2 str r2, [r4, #12]
- raw_pcbs = pcb;
- }
- return pcb;
- }
- 8030288: 4620 mov r0, r4
- 803028a: bd38 pop {r3, r4, r5, pc}
- 803028c: 2000c3d8 .word 0x2000c3d8
- 08030290 <tcp_accept_null>:
- LWIP_UNUSED_ARG(arg);
- LWIP_UNUSED_ARG(pcb);
- LWIP_UNUSED_ARG(err);
- return ERR_ABRT;
- }
- 8030290: f06f 0009 mvn.w r0, #9
- 8030294: 4770 bx lr
- 8030296: 0000 movs r0, r0
- 08030298 <tcp_new_port>:
- *
- * @return a new (free) local TCP port number
- */
- static u16_t
- tcp_new_port(void)
- {
- 8030298: 4b13 ldr r3, [pc, #76] ; (80302e8 <tcp_new_port+0x50>)
- 803029a: b570 push {r4, r5, r6, lr}
- 803029c: 8818 ldrh r0, [r3, #0]
- if (tcp_port++ == TCP_LOCAL_PORT_RANGE_END) {
- tcp_port = TCP_LOCAL_PORT_RANGE_START;
- }
- /* Check all PCB lists. */
- for (i = 0; i < NUM_TCP_PCB_LISTS; i++) {
- for(pcb = *tcp_pcb_lists[i]; pcb != NULL; pcb = pcb->next) {
- 803029e: 4d13 ldr r5, [pc, #76] ; (80302ec <tcp_new_port+0x54>)
- *
- * @return a new (free) local TCP port number
- */
- static u16_t
- tcp_new_port(void)
- {
- 80302a0: f44f 4280 mov.w r2, #16384 ; 0x4000
- u8_t i;
- u16_t n = 0;
- struct tcp_pcb *pcb;
-
- again:
- if (tcp_port++ == TCP_LOCAL_PORT_RANGE_END) {
- 80302a4: f64f 74ff movw r4, #65535 ; 0xffff
- 80302a8: 42a0 cmp r0, r4
- 80302aa: d002 beq.n 80302b2 <tcp_new_port+0x1a>
- 80302ac: 3001 adds r0, #1
- 80302ae: b280 uxth r0, r0
- 80302b0: e001 b.n 80302b6 <tcp_new_port+0x1e>
- tcp_port = TCP_LOCAL_PORT_RANGE_START;
- 80302b2: f44f 4040 mov.w r0, #49152 ; 0xc000
- 80302b6: 2300 movs r3, #0
- }
- /* Check all PCB lists. */
- for (i = 0; i < NUM_TCP_PCB_LISTS; i++) {
- for(pcb = *tcp_pcb_lists[i]; pcb != NULL; pcb = pcb->next) {
- 80302b8: 5959 ldr r1, [r3, r5]
- 80302ba: 6809 ldr r1, [r1, #0]
- 80302bc: e00b b.n 80302d6 <tcp_new_port+0x3e>
- if (pcb->local_port == tcp_port) {
- 80302be: 8b4e ldrh r6, [r1, #26]
- 80302c0: 4286 cmp r6, r0
- 80302c2: d107 bne.n 80302d4 <tcp_new_port+0x3c>
- 80302c4: 3a01 subs r2, #1
- 80302c6: b292 uxth r2, r2
- if (++n > (TCP_LOCAL_PORT_RANGE_END - TCP_LOCAL_PORT_RANGE_START)) {
- 80302c8: 2a00 cmp r2, #0
- 80302ca: d1ed bne.n 80302a8 <tcp_new_port+0x10>
- 80302cc: 4b06 ldr r3, [pc, #24] ; (80302e8 <tcp_new_port+0x50>)
- 80302ce: 8018 strh r0, [r3, #0]
- return 0;
- 80302d0: 4610 mov r0, r2
- 80302d2: bd70 pop {r4, r5, r6, pc}
- if (tcp_port++ == TCP_LOCAL_PORT_RANGE_END) {
- tcp_port = TCP_LOCAL_PORT_RANGE_START;
- }
- /* Check all PCB lists. */
- for (i = 0; i < NUM_TCP_PCB_LISTS; i++) {
- for(pcb = *tcp_pcb_lists[i]; pcb != NULL; pcb = pcb->next) {
- 80302d4: 68c9 ldr r1, [r1, #12]
- 80302d6: 2900 cmp r1, #0
- 80302d8: d1f1 bne.n 80302be <tcp_new_port+0x26>
- 80302da: 3304 adds r3, #4
- again:
- if (tcp_port++ == TCP_LOCAL_PORT_RANGE_END) {
- tcp_port = TCP_LOCAL_PORT_RANGE_START;
- }
- /* Check all PCB lists. */
- for (i = 0; i < NUM_TCP_PCB_LISTS; i++) {
- 80302dc: 2b10 cmp r3, #16
- 80302de: d1eb bne.n 80302b8 <tcp_new_port+0x20>
- 80302e0: 4b01 ldr r3, [pc, #4] ; (80302e8 <tcp_new_port+0x50>)
- 80302e2: 8018 strh r0, [r3, #0]
- goto again;
- }
- }
- }
- return tcp_port;
- }
- 80302e4: bd70 pop {r4, r5, r6, pc}
- 80302e6: bf00 nop
- 80302e8: 2000071c .word 0x2000071c
- 80302ec: 08044fe0 .word 0x08044fe0
- 080302f0 <tcp_init>:
- /**
- * Initialize this module.
- */
- void
- tcp_init(void)
- {
- 80302f0: 4770 bx lr
- 80302f2: 0000 movs r0, r0
- 080302f4 <tcp_bind>:
- * ERR_VAL if bind failed because the PCB is not in a valid state
- * ERR_OK if bound
- */
- err_t
- tcp_bind(struct tcp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)
- {
- 80302f4: b5f8 push {r3, r4, r5, r6, r7, lr}
- int i;
- int max_pcb_list = NUM_TCP_PCB_LISTS;
- struct tcp_pcb *cpcb;
- LWIP_ERROR("tcp_bind: can only bind in state CLOSED", pcb->state == CLOSED, return ERR_VAL);
- 80302f6: 7e03 ldrb r3, [r0, #24]
- * ERR_VAL if bind failed because the PCB is not in a valid state
- * ERR_OK if bound
- */
- err_t
- tcp_bind(struct tcp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)
- {
- 80302f8: 4604 mov r4, r0
- 80302fa: 460d mov r5, r1
- int i;
- int max_pcb_list = NUM_TCP_PCB_LISTS;
- struct tcp_pcb *cpcb;
- LWIP_ERROR("tcp_bind: can only bind in state CLOSED", pcb->state == CLOSED, return ERR_VAL);
- 80302fc: bb33 cbnz r3, 803034c <tcp_bind+0x58>
- if (ip_get_option(pcb, SOF_REUSEADDR)) {
- max_pcb_list = NUM_TCP_PCB_LISTS_NO_TIME_WAIT;
- }
- #endif /* SO_REUSE */
- if (port == 0) {
- 80302fe: b91a cbnz r2, 8030308 <tcp_bind+0x14>
- port = tcp_new_port();
- 8030300: f7ff ffca bl 8030298 <tcp_new_port>
- if (port == 0) {
- 8030304: 4602 mov r2, r0
- 8030306: b318 cbz r0, 8030350 <tcp_bind+0x5c>
- }
- }
- /* Check if the address already is in use (on all lists) */
- for (i = 0; i < max_pcb_list; i++) {
- for(cpcb = *tcp_pcb_lists[i]; cpcb != NULL; cpcb = cpcb->next) {
- 8030308: 4f14 ldr r7, [pc, #80] ; (803035c <tcp_bind+0x68>)
- * ERR_VAL if bind failed because the PCB is not in a valid state
- * ERR_OK if bound
- */
- err_t
- tcp_bind(struct tcp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)
- {
- 803030a: 2100 movs r1, #0
- }
- }
- /* Check if the address already is in use (on all lists) */
- for (i = 0; i < max_pcb_list; i++) {
- for(cpcb = *tcp_pcb_lists[i]; cpcb != NULL; cpcb = cpcb->next) {
- 803030c: 59cb ldr r3, [r1, r7]
- 803030e: 681b ldr r3, [r3, #0]
- 8030310: e00a b.n 8030328 <tcp_bind+0x34>
- if (cpcb->local_port == port) {
- 8030312: 8b58 ldrh r0, [r3, #26]
- 8030314: 4290 cmp r0, r2
- 8030316: d106 bne.n 8030326 <tcp_bind+0x32>
- tcp_connect. */
- if (!ip_get_option(pcb, SOF_REUSEADDR) ||
- !ip_get_option(cpcb, SOF_REUSEADDR))
- #endif /* SO_REUSE */
- {
- if (ip_addr_isany(&(cpcb->local_ip)) ||
- 8030318: 681e ldr r6, [r3, #0]
- 803031a: b1de cbz r6, 8030354 <tcp_bind+0x60>
- 803031c: b1d5 cbz r5, 8030354 <tcp_bind+0x60>
- ip_addr_isany(ipaddr) ||
- 803031e: 6828 ldr r0, [r5, #0]
- 8030320: b1c0 cbz r0, 8030354 <tcp_bind+0x60>
- 8030322: 4286 cmp r6, r0
- 8030324: d016 beq.n 8030354 <tcp_bind+0x60>
- }
- }
- /* Check if the address already is in use (on all lists) */
- for (i = 0; i < max_pcb_list; i++) {
- for(cpcb = *tcp_pcb_lists[i]; cpcb != NULL; cpcb = cpcb->next) {
- 8030326: 68db ldr r3, [r3, #12]
- 8030328: 2b00 cmp r3, #0
- 803032a: d1f2 bne.n 8030312 <tcp_bind+0x1e>
- 803032c: 3104 adds r1, #4
- return ERR_BUF;
- }
- }
- /* Check if the address already is in use (on all lists) */
- for (i = 0; i < max_pcb_list; i++) {
- 803032e: 2910 cmp r1, #16
- 8030330: d1ec bne.n 803030c <tcp_bind+0x18>
- }
- }
- }
- }
- if (!ip_addr_isany(ipaddr)) {
- 8030332: b115 cbz r5, 803033a <tcp_bind+0x46>
- 8030334: 682b ldr r3, [r5, #0]
- 8030336: b103 cbz r3, 803033a <tcp_bind+0x46>
- pcb->local_ip = *ipaddr;
- 8030338: 6023 str r3, [r4, #0]
- }
- pcb->local_port = port;
- TCP_REG(&tcp_bound_pcbs, pcb);
- 803033a: 4b09 ldr r3, [pc, #36] ; (8030360 <tcp_bind+0x6c>)
- }
- if (!ip_addr_isany(ipaddr)) {
- pcb->local_ip = *ipaddr;
- }
- pcb->local_port = port;
- 803033c: 8362 strh r2, [r4, #26]
- TCP_REG(&tcp_bound_pcbs, pcb);
- 803033e: 681a ldr r2, [r3, #0]
- 8030340: 601c str r4, [r3, #0]
- 8030342: 60e2 str r2, [r4, #12]
- 8030344: f002 f97e bl 8032644 <tcp_timer_needed>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_bind: bind to port %"U16_F"\n", port));
- return ERR_OK;
- 8030348: 2000 movs r0, #0
- 803034a: e004 b.n 8030356 <tcp_bind+0x62>
- {
- int i;
- int max_pcb_list = NUM_TCP_PCB_LISTS;
- struct tcp_pcb *cpcb;
- LWIP_ERROR("tcp_bind: can only bind in state CLOSED", pcb->state == CLOSED, return ERR_VAL);
- 803034c: 20fa movs r0, #250 ; 0xfa
- 803034e: e002 b.n 8030356 <tcp_bind+0x62>
- #endif /* SO_REUSE */
- if (port == 0) {
- port = tcp_new_port();
- if (port == 0) {
- return ERR_BUF;
- 8030350: 20fe movs r0, #254 ; 0xfe
- 8030352: e000 b.n 8030356 <tcp_bind+0x62>
- #endif /* SO_REUSE */
- {
- if (ip_addr_isany(&(cpcb->local_ip)) ||
- ip_addr_isany(ipaddr) ||
- ip_addr_cmp(&(cpcb->local_ip), ipaddr)) {
- return ERR_USE;
- 8030354: 20f8 movs r0, #248 ; 0xf8
- }
- pcb->local_port = port;
- TCP_REG(&tcp_bound_pcbs, pcb);
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_bind: bind to port %"U16_F"\n", port));
- return ERR_OK;
- }
- 8030356: b240 sxtb r0, r0
- 8030358: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 803035a: bf00 nop
- 803035c: 08044fe0 .word 0x08044fe0
- 8030360: 2000f6cc .word 0x2000f6cc
- 08030364 <tcp_listen_with_backlog>:
- * called like this:
- * tpcb = tcp_listen(tpcb);
- */
- struct tcp_pcb *
- tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog)
- {
- 8030364: b538 push {r3, r4, r5, lr}
- struct tcp_pcb_listen *lpcb;
- LWIP_UNUSED_ARG(backlog);
- LWIP_ERROR("tcp_listen: pcb already connected", pcb->state == CLOSED, return NULL);
- 8030366: 7e03 ldrb r3, [r0, #24]
- * called like this:
- * tpcb = tcp_listen(tpcb);
- */
- struct tcp_pcb *
- tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog)
- {
- 8030368: 4604 mov r4, r0
- struct tcp_pcb_listen *lpcb;
- LWIP_UNUSED_ARG(backlog);
- LWIP_ERROR("tcp_listen: pcb already connected", pcb->state == CLOSED, return NULL);
- 803036a: b10b cbz r3, 8030370 <tcp_listen_with_backlog+0xc>
- 803036c: 2000 movs r0, #0
- 803036e: bd38 pop {r3, r4, r5, pc}
- }
- }
- }
- }
- #endif /* SO_REUSE */
- lpcb = (struct tcp_pcb_listen *)memp_malloc(MEMP_TCP_PCB_LISTEN);
- 8030370: 2003 movs r0, #3
- 8030372: f7ff fc2b bl 802fbcc <memp_malloc>
- if (lpcb == NULL) {
- 8030376: 4605 mov r5, r0
- 8030378: 2800 cmp r0, #0
- 803037a: d0f7 beq.n 803036c <tcp_listen_with_backlog+0x8>
- return NULL;
- }
- lpcb->callback_arg = pcb->callback_arg;
- 803037c: 6923 ldr r3, [r4, #16]
- 803037e: 6103 str r3, [r0, #16]
- lpcb->local_port = pcb->local_port;
- 8030380: 8b63 ldrh r3, [r4, #26]
- 8030382: 8343 strh r3, [r0, #26]
- lpcb->state = LISTEN;
- 8030384: 2301 movs r3, #1
- 8030386: 7603 strb r3, [r0, #24]
- lpcb->prio = pcb->prio;
- 8030388: 7e63 ldrb r3, [r4, #25]
- 803038a: 7643 strb r3, [r0, #25]
- lpcb->so_options = pcb->so_options;
- ip_set_option(lpcb, SOF_ACCEPTCONN);
- 803038c: 7a23 ldrb r3, [r4, #8]
- 803038e: f043 0302 orr.w r3, r3, #2
- 8030392: 7203 strb r3, [r0, #8]
- lpcb->ttl = pcb->ttl;
- 8030394: 7aa3 ldrb r3, [r4, #10]
- 8030396: 7283 strb r3, [r0, #10]
- lpcb->tos = pcb->tos;
- 8030398: 7a63 ldrb r3, [r4, #9]
- 803039a: 7243 strb r3, [r0, #9]
- ip_addr_copy(lpcb->local_ip, pcb->local_ip);
- 803039c: 6823 ldr r3, [r4, #0]
- 803039e: 6003 str r3, [r0, #0]
- if (pcb->local_port != 0) {
- 80303a0: 8b63 ldrh r3, [r4, #26]
- 80303a2: b1ab cbz r3, 80303d0 <tcp_listen_with_backlog+0x6c>
- TCP_RMV(&tcp_bound_pcbs, pcb);
- 80303a4: 4a11 ldr r2, [pc, #68] ; (80303ec <tcp_listen_with_backlog+0x88>)
- 80303a6: 6813 ldr r3, [r2, #0]
- 80303a8: 42a3 cmp r3, r4
- 80303aa: d101 bne.n 80303b0 <tcp_listen_with_backlog+0x4c>
- 80303ac: 68e3 ldr r3, [r4, #12]
- 80303ae: e00c b.n 80303ca <tcp_listen_with_backlog+0x66>
- 80303b0: 4a0f ldr r2, [pc, #60] ; (80303f0 <tcp_listen_with_backlog+0x8c>)
- 80303b2: 6013 str r3, [r2, #0]
- 80303b4: e007 b.n 80303c6 <tcp_listen_with_backlog+0x62>
- 80303b6: 68d9 ldr r1, [r3, #12]
- 80303b8: 42a1 cmp r1, r4
- 80303ba: d103 bne.n 80303c4 <tcp_listen_with_backlog+0x60>
- 80303bc: 6013 str r3, [r2, #0]
- 80303be: 68e2 ldr r2, [r4, #12]
- 80303c0: 60da str r2, [r3, #12]
- 80303c2: e003 b.n 80303cc <tcp_listen_with_backlog+0x68>
- 80303c4: 460b mov r3, r1
- 80303c6: 2b00 cmp r3, #0
- 80303c8: d1f5 bne.n 80303b6 <tcp_listen_with_backlog+0x52>
- 80303ca: 6013 str r3, [r2, #0]
- 80303cc: 2300 movs r3, #0
- 80303ce: 60e3 str r3, [r4, #12]
- }
- memp_free(MEMP_TCP_PCB, pcb);
- 80303d0: 2002 movs r0, #2
- 80303d2: 4621 mov r1, r4
- 80303d4: f7ff fc10 bl 802fbf8 <memp_free>
- #if LWIP_CALLBACK_API
- lpcb->accept = tcp_accept_null;
- 80303d8: 4b06 ldr r3, [pc, #24] ; (80303f4 <tcp_listen_with_backlog+0x90>)
- 80303da: 616b str r3, [r5, #20]
- #endif /* LWIP_CALLBACK_API */
- #if TCP_LISTEN_BACKLOG
- lpcb->accepts_pending = 0;
- lpcb->backlog = (backlog ? backlog : 1);
- #endif /* TCP_LISTEN_BACKLOG */
- TCP_REG(&tcp_listen_pcbs.pcbs, (struct tcp_pcb *)lpcb);
- 80303dc: 4b06 ldr r3, [pc, #24] ; (80303f8 <tcp_listen_with_backlog+0x94>)
- 80303de: 681a ldr r2, [r3, #0]
- 80303e0: 601d str r5, [r3, #0]
- 80303e2: 60ea str r2, [r5, #12]
- 80303e4: f002 f92e bl 8032644 <tcp_timer_needed>
- return (struct tcp_pcb *)lpcb;
- 80303e8: 4628 mov r0, r5
- }
- 80303ea: bd38 pop {r3, r4, r5, pc}
- 80303ec: 2000f6cc .word 0x2000f6cc
- 80303f0: 2000f6c8 .word 0x2000f6c8
- 80303f4: 08030291 .word 0x08030291
- 80303f8: 2000f6c4 .word 0x2000f6c4
- 080303fc <tcp_update_rcv_ann_wnd>:
- *
- * Returns how much extra window would be advertised if we sent an
- * update now.
- */
- u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb)
- {
- 80303fc: b530 push {r4, r5, lr}
- u32_t new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd;
- if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) {
- 80303fe: 6b01 ldr r1, [r0, #48] ; 0x30
- * Returns how much extra window would be advertised if we sent an
- * update now.
- */
- u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb)
- {
- u32_t new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd;
- 8030400: 8d84 ldrh r4, [r0, #44] ; 0x2c
- if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) {
- 8030402: 8ec5 ldrh r5, [r0, #54] ; 0x36
- * Returns how much extra window would be advertised if we sent an
- * update now.
- */
- u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb)
- {
- u32_t new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd;
- 8030404: 6a82 ldr r2, [r0, #40] ; 0x28
- *
- * Returns how much extra window would be advertised if we sent an
- * update now.
- */
- u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb)
- {
- 8030406: 4603 mov r3, r0
- u32_t new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd;
- if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) {
- 8030408: f640 3068 movw r0, #2920 ; 0xb68
- 803040c: 4285 cmp r5, r0
- 803040e: bf28 it cs
- 8030410: 4605 movcs r5, r0
- * Returns how much extra window would be advertised if we sent an
- * update now.
- */
- u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb)
- {
- u32_t new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd;
- 8030412: 1a60 subs r0, r4, r1
- if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) {
- 8030414: 1880 adds r0, r0, r2
- 8030416: 1b45 subs r5, r0, r5
- 8030418: 2d00 cmp r5, #0
- 803041a: db01 blt.n 8030420 <tcp_update_rcv_ann_wnd+0x24>
- /* we can advertise more window */
- pcb->rcv_ann_wnd = pcb->rcv_wnd;
- 803041c: 85dc strh r4, [r3, #46] ; 0x2e
- return new_right_edge - pcb->rcv_ann_right_edge;
- 803041e: bd30 pop {r4, r5, pc}
- } else {
- if (TCP_SEQ_GT(pcb->rcv_nxt, pcb->rcv_ann_right_edge)) {
- 8030420: 1a50 subs r0, r2, r1
- 8030422: 2800 cmp r0, #0
- 8030424: f04f 0000 mov.w r0, #0
- 8030428: dd01 ble.n 803042e <tcp_update_rcv_ann_wnd+0x32>
- /* Can happen due to other end sending out of advertised window,
- * but within actual available (but not yet advertised) window */
- pcb->rcv_ann_wnd = 0;
- 803042a: 85d8 strh r0, [r3, #46] ; 0x2e
- 803042c: bd30 pop {r4, r5, pc}
- } else {
- /* keep the right edge of window constant */
- u32_t new_rcv_ann_wnd = pcb->rcv_ann_right_edge - pcb->rcv_nxt;
- 803042e: 1a8a subs r2, r1, r2
- LWIP_ASSERT("new_rcv_ann_wnd <= 0xffff", new_rcv_ann_wnd <= 0xffff);
- pcb->rcv_ann_wnd = (u16_t)new_rcv_ann_wnd;
- 8030430: 85da strh r2, [r3, #46] ; 0x2e
- }
- return 0;
- }
- }
- 8030432: bd30 pop {r4, r5, pc}
- 08030434 <tcp_recved>:
- LWIP_ASSERT("don't call tcp_recved for listen-pcbs",
- pcb->state != LISTEN);
- LWIP_ASSERT("tcp_recved: len would wrap rcv_wnd\n",
- len <= 0xffff - pcb->rcv_wnd );
- pcb->rcv_wnd += len;
- 8030434: 8d83 ldrh r3, [r0, #44] ; 0x2c
- 8030436: 18c9 adds r1, r1, r3
- 8030438: b289 uxth r1, r1
- if (pcb->rcv_wnd > TCP_WND) {
- 803043a: f241 63d0 movw r3, #5840 ; 0x16d0
- 803043e: 4299 cmp r1, r3
- * @param pcb the tcp_pcb for which data is read
- * @param len the amount of bytes that have been read by the application
- */
- void
- tcp_recved(struct tcp_pcb *pcb, u16_t len)
- {
- 8030440: b510 push {r4, lr}
- LWIP_ASSERT("tcp_recved: len would wrap rcv_wnd\n",
- len <= 0xffff - pcb->rcv_wnd );
- pcb->rcv_wnd += len;
- if (pcb->rcv_wnd > TCP_WND) {
- pcb->rcv_wnd = TCP_WND;
- 8030442: bf8c ite hi
- 8030444: 8583 strhhi r3, [r0, #44] ; 0x2c
- LWIP_ASSERT("don't call tcp_recved for listen-pcbs",
- pcb->state != LISTEN);
- LWIP_ASSERT("tcp_recved: len would wrap rcv_wnd\n",
- len <= 0xffff - pcb->rcv_wnd );
- pcb->rcv_wnd += len;
- 8030446: 8581 strhls r1, [r0, #44] ; 0x2c
- * @param pcb the tcp_pcb for which data is read
- * @param len the amount of bytes that have been read by the application
- */
- void
- tcp_recved(struct tcp_pcb *pcb, u16_t len)
- {
- 8030448: 4604 mov r4, r0
- pcb->rcv_wnd += len;
- if (pcb->rcv_wnd > TCP_WND) {
- pcb->rcv_wnd = TCP_WND;
- }
- wnd_inflation = tcp_update_rcv_ann_wnd(pcb);
- 803044a: f7ff ffd7 bl 80303fc <tcp_update_rcv_ann_wnd>
- /* If the change in the right edge of window is significant (default
- * watermark is TCP_WND/4), then send an explicit update now.
- * Otherwise wait for a packet to be sent in the normal course of
- * events (or more window to be available later) */
- if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD) {
- 803044e: f240 53b3 movw r3, #1459 ; 0x5b3
- 8030452: 4298 cmp r0, r3
- 8030454: dd08 ble.n 8030468 <tcp_recved+0x34>
- tcp_ack_now(pcb);
- 8030456: 7fa3 ldrb r3, [r4, #30]
- tcp_output(pcb);
- 8030458: 4620 mov r0, r4
- /* If the change in the right edge of window is significant (default
- * watermark is TCP_WND/4), then send an explicit update now.
- * Otherwise wait for a packet to be sent in the normal course of
- * events (or more window to be available later) */
- if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD) {
- tcp_ack_now(pcb);
- 803045a: f043 0302 orr.w r3, r3, #2
- 803045e: 77a3 strb r3, [r4, #30]
- tcp_output(pcb);
- }
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: recveived %"U16_F" bytes, wnd %"U16_F" (%"U16_F").\n",
- len, pcb->rcv_wnd, TCP_WND - pcb->rcv_wnd));
- }
- 8030460: e8bd 4010 ldmia.w sp!, {r4, lr}
- * watermark is TCP_WND/4), then send an explicit update now.
- * Otherwise wait for a packet to be sent in the normal course of
- * events (or more window to be available later) */
- if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD) {
- tcp_ack_now(pcb);
- tcp_output(pcb);
- 8030464: f001 be30 b.w 80320c8 <tcp_output>
- 8030468: bd10 pop {r4, pc}
- 0803046a <tcp_seg_free>:
- *
- * @param seg single tcp_seg to free
- */
- void
- tcp_seg_free(struct tcp_seg *seg)
- {
- 803046a: b510 push {r4, lr}
- if (seg != NULL) {
- 803046c: 4604 mov r4, r0
- 803046e: b148 cbz r0, 8030484 <tcp_seg_free+0x1a>
- if (seg->p != NULL) {
- 8030470: 6840 ldr r0, [r0, #4]
- 8030472: b108 cbz r0, 8030478 <tcp_seg_free+0xe>
- pbuf_free(seg->p);
- 8030474: f7ff fcca bl 802fe0c <pbuf_free>
- #if TCP_DEBUG
- seg->p = NULL;
- #endif /* TCP_DEBUG */
- }
- memp_free(MEMP_TCP_SEG, seg);
- 8030478: 2004 movs r0, #4
- 803047a: 4621 mov r1, r4
- }
- }
- 803047c: e8bd 4010 ldmia.w sp!, {r4, lr}
- pbuf_free(seg->p);
- #if TCP_DEBUG
- seg->p = NULL;
- #endif /* TCP_DEBUG */
- }
- memp_free(MEMP_TCP_SEG, seg);
- 8030480: f7ff bbba b.w 802fbf8 <memp_free>
- 8030484: bd10 pop {r4, pc}
- 08030486 <tcp_segs_free>:
- *
- * @param seg tcp_seg list of TCP segments to free
- */
- void
- tcp_segs_free(struct tcp_seg *seg)
- {
- 8030486: b510 push {r4, lr}
- while (seg != NULL) {
- 8030488: e003 b.n 8030492 <tcp_segs_free+0xc>
- struct tcp_seg *next = seg->next;
- 803048a: 6804 ldr r4, [r0, #0]
- tcp_seg_free(seg);
- 803048c: f7ff ffed bl 803046a <tcp_seg_free>
- seg = next;
- 8030490: 4620 mov r0, r4
- * @param seg tcp_seg list of TCP segments to free
- */
- void
- tcp_segs_free(struct tcp_seg *seg)
- {
- while (seg != NULL) {
- 8030492: 2800 cmp r0, #0
- 8030494: d1f9 bne.n 803048a <tcp_segs_free+0x4>
- struct tcp_seg *next = seg->next;
- tcp_seg_free(seg);
- seg = next;
- }
- }
- 8030496: bd10 pop {r4, pc}
- 08030498 <tcp_arg>:
- void
- tcp_arg(struct tcp_pcb *pcb, void *arg)
- {
- /* This function is allowed to be called for both listen pcbs and
- connection pcbs. */
- pcb->callback_arg = arg;
- 8030498: 6101 str r1, [r0, #16]
- 803049a: 4770 bx lr
- 0803049c <tcp_recv>:
- */
- void
- tcp_recv(struct tcp_pcb *pcb, tcp_recv_fn recv)
- {
- LWIP_ASSERT("invalid socket state for recv callback", pcb->state != LISTEN);
- pcb->recv = recv;
- 803049c: 67c1 str r1, [r0, #124] ; 0x7c
- 803049e: 4770 bx lr
- 080304a0 <tcp_sent>:
- */
- void
- tcp_sent(struct tcp_pcb *pcb, tcp_sent_fn sent)
- {
- LWIP_ASSERT("invalid socket state for sent callback", pcb->state != LISTEN);
- pcb->sent = sent;
- 80304a0: 6781 str r1, [r0, #120] ; 0x78
- 80304a2: 4770 bx lr
- 080304a4 <tcp_err>:
- */
- void
- tcp_err(struct tcp_pcb *pcb, tcp_err_fn err)
- {
- LWIP_ASSERT("invalid socket state for err callback", pcb->state != LISTEN);
- pcb->errf = err;
- 80304a4: f8c0 1088 str.w r1, [r0, #136] ; 0x88
- 80304a8: 4770 bx lr
- 080304aa <tcp_accept>:
- void
- tcp_accept(struct tcp_pcb *pcb, tcp_accept_fn accept)
- {
- /* This function is allowed to be called for both listen pcbs and
- connection pcbs. */
- pcb->accept = accept;
- 80304aa: 6141 str r1, [r0, #20]
- 80304ac: 4770 bx lr
- 080304ae <tcp_poll>:
- void
- tcp_poll(struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval)
- {
- LWIP_ASSERT("invalid socket state for poll", pcb->state != LISTEN);
- #if LWIP_CALLBACK_API
- pcb->poll = poll;
- 80304ae: f8c0 1084 str.w r1, [r0, #132] ; 0x84
- #else /* LWIP_CALLBACK_API */
- LWIP_UNUSED_ARG(poll);
- #endif /* LWIP_CALLBACK_API */
- pcb->pollinterval = interval;
- 80304b2: f880 2020 strb.w r2, [r0, #32]
- 80304b6: 4770 bx lr
- 080304b8 <tcp_pcb_purge>:
- * @param pcb tcp_pcb to purge. The pcb itself is not deallocated!
- */
- void
- tcp_pcb_purge(struct tcp_pcb *pcb)
- {
- if (pcb->state != CLOSED &&
- 80304b8: 7e03 ldrb r3, [r0, #24]
- *
- * @param pcb tcp_pcb to purge. The pcb itself is not deallocated!
- */
- void
- tcp_pcb_purge(struct tcp_pcb *pcb)
- {
- 80304ba: b510 push {r4, lr}
- 80304bc: 4604 mov r4, r0
- if (pcb->state != CLOSED &&
- 80304be: b1bb cbz r3, 80304f0 <tcp_pcb_purge+0x38>
- 80304c0: 2b0a cmp r3, #10
- 80304c2: d015 beq.n 80304f0 <tcp_pcb_purge+0x38>
- pcb->state != TIME_WAIT &&
- 80304c4: 2b01 cmp r3, #1
- 80304c6: d013 beq.n 80304f0 <tcp_pcb_purge+0x38>
- }
- }
- #endif /* TCP_LISTEN_BACKLOG */
- if (pcb->refused_data != NULL) {
- 80304c8: 6f40 ldr r0, [r0, #116] ; 0x74
- 80304ca: b118 cbz r0, 80304d4 <tcp_pcb_purge+0x1c>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->refused_data\n"));
- pbuf_free(pcb->refused_data);
- 80304cc: f7ff fc9e bl 802fe0c <pbuf_free>
- pcb->refused_data = NULL;
- 80304d0: 2300 movs r3, #0
- 80304d2: 6763 str r3, [r4, #116] ; 0x74
- pcb->ooseq = NULL;
- #endif /* TCP_QUEUE_OOSEQ */
- /* Stop the retransmission timer as it will expect data on unacked
- queue if it fires */
- pcb->rtime = -1;
- 80304d4: f64f 73ff movw r3, #65535 ; 0xffff
- 80304d8: 86a3 strh r3, [r4, #52] ; 0x34
- tcp_segs_free(pcb->unsent);
- 80304da: 6ee0 ldr r0, [r4, #108] ; 0x6c
- 80304dc: f7ff ffd3 bl 8030486 <tcp_segs_free>
- tcp_segs_free(pcb->unacked);
- 80304e0: 6f20 ldr r0, [r4, #112] ; 0x70
- 80304e2: f7ff ffd0 bl 8030486 <tcp_segs_free>
- pcb->unacked = pcb->unsent = NULL;
- 80304e6: 2300 movs r3, #0
- 80304e8: 66e3 str r3, [r4, #108] ; 0x6c
- 80304ea: 6723 str r3, [r4, #112] ; 0x70
- #if TCP_OVERSIZE
- pcb->unsent_oversize = 0;
- 80304ec: f8a4 306a strh.w r3, [r4, #106] ; 0x6a
- 80304f0: bd10 pop {r4, pc}
- 80304f2: 0000 movs r0, r0
- 080304f4 <tcp_slowtmr>:
- u8_t pcb_reset; /* flag if a RST should be sent when removing */
- err_t err;
- err = ERR_OK;
- ++tcp_ticks;
- 80304f4: 4b9c ldr r3, [pc, #624] ; (8030768 <tcp_slowtmr+0x274>)
- *
- * Automatically called from tcp_tmr().
- */
- void
- tcp_slowtmr(void)
- {
- 80304f6: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- u8_t pcb_reset; /* flag if a RST should be sent when removing */
- err_t err;
- err = ERR_OK;
- ++tcp_ticks;
- 80304fa: 681a ldr r2, [r3, #0]
- err_arg = pcb->callback_arg;
- pcb2 = pcb;
- pcb = pcb->next;
- memp_free(MEMP_TCP_PCB, pcb2);
- tcp_active_pcbs_changed = 0;
- 80304fc: f8df 8284 ldr.w r8, [pc, #644] ; 8030784 <tcp_slowtmr+0x290>
- u8_t pcb_reset; /* flag if a RST should be sent when removing */
- err_t err;
- err = ERR_OK;
- ++tcp_ticks;
- 8030500: 3201 adds r2, #1
- 8030502: 601a str r2, [r3, #0]
- ++tcp_timer_ctr;
- 8030504: 4b99 ldr r3, [pc, #612] ; (803076c <tcp_slowtmr+0x278>)
- 8030506: 781a ldrb r2, [r3, #0]
- 8030508: 3201 adds r2, #1
- 803050a: 701a strb r2, [r3, #0]
- 803050c: 46c1 mov r9, r8
- tcp_slowtmr_start:
- /* Steps through all of the active PCBs. */
- prev = NULL;
- pcb = tcp_active_pcbs;
- 803050e: 4b98 ldr r3, [pc, #608] ; (8030770 <tcp_slowtmr+0x27c>)
- while (pcb != NULL) {
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb\n"));
- LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED);
- LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN);
- LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT);
- if (pcb->last_timer == tcp_timer_ctr) {
- 8030510: f8df a258 ldr.w sl, [pc, #600] ; 803076c <tcp_slowtmr+0x278>
- ++tcp_timer_ctr;
- tcp_slowtmr_start:
- /* Steps through all of the active PCBs. */
- prev = NULL;
- pcb = tcp_active_pcbs;
- 8030514: 681c ldr r4, [r3, #0]
- ++tcp_ticks;
- ++tcp_timer_ctr;
- tcp_slowtmr_start:
- /* Steps through all of the active PCBs. */
- prev = NULL;
- 8030516: 2600 movs r6, #0
- pcb = tcp_active_pcbs;
- if (pcb == NULL) {
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n"));
- }
- while (pcb != NULL) {
- 8030518: e0ff b.n 803071a <tcp_slowtmr+0x226>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb\n"));
- LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED);
- LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN);
- LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT);
- if (pcb->last_timer == tcp_timer_ctr) {
- 803051a: f89a 3000 ldrb.w r3, [sl]
- 803051e: f894 2021 ldrb.w r2, [r4, #33] ; 0x21
- 8030522: 429a cmp r2, r3
- 8030524: d101 bne.n 803052a <tcp_slowtmr+0x36>
- /* skip this pcb, we have already processed it */
- pcb = pcb->next;
- 8030526: 68e7 ldr r7, [r4, #12]
- continue;
- 8030528: e0f6 b.n 8030718 <tcp_slowtmr+0x224>
- pcb->last_timer = tcp_timer_ctr;
- pcb_remove = 0;
- pcb_reset = 0;
- if (pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) {
- 803052a: 7e21 ldrb r1, [r4, #24]
- if (pcb->last_timer == tcp_timer_ctr) {
- /* skip this pcb, we have already processed it */
- pcb = pcb->next;
- continue;
- }
- pcb->last_timer = tcp_timer_ctr;
- 803052c: f884 3021 strb.w r3, [r4, #33] ; 0x21
- pcb_remove = 0;
- pcb_reset = 0;
- if (pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) {
- 8030530: 2902 cmp r1, #2
- 8030532: f894 2046 ldrb.w r2, [r4, #70] ; 0x46
- 8030536: d101 bne.n 803053c <tcp_slowtmr+0x48>
- 8030538: 2a06 cmp r2, #6
- 803053a: d051 beq.n 80305e0 <tcp_slowtmr+0xec>
- ++pcb_remove;
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max SYN retries reached\n"));
- }
- else if (pcb->nrtx == TCP_MAXRTX) {
- 803053c: 2a0c cmp r2, #12
- 803053e: d04f beq.n 80305e0 <tcp_slowtmr+0xec>
- ++pcb_remove;
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n"));
- } else {
- if (pcb->persist_backoff > 0) {
- 8030540: f894 3091 ldrb.w r3, [r4, #145] ; 0x91
- 8030544: b1c3 cbz r3, 8030578 <tcp_slowtmr+0x84>
- /* If snd_wnd is zero, use persist timer to send 1 byte probes
- * instead of using the standard retransmission mechanism. */
- pcb->persist_cnt++;
- if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) {
- 8030546: 498b ldr r1, [pc, #556] ; (8030774 <tcp_slowtmr+0x280>)
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n"));
- } else {
- if (pcb->persist_backoff > 0) {
- /* If snd_wnd is zero, use persist timer to send 1 byte probes
- * instead of using the standard retransmission mechanism. */
- pcb->persist_cnt++;
- 8030548: f894 2090 ldrb.w r2, [r4, #144] ; 0x90
- if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) {
- 803054c: 18c9 adds r1, r1, r3
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n"));
- } else {
- if (pcb->persist_backoff > 0) {
- /* If snd_wnd is zero, use persist timer to send 1 byte probes
- * instead of using the standard retransmission mechanism. */
- pcb->persist_cnt++;
- 803054e: 3201 adds r2, #1
- if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) {
- 8030550: f811 1c01 ldrb.w r1, [r1, #-1]
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n"));
- } else {
- if (pcb->persist_backoff > 0) {
- /* If snd_wnd is zero, use persist timer to send 1 byte probes
- * instead of using the standard retransmission mechanism. */
- pcb->persist_cnt++;
- 8030554: b2d2 uxtb r2, r2
- if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) {
- 8030556: 4291 cmp r1, r2
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n"));
- } else {
- if (pcb->persist_backoff > 0) {
- /* If snd_wnd is zero, use persist timer to send 1 byte probes
- * instead of using the standard retransmission mechanism. */
- pcb->persist_cnt++;
- 8030558: f884 2090 strb.w r2, [r4, #144] ; 0x90
- if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) {
- 803055c: d900 bls.n 8030560 <tcp_slowtmr+0x6c>
- 803055e: e03d b.n 80305dc <tcp_slowtmr+0xe8>
- pcb->persist_cnt = 0;
- 8030560: 2200 movs r2, #0
- if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) {
- 8030562: 2b06 cmp r3, #6
- if (pcb->persist_backoff > 0) {
- /* If snd_wnd is zero, use persist timer to send 1 byte probes
- * instead of using the standard retransmission mechanism. */
- pcb->persist_cnt++;
- if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) {
- pcb->persist_cnt = 0;
- 8030564: f884 2090 strb.w r2, [r4, #144] ; 0x90
- if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) {
- 8030568: d802 bhi.n 8030570 <tcp_slowtmr+0x7c>
- pcb->persist_backoff++;
- 803056a: 3301 adds r3, #1
- 803056c: f884 3091 strb.w r3, [r4, #145] ; 0x91
- }
- tcp_zero_window_probe(pcb);
- 8030570: 4620 mov r0, r4
- 8030572: f001 ffa4 bl 80324be <tcp_zero_window_probe>
- 8030576: e031 b.n 80305dc <tcp_slowtmr+0xe8>
- }
- } else {
- /* Increase the retransmission timer if it is running */
- if(pcb->rtime >= 0) {
- 8030578: 8ea3 ldrh r3, [r4, #52] ; 0x34
- 803057a: 0418 lsls r0, r3, #16
- 803057c: d401 bmi.n 8030582 <tcp_slowtmr+0x8e>
- ++pcb->rtime;
- 803057e: 3301 adds r3, #1
- 8030580: 86a3 strh r3, [r4, #52] ; 0x34
- }
- if (pcb->unacked != NULL && pcb->rtime >= pcb->rto) {
- 8030582: 6f23 ldr r3, [r4, #112] ; 0x70
- 8030584: b353 cbz r3, 80305dc <tcp_slowtmr+0xe8>
- 8030586: f9b4 0034 ldrsh.w r0, [r4, #52] ; 0x34
- 803058a: f9b4 3044 ldrsh.w r3, [r4, #68] ; 0x44
- 803058e: 4298 cmp r0, r3
- 8030590: db24 blt.n 80305dc <tcp_slowtmr+0xe8>
- " pcb->rto %"S16_F"\n",
- pcb->rtime, pcb->rto));
- /* Double retransmission time-out unless we are trying to
- * connect to somebody (i.e., we are in SYN_SENT). */
- if (pcb->state != SYN_SENT) {
- 8030592: 2902 cmp r1, #2
- 8030594: d00b beq.n 80305ae <tcp_slowtmr+0xba>
- pcb->rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[pcb->nrtx];
- 8030596: f9b4 1040 ldrsh.w r1, [r4, #64] ; 0x40
- 803059a: f9b4 3042 ldrsh.w r3, [r4, #66] ; 0x42
- 803059e: eb03 03e1 add.w r3, r3, r1, asr #3
- 80305a2: 4975 ldr r1, [pc, #468] ; (8030778 <tcp_slowtmr+0x284>)
- 80305a4: 5c8a ldrb r2, [r1, r2]
- 80305a6: fa03 f302 lsl.w r3, r3, r2
- 80305aa: f8a4 3044 strh.w r3, [r4, #68] ; 0x44
- }
- /* Reset the retransmission timer. */
- pcb->rtime = 0;
- 80305ae: 2300 movs r3, #0
- /* Reduce congestion window and ssthresh. */
- eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd);
- 80305b0: f8b4 104c ldrh.w r1, [r4, #76] ; 0x4c
- if (pcb->state != SYN_SENT) {
- pcb->rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[pcb->nrtx];
- }
- /* Reset the retransmission timer. */
- pcb->rtime = 0;
- 80305b4: 86a3 strh r3, [r4, #52] ; 0x34
- /* Reduce congestion window and ssthresh. */
- eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd);
- 80305b6: f8b4 3060 ldrh.w r3, [r4, #96] ; 0x60
- pcb->ssthresh = eff_wnd >> 1;
- 80305ba: 4299 cmp r1, r3
- 80305bc: bf28 it cs
- 80305be: 4619 movcs r1, r3
- if (pcb->ssthresh < (pcb->mss << 1)) {
- 80305c0: 8ee3 ldrh r3, [r4, #54] ; 0x36
- /* Reset the retransmission timer. */
- pcb->rtime = 0;
- /* Reduce congestion window and ssthresh. */
- eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd);
- pcb->ssthresh = eff_wnd >> 1;
- 80305c2: 0849 lsrs r1, r1, #1
- if (pcb->ssthresh < (pcb->mss << 1)) {
- 80305c4: 005a lsls r2, r3, #1
- 80305c6: 4291 cmp r1, r2
- /* Reset the retransmission timer. */
- pcb->rtime = 0;
- /* Reduce congestion window and ssthresh. */
- eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd);
- pcb->ssthresh = eff_wnd >> 1;
- 80305c8: f8a4 104e strh.w r1, [r4, #78] ; 0x4e
- if (pcb->ssthresh < (pcb->mss << 1)) {
- pcb->ssthresh = (pcb->mss << 1);
- }
- pcb->cwnd = pcb->mss;
- 80305cc: f8a4 304c strh.w r3, [r4, #76] ; 0x4c
- /* Reduce congestion window and ssthresh. */
- eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd);
- pcb->ssthresh = eff_wnd >> 1;
- if (pcb->ssthresh < (pcb->mss << 1)) {
- pcb->ssthresh = (pcb->mss << 1);
- 80305d0: bfb8 it lt
- 80305d2: f8a4 204e strhlt.w r2, [r4, #78] ; 0x4e
- " ssthresh %"U16_F"\n",
- pcb->cwnd, pcb->ssthresh));
-
- /* The following needs to be called AFTER cwnd is set to one
- mss - STJ */
- tcp_rexmit_rto(pcb);
- 80305d6: 4620 mov r0, r4
- 80305d8: f001 fee0 bl 803239c <tcp_rexmit_rto>
- pcb = pcb->next;
- continue;
- }
- pcb->last_timer = tcp_timer_ctr;
- pcb_remove = 0;
- 80305dc: 2500 movs r5, #0
- 80305de: e000 b.n 80305e2 <tcp_slowtmr+0xee>
- pcb_reset = 0;
- if (pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) {
- ++pcb_remove;
- 80305e0: 2501 movs r5, #1
- tcp_rexmit_rto(pcb);
- }
- }
- }
- /* Check if this PCB has stayed too long in FIN-WAIT-2 */
- if (pcb->state == FIN_WAIT_2) {
- 80305e2: 7e23 ldrb r3, [r4, #24]
- 80305e4: 2b06 cmp r3, #6
- 80305e6: d10c bne.n 8030602 <tcp_slowtmr+0x10e>
- /* If this PCB is in FIN_WAIT_2 because of SHUT_WR don't let it time out. */
- if (pcb->flags & TF_RXCLOSED) {
- 80305e8: 7fa2 ldrb r2, [r4, #30]
- 80305ea: f002 0210 and.w r2, r2, #16
- 80305ee: b2d2 uxtb r2, r2
- 80305f0: b13a cbz r2, 8030602 <tcp_slowtmr+0x10e>
- /* PCB was fully closed (either through close() or SHUT_RDWR):
- normal FIN-WAIT timeout handling. */
- if ((u32_t)(tcp_ticks - pcb->tmr) >
- 80305f2: 4a5d ldr r2, [pc, #372] ; (8030768 <tcp_slowtmr+0x274>)
- 80305f4: 6811 ldr r1, [r2, #0]
- 80305f6: 6a62 ldr r2, [r4, #36] ; 0x24
- 80305f8: 1a8a subs r2, r1, r2
- 80305fa: 2a28 cmp r2, #40 ; 0x28
- 80305fc: d901 bls.n 8030602 <tcp_slowtmr+0x10e>
- TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) {
- ++pcb_remove;
- 80305fe: 3501 adds r5, #1
- 8030600: b2ed uxtb r5, r5
- }
- }
- }
- /* Check if KEEPALIVE should be sent */
- if(ip_get_option(pcb, SOF_KEEPALIVE) &&
- 8030602: 7a27 ldrb r7, [r4, #8]
- 8030604: f007 0708 and.w r7, r7, #8
- 8030608: b2ff uxtb r7, r7
- 803060a: b34f cbz r7, 8030660 <tcp_slowtmr+0x16c>
- 803060c: 2b04 cmp r3, #4
- 803060e: d001 beq.n 8030614 <tcp_slowtmr+0x120>
- ((pcb->state == ESTABLISHED) ||
- 8030610: 2b07 cmp r3, #7
- 8030612: d124 bne.n 803065e <tcp_slowtmr+0x16a>
- (pcb->state == CLOSE_WAIT))) {
- if((u32_t)(tcp_ticks - pcb->tmr) >
- 8030614: 4b54 ldr r3, [pc, #336] ; (8030768 <tcp_slowtmr+0x274>)
- (pcb->keep_idle + TCP_KEEP_DUR(pcb)) / TCP_SLOW_INTERVAL)
- 8030616: f8d4 008c ldr.w r0, [r4, #140] ; 0x8c
- /* Check if KEEPALIVE should be sent */
- if(ip_get_option(pcb, SOF_KEEPALIVE) &&
- ((pcb->state == ESTABLISHED) ||
- (pcb->state == CLOSE_WAIT))) {
- if((u32_t)(tcp_ticks - pcb->tmr) >
- 803061a: 681a ldr r2, [r3, #0]
- 803061c: 6a63 ldr r3, [r4, #36] ; 0x24
- 803061e: 1ad2 subs r2, r2, r3
- (pcb->keep_idle + TCP_KEEP_DUR(pcb)) / TCP_SLOW_INTERVAL)
- 8030620: f500 2324 add.w r3, r0, #671744 ; 0xa4000
- 8030624: f603 43b8 addw r3, r3, #3256 ; 0xcb8
- 8030628: f44f 71fa mov.w r1, #500 ; 0x1f4
- 803062c: fbb3 f3f1 udiv r3, r3, r1
- /* Check if KEEPALIVE should be sent */
- if(ip_get_option(pcb, SOF_KEEPALIVE) &&
- ((pcb->state == ESTABLISHED) ||
- (pcb->state == CLOSE_WAIT))) {
- if((u32_t)(tcp_ticks - pcb->tmr) >
- 8030630: 429a cmp r2, r3
- 8030632: d903 bls.n 803063c <tcp_slowtmr+0x148>
- {
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: KEEPALIVE timeout. Aborting connection to %"U16_F".%"U16_F".%"U16_F".%"U16_F".\n",
- ip4_addr1_16(&pcb->remote_ip), ip4_addr2_16(&pcb->remote_ip),
- ip4_addr3_16(&pcb->remote_ip), ip4_addr4_16(&pcb->remote_ip)));
-
- ++pcb_remove;
- 8030634: 3501 adds r5, #1
- 8030636: b2ed uxtb r5, r5
- ++pcb_reset;
- 8030638: 2701 movs r7, #1
- 803063a: e011 b.n 8030660 <tcp_slowtmr+0x16c>
- }
- else if((u32_t)(tcp_ticks - pcb->tmr) >
- (pcb->keep_idle + pcb->keep_cnt_sent * TCP_KEEP_INTVL(pcb))
- 803063c: f894 3092 ldrb.w r3, [r4, #146] ; 0x92
- 8030640: 4f4e ldr r7, [pc, #312] ; (803077c <tcp_slowtmr+0x288>)
- 8030642: fb07 0003 mla r0, r7, r3, r0
- / TCP_SLOW_INTERVAL)
- 8030646: fbb0 f1f1 udiv r1, r0, r1
- ip4_addr3_16(&pcb->remote_ip), ip4_addr4_16(&pcb->remote_ip)));
-
- ++pcb_remove;
- ++pcb_reset;
- }
- else if((u32_t)(tcp_ticks - pcb->tmr) >
- 803064a: 428a cmp r2, r1
- 803064c: d907 bls.n 803065e <tcp_slowtmr+0x16a>
- (pcb->keep_idle + pcb->keep_cnt_sent * TCP_KEEP_INTVL(pcb))
- / TCP_SLOW_INTERVAL)
- {
- tcp_keepalive(pcb);
- 803064e: 4620 mov r0, r4
- 8030650: f001 ff16 bl 8032480 <tcp_keepalive>
- pcb->keep_cnt_sent++;
- 8030654: f894 3092 ldrb.w r3, [r4, #146] ; 0x92
- 8030658: 3301 adds r3, #1
- 803065a: f884 3092 strb.w r3, [r4, #146] ; 0x92
- continue;
- }
- pcb->last_timer = tcp_timer_ctr;
- pcb_remove = 0;
- pcb_reset = 0;
- 803065e: 2700 movs r7, #0
- LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: dropping OOSEQ queued data\n"));
- }
- #endif /* TCP_QUEUE_OOSEQ */
- /* Check if this PCB has stayed too long in SYN-RCVD */
- if (pcb->state == SYN_RCVD) {
- 8030660: 7e23 ldrb r3, [r4, #24]
- 8030662: 2b03 cmp r3, #3
- 8030664: d108 bne.n 8030678 <tcp_slowtmr+0x184>
- if ((u32_t)(tcp_ticks - pcb->tmr) >
- 8030666: 4b40 ldr r3, [pc, #256] ; (8030768 <tcp_slowtmr+0x274>)
- 8030668: 681a ldr r2, [r3, #0]
- 803066a: 6a63 ldr r3, [r4, #36] ; 0x24
- 803066c: 1ad3 subs r3, r2, r3
- 803066e: 2b28 cmp r3, #40 ; 0x28
- 8030670: d90a bls.n 8030688 <tcp_slowtmr+0x194>
- TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) {
- ++pcb_remove;
- 8030672: 3501 adds r5, #1
- 8030674: b2ed uxtb r5, r5
- 8030676: e007 b.n 8030688 <tcp_slowtmr+0x194>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in SYN-RCVD\n"));
- }
- }
- /* Check if this PCB has stayed too long in LAST-ACK */
- if (pcb->state == LAST_ACK) {
- 8030678: 2b09 cmp r3, #9
- 803067a: d105 bne.n 8030688 <tcp_slowtmr+0x194>
- if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) {
- 803067c: 4b3a ldr r3, [pc, #232] ; (8030768 <tcp_slowtmr+0x274>)
- 803067e: 681a ldr r2, [r3, #0]
- 8030680: 6a63 ldr r3, [r4, #36] ; 0x24
- 8030682: 1ad3 subs r3, r2, r3
- 8030684: 2bf0 cmp r3, #240 ; 0xf0
- 8030686: d800 bhi.n 803068a <tcp_slowtmr+0x196>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in LAST-ACK\n"));
- }
- }
- /* If the PCB should be removed, do it. */
- if (pcb_remove) {
- 8030688: b345 cbz r5, 80306dc <tcp_slowtmr+0x1e8>
- struct tcp_pcb *pcb2;
- tcp_err_fn err_fn;
- void *err_arg;
- tcp_pcb_purge(pcb);
- 803068a: 4620 mov r0, r4
- 803068c: f7ff ff14 bl 80304b8 <tcp_pcb_purge>
- 8030690: 68e3 ldr r3, [r4, #12]
- /* Remove PCB from tcp_active_pcbs list. */
- if (prev != NULL) {
- 8030692: b10e cbz r6, 8030698 <tcp_slowtmr+0x1a4>
- LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs);
- prev->next = pcb->next;
- 8030694: 60f3 str r3, [r6, #12]
- 8030696: e001 b.n 803069c <tcp_slowtmr+0x1a8>
- } else {
- /* This PCB was the first. */
- LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_active_pcbs", tcp_active_pcbs == pcb);
- tcp_active_pcbs = pcb->next;
- 8030698: 4a35 ldr r2, [pc, #212] ; (8030770 <tcp_slowtmr+0x27c>)
- 803069a: 6013 str r3, [r2, #0]
- }
- if (pcb_reset) {
- 803069c: b14f cbz r7, 80306b2 <tcp_slowtmr+0x1be>
- tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip,
- 803069e: 8b63 ldrh r3, [r4, #26]
- 80306a0: 9300 str r3, [sp, #0]
- 80306a2: 8ba3 ldrh r3, [r4, #28]
- 80306a4: 9301 str r3, [sp, #4]
- 80306a6: 6d20 ldr r0, [r4, #80] ; 0x50
- 80306a8: 6aa1 ldr r1, [r4, #40] ; 0x28
- 80306aa: 4622 mov r2, r4
- 80306ac: 1d23 adds r3, r4, #4
- 80306ae: f001 fe2f bl 8032310 <tcp_rst>
- pcb->local_port, pcb->remote_port);
- }
- err_fn = pcb->errf;
- 80306b2: f8d4 5088 ldr.w r5, [r4, #136] ; 0x88
- err_arg = pcb->callback_arg;
- 80306b6: f8d4 b010 ldr.w fp, [r4, #16]
- pcb2 = pcb;
- pcb = pcb->next;
- 80306ba: 68e7 ldr r7, [r4, #12]
- memp_free(MEMP_TCP_PCB, pcb2);
- 80306bc: 2002 movs r0, #2
- 80306be: 4621 mov r1, r4
- 80306c0: f7ff fa9a bl 802fbf8 <memp_free>
- tcp_active_pcbs_changed = 0;
- 80306c4: 2300 movs r3, #0
- 80306c6: f888 3000 strb.w r3, [r8]
- TCP_EVENT_ERR(err_fn, err_arg, ERR_ABRT);
- 80306ca: b11d cbz r5, 80306d4 <tcp_slowtmr+0x1e0>
- 80306cc: 4658 mov r0, fp
- 80306ce: f06f 0109 mvn.w r1, #9
- 80306d2: 47a8 blx r5
- if (tcp_active_pcbs_changed) {
- 80306d4: f899 3000 ldrb.w r3, [r9]
- 80306d8: b1f3 cbz r3, 8030718 <tcp_slowtmr+0x224>
- 80306da: e718 b.n 803050e <tcp_slowtmr+0x1a>
- /* get the 'next' element now and work with 'prev' below (in case of abort) */
- prev = pcb;
- pcb = pcb->next;
- /* We check if we should poll the connection. */
- ++prev->polltmr;
- 80306dc: 7fe3 ldrb r3, [r4, #31]
- if (prev->polltmr >= prev->pollinterval) {
- 80306de: f894 2020 ldrb.w r2, [r4, #32]
- goto tcp_slowtmr_start;
- }
- } else {
- /* get the 'next' element now and work with 'prev' below (in case of abort) */
- prev = pcb;
- pcb = pcb->next;
- 80306e2: 68e7 ldr r7, [r4, #12]
- /* We check if we should poll the connection. */
- ++prev->polltmr;
- 80306e4: 3301 adds r3, #1
- 80306e6: b2db uxtb r3, r3
- if (prev->polltmr >= prev->pollinterval) {
- 80306e8: 429a cmp r2, r3
- /* get the 'next' element now and work with 'prev' below (in case of abort) */
- prev = pcb;
- pcb = pcb->next;
- /* We check if we should poll the connection. */
- ++prev->polltmr;
- 80306ea: 77e3 strb r3, [r4, #31]
- if (prev->polltmr >= prev->pollinterval) {
- 80306ec: d813 bhi.n 8030716 <tcp_slowtmr+0x222>
- prev->polltmr = 0;
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: polling application\n"));
- tcp_active_pcbs_changed = 0;
- TCP_EVENT_POLL(prev, err);
- 80306ee: f8d4 3084 ldr.w r3, [r4, #132] ; 0x84
- pcb = pcb->next;
- /* We check if we should poll the connection. */
- ++prev->polltmr;
- if (prev->polltmr >= prev->pollinterval) {
- prev->polltmr = 0;
- 80306f2: 77e5 strb r5, [r4, #31]
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: polling application\n"));
- tcp_active_pcbs_changed = 0;
- 80306f4: f888 5000 strb.w r5, [r8]
- TCP_EVENT_POLL(prev, err);
- 80306f8: b11b cbz r3, 8030702 <tcp_slowtmr+0x20e>
- 80306fa: 6920 ldr r0, [r4, #16]
- 80306fc: 4621 mov r1, r4
- 80306fe: 4798 blx r3
- 8030700: e000 b.n 8030704 <tcp_slowtmr+0x210>
- 8030702: 4628 mov r0, r5
- if (tcp_active_pcbs_changed) {
- 8030704: f899 3000 ldrb.w r3, [r9]
- 8030708: 2b00 cmp r3, #0
- 803070a: f47f af00 bne.w 803050e <tcp_slowtmr+0x1a>
- goto tcp_slowtmr_start;
- }
- /* if err == ERR_ABRT, 'prev' is already deallocated */
- if (err == ERR_OK) {
- 803070e: b910 cbnz r0, 8030716 <tcp_slowtmr+0x222>
- tcp_output(prev);
- 8030710: 4620 mov r0, r4
- 8030712: f001 fcd9 bl 80320c8 <tcp_output>
- TCP_EVENT_POLL(prev, err);
- if (tcp_active_pcbs_changed) {
- goto tcp_slowtmr_start;
- }
- /* if err == ERR_ABRT, 'prev' is already deallocated */
- if (err == ERR_OK) {
- 8030716: 4626 mov r6, r4
- prev = pcb;
- pcb = pcb->next;
- /* We check if we should poll the connection. */
- ++prev->polltmr;
- if (prev->polltmr >= prev->pollinterval) {
- 8030718: 463c mov r4, r7
- prev = NULL;
- pcb = tcp_active_pcbs;
- if (pcb == NULL) {
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n"));
- }
- while (pcb != NULL) {
- 803071a: 2c00 cmp r4, #0
- 803071c: f47f aefd bne.w 803051a <tcp_slowtmr+0x26>
- }
-
- /* Steps through all of the TIME-WAIT PCBs. */
- prev = NULL;
- pcb = tcp_tw_pcbs;
- 8030720: 4b17 ldr r3, [pc, #92] ; (8030780 <tcp_slowtmr+0x28c>)
- while (pcb != NULL) {
- LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT);
- pcb_remove = 0;
- /* Check if this PCB has stayed long enough in TIME-WAIT */
- if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) {
- 8030722: 4e11 ldr r6, [pc, #68] ; (8030768 <tcp_slowtmr+0x274>)
- }
-
- /* Steps through all of the TIME-WAIT PCBs. */
- prev = NULL;
- pcb = tcp_tw_pcbs;
- 8030724: 681d ldr r5, [r3, #0]
- LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs);
- prev->next = pcb->next;
- } else {
- /* This PCB was the first. */
- LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb);
- tcp_tw_pcbs = pcb->next;
- 8030726: 461f mov r7, r3
-
- /* Steps through all of the TIME-WAIT PCBs. */
- prev = NULL;
- pcb = tcp_tw_pcbs;
- while (pcb != NULL) {
- 8030728: e00f b.n 803074a <tcp_slowtmr+0x256>
- LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT);
- pcb_remove = 0;
- /* Check if this PCB has stayed long enough in TIME-WAIT */
- if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) {
- 803072a: 6832 ldr r2, [r6, #0]
- 803072c: 6a6b ldr r3, [r5, #36] ; 0x24
- 803072e: 1ad3 subs r3, r2, r3
- 8030730: 2bf0 cmp r3, #240 ; 0xf0
- 8030732: d810 bhi.n 8030756 <tcp_slowtmr+0x262>
- 8030734: e00c b.n 8030750 <tcp_slowtmr+0x25c>
- struct tcp_pcb *pcb2;
- tcp_pcb_purge(pcb);
- /* Remove PCB from tcp_tw_pcbs list. */
- if (prev != NULL) {
- LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs);
- prev->next = pcb->next;
- 8030736: 60e2 str r2, [r4, #12]
- 8030738: e000 b.n 803073c <tcp_slowtmr+0x248>
- } else {
- /* This PCB was the first. */
- LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb);
- tcp_tw_pcbs = pcb->next;
- 803073a: 603a str r2, [r7, #0]
- }
- pcb2 = pcb;
- pcb = pcb->next;
- memp_free(MEMP_TCP_PCB, pcb2);
- 803073c: 4629 mov r1, r5
- 803073e: 2002 movs r0, #2
- /* This PCB was the first. */
- LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb);
- tcp_tw_pcbs = pcb->next;
- }
- pcb2 = pcb;
- pcb = pcb->next;
- 8030740: f8d5 800c ldr.w r8, [r5, #12]
- memp_free(MEMP_TCP_PCB, pcb2);
- 8030744: f7ff fa58 bl 802fbf8 <memp_free>
- /* This PCB was the first. */
- LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb);
- tcp_tw_pcbs = pcb->next;
- }
- pcb2 = pcb;
- pcb = pcb->next;
- 8030748: 4645 mov r5, r8
-
- /* Steps through all of the TIME-WAIT PCBs. */
- prev = NULL;
- pcb = tcp_tw_pcbs;
- while (pcb != NULL) {
- 803074a: 2d00 cmp r5, #0
- 803074c: d1ed bne.n 803072a <tcp_slowtmr+0x236>
- 803074e: e009 b.n 8030764 <tcp_slowtmr+0x270>
- pcb2 = pcb;
- pcb = pcb->next;
- memp_free(MEMP_TCP_PCB, pcb2);
- } else {
- prev = pcb;
- pcb = pcb->next;
- 8030750: 462c mov r4, r5
- 8030752: 68ed ldr r5, [r5, #12]
- 8030754: e7f9 b.n 803074a <tcp_slowtmr+0x256>
- /* If the PCB should be removed, do it. */
- if (pcb_remove) {
- struct tcp_pcb *pcb2;
- tcp_pcb_purge(pcb);
- 8030756: 4628 mov r0, r5
- 8030758: f7ff feae bl 80304b8 <tcp_pcb_purge>
- 803075c: 68ea ldr r2, [r5, #12]
- /* Remove PCB from tcp_tw_pcbs list. */
- if (prev != NULL) {
- 803075e: 2c00 cmp r4, #0
- 8030760: d1e9 bne.n 8030736 <tcp_slowtmr+0x242>
- 8030762: e7ea b.n 803073a <tcp_slowtmr+0x246>
- } else {
- prev = pcb;
- pcb = pcb->next;
- }
- }
- }
- 8030764: e8bd 8ffe ldmia.w sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8030768: 2000f6c0 .word 0x2000f6c0
- 803076c: 2000c3dd .word 0x2000c3dd
- 8030770: 2000f6bc .word 0x2000f6bc
- 8030774: 08044ffd .word 0x08044ffd
- 8030778: 08044ff0 .word 0x08044ff0
- 803077c: 000124f8 .word 0x000124f8
- 8030780: 2000f6d0 .word 0x2000f6d0
- 8030784: 2000f6b8 .word 0x2000f6b8
- 08030788 <tcp_pcb_remove>:
- * @param pcb tcp_pcb to purge. The pcb itself is NOT deallocated!
- */
- void
- tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb)
- {
- TCP_RMV(pcblist, pcb);
- 8030788: 6803 ldr r3, [r0, #0]
- 803078a: 428b cmp r3, r1
- * @param pcblist PCB list to purge.
- * @param pcb tcp_pcb to purge. The pcb itself is NOT deallocated!
- */
- void
- tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb)
- {
- 803078c: b510 push {r4, lr}
- 803078e: 460c mov r4, r1
- TCP_RMV(pcblist, pcb);
- 8030790: d102 bne.n 8030798 <tcp_pcb_remove+0x10>
- 8030792: 68cb ldr r3, [r1, #12]
- 8030794: 6003 str r3, [r0, #0]
- 8030796: e00d b.n 80307b4 <tcp_pcb_remove+0x2c>
- 8030798: 4a11 ldr r2, [pc, #68] ; (80307e0 <tcp_pcb_remove+0x58>)
- 803079a: 6013 str r3, [r2, #0]
- 803079c: e007 b.n 80307ae <tcp_pcb_remove+0x26>
- 803079e: 68d9 ldr r1, [r3, #12]
- 80307a0: 42a1 cmp r1, r4
- 80307a2: d103 bne.n 80307ac <tcp_pcb_remove+0x24>
- 80307a4: 6013 str r3, [r2, #0]
- 80307a6: 68e2 ldr r2, [r4, #12]
- 80307a8: 60da str r2, [r3, #12]
- 80307aa: e003 b.n 80307b4 <tcp_pcb_remove+0x2c>
- 80307ac: 460b mov r3, r1
- 80307ae: 2b00 cmp r3, #0
- 80307b0: d1f5 bne.n 803079e <tcp_pcb_remove+0x16>
- 80307b2: 6013 str r3, [r2, #0]
- 80307b4: 2300 movs r3, #0
- 80307b6: 60e3 str r3, [r4, #12]
- tcp_pcb_purge(pcb);
- 80307b8: 4620 mov r0, r4
- 80307ba: f7ff fe7d bl 80304b8 <tcp_pcb_purge>
-
- /* if there is an outstanding delayed ACKs, send it */
- if (pcb->state != TIME_WAIT &&
- 80307be: 7e23 ldrb r3, [r4, #24]
- 80307c0: 2b0a cmp r3, #10
- 80307c2: d00a beq.n 80307da <tcp_pcb_remove+0x52>
- 80307c4: 2b01 cmp r3, #1
- 80307c6: d008 beq.n 80307da <tcp_pcb_remove+0x52>
- pcb->state != LISTEN &&
- pcb->flags & TF_ACK_DELAY) {
- 80307c8: 7fa3 ldrb r3, [r4, #30]
- tcp_pcb_purge(pcb);
-
- /* if there is an outstanding delayed ACKs, send it */
- if (pcb->state != TIME_WAIT &&
- pcb->state != LISTEN &&
- 80307ca: 07da lsls r2, r3, #31
- 80307cc: d505 bpl.n 80307da <tcp_pcb_remove+0x52>
- pcb->flags & TF_ACK_DELAY) {
- pcb->flags |= TF_ACK_NOW;
- 80307ce: f043 0302 orr.w r3, r3, #2
- 80307d2: 77a3 strb r3, [r4, #30]
- tcp_output(pcb);
- 80307d4: 4620 mov r0, r4
- 80307d6: f001 fc77 bl 80320c8 <tcp_output>
- #if TCP_QUEUE_OOSEQ
- LWIP_ASSERT("ooseq segments leaking", pcb->ooseq == NULL);
- #endif /* TCP_QUEUE_OOSEQ */
- }
- pcb->state = CLOSED;
- 80307da: 2300 movs r3, #0
- 80307dc: 7623 strb r3, [r4, #24]
- 80307de: bd10 pop {r4, pc}
- 80307e0: 2000f6c8 .word 0x2000f6c8
- 080307e4 <tcp_abandon>:
- LWIP_ASSERT("don't call tcp_abort/tcp_abandon for listen-pcbs",
- pcb->state != LISTEN);
- /* Figure out on which TCP PCB list we are, and remove us. If we
- are in an active state, call the receive function associated with
- the PCB with a NULL argument, and send an RST to the remote end. */
- if (pcb->state == TIME_WAIT) {
- 80307e4: 7e03 ldrb r3, [r0, #24]
- 80307e6: 2b0a cmp r3, #10
- * @param pcb the tcp_pcb to abort
- * @param reset boolean to indicate whether a reset should be sent
- */
- void
- tcp_abandon(struct tcp_pcb *pcb, int reset)
- {
- 80307e8: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr}
- 80307ec: 4604 mov r4, r0
- 80307ee: 4689 mov r9, r1
- LWIP_ASSERT("don't call tcp_abort/tcp_abandon for listen-pcbs",
- pcb->state != LISTEN);
- /* Figure out on which TCP PCB list we are, and remove us. If we
- are in an active state, call the receive function associated with
- the PCB with a NULL argument, and send an RST to the remote end. */
- if (pcb->state == TIME_WAIT) {
- 80307f0: d10a bne.n 8030808 <tcp_abandon+0x24>
- tcp_pcb_remove(&tcp_tw_pcbs, pcb);
- 80307f2: 4621 mov r1, r4
- 80307f4: 481b ldr r0, [pc, #108] ; (8030864 <tcp_abandon+0x80>)
- 80307f6: f7ff ffc7 bl 8030788 <tcp_pcb_remove>
- memp_free(MEMP_TCP_PCB, pcb);
- 80307fa: 2002 movs r0, #2
- 80307fc: 4621 mov r1, r4
- tcp_rst(seqno, ackno, &pcb->local_ip, &pcb->remote_ip, pcb->local_port, pcb->remote_port);
- }
- memp_free(MEMP_TCP_PCB, pcb);
- TCP_EVENT_ERR(errf, errf_arg, ERR_ABRT);
- }
- }
- 80307fe: b003 add sp, #12
- 8030800: e8bd 43f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, lr}
- /* Figure out on which TCP PCB list we are, and remove us. If we
- are in an active state, call the receive function associated with
- the PCB with a NULL argument, and send an RST to the remote end. */
- if (pcb->state == TIME_WAIT) {
- tcp_pcb_remove(&tcp_tw_pcbs, pcb);
- memp_free(MEMP_TCP_PCB, pcb);
- 8030804: f7ff b9f8 b.w 802fbf8 <memp_free>
- } else {
- seqno = pcb->snd_nxt;
- 8030808: f8d0 8050 ldr.w r8, [r0, #80] ; 0x50
- ackno = pcb->rcv_nxt;
- 803080c: 6a87 ldr r7, [r0, #40] ; 0x28
- #if LWIP_CALLBACK_API
- errf = pcb->errf;
- 803080e: f8d0 5088 ldr.w r5, [r0, #136] ; 0x88
- #endif /* LWIP_CALLBACK_API */
- errf_arg = pcb->callback_arg;
- 8030812: 6906 ldr r6, [r0, #16]
- TCP_PCB_REMOVE_ACTIVE(pcb);
- 8030814: 4814 ldr r0, [pc, #80] ; (8030868 <tcp_abandon+0x84>)
- 8030816: 4621 mov r1, r4
- 8030818: f7ff ffb6 bl 8030788 <tcp_pcb_remove>
- 803081c: 4b13 ldr r3, [pc, #76] ; (803086c <tcp_abandon+0x88>)
- if (pcb->unacked != NULL) {
- 803081e: 6f20 ldr r0, [r4, #112] ; 0x70
- ackno = pcb->rcv_nxt;
- #if LWIP_CALLBACK_API
- errf = pcb->errf;
- #endif /* LWIP_CALLBACK_API */
- errf_arg = pcb->callback_arg;
- TCP_PCB_REMOVE_ACTIVE(pcb);
- 8030820: 2201 movs r2, #1
- 8030822: 701a strb r2, [r3, #0]
- if (pcb->unacked != NULL) {
- 8030824: b108 cbz r0, 803082a <tcp_abandon+0x46>
- tcp_segs_free(pcb->unacked);
- 8030826: f7ff fe2e bl 8030486 <tcp_segs_free>
- }
- if (pcb->unsent != NULL) {
- 803082a: 6ee0 ldr r0, [r4, #108] ; 0x6c
- 803082c: b108 cbz r0, 8030832 <tcp_abandon+0x4e>
- tcp_segs_free(pcb->unsent);
- 803082e: f7ff fe2a bl 8030486 <tcp_segs_free>
- #if TCP_QUEUE_OOSEQ
- if (pcb->ooseq != NULL) {
- tcp_segs_free(pcb->ooseq);
- }
- #endif /* TCP_QUEUE_OOSEQ */
- if (reset) {
- 8030832: f1b9 0f00 cmp.w r9, #0
- 8030836: d009 beq.n 803084c <tcp_abandon+0x68>
- LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_abandon: sending RST\n"));
- tcp_rst(seqno, ackno, &pcb->local_ip, &pcb->remote_ip, pcb->local_port, pcb->remote_port);
- 8030838: 8b63 ldrh r3, [r4, #26]
- 803083a: 9300 str r3, [sp, #0]
- 803083c: 8ba3 ldrh r3, [r4, #28]
- 803083e: 4640 mov r0, r8
- 8030840: 9301 str r3, [sp, #4]
- 8030842: 4639 mov r1, r7
- 8030844: 4622 mov r2, r4
- 8030846: 1d23 adds r3, r4, #4
- 8030848: f001 fd62 bl 8032310 <tcp_rst>
- }
- memp_free(MEMP_TCP_PCB, pcb);
- 803084c: 2002 movs r0, #2
- 803084e: 4621 mov r1, r4
- 8030850: f7ff f9d2 bl 802fbf8 <memp_free>
- TCP_EVENT_ERR(errf, errf_arg, ERR_ABRT);
- 8030854: b11d cbz r5, 803085e <tcp_abandon+0x7a>
- 8030856: 4630 mov r0, r6
- 8030858: f06f 0109 mvn.w r1, #9
- 803085c: 47a8 blx r5
- }
- }
- 803085e: b003 add sp, #12
- 8030860: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
- 8030864: 2000f6d0 .word 0x2000f6d0
- 8030868: 2000f6bc .word 0x2000f6bc
- 803086c: 2000f6b8 .word 0x2000f6b8
- 08030870 <tcp_abort>:
- * @param pcb the tcp pcb to abort
- */
- void
- tcp_abort(struct tcp_pcb *pcb)
- {
- tcp_abandon(pcb, 1);
- 8030870: 2101 movs r1, #1
- 8030872: f7ff bfb7 b.w 80307e4 <tcp_abandon>
- 8030876: 0000 movs r0, r0
- 08030878 <tcp_close_shutdown>:
- * @return ERR_OK if connection has been closed
- * another err_t if closing failed and pcb is not freed
- */
- static err_t
- tcp_close_shutdown(struct tcp_pcb *pcb, u8_t rst_on_unacked_data)
- {
- 8030878: b537 push {r0, r1, r2, r4, r5, lr}
- 803087a: 4604 mov r4, r0
- err_t err;
- if (rst_on_unacked_data && ((pcb->state == ESTABLISHED) || (pcb->state == CLOSE_WAIT))) {
- 803087c: 2900 cmp r1, #0
- 803087e: d043 beq.n 8030908 <tcp_close_shutdown+0x90>
- 8030880: 7e03 ldrb r3, [r0, #24]
- 8030882: 2b04 cmp r3, #4
- 8030884: d001 beq.n 803088a <tcp_close_shutdown+0x12>
- 8030886: 2b07 cmp r3, #7
- 8030888: d13e bne.n 8030908 <tcp_close_shutdown+0x90>
- if ((pcb->refused_data != NULL) || (pcb->rcv_wnd != TCP_WND)) {
- 803088a: 6f63 ldr r3, [r4, #116] ; 0x74
- 803088c: b923 cbnz r3, 8030898 <tcp_close_shutdown+0x20>
- 803088e: 8da2 ldrh r2, [r4, #44] ; 0x2c
- 8030890: f241 63d0 movw r3, #5840 ; 0x16d0
- 8030894: 429a cmp r2, r3
- 8030896: d037 beq.n 8030908 <tcp_close_shutdown+0x90>
- side about this. */
- LWIP_ASSERT("pcb->flags & TF_RXCLOSED", pcb->flags & TF_RXCLOSED);
- /* don't call tcp_abort here: we must not deallocate the pcb since
- that might not be expected when calling tcp_close */
- tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip,
- 8030898: 8b63 ldrh r3, [r4, #26]
- 803089a: 6d20 ldr r0, [r4, #80] ; 0x50
- 803089c: 9300 str r3, [sp, #0]
- 803089e: 8ba3 ldrh r3, [r4, #28]
- 80308a0: 6aa1 ldr r1, [r4, #40] ; 0x28
- 80308a2: 9301 str r3, [sp, #4]
- 80308a4: 4622 mov r2, r4
- 80308a6: 1d23 adds r3, r4, #4
- 80308a8: f001 fd32 bl 8032310 <tcp_rst>
- pcb->local_port, pcb->remote_port);
- tcp_pcb_purge(pcb);
- 80308ac: 4620 mov r0, r4
- 80308ae: f7ff fe03 bl 80304b8 <tcp_pcb_purge>
- TCP_RMV_ACTIVE(pcb);
- 80308b2: 4a42 ldr r2, [pc, #264] ; (80309bc <tcp_close_shutdown+0x144>)
- 80308b4: 6813 ldr r3, [r2, #0]
- 80308b6: 42a3 cmp r3, r4
- 80308b8: d101 bne.n 80308be <tcp_close_shutdown+0x46>
- 80308ba: 68e3 ldr r3, [r4, #12]
- 80308bc: e00c b.n 80308d8 <tcp_close_shutdown+0x60>
- 80308be: 4a40 ldr r2, [pc, #256] ; (80309c0 <tcp_close_shutdown+0x148>)
- 80308c0: 6013 str r3, [r2, #0]
- 80308c2: e007 b.n 80308d4 <tcp_close_shutdown+0x5c>
- 80308c4: 68d9 ldr r1, [r3, #12]
- 80308c6: 42a1 cmp r1, r4
- 80308c8: d103 bne.n 80308d2 <tcp_close_shutdown+0x5a>
- 80308ca: 6013 str r3, [r2, #0]
- 80308cc: 68e2 ldr r2, [r4, #12]
- 80308ce: 60da str r2, [r3, #12]
- 80308d0: e003 b.n 80308da <tcp_close_shutdown+0x62>
- 80308d2: 460b mov r3, r1
- 80308d4: 2b00 cmp r3, #0
- 80308d6: d1f5 bne.n 80308c4 <tcp_close_shutdown+0x4c>
- 80308d8: 6013 str r3, [r2, #0]
- 80308da: 4b3a ldr r3, [pc, #232] ; (80309c4 <tcp_close_shutdown+0x14c>)
- 80308dc: 2201 movs r2, #1
- 80308de: 701a strb r2, [r3, #0]
- if (pcb->state == ESTABLISHED) {
- 80308e0: 7e23 ldrb r3, [r4, #24]
- that might not be expected when calling tcp_close */
- tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip,
- pcb->local_port, pcb->remote_port);
- tcp_pcb_purge(pcb);
- TCP_RMV_ACTIVE(pcb);
- 80308e2: 2500 movs r5, #0
- if (pcb->state == ESTABLISHED) {
- 80308e4: 2b04 cmp r3, #4
- that might not be expected when calling tcp_close */
- tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip,
- pcb->local_port, pcb->remote_port);
- tcp_pcb_purge(pcb);
- TCP_RMV_ACTIVE(pcb);
- 80308e6: 60e5 str r5, [r4, #12]
- if (pcb->state == ESTABLISHED) {
- 80308e8: d108 bne.n 80308fc <tcp_close_shutdown+0x84>
- /* move to TIME_WAIT since we close actively */
- pcb->state = TIME_WAIT;
- 80308ea: 230a movs r3, #10
- 80308ec: 7623 strb r3, [r4, #24]
- TCP_REG(&tcp_tw_pcbs, pcb);
- 80308ee: 4b36 ldr r3, [pc, #216] ; (80309c8 <tcp_close_shutdown+0x150>)
- 80308f0: 681a ldr r2, [r3, #0]
- 80308f2: 601c str r4, [r3, #0]
- 80308f4: 60e2 str r2, [r4, #12]
- 80308f6: f001 fea5 bl 8032644 <tcp_timer_needed>
- 80308fa: e003 b.n 8030904 <tcp_close_shutdown+0x8c>
- } else {
- /* CLOSE_WAIT: deallocate the pcb since we already sent a RST for it */
- memp_free(MEMP_TCP_PCB, pcb);
- 80308fc: 2002 movs r0, #2
- 80308fe: 4621 mov r1, r4
- 8030900: f7ff f97a bl 802fbf8 <memp_free>
- }
- return ERR_OK;
- 8030904: 4628 mov r0, r5
- 8030906: e051 b.n 80309ac <tcp_close_shutdown+0x134>
- }
- }
- switch (pcb->state) {
- 8030908: 7e23 ldrb r3, [r4, #24]
- 803090a: 2b07 cmp r3, #7
- 803090c: d853 bhi.n 80309b6 <tcp_close_shutdown+0x13e>
- 803090e: e8df f003 tbb [pc, r3]
- 8030912: 1e04 .short 0x1e04
- 8030914: 523c3527 .word 0x523c3527
- 8030918: 4452 .short 0x4452
- * Calling tcp_close() with a pcb that has already been closed, (i.e. twice)
- * or for a pcb that has been used and then entered the CLOSED state
- * is erroneous, but this should never happen as the pcb has in those cases
- * been freed, and so any remaining handles are bogus. */
- err = ERR_OK;
- if (pcb->local_port != 0) {
- 803091a: 8b63 ldrh r3, [r4, #26]
- 803091c: b1ab cbz r3, 803094a <tcp_close_shutdown+0xd2>
- TCP_RMV(&tcp_bound_pcbs, pcb);
- 803091e: 4a2b ldr r2, [pc, #172] ; (80309cc <tcp_close_shutdown+0x154>)
- 8030920: 6813 ldr r3, [r2, #0]
- 8030922: 42a3 cmp r3, r4
- 8030924: d101 bne.n 803092a <tcp_close_shutdown+0xb2>
- 8030926: 68e3 ldr r3, [r4, #12]
- 8030928: e00c b.n 8030944 <tcp_close_shutdown+0xcc>
- 803092a: 4a25 ldr r2, [pc, #148] ; (80309c0 <tcp_close_shutdown+0x148>)
- 803092c: 6013 str r3, [r2, #0]
- 803092e: e007 b.n 8030940 <tcp_close_shutdown+0xc8>
- 8030930: 68d9 ldr r1, [r3, #12]
- 8030932: 42a1 cmp r1, r4
- 8030934: d103 bne.n 803093e <tcp_close_shutdown+0xc6>
- 8030936: 6013 str r3, [r2, #0]
- 8030938: 68e2 ldr r2, [r4, #12]
- 803093a: 60da str r2, [r3, #12]
- 803093c: e003 b.n 8030946 <tcp_close_shutdown+0xce>
- 803093e: 460b mov r3, r1
- 8030940: 2b00 cmp r3, #0
- 8030942: d1f5 bne.n 8030930 <tcp_close_shutdown+0xb8>
- 8030944: 6013 str r3, [r2, #0]
- 8030946: 2300 movs r3, #0
- 8030948: 60e3 str r3, [r4, #12]
- }
- memp_free(MEMP_TCP_PCB, pcb);
- 803094a: 2002 movs r0, #2
- 803094c: e004 b.n 8030958 <tcp_close_shutdown+0xe0>
- pcb = NULL;
- break;
- case LISTEN:
- err = ERR_OK;
- tcp_pcb_remove(&tcp_listen_pcbs.pcbs, pcb);
- 803094e: 4820 ldr r0, [pc, #128] ; (80309d0 <tcp_close_shutdown+0x158>)
- 8030950: 4621 mov r1, r4
- 8030952: f7ff ff19 bl 8030788 <tcp_pcb_remove>
- memp_free(MEMP_TCP_PCB_LISTEN, pcb);
- 8030956: 2003 movs r0, #3
- 8030958: 4621 mov r1, r4
- 803095a: f7ff f94d bl 802fbf8 <memp_free>
- pcb = NULL;
- break;
- 803095e: e02a b.n 80309b6 <tcp_close_shutdown+0x13e>
- case SYN_SENT:
- err = ERR_OK;
- TCP_PCB_REMOVE_ACTIVE(pcb);
- 8030960: 4621 mov r1, r4
- 8030962: 4816 ldr r0, [pc, #88] ; (80309bc <tcp_close_shutdown+0x144>)
- 8030964: f7ff ff10 bl 8030788 <tcp_pcb_remove>
- 8030968: 4b16 ldr r3, [pc, #88] ; (80309c4 <tcp_close_shutdown+0x14c>)
- 803096a: 2201 movs r2, #1
- memp_free(MEMP_TCP_PCB, pcb);
- 803096c: 2002 movs r0, #2
- 803096e: 4621 mov r1, r4
- memp_free(MEMP_TCP_PCB_LISTEN, pcb);
- pcb = NULL;
- break;
- case SYN_SENT:
- err = ERR_OK;
- TCP_PCB_REMOVE_ACTIVE(pcb);
- 8030970: 701a strb r2, [r3, #0]
- memp_free(MEMP_TCP_PCB, pcb);
- 8030972: f7ff f941 bl 802fbf8 <memp_free>
- pcb = NULL;
- snmp_inc_tcpattemptfails();
- 8030976: f004 f957 bl 8034c28 <snmp_inc_tcpattemptfails>
- break;
- 803097a: e01c b.n 80309b6 <tcp_close_shutdown+0x13e>
- case SYN_RCVD:
- err = tcp_send_fin(pcb);
- 803097c: 4620 mov r0, r4
- 803097e: f001 fb5e bl 803203e <tcp_send_fin>
- if (err == ERR_OK) {
- 8030982: b998 cbnz r0, 80309ac <tcp_close_shutdown+0x134>
- snmp_inc_tcpattemptfails();
- 8030984: f004 f950 bl 8034c28 <snmp_inc_tcpattemptfails>
- 8030988: e005 b.n 8030996 <tcp_close_shutdown+0x11e>
- pcb->state = FIN_WAIT_1;
- }
- break;
- case ESTABLISHED:
- err = tcp_send_fin(pcb);
- 803098a: 4620 mov r0, r4
- 803098c: f001 fb57 bl 803203e <tcp_send_fin>
- if (err == ERR_OK) {
- 8030990: b960 cbnz r0, 80309ac <tcp_close_shutdown+0x134>
- snmp_inc_tcpestabresets();
- 8030992: f004 f951 bl 8034c38 <snmp_inc_tcpestabresets>
- pcb->state = FIN_WAIT_1;
- 8030996: 2305 movs r3, #5
- 8030998: e006 b.n 80309a8 <tcp_close_shutdown+0x130>
- }
- break;
- case CLOSE_WAIT:
- err = tcp_send_fin(pcb);
- 803099a: 4620 mov r0, r4
- 803099c: f001 fb4f bl 803203e <tcp_send_fin>
- if (err == ERR_OK) {
- 80309a0: b920 cbnz r0, 80309ac <tcp_close_shutdown+0x134>
- snmp_inc_tcpestabresets();
- 80309a2: f004 f949 bl 8034c38 <snmp_inc_tcpestabresets>
- pcb->state = LAST_ACK;
- 80309a6: 2309 movs r3, #9
- 80309a8: 7623 strb r3, [r4, #24]
- 80309aa: e001 b.n 80309b0 <tcp_close_shutdown+0x138>
- 80309ac: b240 sxtb r0, r0
- 80309ae: e004 b.n 80309ba <tcp_close_shutdown+0x142>
- returns (unsent data is sent from tcp timer functions, also), we don't care
- for the return value of tcp_output for now. */
- /* @todo: When implementing SO_LINGER, this must be changed somehow:
- If SOF_LINGER is set, the data should be sent and acked before close returns.
- This can only be valid for sequential APIs, not for the raw API. */
- tcp_output(pcb);
- 80309b0: 4620 mov r0, r4
- 80309b2: f001 fb89 bl 80320c8 <tcp_output>
- 80309b6: 2000 movs r0, #0
- 80309b8: e7f8 b.n 80309ac <tcp_close_shutdown+0x134>
- }
- return err;
- }
- 80309ba: bd3e pop {r1, r2, r3, r4, r5, pc}
- 80309bc: 2000f6bc .word 0x2000f6bc
- 80309c0: 2000f6c8 .word 0x2000f6c8
- 80309c4: 2000f6b8 .word 0x2000f6b8
- 80309c8: 2000f6d0 .word 0x2000f6d0
- 80309cc: 2000f6cc .word 0x2000f6cc
- 80309d0: 2000f6c4 .word 0x2000f6c4
- 080309d4 <tcp_shutdown>:
- * another err_t on error.
- */
- err_t
- tcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx)
- {
- if (pcb->state == LISTEN) {
- 80309d4: 7e03 ldrb r3, [r0, #24]
- 80309d6: 2b01 cmp r3, #1
- * @return ERR_OK if shutdown succeeded (or the PCB has already been shut down)
- * another err_t on error.
- */
- err_t
- tcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx)
- {
- 80309d8: b570 push {r4, r5, r6, lr}
- 80309da: 4604 mov r4, r0
- 80309dc: 460e mov r6, r1
- 80309de: 4615 mov r5, r2
- if (pcb->state == LISTEN) {
- 80309e0: d019 beq.n 8030a16 <tcp_shutdown+0x42>
- return ERR_CONN;
- }
- if (shut_rx) {
- 80309e2: b161 cbz r1, 80309fe <tcp_shutdown+0x2a>
- /* shut down the receive side: set a flag not to receive any more data... */
- pcb->flags |= TF_RXCLOSED;
- 80309e4: 7f83 ldrb r3, [r0, #30]
- 80309e6: f043 0310 orr.w r3, r3, #16
- 80309ea: 7783 strb r3, [r0, #30]
- if (shut_tx) {
- 80309ec: b10a cbz r2, 80309f2 <tcp_shutdown+0x1e>
- /* shutting down the tx AND rx side is the same as closing for the raw API */
- return tcp_close_shutdown(pcb, 1);
- 80309ee: 2101 movs r1, #1
- 80309f0: e00d b.n 8030a0e <tcp_shutdown+0x3a>
- }
- /* ... and free buffered data */
- if (pcb->refused_data != NULL) {
- 80309f2: 6f40 ldr r0, [r0, #116] ; 0x74
- 80309f4: b190 cbz r0, 8030a1c <tcp_shutdown+0x48>
- pbuf_free(pcb->refused_data);
- 80309f6: f7ff fa09 bl 802fe0c <pbuf_free>
- pcb->refused_data = NULL;
- 80309fa: 6765 str r5, [r4, #116] ; 0x74
- 80309fc: e00e b.n 8030a1c <tcp_shutdown+0x48>
- }
- }
- if (shut_tx) {
- 80309fe: b15a cbz r2, 8030a18 <tcp_shutdown+0x44>
- /* This can't happen twice since if it succeeds, the pcb's state is changed.
- Only close in these states as the others directly deallocate the PCB */
- switch (pcb->state) {
- 8030a00: 2b07 cmp r3, #7
- 8030a02: d808 bhi.n 8030a16 <tcp_shutdown+0x42>
- 8030a04: b25b sxtb r3, r3
- 8030a06: f04f 52c8 mov.w r2, #419430400 ; 0x19000000
- 8030a0a: 409a lsls r2, r3
- 8030a0c: d503 bpl.n 8030a16 <tcp_shutdown+0x42>
- into CLOSED state, where the PCB is deallocated. */
- return ERR_CONN;
- }
- }
- return ERR_OK;
- }
- 8030a0e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
- Only close in these states as the others directly deallocate the PCB */
- switch (pcb->state) {
- case SYN_RCVD:
- case ESTABLISHED:
- case CLOSE_WAIT:
- return tcp_close_shutdown(pcb, shut_rx);
- 8030a12: f7ff bf31 b.w 8030878 <tcp_close_shutdown>
- default:
- /* Not (yet?) connected, cannot shutdown the TX side as that would bring us
- into CLOSED state, where the PCB is deallocated. */
- return ERR_CONN;
- 8030a16: 25f3 movs r5, #243 ; 0xf3
- 8030a18: b268 sxtb r0, r5
- 8030a1a: bd70 pop {r4, r5, r6, pc}
- }
- }
- return ERR_OK;
- 8030a1c: 2500 movs r5, #0
- 8030a1e: e7fb b.n 8030a18 <tcp_shutdown+0x44>
- 08030a20 <tcp_close>:
- #if TCP_DEBUG
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_close: closing in "));
- tcp_debug_print_state(pcb->state);
- #endif /* TCP_DEBUG */
- if (pcb->state != LISTEN) {
- 8030a20: 7e03 ldrb r3, [r0, #24]
- 8030a22: 2b01 cmp r3, #1
- 8030a24: d003 beq.n 8030a2e <tcp_close+0xe>
- /* Set a flag not to receive any more data... */
- pcb->flags |= TF_RXCLOSED;
- 8030a26: 7f83 ldrb r3, [r0, #30]
- 8030a28: f043 0310 orr.w r3, r3, #16
- 8030a2c: 7783 strb r3, [r0, #30]
- }
- /* ... and close */
- return tcp_close_shutdown(pcb, 1);
- 8030a2e: 2101 movs r1, #1
- 8030a30: f7ff bf22 b.w 8030878 <tcp_close_shutdown>
- 08030a34 <tcp_recv_null>:
- * Default receive callback that is called if the user didn't register
- * a recv callback for the pcb.
- */
- err_t
- tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
- {
- 8030a34: b510 push {r4, lr}
- 8030a36: 4608 mov r0, r1
- LWIP_UNUSED_ARG(arg);
- if (p != NULL) {
- 8030a38: 4614 mov r4, r2
- 8030a3a: b132 cbz r2, 8030a4a <tcp_recv_null+0x16>
- tcp_recved(pcb, p->tot_len);
- 8030a3c: 8911 ldrh r1, [r2, #8]
- 8030a3e: f7ff fcf9 bl 8030434 <tcp_recved>
- pbuf_free(p);
- 8030a42: 4620 mov r0, r4
- 8030a44: f7ff f9e2 bl 802fe0c <pbuf_free>
- 8030a48: e004 b.n 8030a54 <tcp_recv_null+0x20>
- } else if (err == ERR_OK) {
- 8030a4a: b91b cbnz r3, 8030a54 <tcp_recv_null+0x20>
- return tcp_close(pcb);
- }
- return ERR_OK;
- }
- 8030a4c: e8bd 4010 ldmia.w sp!, {r4, lr}
- LWIP_UNUSED_ARG(arg);
- if (p != NULL) {
- tcp_recved(pcb, p->tot_len);
- pbuf_free(p);
- } else if (err == ERR_OK) {
- return tcp_close(pcb);
- 8030a50: f7ff bfe6 b.w 8030a20 <tcp_close>
- }
- return ERR_OK;
- }
- 8030a54: 2000 movs r0, #0
- 8030a56: bd10 pop {r4, pc}
- 08030a58 <tcp_process_refused_data>:
- }
- /** Pass pcb->refused_data to the recv callback */
- err_t
- tcp_process_refused_data(struct tcp_pcb *pcb)
- {
- 8030a58: b5f8 push {r3, r4, r5, r6, r7, lr}
- err_t err;
- u8_t refused_flags = pcb->refused_data->flags;
- 8030a5a: 6f45 ldr r5, [r0, #116] ; 0x74
- closes the pcb */
- struct pbuf *refused_data = pcb->refused_data;
- pcb->refused_data = NULL;
- /* Notify again application with data previously received. */
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: notify kept packet\n"));
- TCP_EVENT_RECV(pcb, refused_data, ERR_OK, err);
- 8030a5c: 6fc6 ldr r6, [r0, #124] ; 0x7c
- /** Pass pcb->refused_data to the recv callback */
- err_t
- tcp_process_refused_data(struct tcp_pcb *pcb)
- {
- err_t err;
- u8_t refused_flags = pcb->refused_data->flags;
- 8030a5e: 7b6f ldrb r7, [r5, #13]
- /* set pcb->refused_data to NULL in case the callback frees it and then
- closes the pcb */
- struct pbuf *refused_data = pcb->refused_data;
- pcb->refused_data = NULL;
- 8030a60: 2300 movs r3, #0
- }
- /** Pass pcb->refused_data to the recv callback */
- err_t
- tcp_process_refused_data(struct tcp_pcb *pcb)
- {
- 8030a62: 4604 mov r4, r0
- err_t err;
- u8_t refused_flags = pcb->refused_data->flags;
- /* set pcb->refused_data to NULL in case the callback frees it and then
- closes the pcb */
- struct pbuf *refused_data = pcb->refused_data;
- pcb->refused_data = NULL;
- 8030a64: 6743 str r3, [r0, #116] ; 0x74
- /* Notify again application with data previously received. */
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: notify kept packet\n"));
- TCP_EVENT_RECV(pcb, refused_data, ERR_OK, err);
- 8030a66: b126 cbz r6, 8030a72 <tcp_process_refused_data+0x1a>
- 8030a68: 4621 mov r1, r4
- 8030a6a: 462a mov r2, r5
- 8030a6c: 6900 ldr r0, [r0, #16]
- 8030a6e: 47b0 blx r6
- 8030a70: e005 b.n 8030a7e <tcp_process_refused_data+0x26>
- 8030a72: 4630 mov r0, r6
- 8030a74: 4621 mov r1, r4
- 8030a76: 462a mov r2, r5
- 8030a78: 4633 mov r3, r6
- 8030a7a: f7ff ffdb bl 8030a34 <tcp_recv_null>
- if (err == ERR_OK) {
- 8030a7e: b9b0 cbnz r0, 8030aae <tcp_process_refused_data+0x56>
- /* did refused_data include a FIN? */
- if (refused_flags & PBUF_FLAG_TCP_FIN) {
- 8030a80: f007 0720 and.w r7, r7, #32
- 8030a84: b2ff uxtb r7, r7
- 8030a86: b1bf cbz r7, 8030ab8 <tcp_process_refused_data+0x60>
- /* correct rcv_wnd as the application won't call tcp_recved()
- for the FIN's seqno */
- if (pcb->rcv_wnd != TCP_WND) {
- 8030a88: 8da3 ldrh r3, [r4, #44] ; 0x2c
- 8030a8a: f241 62d0 movw r2, #5840 ; 0x16d0
- 8030a8e: 4293 cmp r3, r2
- 8030a90: d001 beq.n 8030a96 <tcp_process_refused_data+0x3e>
- pcb->rcv_wnd++;
- 8030a92: 3301 adds r3, #1
- 8030a94: 85a3 strh r3, [r4, #44] ; 0x2c
- }
- TCP_EVENT_CLOSED(pcb, err);
- 8030a96: 6fe5 ldr r5, [r4, #124] ; 0x7c
- 8030a98: b905 cbnz r5, 8030a9c <tcp_process_refused_data+0x44>
- 8030a9a: e00c b.n 8030ab6 <tcp_process_refused_data+0x5e>
- 8030a9c: 2200 movs r2, #0
- 8030a9e: 6920 ldr r0, [r4, #16]
- 8030aa0: 4621 mov r1, r4
- 8030aa2: 4613 mov r3, r2
- 8030aa4: 47a8 blx r5
- if (err == ERR_ABRT) {
- 8030aa6: 300a adds r0, #10
- 8030aa8: d105 bne.n 8030ab6 <tcp_process_refused_data+0x5e>
- return ERR_ABRT;
- 8030aaa: 20f6 movs r0, #246 ; 0xf6
- 8030aac: e004 b.n 8030ab8 <tcp_process_refused_data+0x60>
- }
- }
- } else if (err == ERR_ABRT) {
- 8030aae: b240 sxtb r0, r0
- 8030ab0: 300a adds r0, #10
- 8030ab2: d0fa beq.n 8030aaa <tcp_process_refused_data+0x52>
- segment contains data). */
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: drop incoming packets, because pcb is \"full\"\n"));
- return ERR_ABRT;
- } else {
- /* data is still refused, pbuf is still valid (go on for ACK-only packets) */
- pcb->refused_data = refused_data;
- 8030ab4: 6765 str r5, [r4, #116] ; 0x74
- }
- return ERR_OK;
- 8030ab6: 2000 movs r0, #0
- }
- 8030ab8: b240 sxtb r0, r0
- 8030aba: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 08030abc <tcp_fasttmr>:
- *
- * Automatically called from tcp_tmr().
- */
- void
- tcp_fasttmr(void)
- {
- 8030abc: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- struct tcp_pcb *pcb;
- ++tcp_timer_ctr;
- 8030ac0: 4b18 ldr r3, [pc, #96] ; (8030b24 <tcp_fasttmr+0x68>)
- tcp_fasttmr_start:
- pcb = tcp_active_pcbs;
- 8030ac2: 4f19 ldr r7, [pc, #100] ; (8030b28 <tcp_fasttmr+0x6c>)
- void
- tcp_fasttmr(void)
- {
- struct tcp_pcb *pcb;
- ++tcp_timer_ctr;
- 8030ac4: 781a ldrb r2, [r3, #0]
- 8030ac6: 3201 adds r2, #1
- 8030ac8: 701a strb r2, [r3, #0]
- tcp_fasttmr_start:
- pcb = tcp_active_pcbs;
- while(pcb != NULL) {
- if (pcb->last_timer != tcp_timer_ctr) {
- 8030aca: 4698 mov r8, r3
- struct tcp_pcb *pcb;
- ++tcp_timer_ctr;
- tcp_fasttmr_start:
- pcb = tcp_active_pcbs;
- 8030acc: 683c ldr r4, [r7, #0]
- next = pcb->next;
- /* If there is data which was previously "refused" by upper layer */
- if (pcb->refused_data != NULL) {
- tcp_active_pcbs_changed = 0;
- 8030ace: 4d17 ldr r5, [pc, #92] ; (8030b2c <tcp_fasttmr+0x70>)
- 8030ad0: 2600 movs r6, #0
- ++tcp_timer_ctr;
- tcp_fasttmr_start:
- pcb = tcp_active_pcbs;
- while(pcb != NULL) {
- 8030ad2: e022 b.n 8030b1a <tcp_fasttmr+0x5e>
- if (pcb->last_timer != tcp_timer_ctr) {
- 8030ad4: f898 2000 ldrb.w r2, [r8]
- 8030ad8: f894 3021 ldrb.w r3, [r4, #33] ; 0x21
- 8030adc: 4293 cmp r3, r2
- 8030ade: d020 beq.n 8030b22 <tcp_fasttmr+0x66>
- struct tcp_pcb *next;
- pcb->last_timer = tcp_timer_ctr;
- 8030ae0: f884 2021 strb.w r2, [r4, #33] ; 0x21
- /* send delayed ACKs */
- if (pcb->flags & TF_ACK_DELAY) {
- 8030ae4: 7fa2 ldrb r2, [r4, #30]
- 8030ae6: 07d1 lsls r1, r2, #31
- 8030ae8: d509 bpl.n 8030afe <tcp_fasttmr+0x42>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: delayed ACK\n"));
- tcp_ack_now(pcb);
- 8030aea: f042 0202 orr.w r2, r2, #2
- 8030aee: 77a2 strb r2, [r4, #30]
- tcp_output(pcb);
- 8030af0: 4620 mov r0, r4
- 8030af2: f001 fae9 bl 80320c8 <tcp_output>
- pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);
- 8030af6: 7fa3 ldrb r3, [r4, #30]
- 8030af8: f023 0303 bic.w r3, r3, #3
- 8030afc: 77a3 strb r3, [r4, #30]
- }
- next = pcb->next;
- /* If there is data which was previously "refused" by upper layer */
- if (pcb->refused_data != NULL) {
- 8030afe: 6f63 ldr r3, [r4, #116] ; 0x74
- tcp_ack_now(pcb);
- tcp_output(pcb);
- pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);
- }
- next = pcb->next;
- 8030b00: f8d4 900c ldr.w r9, [r4, #12]
- /* If there is data which was previously "refused" by upper layer */
- if (pcb->refused_data != NULL) {
- 8030b04: b90b cbnz r3, 8030b0a <tcp_fasttmr+0x4e>
- 8030b06: 464c mov r4, r9
- 8030b08: e007 b.n 8030b1a <tcp_fasttmr+0x5e>
- tcp_active_pcbs_changed = 0;
- tcp_process_refused_data(pcb);
- 8030b0a: 4620 mov r0, r4
- next = pcb->next;
- /* If there is data which was previously "refused" by upper layer */
- if (pcb->refused_data != NULL) {
- tcp_active_pcbs_changed = 0;
- 8030b0c: 702e strb r6, [r5, #0]
- tcp_process_refused_data(pcb);
- 8030b0e: f7ff ffa3 bl 8030a58 <tcp_process_refused_data>
- if (tcp_active_pcbs_changed) {
- 8030b12: 782b ldrb r3, [r5, #0]
- 8030b14: 2b00 cmp r3, #0
- 8030b16: d1d9 bne.n 8030acc <tcp_fasttmr+0x10>
- 8030b18: e7f5 b.n 8030b06 <tcp_fasttmr+0x4a>
- ++tcp_timer_ctr;
- tcp_fasttmr_start:
- pcb = tcp_active_pcbs;
- while(pcb != NULL) {
- 8030b1a: 2c00 cmp r4, #0
- 8030b1c: d1da bne.n 8030ad4 <tcp_fasttmr+0x18>
- 8030b1e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
- 8030b22: e7fe b.n 8030b22 <tcp_fasttmr+0x66>
- 8030b24: 2000c3dd .word 0x2000c3dd
- 8030b28: 2000f6bc .word 0x2000f6bc
- 8030b2c: 2000f6b8 .word 0x2000f6b8
- 08030b30 <tcp_tmr>:
- /**
- * Called periodically to dispatch TCP timers.
- */
- void
- tcp_tmr(void)
- {
- 8030b30: b508 push {r3, lr}
- /* Call tcp_fasttmr() every 250 ms */
- tcp_fasttmr();
- 8030b32: f7ff ffc3 bl 8030abc <tcp_fasttmr>
- if (++tcp_timer & 1) {
- 8030b36: 4a06 ldr r2, [pc, #24] ; (8030b50 <tcp_tmr+0x20>)
- 8030b38: 7813 ldrb r3, [r2, #0]
- 8030b3a: 3301 adds r3, #1
- 8030b3c: b2db uxtb r3, r3
- 8030b3e: 07d8 lsls r0, r3, #31
- 8030b40: 7013 strb r3, [r2, #0]
- 8030b42: d503 bpl.n 8030b4c <tcp_tmr+0x1c>
- /* Call tcp_tmr() every 500 ms, i.e., every other timer
- tcp_tmr() is called. */
- tcp_slowtmr();
- }
- }
- 8030b44: e8bd 4008 ldmia.w sp!, {r3, lr}
- tcp_fasttmr();
- if (++tcp_timer & 1) {
- /* Call tcp_tmr() every 500 ms, i.e., every other timer
- tcp_tmr() is called. */
- tcp_slowtmr();
- 8030b48: f7ff bcd4 b.w 80304f4 <tcp_slowtmr>
- 8030b4c: bd08 pop {r3, pc}
- 8030b4e: bf00 nop
- 8030b50: 2000c3dc .word 0x2000c3dc
- 08030b54 <tcp_next_iss>:
- u32_t
- tcp_next_iss(void)
- {
- static u32_t iss = 6510;
-
- iss += tcp_ticks; /* XXX */
- 8030b54: 4b03 ldr r3, [pc, #12] ; (8030b64 <tcp_next_iss+0x10>)
- 8030b56: 4a04 ldr r2, [pc, #16] ; (8030b68 <tcp_next_iss+0x14>)
- 8030b58: 6810 ldr r0, [r2, #0]
- 8030b5a: 681a ldr r2, [r3, #0]
- 8030b5c: 1880 adds r0, r0, r2
- 8030b5e: 6018 str r0, [r3, #0]
- return iss;
- }
- 8030b60: 4770 bx lr
- 8030b62: bf00 nop
- 8030b64: 20000718 .word 0x20000718
- 8030b68: 2000f6c0 .word 0x2000f6c0
- 08030b6c <tcp_alloc>:
- * @param prio priority for the new pcb
- * @return a new tcp_pcb that initially is in state CLOSED
- */
- struct tcp_pcb *
- tcp_alloc(u8_t prio)
- {
- 8030b6c: b5f8 push {r3, r4, r5, r6, r7, lr}
- 8030b6e: 4605 mov r5, r0
- struct tcp_pcb *pcb;
- u32_t iss;
-
- pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB);
- 8030b70: 2002 movs r0, #2
- 8030b72: f7ff f82b bl 802fbcc <memp_malloc>
- if (pcb == NULL) {
- 8030b76: 4604 mov r4, r0
- 8030b78: 2800 cmp r0, #0
- 8030b7a: d136 bne.n 8030bea <tcp_alloc+0x7e>
- u32_t inactivity;
- inactivity = 0;
- inactive = NULL;
- /* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */
- for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
- 8030b7c: 4b39 ldr r3, [pc, #228] ; (8030c64 <tcp_alloc+0xf8>)
- if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) {
- 8030b7e: 4a3a ldr r2, [pc, #232] ; (8030c68 <tcp_alloc+0xfc>)
- u32_t inactivity;
- inactivity = 0;
- inactive = NULL;
- /* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */
- for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
- 8030b80: 681b ldr r3, [r3, #0]
- if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) {
- 8030b82: 6811 ldr r1, [r2, #0]
- 8030b84: e007 b.n 8030b96 <tcp_alloc+0x2a>
- 8030b86: 6a5a ldr r2, [r3, #36] ; 0x24
- 8030b88: 1a8a subs r2, r1, r2
- 8030b8a: 42a2 cmp r2, r4
- 8030b8c: bf34 ite cc
- 8030b8e: 4622 movcc r2, r4
- 8030b90: 4618 movcs r0, r3
- u32_t inactivity;
- inactivity = 0;
- inactive = NULL;
- /* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */
- for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
- 8030b92: 68db ldr r3, [r3, #12]
- 8030b94: 4614 mov r4, r2
- 8030b96: 2b00 cmp r3, #0
- 8030b98: d1f5 bne.n 8030b86 <tcp_alloc+0x1a>
- if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) {
- inactivity = tcp_ticks - pcb->tmr;
- inactive = pcb;
- }
- }
- if (inactive != NULL) {
- 8030b9a: b108 cbz r0, 8030ba0 <tcp_alloc+0x34>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT PCB %p (%"S32_F")\n",
- (void *)inactive, inactivity));
- tcp_abort(inactive);
- 8030b9c: f7ff fe68 bl 8030870 <tcp_abort>
- if (pcb == NULL) {
- /* Try killing oldest connection in TIME-WAIT. */
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest TIME-WAIT connection\n"));
- tcp_kill_timewait();
- /* Try to allocate a tcp_pcb again. */
- pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB);
- 8030ba0: 2002 movs r0, #2
- 8030ba2: f7ff f813 bl 802fbcc <memp_malloc>
- if (pcb == NULL) {
- 8030ba6: 4604 mov r4, r0
- 8030ba8: b9f8 cbnz r0, 8030bea <tcp_alloc+0x7e>
- inactivity = 0;
- inactive = NULL;
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- if (pcb->prio <= prio &&
- pcb->prio <= mprio &&
- (u32_t)(tcp_ticks - pcb->tmr) >= inactivity) {
- 8030baa: 4a2f ldr r2, [pc, #188] ; (8030c68 <tcp_alloc+0xfc>)
- mprio = TCP_PRIO_MAX;
-
- /* We kill the oldest active connection that has lower priority than prio. */
- inactivity = 0;
- inactive = NULL;
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- 8030bac: 4b2f ldr r3, [pc, #188] ; (8030c6c <tcp_alloc+0x100>)
- if (pcb->prio <= prio &&
- pcb->prio <= mprio &&
- (u32_t)(tcp_ticks - pcb->tmr) >= inactivity) {
- 8030bae: 6817 ldr r7, [r2, #0]
- mprio = TCP_PRIO_MAX;
-
- /* We kill the oldest active connection that has lower priority than prio. */
- inactivity = 0;
- inactive = NULL;
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- 8030bb0: 681b ldr r3, [r3, #0]
- struct tcp_pcb *pcb, *inactive;
- u32_t inactivity;
- u8_t mprio;
- mprio = TCP_PRIO_MAX;
- 8030bb2: 207f movs r0, #127 ; 0x7f
-
- /* We kill the oldest active connection that has lower priority than prio. */
- inactivity = 0;
- inactive = NULL;
- 8030bb4: 4622 mov r2, r4
- 8030bb6: e00c b.n 8030bd2 <tcp_alloc+0x66>
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- if (pcb->prio <= prio &&
- 8030bb8: 7e59 ldrb r1, [r3, #25]
- 8030bba: 42a9 cmp r1, r5
- 8030bbc: d808 bhi.n 8030bd0 <tcp_alloc+0x64>
- 8030bbe: 4281 cmp r1, r0
- 8030bc0: d806 bhi.n 8030bd0 <tcp_alloc+0x64>
- pcb->prio <= mprio &&
- (u32_t)(tcp_ticks - pcb->tmr) >= inactivity) {
- 8030bc2: 6a5e ldr r6, [r3, #36] ; 0x24
- 8030bc4: 1bbe subs r6, r7, r6
- /* We kill the oldest active connection that has lower priority than prio. */
- inactivity = 0;
- inactive = NULL;
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- if (pcb->prio <= prio &&
- pcb->prio <= mprio &&
- 8030bc6: 42a6 cmp r6, r4
- 8030bc8: d302 bcc.n 8030bd0 <tcp_alloc+0x64>
- 8030bca: 4608 mov r0, r1
- 8030bcc: 4634 mov r4, r6
- 8030bce: 461a mov r2, r3
- mprio = TCP_PRIO_MAX;
-
- /* We kill the oldest active connection that has lower priority than prio. */
- inactivity = 0;
- inactive = NULL;
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- 8030bd0: 68db ldr r3, [r3, #12]
- 8030bd2: 2b00 cmp r3, #0
- 8030bd4: d1f0 bne.n 8030bb8 <tcp_alloc+0x4c>
- inactivity = tcp_ticks - pcb->tmr;
- inactive = pcb;
- mprio = pcb->prio;
- }
- }
- if (inactive != NULL) {
- 8030bd6: b112 cbz r2, 8030bde <tcp_alloc+0x72>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_prio: killing oldest PCB %p (%"S32_F")\n",
- (void *)inactive, inactivity));
- tcp_abort(inactive);
- 8030bd8: 4610 mov r0, r2
- 8030bda: f7ff fe49 bl 8030870 <tcp_abort>
- if (pcb == NULL) {
- /* Try killing active connections with lower priority than the new one. */
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing connection with prio lower than %d\n", prio));
- tcp_kill_prio(prio);
- /* Try to allocate a tcp_pcb again. */
- pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB);
- 8030bde: 2002 movs r0, #2
- 8030be0: f7fe fff4 bl 802fbcc <memp_malloc>
- if (pcb != NULL) {
- /* adjust err stats: timewait PCB was freed above */
- MEMP_STATS_DEC(err, MEMP_TCP_PCB);
- }
- }
- if (pcb != NULL) {
- 8030be4: 4604 mov r4, r0
- 8030be6: 2800 cmp r0, #0
- 8030be8: d039 beq.n 8030c5e <tcp_alloc+0xf2>
- memset(pcb, 0, sizeof(struct tcp_pcb));
- 8030bea: 2100 movs r1, #0
- 8030bec: 2294 movs r2, #148 ; 0x94
- 8030bee: 4620 mov r0, r4
- 8030bf0: f7f0 ff86 bl 8021b00 <memset>
- pcb->prio = prio;
- pcb->snd_buf = TCP_SND_BUF;
- pcb->snd_queuelen = 0;
- pcb->rcv_wnd = TCP_WND;
- 8030bf4: f241 62d0 movw r2, #5840 ; 0x16d0
- }
- }
- if (pcb != NULL) {
- memset(pcb, 0, sizeof(struct tcp_pcb));
- pcb->prio = prio;
- pcb->snd_buf = TCP_SND_BUF;
- 8030bf8: f246 63a8 movw r3, #26280 ; 0x66a8
- 8030bfc: f8a4 3066 strh.w r3, [r4, #102] ; 0x66
- pcb->snd_queuelen = 0;
- pcb->rcv_wnd = TCP_WND;
- 8030c00: 85a2 strh r2, [r4, #44] ; 0x2c
- }
- if (pcb != NULL) {
- memset(pcb, 0, sizeof(struct tcp_pcb));
- pcb->prio = prio;
- pcb->snd_buf = TCP_SND_BUF;
- pcb->snd_queuelen = 0;
- 8030c02: 2300 movs r3, #0
- pcb->rcv_wnd = TCP_WND;
- pcb->rcv_ann_wnd = TCP_WND;
- 8030c04: 85e2 strh r2, [r4, #46] ; 0x2e
- pcb->tos = 0;
- pcb->ttl = TCP_TTL;
- 8030c06: 22ff movs r2, #255 ; 0xff
- MEMP_STATS_DEC(err, MEMP_TCP_PCB);
- }
- }
- if (pcb != NULL) {
- memset(pcb, 0, sizeof(struct tcp_pcb));
- pcb->prio = prio;
- 8030c08: 7665 strb r5, [r4, #25]
- pcb->snd_buf = TCP_SND_BUF;
- pcb->snd_queuelen = 0;
- 8030c0a: f8a4 3068 strh.w r3, [r4, #104] ; 0x68
- 8030c0e: 461d mov r5, r3
- pcb->rcv_wnd = TCP_WND;
- pcb->rcv_ann_wnd = TCP_WND;
- pcb->tos = 0;
- 8030c10: 7263 strb r3, [r4, #9]
- pcb->ttl = TCP_TTL;
- 8030c12: 72a2 strb r2, [r4, #10]
- /* As initial send MSS, we use TCP_MSS but limit it to 536.
- The send MSS is updated when an MSS option is received. */
- pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS;
- pcb->rto = 3000 / TCP_SLOW_INTERVAL;
- pcb->sa = 0;
- 8030c14: f8a4 3040 strh.w r3, [r4, #64] ; 0x40
- pcb->rcv_ann_wnd = TCP_WND;
- pcb->tos = 0;
- pcb->ttl = TCP_TTL;
- /* As initial send MSS, we use TCP_MSS but limit it to 536.
- The send MSS is updated when an MSS option is received. */
- pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS;
- 8030c18: f44f 7206 mov.w r2, #536 ; 0x218
- pcb->rto = 3000 / TCP_SLOW_INTERVAL;
- pcb->sa = 0;
- pcb->sv = 3000 / TCP_SLOW_INTERVAL;
- pcb->rtime = -1;
- 8030c1c: f64f 73ff movw r3, #65535 ; 0xffff
- pcb->rcv_ann_wnd = TCP_WND;
- pcb->tos = 0;
- pcb->ttl = TCP_TTL;
- /* As initial send MSS, we use TCP_MSS but limit it to 536.
- The send MSS is updated when an MSS option is received. */
- pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS;
- 8030c20: 86e2 strh r2, [r4, #54] ; 0x36
- pcb->rto = 3000 / TCP_SLOW_INTERVAL;
- pcb->sa = 0;
- pcb->sv = 3000 / TCP_SLOW_INTERVAL;
- pcb->rtime = -1;
- 8030c22: 86a3 strh r3, [r4, #52] ; 0x34
- pcb->tos = 0;
- pcb->ttl = TCP_TTL;
- /* As initial send MSS, we use TCP_MSS but limit it to 536.
- The send MSS is updated when an MSS option is received. */
- pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS;
- pcb->rto = 3000 / TCP_SLOW_INTERVAL;
- 8030c24: 2206 movs r2, #6
- pcb->sa = 0;
- pcb->sv = 3000 / TCP_SLOW_INTERVAL;
- pcb->rtime = -1;
- pcb->cwnd = 1;
- 8030c26: 2301 movs r3, #1
- 8030c28: f8a4 304c strh.w r3, [r4, #76] ; 0x4c
- pcb->tos = 0;
- pcb->ttl = TCP_TTL;
- /* As initial send MSS, we use TCP_MSS but limit it to 536.
- The send MSS is updated when an MSS option is received. */
- pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS;
- pcb->rto = 3000 / TCP_SLOW_INTERVAL;
- 8030c2c: f8a4 2044 strh.w r2, [r4, #68] ; 0x44
- pcb->sa = 0;
- pcb->sv = 3000 / TCP_SLOW_INTERVAL;
- 8030c30: f8a4 2042 strh.w r2, [r4, #66] ; 0x42
- pcb->rtime = -1;
- pcb->cwnd = 1;
- iss = tcp_next_iss();
- 8030c34: f7ff ff8e bl 8030b54 <tcp_next_iss>
- pcb->snd_wl2 = iss;
- pcb->snd_nxt = iss;
- pcb->lastack = iss;
- pcb->snd_lbb = iss;
- pcb->tmr = tcp_ticks;
- 8030c38: 4b0b ldr r3, [pc, #44] ; (8030c68 <tcp_alloc+0xfc>)
- pcb->sa = 0;
- pcb->sv = 3000 / TCP_SLOW_INTERVAL;
- pcb->rtime = -1;
- pcb->cwnd = 1;
- iss = tcp_next_iss();
- pcb->snd_wl2 = iss;
- 8030c3a: 65a0 str r0, [r4, #88] ; 0x58
- pcb->snd_nxt = iss;
- pcb->lastack = iss;
- pcb->snd_lbb = iss;
- pcb->tmr = tcp_ticks;
- 8030c3c: 681b ldr r3, [r3, #0]
- pcb->sv = 3000 / TCP_SLOW_INTERVAL;
- pcb->rtime = -1;
- pcb->cwnd = 1;
- iss = tcp_next_iss();
- pcb->snd_wl2 = iss;
- pcb->snd_nxt = iss;
- 8030c3e: 6520 str r0, [r4, #80] ; 0x50
- pcb->lastack = iss;
- pcb->snd_lbb = iss;
- pcb->tmr = tcp_ticks;
- 8030c40: 6263 str r3, [r4, #36] ; 0x24
- pcb->last_timer = tcp_timer_ctr;
- 8030c42: 4b0b ldr r3, [pc, #44] ; (8030c70 <tcp_alloc+0x104>)
- pcb->rtime = -1;
- pcb->cwnd = 1;
- iss = tcp_next_iss();
- pcb->snd_wl2 = iss;
- pcb->snd_nxt = iss;
- pcb->lastack = iss;
- 8030c44: 64a0 str r0, [r4, #72] ; 0x48
- pcb->snd_lbb = iss;
- pcb->tmr = tcp_ticks;
- pcb->last_timer = tcp_timer_ctr;
- 8030c46: 781b ldrb r3, [r3, #0]
- pcb->cwnd = 1;
- iss = tcp_next_iss();
- pcb->snd_wl2 = iss;
- pcb->snd_nxt = iss;
- pcb->lastack = iss;
- pcb->snd_lbb = iss;
- 8030c48: 65e0 str r0, [r4, #92] ; 0x5c
- pcb->tmr = tcp_ticks;
- pcb->last_timer = tcp_timer_ctr;
- 8030c4a: f884 3021 strb.w r3, [r4, #33] ; 0x21
- pcb->polltmr = 0;
- #if LWIP_CALLBACK_API
- pcb->recv = tcp_recv_null;
- 8030c4e: 4b09 ldr r3, [pc, #36] ; (8030c74 <tcp_alloc+0x108>)
- pcb->lastack = iss;
- pcb->snd_lbb = iss;
- pcb->tmr = tcp_ticks;
- pcb->last_timer = tcp_timer_ctr;
- pcb->polltmr = 0;
- 8030c50: 77e5 strb r5, [r4, #31]
- #if LWIP_CALLBACK_API
- pcb->recv = tcp_recv_null;
- 8030c52: 67e3 str r3, [r4, #124] ; 0x7c
- #endif /* LWIP_CALLBACK_API */
-
- /* Init KEEPALIVE timer */
- pcb->keep_idle = TCP_KEEPIDLE_DEFAULT;
- 8030c54: 4b08 ldr r3, [pc, #32] ; (8030c78 <tcp_alloc+0x10c>)
- #if LWIP_TCP_KEEPALIVE
- pcb->keep_intvl = TCP_KEEPINTVL_DEFAULT;
- pcb->keep_cnt = TCP_KEEPCNT_DEFAULT;
- #endif /* LWIP_TCP_KEEPALIVE */
- pcb->keep_cnt_sent = 0;
- 8030c56: f884 5092 strb.w r5, [r4, #146] ; 0x92
- #if LWIP_CALLBACK_API
- pcb->recv = tcp_recv_null;
- #endif /* LWIP_CALLBACK_API */
-
- /* Init KEEPALIVE timer */
- pcb->keep_idle = TCP_KEEPIDLE_DEFAULT;
- 8030c5a: f8c4 308c str.w r3, [r4, #140] ; 0x8c
- #endif /* LWIP_TCP_KEEPALIVE */
- pcb->keep_cnt_sent = 0;
- }
- return pcb;
- }
- 8030c5e: 4620 mov r0, r4
- 8030c60: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 8030c62: bf00 nop
- 8030c64: 2000f6d0 .word 0x2000f6d0
- 8030c68: 2000f6c0 .word 0x2000f6c0
- 8030c6c: 2000f6bc .word 0x2000f6bc
- 8030c70: 2000c3dd .word 0x2000c3dd
- 8030c74: 08030a35 .word 0x08030a35
- 8030c78: 006ddd00 .word 0x006ddd00
- 08030c7c <tcp_new>:
- * @return a new tcp_pcb that initially is in state CLOSED
- */
- struct tcp_pcb *
- tcp_new(void)
- {
- return tcp_alloc(TCP_PRIO_NORMAL);
- 8030c7c: 2040 movs r0, #64 ; 0x40
- 8030c7e: f7ff bf75 b.w 8030b6c <tcp_alloc>
- 08030c82 <tcp_eff_send_mss>:
- * by using ip_route to determin the netif used to send to the address and
- * calculating the minimum of TCP_MSS and that netif's mtu (if set).
- */
- u16_t
- tcp_eff_send_mss(u16_t sendmss, ip_addr_t *addr)
- {
- 8030c82: b510 push {r4, lr}
- 8030c84: 4604 mov r4, r0
- u16_t mss_s;
- struct netif *outif;
- outif = ip_route(addr);
- 8030c86: 4608 mov r0, r1
- 8030c88: f002 f96c bl 8032f64 <ip_route>
- if ((outif != NULL) && (outif->mtu != 0)) {
- 8030c8c: b130 cbz r0, 8030c9c <tcp_eff_send_mss+0x1a>
- 8030c8e: 8c83 ldrh r3, [r0, #36] ; 0x24
- 8030c90: b123 cbz r3, 8030c9c <tcp_eff_send_mss+0x1a>
- mss_s = outif->mtu - IP_HLEN - TCP_HLEN;
- 8030c92: 3b28 subs r3, #40 ; 0x28
- /* RFC 1122, chap 4.2.2.6:
- * Eff.snd.MSS = min(SendMSS+20, MMS_S) - TCPhdrsize - IPoptionsize
- * We correct for TCP options in tcp_write(), and don't support IP options.
- */
- sendmss = LWIP_MIN(sendmss, mss_s);
- 8030c94: b29b uxth r3, r3
- 8030c96: 429c cmp r4, r3
- 8030c98: bf28 it cs
- 8030c9a: 461c movcs r4, r3
- }
- return sendmss;
- }
- 8030c9c: 4620 mov r0, r4
- 8030c9e: bd10 pop {r4, pc}
- 08030ca0 <tcp_connect>:
- * other err_t values if connect request couldn't be sent
- */
- err_t
- tcp_connect(struct tcp_pcb *pcb, ip_addr_t *ipaddr, u16_t port,
- tcp_connected_fn connected)
- {
- 8030ca0: b5f8 push {r3, r4, r5, r6, r7, lr}
- 8030ca2: 461f mov r7, r3
- err_t ret;
- u32_t iss;
- u16_t old_local_port;
- LWIP_ERROR("tcp_connect: can only connect from state CLOSED", pcb->state == CLOSED, return ERR_ISCONN);
- 8030ca4: 7e03 ldrb r3, [r0, #24]
- * other err_t values if connect request couldn't be sent
- */
- err_t
- tcp_connect(struct tcp_pcb *pcb, ip_addr_t *ipaddr, u16_t port,
- tcp_connected_fn connected)
- {
- 8030ca6: 4604 mov r4, r0
- 8030ca8: 460d mov r5, r1
- err_t ret;
- u32_t iss;
- u16_t old_local_port;
- LWIP_ERROR("tcp_connect: can only connect from state CLOSED", pcb->state == CLOSED, return ERR_ISCONN);
- 8030caa: 2b00 cmp r3, #0
- 8030cac: d161 bne.n 8030d72 <tcp_connect+0xd2>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_connect to port %"U16_F"\n", port));
- if (ipaddr != NULL) {
- 8030cae: 2900 cmp r1, #0
- 8030cb0: d061 beq.n 8030d76 <tcp_connect+0xd6>
- pcb->remote_ip = *ipaddr;
- 8030cb2: 680b ldr r3, [r1, #0]
- } else {
- return ERR_VAL;
- }
- pcb->remote_port = port;
- 8030cb4: 8382 strh r2, [r0, #28]
- LWIP_ERROR("tcp_connect: can only connect from state CLOSED", pcb->state == CLOSED, return ERR_ISCONN);
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_connect to port %"U16_F"\n", port));
- if (ipaddr != NULL) {
- pcb->remote_ip = *ipaddr;
- 8030cb6: 6043 str r3, [r0, #4]
- return ERR_VAL;
- }
- pcb->remote_port = port;
- /* check if we have a route to the remote host */
- if (ip_addr_isany(&(pcb->local_ip))) {
- 8030cb8: 6803 ldr r3, [r0, #0]
- 8030cba: b933 cbnz r3, 8030cca <tcp_connect+0x2a>
- /* no local IP address set, yet. */
- struct netif *netif = ip_route(&(pcb->remote_ip));
- 8030cbc: 3004 adds r0, #4
- 8030cbe: f002 f951 bl 8032f64 <ip_route>
- if (netif == NULL) {
- 8030cc2: 2800 cmp r0, #0
- 8030cc4: d059 beq.n 8030d7a <tcp_connect+0xda>
- /* Don't even try to send a SYN packet if we have no route
- since that will fail. */
- return ERR_RTE;
- }
- /* Use the netif's IP address as local address. */
- ip_addr_copy(pcb->local_ip, netif->ip_addr);
- 8030cc6: 6843 ldr r3, [r0, #4]
- 8030cc8: 6023 str r3, [r4, #0]
- }
- old_local_port = pcb->local_port;
- 8030cca: 8b66 ldrh r6, [r4, #26]
- if (pcb->local_port == 0) {
- 8030ccc: b32e cbz r6, 8030d1a <tcp_connect+0x7a>
- }
- }
- }
- }
- #endif /* SO_REUSE */
- iss = tcp_next_iss();
- 8030cce: f7ff ff41 bl 8030b54 <tcp_next_iss>
- pcb->rcv_nxt = 0;
- pcb->snd_nxt = iss;
- 8030cd2: 6520 str r0, [r4, #80] ; 0x50
- pcb->lastack = iss - 1;
- 8030cd4: 3801 subs r0, #1
- pcb->snd_lbb = iss - 1;
- pcb->rcv_wnd = TCP_WND;
- 8030cd6: f241 62d0 movw r2, #5840 ; 0x16d0
- }
- }
- }
- #endif /* SO_REUSE */
- iss = tcp_next_iss();
- pcb->rcv_nxt = 0;
- 8030cda: 2300 movs r3, #0
- pcb->snd_nxt = iss;
- pcb->lastack = iss - 1;
- 8030cdc: 64a0 str r0, [r4, #72] ; 0x48
- pcb->snd_lbb = iss - 1;
- 8030cde: 65e0 str r0, [r4, #92] ; 0x5c
- pcb->rcv_ann_wnd = TCP_WND;
- pcb->rcv_ann_right_edge = pcb->rcv_nxt;
- pcb->snd_wnd = TCP_WND;
- /* As initial send MSS, we use TCP_MSS but limit it to 536.
- The send MSS is updated when an MSS option is received. */
- pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS;
- 8030ce0: f44f 7006 mov.w r0, #536 ; 0x218
- #if TCP_CALCULATE_EFF_SEND_MSS
- pcb->mss = tcp_eff_send_mss(pcb->mss, ipaddr);
- 8030ce4: 4629 mov r1, r5
- }
- }
- }
- #endif /* SO_REUSE */
- iss = tcp_next_iss();
- pcb->rcv_nxt = 0;
- 8030ce6: 62a3 str r3, [r4, #40] ; 0x28
- pcb->snd_nxt = iss;
- pcb->lastack = iss - 1;
- pcb->snd_lbb = iss - 1;
- pcb->rcv_wnd = TCP_WND;
- 8030ce8: 85a2 strh r2, [r4, #44] ; 0x2c
- pcb->rcv_ann_wnd = TCP_WND;
- 8030cea: 85e2 strh r2, [r4, #46] ; 0x2e
- pcb->rcv_ann_right_edge = pcb->rcv_nxt;
- 8030cec: 6323 str r3, [r4, #48] ; 0x30
- pcb->snd_wnd = TCP_WND;
- 8030cee: f8a4 2060 strh.w r2, [r4, #96] ; 0x60
- /* As initial send MSS, we use TCP_MSS but limit it to 536.
- The send MSS is updated when an MSS option is received. */
- pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS;
- 8030cf2: 86e0 strh r0, [r4, #54] ; 0x36
- #if TCP_CALCULATE_EFF_SEND_MSS
- pcb->mss = tcp_eff_send_mss(pcb->mss, ipaddr);
- 8030cf4: f7ff ffc5 bl 8030c82 <tcp_eff_send_mss>
- #endif /* TCP_CALCULATE_EFF_SEND_MSS */
- pcb->cwnd = 1;
- 8030cf8: 2301 movs r3, #1
- 8030cfa: f8a4 304c strh.w r3, [r4, #76] ; 0x4c
- pcb->ssthresh = pcb->mss * 10;
- 8030cfe: 230a movs r3, #10
- pcb->snd_wnd = TCP_WND;
- /* As initial send MSS, we use TCP_MSS but limit it to 536.
- The send MSS is updated when an MSS option is received. */
- pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS;
- #if TCP_CALCULATE_EFF_SEND_MSS
- pcb->mss = tcp_eff_send_mss(pcb->mss, ipaddr);
- 8030d00: 86e0 strh r0, [r4, #54] ; 0x36
- #endif /* TCP_CALCULATE_EFF_SEND_MSS */
- pcb->cwnd = 1;
- pcb->ssthresh = pcb->mss * 10;
- 8030d02: 4358 muls r0, r3
- 8030d04: f8a4 004e strh.w r0, [r4, #78] ; 0x4e
- #if LWIP_CALLBACK_API
- pcb->connected = connected;
- 8030d08: f8c4 7080 str.w r7, [r4, #128] ; 0x80
- #else /* LWIP_CALLBACK_API */
- LWIP_UNUSED_ARG(connected);
- #endif /* LWIP_CALLBACK_API */
- /* Send a SYN together with the MSS option. */
- ret = tcp_enqueue_flags(pcb, TCP_SYN);
- 8030d0c: 4620 mov r0, r4
- 8030d0e: 2102 movs r1, #2
- 8030d10: f001 f94a bl 8031fa8 <tcp_enqueue_flags>
- if (ret == ERR_OK) {
- 8030d14: 4605 mov r5, r0
- 8030d16: b130 cbz r0, 8030d26 <tcp_connect+0x86>
- 8030d18: e032 b.n 8030d80 <tcp_connect+0xe0>
- ip_addr_copy(pcb->local_ip, netif->ip_addr);
- }
- old_local_port = pcb->local_port;
- if (pcb->local_port == 0) {
- pcb->local_port = tcp_new_port();
- 8030d1a: f7ff fabd bl 8030298 <tcp_new_port>
- 8030d1e: 8360 strh r0, [r4, #26]
- if (pcb->local_port == 0) {
- 8030d20: 2800 cmp r0, #0
- 8030d22: d1d4 bne.n 8030cce <tcp_connect+0x2e>
- 8030d24: e02b b.n 8030d7e <tcp_connect+0xde>
- /* Send a SYN together with the MSS option. */
- ret = tcp_enqueue_flags(pcb, TCP_SYN);
- if (ret == ERR_OK) {
- /* SYN segment was enqueued, changed the pcbs state now */
- pcb->state = SYN_SENT;
- 8030d26: 2302 movs r3, #2
- 8030d28: 7623 strb r3, [r4, #24]
- if (old_local_port != 0) {
- 8030d2a: b19e cbz r6, 8030d54 <tcp_connect+0xb4>
- TCP_RMV(&tcp_bound_pcbs, pcb);
- 8030d2c: 4a15 ldr r2, [pc, #84] ; (8030d84 <tcp_connect+0xe4>)
- 8030d2e: 6813 ldr r3, [r2, #0]
- 8030d30: 42a3 cmp r3, r4
- 8030d32: d101 bne.n 8030d38 <tcp_connect+0x98>
- 8030d34: 68e3 ldr r3, [r4, #12]
- 8030d36: e00c b.n 8030d52 <tcp_connect+0xb2>
- 8030d38: 4a13 ldr r2, [pc, #76] ; (8030d88 <tcp_connect+0xe8>)
- 8030d3a: 6013 str r3, [r2, #0]
- 8030d3c: e007 b.n 8030d4e <tcp_connect+0xae>
- 8030d3e: 68d9 ldr r1, [r3, #12]
- 8030d40: 42a1 cmp r1, r4
- 8030d42: d103 bne.n 8030d4c <tcp_connect+0xac>
- 8030d44: 6013 str r3, [r2, #0]
- 8030d46: 68e2 ldr r2, [r4, #12]
- 8030d48: 60da str r2, [r3, #12]
- 8030d4a: e003 b.n 8030d54 <tcp_connect+0xb4>
- 8030d4c: 460b mov r3, r1
- 8030d4e: 2b00 cmp r3, #0
- 8030d50: d1f5 bne.n 8030d3e <tcp_connect+0x9e>
- 8030d52: 6013 str r3, [r2, #0]
- }
- TCP_REG_ACTIVE(pcb);
- 8030d54: 4b0d ldr r3, [pc, #52] ; (8030d8c <tcp_connect+0xec>)
- 8030d56: 681a ldr r2, [r3, #0]
- 8030d58: 601c str r4, [r3, #0]
- 8030d5a: 60e2 str r2, [r4, #12]
- 8030d5c: f001 fc72 bl 8032644 <tcp_timer_needed>
- 8030d60: 4b0b ldr r3, [pc, #44] ; (8030d90 <tcp_connect+0xf0>)
- 8030d62: 2201 movs r2, #1
- 8030d64: 701a strb r2, [r3, #0]
- snmp_inc_tcpactiveopens();
- 8030d66: f003 ff4f bl 8034c08 <snmp_inc_tcpactiveopens>
- tcp_output(pcb);
- 8030d6a: 4620 mov r0, r4
- 8030d6c: f001 f9ac bl 80320c8 <tcp_output>
- 8030d70: e006 b.n 8030d80 <tcp_connect+0xe0>
- {
- err_t ret;
- u32_t iss;
- u16_t old_local_port;
- LWIP_ERROR("tcp_connect: can only connect from state CLOSED", pcb->state == CLOSED, return ERR_ISCONN);
- 8030d72: 25f7 movs r5, #247 ; 0xf7
- 8030d74: e004 b.n 8030d80 <tcp_connect+0xe0>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_connect to port %"U16_F"\n", port));
- if (ipaddr != NULL) {
- pcb->remote_ip = *ipaddr;
- } else {
- return ERR_VAL;
- 8030d76: 25fa movs r5, #250 ; 0xfa
- 8030d78: e002 b.n 8030d80 <tcp_connect+0xe0>
- /* no local IP address set, yet. */
- struct netif *netif = ip_route(&(pcb->remote_ip));
- if (netif == NULL) {
- /* Don't even try to send a SYN packet if we have no route
- since that will fail. */
- return ERR_RTE;
- 8030d7a: 25fc movs r5, #252 ; 0xfc
- 8030d7c: e000 b.n 8030d80 <tcp_connect+0xe0>
- old_local_port = pcb->local_port;
- if (pcb->local_port == 0) {
- pcb->local_port = tcp_new_port();
- if (pcb->local_port == 0) {
- return ERR_BUF;
- 8030d7e: 25fe movs r5, #254 ; 0xfe
- snmp_inc_tcpactiveopens();
- tcp_output(pcb);
- }
- return ret;
- }
- 8030d80: b268 sxtb r0, r5
- 8030d82: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 8030d84: 2000f6cc .word 0x2000f6cc
- 8030d88: 2000f6c8 .word 0x2000f6c8
- 8030d8c: 2000f6bc .word 0x2000f6bc
- 8030d90: 2000f6b8 .word 0x2000f6b8
- 08030d94 <tcp_parseopt>:
- *
- * @param pcb the tcp_pcb for which a segment arrived
- */
- static void
- tcp_parseopt(struct tcp_pcb *pcb)
- {
- 8030d94: b5f8 push {r3, r4, r5, r6, r7, lr}
- u8_t *opts, opt;
- #if LWIP_TCP_TIMESTAMPS
- u32_t tsval;
- #endif
- opts = (u8_t *)tcphdr + TCP_HLEN;
- 8030d96: 4d1e ldr r5, [pc, #120] ; (8030e10 <tcp_parseopt+0x7c>)
- 8030d98: 682c ldr r4, [r5, #0]
- *
- * @param pcb the tcp_pcb for which a segment arrived
- */
- static void
- tcp_parseopt(struct tcp_pcb *pcb)
- {
- 8030d9a: 4606 mov r6, r0
- #endif
- opts = (u8_t *)tcphdr + TCP_HLEN;
- /* Parse the TCP MSS option, if present. */
- if(TCPH_HDRLEN(tcphdr) > 0x5) {
- 8030d9c: 89a0 ldrh r0, [r4, #12]
- 8030d9e: f7fd fefc bl 802eb9a <lwip_ntohs>
- 8030da2: f3c0 300f ubfx r0, r0, #12, #16
- 8030da6: 2805 cmp r0, #5
- 8030da8: d931 bls.n 8030e0e <tcp_parseopt+0x7a>
- max_c = (TCPH_HDRLEN(tcphdr) - 5) << 2;
- 8030daa: 682b ldr r3, [r5, #0]
- 8030dac: 8998 ldrh r0, [r3, #12]
- 8030dae: f7fd fef4 bl 802eb9a <lwip_ntohs>
- 8030db2: 0b00 lsrs r0, r0, #12
- 8030db4: 1f41 subs r1, r0, #5
- 8030db6: 0089 lsls r1, r1, #2
- u8_t *opts, opt;
- #if LWIP_TCP_TIMESTAMPS
- u32_t tsval;
- #endif
- opts = (u8_t *)tcphdr + TCP_HLEN;
- 8030db8: 3414 adds r4, #20
- /* Parse the TCP MSS option, if present. */
- if(TCPH_HDRLEN(tcphdr) > 0x5) {
- max_c = (TCPH_HDRLEN(tcphdr) - 5) << 2;
- 8030dba: b289 uxth r1, r1
- for (c = 0; c < max_c; ) {
- 8030dbc: 2300 movs r3, #0
- return;
- }
- /* An MSS option with the right option length. */
- mss = (opts[c + 2] << 8) | opts[c + 3];
- /* Limit the mss to the configured TCP_MSS and prevent division by zero */
- pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss;
- 8030dbe: f240 50b3 movw r0, #1459 ; 0x5b3
- 8030dc2: f240 55b4 movw r5, #1460 ; 0x5b4
- opts = (u8_t *)tcphdr + TCP_HLEN;
- /* Parse the TCP MSS option, if present. */
- if(TCPH_HDRLEN(tcphdr) > 0x5) {
- max_c = (TCPH_HDRLEN(tcphdr) - 5) << 2;
- for (c = 0; c < max_c; ) {
- 8030dc6: e020 b.n 8030e0a <tcp_parseopt+0x76>
- opt = opts[c];
- switch (opt) {
- 8030dc8: 5ce2 ldrb r2, [r4, r3]
- 8030dca: 2a01 cmp r2, #1
- 8030dcc: d005 beq.n 8030dda <tcp_parseopt+0x46>
- 8030dce: d31e bcc.n 8030e0e <tcp_parseopt+0x7a>
- 8030dd0: 2a02 cmp r2, #2
- 8030dd2: eb04 0203 add.w r2, r4, r3
- 8030dd6: d114 bne.n 8030e02 <tcp_parseopt+0x6e>
- 8030dd8: e001 b.n 8030dde <tcp_parseopt+0x4a>
- /* End of options. */
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: EOL\n"));
- return;
- case 0x01:
- /* NOP option. */
- ++c;
- 8030dda: 3301 adds r3, #1
- 8030ddc: e014 b.n 8030e08 <tcp_parseopt+0x74>
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: NOP\n"));
- break;
- case 0x02:
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: MSS\n"));
- if (opts[c + 1] != 0x04 || c + 0x04 > max_c) {
- 8030dde: 7857 ldrb r7, [r2, #1]
- 8030de0: 2f04 cmp r7, #4
- 8030de2: d114 bne.n 8030e0e <tcp_parseopt+0x7a>
- 8030de4: 1cdf adds r7, r3, #3
- 8030de6: 428f cmp r7, r1
- 8030de8: da11 bge.n 8030e0e <tcp_parseopt+0x7a>
- /* Bad length */
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n"));
- return;
- }
- /* An MSS option with the right option length. */
- mss = (opts[c + 2] << 8) | opts[c + 3];
- 8030dea: 7897 ldrb r7, [r2, #2]
- 8030dec: 78d2 ldrb r2, [r2, #3]
- 8030dee: ea42 2207 orr.w r2, r2, r7, lsl #8
- /* Limit the mss to the configured TCP_MSS and prevent division by zero */
- pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss;
- 8030df2: 1e57 subs r7, r2, #1
- 8030df4: b2bf uxth r7, r7
- 8030df6: 4287 cmp r7, r0
- 8030df8: bf88 it hi
- 8030dfa: 462a movhi r2, r5
- 8030dfc: 86f2 strh r2, [r6, #54] ; 0x36
- /* Advance to next option */
- c += 0x04;
- 8030dfe: 3304 adds r3, #4
- 8030e00: e002 b.n 8030e08 <tcp_parseopt+0x74>
- c += 0x0A;
- break;
- #endif
- default:
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: other\n"));
- if (opts[c + 1] == 0) {
- 8030e02: 7852 ldrb r2, [r2, #1]
- 8030e04: b11a cbz r2, 8030e0e <tcp_parseopt+0x7a>
- and we don't process them further. */
- return;
- }
- /* All other options have a length field, so that we easily
- can skip past them. */
- c += opts[c + 1];
- 8030e06: 18d3 adds r3, r2, r3
- 8030e08: b29b uxth r3, r3
- opts = (u8_t *)tcphdr + TCP_HLEN;
- /* Parse the TCP MSS option, if present. */
- if(TCPH_HDRLEN(tcphdr) > 0x5) {
- max_c = (TCPH_HDRLEN(tcphdr) - 5) << 2;
- for (c = 0; c < max_c; ) {
- 8030e0a: 428b cmp r3, r1
- 8030e0c: d3dc bcc.n 8030dc8 <tcp_parseopt+0x34>
- 8030e0e: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 8030e10: 2000c3e0 .word 0x2000c3e0
- 08030e14 <tcp_receive>:
- *
- * Called from tcp_process().
- */
- static void
- tcp_receive(struct tcp_pcb *pcb)
- {
- 8030e14: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- u16_t ooseq_qlen;
- #endif /* TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS */
- LWIP_ASSERT("tcp_receive: wrong state", pcb->state >= ESTABLISHED);
- if (flags & TCP_ACK) {
- 8030e18: 4ba0 ldr r3, [pc, #640] ; (803109c <tcp_receive+0x288>)
- 8030e1a: 781b ldrb r3, [r3, #0]
- 8030e1c: f003 0310 and.w r3, r3, #16
- 8030e20: b2db uxtb r3, r3
- *
- * Called from tcp_process().
- */
- static void
- tcp_receive(struct tcp_pcb *pcb)
- {
- 8030e22: 4604 mov r4, r0
- u16_t ooseq_qlen;
- #endif /* TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS */
- LWIP_ASSERT("tcp_receive: wrong state", pcb->state >= ESTABLISHED);
- if (flags & TCP_ACK) {
- 8030e24: 2b00 cmp r3, #0
- 8030e26: f000 816b beq.w 8031100 <tcp_receive+0x2ec>
- right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2;
- /* Update window. */
- if (TCP_SEQ_LT(pcb->snd_wl1, seqno) ||
- 8030e2a: 4a9d ldr r2, [pc, #628] ; (80310a0 <tcp_receive+0x28c>)
- 8030e2c: 6d43 ldr r3, [r0, #84] ; 0x54
- 8030e2e: 6812 ldr r2, [r2, #0]
- #endif /* TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS */
- LWIP_ASSERT("tcp_receive: wrong state", pcb->state >= ESTABLISHED);
- if (flags & TCP_ACK) {
- right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2;
- 8030e30: f8b0 5060 ldrh.w r5, [r0, #96] ; 0x60
- 8030e34: 6d81 ldr r1, [r0, #88] ; 0x58
- /* Update window. */
- if (TCP_SEQ_LT(pcb->snd_wl1, seqno) ||
- 8030e36: 1a98 subs r0, r3, r2
- 8030e38: 2800 cmp r0, #0
- 8030e3a: db0e blt.n 8030e5a <tcp_receive+0x46>
- 8030e3c: 4293 cmp r3, r2
- 8030e3e: 4b99 ldr r3, [pc, #612] ; (80310a4 <tcp_receive+0x290>)
- 8030e40: d103 bne.n 8030e4a <tcp_receive+0x36>
- (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) ||
- 8030e42: 6818 ldr r0, [r3, #0]
- 8030e44: 1a08 subs r0, r1, r0
- 8030e46: 2800 cmp r0, #0
- 8030e48: db07 blt.n 8030e5a <tcp_receive+0x46>
- 8030e4a: 681b ldr r3, [r3, #0]
- 8030e4c: 4299 cmp r1, r3
- 8030e4e: d11f bne.n 8030e90 <tcp_receive+0x7c>
- (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) {
- 8030e50: 4b95 ldr r3, [pc, #596] ; (80310a8 <tcp_receive+0x294>)
- 8030e52: 681b ldr r3, [r3, #0]
- 8030e54: 89db ldrh r3, [r3, #14]
- 8030e56: 42ab cmp r3, r5
- 8030e58: d91a bls.n 8030e90 <tcp_receive+0x7c>
- pcb->snd_wnd = tcphdr->wnd;
- 8030e5a: 4b93 ldr r3, [pc, #588] ; (80310a8 <tcp_receive+0x294>)
- /* keep track of the biggest window announced by the remote host to calculate
- the maximum segment size */
- if (pcb->snd_wnd_max < tcphdr->wnd) {
- 8030e5c: f8b4 6062 ldrh.w r6, [r4, #98] ; 0x62
- /* Update window. */
- if (TCP_SEQ_LT(pcb->snd_wl1, seqno) ||
- (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) ||
- (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) {
- pcb->snd_wnd = tcphdr->wnd;
- 8030e60: 681b ldr r3, [r3, #0]
- 8030e62: 89d8 ldrh r0, [r3, #14]
- /* keep track of the biggest window announced by the remote host to calculate
- the maximum segment size */
- if (pcb->snd_wnd_max < tcphdr->wnd) {
- pcb->snd_wnd_max = tcphdr->wnd;
- }
- pcb->snd_wl1 = seqno;
- 8030e64: 6562 str r2, [r4, #84] ; 0x54
- pcb->snd_wl2 = ackno;
- 8030e66: 4a8f ldr r2, [pc, #572] ; (80310a4 <tcp_receive+0x290>)
- /* Update window. */
- if (TCP_SEQ_LT(pcb->snd_wl1, seqno) ||
- (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) ||
- (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) {
- pcb->snd_wnd = tcphdr->wnd;
- 8030e68: f8a4 0060 strh.w r0, [r4, #96] ; 0x60
- the maximum segment size */
- if (pcb->snd_wnd_max < tcphdr->wnd) {
- pcb->snd_wnd_max = tcphdr->wnd;
- }
- pcb->snd_wl1 = seqno;
- pcb->snd_wl2 = ackno;
- 8030e6c: 6812 ldr r2, [r2, #0]
- (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) ||
- (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) {
- pcb->snd_wnd = tcphdr->wnd;
- /* keep track of the biggest window announced by the remote host to calculate
- the maximum segment size */
- if (pcb->snd_wnd_max < tcphdr->wnd) {
- 8030e6e: 4286 cmp r6, r0
- pcb->snd_wnd_max = tcphdr->wnd;
- }
- pcb->snd_wl1 = seqno;
- pcb->snd_wl2 = ackno;
- 8030e70: 65a2 str r2, [r4, #88] ; 0x58
- (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) {
- pcb->snd_wnd = tcphdr->wnd;
- /* keep track of the biggest window announced by the remote host to calculate
- the maximum segment size */
- if (pcb->snd_wnd_max < tcphdr->wnd) {
- pcb->snd_wnd_max = tcphdr->wnd;
- 8030e72: bf38 it cc
- 8030e74: f8a4 0062 strhcc.w r0, [r4, #98] ; 0x62
- 8030e78: f894 2091 ldrb.w r2, [r4, #145] ; 0x91
- }
- pcb->snd_wl1 = seqno;
- pcb->snd_wl2 = ackno;
- if (pcb->snd_wnd == 0) {
- 8030e7c: b920 cbnz r0, 8030e88 <tcp_receive+0x74>
- if (pcb->persist_backoff == 0) {
- 8030e7e: b93a cbnz r2, 8030e90 <tcp_receive+0x7c>
- /* start persist timer */
- pcb->persist_cnt = 0;
- 8030e80: f884 0090 strb.w r0, [r4, #144] ; 0x90
- pcb->persist_backoff = 1;
- 8030e84: 2301 movs r3, #1
- 8030e86: e001 b.n 8030e8c <tcp_receive+0x78>
- }
- } else if (pcb->persist_backoff > 0) {
- 8030e88: b112 cbz r2, 8030e90 <tcp_receive+0x7c>
- /* stop persist timer */
- pcb->persist_backoff = 0;
- 8030e8a: 2300 movs r3, #0
- 8030e8c: f884 3091 strb.w r3, [r4, #145] ; 0x91
- * If it only passes 1, should reset dupack counter
- *
- */
- /* Clause 1 */
- if (TCP_SEQ_LEQ(ackno, pcb->lastack)) {
- 8030e90: 4b84 ldr r3, [pc, #528] ; (80310a4 <tcp_receive+0x290>)
- 8030e92: 6ca2 ldr r2, [r4, #72] ; 0x48
- 8030e94: 681b ldr r3, [r3, #0]
- 8030e96: 1a98 subs r0, r3, r2
- 8030e98: 2800 cmp r0, #0
- 8030e9a: dc34 bgt.n 8030f06 <tcp_receive+0xf2>
- pcb->acked = 0;
- 8030e9c: 2000 movs r0, #0
- 8030e9e: f8a4 0064 strh.w r0, [r4, #100] ; 0x64
- /* Clause 2 */
- if (tcplen == 0) {
- 8030ea2: 4882 ldr r0, [pc, #520] ; (80310ac <tcp_receive+0x298>)
- 8030ea4: 8800 ldrh r0, [r0, #0]
- 8030ea6: 2800 cmp r0, #0
- 8030ea8: f040 81f4 bne.w 8031294 <tcp_receive+0x480>
- /* Clause 3 */
- if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge){
- 8030eac: f8b4 6060 ldrh.w r6, [r4, #96] ; 0x60
- 8030eb0: 6da0 ldr r0, [r4, #88] ; 0x58
- #endif /* TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS */
- LWIP_ASSERT("tcp_receive: wrong state", pcb->state >= ESTABLISHED);
- if (flags & TCP_ACK) {
- right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2;
- 8030eb2: 1869 adds r1, r5, r1
- if (TCP_SEQ_LEQ(ackno, pcb->lastack)) {
- pcb->acked = 0;
- /* Clause 2 */
- if (tcplen == 0) {
- /* Clause 3 */
- if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge){
- 8030eb4: 1830 adds r0, r6, r0
- 8030eb6: 4288 cmp r0, r1
- 8030eb8: f040 81ec bne.w 8031294 <tcp_receive+0x480>
- /* Clause 4 */
- if (pcb->rtime >= 0) {
- 8030ebc: f9b4 1034 ldrsh.w r1, [r4, #52] ; 0x34
- 8030ec0: 2900 cmp r1, #0
- 8030ec2: f2c0 81e7 blt.w 8031294 <tcp_receive+0x480>
- /* Clause 5 */
- if (pcb->lastack == ackno) {
- 8030ec6: 429a cmp r2, r3
- 8030ec8: f040 81e4 bne.w 8031294 <tcp_receive+0x480>
- found_dupack = 1;
- if ((u8_t)(pcb->dupacks + 1) > pcb->dupacks) {
- 8030ecc: f894 2047 ldrb.w r2, [r4, #71] ; 0x47
- 8030ed0: 1c53 adds r3, r2, #1
- 8030ed2: b2db uxtb r3, r3
- 8030ed4: 4293 cmp r3, r2
- ++pcb->dupacks;
- 8030ed6: bf88 it hi
- 8030ed8: f884 3047 strbhi.w r3, [r4, #71] ; 0x47
- }
- if (pcb->dupacks > 3) {
- 8030edc: f894 3047 ldrb.w r3, [r4, #71] ; 0x47
- 8030ee0: 2b03 cmp r3, #3
- 8030ee2: d90a bls.n 8030efa <tcp_receive+0xe6>
- /* Inflate the congestion window, but not if it means that
- the value overflows. */
- if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) {
- 8030ee4: f8b4 204c ldrh.w r2, [r4, #76] ; 0x4c
- 8030ee8: 8ee3 ldrh r3, [r4, #54] ; 0x36
- 8030eea: 18d3 adds r3, r2, r3
- 8030eec: b29b uxth r3, r3
- 8030eee: 4293 cmp r3, r2
- 8030ef0: f240 80b2 bls.w 8031058 <tcp_receive+0x244>
- pcb->cwnd += pcb->mss;
- 8030ef4: f8a4 304c strh.w r3, [r4, #76] ; 0x4c
- 8030ef8: e0ae b.n 8031058 <tcp_receive+0x244>
- }
- } else if (pcb->dupacks == 3) {
- 8030efa: f040 80ad bne.w 8031058 <tcp_receive+0x244>
- /* Do fast retransmit */
- tcp_rexmit_fast(pcb);
- 8030efe: 4620 mov r0, r4
- 8030f00: f001 fa92 bl 8032428 <tcp_rexmit_fast>
- 8030f04: e0a8 b.n 8031058 <tcp_receive+0x244>
- /* If Clause (1) or more is true, but not a duplicate ack, reset
- * count of consecutive duplicate acks */
- if (!found_dupack) {
- pcb->dupacks = 0;
- }
- } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)){
- 8030f06: 43d1 mvns r1, r2
- 8030f08: 42d9 cmn r1, r3
- 8030f0a: d47e bmi.n 803100a <tcp_receive+0x1f6>
- 8030f0c: 6d21 ldr r1, [r4, #80] ; 0x50
- 8030f0e: 1a59 subs r1, r3, r1
- 8030f10: 2900 cmp r1, #0
- 8030f12: dc7a bgt.n 803100a <tcp_receive+0x1f6>
- /* We come here when the ACK acknowledges new data. */
- /* Reset the "IN Fast Retransmit" flag, since we are no longer
- in fast retransmit. Also reset the congestion window to the
- slow start threshold. */
- if (pcb->flags & TF_INFR) {
- 8030f14: 7fa1 ldrb r1, [r4, #30]
- 8030f16: f001 0004 and.w r0, r1, #4
- 8030f1a: b2c0 uxtb r0, r0
- 8030f1c: b130 cbz r0, 8030f2c <tcp_receive+0x118>
- pcb->flags &= ~TF_INFR;
- 8030f1e: f021 0104 bic.w r1, r1, #4
- 8030f22: 77a1 strb r1, [r4, #30]
- pcb->cwnd = pcb->ssthresh;
- 8030f24: f8b4 104e ldrh.w r1, [r4, #78] ; 0x4e
- 8030f28: f8a4 104c strh.w r1, [r4, #76] ; 0x4c
- /* Reset the number of retransmissions. */
- pcb->nrtx = 0;
- /* Reset the retransmission time-out. */
- pcb->rto = (pcb->sa >> 3) + pcb->sv;
- 8030f2c: f9b4 5040 ldrsh.w r5, [r4, #64] ; 0x40
- 8030f30: f8b4 0042 ldrh.w r0, [r4, #66] ; 0x42
- pcb->snd_buf += pcb->acked;
- /* Reset the fast retransmit variables. */
- pcb->dupacks = 0;
- pcb->lastack = ackno;
- 8030f34: 64a3 str r3, [r4, #72] ; 0x48
- /* Reset the number of retransmissions. */
- pcb->nrtx = 0;
- /* Reset the retransmission time-out. */
- pcb->rto = (pcb->sa >> 3) + pcb->sv;
- 8030f36: eb00 00e5 add.w r0, r0, r5, asr #3
- /* Update the send buffer space. Diff between the two can never exceed 64K? */
- pcb->acked = (u16_t)(ackno - pcb->lastack);
- 8030f3a: 1a9a subs r2, r3, r2
- /* Reset the number of retransmissions. */
- pcb->nrtx = 0;
- /* Reset the retransmission time-out. */
- pcb->rto = (pcb->sa >> 3) + pcb->sv;
- 8030f3c: f8a4 0044 strh.w r0, [r4, #68] ; 0x44
- pcb->dupacks = 0;
- pcb->lastack = ackno;
- /* Update the congestion control variables (cwnd and
- ssthresh). */
- if (pcb->state >= ESTABLISHED) {
- 8030f40: 7e23 ldrb r3, [r4, #24]
- pcb->rto = (pcb->sa >> 3) + pcb->sv;
- /* Update the send buffer space. Diff between the two can never exceed 64K? */
- pcb->acked = (u16_t)(ackno - pcb->lastack);
- pcb->snd_buf += pcb->acked;
- 8030f42: f8b4 0066 ldrh.w r0, [r4, #102] ; 0x66
- /* Reset the retransmission time-out. */
- pcb->rto = (pcb->sa >> 3) + pcb->sv;
- /* Update the send buffer space. Diff between the two can never exceed 64K? */
- pcb->acked = (u16_t)(ackno - pcb->lastack);
- 8030f46: f8a4 2064 strh.w r2, [r4, #100] ; 0x64
- pcb->flags &= ~TF_INFR;
- pcb->cwnd = pcb->ssthresh;
- }
- /* Reset the number of retransmissions. */
- pcb->nrtx = 0;
- 8030f4a: 2100 movs r1, #0
- pcb->rto = (pcb->sa >> 3) + pcb->sv;
- /* Update the send buffer space. Diff between the two can never exceed 64K? */
- pcb->acked = (u16_t)(ackno - pcb->lastack);
- pcb->snd_buf += pcb->acked;
- 8030f4c: 1812 adds r2, r2, r0
- pcb->dupacks = 0;
- pcb->lastack = ackno;
- /* Update the congestion control variables (cwnd and
- ssthresh). */
- if (pcb->state >= ESTABLISHED) {
- 8030f4e: 2b03 cmp r3, #3
- pcb->flags &= ~TF_INFR;
- pcb->cwnd = pcb->ssthresh;
- }
- /* Reset the number of retransmissions. */
- pcb->nrtx = 0;
- 8030f50: f884 1046 strb.w r1, [r4, #70] ; 0x46
- pcb->rto = (pcb->sa >> 3) + pcb->sv;
- /* Update the send buffer space. Diff between the two can never exceed 64K? */
- pcb->acked = (u16_t)(ackno - pcb->lastack);
- pcb->snd_buf += pcb->acked;
- 8030f54: f8a4 2066 strh.w r2, [r4, #102] ; 0x66
- /* Reset the fast retransmit variables. */
- pcb->dupacks = 0;
- 8030f58: f884 1047 strb.w r1, [r4, #71] ; 0x47
- pcb->lastack = ackno;
- /* Update the congestion control variables (cwnd and
- ssthresh). */
- if (pcb->state >= ESTABLISHED) {
- 8030f5c: d931 bls.n 8030fc2 <tcp_receive+0x1ae>
- if (pcb->cwnd < pcb->ssthresh) {
- 8030f5e: f8b4 204e ldrh.w r2, [r4, #78] ; 0x4e
- 8030f62: f8b4 304c ldrh.w r3, [r4, #76] ; 0x4c
- 8030f66: 429a cmp r2, r3
- if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) {
- 8030f68: 8ee2 ldrh r2, [r4, #54] ; 0x36
- pcb->lastack = ackno;
- /* Update the congestion control variables (cwnd and
- ssthresh). */
- if (pcb->state >= ESTABLISHED) {
- if (pcb->cwnd < pcb->ssthresh) {
- 8030f6a: d900 bls.n 8030f6e <tcp_receive+0x15a>
- 8030f6c: e002 b.n 8030f74 <tcp_receive+0x160>
- if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) {
- pcb->cwnd += pcb->mss;
- }
- LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: slow start cwnd %"U16_F"\n", pcb->cwnd));
- } else {
- u16_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd);
- 8030f6e: 4352 muls r2, r2
- 8030f70: fb92 f2f3 sdiv r2, r2, r3
- 8030f74: 189a adds r2, r3, r2
- 8030f76: b292 uxth r2, r2
- if (new_cwnd > pcb->cwnd) {
- 8030f78: 429a cmp r2, r3
- 8030f7a: d922 bls.n 8030fc2 <tcp_receive+0x1ae>
- pcb->cwnd = new_cwnd;
- 8030f7c: f8a4 204c strh.w r2, [r4, #76] ; 0x4c
- 8030f80: e01f b.n 8030fc2 <tcp_receive+0x1ae>
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unacked\n",
- ntohl(pcb->unacked->tcphdr->seqno),
- ntohl(pcb->unacked->tcphdr->seqno) +
- TCP_TCPLEN(pcb->unacked)));
- next = pcb->unacked;
- 8030f82: 6f25 ldr r5, [r4, #112] ; 0x70
- pcb->unacked = pcb->unacked->next;
- 8030f84: 682b ldr r3, [r5, #0]
- LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen));
- LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p)));
- 8030f86: 6868 ldr r0, [r5, #4]
- ntohl(pcb->unacked->tcphdr->seqno),
- ntohl(pcb->unacked->tcphdr->seqno) +
- TCP_TCPLEN(pcb->unacked)));
- next = pcb->unacked;
- pcb->unacked = pcb->unacked->next;
- 8030f88: 6723 str r3, [r4, #112] ; 0x70
- LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen));
- LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p)));
- 8030f8a: f7ff f813 bl 802ffb4 <pbuf_clen>
- /* Prevent ACK for FIN to generate a sent event */
- if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) {
- 8030f8e: f8b4 3064 ldrh.w r3, [r4, #100] ; 0x64
- 8030f92: b153 cbz r3, 8030faa <tcp_receive+0x196>
- 8030f94: 68eb ldr r3, [r5, #12]
- 8030f96: 8998 ldrh r0, [r3, #12]
- 8030f98: f7fd fdff bl 802eb9a <lwip_ntohs>
- 8030f9c: 07c3 lsls r3, r0, #31
- 8030f9e: d504 bpl.n 8030faa <tcp_receive+0x196>
- pcb->acked--;
- 8030fa0: f8b4 3064 ldrh.w r3, [r4, #100] ; 0x64
- 8030fa4: 3b01 subs r3, #1
- 8030fa6: f8a4 3064 strh.w r3, [r4, #100] ; 0x64
- }
- pcb->snd_queuelen -= pbuf_clen(next->p);
- 8030faa: 6868 ldr r0, [r5, #4]
- 8030fac: f8b4 7068 ldrh.w r7, [r4, #104] ; 0x68
- 8030fb0: f7ff f800 bl 802ffb4 <pbuf_clen>
- 8030fb4: 1a38 subs r0, r7, r0
- 8030fb6: f8a4 0068 strh.w r0, [r4, #104] ; 0x68
- tcp_seg_free(next);
- 8030fba: 4628 mov r0, r5
- 8030fbc: f7ff fa55 bl 803046a <tcp_seg_free>
- 8030fc0: e000 b.n 8030fc4 <tcp_receive+0x1b0>
- ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked): 0));
- /* Remove segment from the unacknowledged list if the incoming
- ACK acknowlegdes them. */
- while (pcb->unacked != NULL &&
- TCP_SEQ_LEQ(ntohl(pcb->unacked->tcphdr->seqno) +
- 8030fc2: 4e38 ldr r6, [pc, #224] ; (80310a4 <tcp_receive+0x290>)
- pcb->unacked != NULL?
- ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked): 0));
- /* Remove segment from the unacknowledged list if the incoming
- ACK acknowlegdes them. */
- while (pcb->unacked != NULL &&
- 8030fc4: 6f23 ldr r3, [r4, #112] ; 0x70
- 8030fc6: b91b cbnz r3, 8030fd0 <tcp_receive+0x1bc>
- }
- }
- /* If there's nothing left to acknowledge, stop the retransmit
- timer, otherwise reset it to start again */
- if(pcb->unacked == NULL)
- 8030fc8: 6f22 ldr r2, [r4, #112] ; 0x70
- 8030fca: 2300 movs r3, #0
- 8030fcc: b9d2 cbnz r2, 8031004 <tcp_receive+0x1f0>
- 8030fce: e015 b.n 8030ffc <tcp_receive+0x1e8>
- ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked): 0));
- /* Remove segment from the unacknowledged list if the incoming
- ACK acknowlegdes them. */
- while (pcb->unacked != NULL &&
- TCP_SEQ_LEQ(ntohl(pcb->unacked->tcphdr->seqno) +
- 8030fd0: 68db ldr r3, [r3, #12]
- 8030fd2: 6858 ldr r0, [r3, #4]
- 8030fd4: f7fd fde8 bl 802eba8 <lwip_ntohl>
- 8030fd8: 6f23 ldr r3, [r4, #112] ; 0x70
- 8030fda: 891d ldrh r5, [r3, #8]
- 8030fdc: 68db ldr r3, [r3, #12]
- 8030fde: 4607 mov r7, r0
- 8030fe0: 8998 ldrh r0, [r3, #12]
- 8030fe2: f7fd fdda bl 802eb9a <lwip_ntohs>
- 8030fe6: 6833 ldr r3, [r6, #0]
- 8030fe8: f010 0003 ands.w r0, r0, #3
- 8030fec: bf18 it ne
- 8030fee: 2001 movne r0, #1
- 8030ff0: 1afb subs r3, r7, r3
- 8030ff2: 1828 adds r0, r5, r0
- 8030ff4: 181b adds r3, r3, r0
- pcb->unacked != NULL?
- ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked): 0));
- /* Remove segment from the unacknowledged list if the incoming
- ACK acknowlegdes them. */
- while (pcb->unacked != NULL &&
- 8030ff6: 2b00 cmp r3, #0
- 8030ff8: ddc3 ble.n 8030f82 <tcp_receive+0x16e>
- 8030ffa: e7e5 b.n 8030fc8 <tcp_receive+0x1b4>
- }
- /* If there's nothing left to acknowledge, stop the retransmit
- timer, otherwise reset it to start again */
- if(pcb->unacked == NULL)
- pcb->rtime = -1;
- 8030ffc: f64f 72ff movw r2, #65535 ; 0xffff
- 8031000: 86a2 strh r2, [r4, #52] ; 0x34
- 8031002: e000 b.n 8031006 <tcp_receive+0x1f2>
- else
- pcb->rtime = 0;
- 8031004: 86a3 strh r3, [r4, #52] ; 0x34
- pcb->polltmr = 0;
- 8031006: 77e3 strb r3, [r4, #31]
- 8031008: e026 b.n 8031058 <tcp_receive+0x244>
- } else {
- /* Fix bug bug #21582: out of sequence ACK, didn't really ack anything */
- pcb->acked = 0;
- 803100a: 2300 movs r3, #0
- 803100c: f8a4 3064 strh.w r3, [r4, #100] ; 0x64
- 8031010: e022 b.n 8031058 <tcp_receive+0x244>
- TCP_TCPLEN(pcb->unsent), pcb->snd_nxt)) {
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unsent\n",
- ntohl(pcb->unsent->tcphdr->seqno), ntohl(pcb->unsent->tcphdr->seqno) +
- TCP_TCPLEN(pcb->unsent)));
- next = pcb->unsent;
- 8031012: 6ee5 ldr r5, [r4, #108] ; 0x6c
- pcb->unsent = pcb->unsent->next;
- 8031014: 682b ldr r3, [r5, #0]
- 8031016: 66e3 str r3, [r4, #108] ; 0x6c
- #if TCP_OVERSIZE
- if (pcb->unsent == NULL) {
- 8031018: b90b cbnz r3, 803101e <tcp_receive+0x20a>
- pcb->unsent_oversize = 0;
- 803101a: f8a4 306a strh.w r3, [r4, #106] ; 0x6a
- }
- #endif /* TCP_OVERSIZE */
- LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen));
- LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p)));
- 803101e: 6868 ldr r0, [r5, #4]
- 8031020: f7fe ffc8 bl 802ffb4 <pbuf_clen>
- /* Prevent ACK for FIN to generate a sent event */
- if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) {
- 8031024: f8b4 3064 ldrh.w r3, [r4, #100] ; 0x64
- 8031028: b153 cbz r3, 8031040 <tcp_receive+0x22c>
- 803102a: 68eb ldr r3, [r5, #12]
- 803102c: 8998 ldrh r0, [r3, #12]
- 803102e: f7fd fdb4 bl 802eb9a <lwip_ntohs>
- 8031032: 07c7 lsls r7, r0, #31
- 8031034: d504 bpl.n 8031040 <tcp_receive+0x22c>
- pcb->acked--;
- 8031036: f8b4 3064 ldrh.w r3, [r4, #100] ; 0x64
- 803103a: 3b01 subs r3, #1
- 803103c: f8a4 3064 strh.w r3, [r4, #100] ; 0x64
- }
- pcb->snd_queuelen -= pbuf_clen(next->p);
- 8031040: 6868 ldr r0, [r5, #4]
- 8031042: f8b4 7068 ldrh.w r7, [r4, #104] ; 0x68
- 8031046: f7fe ffb5 bl 802ffb4 <pbuf_clen>
- 803104a: 1a38 subs r0, r7, r0
- 803104c: f8a4 0068 strh.w r0, [r4, #104] ; 0x68
- tcp_seg_free(next);
- 8031050: 4628 mov r0, r5
- 8031052: f7ff fa0a bl 803046a <tcp_seg_free>
- 8031056: e000 b.n 803105a <tcp_receive+0x246>
- strange since an "unsent" segment shouldn't be acked. The
- rationale is that lwIP puts all outstanding segments on the
- ->unsent list after a retransmission, so these segments may
- in fact have been sent once. */
- while (pcb->unsent != NULL &&
- TCP_SEQ_BETWEEN(ackno, ntohl(pcb->unsent->tcphdr->seqno) +
- 8031058: 4e12 ldr r6, [pc, #72] ; (80310a4 <tcp_receive+0x290>)
- on the list are acknowledged by the ACK. This may seem
- strange since an "unsent" segment shouldn't be acked. The
- rationale is that lwIP puts all outstanding segments on the
- ->unsent list after a retransmission, so these segments may
- in fact have been sent once. */
- while (pcb->unsent != NULL &&
- 803105a: 6ee3 ldr r3, [r4, #108] ; 0x6c
- 803105c: b913 cbnz r3, 8031064 <tcp_receive+0x250>
- pcb->rttest, pcb->rtseq, ackno));
- /* RTT estimation calculations. This is done by checking if the
- incoming segment acknowledges the segment we use to take a
- round-trip time measurement. */
- if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) {
- 803105e: 6ba3 ldr r3, [r4, #56] ; 0x38
- 8031060: bb33 cbnz r3, 80310b0 <tcp_receive+0x29c>
- 8031062: e04d b.n 8031100 <tcp_receive+0x2ec>
- strange since an "unsent" segment shouldn't be acked. The
- rationale is that lwIP puts all outstanding segments on the
- ->unsent list after a retransmission, so these segments may
- in fact have been sent once. */
- while (pcb->unsent != NULL &&
- TCP_SEQ_BETWEEN(ackno, ntohl(pcb->unsent->tcphdr->seqno) +
- 8031064: 68db ldr r3, [r3, #12]
- 8031066: 6835 ldr r5, [r6, #0]
- 8031068: 6858 ldr r0, [r3, #4]
- 803106a: f7fd fd9d bl 802eba8 <lwip_ntohl>
- 803106e: 6ee3 ldr r3, [r4, #108] ; 0x6c
- 8031070: 891f ldrh r7, [r3, #8]
- 8031072: 68db ldr r3, [r3, #12]
- 8031074: 4680 mov r8, r0
- 8031076: 8998 ldrh r0, [r3, #12]
- 8031078: f7fd fd8f bl 802eb9a <lwip_ntohs>
- 803107c: f010 0003 ands.w r0, r0, #3
- 8031080: bf18 it ne
- 8031082: 2001 movne r0, #1
- 8031084: ebc8 0505 rsb r5, r8, r5
- 8031088: 1838 adds r0, r7, r0
- 803108a: 1a2d subs r5, r5, r0
- on the list are acknowledged by the ACK. This may seem
- strange since an "unsent" segment shouldn't be acked. The
- rationale is that lwIP puts all outstanding segments on the
- ->unsent list after a retransmission, so these segments may
- in fact have been sent once. */
- while (pcb->unsent != NULL &&
- 803108c: 2d00 cmp r5, #0
- 803108e: dbe6 blt.n 803105e <tcp_receive+0x24a>
- TCP_SEQ_BETWEEN(ackno, ntohl(pcb->unsent->tcphdr->seqno) +
- 8031090: 6832 ldr r2, [r6, #0]
- 8031092: 6d23 ldr r3, [r4, #80] ; 0x50
- 8031094: 1ad3 subs r3, r2, r3
- 8031096: 2b00 cmp r3, #0
- 8031098: ddbb ble.n 8031012 <tcp_receive+0x1fe>
- 803109a: e7e0 b.n 803105e <tcp_receive+0x24a>
- 803109c: 2000c3f0 .word 0x2000c3f0
- 80310a0: 2000c3e4 .word 0x2000c3e4
- 80310a4: 2000c3ec .word 0x2000c3ec
- 80310a8: 2000c3e0 .word 0x2000c3e0
- 80310ac: 2000c3e8 .word 0x2000c3e8
- pcb->rttest, pcb->rtseq, ackno));
- /* RTT estimation calculations. This is done by checking if the
- incoming segment acknowledges the segment we use to take a
- round-trip time measurement. */
- if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) {
- 80310b0: 497b ldr r1, [pc, #492] ; (80312a0 <tcp_receive+0x48c>)
- 80310b2: 6be2 ldr r2, [r4, #60] ; 0x3c
- 80310b4: 6809 ldr r1, [r1, #0]
- 80310b6: 1a52 subs r2, r2, r1
- 80310b8: 2a00 cmp r2, #0
- 80310ba: da21 bge.n 8031100 <tcp_receive+0x2ec>
- /* diff between this shouldn't exceed 32K since this are tcp timer ticks
- and a round-trip shouldn't be that long... */
- m = (s16_t)(tcp_ticks - pcb->rttest);
- 80310bc: 4a79 ldr r2, [pc, #484] ; (80312a4 <tcp_receive+0x490>)
- LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n",
- m, m * TCP_SLOW_INTERVAL));
- /* This is taken directly from VJs original code in his paper */
- m = m - (pcb->sa >> 3);
- 80310be: f8b4 1040 ldrh.w r1, [r4, #64] ; 0x40
- incoming segment acknowledges the segment we use to take a
- round-trip time measurement. */
- if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) {
- /* diff between this shouldn't exceed 32K since this are tcp timer ticks
- and a round-trip shouldn't be that long... */
- m = (s16_t)(tcp_ticks - pcb->rttest);
- 80310c2: 6812 ldr r2, [r2, #0]
- LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n",
- m, m * TCP_SLOW_INTERVAL));
- /* This is taken directly from VJs original code in his paper */
- m = m - (pcb->sa >> 3);
- 80310c4: f341 00cc sbfx r0, r1, #3, #13
- incoming segment acknowledges the segment we use to take a
- round-trip time measurement. */
- if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) {
- /* diff between this shouldn't exceed 32K since this are tcp timer ticks
- and a round-trip shouldn't be that long... */
- m = (s16_t)(tcp_ticks - pcb->rttest);
- 80310c8: 1ad2 subs r2, r2, r3
- LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n",
- m, m * TCP_SLOW_INTERVAL));
- /* This is taken directly from VJs original code in his paper */
- m = m - (pcb->sa >> 3);
- 80310ca: 1a12 subs r2, r2, r0
- 80310cc: b292 uxth r2, r2
- 80310ce: b293 uxth r3, r2
- pcb->sa += m;
- 80310d0: 1851 adds r1, r2, r1
- 80310d2: b289 uxth r1, r1
- if (m < 0) {
- 80310d4: 0418 lsls r0, r3, #16
- LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n",
- m, m * TCP_SLOW_INTERVAL));
- /* This is taken directly from VJs original code in his paper */
- m = m - (pcb->sa >> 3);
- pcb->sa += m;
- 80310d6: f8a4 1040 strh.w r1, [r4, #64] ; 0x40
- if (m < 0) {
- 80310da: d501 bpl.n 80310e0 <tcp_receive+0x2cc>
- m = -m;
- 80310dc: 4253 negs r3, r2
- 80310de: b29b uxth r3, r3
- }
- m = m - (pcb->sv >> 2);
- 80310e0: f8b4 2042 ldrh.w r2, [r4, #66] ; 0x42
- 80310e4: f342 008d sbfx r0, r2, #2, #14
- 80310e8: 1a12 subs r2, r2, r0
- pcb->sv += m;
- 80310ea: 18d3 adds r3, r2, r3
- 80310ec: b29b uxth r3, r3
- pcb->rto = (pcb->sa >> 3) + pcb->sv;
- 80310ee: f341 01cc sbfx r1, r1, #3, #13
- pcb->sa += m;
- if (m < 0) {
- m = -m;
- }
- m = m - (pcb->sv >> 2);
- pcb->sv += m;
- 80310f2: f8a4 3042 strh.w r3, [r4, #66] ; 0x42
- pcb->rto = (pcb->sa >> 3) + pcb->sv;
- 80310f6: 185b adds r3, r3, r1
- 80310f8: f8a4 3044 strh.w r3, [r4, #68] ; 0x44
- LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: RTO %"U16_F" (%"U16_F" milliseconds)\n",
- pcb->rto, pcb->rto * TCP_SLOW_INTERVAL));
- pcb->rttest = 0;
- 80310fc: 2300 movs r3, #0
- 80310fe: 63a3 str r3, [r4, #56] ; 0x38
- /* If the incoming segment contains data, we must process it
- further unless the pcb already received a FIN.
- (RFC 793, chapeter 3.9, "SEGMENT ARRIVES" in states CLOSE-WAIT, CLOSING,
- LAST-ACK and TIME-WAIT: "Ignore the segment text.") */
- if ((tcplen > 0) && (pcb->state < CLOSE_WAIT)) {
- 8031100: 4b69 ldr r3, [pc, #420] ; (80312a8 <tcp_receive+0x494>)
- 8031102: 4a6a ldr r2, [pc, #424] ; (80312ac <tcp_receive+0x498>)
- 8031104: 8818 ldrh r0, [r3, #0]
- 8031106: 2800 cmp r0, #0
- 8031108: f000 80b3 beq.w 8031272 <tcp_receive+0x45e>
- 803110c: 7e23 ldrb r3, [r4, #24]
- 803110e: 2b06 cmp r3, #6
- 8031110: f200 80af bhi.w 8031272 <tcp_receive+0x45e>
- this if the sequence number of the incoming segment is less
- than rcv_nxt, and the sequence number plus the length of the
- segment is larger than rcv_nxt. */
- /* if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){
- if (TCP_SEQ_LT(pcb->rcv_nxt, seqno + tcplen)) {*/
- if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)){
- 8031114: 6811 ldr r1, [r2, #0]
- 8031116: 6aa3 ldr r3, [r4, #40] ; 0x28
- 8031118: 43ca mvns r2, r1
- 803111a: 42da cmn r2, r3
- 803111c: d425 bmi.n 803116a <tcp_receive+0x356>
- 803111e: 1c5a adds r2, r3, #1
- 8031120: 1a52 subs r2, r2, r1
- 8031122: 1a10 subs r0, r2, r0
- 8031124: 2800 cmp r0, #0
- 8031126: dc20 bgt.n 803116a <tcp_receive+0x356>
- After we are done with adjusting the pbuf pointers we must
- adjust the ->data pointer in the seg and the segment
- length.*/
- off = pcb->rcv_nxt - seqno;
- 8031128: 1a59 subs r1, r3, r1
- p = inseg.p;
- 803112a: 4b61 ldr r3, [pc, #388] ; (80312b0 <tcp_receive+0x49c>)
- 803112c: 6858 ldr r0, [r3, #4]
- LWIP_ASSERT("inseg.p != NULL", inseg.p);
- LWIP_ASSERT("insane offset!", (off < 0x7fff));
- if (inseg.p->len < off) {
- 803112e: 8943 ldrh r3, [r0, #10]
- 8031130: 428b cmp r3, r1
- 8031132: da0a bge.n 803114a <tcp_receive+0x336>
- LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off));
- new_tot_len = (u16_t)(inseg.p->tot_len - off);
- 8031134: 8902 ldrh r2, [r0, #8]
- off -= p->len;
- /* KJM following line changed (with addition of new_tot_len var)
- to fix bug #9076
- inseg.p->tot_len -= p->len; */
- p->tot_len = new_tot_len;
- p->len = 0;
- 8031136: 2500 movs r5, #0
- p = inseg.p;
- LWIP_ASSERT("inseg.p != NULL", inseg.p);
- LWIP_ASSERT("insane offset!", (off < 0x7fff));
- if (inseg.p->len < off) {
- LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off));
- new_tot_len = (u16_t)(inseg.p->tot_len - off);
- 8031138: 1a52 subs r2, r2, r1
- while (p->len < off) {
- 803113a: e003 b.n 8031144 <tcp_receive+0x330>
- off -= p->len;
- /* KJM following line changed (with addition of new_tot_len var)
- to fix bug #9076
- inseg.p->tot_len -= p->len; */
- p->tot_len = new_tot_len;
- 803113c: 8102 strh r2, [r0, #8]
- p->len = 0;
- 803113e: 8145 strh r5, [r0, #10]
- p = p->next;
- 8031140: 6800 ldr r0, [r0, #0]
- LWIP_ASSERT("insane offset!", (off < 0x7fff));
- if (inseg.p->len < off) {
- LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off));
- new_tot_len = (u16_t)(inseg.p->tot_len - off);
- while (p->len < off) {
- off -= p->len;
- 8031142: 1ac9 subs r1, r1, r3
- LWIP_ASSERT("inseg.p != NULL", inseg.p);
- LWIP_ASSERT("insane offset!", (off < 0x7fff));
- if (inseg.p->len < off) {
- LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off));
- new_tot_len = (u16_t)(inseg.p->tot_len - off);
- while (p->len < off) {
- 8031144: 8943 ldrh r3, [r0, #10]
- 8031146: 428b cmp r3, r1
- 8031148: dbf8 blt.n 803113c <tcp_receive+0x328>
- if(pbuf_header(p, (s16_t)-off)) {
- /* Do we need to cope with this failing? Assert for now */
- LWIP_ASSERT("pbuf_header failed", 0);
- }
- } else {
- if(pbuf_header(inseg.p, (s16_t)-off)) {
- 803114a: 4249 negs r1, r1
- 803114c: b209 sxth r1, r1
- 803114e: f7fe fe32 bl 802fdb6 <pbuf_header>
- /* Do we need to cope with this failing? Assert for now */
- LWIP_ASSERT("pbuf_header failed", 0);
- }
- }
- inseg.len -= (u16_t)(pcb->rcv_nxt - seqno);
- 8031152: 4a57 ldr r2, [pc, #348] ; (80312b0 <tcp_receive+0x49c>)
- 8031154: 4955 ldr r1, [pc, #340] ; (80312ac <tcp_receive+0x498>)
- 8031156: 8915 ldrh r5, [r2, #8]
- 8031158: 6808 ldr r0, [r1, #0]
- 803115a: 6aa3 ldr r3, [r4, #40] ; 0x28
- 803115c: 1940 adds r0, r0, r5
- 803115e: 1ac0 subs r0, r0, r3
- 8031160: 8110 strh r0, [r2, #8]
- inseg.tcphdr->seqno = seqno = pcb->rcv_nxt;
- 8031162: 68d2 ldr r2, [r2, #12]
- 8031164: 600b str r3, [r1, #0]
- 8031166: 6053 str r3, [r2, #4]
- 8031168: e006 b.n 8031178 <tcp_receive+0x364>
- }
- else {
- if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){
- 803116a: 1ac9 subs r1, r1, r3
- 803116c: 2900 cmp r1, #0
- 803116e: da03 bge.n 8031178 <tcp_receive+0x364>
- /* the whole segment is < rcv_nxt */
- /* must be a duplicate of a packet that has already been correctly handled */
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: duplicate seqno %"U32_F"\n", seqno));
- tcp_ack_now(pcb);
- 8031170: 7fa3 ldrb r3, [r4, #30]
- 8031172: f043 0302 orr.w r3, r3, #2
- 8031176: 77a3 strb r3, [r4, #30]
- }
- /* The sequence number must be within the window (above rcv_nxt
- and below rcv_nxt + rcv_wnd) in order to be further
- processed. */
- if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt,
- 8031178: 4b4c ldr r3, [pc, #304] ; (80312ac <tcp_receive+0x498>)
- 803117a: 6aa2 ldr r2, [r4, #40] ; 0x28
- 803117c: 681b ldr r3, [r3, #0]
- 803117e: 1a99 subs r1, r3, r2
- 8031180: 2900 cmp r1, #0
- 8031182: db71 blt.n 8031268 <tcp_receive+0x454>
- 8031184: 1c59 adds r1, r3, #1
- 8031186: 8da0 ldrh r0, [r4, #44] ; 0x2c
- 8031188: 1a89 subs r1, r1, r2
- 803118a: 1a09 subs r1, r1, r0
- 803118c: 2900 cmp r1, #0
- 803118e: dc6b bgt.n 8031268 <tcp_receive+0x454>
- pcb->rcv_nxt + pcb->rcv_wnd - 1)){
- if (pcb->rcv_nxt == seqno) {
- 8031190: 429a cmp r2, r3
- 8031192: d169 bne.n 8031268 <tcp_receive+0x454>
- /* The incoming segment is the next in sequence. We check if
- we have to trim the end of the segment and update rcv_nxt
- and pass the data to the application. */
- tcplen = TCP_TCPLEN(&inseg);
- 8031194: 4d46 ldr r5, [pc, #280] ; (80312b0 <tcp_receive+0x49c>)
- 8031196: 68eb ldr r3, [r5, #12]
- 8031198: 892e ldrh r6, [r5, #8]
- 803119a: 8998 ldrh r0, [r3, #12]
- 803119c: f7fd fcfd bl 802eb9a <lwip_ntohs>
- 80311a0: f010 0003 ands.w r0, r0, #3
- 80311a4: bf18 it ne
- 80311a6: 2001 movne r0, #1
- 80311a8: 4b3f ldr r3, [pc, #252] ; (80312a8 <tcp_receive+0x494>)
- 80311aa: 1830 adds r0, r6, r0
- 80311ac: b280 uxth r0, r0
- 80311ae: 8018 strh r0, [r3, #0]
- if (tcplen > pcb->rcv_wnd) {
- 80311b0: 8da3 ldrh r3, [r4, #44] ; 0x2c
- 80311b2: 4283 cmp r3, r0
- 80311b4: d230 bcs.n 8031218 <tcp_receive+0x404>
- LWIP_DEBUGF(TCP_INPUT_DEBUG,
- ("tcp_receive: other end overran receive window"
- "seqno %"U32_F" len %"U16_F" right edge %"U32_F"\n",
- seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd));
- if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) {
- 80311b6: 68eb ldr r3, [r5, #12]
- 80311b8: 8998 ldrh r0, [r3, #12]
- 80311ba: f7fd fcee bl 802eb9a <lwip_ntohs>
- 80311be: 07c0 lsls r0, r0, #31
- 80311c0: d50c bpl.n 80311dc <tcp_receive+0x3c8>
- /* Must remove the FIN from the header as we're trimming
- * that byte of sequence-space from the packet */
- TCPH_FLAGS_SET(inseg.tcphdr, TCPH_FLAGS(inseg.tcphdr) &~ TCP_FIN);
- 80311c2: 68ed ldr r5, [r5, #12]
- 80311c4: 89ae ldrh r6, [r5, #12]
- 80311c6: 4630 mov r0, r6
- 80311c8: f7fd fce7 bl 802eb9a <lwip_ntohs>
- 80311cc: f000 003e and.w r0, r0, #62 ; 0x3e
- 80311d0: f7fd fcde bl 802eb90 <lwip_htons>
- 80311d4: f426 567c bic.w r6, r6, #16128 ; 0x3f00
- 80311d8: 4330 orrs r0, r6
- 80311da: 81a8 strh r0, [r5, #12]
- }
- /* Adjust length of segment to fit in the window. */
- inseg.len = pcb->rcv_wnd;
- 80311dc: 8da3 ldrh r3, [r4, #44] ; 0x2c
- 80311de: 4d34 ldr r5, [pc, #208] ; (80312b0 <tcp_receive+0x49c>)
- 80311e0: 812b strh r3, [r5, #8]
- if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) {
- 80311e2: 68eb ldr r3, [r5, #12]
- 80311e4: 8998 ldrh r0, [r3, #12]
- 80311e6: f7fd fcd8 bl 802eb9a <lwip_ntohs>
- 80311ea: f000 0002 and.w r0, r0, #2
- 80311ee: b280 uxth r0, r0
- 80311f0: b110 cbz r0, 80311f8 <tcp_receive+0x3e4>
- inseg.len -= 1;
- 80311f2: 892b ldrh r3, [r5, #8]
- 80311f4: 3b01 subs r3, #1
- 80311f6: 812b strh r3, [r5, #8]
- }
- pbuf_realloc(inseg.p, inseg.len);
- 80311f8: 6868 ldr r0, [r5, #4]
- 80311fa: 8929 ldrh r1, [r5, #8]
- 80311fc: f7fe fe2d bl 802fe5a <pbuf_realloc>
- tcplen = TCP_TCPLEN(&inseg);
- 8031200: 68eb ldr r3, [r5, #12]
- 8031202: 892e ldrh r6, [r5, #8]
- 8031204: 8998 ldrh r0, [r3, #12]
- 8031206: f7fd fcc8 bl 802eb9a <lwip_ntohs>
- 803120a: f010 0003 ands.w r0, r0, #3
- 803120e: bf18 it ne
- 8031210: 2001 movne r0, #1
- 8031212: 4b25 ldr r3, [pc, #148] ; (80312a8 <tcp_receive+0x494>)
- 8031214: 1830 adds r0, r6, r0
- 8031216: 8018 strh r0, [r3, #0]
- pcb->ooseq = next;
- }
- }
- #endif /* TCP_QUEUE_OOSEQ */
- pcb->rcv_nxt = seqno + tcplen;
- 8031218: 4b23 ldr r3, [pc, #140] ; (80312a8 <tcp_receive+0x494>)
- 803121a: 4a24 ldr r2, [pc, #144] ; (80312ac <tcp_receive+0x498>)
- 803121c: 881b ldrh r3, [r3, #0]
- 803121e: 6812 ldr r2, [r2, #0]
- 8031220: 189a adds r2, r3, r2
- 8031222: 62a2 str r2, [r4, #40] ; 0x28
- /* Update the receiver's (our) window. */
- LWIP_ASSERT("tcp_receive: tcplen > rcv_wnd\n", pcb->rcv_wnd >= tcplen);
- pcb->rcv_wnd -= tcplen;
- 8031224: 8da2 ldrh r2, [r4, #44] ; 0x2c
- 8031226: 1ad3 subs r3, r2, r3
- 8031228: 85a3 strh r3, [r4, #44] ; 0x2c
- tcp_update_rcv_ann_wnd(pcb);
- 803122a: 4620 mov r0, r4
- 803122c: f7ff f8e6 bl 80303fc <tcp_update_rcv_ann_wnd>
- chains its data on this pbuf as well.
- If the segment was a FIN, we set the TF_GOT_FIN flag that will
- be used to indicate to the application that the remote side has
- closed its end of the connection. */
- if (inseg.p->tot_len > 0) {
- 8031230: 4b1f ldr r3, [pc, #124] ; (80312b0 <tcp_receive+0x49c>)
- 8031232: 685a ldr r2, [r3, #4]
- 8031234: 8911 ldrh r1, [r2, #8]
- 8031236: b119 cbz r1, 8031240 <tcp_receive+0x42c>
- recv_data = inseg.p;
- 8031238: 491e ldr r1, [pc, #120] ; (80312b4 <tcp_receive+0x4a0>)
- 803123a: 600a str r2, [r1, #0]
- /* Since this pbuf now is the responsibility of the
- application, we delete our reference to it so that we won't
- (mistakingly) deallocate it. */
- inseg.p = NULL;
- 803123c: 2200 movs r2, #0
- 803123e: 605a str r2, [r3, #4]
- }
- if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) {
- 8031240: 68db ldr r3, [r3, #12]
- 8031242: 8998 ldrh r0, [r3, #12]
- 8031244: f7fd fca9 bl 802eb9a <lwip_ntohs>
- 8031248: 07c1 lsls r1, r0, #31
- 803124a: d504 bpl.n 8031256 <tcp_receive+0x442>
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: received FIN.\n"));
- recv_flags |= TF_GOT_FIN;
- 803124c: 4b1a ldr r3, [pc, #104] ; (80312b8 <tcp_receive+0x4a4>)
- 803124e: 781a ldrb r2, [r3, #0]
- 8031250: f042 0220 orr.w r2, r2, #32
- 8031254: 701a strb r2, [r3, #0]
- }
- #endif /* TCP_QUEUE_OOSEQ */
- /* Acknowledge the segment(s). */
- tcp_ack(pcb);
- 8031256: 7fa3 ldrb r3, [r4, #30]
- 8031258: 07da lsls r2, r3, #31
- 803125a: d502 bpl.n 8031262 <tcp_receive+0x44e>
- 803125c: f023 0301 bic.w r3, r3, #1
- 8031260: e013 b.n 803128a <tcp_receive+0x476>
- 8031262: f043 0301 orr.w r3, r3, #1
- 8031266: e012 b.n 803128e <tcp_receive+0x47a>
- } else {
- /* We get here if the incoming segment is out-of-sequence. */
- tcp_send_empty_ack(pcb);
- 8031268: 4620 mov r0, r4
- TCP_SEQ_GEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/
- if(!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd-1)){
- tcp_ack_now(pcb);
- }
- }
- }
- 803126a: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
- /* Acknowledge the segment(s). */
- tcp_ack(pcb);
- } else {
- /* We get here if the incoming segment is out-of-sequence. */
- tcp_send_empty_ack(pcb);
- 803126e: f000 bf09 b.w 8032084 <tcp_send_empty_ack>
- } else {
- /* Segments with length 0 is taken care of here. Segments that
- fall out of the window are ACKed. */
- /*if (TCP_SEQ_GT(pcb->rcv_nxt, seqno) ||
- TCP_SEQ_GEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/
- if(!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd-1)){
- 8031272: 6812 ldr r2, [r2, #0]
- 8031274: 6aa3 ldr r3, [r4, #40] ; 0x28
- 8031276: 1ad1 subs r1, r2, r3
- 8031278: 2900 cmp r1, #0
- 803127a: db05 blt.n 8031288 <tcp_receive+0x474>
- 803127c: 3201 adds r2, #1
- 803127e: 8da1 ldrh r1, [r4, #44] ; 0x2c
- 8031280: 1ad3 subs r3, r2, r3
- 8031282: 1a5b subs r3, r3, r1
- 8031284: 2b00 cmp r3, #0
- 8031286: dd09 ble.n 803129c <tcp_receive+0x488>
- tcp_ack_now(pcb);
- 8031288: 7fa3 ldrb r3, [r4, #30]
- 803128a: f043 0302 orr.w r3, r3, #2
- 803128e: 77a3 strb r3, [r4, #30]
- 8031290: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- }
- }
- /* If Clause (1) or more is true, but not a duplicate ack, reset
- * count of consecutive duplicate acks */
- if (!found_dupack) {
- pcb->dupacks = 0;
- 8031294: 2300 movs r3, #0
- 8031296: f884 3047 strb.w r3, [r4, #71] ; 0x47
- 803129a: e6dd b.n 8031058 <tcp_receive+0x244>
- 803129c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 80312a0: 2000c3ec .word 0x2000c3ec
- 80312a4: 2000f6c0 .word 0x2000f6c0
- 80312a8: 2000c3e8 .word 0x2000c3e8
- 80312ac: 2000c3e4 .word 0x2000c3e4
- 80312b0: 2000c3fc .word 0x2000c3fc
- 80312b4: 2000c3f4 .word 0x2000c3f4
- 80312b8: 2000c3f1 .word 0x2000c3f1
- 080312bc <tcp_input>:
- * @param p received TCP segment to process (p->payload pointing to the IP header)
- * @param inp network interface on which this segment was received
- */
- void
- tcp_input(struct pbuf *p, struct netif *inp)
- {
- 80312bc: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 80312c0: 4606 mov r6, r0
- 80312c2: 460f mov r7, r1
- err_t err;
- PERF_START;
- TCP_STATS_INC(tcp.recv);
- snmp_inc_tcpinsegs();
- 80312c4: f003 fcc0 bl 8034c48 <snmp_inc_tcpinsegs>
- iphdr = (struct ip_hdr *)p->payload;
- 80312c8: 6873 ldr r3, [r6, #4]
- 80312ca: 4aa7 ldr r2, [pc, #668] ; (8031568 <tcp_input+0x2ac>)
- tcphdr = (struct tcp_hdr *)((u8_t *)p->payload + IPH_HL(iphdr) * 4);
- 80312cc: 4ca7 ldr r4, [pc, #668] ; (803156c <tcp_input+0x2b0>)
- PERF_START;
- TCP_STATS_INC(tcp.recv);
- snmp_inc_tcpinsegs();
- iphdr = (struct ip_hdr *)p->payload;
- 80312ce: 6013 str r3, [r2, #0]
- tcphdr = (struct tcp_hdr *)((u8_t *)p->payload + IPH_HL(iphdr) * 4);
- 80312d0: 781a ldrb r2, [r3, #0]
- 80312d2: f002 020f and.w r2, r2, #15
- #if TCP_INPUT_DEBUG
- tcp_debug_print(tcphdr);
- #endif
- /* remove header from payload */
- if (pbuf_header(p, -((s16_t)(IPH_HL(iphdr) * 4))) || (p->tot_len < sizeof(struct tcp_hdr))) {
- 80312d6: 0091 lsls r1, r2, #2
- TCP_STATS_INC(tcp.recv);
- snmp_inc_tcpinsegs();
- iphdr = (struct ip_hdr *)p->payload;
- tcphdr = (struct tcp_hdr *)((u8_t *)p->payload + IPH_HL(iphdr) * 4);
- 80312d8: eb03 0382 add.w r3, r3, r2, lsl #2
- #if TCP_INPUT_DEBUG
- tcp_debug_print(tcphdr);
- #endif
- /* remove header from payload */
- if (pbuf_header(p, -((s16_t)(IPH_HL(iphdr) * 4))) || (p->tot_len < sizeof(struct tcp_hdr))) {
- 80312dc: 4630 mov r0, r6
- 80312de: 4249 negs r1, r1
- TCP_STATS_INC(tcp.recv);
- snmp_inc_tcpinsegs();
- iphdr = (struct ip_hdr *)p->payload;
- tcphdr = (struct tcp_hdr *)((u8_t *)p->payload + IPH_HL(iphdr) * 4);
- 80312e0: 6023 str r3, [r4, #0]
- #if TCP_INPUT_DEBUG
- tcp_debug_print(tcphdr);
- #endif
- /* remove header from payload */
- if (pbuf_header(p, -((s16_t)(IPH_HL(iphdr) * 4))) || (p->tot_len < sizeof(struct tcp_hdr))) {
- 80312e2: f7fe fd68 bl 802fdb6 <pbuf_header>
- 80312e6: 2800 cmp r0, #0
- 80312e8: f040 83ce bne.w 8031a88 <tcp_input+0x7cc>
- 80312ec: 8933 ldrh r3, [r6, #8]
- 80312ee: 2b13 cmp r3, #19
- 80312f0: f240 83ca bls.w 8031a88 <tcp_input+0x7cc>
- TCP_STATS_INC(tcp.lenerr);
- goto dropped;
- }
- /* Don't even process incoming broadcasts/multicasts. */
- if (ip_addr_isbroadcast(¤t_iphdr_dest, inp) ||
- 80312f4: 4d9e ldr r5, [pc, #632] ; (8031570 <tcp_input+0x2b4>)
- 80312f6: 4639 mov r1, r7
- 80312f8: 6828 ldr r0, [r5, #0]
- 80312fa: f001 fd43 bl 8032d84 <ip4_addr_isbroadcast>
- 80312fe: 2800 cmp r0, #0
- 8031300: f040 83c2 bne.w 8031a88 <tcp_input+0x7cc>
- ip_addr_ismulticast(¤t_iphdr_dest)) {
- 8031304: 682b ldr r3, [r5, #0]
- 8031306: f003 03f0 and.w r3, r3, #240 ; 0xf0
- TCP_STATS_INC(tcp.lenerr);
- goto dropped;
- }
- /* Don't even process incoming broadcasts/multicasts. */
- if (ip_addr_isbroadcast(¤t_iphdr_dest, inp) ||
- 803130a: 2be0 cmp r3, #224 ; 0xe0
- 803130c: f000 83bc beq.w 8031a88 <tcp_input+0x7cc>
- }
- #endif
- /* Move the payload pointer in the pbuf so that it points to the
- TCP data instead of the TCP header. */
- hdrlen = TCPH_HDRLEN(tcphdr);
- 8031310: 6823 ldr r3, [r4, #0]
- 8031312: 8998 ldrh r0, [r3, #12]
- 8031314: f7fd fc41 bl 802eb9a <lwip_ntohs>
- if(pbuf_header(p, -(hdrlen * 4))){
- 8031318: f06f 0103 mvn.w r1, #3
- 803131c: f3c0 3307 ubfx r3, r0, #12, #8
- 8031320: 4359 muls r1, r3
- 8031322: 4630 mov r0, r6
- 8031324: f7fe fd47 bl 802fdb6 <pbuf_header>
- 8031328: 4683 mov fp, r0
- 803132a: 2800 cmp r0, #0
- 803132c: f040 83ac bne.w 8031a88 <tcp_input+0x7cc>
- TCP_STATS_INC(tcp.lenerr);
- goto dropped;
- }
- /* Convert fields in TCP header to host byte order. */
- tcphdr->src = ntohs(tcphdr->src);
- 8031330: 6827 ldr r7, [r4, #0]
- 8031332: 8838 ldrh r0, [r7, #0]
- 8031334: f7fd fc31 bl 802eb9a <lwip_ntohs>
- 8031338: 8038 strh r0, [r7, #0]
- tcphdr->dest = ntohs(tcphdr->dest);
- 803133a: 6827 ldr r7, [r4, #0]
- 803133c: 8878 ldrh r0, [r7, #2]
- 803133e: f7fd fc2c bl 802eb9a <lwip_ntohs>
- 8031342: 8078 strh r0, [r7, #2]
- seqno = tcphdr->seqno = ntohl(tcphdr->seqno);
- 8031344: 6827 ldr r7, [r4, #0]
- 8031346: 6878 ldr r0, [r7, #4]
- 8031348: f7fd fc2e bl 802eba8 <lwip_ntohl>
- 803134c: 4b89 ldr r3, [pc, #548] ; (8031574 <tcp_input+0x2b8>)
- 803134e: 6078 str r0, [r7, #4]
- ackno = tcphdr->ackno = ntohl(tcphdr->ackno);
- 8031350: 6827 ldr r7, [r4, #0]
- }
- /* Convert fields in TCP header to host byte order. */
- tcphdr->src = ntohs(tcphdr->src);
- tcphdr->dest = ntohs(tcphdr->dest);
- seqno = tcphdr->seqno = ntohl(tcphdr->seqno);
- 8031352: 6018 str r0, [r3, #0]
- ackno = tcphdr->ackno = ntohl(tcphdr->ackno);
- 8031354: 68b8 ldr r0, [r7, #8]
- 8031356: f7fd fc27 bl 802eba8 <lwip_ntohl>
- 803135a: 4b87 ldr r3, [pc, #540] ; (8031578 <tcp_input+0x2bc>)
- 803135c: 60b8 str r0, [r7, #8]
- tcphdr->wnd = ntohs(tcphdr->wnd);
- 803135e: 6827 ldr r7, [r4, #0]
- /* Convert fields in TCP header to host byte order. */
- tcphdr->src = ntohs(tcphdr->src);
- tcphdr->dest = ntohs(tcphdr->dest);
- seqno = tcphdr->seqno = ntohl(tcphdr->seqno);
- ackno = tcphdr->ackno = ntohl(tcphdr->ackno);
- 8031360: 6018 str r0, [r3, #0]
- tcphdr->wnd = ntohs(tcphdr->wnd);
- 8031362: 89f8 ldrh r0, [r7, #14]
- 8031364: f7fd fc19 bl 802eb9a <lwip_ntohs>
- 8031368: 81f8 strh r0, [r7, #14]
- flags = TCPH_FLAGS(tcphdr);
- 803136a: 6823 ldr r3, [r4, #0]
- 803136c: 8998 ldrh r0, [r3, #12]
- 803136e: f7fd fc14 bl 802eb9a <lwip_ntohs>
- 8031372: 4b82 ldr r3, [pc, #520] ; (803157c <tcp_input+0x2c0>)
- tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0);
- 8031374: f8b6 8008 ldrh.w r8, [r6, #8]
-
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED);
- LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT);
- LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN);
- if (pcb->remote_port == tcphdr->src &&
- 8031378: 6827 ldr r7, [r4, #0]
- seqno = tcphdr->seqno = ntohl(tcphdr->seqno);
- ackno = tcphdr->ackno = ntohl(tcphdr->ackno);
- tcphdr->wnd = ntohs(tcphdr->wnd);
- flags = TCPH_FLAGS(tcphdr);
- tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0);
- 803137a: f010 0c03 ands.w ip, r0, #3
- tcphdr->dest = ntohs(tcphdr->dest);
- seqno = tcphdr->seqno = ntohl(tcphdr->seqno);
- ackno = tcphdr->ackno = ntohl(tcphdr->ackno);
- tcphdr->wnd = ntohs(tcphdr->wnd);
- flags = TCPH_FLAGS(tcphdr);
- 803137e: f000 013f and.w r1, r0, #63 ; 0x3f
- tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0);
- 8031382: bf18 it ne
- 8031384: f04f 0c01 movne.w ip, #1
- tcphdr->dest = ntohs(tcphdr->dest);
- seqno = tcphdr->seqno = ntohl(tcphdr->seqno);
- ackno = tcphdr->ackno = ntohl(tcphdr->ackno);
- tcphdr->wnd = ntohs(tcphdr->wnd);
- flags = TCPH_FLAGS(tcphdr);
- 8031388: 7019 strb r1, [r3, #0]
- tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0);
- 803138a: 44c4 add ip, r8
- 803138c: 4b7c ldr r3, [pc, #496] ; (8031580 <tcp_input+0x2c4>)
- LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT);
- LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN);
- if (pcb->remote_port == tcphdr->src &&
- pcb->local_port == tcphdr->dest &&
- ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src) &&
- ip_addr_cmp(&(pcb->local_ip), ¤t_iphdr_dest)) {
- 803138e: 6829 ldr r1, [r5, #0]
- seqno = tcphdr->seqno = ntohl(tcphdr->seqno);
- ackno = tcphdr->ackno = ntohl(tcphdr->ackno);
- tcphdr->wnd = ntohs(tcphdr->wnd);
- flags = TCPH_FLAGS(tcphdr);
- tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0);
- 8031390: fa1f fc8c uxth.w ip, ip
- 8031394: f8a3 c000 strh.w ip, [r3]
- /* Demultiplex an incoming segment. First, we check if it is destined
- for an active connection. */
- prev = NULL;
-
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- 8031398: 4b7a ldr r3, [pc, #488] ; (8031584 <tcp_input+0x2c8>)
- 803139a: f8d3 a000 ldr.w sl, [r3]
- LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED);
- LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT);
- LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN);
- if (pcb->remote_port == tcphdr->src &&
- pcb->local_port == tcphdr->dest &&
- ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src) &&
- 803139e: 4b7a ldr r3, [pc, #488] ; (8031588 <tcp_input+0x2cc>)
- tcphdr->dest = ntohs(tcphdr->dest);
- seqno = tcphdr->seqno = ntohl(tcphdr->seqno);
- ackno = tcphdr->ackno = ntohl(tcphdr->ackno);
- tcphdr->wnd = ntohs(tcphdr->wnd);
- flags = TCPH_FLAGS(tcphdr);
- 80313a0: 4602 mov r2, r0
- LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED);
- LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT);
- LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN);
- if (pcb->remote_port == tcphdr->src &&
- pcb->local_port == tcphdr->dest &&
- ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src) &&
- 80313a2: f8d3 9000 ldr.w r9, [r3]
- /* Demultiplex an incoming segment. First, we check if it is destined
- for an active connection. */
- prev = NULL;
-
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- 80313a6: 4654 mov r4, sl
- flags = TCPH_FLAGS(tcphdr);
- tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0);
- /* Demultiplex an incoming segment. First, we check if it is destined
- for an active connection. */
- prev = NULL;
- 80313a8: 4658 mov r0, fp
-
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- 80313aa: e019 b.n 80313e0 <tcp_input+0x124>
- LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED);
- LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT);
- LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN);
- if (pcb->remote_port == tcphdr->src &&
- 80313ac: 8ba5 ldrh r5, [r4, #28]
- 80313ae: 883b ldrh r3, [r7, #0]
- 80313b0: 429d cmp r5, r3
- 80313b2: d113 bne.n 80313dc <tcp_input+0x120>
- 80313b4: 8b65 ldrh r5, [r4, #26]
- 80313b6: 887b ldrh r3, [r7, #2]
- 80313b8: 429d cmp r5, r3
- 80313ba: d10f bne.n 80313dc <tcp_input+0x120>
- pcb->local_port == tcphdr->dest &&
- 80313bc: 6863 ldr r3, [r4, #4]
- 80313be: 454b cmp r3, r9
- 80313c0: d10c bne.n 80313dc <tcp_input+0x120>
- ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src) &&
- 80313c2: 6823 ldr r3, [r4, #0]
- 80313c4: 428b cmp r3, r1
- 80313c6: d109 bne.n 80313dc <tcp_input+0x120>
- /* Move this PCB to the front of the list so that subsequent
- lookups will be faster (we exploit locality in TCP segment
- arrivals). */
- LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb);
- if (prev != NULL) {
- 80313c8: 2800 cmp r0, #0
- 80313ca: f000 8382 beq.w 8031ad2 <tcp_input+0x816>
- prev->next = pcb->next;
- 80313ce: 68e3 ldr r3, [r4, #12]
- 80313d0: 60c3 str r3, [r0, #12]
- pcb->next = tcp_active_pcbs;
- tcp_active_pcbs = pcb;
- 80313d2: 4b6c ldr r3, [pc, #432] ; (8031584 <tcp_input+0x2c8>)
- lookups will be faster (we exploit locality in TCP segment
- arrivals). */
- LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb);
- if (prev != NULL) {
- prev->next = pcb->next;
- pcb->next = tcp_active_pcbs;
- 80313d4: f8c4 a00c str.w sl, [r4, #12]
- tcp_active_pcbs = pcb;
- 80313d8: 601c str r4, [r3, #0]
- 80313da: e37a b.n 8031ad2 <tcp_input+0x816>
- 80313dc: 4620 mov r0, r4
- /* Demultiplex an incoming segment. First, we check if it is destined
- for an active connection. */
- prev = NULL;
-
- for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
- 80313de: 68e4 ldr r4, [r4, #12]
- 80313e0: 2c00 cmp r4, #0
- 80313e2: d1e3 bne.n 80313ac <tcp_input+0xf0>
- 80313e4: e372 b.n 8031acc <tcp_input+0x810>
- if (pcb == NULL) {
- /* If it did not go to an active connection, we check the connections
- in the TIME-WAIT state. */
- for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
- LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT);
- if (pcb->remote_port == tcphdr->src &&
- 80313e6: 8b98 ldrh r0, [r3, #28]
- 80313e8: 883c ldrh r4, [r7, #0]
- 80313ea: 4284 cmp r4, r0
- 80313ec: d130 bne.n 8031450 <tcp_input+0x194>
- pcb->local_port == tcphdr->dest &&
- 80313ee: 8b58 ldrh r0, [r3, #26]
- if (pcb == NULL) {
- /* If it did not go to an active connection, we check the connections
- in the TIME-WAIT state. */
- for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
- LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT);
- if (pcb->remote_port == tcphdr->src &&
- 80313f0: 887d ldrh r5, [r7, #2]
- 80313f2: 4285 cmp r5, r0
- 80313f4: d12c bne.n 8031450 <tcp_input+0x194>
- pcb->local_port == tcphdr->dest &&
- 80313f6: 6858 ldr r0, [r3, #4]
- 80313f8: 4548 cmp r0, r9
- 80313fa: d129 bne.n 8031450 <tcp_input+0x194>
- ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src) &&
- 80313fc: 6818 ldr r0, [r3, #0]
- 80313fe: 4288 cmp r0, r1
- 8031400: d126 bne.n 8031450 <tcp_input+0x194>
- /* RFC 1337: in TIME_WAIT, ignore RST and ACK FINs + any 'acceptable' segments */
- /* RFC 793 3.9 Event Processing - Segment Arrives:
- * - first check sequence number - we skip that one in TIME_WAIT (always
- * acceptable since we only send ACKs)
- * - second check the RST bit (... return) */
- if (flags & TCP_RST) {
- 8031402: f002 0104 and.w r1, r2, #4
- 8031406: b2c9 uxtb r1, r1
- 8031408: 2900 cmp r1, #0
- 803140a: f040 833f bne.w 8031a8c <tcp_input+0x7d0>
- return ERR_OK;
- }
- /* - fourth, check the SYN bit, */
- if (flags & TCP_SYN) {
- 803140e: f002 0102 and.w r1, r2, #2
- 8031412: b2c9 uxtb r1, r1
- 8031414: b159 cbz r1, 803142e <tcp_input+0x172>
- /* If an incoming segment is not acceptable, an acknowledgment
- should be sent in reply */
- if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt+pcb->rcv_wnd)) {
- 8031416: 4a57 ldr r2, [pc, #348] ; (8031574 <tcp_input+0x2b8>)
- 8031418: 6811 ldr r1, [r2, #0]
- 803141a: 6a9a ldr r2, [r3, #40] ; 0x28
- 803141c: 1a8a subs r2, r1, r2
- 803141e: d40b bmi.n 8031438 <tcp_input+0x17c>
- 8031420: 8d98 ldrh r0, [r3, #44] ; 0x2c
- 8031422: 1a12 subs r2, r2, r0
- 8031424: 2a00 cmp r2, #0
- 8031426: dc07 bgt.n 8031438 <tcp_input+0x17c>
- /* If the SYN is in the window it is an error, send a reset */
- tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(),
- 8031428: 9500 str r5, [sp, #0]
- 803142a: 9401 str r4, [sp, #4]
- 803142c: e041 b.n 80314b2 <tcp_input+0x1f6>
- tcphdr->dest, tcphdr->src);
- return ERR_OK;
- }
- } else if (flags & TCP_FIN) {
- 803142e: 07d2 lsls r2, r2, #31
- 8031430: d502 bpl.n 8031438 <tcp_input+0x17c>
- /* - eighth, check the FIN bit: Remain in the TIME-WAIT state.
- Restart the 2 MSL time-wait timeout.*/
- pcb->tmr = tcp_ticks;
- 8031432: 4a56 ldr r2, [pc, #344] ; (803158c <tcp_input+0x2d0>)
- 8031434: 6812 ldr r2, [r2, #0]
- 8031436: 625a str r2, [r3, #36] ; 0x24
- }
- if ((tcplen > 0)) {
- 8031438: f1bc 0f00 cmp.w ip, #0
- 803143c: f000 8326 beq.w 8031a8c <tcp_input+0x7d0>
- /* Acknowledge data, FIN or out-of-window SYN */
- pcb->flags |= TF_ACK_NOW;
- 8031440: 7f9a ldrb r2, [r3, #30]
- 8031442: f042 0202 orr.w r2, r2, #2
- 8031446: 779a strb r2, [r3, #30]
- return tcp_output(pcb);
- 8031448: 4618 mov r0, r3
- 803144a: f000 fe3d bl 80320c8 <tcp_output>
- 803144e: e31d b.n 8031a8c <tcp_input+0x7d0>
- }
- if (pcb == NULL) {
- /* If it did not go to an active connection, we check the connections
- in the TIME-WAIT state. */
- for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
- 8031450: 68db ldr r3, [r3, #12]
- 8031452: 2b00 cmp r3, #0
- 8031454: d1c7 bne.n 80313e6 <tcp_input+0x12a>
- }
- /* Finally, if we still did not get a match, we check all PCBs that
- are LISTENing for incoming connections. */
- prev = NULL;
- for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {
- 8031456: 484e ldr r0, [pc, #312] ; (8031590 <tcp_input+0x2d4>)
- 8031458: 6804 ldr r4, [r0, #0]
- 803145a: 4625 mov r5, r4
- 803145c: e00f b.n 803147e <tcp_input+0x1c2>
- if (lpcb->local_port == tcphdr->dest) {
- 803145e: 8b68 ldrh r0, [r5, #26]
- 8031460: f8b7 8002 ldrh.w r8, [r7, #2]
- 8031464: 4580 cmp r8, r0
- 8031466: d108 bne.n 803147a <tcp_input+0x1be>
- /* found an ANY-match */
- lpcb_any = lpcb;
- lpcb_prev = prev;
- }
- #else /* SO_REUSE */
- if (ip_addr_cmp(&(lpcb->local_ip), ¤t_iphdr_dest) ||
- 8031468: f8d5 8000 ldr.w r8, [r5]
- 803146c: 4588 cmp r8, r1
- 803146e: f000 8342 beq.w 8031af6 <tcp_input+0x83a>
- ip_addr_isany(&(lpcb->local_ip))) {
- 8031472: f1b8 0f00 cmp.w r8, #0
- 8031476: f000 833e beq.w 8031af6 <tcp_input+0x83a>
- 803147a: 462b mov r3, r5
- }
- /* Finally, if we still did not get a match, we check all PCBs that
- are LISTENing for incoming connections. */
- prev = NULL;
- for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {
- 803147c: 68ed ldr r5, [r5, #12]
- 803147e: 2d00 cmp r5, #0
- 8031480: d1ed bne.n 803145e <tcp_input+0x1a2>
- 8031482: e33c b.n 8031afe <tcp_input+0x842>
- if (lpcb != NULL) {
- /* Move this PCB to the front of the list so that subsequent
- lookups will be faster (we exploit locality in TCP segment
- arrivals). */
- if (prev != NULL) {
- ((struct tcp_pcb_listen *)prev)->next = lpcb->next;
- 8031484: 68e9 ldr r1, [r5, #12]
- 8031486: 60d9 str r1, [r3, #12]
- /* our successor is the remainder of the listening list */
- lpcb->next = tcp_listen_pcbs.listen_pcbs;
- /* put this listening pcb at the head of the listening list */
- tcp_listen_pcbs.listen_pcbs = lpcb;
- 8031488: 4b41 ldr r3, [pc, #260] ; (8031590 <tcp_input+0x2d4>)
- lookups will be faster (we exploit locality in TCP segment
- arrivals). */
- if (prev != NULL) {
- ((struct tcp_pcb_listen *)prev)->next = lpcb->next;
- /* our successor is the remainder of the listening list */
- lpcb->next = tcp_listen_pcbs.listen_pcbs;
- 803148a: 60ec str r4, [r5, #12]
- /* put this listening pcb at the head of the listening list */
- tcp_listen_pcbs.listen_pcbs = lpcb;
- 803148c: 601d str r5, [r3, #0]
- tcp_listen_input(struct tcp_pcb_listen *pcb)
- {
- struct tcp_pcb *npcb;
- err_t rc;
- if (flags & TCP_RST) {
- 803148e: f002 0304 and.w r3, r2, #4
- 8031492: b2db uxtb r3, r3
- 8031494: 2b00 cmp r3, #0
- 8031496: f040 82f9 bne.w 8031a8c <tcp_input+0x7d0>
- return ERR_OK;
- }
- /* In the LISTEN state, we check for incoming SYN segments,
- creates a new PCB, and responds with a SYN|ACK. */
- if (flags & TCP_ACK) {
- 803149a: f002 0810 and.w r8, r2, #16
- 803149e: fa5f f888 uxtb.w r8, r8
- 80314a2: f1b8 0f00 cmp.w r8, #0
- 80314a6: d00c beq.n 80314c2 <tcp_input+0x206>
- /* For incoming segments with the ACK flag set, respond with a
- RST. */
- LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n"));
- tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(),
- 80314a8: 4b32 ldr r3, [pc, #200] ; (8031574 <tcp_input+0x2b8>)
- 80314aa: 6819 ldr r1, [r3, #0]
- 80314ac: 9000 str r0, [sp, #0]
- 80314ae: 883b ldrh r3, [r7, #0]
- 80314b0: 9301 str r3, [sp, #4]
- 80314b2: 4b31 ldr r3, [pc, #196] ; (8031578 <tcp_input+0x2bc>)
- 80314b4: 6818 ldr r0, [r3, #0]
- 80314b6: 4461 add r1, ip
- 80314b8: 4a2d ldr r2, [pc, #180] ; (8031570 <tcp_input+0x2b4>)
- 80314ba: 4b33 ldr r3, [pc, #204] ; (8031588 <tcp_input+0x2cc>)
- 80314bc: f000 ff28 bl 8032310 <tcp_rst>
- 80314c0: e2e4 b.n 8031a8c <tcp_input+0x7d0>
- ip_current_src_addr(), tcphdr->dest, tcphdr->src);
- } else if (flags & TCP_SYN) {
- 80314c2: f002 0202 and.w r2, r2, #2
- 80314c6: b2d2 uxtb r2, r2
- 80314c8: 2a00 cmp r2, #0
- 80314ca: f000 82df beq.w 8031a8c <tcp_input+0x7d0>
- if (pcb->accepts_pending >= pcb->backlog) {
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: listen backlog exceeded for port %"U16_F"\n", tcphdr->dest));
- return ERR_ABRT;
- }
- #endif /* TCP_LISTEN_BACKLOG */
- npcb = tcp_alloc(pcb->prio);
- 80314ce: 7e68 ldrb r0, [r5, #25]
- 80314d0: f7ff fb4c bl 8030b6c <tcp_alloc>
- /* If a new PCB could not be created (probably due to lack of memory),
- we don't do anything, but rely on the sender will retransmit the
- SYN at a time when we have more memory available. */
- if (npcb == NULL) {
- 80314d4: 4604 mov r4, r0
- 80314d6: 2800 cmp r0, #0
- 80314d8: f000 82d8 beq.w 8031a8c <tcp_input+0x7d0>
- }
- #if TCP_LISTEN_BACKLOG
- pcb->accepts_pending++;
- #endif /* TCP_LISTEN_BACKLOG */
- /* Set up the new PCB. */
- ip_addr_copy(npcb->local_ip, current_iphdr_dest);
- 80314dc: 4b24 ldr r3, [pc, #144] ; (8031570 <tcp_input+0x2b4>)
- 80314de: 681b ldr r3, [r3, #0]
- 80314e0: 6003 str r3, [r0, #0]
- npcb->local_port = pcb->local_port;
- 80314e2: 8b6b ldrh r3, [r5, #26]
- 80314e4: 8343 strh r3, [r0, #26]
- ip_addr_copy(npcb->remote_ip, current_iphdr_src);
- 80314e6: 4b28 ldr r3, [pc, #160] ; (8031588 <tcp_input+0x2cc>)
- 80314e8: 681b ldr r3, [r3, #0]
- 80314ea: 6043 str r3, [r0, #4]
- npcb->remote_port = tcphdr->src;
- 80314ec: 4b1f ldr r3, [pc, #124] ; (803156c <tcp_input+0x2b0>)
- 80314ee: 681b ldr r3, [r3, #0]
- 80314f0: 7859 ldrb r1, [r3, #1]
- 80314f2: 781a ldrb r2, [r3, #0]
- 80314f4: ea42 2201 orr.w r2, r2, r1, lsl #8
- 80314f8: 8382 strh r2, [r0, #28]
- npcb->state = SYN_RCVD;
- 80314fa: 2203 movs r2, #3
- 80314fc: 7602 strb r2, [r0, #24]
- npcb->rcv_nxt = seqno + 1;
- 80314fe: 4a1d ldr r2, [pc, #116] ; (8031574 <tcp_input+0x2b8>)
- 8031500: 6812 ldr r2, [r2, #0]
- 8031502: 1c51 adds r1, r2, #1
- 8031504: 6281 str r1, [r0, #40] ; 0x28
- npcb->rcv_ann_right_edge = npcb->rcv_nxt;
- 8031506: 6301 str r1, [r0, #48] ; 0x30
- npcb->snd_wnd = tcphdr->wnd;
- 8031508: 89db ldrh r3, [r3, #14]
- 803150a: f8a0 3060 strh.w r3, [r0, #96] ; 0x60
- npcb->snd_wnd_max = tcphdr->wnd;
- 803150e: f8a0 3062 strh.w r3, [r0, #98] ; 0x62
- npcb->ssthresh = npcb->snd_wnd;
- 8031512: f8a0 304e strh.w r3, [r0, #78] ; 0x4e
- npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */
- npcb->callback_arg = pcb->callback_arg;
- 8031516: 692b ldr r3, [r5, #16]
- 8031518: 6103 str r3, [r0, #16]
- #if LWIP_CALLBACK_API
- npcb->accept = pcb->accept;
- 803151a: 696b ldr r3, [r5, #20]
- npcb->rcv_nxt = seqno + 1;
- npcb->rcv_ann_right_edge = npcb->rcv_nxt;
- npcb->snd_wnd = tcphdr->wnd;
- npcb->snd_wnd_max = tcphdr->wnd;
- npcb->ssthresh = npcb->snd_wnd;
- npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */
- 803151c: 3a01 subs r2, #1
- 803151e: 6542 str r2, [r0, #84] ; 0x54
- npcb->callback_arg = pcb->callback_arg;
- #if LWIP_CALLBACK_API
- npcb->accept = pcb->accept;
- 8031520: 6143 str r3, [r0, #20]
- #endif /* LWIP_CALLBACK_API */
- /* inherit socket options */
- npcb->so_options = pcb->so_options & SOF_INHERITED;
- 8031522: 7a2b ldrb r3, [r5, #8]
- 8031524: f023 0373 bic.w r3, r3, #115 ; 0x73
- 8031528: 7203 strb r3, [r0, #8]
- /* Register the new PCB so that we can begin receiving segments
- for it. */
- TCP_REG_ACTIVE(npcb);
- 803152a: 4b16 ldr r3, [pc, #88] ; (8031584 <tcp_input+0x2c8>)
- 803152c: 681a ldr r2, [r3, #0]
- 803152e: 6018 str r0, [r3, #0]
- 8031530: 60c2 str r2, [r0, #12]
- 8031532: f001 f887 bl 8032644 <tcp_timer_needed>
- 8031536: 4b17 ldr r3, [pc, #92] ; (8031594 <tcp_input+0x2d8>)
- 8031538: 2201 movs r2, #1
- /* Parse any options in the SYN. */
- tcp_parseopt(npcb);
- 803153a: 4620 mov r0, r4
- #endif /* LWIP_CALLBACK_API */
- /* inherit socket options */
- npcb->so_options = pcb->so_options & SOF_INHERITED;
- /* Register the new PCB so that we can begin receiving segments
- for it. */
- TCP_REG_ACTIVE(npcb);
- 803153c: 701a strb r2, [r3, #0]
- /* Parse any options in the SYN. */
- tcp_parseopt(npcb);
- 803153e: f7ff fc29 bl 8030d94 <tcp_parseopt>
- #if TCP_CALCULATE_EFF_SEND_MSS
- npcb->mss = tcp_eff_send_mss(npcb->mss, &(npcb->remote_ip));
- 8031542: 1d21 adds r1, r4, #4
- 8031544: 8ee0 ldrh r0, [r4, #54] ; 0x36
- 8031546: f7ff fb9c bl 8030c82 <tcp_eff_send_mss>
- 803154a: 86e0 strh r0, [r4, #54] ; 0x36
- #endif /* TCP_CALCULATE_EFF_SEND_MSS */
- snmp_inc_tcppassiveopens();
- 803154c: f003 fb64 bl 8034c18 <snmp_inc_tcppassiveopens>
- /* Send a SYN|ACK together with the MSS option. */
- rc = tcp_enqueue_flags(npcb, TCP_SYN | TCP_ACK);
- 8031550: 4620 mov r0, r4
- 8031552: 2112 movs r1, #18
- 8031554: f000 fd28 bl 8031fa8 <tcp_enqueue_flags>
- if (rc != ERR_OK) {
- 8031558: b120 cbz r0, 8031564 <tcp_input+0x2a8>
- tcp_abandon(npcb, 0);
- 803155a: 4620 mov r0, r4
- 803155c: 4641 mov r1, r8
- 803155e: f7ff f941 bl 80307e4 <tcp_abandon>
- 8031562: e293 b.n 8031a8c <tcp_input+0x7d0>
- return rc;
- }
- return tcp_output(npcb);
- 8031564: 4620 mov r0, r4
- 8031566: e770 b.n 803144a <tcp_input+0x18e>
- 8031568: 2000c3f8 .word 0x2000c3f8
- 803156c: 2000c3e0 .word 0x2000c3e0
- 8031570: 2000f6e4 .word 0x2000f6e4
- 8031574: 2000c3e4 .word 0x2000c3e4
- 8031578: 2000c3ec .word 0x2000c3ec
- 803157c: 2000c3f0 .word 0x2000c3f0
- 8031580: 2000c3e8 .word 0x2000c3e8
- 8031584: 2000f6bc .word 0x2000f6bc
- 8031588: 2000f6dc .word 0x2000f6dc
- 803158c: 2000f6c0 .word 0x2000f6c0
- 8031590: 2000f6c4 .word 0x2000f6c4
- 8031594: 2000f6b8 .word 0x2000f6b8
- recv_data = NULL;
- recv_flags = 0;
- if (flags & TCP_PSH) {
- p->flags |= PBUF_FLAG_PUSH;
- 8031598: 7b73 ldrb r3, [r6, #13]
- 803159a: f043 0301 orr.w r3, r3, #1
- 803159e: 7373 strb r3, [r6, #13]
- }
- /* If there is data which was previously "refused" by upper layer */
- if (pcb->refused_data != NULL) {
- 80315a0: 6f63 ldr r3, [r4, #116] ; 0x74
- 80315a2: b163 cbz r3, 80315be <tcp_input+0x302>
- if ((tcp_process_refused_data(pcb) == ERR_ABRT) ||
- 80315a4: 4620 mov r0, r4
- 80315a6: f7ff fa57 bl 8030a58 <tcp_process_refused_data>
- 80315aa: 300a adds r0, #10
- 80315ac: d004 beq.n 80315b8 <tcp_input+0x2fc>
- 80315ae: 6f63 ldr r3, [r4, #116] ; 0x74
- 80315b0: b12b cbz r3, 80315be <tcp_input+0x302>
- ((pcb->refused_data != NULL) && (tcplen > 0))) {
- 80315b2: 4b9f ldr r3, [pc, #636] ; (8031830 <tcp_input+0x574>)
- 80315b4: 881b ldrh r3, [r3, #0]
- 80315b6: b113 cbz r3, 80315be <tcp_input+0x302>
- /* pcb has been aborted or refused data is still refused and the new
- segment contains data */
- TCP_STATS_INC(tcp.drop);
- snmp_inc_tcpinerrs();
- 80315b8: f003 fb5e bl 8034c78 <snmp_inc_tcpinerrs>
- goto aborted;
- 80315bc: e249 b.n 8031a52 <tcp_input+0x796>
- }
- }
- tcp_input_pcb = pcb;
- 80315be: 4b9d ldr r3, [pc, #628] ; (8031834 <tcp_input+0x578>)
- 80315c0: 601c str r4, [r3, #0]
- err_t err;
- err = ERR_OK;
- /* Process incoming RST segments. */
- if (flags & TCP_RST) {
- 80315c2: 4b9d ldr r3, [pc, #628] ; (8031838 <tcp_input+0x57c>)
- 80315c4: 781b ldrb r3, [r3, #0]
- 80315c6: f003 0204 and.w r2, r3, #4
- 80315ca: b2d2 uxtb r2, r2
- 80315cc: b1aa cbz r2, 80315fa <tcp_input+0x33e>
- /* First, determine if the reset is acceptable. */
- if (pcb->state == SYN_SENT) {
- 80315ce: 7e23 ldrb r3, [r4, #24]
- 80315d0: 2b02 cmp r3, #2
- 80315d2: d106 bne.n 80315e2 <tcp_input+0x326>
- if (ackno == pcb->snd_nxt) {
- 80315d4: 4b99 ldr r3, [pc, #612] ; (803183c <tcp_input+0x580>)
- 80315d6: 681a ldr r2, [r3, #0]
- 80315d8: 6d23 ldr r3, [r4, #80] ; 0x50
- 80315da: 429a cmp r2, r3
- 80315dc: f040 82a1 bne.w 8031b22 <tcp_input+0x866>
- 80315e0: e296 b.n 8031b10 <tcp_input+0x854>
- acceptable = 1;
- }
- } else {
- if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt,
- 80315e2: 4b97 ldr r3, [pc, #604] ; (8031840 <tcp_input+0x584>)
- 80315e4: 681a ldr r2, [r3, #0]
- 80315e6: 6aa3 ldr r3, [r4, #40] ; 0x28
- 80315e8: 1ad3 subs r3, r2, r3
- 80315ea: f100 829a bmi.w 8031b22 <tcp_input+0x866>
- 80315ee: 8da1 ldrh r1, [r4, #44] ; 0x2c
- 80315f0: 1a5b subs r3, r3, r1
- 80315f2: 2b00 cmp r3, #0
- 80315f4: f300 8295 bgt.w 8031b22 <tcp_input+0x866>
- 80315f8: e28a b.n 8031b10 <tcp_input+0x854>
- seqno, pcb->rcv_nxt));
- return ERR_OK;
- }
- }
- if ((flags & TCP_SYN) && (pcb->state != SYN_SENT && pcb->state != SYN_RCVD)) {
- 80315fa: f003 0302 and.w r3, r3, #2
- 80315fe: b2db uxtb r3, r3
- 8031600: b123 cbz r3, 803160c <tcp_input+0x350>
- 8031602: 7e23 ldrb r3, [r4, #24]
- 8031604: 3b02 subs r3, #2
- 8031606: 2b01 cmp r3, #1
- 8031608: d900 bls.n 803160c <tcp_input+0x350>
- 803160a: e06b b.n 80316e4 <tcp_input+0x428>
- /* Cope with new connection attempt after remote end crashed */
- tcp_ack_now(pcb);
- return ERR_OK;
- }
-
- if ((pcb->flags & TF_RXCLOSED) == 0) {
- 803160c: 7fa3 ldrb r3, [r4, #30]
- 803160e: f003 0310 and.w r3, r3, #16
- 8031612: b2db uxtb r3, r3
- 8031614: b913 cbnz r3, 803161c <tcp_input+0x360>
- /* Update the PCB (in)activity timer unless rx is closed (see tcp_shutdown) */
- pcb->tmr = tcp_ticks;
- 8031616: 4b8b ldr r3, [pc, #556] ; (8031844 <tcp_input+0x588>)
- 8031618: 681b ldr r3, [r3, #0]
- 803161a: 6263 str r3, [r4, #36] ; 0x24
- }
- pcb->keep_cnt_sent = 0;
- 803161c: 2300 movs r3, #0
- 803161e: f884 3092 strb.w r3, [r4, #146] ; 0x92
- tcp_parseopt(pcb);
- 8031622: 4620 mov r0, r4
- 8031624: f7ff fbb6 bl 8030d94 <tcp_parseopt>
- /* Do different things depending on the TCP state. */
- switch (pcb->state) {
- 8031628: 7e23 ldrb r3, [r4, #24]
- 803162a: 3b02 subs r3, #2
- 803162c: 2b07 cmp r3, #7
- 803162e: f200 8278 bhi.w 8031b22 <tcp_input+0x866>
- 8031632: e8df f013 tbh [pc, r3, lsl #1]
- 8031636: 0008 .short 0x0008
- 8031638: 00c90077 .word 0x00c90077
- 803163c: 013000da .word 0x013000da
- 8031640: 015200c9 .word 0x015200c9
- 8031644: 0186 .short 0x0186
- case SYN_SENT:
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %"U32_F" pcb->snd_nxt %"U32_F" unacked %"U32_F"\n", ackno,
- pcb->snd_nxt, ntohl(pcb->unacked->tcphdr->seqno)));
- /* received SYN ACK with expected sequence number? */
- if ((flags & TCP_ACK) && (flags & TCP_SYN)
- 8031646: 4b7c ldr r3, [pc, #496] ; (8031838 <tcp_input+0x57c>)
- 8031648: 781b ldrb r3, [r3, #0]
- 803164a: f003 0312 and.w r3, r3, #18
- 803164e: 2b12 cmp r3, #18
- 8031650: d153 bne.n 80316fa <tcp_input+0x43e>
- && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) {
- 8031652: 6f23 ldr r3, [r4, #112] ; 0x70
- 8031654: 4d79 ldr r5, [pc, #484] ; (803183c <tcp_input+0x580>)
- 8031656: 68db ldr r3, [r3, #12]
- 8031658: 682e ldr r6, [r5, #0]
- 803165a: 6858 ldr r0, [r3, #4]
- 803165c: f7fd faa4 bl 802eba8 <lwip_ntohl>
- 8031660: 3001 adds r0, #1
- 8031662: 4286 cmp r6, r0
- 8031664: d149 bne.n 80316fa <tcp_input+0x43e>
- pcb->snd_buf++;
- 8031666: f8b4 3066 ldrh.w r3, [r4, #102] ; 0x66
- pcb->snd_wnd_max = tcphdr->wnd;
- pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */
- pcb->state = ESTABLISHED;
- #if TCP_CALCULATE_EFF_SEND_MSS
- pcb->mss = tcp_eff_send_mss(pcb->mss, &(pcb->remote_ip));
- 803166a: 8ee0 ldrh r0, [r4, #54] ; 0x36
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %"U32_F" pcb->snd_nxt %"U32_F" unacked %"U32_F"\n", ackno,
- pcb->snd_nxt, ntohl(pcb->unacked->tcphdr->seqno)));
- /* received SYN ACK with expected sequence number? */
- if ((flags & TCP_ACK) && (flags & TCP_SYN)
- && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) {
- pcb->snd_buf++;
- 803166c: 3301 adds r3, #1
- 803166e: f8a4 3066 strh.w r3, [r4, #102] ; 0x66
- pcb->rcv_nxt = seqno + 1;
- 8031672: 4b73 ldr r3, [pc, #460] ; (8031840 <tcp_input+0x584>)
- 8031674: 681b ldr r3, [r3, #0]
- 8031676: 1c5a adds r2, r3, #1
- 8031678: 62a2 str r2, [r4, #40] ; 0x28
- pcb->rcv_ann_right_edge = pcb->rcv_nxt;
- 803167a: 6322 str r2, [r4, #48] ; 0x30
- pcb->lastack = ackno;
- 803167c: 682a ldr r2, [r5, #0]
- 803167e: 64a2 str r2, [r4, #72] ; 0x48
- pcb->snd_wnd = tcphdr->wnd;
- 8031680: 4a71 ldr r2, [pc, #452] ; (8031848 <tcp_input+0x58c>)
- 8031682: 6812 ldr r2, [r2, #0]
- pcb->snd_wnd_max = tcphdr->wnd;
- pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */
- 8031684: 3b01 subs r3, #1
- && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) {
- pcb->snd_buf++;
- pcb->rcv_nxt = seqno + 1;
- pcb->rcv_ann_right_edge = pcb->rcv_nxt;
- pcb->lastack = ackno;
- pcb->snd_wnd = tcphdr->wnd;
- 8031686: 89d2 ldrh r2, [r2, #14]
- pcb->snd_wnd_max = tcphdr->wnd;
- pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */
- 8031688: 6563 str r3, [r4, #84] ; 0x54
- pcb->state = ESTABLISHED;
- 803168a: 2304 movs r3, #4
- 803168c: 7623 strb r3, [r4, #24]
- #if TCP_CALCULATE_EFF_SEND_MSS
- pcb->mss = tcp_eff_send_mss(pcb->mss, &(pcb->remote_ip));
- 803168e: 18e1 adds r1, r4, r3
- && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) {
- pcb->snd_buf++;
- pcb->rcv_nxt = seqno + 1;
- pcb->rcv_ann_right_edge = pcb->rcv_nxt;
- pcb->lastack = ackno;
- pcb->snd_wnd = tcphdr->wnd;
- 8031690: f8a4 2060 strh.w r2, [r4, #96] ; 0x60
- pcb->snd_wnd_max = tcphdr->wnd;
- 8031694: f8a4 2062 strh.w r2, [r4, #98] ; 0x62
- pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */
- pcb->state = ESTABLISHED;
- #if TCP_CALCULATE_EFF_SEND_MSS
- pcb->mss = tcp_eff_send_mss(pcb->mss, &(pcb->remote_ip));
- 8031698: f7ff faf3 bl 8030c82 <tcp_eff_send_mss>
- #endif /* TCP_CALCULATE_EFF_SEND_MSS */
- /* Set ssthresh again after changing pcb->mss (already set in tcp_connect
- * but for the default value of pcb->mss) */
- pcb->ssthresh = pcb->mss * 10;
- 803169c: 230a movs r3, #10
- 803169e: 4343 muls r3, r0
- 80316a0: f8a4 304e strh.w r3, [r4, #78] ; 0x4e
- pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss);
- 80316a4: f8b4 304c ldrh.w r3, [r4, #76] ; 0x4c
- pcb->snd_wnd_max = tcphdr->wnd;
- pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */
- pcb->state = ESTABLISHED;
- #if TCP_CALCULATE_EFF_SEND_MSS
- pcb->mss = tcp_eff_send_mss(pcb->mss, &(pcb->remote_ip));
- 80316a8: 86e0 strh r0, [r4, #54] ; 0x36
- /* Set ssthresh again after changing pcb->mss (already set in tcp_connect
- * but for the default value of pcb->mss) */
- pcb->ssthresh = pcb->mss * 10;
- pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss);
- 80316aa: 2b01 cmp r3, #1
- 80316ac: d101 bne.n 80316b2 <tcp_input+0x3f6>
- 80316ae: 0040 lsls r0, r0, #1
- 80316b0: b280 uxth r0, r0
- LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0));
- --pcb->snd_queuelen;
- 80316b2: f8b4 3068 ldrh.w r3, [r4, #104] ; 0x68
- /* Set ssthresh again after changing pcb->mss (already set in tcp_connect
- * but for the default value of pcb->mss) */
- pcb->ssthresh = pcb->mss * 10;
- pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss);
- 80316b6: f8a4 004c strh.w r0, [r4, #76] ; 0x4c
- LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0));
- --pcb->snd_queuelen;
- LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"U16_F"\n", (u16_t)pcb->snd_queuelen));
- rseg = pcb->unacked;
- 80316ba: 6f20 ldr r0, [r4, #112] ; 0x70
- * but for the default value of pcb->mss) */
- pcb->ssthresh = pcb->mss * 10;
- pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss);
- LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0));
- --pcb->snd_queuelen;
- 80316bc: 3b01 subs r3, #1
- 80316be: f8a4 3068 strh.w r3, [r4, #104] ; 0x68
- LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"U16_F"\n", (u16_t)pcb->snd_queuelen));
- rseg = pcb->unacked;
- pcb->unacked = rseg->next;
- 80316c2: 6803 ldr r3, [r0, #0]
- 80316c4: 6723 str r3, [r4, #112] ; 0x70
- tcp_seg_free(rseg);
- 80316c6: f7fe fed0 bl 803046a <tcp_seg_free>
- /* If there's nothing left to acknowledge, stop the retransmit
- timer, otherwise reset it to start again */
- if(pcb->unacked == NULL)
- 80316ca: 6f23 ldr r3, [r4, #112] ; 0x70
- 80316cc: b91b cbnz r3, 80316d6 <tcp_input+0x41a>
- pcb->rtime = -1;
- 80316ce: f64f 73ff movw r3, #65535 ; 0xffff
- 80316d2: 86a3 strh r3, [r4, #52] ; 0x34
- 80316d4: e003 b.n 80316de <tcp_input+0x422>
- else {
- pcb->rtime = 0;
- 80316d6: 2300 movs r3, #0
- 80316d8: 86a3 strh r3, [r4, #52] ; 0x34
- pcb->nrtx = 0;
- 80316da: f884 3046 strb.w r3, [r4, #70] ; 0x46
- }
- /* Call the user specified function to call when sucessfully
- * connected. */
- TCP_EVENT_CONNECTED(pcb, ERR_OK, err);
- 80316de: f8d4 3080 ldr.w r3, [r4, #128] ; 0x80
- 80316e2: b91b cbnz r3, 80316ec <tcp_input+0x430>
- if (err == ERR_ABRT) {
- return ERR_ABRT;
- }
- tcp_ack_now(pcb);
- 80316e4: 7fa3 ldrb r3, [r4, #30]
- 80316e6: f043 0302 orr.w r3, r3, #2
- 80316ea: e219 b.n 8031b20 <tcp_input+0x864>
- pcb->nrtx = 0;
- }
- /* Call the user specified function to call when sucessfully
- * connected. */
- TCP_EVENT_CONNECTED(pcb, ERR_OK, err);
- 80316ec: 2200 movs r2, #0
- 80316ee: 6920 ldr r0, [r4, #16]
- 80316f0: 4621 mov r1, r4
- 80316f2: 4798 blx r3
- if (err == ERR_ABRT) {
- 80316f4: 300a adds r0, #10
- 80316f6: d1f5 bne.n 80316e4 <tcp_input+0x428>
- 80316f8: e1ab b.n 8031a52 <tcp_input+0x796>
- return ERR_ABRT;
- }
- tcp_ack_now(pcb);
- }
- /* received ACK? possibly a half-open connection */
- else if (flags & TCP_ACK) {
- 80316fa: 4b4f ldr r3, [pc, #316] ; (8031838 <tcp_input+0x57c>)
- 80316fc: 781b ldrb r3, [r3, #0]
- 80316fe: f003 0310 and.w r3, r3, #16
- 8031702: b2db uxtb r3, r3
- 8031704: 2b00 cmp r3, #0
- 8031706: f000 820c beq.w 8031b22 <tcp_input+0x866>
- /* send a RST to bring the other side in a non-synchronized state. */
- tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(),
- tcphdr->dest, tcphdr->src);
- 803170a: 4b4f ldr r3, [pc, #316] ; (8031848 <tcp_input+0x58c>)
- tcp_ack_now(pcb);
- }
- /* received ACK? possibly a half-open connection */
- else if (flags & TCP_ACK) {
- /* send a RST to bring the other side in a non-synchronized state. */
- tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(),
- 803170c: 4a48 ldr r2, [pc, #288] ; (8031830 <tcp_input+0x574>)
- tcphdr->dest, tcphdr->src);
- 803170e: 681b ldr r3, [r3, #0]
- tcp_ack_now(pcb);
- }
- /* received ACK? possibly a half-open connection */
- else if (flags & TCP_ACK) {
- /* send a RST to bring the other side in a non-synchronized state. */
- tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(),
- 8031710: 8811 ldrh r1, [r2, #0]
- 8031712: 8858 ldrh r0, [r3, #2]
- 8031714: 4a4a ldr r2, [pc, #296] ; (8031840 <tcp_input+0x584>)
- 8031716: 6812 ldr r2, [r2, #0]
- 8031718: 9000 str r0, [sp, #0]
- 803171a: 881b ldrh r3, [r3, #0]
- 803171c: 9301 str r3, [sp, #4]
- 803171e: 4b47 ldr r3, [pc, #284] ; (803183c <tcp_input+0x580>)
- 8031720: 6818 ldr r0, [r3, #0]
- 8031722: e03a b.n 803179a <tcp_input+0x4de>
- tcphdr->dest, tcphdr->src);
- }
- break;
- case SYN_RCVD:
- if (flags & TCP_ACK) {
- 8031724: 4b44 ldr r3, [pc, #272] ; (8031838 <tcp_input+0x57c>)
- 8031726: 781b ldrb r3, [r3, #0]
- 8031728: f003 0210 and.w r2, r3, #16
- 803172c: b2d2 uxtb r2, r2
- 803172e: 2a00 cmp r2, #0
- 8031730: d039 beq.n 80317a6 <tcp_input+0x4ea>
- /* expected ACK number? */
- if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) {
- 8031732: 4b42 ldr r3, [pc, #264] ; (803183c <tcp_input+0x580>)
- 8031734: 6818 ldr r0, [r3, #0]
- 8031736: 6ca3 ldr r3, [r4, #72] ; 0x48
- 8031738: 43db mvns r3, r3
- 803173a: 42c3 cmn r3, r0
- 803173c: d423 bmi.n 8031786 <tcp_input+0x4ca>
- 803173e: 6d23 ldr r3, [r4, #80] ; 0x50
- 8031740: 1ac3 subs r3, r0, r3
- 8031742: 2b00 cmp r3, #0
- 8031744: dc1f bgt.n 8031786 <tcp_input+0x4ca>
- u16_t old_cwnd;
- pcb->state = ESTABLISHED;
- 8031746: 2304 movs r3, #4
- 8031748: 7623 strb r3, [r4, #24]
- LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest));
- #if LWIP_CALLBACK_API
- LWIP_ASSERT("pcb->accept != NULL", pcb->accept != NULL);
- #endif
- /* Call the accept function. */
- TCP_EVENT_ACCEPT(pcb, ERR_OK, err);
- 803174a: 6963 ldr r3, [r4, #20]
- 803174c: b903 cbnz r3, 8031750 <tcp_input+0x494>
- 803174e: e147 b.n 80319e0 <tcp_input+0x724>
- 8031750: 6920 ldr r0, [r4, #16]
- 8031752: 4621 mov r1, r4
- 8031754: 2200 movs r2, #0
- 8031756: 4798 blx r3
- if (err != ERR_OK) {
- 8031758: b118 cbz r0, 8031762 <tcp_input+0x4a6>
- /* If the accept function returns with an error, we abort
- * the connection. */
- /* Already aborted? */
- if (err != ERR_ABRT) {
- 803175a: 300a adds r0, #10
- 803175c: f040 8140 bne.w 80319e0 <tcp_input+0x724>
- 8031760: e177 b.n 8031a52 <tcp_input+0x796>
- return ERR_ABRT;
- }
- old_cwnd = pcb->cwnd;
- /* If there was any data contained within this ACK,
- * we'd better pass it on to the application as well. */
- tcp_receive(pcb);
- 8031762: 4620 mov r0, r4
- if (err != ERR_ABRT) {
- tcp_abort(pcb);
- }
- return ERR_ABRT;
- }
- old_cwnd = pcb->cwnd;
- 8031764: f8b4 504c ldrh.w r5, [r4, #76] ; 0x4c
- /* If there was any data contained within this ACK,
- * we'd better pass it on to the application as well. */
- tcp_receive(pcb);
- 8031768: f7ff fb54 bl 8030e14 <tcp_receive>
- /* Prevent ACK for SYN to generate a sent event */
- if (pcb->acked != 0) {
- 803176c: f8b4 3064 ldrh.w r3, [r4, #100] ; 0x64
- 8031770: b113 cbz r3, 8031778 <tcp_input+0x4bc>
- pcb->acked--;
- 8031772: 3b01 subs r3, #1
- 8031774: f8a4 3064 strh.w r3, [r4, #100] ; 0x64
- }
- pcb->cwnd = ((old_cwnd == 1) ? (pcb->mss * 2) : pcb->mss);
- 8031778: 8ee3 ldrh r3, [r4, #54] ; 0x36
- 803177a: 2d01 cmp r5, #1
- 803177c: bf08 it eq
- 803177e: 005b lsleq r3, r3, #1
- 8031780: f8a4 304c strh.w r3, [r4, #76] ; 0x4c
- 8031784: e023 b.n 80317ce <tcp_input+0x512>
- pcb->state = CLOSE_WAIT;
- }
- } else {
- /* incorrect ACK number, send RST */
- tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(),
- tcphdr->dest, tcphdr->src);
- 8031786: 4b30 ldr r3, [pc, #192] ; (8031848 <tcp_input+0x58c>)
- tcp_ack_now(pcb);
- pcb->state = CLOSE_WAIT;
- }
- } else {
- /* incorrect ACK number, send RST */
- tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(),
- 8031788: 4a29 ldr r2, [pc, #164] ; (8031830 <tcp_input+0x574>)
- tcphdr->dest, tcphdr->src);
- 803178a: 681b ldr r3, [r3, #0]
- tcp_ack_now(pcb);
- pcb->state = CLOSE_WAIT;
- }
- } else {
- /* incorrect ACK number, send RST */
- tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(),
- 803178c: 8811 ldrh r1, [r2, #0]
- 803178e: 885d ldrh r5, [r3, #2]
- 8031790: 4a2b ldr r2, [pc, #172] ; (8031840 <tcp_input+0x584>)
- 8031792: 6812 ldr r2, [r2, #0]
- 8031794: 9500 str r5, [sp, #0]
- 8031796: 881b ldrh r3, [r3, #0]
- 8031798: 9301 str r3, [sp, #4]
- 803179a: 1889 adds r1, r1, r2
- 803179c: 4b2b ldr r3, [pc, #172] ; (803184c <tcp_input+0x590>)
- 803179e: 4a2c ldr r2, [pc, #176] ; (8031850 <tcp_input+0x594>)
- 80317a0: f000 fdb6 bl 8032310 <tcp_rst>
- 80317a4: e1bd b.n 8031b22 <tcp_input+0x866>
- tcphdr->dest, tcphdr->src);
- }
- } else if ((flags & TCP_SYN) && (seqno == pcb->rcv_nxt - 1)) {
- 80317a6: f003 0302 and.w r3, r3, #2
- 80317aa: b2db uxtb r3, r3
- 80317ac: 2b00 cmp r3, #0
- 80317ae: f000 81b8 beq.w 8031b22 <tcp_input+0x866>
- 80317b2: 4a23 ldr r2, [pc, #140] ; (8031840 <tcp_input+0x584>)
- 80317b4: 6aa3 ldr r3, [r4, #40] ; 0x28
- 80317b6: 6812 ldr r2, [r2, #0]
- 80317b8: 3b01 subs r3, #1
- 80317ba: 429a cmp r2, r3
- 80317bc: f040 81b1 bne.w 8031b22 <tcp_input+0x866>
- /* Looks like another copy of the SYN - retransmit our SYN-ACK */
- tcp_rexmit(pcb);
- 80317c0: 4620 mov r0, r4
- 80317c2: f000 fe03 bl 80323cc <tcp_rexmit>
- 80317c6: e1ac b.n 8031b22 <tcp_input+0x866>
- }
- break;
- case CLOSE_WAIT:
- /* FALLTHROUGH */
- case ESTABLISHED:
- tcp_receive(pcb);
- 80317c8: 4620 mov r0, r4
- 80317ca: f7ff fb23 bl 8030e14 <tcp_receive>
- if (recv_flags & TF_GOT_FIN) { /* passive close */
- 80317ce: 4b21 ldr r3, [pc, #132] ; (8031854 <tcp_input+0x598>)
- 80317d0: 781b ldrb r3, [r3, #0]
- 80317d2: f003 0320 and.w r3, r3, #32
- 80317d6: b2db uxtb r3, r3
- 80317d8: 2b00 cmp r3, #0
- 80317da: f000 81a2 beq.w 8031b22 <tcp_input+0x866>
- tcp_ack_now(pcb);
- 80317de: 7fa3 ldrb r3, [r4, #30]
- 80317e0: f043 0302 orr.w r3, r3, #2
- 80317e4: 77a3 strb r3, [r4, #30]
- pcb->state = CLOSE_WAIT;
- 80317e6: 2307 movs r3, #7
- 80317e8: e053 b.n 8031892 <tcp_input+0x5d6>
- }
- break;
- case FIN_WAIT_1:
- tcp_receive(pcb);
- 80317ea: 4620 mov r0, r4
- 80317ec: f7ff fb12 bl 8030e14 <tcp_receive>
- if (recv_flags & TF_GOT_FIN) {
- 80317f0: 4b18 ldr r3, [pc, #96] ; (8031854 <tcp_input+0x598>)
- 80317f2: 781a ldrb r2, [r3, #0]
- 80317f4: 4b10 ldr r3, [pc, #64] ; (8031838 <tcp_input+0x57c>)
- if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) {
- 80317f6: 781b ldrb r3, [r3, #0]
- pcb->state = CLOSE_WAIT;
- }
- break;
- case FIN_WAIT_1:
- tcp_receive(pcb);
- if (recv_flags & TF_GOT_FIN) {
- 80317f8: f002 0220 and.w r2, r2, #32
- if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) {
- 80317fc: f003 0310 and.w r3, r3, #16
- pcb->state = CLOSE_WAIT;
- }
- break;
- case FIN_WAIT_1:
- tcp_receive(pcb);
- if (recv_flags & TF_GOT_FIN) {
- 8031800: b2d2 uxtb r2, r2
- if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) {
- 8031802: b2db uxtb r3, r3
- pcb->state = CLOSE_WAIT;
- }
- break;
- case FIN_WAIT_1:
- tcp_receive(pcb);
- if (recv_flags & TF_GOT_FIN) {
- 8031804: 2a00 cmp r2, #0
- 8031806: d03a beq.n 803187e <tcp_input+0x5c2>
- if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) {
- 8031808: 2b00 cmp r3, #0
- 803180a: d032 beq.n 8031872 <tcp_input+0x5b6>
- 803180c: 4b0b ldr r3, [pc, #44] ; (803183c <tcp_input+0x580>)
- 803180e: 681a ldr r2, [r3, #0]
- 8031810: 6d23 ldr r3, [r4, #80] ; 0x50
- 8031812: 429a cmp r2, r3
- 8031814: d12d bne.n 8031872 <tcp_input+0x5b6>
- LWIP_DEBUGF(TCP_DEBUG,
- ("TCP connection closed: FIN_WAIT_1 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest));
- tcp_ack_now(pcb);
- 8031816: 7fa3 ldrb r3, [r4, #30]
- 8031818: f043 0302 orr.w r3, r3, #2
- 803181c: 77a3 strb r3, [r4, #30]
- tcp_pcb_purge(pcb);
- 803181e: 4620 mov r0, r4
- 8031820: f7fe fe4a bl 80304b8 <tcp_pcb_purge>
- TCP_RMV_ACTIVE(pcb);
- 8031824: 4a0c ldr r2, [pc, #48] ; (8031858 <tcp_input+0x59c>)
- 8031826: 6813 ldr r3, [r2, #0]
- 8031828: 42a3 cmp r3, r4
- 803182a: d117 bne.n 803185c <tcp_input+0x5a0>
- 803182c: e06d b.n 803190a <tcp_input+0x64e>
- 803182e: bf00 nop
- 8031830: 2000c3e8 .word 0x2000c3e8
- 8031834: 2000f6d4 .word 0x2000f6d4
- 8031838: 2000c3f0 .word 0x2000c3f0
- 803183c: 2000c3ec .word 0x2000c3ec
- 8031840: 2000c3e4 .word 0x2000c3e4
- 8031844: 2000f6c0 .word 0x2000f6c0
- 8031848: 2000c3e0 .word 0x2000c3e0
- 803184c: 2000f6dc .word 0x2000f6dc
- 8031850: 2000f6e4 .word 0x2000f6e4
- 8031854: 2000c3f1 .word 0x2000c3f1
- 8031858: 2000f6bc .word 0x2000f6bc
- 803185c: 4a8e ldr r2, [pc, #568] ; (8031a98 <tcp_input+0x7dc>)
- 803185e: 6013 str r3, [r2, #0]
- 8031860: e004 b.n 803186c <tcp_input+0x5b0>
- 8031862: 68d9 ldr r1, [r3, #12]
- 8031864: 42a1 cmp r1, r4
- 8031866: d100 bne.n 803186a <tcp_input+0x5ae>
- 8031868: e057 b.n 803191a <tcp_input+0x65e>
- 803186a: 460b mov r3, r1
- 803186c: 2b00 cmp r3, #0
- 803186e: d1f8 bne.n 8031862 <tcp_input+0x5a6>
- 8031870: e05a b.n 8031928 <tcp_input+0x66c>
- pcb->state = TIME_WAIT;
- TCP_REG(&tcp_tw_pcbs, pcb);
- } else {
- tcp_ack_now(pcb);
- 8031872: 7fa3 ldrb r3, [r4, #30]
- 8031874: f043 0302 orr.w r3, r3, #2
- 8031878: 77a3 strb r3, [r4, #30]
- pcb->state = CLOSING;
- 803187a: 2308 movs r3, #8
- 803187c: e009 b.n 8031892 <tcp_input+0x5d6>
- }
- } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) {
- 803187e: 2b00 cmp r3, #0
- 8031880: f000 814f beq.w 8031b22 <tcp_input+0x866>
- 8031884: 4b85 ldr r3, [pc, #532] ; (8031a9c <tcp_input+0x7e0>)
- 8031886: 681a ldr r2, [r3, #0]
- 8031888: 6d23 ldr r3, [r4, #80] ; 0x50
- 803188a: 429a cmp r2, r3
- 803188c: f040 8149 bne.w 8031b22 <tcp_input+0x866>
- pcb->state = FIN_WAIT_2;
- 8031890: 2306 movs r3, #6
- 8031892: 7623 strb r3, [r4, #24]
- 8031894: e145 b.n 8031b22 <tcp_input+0x866>
- }
- break;
- case FIN_WAIT_2:
- tcp_receive(pcb);
- 8031896: 4620 mov r0, r4
- 8031898: f7ff fabc bl 8030e14 <tcp_receive>
- if (recv_flags & TF_GOT_FIN) {
- 803189c: 4b80 ldr r3, [pc, #512] ; (8031aa0 <tcp_input+0x7e4>)
- 803189e: 781b ldrb r3, [r3, #0]
- 80318a0: f003 0320 and.w r3, r3, #32
- 80318a4: b2db uxtb r3, r3
- 80318a6: 2b00 cmp r3, #0
- 80318a8: f000 813b beq.w 8031b22 <tcp_input+0x866>
- LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: FIN_WAIT_2 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest));
- tcp_ack_now(pcb);
- 80318ac: 7fa3 ldrb r3, [r4, #30]
- 80318ae: f043 0302 orr.w r3, r3, #2
- 80318b2: 77a3 strb r3, [r4, #30]
- tcp_pcb_purge(pcb);
- 80318b4: 4620 mov r0, r4
- 80318b6: f7fe fdff bl 80304b8 <tcp_pcb_purge>
- TCP_RMV_ACTIVE(pcb);
- 80318ba: 4a7a ldr r2, [pc, #488] ; (8031aa4 <tcp_input+0x7e8>)
- 80318bc: 6813 ldr r3, [r2, #0]
- 80318be: 42a3 cmp r3, r4
- 80318c0: d100 bne.n 80318c4 <tcp_input+0x608>
- 80318c2: e022 b.n 803190a <tcp_input+0x64e>
- 80318c4: 4a74 ldr r2, [pc, #464] ; (8031a98 <tcp_input+0x7dc>)
- 80318c6: 6013 str r3, [r2, #0]
- 80318c8: e004 b.n 80318d4 <tcp_input+0x618>
- 80318ca: 68d9 ldr r1, [r3, #12]
- 80318cc: 42a1 cmp r1, r4
- 80318ce: d100 bne.n 80318d2 <tcp_input+0x616>
- 80318d0: e023 b.n 803191a <tcp_input+0x65e>
- 80318d2: 460b mov r3, r1
- 80318d4: 2b00 cmp r3, #0
- 80318d6: d1f8 bne.n 80318ca <tcp_input+0x60e>
- 80318d8: e026 b.n 8031928 <tcp_input+0x66c>
- pcb->state = TIME_WAIT;
- TCP_REG(&tcp_tw_pcbs, pcb);
- }
- break;
- case CLOSING:
- tcp_receive(pcb);
- 80318da: 4620 mov r0, r4
- 80318dc: f7ff fa9a bl 8030e14 <tcp_receive>
- if (flags & TCP_ACK && ackno == pcb->snd_nxt) {
- 80318e0: 4b71 ldr r3, [pc, #452] ; (8031aa8 <tcp_input+0x7ec>)
- 80318e2: 781b ldrb r3, [r3, #0]
- 80318e4: f003 0310 and.w r3, r3, #16
- 80318e8: b2db uxtb r3, r3
- 80318ea: 2b00 cmp r3, #0
- 80318ec: f000 8119 beq.w 8031b22 <tcp_input+0x866>
- 80318f0: 4b6a ldr r3, [pc, #424] ; (8031a9c <tcp_input+0x7e0>)
- 80318f2: 681a ldr r2, [r3, #0]
- 80318f4: 6d23 ldr r3, [r4, #80] ; 0x50
- 80318f6: 429a cmp r2, r3
- 80318f8: f040 8113 bne.w 8031b22 <tcp_input+0x866>
- LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: CLOSING %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest));
- tcp_pcb_purge(pcb);
- 80318fc: 4620 mov r0, r4
- 80318fe: f7fe fddb bl 80304b8 <tcp_pcb_purge>
- TCP_RMV_ACTIVE(pcb);
- 8031902: 4a68 ldr r2, [pc, #416] ; (8031aa4 <tcp_input+0x7e8>)
- 8031904: 6813 ldr r3, [r2, #0]
- 8031906: 42a3 cmp r3, r4
- 8031908: d101 bne.n 803190e <tcp_input+0x652>
- 803190a: 68e3 ldr r3, [r4, #12]
- 803190c: e00c b.n 8031928 <tcp_input+0x66c>
- 803190e: 4a62 ldr r2, [pc, #392] ; (8031a98 <tcp_input+0x7dc>)
- 8031910: 6013 str r3, [r2, #0]
- 8031912: e007 b.n 8031924 <tcp_input+0x668>
- 8031914: 68d9 ldr r1, [r3, #12]
- 8031916: 42a1 cmp r1, r4
- 8031918: d103 bne.n 8031922 <tcp_input+0x666>
- 803191a: 6013 str r3, [r2, #0]
- 803191c: 68e2 ldr r2, [r4, #12]
- 803191e: 60da str r2, [r3, #12]
- 8031920: e003 b.n 803192a <tcp_input+0x66e>
- 8031922: 460b mov r3, r1
- 8031924: 2b00 cmp r3, #0
- 8031926: d1f5 bne.n 8031914 <tcp_input+0x658>
- 8031928: 6013 str r3, [r2, #0]
- 803192a: 4b60 ldr r3, [pc, #384] ; (8031aac <tcp_input+0x7f0>)
- 803192c: 2201 movs r2, #1
- 803192e: 701a strb r2, [r3, #0]
- pcb->state = TIME_WAIT;
- 8031930: 230a movs r3, #10
- 8031932: 7623 strb r3, [r4, #24]
- TCP_REG(&tcp_tw_pcbs, pcb);
- 8031934: 4b5e ldr r3, [pc, #376] ; (8031ab0 <tcp_input+0x7f4>)
- 8031936: 681a ldr r2, [r3, #0]
- 8031938: 601c str r4, [r3, #0]
- 803193a: 60e2 str r2, [r4, #12]
- 803193c: f000 fe82 bl 8032644 <tcp_timer_needed>
- 8031940: e0ef b.n 8031b22 <tcp_input+0x866>
- }
- break;
- case LAST_ACK:
- tcp_receive(pcb);
- 8031942: 4620 mov r0, r4
- 8031944: f7ff fa66 bl 8030e14 <tcp_receive>
- if (flags & TCP_ACK && ackno == pcb->snd_nxt) {
- 8031948: 4b57 ldr r3, [pc, #348] ; (8031aa8 <tcp_input+0x7ec>)
- 803194a: 781b ldrb r3, [r3, #0]
- 803194c: f003 0310 and.w r3, r3, #16
- 8031950: b2db uxtb r3, r3
- 8031952: 2b00 cmp r3, #0
- 8031954: f000 80e5 beq.w 8031b22 <tcp_input+0x866>
- 8031958: 4b50 ldr r3, [pc, #320] ; (8031a9c <tcp_input+0x7e0>)
- 803195a: 681a ldr r2, [r3, #0]
- 803195c: 6d23 ldr r3, [r4, #80] ; 0x50
- 803195e: 429a cmp r2, r3
- 8031960: f040 80df bne.w 8031b22 <tcp_input+0x866>
- LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: LAST_ACK %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest));
- /* bugfix #21699: don't set pcb->state to CLOSED here or we risk leaking segments */
- recv_flags |= TF_CLOSED;
- 8031964: 4b4e ldr r3, [pc, #312] ; (8031aa0 <tcp_input+0x7e4>)
- 8031966: 781a ldrb r2, [r3, #0]
- 8031968: f042 0210 orr.w r2, r2, #16
- 803196c: 701a strb r2, [r3, #0]
- 803196e: e0d8 b.n 8031b22 <tcp_input+0x866>
- if (recv_flags & TF_RESET) {
- /* TF_RESET means that the connection was reset by the other
- end. We then call the error callback to inform the
- application that the connection is dead before we
- deallocate the PCB. */
- TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_RST);
- 8031970: f8d4 3088 ldr.w r3, [r4, #136] ; 0x88
- 8031974: b19b cbz r3, 803199e <tcp_input+0x6e2>
- 8031976: 6920 ldr r0, [r4, #16]
- 8031978: f06f 010a mvn.w r1, #10
- 803197c: e00e b.n 803199c <tcp_input+0x6e0>
- tcp_pcb_remove(&tcp_active_pcbs, pcb);
- memp_free(MEMP_TCP_PCB, pcb);
- } else if (recv_flags & TF_CLOSED) {
- 803197e: f003 0310 and.w r3, r3, #16
- 8031982: b2db uxtb r3, r3
- 8031984: b1a3 cbz r3, 80319b0 <tcp_input+0x6f4>
- /* The connection has been closed and we will deallocate the
- PCB. */
- if (!(pcb->flags & TF_RXCLOSED)) {
- 8031986: 7fa3 ldrb r3, [r4, #30]
- 8031988: f003 0310 and.w r3, r3, #16
- 803198c: b2db uxtb r3, r3
- 803198e: b933 cbnz r3, 803199e <tcp_input+0x6e2>
- /* Connection closed although the application has only shut down the
- tx side: call the PCB's err callback and indicate the closure to
- ensure the application doesn't continue using the PCB. */
- TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_CLSD);
- 8031990: f8d4 3088 ldr.w r3, [r4, #136] ; 0x88
- 8031994: b11b cbz r3, 803199e <tcp_input+0x6e2>
- 8031996: 6920 ldr r0, [r4, #16]
- 8031998: f06f 010b mvn.w r1, #11
- 803199c: 4798 blx r3
- }
- tcp_pcb_remove(&tcp_active_pcbs, pcb);
- 803199e: 4621 mov r1, r4
- 80319a0: 4840 ldr r0, [pc, #256] ; (8031aa4 <tcp_input+0x7e8>)
- 80319a2: f7fe fef1 bl 8030788 <tcp_pcb_remove>
- memp_free(MEMP_TCP_PCB, pcb);
- 80319a6: 2002 movs r0, #2
- 80319a8: 4621 mov r1, r4
- 80319aa: f7fe f925 bl 802fbf8 <memp_free>
- 80319ae: e050 b.n 8031a52 <tcp_input+0x796>
- } else {
- err = ERR_OK;
- /* If the application has registered a "sent" function to be
- called when new send buffer space is available, we call it
- now. */
- if (pcb->acked > 0) {
- 80319b0: f8b4 2064 ldrh.w r2, [r4, #100] ; 0x64
- 80319b4: b91a cbnz r2, 80319be <tcp_input+0x702>
- if (err == ERR_ABRT) {
- goto aborted;
- }
- }
- if (recv_data != NULL) {
- 80319b6: 4b3f ldr r3, [pc, #252] ; (8031ab4 <tcp_input+0x7f8>)
- 80319b8: 681a ldr r2, [r3, #0]
- 80319ba: b94a cbnz r2, 80319d0 <tcp_input+0x714>
- 80319bc: e026 b.n 8031a0c <tcp_input+0x750>
- err = ERR_OK;
- /* If the application has registered a "sent" function to be
- called when new send buffer space is available, we call it
- now. */
- if (pcb->acked > 0) {
- TCP_EVENT_SENT(pcb, pcb->acked, err);
- 80319be: 6fa3 ldr r3, [r4, #120] ; 0x78
- 80319c0: 2b00 cmp r3, #0
- 80319c2: d0f8 beq.n 80319b6 <tcp_input+0x6fa>
- 80319c4: 6920 ldr r0, [r4, #16]
- 80319c6: 4621 mov r1, r4
- 80319c8: 4798 blx r3
- if (err == ERR_ABRT) {
- 80319ca: 300a adds r0, #10
- 80319cc: d1f3 bne.n 80319b6 <tcp_input+0x6fa>
- 80319ce: e040 b.n 8031a52 <tcp_input+0x796>
- }
- }
- if (recv_data != NULL) {
- LWIP_ASSERT("pcb->refused_data == NULL", pcb->refused_data == NULL);
- if (pcb->flags & TF_RXCLOSED) {
- 80319d0: 7fa3 ldrb r3, [r4, #30]
- 80319d2: f003 0310 and.w r3, r3, #16
- 80319d6: b2db uxtb r3, r3
- 80319d8: b133 cbz r3, 80319e8 <tcp_input+0x72c>
- /* received data although already closed -> abort (send RST) to
- notify the remote host that not all data has been processed */
- pbuf_free(recv_data);
- 80319da: 4610 mov r0, r2
- 80319dc: f7fe fa16 bl 802fe0c <pbuf_free>
- tcp_abort(pcb);
- 80319e0: 4620 mov r0, r4
- 80319e2: f7fe ff45 bl 8030870 <tcp_abort>
- goto aborted;
- 80319e6: e034 b.n 8031a52 <tcp_input+0x796>
- }
- /* Notify application that data has been received. */
- TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err);
- 80319e8: 6fe5 ldr r5, [r4, #124] ; 0x7c
- 80319ea: b11d cbz r5, 80319f4 <tcp_input+0x738>
- 80319ec: 6920 ldr r0, [r4, #16]
- 80319ee: 4621 mov r1, r4
- 80319f0: 47a8 blx r5
- 80319f2: e004 b.n 80319fe <tcp_input+0x742>
- 80319f4: 4628 mov r0, r5
- 80319f6: 4621 mov r1, r4
- 80319f8: 462b mov r3, r5
- 80319fa: f7ff f81b bl 8030a34 <tcp_recv_null>
- if (err == ERR_ABRT) {
- 80319fe: b243 sxtb r3, r0
- 8031a00: 330a adds r3, #10
- 8031a02: d026 beq.n 8031a52 <tcp_input+0x796>
- goto aborted;
- }
- /* If the upper layer can't receive this data, store it */
- if (err != ERR_OK) {
- 8031a04: b110 cbz r0, 8031a0c <tcp_input+0x750>
- pcb->refused_data = recv_data;
- 8031a06: 4b2b ldr r3, [pc, #172] ; (8031ab4 <tcp_input+0x7f8>)
- 8031a08: 681b ldr r3, [r3, #0]
- 8031a0a: 6763 str r3, [r4, #116] ; 0x74
- }
- }
- /* If a FIN segment was received, we call the callback
- function with a NULL buffer to indicate EOF. */
- if (recv_flags & TF_GOT_FIN) {
- 8031a0c: 4b24 ldr r3, [pc, #144] ; (8031aa0 <tcp_input+0x7e4>)
- 8031a0e: 781b ldrb r3, [r3, #0]
- 8031a10: f003 0320 and.w r3, r3, #32
- 8031a14: b2db uxtb r3, r3
- 8031a16: b1b3 cbz r3, 8031a46 <tcp_input+0x78a>
- if (pcb->refused_data != NULL) {
- 8031a18: 6f63 ldr r3, [r4, #116] ; 0x74
- 8031a1a: b123 cbz r3, 8031a26 <tcp_input+0x76a>
- /* Delay this if we have refused data. */
- pcb->refused_data->flags |= PBUF_FLAG_TCP_FIN;
- 8031a1c: 7b5a ldrb r2, [r3, #13]
- 8031a1e: f042 0220 orr.w r2, r2, #32
- 8031a22: 735a strb r2, [r3, #13]
- 8031a24: e00f b.n 8031a46 <tcp_input+0x78a>
- } else {
- /* correct rcv_wnd as the application won't call tcp_recved()
- for the FIN's seqno */
- if (pcb->rcv_wnd != TCP_WND) {
- 8031a26: 8da3 ldrh r3, [r4, #44] ; 0x2c
- 8031a28: f241 62d0 movw r2, #5840 ; 0x16d0
- 8031a2c: 4293 cmp r3, r2
- 8031a2e: d001 beq.n 8031a34 <tcp_input+0x778>
- pcb->rcv_wnd++;
- 8031a30: 3301 adds r3, #1
- 8031a32: 85a3 strh r3, [r4, #44] ; 0x2c
- }
- TCP_EVENT_CLOSED(pcb, err);
- 8031a34: 6fe5 ldr r5, [r4, #124] ; 0x7c
- 8031a36: b135 cbz r5, 8031a46 <tcp_input+0x78a>
- 8031a38: 2200 movs r2, #0
- 8031a3a: 6920 ldr r0, [r4, #16]
- 8031a3c: 4621 mov r1, r4
- 8031a3e: 4613 mov r3, r2
- 8031a40: 47a8 blx r5
- if (err == ERR_ABRT) {
- 8031a42: 300a adds r0, #10
- 8031a44: d005 beq.n 8031a52 <tcp_input+0x796>
- goto aborted;
- }
- }
- }
- tcp_input_pcb = NULL;
- 8031a46: 4b1c ldr r3, [pc, #112] ; (8031ab8 <tcp_input+0x7fc>)
- 8031a48: 2200 movs r2, #0
- /* Try to send something out. */
- tcp_output(pcb);
- 8031a4a: 4620 mov r0, r4
- goto aborted;
- }
- }
- }
- tcp_input_pcb = NULL;
- 8031a4c: 601a str r2, [r3, #0]
- /* Try to send something out. */
- tcp_output(pcb);
- 8031a4e: f000 fb3b bl 80320c8 <tcp_output>
- }
- }
- /* Jump target if pcb has been aborted in a callback (by calling tcp_abort()).
- Below this line, 'pcb' may not be dereferenced! */
- aborted:
- tcp_input_pcb = NULL;
- 8031a52: 4b19 ldr r3, [pc, #100] ; (8031ab8 <tcp_input+0x7fc>)
- recv_data = NULL;
- /* give up our reference to inseg.p */
- if (inseg.p != NULL)
- 8031a54: 4d19 ldr r5, [pc, #100] ; (8031abc <tcp_input+0x800>)
- }
- }
- /* Jump target if pcb has been aborted in a callback (by calling tcp_abort()).
- Below this line, 'pcb' may not be dereferenced! */
- aborted:
- tcp_input_pcb = NULL;
- 8031a56: 2400 movs r4, #0
- 8031a58: 601c str r4, [r3, #0]
- recv_data = NULL;
- /* give up our reference to inseg.p */
- if (inseg.p != NULL)
- 8031a5a: 6868 ldr r0, [r5, #4]
- }
- /* Jump target if pcb has been aborted in a callback (by calling tcp_abort()).
- Below this line, 'pcb' may not be dereferenced! */
- aborted:
- tcp_input_pcb = NULL;
- recv_data = NULL;
- 8031a5c: 4b15 ldr r3, [pc, #84] ; (8031ab4 <tcp_input+0x7f8>)
- 8031a5e: 601c str r4, [r3, #0]
- /* give up our reference to inseg.p */
- if (inseg.p != NULL)
- 8031a60: 2800 cmp r0, #0
- 8031a62: d067 beq.n 8031b34 <tcp_input+0x878>
- {
- pbuf_free(inseg.p);
- 8031a64: f7fe f9d2 bl 802fe0c <pbuf_free>
- inseg.p = NULL;
- 8031a68: 606c str r4, [r5, #4]
- 8031a6a: e063 b.n 8031b34 <tcp_input+0x878>
- if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) {
- TCP_STATS_INC(tcp.proterr);
- TCP_STATS_INC(tcp.drop);
- tcp_rst(ackno, seqno + tcplen,
- ip_current_dest_addr(), ip_current_src_addr(),
- tcphdr->dest, tcphdr->src);
- 8031a6c: 4b14 ldr r3, [pc, #80] ; (8031ac0 <tcp_input+0x804>)
- sender. */
- LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_input: no PCB match found, resetting.\n"));
- if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) {
- TCP_STATS_INC(tcp.proterr);
- TCP_STATS_INC(tcp.drop);
- tcp_rst(ackno, seqno + tcplen,
- 8031a6e: 4a15 ldr r2, [pc, #84] ; (8031ac4 <tcp_input+0x808>)
- ip_current_dest_addr(), ip_current_src_addr(),
- tcphdr->dest, tcphdr->src);
- 8031a70: 681b ldr r3, [r3, #0]
- sender. */
- LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_input: no PCB match found, resetting.\n"));
- if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) {
- TCP_STATS_INC(tcp.proterr);
- TCP_STATS_INC(tcp.drop);
- tcp_rst(ackno, seqno + tcplen,
- 8031a72: 8811 ldrh r1, [r2, #0]
- 8031a74: 8858 ldrh r0, [r3, #2]
- 8031a76: 4a14 ldr r2, [pc, #80] ; (8031ac8 <tcp_input+0x80c>)
- 8031a78: 6812 ldr r2, [r2, #0]
- 8031a7a: 9000 str r0, [sp, #0]
- 8031a7c: 881b ldrh r3, [r3, #0]
- 8031a7e: 9301 str r3, [sp, #4]
- 8031a80: 4b06 ldr r3, [pc, #24] ; (8031a9c <tcp_input+0x7e0>)
- 8031a82: 1889 adds r1, r1, r2
- 8031a84: 6818 ldr r0, [r3, #0]
- 8031a86: e517 b.n 80314b8 <tcp_input+0x1fc>
- LWIP_ASSERT("tcp_input: tcp_pcbs_sane()", tcp_pcbs_sane());
- PERF_STOP("tcp_input");
- return;
- dropped:
- TCP_STATS_INC(tcp.drop);
- snmp_inc_tcpinerrs();
- 8031a88: f003 f8f6 bl 8034c78 <snmp_inc_tcpinerrs>
- pbuf_free(p);
- 8031a8c: 4630 mov r0, r6
- }
- 8031a8e: b003 add sp, #12
- 8031a90: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- PERF_STOP("tcp_input");
- return;
- dropped:
- TCP_STATS_INC(tcp.drop);
- snmp_inc_tcpinerrs();
- pbuf_free(p);
- 8031a94: f7fe b9ba b.w 802fe0c <pbuf_free>
- 8031a98: 2000f6c8 .word 0x2000f6c8
- 8031a9c: 2000c3ec .word 0x2000c3ec
- 8031aa0: 2000c3f1 .word 0x2000c3f1
- 8031aa4: 2000f6bc .word 0x2000f6bc
- 8031aa8: 2000c3f0 .word 0x2000c3f0
- 8031aac: 2000f6b8 .word 0x2000f6b8
- 8031ab0: 2000f6d0 .word 0x2000f6d0
- 8031ab4: 2000c3f4 .word 0x2000c3f4
- 8031ab8: 2000f6d4 .word 0x2000f6d4
- 8031abc: 2000c3fc .word 0x2000c3fc
- 8031ac0: 2000c3e0 .word 0x2000c3e0
- 8031ac4: 2000c3e8 .word 0x2000c3e8
- 8031ac8: 2000c3e4 .word 0x2000c3e4
- }
- if (pcb == NULL) {
- /* If it did not go to an active connection, we check the connections
- in the TIME-WAIT state. */
- for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
- 8031acc: 4b1b ldr r3, [pc, #108] ; (8031b3c <tcp_input+0x880>)
- 8031ace: 681b ldr r3, [r3, #0]
- 8031ad0: e4bf b.n 8031452 <tcp_input+0x196>
- tcp_debug_print_state(pcb->state);
- #endif /* TCP_DEBUG */
- #endif /* TCP_INPUT_DEBUG */
- /* Set up a tcp_seg structure. */
- inseg.next = NULL;
- 8031ad2: 4b1b ldr r3, [pc, #108] ; (8031b40 <tcp_input+0x884>)
- 8031ad4: 2100 movs r1, #0
- 8031ad6: 6019 str r1, [r3, #0]
- inseg.len = p->tot_len;
- 8031ad8: f8a3 8008 strh.w r8, [r3, #8]
- inseg.p = p;
- 8031adc: 605e str r6, [r3, #4]
- inseg.tcphdr = tcphdr;
- 8031ade: 60df str r7, [r3, #12]
- recv_data = NULL;
- 8031ae0: 4b18 ldr r3, [pc, #96] ; (8031b44 <tcp_input+0x888>)
- recv_flags = 0;
- if (flags & TCP_PSH) {
- 8031ae2: f002 0208 and.w r2, r2, #8
- inseg.next = NULL;
- inseg.len = p->tot_len;
- inseg.p = p;
- inseg.tcphdr = tcphdr;
- recv_data = NULL;
- 8031ae6: 6019 str r1, [r3, #0]
- recv_flags = 0;
- 8031ae8: 4b17 ldr r3, [pc, #92] ; (8031b48 <tcp_input+0x88c>)
- if (flags & TCP_PSH) {
- 8031aea: b2d2 uxtb r2, r2
- inseg.len = p->tot_len;
- inseg.p = p;
- inseg.tcphdr = tcphdr;
- recv_data = NULL;
- recv_flags = 0;
- 8031aec: 7019 strb r1, [r3, #0]
- if (flags & TCP_PSH) {
- 8031aee: 2a00 cmp r2, #0
- 8031af0: f47f ad52 bne.w 8031598 <tcp_input+0x2dc>
- 8031af4: e554 b.n 80315a0 <tcp_input+0x2e4>
- #endif /* SO_REUSE */
- if (lpcb != NULL) {
- /* Move this PCB to the front of the list so that subsequent
- lookups will be faster (we exploit locality in TCP segment
- arrivals). */
- if (prev != NULL) {
- 8031af6: 2b00 cmp r3, #0
- 8031af8: f47f acc4 bne.w 8031484 <tcp_input+0x1c8>
- 8031afc: e4c7 b.n 803148e <tcp_input+0x1d2>
- } else {
- /* If no matching PCB was found, send a TCP RST (reset) to the
- sender. */
- LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_input: no PCB match found, resetting.\n"));
- if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) {
- 8031afe: 89b8 ldrh r0, [r7, #12]
- 8031b00: f7fd f84b bl 802eb9a <lwip_ntohs>
- 8031b04: f000 0004 and.w r0, r0, #4
- 8031b08: b280 uxth r0, r0
- 8031b0a: 2800 cmp r0, #0
- 8031b0c: d1be bne.n 8031a8c <tcp_input+0x7d0>
- 8031b0e: e7ad b.n 8031a6c <tcp_input+0x7b0>
- }
- if (acceptable) {
- LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: Connection RESET\n"));
- LWIP_ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED);
- recv_flags |= TF_RESET;
- 8031b10: 4b0d ldr r3, [pc, #52] ; (8031b48 <tcp_input+0x88c>)
- 8031b12: 781a ldrb r2, [r3, #0]
- 8031b14: f042 0208 orr.w r2, r2, #8
- 8031b18: 701a strb r2, [r3, #0]
- pcb->flags &= ~TF_ACK_DELAY;
- 8031b1a: 7fa3 ldrb r3, [r4, #30]
- 8031b1c: f023 0301 bic.w r3, r3, #1
- 8031b20: 77a3 strb r3, [r4, #30]
- tcp_input_pcb = pcb;
- err = tcp_process(pcb);
- /* A return value of ERR_ABRT means that tcp_abort() was called
- and that the pcb has been freed. If so, we don't do anything. */
- if (err != ERR_ABRT) {
- if (recv_flags & TF_RESET) {
- 8031b22: 4b09 ldr r3, [pc, #36] ; (8031b48 <tcp_input+0x88c>)
- 8031b24: 781b ldrb r3, [r3, #0]
- 8031b26: f003 0208 and.w r2, r3, #8
- 8031b2a: b2d2 uxtb r2, r2
- 8031b2c: 2a00 cmp r2, #0
- 8031b2e: f47f af1f bne.w 8031970 <tcp_input+0x6b4>
- 8031b32: e724 b.n 803197e <tcp_input+0x6c2>
- return;
- dropped:
- TCP_STATS_INC(tcp.drop);
- snmp_inc_tcpinerrs();
- pbuf_free(p);
- }
- 8031b34: b003 add sp, #12
- 8031b36: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8031b3a: bf00 nop
- 8031b3c: 2000f6d0 .word 0x2000f6d0
- 8031b40: 2000c3fc .word 0x2000c3fc
- 8031b44: 2000c3f4 .word 0x2000c3f4
- 8031b48: 2000c3f1 .word 0x2000c3f1
- 08031b4c <tcp_pbuf_prealloc>:
- #if TCP_OVERSIZE
- static struct pbuf *
- tcp_pbuf_prealloc(pbuf_layer layer, u16_t length, u16_t max_length,
- u16_t *oversize, struct tcp_pcb *pcb, u8_t apiflags,
- u8_t first_seg)
- {
- 8031b4c: b570 push {r4, r5, r6, lr}
- LWIP_UNUSED_ARG(apiflags);
- LWIP_UNUSED_ARG(first_seg);
- /* always create MSS-sized pbufs */
- alloc = max_length;
- #else /* LWIP_NETIF_TX_SINGLE_PBUF */
- if (length < max_length) {
- 8031b4e: 4291 cmp r1, r2
- #if TCP_OVERSIZE
- static struct pbuf *
- tcp_pbuf_prealloc(pbuf_layer layer, u16_t length, u16_t max_length,
- u16_t *oversize, struct tcp_pcb *pcb, u8_t apiflags,
- u8_t first_seg)
- {
- 8031b50: 460c mov r4, r1
- 8031b52: 461e mov r6, r3
- 8031b54: 9d04 ldr r5, [sp, #16]
- LWIP_UNUSED_ARG(apiflags);
- LWIP_UNUSED_ARG(first_seg);
- /* always create MSS-sized pbufs */
- alloc = max_length;
- #else /* LWIP_NETIF_TX_SINGLE_PBUF */
- if (length < max_length) {
- 8031b56: d21a bcs.n 8031b8e <tcp_pbuf_prealloc+0x42>
- *
- * Did the user set TCP_WRITE_FLAG_MORE?
- *
- * Will the Nagle algorithm defer transmission of this segment?
- */
- if ((apiflags & TCP_WRITE_FLAG_MORE) ||
- 8031b58: f89d 3014 ldrb.w r3, [sp, #20]
- 8031b5c: f003 0302 and.w r3, r3, #2
- 8031b60: b2db uxtb r3, r3
- 8031b62: b95b cbnz r3, 8031b7c <tcp_pbuf_prealloc+0x30>
- (!(pcb->flags & TF_NODELAY) &&
- 8031b64: 7fab ldrb r3, [r5, #30]
- *
- * Did the user set TCP_WRITE_FLAG_MORE?
- *
- * Will the Nagle algorithm defer transmission of this segment?
- */
- if ((apiflags & TCP_WRITE_FLAG_MORE) ||
- 8031b66: f003 0340 and.w r3, r3, #64 ; 0x40
- 8031b6a: b2db uxtb r3, r3
- 8031b6c: b97b cbnz r3, 8031b8e <tcp_pbuf_prealloc+0x42>
- (!(pcb->flags & TF_NODELAY) &&
- 8031b6e: f89d 3018 ldrb.w r3, [sp, #24]
- 8031b72: b11b cbz r3, 8031b7c <tcp_pbuf_prealloc+0x30>
- (!first_seg ||
- 8031b74: 6ee9 ldr r1, [r5, #108] ; 0x6c
- 8031b76: b909 cbnz r1, 8031b7c <tcp_pbuf_prealloc+0x30>
- pcb->unsent != NULL ||
- 8031b78: 6f2b ldr r3, [r5, #112] ; 0x70
- 8031b7a: b143 cbz r3, 8031b8e <tcp_pbuf_prealloc+0x42>
- pcb->unacked != NULL))) {
- alloc = LWIP_MIN(max_length, LWIP_MEM_ALIGN_SIZE(length + TCP_OVERSIZE));
- 8031b7c: f204 51b7 addw r1, r4, #1463 ; 0x5b7
- 8031b80: f021 0103 bic.w r1, r1, #3
- 8031b84: 4291 cmp r1, r2
- 8031b86: bfa8 it ge
- 8031b88: 4611 movge r1, r2
- 8031b8a: b289 uxth r1, r1
- 8031b8c: e000 b.n 8031b90 <tcp_pbuf_prealloc+0x44>
- * Will the Nagle algorithm defer transmission of this segment?
- */
- if ((apiflags & TCP_WRITE_FLAG_MORE) ||
- (!(pcb->flags & TF_NODELAY) &&
- (!first_seg ||
- pcb->unsent != NULL ||
- 8031b8e: 4621 mov r1, r4
- pcb->unacked != NULL))) {
- alloc = LWIP_MIN(max_length, LWIP_MEM_ALIGN_SIZE(length + TCP_OVERSIZE));
- }
- }
- #endif /* LWIP_NETIF_TX_SINGLE_PBUF */
- p = pbuf_alloc(layer, alloc, PBUF_RAM);
- 8031b90: 2200 movs r2, #0
- 8031b92: f7fe f988 bl 802fea6 <pbuf_alloc>
- if (p == NULL) {
- 8031b96: b120 cbz r0, 8031ba2 <tcp_pbuf_prealloc+0x56>
- return NULL;
- }
- LWIP_ASSERT("need unchained pbuf", p->next == NULL);
- *oversize = p->len - length;
- 8031b98: 8943 ldrh r3, [r0, #10]
- 8031b9a: 1b1b subs r3, r3, r4
- 8031b9c: 8033 strh r3, [r6, #0]
- /* trim p->len to the currently used size */
- p->len = p->tot_len = length;
- 8031b9e: 8104 strh r4, [r0, #8]
- 8031ba0: 8144 strh r4, [r0, #10]
- return p;
- }
- 8031ba2: bd70 pop {r4, r5, r6, pc}
- 08031ba4 <tcp_create_segment>:
- * The TCP header is filled in except ackno and wnd.
- * p is freed on failure.
- */
- static struct tcp_seg *
- tcp_create_segment(struct tcp_pcb *pcb, struct pbuf *p, u8_t flags, u32_t seqno, u8_t optflags)
- {
- 8031ba4: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- 8031ba8: f89d 6020 ldrb.w r6, [sp, #32]
- struct tcp_seg *seg;
- u8_t optlen = LWIP_TCP_OPT_LENGTH(optflags);
- 8031bac: f006 0702 and.w r7, r6, #2
- 8031bb0: f016 0f01 tst.w r6, #1
- 8031bb4: b2ff uxtb r7, r7
- * The TCP header is filled in except ackno and wnd.
- * p is freed on failure.
- */
- static struct tcp_seg *
- tcp_create_segment(struct tcp_pcb *pcb, struct pbuf *p, u8_t flags, u32_t seqno, u8_t optflags)
- {
- 8031bb6: 4680 mov r8, r0
- 8031bb8: 469a mov sl, r3
- struct tcp_seg *seg;
- u8_t optlen = LWIP_TCP_OPT_LENGTH(optflags);
- 8031bba: bf0c ite eq
- 8031bbc: 2300 moveq r3, #0
- 8031bbe: 2304 movne r3, #4
- 8031bc0: 2f00 cmp r7, #0
- 8031bc2: bf14 ite ne
- 8031bc4: 270c movne r7, #12
- 8031bc6: 2700 moveq r7, #0
- if ((seg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG)) == NULL) {
- 8031bc8: 2004 movs r0, #4
- * The TCP header is filled in except ackno and wnd.
- * p is freed on failure.
- */
- static struct tcp_seg *
- tcp_create_segment(struct tcp_pcb *pcb, struct pbuf *p, u8_t flags, u32_t seqno, u8_t optflags)
- {
- 8031bca: 460d mov r5, r1
- 8031bcc: 4691 mov r9, r2
- struct tcp_seg *seg;
- u8_t optlen = LWIP_TCP_OPT_LENGTH(optflags);
- 8031bce: 18ff adds r7, r7, r3
- if ((seg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG)) == NULL) {
- 8031bd0: f7fd fffc bl 802fbcc <memp_malloc>
- 8031bd4: 4604 mov r4, r0
- 8031bd6: b918 cbnz r0, 8031be0 <tcp_create_segment+0x3c>
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_create_segment: no memory.\n"));
- pbuf_free(p);
- 8031bd8: 4628 mov r0, r5
- 8031bda: f7fe f917 bl 802fe0c <pbuf_free>
- return NULL;
- 8031bde: e030 b.n 8031c42 <tcp_create_segment+0x9e>
- }
- seg->flags = optflags;
- 8031be0: 7286 strb r6, [r0, #10]
- seg->next = NULL;
- seg->p = p;
- seg->len = p->tot_len - optlen;
- 8031be2: 892b ldrh r3, [r5, #8]
- pbuf_free(p);
- return NULL;
- }
- seg->flags = optflags;
- seg->next = NULL;
- seg->p = p;
- 8031be4: 6045 str r5, [r0, #4]
- seg->len = p->tot_len - optlen;
- 8031be6: 1bdb subs r3, r3, r7
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_create_segment: no memory.\n"));
- pbuf_free(p);
- return NULL;
- }
- seg->flags = optflags;
- seg->next = NULL;
- 8031be8: 2600 movs r6, #0
- 8031bea: 6006 str r6, [r0, #0]
- seg->p = p;
- seg->len = p->tot_len - optlen;
- 8031bec: 8103 strh r3, [r0, #8]
- LWIP_ASSERT("invalid optflags passed: TF_SEG_DATA_CHECKSUMMED",
- (optflags & TF_SEG_DATA_CHECKSUMMED) == 0);
- #endif /* TCP_CHECKSUM_ON_COPY */
- /* build TCP header */
- if (pbuf_header(p, TCP_HLEN)) {
- 8031bee: 2114 movs r1, #20
- 8031bf0: 4628 mov r0, r5
- 8031bf2: f7fe f8e0 bl 802fdb6 <pbuf_header>
- 8031bf6: 4605 mov r5, r0
- 8031bf8: b120 cbz r0, 8031c04 <tcp_create_segment+0x60>
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_create_segment: no room for TCP header in pbuf.\n"));
- TCP_STATS_INC(tcp.err);
- tcp_seg_free(seg);
- 8031bfa: 4620 mov r0, r4
- 8031bfc: f7fe fc35 bl 803046a <tcp_seg_free>
- return NULL;
- 8031c00: 4634 mov r4, r6
- 8031c02: e01e b.n 8031c42 <tcp_create_segment+0x9e>
- }
- seg->tcphdr = (struct tcp_hdr *)seg->p->payload;
- 8031c04: 6863 ldr r3, [r4, #4]
- seg->tcphdr->src = htons(pcb->local_port);
- 8031c06: f8b8 001a ldrh.w r0, [r8, #26]
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_create_segment: no room for TCP header in pbuf.\n"));
- TCP_STATS_INC(tcp.err);
- tcp_seg_free(seg);
- return NULL;
- }
- seg->tcphdr = (struct tcp_hdr *)seg->p->payload;
- 8031c0a: 685e ldr r6, [r3, #4]
- 8031c0c: 60e6 str r6, [r4, #12]
- seg->tcphdr->src = htons(pcb->local_port);
- 8031c0e: f7fc ffbf bl 802eb90 <lwip_htons>
- 8031c12: 8030 strh r0, [r6, #0]
- seg->tcphdr->dest = htons(pcb->remote_port);
- 8031c14: f8b8 001c ldrh.w r0, [r8, #28]
- 8031c18: 68e6 ldr r6, [r4, #12]
- 8031c1a: f7fc ffb9 bl 802eb90 <lwip_htons>
- 8031c1e: 8070 strh r0, [r6, #2]
- seg->tcphdr->seqno = htonl(seqno);
- 8031c20: 4650 mov r0, sl
- 8031c22: 68e6 ldr r6, [r4, #12]
- 8031c24: f7fc ffbe bl 802eba4 <lwip_htonl>
- /* ackno is set in tcp_output */
- TCPH_HDRLEN_FLAGS_SET(seg->tcphdr, (5 + optlen / 4), flags);
- 8031c28: 02bf lsls r7, r7, #10
- return NULL;
- }
- seg->tcphdr = (struct tcp_hdr *)seg->p->payload;
- seg->tcphdr->src = htons(pcb->local_port);
- seg->tcphdr->dest = htons(pcb->remote_port);
- seg->tcphdr->seqno = htonl(seqno);
- 8031c2a: 6070 str r0, [r6, #4]
- /* ackno is set in tcp_output */
- TCPH_HDRLEN_FLAGS_SET(seg->tcphdr, (5 + optlen / 4), flags);
- 8031c2c: f507 40a0 add.w r0, r7, #20480 ; 0x5000
- 8031c30: ea40 0009 orr.w r0, r0, r9
- 8031c34: 68e6 ldr r6, [r4, #12]
- 8031c36: f7fc ffab bl 802eb90 <lwip_htons>
- 8031c3a: 81b0 strh r0, [r6, #12]
- /* wnd and chksum are set in tcp_output */
- seg->tcphdr->urgp = 0;
- 8031c3c: 68e3 ldr r3, [r4, #12]
- 8031c3e: 749d strb r5, [r3, #18]
- 8031c40: 74dd strb r5, [r3, #19]
- return seg;
- }
- 8031c42: 4620 mov r0, r4
- 8031c44: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 08031c48 <tcp_output_alloc_header.constprop.0>:
- static struct pbuf *
- tcp_output_alloc_header(struct tcp_pcb *pcb, u16_t optlen, u16_t datalen,
- u32_t seqno_be /* already in network byte order */)
- {
- struct tcp_hdr *tcphdr;
- struct pbuf *p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM);
- 8031c48: 3114 adds r1, #20
- * @param datalen length of tcp data to reserve in pbuf
- * @param seqno_be seqno in network byte order (big-endian)
- * @return pbuf with p->payload being the tcp_hdr
- */
- static struct pbuf *
- tcp_output_alloc_header(struct tcp_pcb *pcb, u16_t optlen, u16_t datalen,
- 8031c4a: b5f8 push {r3, r4, r5, r6, r7, lr}
- u32_t seqno_be /* already in network byte order */)
- {
- struct tcp_hdr *tcphdr;
- struct pbuf *p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM);
- 8031c4c: b289 uxth r1, r1
- * @param datalen length of tcp data to reserve in pbuf
- * @param seqno_be seqno in network byte order (big-endian)
- * @return pbuf with p->payload being the tcp_hdr
- */
- static struct pbuf *
- tcp_output_alloc_header(struct tcp_pcb *pcb, u16_t optlen, u16_t datalen,
- 8031c4e: 4605 mov r5, r0
- 8031c50: 4617 mov r7, r2
- u32_t seqno_be /* already in network byte order */)
- {
- struct tcp_hdr *tcphdr;
- struct pbuf *p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM);
- 8031c52: 2001 movs r0, #1
- 8031c54: 2200 movs r2, #0
- 8031c56: f7fe f926 bl 802fea6 <pbuf_alloc>
- if (p != NULL) {
- 8031c5a: 4606 mov r6, r0
- 8031c5c: b1f8 cbz r0, 8031c9e <tcp_output_alloc_header.constprop.0+0x56>
- LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr",
- (p->len >= TCP_HLEN + optlen));
- tcphdr = (struct tcp_hdr *)p->payload;
- 8031c5e: 6844 ldr r4, [r0, #4]
- tcphdr->src = htons(pcb->local_port);
- 8031c60: 8b68 ldrh r0, [r5, #26]
- 8031c62: f7fc ff95 bl 802eb90 <lwip_htons>
- 8031c66: 8020 strh r0, [r4, #0]
- tcphdr->dest = htons(pcb->remote_port);
- 8031c68: 8ba8 ldrh r0, [r5, #28]
- 8031c6a: f7fc ff91 bl 802eb90 <lwip_htons>
- tcphdr->seqno = seqno_be;
- 8031c6e: 6067 str r7, [r4, #4]
- if (p != NULL) {
- LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr",
- (p->len >= TCP_HLEN + optlen));
- tcphdr = (struct tcp_hdr *)p->payload;
- tcphdr->src = htons(pcb->local_port);
- tcphdr->dest = htons(pcb->remote_port);
- 8031c70: 8060 strh r0, [r4, #2]
- tcphdr->seqno = seqno_be;
- tcphdr->ackno = htonl(pcb->rcv_nxt);
- 8031c72: 6aa8 ldr r0, [r5, #40] ; 0x28
- 8031c74: f7fc ff96 bl 802eba4 <lwip_htonl>
- 8031c78: 60a0 str r0, [r4, #8]
- TCPH_HDRLEN_FLAGS_SET(tcphdr, (5 + optlen / 4), TCP_ACK);
- 8031c7a: f245 0010 movw r0, #20496 ; 0x5010
- 8031c7e: f7fc ff87 bl 802eb90 <lwip_htons>
- 8031c82: 81a0 strh r0, [r4, #12]
- tcphdr->wnd = htons(pcb->rcv_ann_wnd);
- 8031c84: 8de8 ldrh r0, [r5, #46] ; 0x2e
- 8031c86: f7fc ff83 bl 802eb90 <lwip_htons>
- tcphdr->chksum = 0;
- 8031c8a: 2300 movs r3, #0
- tcphdr->src = htons(pcb->local_port);
- tcphdr->dest = htons(pcb->remote_port);
- tcphdr->seqno = seqno_be;
- tcphdr->ackno = htonl(pcb->rcv_nxt);
- TCPH_HDRLEN_FLAGS_SET(tcphdr, (5 + optlen / 4), TCP_ACK);
- tcphdr->wnd = htons(pcb->rcv_ann_wnd);
- 8031c8c: 81e0 strh r0, [r4, #14]
- tcphdr->chksum = 0;
- 8031c8e: 7423 strb r3, [r4, #16]
- 8031c90: 7463 strb r3, [r4, #17]
- tcphdr->urgp = 0;
- 8031c92: 74a3 strb r3, [r4, #18]
- 8031c94: 74e3 strb r3, [r4, #19]
- /* If we're sending a packet, update the announced right window edge */
- pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd;
- 8031c96: 8dea ldrh r2, [r5, #46] ; 0x2e
- 8031c98: 6aab ldr r3, [r5, #40] ; 0x28
- 8031c9a: 18d3 adds r3, r2, r3
- 8031c9c: 632b str r3, [r5, #48] ; 0x30
- }
- return p;
- }
- 8031c9e: 4630 mov r0, r6
- 8031ca0: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 08031ca2 <tcp_write>:
- * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will be set on last segment sent,
- * @return ERR_OK if enqueued, another err_t on error
- */
- err_t
- tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags)
- {
- 8031ca2: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8031ca6: b08f sub sp, #60 ; 0x3c
- 8031ca8: 4691 mov r9, r2
- 8031caa: 9307 str r3, [sp, #28]
- u16_t pos = 0; /* position in 'arg' data */
- u16_t queuelen;
- u8_t optlen = 0;
- u8_t optflags = 0;
- #if TCP_OVERSIZE
- u16_t oversize = 0;
- 8031cac: 2300 movs r3, #0
- 8031cae: f8ad 3036 strh.w r3, [sp, #54] ; 0x36
- * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will be set on last segment sent,
- * @return ERR_OK if enqueued, another err_t on error
- */
- err_t
- tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags)
- {
- 8031cb2: 4604 mov r4, r0
- u8_t concat_chksum_swapped = 0;
- u16_t concat_chksummed = 0;
- #endif /* TCP_CHECKSUM_ON_COPY */
- err_t err;
- /* don't allocate segments bigger than half the maximum window we ever received */
- u16_t mss_local = LWIP_MIN(pcb->mss, pcb->snd_wnd_max/2);
- 8031cb4: f8b0 2062 ldrh.w r2, [r0, #98] ; 0x62
- 8031cb8: 8ec3 ldrh r3, [r0, #54] ; 0x36
- apiflags |= TCP_WRITE_FLAG_COPY;
- #endif /* LWIP_NETIF_TX_SINGLE_PBUF */
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_write(pcb=%p, data=%p, len=%"U16_F", apiflags=%"U16_F")\n",
- (void *)pcb, arg, len, (u16_t)apiflags));
- LWIP_ERROR("tcp_write: arg == NULL (programmer violates API)",
- 8031cba: 9106 str r1, [sp, #24]
- 8031cbc: 2900 cmp r1, #0
- 8031cbe: f000 8168 beq.w 8031f92 <tcp_write+0x2f0>
- 8031cc2: 7e01 ldrb r1, [r0, #24]
- 8031cc4: 2907 cmp r1, #7
- 8031cc6: f200 8166 bhi.w 8031f96 <tcp_write+0x2f4>
- 8031cca: f990 1018 ldrsb.w r1, [r0, #24]
- 8031cce: f04f 5064 mov.w r0, #956301312 ; 0x39000000
- 8031cd2: 4088 lsls r0, r1
- 8031cd4: f140 815f bpl.w 8031f96 <tcp_write+0x2f4>
- (pcb->state != CLOSE_WAIT) &&
- (pcb->state != SYN_SENT) &&
- (pcb->state != SYN_RCVD)) {
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_STATE | LWIP_DBG_LEVEL_SEVERE, ("tcp_write() called in invalid state\n"));
- return ERR_CONN;
- } else if (len == 0) {
- 8031cd8: f1b9 0f00 cmp.w r9, #0
- 8031cdc: d00d beq.n 8031cfa <tcp_write+0x58>
- return ERR_OK;
- }
- /* fail on too much data */
- if (len > pcb->snd_buf) {
- 8031cde: f8b4 1066 ldrh.w r1, [r4, #102] ; 0x66
- 8031ce2: 4549 cmp r1, r9
- 8031ce4: d200 bcs.n 8031ce8 <tcp_write+0x46>
- 8031ce6: e003 b.n 8031cf0 <tcp_write+0x4e>
- LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_write: queuelen: %"U16_F"\n", (u16_t)pcb->snd_queuelen));
- /* If total number of pbufs on the unsent/unacked queues exceeds the
- * configured maximum, return an error */
- /* check for configured max queuelen and possible overflow */
- if ((pcb->snd_queuelen >= TCP_SND_QUEUELEN) || (pcb->snd_queuelen > TCP_SNDQUEUELEN_OVERFLOW)) {
- 8031ce8: f8b4 1068 ldrh.w r1, [r4, #104] ; 0x68
- 8031cec: 2947 cmp r1, #71 ; 0x47
- 8031cee: d904 bls.n 8031cfa <tcp_write+0x58>
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, ("tcp_write: too long queue %"U16_F" (max %"U16_F")\n",
- pcb->snd_queuelen, TCP_SND_QUEUELEN));
- TCP_STATS_INC(tcp.memerr);
- pcb->flags |= TF_NAGLEMEMERR;
- 8031cf0: 7fa3 ldrb r3, [r4, #30]
- 8031cf2: f063 037f orn r3, r3, #127 ; 0x7f
- 8031cf6: 77a3 strb r3, [r4, #30]
- 8031cf8: e151 b.n 8031f9e <tcp_write+0x2fc>
- u8_t concat_chksum_swapped = 0;
- u16_t concat_chksummed = 0;
- #endif /* TCP_CHECKSUM_ON_COPY */
- err_t err;
- /* don't allocate segments bigger than half the maximum window we ever received */
- u16_t mss_local = LWIP_MIN(pcb->mss, pcb->snd_wnd_max/2);
- 8031cfa: 0852 lsrs r2, r2, #1
- *
- * pos records progress as data is segmented.
- */
- /* Find the tail of the unsent queue. */
- if (pcb->unsent != NULL) {
- 8031cfc: 6ee6 ldr r6, [r4, #108] ; 0x6c
- err = tcp_write_checks(pcb, len);
- if (err != ERR_OK) {
- return err;
- }
- queuelen = pcb->snd_queuelen;
- 8031cfe: f8b4 b068 ldrh.w fp, [r4, #104] ; 0x68
- u8_t concat_chksum_swapped = 0;
- u16_t concat_chksummed = 0;
- #endif /* TCP_CHECKSUM_ON_COPY */
- err_t err;
- /* don't allocate segments bigger than half the maximum window we ever received */
- u16_t mss_local = LWIP_MIN(pcb->mss, pcb->snd_wnd_max/2);
- 8031d02: 429a cmp r2, r3
- 8031d04: bf28 it cs
- 8031d06: 461a movcs r2, r3
- 8031d08: 920a str r2, [sp, #40] ; 0x28
- *
- * pos records progress as data is segmented.
- */
- /* Find the tail of the unsent queue. */
- if (pcb->unsent != NULL) {
- 8031d0a: b90e cbnz r6, 8031d10 <tcp_write+0x6e>
- 8031d0c: e066 b.n 8031ddc <tcp_write+0x13a>
- u16_t space;
- u16_t unsent_optlen;
- /* @todo: this could be sped up by keeping last_unsent in the pcb */
- for (last_unsent = pcb->unsent; last_unsent->next != NULL;
- last_unsent = last_unsent->next);
- 8031d0e: 461e mov r6, r3
- if (pcb->unsent != NULL) {
- u16_t space;
- u16_t unsent_optlen;
- /* @todo: this could be sped up by keeping last_unsent in the pcb */
- for (last_unsent = pcb->unsent; last_unsent->next != NULL;
- 8031d10: 6833 ldr r3, [r6, #0]
- 8031d12: 2b00 cmp r3, #0
- 8031d14: d1fb bne.n 8031d0e <tcp_write+0x6c>
- last_unsent = last_unsent->next);
- /* Usable space at the end of the last unsent segment */
- unsent_optlen = LWIP_TCP_OPT_LENGTH(last_unsent->flags);
- 8031d16: 7ab3 ldrb r3, [r6, #10]
- space = mss_local - (last_unsent->len + unsent_optlen);
- 8031d18: 8937 ldrh r7, [r6, #8]
- /* @todo: this could be sped up by keeping last_unsent in the pcb */
- for (last_unsent = pcb->unsent; last_unsent->next != NULL;
- last_unsent = last_unsent->next);
- /* Usable space at the end of the last unsent segment */
- unsent_optlen = LWIP_TCP_OPT_LENGTH(last_unsent->flags);
- 8031d1a: 980a ldr r0, [sp, #40] ; 0x28
- #if TCP_OVERSIZE_DBGCHECK
- /* check that pcb->unsent_oversize matches last_unsent->unsent_oversize */
- LWIP_ASSERT("unsent_oversize mismatch (pcb vs. last_unsent)",
- pcb->unsent_oversize == last_unsent->oversize_left);
- #endif /* TCP_OVERSIZE_DBGCHECK */
- oversize = pcb->unsent_oversize;
- 8031d1c: f8b4 506a ldrh.w r5, [r4, #106] ; 0x6a
- /* @todo: this could be sped up by keeping last_unsent in the pcb */
- for (last_unsent = pcb->unsent; last_unsent->next != NULL;
- last_unsent = last_unsent->next);
- /* Usable space at the end of the last unsent segment */
- unsent_optlen = LWIP_TCP_OPT_LENGTH(last_unsent->flags);
- 8031d20: f013 0f01 tst.w r3, #1
- 8031d24: f003 0302 and.w r3, r3, #2
- 8031d28: bf0c ite eq
- 8031d2a: 2100 moveq r1, #0
- 8031d2c: 2104 movne r1, #4
- 8031d2e: b2db uxtb r3, r3
- 8031d30: 1bc2 subs r2, r0, r7
- 8031d32: 2b00 cmp r3, #0
- 8031d34: bf14 ite ne
- 8031d36: 230c movne r3, #12
- 8031d38: 2300 moveq r3, #0
- space = mss_local - (last_unsent->len + unsent_optlen);
- 8031d3a: 1a52 subs r2, r2, r1
- 8031d3c: 1ad2 subs r2, r2, r3
- 8031d3e: b292 uxth r2, r2
- /* check that pcb->unsent_oversize matches last_unsent->unsent_oversize */
- LWIP_ASSERT("unsent_oversize mismatch (pcb vs. last_unsent)",
- pcb->unsent_oversize == last_unsent->oversize_left);
- #endif /* TCP_OVERSIZE_DBGCHECK */
- oversize = pcb->unsent_oversize;
- if (oversize > 0) {
- 8031d40: b91d cbnz r5, 8031d4a <tcp_write+0xa8>
- #if TCP_OVERSIZE_DBGCHECK
- /* check that pcb->unsent_oversize matches last_unsent->unsent_oversize */
- LWIP_ASSERT("unsent_oversize mismatch (pcb vs. last_unsent)",
- pcb->unsent_oversize == last_unsent->oversize_left);
- #endif /* TCP_OVERSIZE_DBGCHECK */
- oversize = pcb->unsent_oversize;
- 8031d42: f8ad 5036 strh.w r5, [sp, #54] ; 0x36
- */
- err_t
- tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags)
- {
- struct pbuf *concat_p = NULL;
- struct tcp_seg *last_unsent = NULL, *seg = NULL, *prev_seg = NULL, *queue = NULL;
- 8031d46: 462b mov r3, r5
- 8031d48: e00a b.n 8031d60 <tcp_write+0xbe>
- #endif /* TCP_OVERSIZE_DBGCHECK */
- oversize = pcb->unsent_oversize;
- if (oversize > 0) {
- LWIP_ASSERT("inconsistent oversize vs. space", oversize_used <= space);
- seg = last_unsent;
- oversize_used = oversize < len ? oversize : len;
- 8031d4a: 45a9 cmp r9, r5
- 8031d4c: bf34 ite cc
- 8031d4e: 464b movcc r3, r9
- 8031d50: 462b movcs r3, r5
- pos += oversize_used;
- oversize -= oversize_used;
- 8031d52: 1aed subs r5, r5, r3
- space -= oversize_used;
- 8031d54: 1ad2 subs r2, r2, r3
- if (oversize > 0) {
- LWIP_ASSERT("inconsistent oversize vs. space", oversize_used <= space);
- seg = last_unsent;
- oversize_used = oversize < len ? oversize : len;
- pos += oversize_used;
- oversize -= oversize_used;
- 8031d56: f8ad 5036 strh.w r5, [sp, #54] ; 0x36
- space -= oversize_used;
- 8031d5a: b292 uxth r2, r2
- oversize = pcb->unsent_oversize;
- if (oversize > 0) {
- LWIP_ASSERT("inconsistent oversize vs. space", oversize_used <= space);
- seg = last_unsent;
- oversize_used = oversize < len ? oversize : len;
- pos += oversize_used;
- 8031d5c: 461d mov r5, r3
- oversize -= oversize_used;
- space -= oversize_used;
- 8031d5e: 4633 mov r3, r6
- *
- * We don't extend segments containing SYN/FIN flags or options
- * (len==0). The new pbuf is kept in concat_p and pbuf_cat'ed at
- * the end.
- */
- if ((pos < len) && (space > 0) && (last_unsent->len > 0)) {
- 8031d60: 454d cmp r5, r9
- 8031d62: d23f bcs.n 8031de4 <tcp_write+0x142>
- 8031d64: 2a00 cmp r2, #0
- 8031d66: d03d beq.n 8031de4 <tcp_write+0x142>
- 8031d68: 2f00 cmp r7, #0
- 8031d6a: d03e beq.n 8031dea <tcp_write+0x148>
- seg = last_unsent;
- /* Create a pbuf with a copy or reference to seglen bytes. We
- * can use PBUF_RAW here since the data appears in the middle of
- * a segment. A header will never be prepended. */
- if (apiflags & TCP_WRITE_FLAG_COPY) {
- 8031d6c: 9907 ldr r1, [sp, #28]
- * We don't extend segments containing SYN/FIN flags or options
- * (len==0). The new pbuf is kept in concat_p and pbuf_cat'ed at
- * the end.
- */
- if ((pos < len) && (space > 0) && (last_unsent->len > 0)) {
- u16_t seglen = space < len - pos ? space : len - pos;
- 8031d6e: ebc5 0a09 rsb sl, r5, r9
- 8031d72: 4592 cmp sl, r2
- 8031d74: bfa8 it ge
- 8031d76: 4692 movge sl, r2
- seg = last_unsent;
- /* Create a pbuf with a copy or reference to seglen bytes. We
- * can use PBUF_RAW here since the data appears in the middle of
- * a segment. A header will never be prepended. */
- if (apiflags & TCP_WRITE_FLAG_COPY) {
- 8031d78: 07cb lsls r3, r1, #31
- * We don't extend segments containing SYN/FIN flags or options
- * (len==0). The new pbuf is kept in concat_p and pbuf_cat'ed at
- * the end.
- */
- if ((pos < len) && (space > 0) && (last_unsent->len > 0)) {
- u16_t seglen = space < len - pos ? space : len - pos;
- 8031d7a: fa1f f88a uxth.w r8, sl
- seg = last_unsent;
- /* Create a pbuf with a copy or reference to seglen bytes. We
- * can use PBUF_RAW here since the data appears in the middle of
- * a segment. A header will never be prepended. */
- if (apiflags & TCP_WRITE_FLAG_COPY) {
- 8031d7e: d514 bpl.n 8031daa <tcp_write+0x108>
- /* Data is copied */
- if ((concat_p = tcp_pbuf_prealloc(PBUF_RAW, seglen, space, &oversize, pcb, apiflags, 1)) == NULL) {
- 8031d80: 2301 movs r3, #1
- 8031d82: 9101 str r1, [sp, #4]
- 8031d84: 9302 str r3, [sp, #8]
- 8031d86: 9400 str r4, [sp, #0]
- 8031d88: 2003 movs r0, #3
- 8031d8a: 4641 mov r1, r8
- 8031d8c: f10d 0336 add.w r3, sp, #54 ; 0x36
- 8031d90: f7ff fedc bl 8031b4c <tcp_pbuf_prealloc>
- 8031d94: 4607 mov r7, r0
- 8031d96: 2800 cmp r0, #0
- 8031d98: f000 80e9 beq.w 8031f6e <tcp_write+0x2cc>
- goto memerr;
- }
- #if TCP_OVERSIZE_DBGCHECK
- last_unsent->oversize_left += oversize;
- #endif /* TCP_OVERSIZE_DBGCHECK */
- TCP_DATA_COPY2(concat_p->payload, (u8_t*)arg + pos, seglen, &concat_chksum, &concat_chksum_swapped);
- 8031d9c: 9a06 ldr r2, [sp, #24]
- 8031d9e: 6840 ldr r0, [r0, #4]
- 8031da0: 1951 adds r1, r2, r5
- 8031da2: 4642 mov r2, r8
- 8031da4: f7ef fdf2 bl 802198c <memcpy>
- 8031da8: e00b b.n 8031dc2 <tcp_write+0x120>
- #if TCP_CHECKSUM_ON_COPY
- concat_chksummed += seglen;
- #endif /* TCP_CHECKSUM_ON_COPY */
- } else {
- /* Data is not copied */
- if ((concat_p = pbuf_alloc(PBUF_RAW, seglen, PBUF_ROM)) == NULL) {
- 8031daa: 2003 movs r0, #3
- 8031dac: 4641 mov r1, r8
- 8031dae: 2201 movs r2, #1
- 8031db0: f7fe f879 bl 802fea6 <pbuf_alloc>
- 8031db4: 4607 mov r7, r0
- 8031db6: 2800 cmp r0, #0
- 8031db8: f000 80d9 beq.w 8031f6e <tcp_write+0x2cc>
- tcp_seg_add_chksum(~inet_chksum((u8_t*)arg + pos, seglen), seglen,
- &concat_chksum, &concat_chksum_swapped);
- concat_chksummed += seglen;
- #endif /* TCP_CHECKSUM_ON_COPY */
- /* reference the non-volatile payload data */
- concat_p->payload = (u8_t*)arg + pos;
- 8031dbc: 9806 ldr r0, [sp, #24]
- 8031dbe: 1943 adds r3, r0, r5
- 8031dc0: 607b str r3, [r7, #4]
- }
- pos += seglen;
- queuelen += pbuf_clen(concat_p);
- 8031dc2: 4638 mov r0, r7
- 8031dc4: f7fe f8f6 bl 802ffb4 <pbuf_clen>
- #endif /* TCP_CHECKSUM_ON_COPY */
- /* reference the non-volatile payload data */
- concat_p->payload = (u8_t*)arg + pos;
- }
- pos += seglen;
- 8031dc8: 44a8 add r8, r5
- 8031dca: fa1f f888 uxth.w r8, r8
- queuelen += pbuf_clen(concat_p);
- 8031dce: 4458 add r0, fp
- 8031dd0: 46aa mov sl, r5
- 8031dd2: fa1f fb80 uxth.w fp, r0
- #endif /* TCP_CHECKSUM_ON_COPY */
- /* reference the non-volatile payload data */
- concat_p->payload = (u8_t*)arg + pos;
- }
- pos += seglen;
- 8031dd6: 4645 mov r5, r8
- queuelen += pbuf_clen(concat_p);
- 8031dd8: 4633 mov r3, r6
- 8031dda: e007 b.n 8031dec <tcp_write+0x14a>
- u16_t queuelen;
- u8_t optlen = 0;
- u8_t optflags = 0;
- #if TCP_OVERSIZE
- u16_t oversize = 0;
- u16_t oversize_used = 0;
- 8031ddc: 46b2 mov sl, r6
- err_t
- tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags)
- {
- struct pbuf *concat_p = NULL;
- struct tcp_seg *last_unsent = NULL, *seg = NULL, *prev_seg = NULL, *queue = NULL;
- u16_t pos = 0; /* position in 'arg' data */
- 8031dde: 4635 mov r5, r6
- */
- err_t
- tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags)
- {
- struct pbuf *concat_p = NULL;
- struct tcp_seg *last_unsent = NULL, *seg = NULL, *prev_seg = NULL, *queue = NULL;
- 8031de0: 4633 mov r3, r6
- 8031de2: e000 b.n 8031de6 <tcp_write+0x144>
- *
- * We don't extend segments containing SYN/FIN flags or options
- * (len==0). The new pbuf is kept in concat_p and pbuf_cat'ed at
- * the end.
- */
- if ((pos < len) && (space > 0) && (last_unsent->len > 0)) {
- 8031de4: 46aa mov sl, r5
- * @return ERR_OK if enqueued, another err_t on error
- */
- err_t
- tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags)
- {
- struct pbuf *concat_p = NULL;
- 8031de6: 2700 movs r7, #0
- 8031de8: e000 b.n 8031dec <tcp_write+0x14a>
- *
- * We don't extend segments containing SYN/FIN flags or options
- * (len==0). The new pbuf is kept in concat_p and pbuf_cat'ed at
- * the end.
- */
- if ((pos < len) && (space > 0) && (last_unsent->len > 0)) {
- 8031dea: 46aa mov sl, r5
- #if TCP_CHECKSUM_ON_COPY
- u16_t chksum = 0;
- u8_t chksum_swapped = 0;
- #endif /* TCP_CHECKSUM_ON_COPY */
- if (apiflags & TCP_WRITE_FLAG_COPY) {
- 8031dec: 9907 ldr r1, [sp, #28]
- seg->chksum_swapped = chksum_swapped;
- seg->flags |= TF_SEG_DATA_CHECKSUMMED;
- #endif /* TCP_CHECKSUM_ON_COPY */
- /* first segment of to-be-queued data? */
- if (queue == NULL) {
- 8031dee: f04f 0800 mov.w r8, #0
- #if TCP_CHECKSUM_ON_COPY
- u16_t chksum = 0;
- u8_t chksum_swapped = 0;
- #endif /* TCP_CHECKSUM_ON_COPY */
- if (apiflags & TCP_WRITE_FLAG_COPY) {
- 8031df2: f001 0101 and.w r1, r1, #1
- seg->chksum_swapped = chksum_swapped;
- seg->flags |= TF_SEG_DATA_CHECKSUMMED;
- #endif /* TCP_CHECKSUM_ON_COPY */
- /* first segment of to-be-queued data? */
- if (queue == NULL) {
- 8031df6: f8cd 802c str.w r8, [sp, #44] ; 0x2c
- #if TCP_CHECKSUM_ON_COPY
- u16_t chksum = 0;
- u8_t chksum_swapped = 0;
- #endif /* TCP_CHECKSUM_ON_COPY */
- if (apiflags & TCP_WRITE_FLAG_COPY) {
- 8031dfa: 9108 str r1, [sp, #32]
- 8031dfc: e068 b.n 8031ed0 <tcp_write+0x22e>
- * The new segments are chained together in the local 'queue'
- * variable, ready to be appended to pcb->unsent.
- */
- while (pos < len) {
- struct pbuf *p;
- u16_t left = len - pos;
- 8031dfe: ebc5 0309 rsb r3, r5, r9
- u16_t max_len = mss_local - optlen;
- u16_t seglen = left > max_len ? max_len : left;
- 8031e02: 9a0a ldr r2, [sp, #40] ; 0x28
- 8031e04: b29b uxth r3, r3
- 8031e06: 4293 cmp r3, r2
- 8031e08: bf38 it cc
- 8031e0a: 461a movcc r2, r3
- #if TCP_CHECKSUM_ON_COPY
- u16_t chksum = 0;
- u8_t chksum_swapped = 0;
- #endif /* TCP_CHECKSUM_ON_COPY */
- if (apiflags & TCP_WRITE_FLAG_COPY) {
- 8031e0c: 9b08 ldr r3, [sp, #32]
- */
- while (pos < len) {
- struct pbuf *p;
- u16_t left = len - pos;
- u16_t max_len = mss_local - optlen;
- u16_t seglen = left > max_len ? max_len : left;
- 8031e0e: 9209 str r2, [sp, #36] ; 0x24
- #if TCP_CHECKSUM_ON_COPY
- u16_t chksum = 0;
- u8_t chksum_swapped = 0;
- #endif /* TCP_CHECKSUM_ON_COPY */
- if (apiflags & TCP_WRITE_FLAG_COPY) {
- 8031e10: b1db cbz r3, 8031e4a <tcp_write+0x1a8>
- /* If copy is set, memory should be allocated and data copied
- * into pbuf */
- if ((p = tcp_pbuf_prealloc(PBUF_TRANSPORT, seglen + optlen, mss_local, &oversize, pcb, apiflags, queue == NULL)) == NULL) {
- 8031e12: f1d8 0301 rsbs r3, r8, #1
- 8031e16: 9807 ldr r0, [sp, #28]
- 8031e18: 9400 str r4, [sp, #0]
- 8031e1a: bf38 it cc
- 8031e1c: 2300 movcc r3, #0
- 8031e1e: 9001 str r0, [sp, #4]
- 8031e20: 9302 str r3, [sp, #8]
- 8031e22: 4611 mov r1, r2
- 8031e24: 2000 movs r0, #0
- 8031e26: 9a0a ldr r2, [sp, #40] ; 0x28
- 8031e28: f10d 0336 add.w r3, sp, #54 ; 0x36
- 8031e2c: f7ff fe8e bl 8031b4c <tcp_pbuf_prealloc>
- 8031e30: 4684 mov ip, r0
- 8031e32: 2800 cmp r0, #0
- 8031e34: f000 809e beq.w 8031f74 <tcp_write+0x2d2>
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_write : could not allocate memory for pbuf copy size %"U16_F"\n", seglen));
- goto memerr;
- }
- LWIP_ASSERT("tcp_write: check that first pbuf can hold the complete seglen",
- (p->len >= seglen));
- TCP_DATA_COPY2((char *)p->payload + optlen, (u8_t*)arg + pos, seglen, &chksum, &chksum_swapped);
- 8031e38: 9a06 ldr r2, [sp, #24]
- 8031e3a: 6840 ldr r0, [r0, #4]
- 8031e3c: f8cd c014 str.w ip, [sp, #20]
- 8031e40: 1951 adds r1, r2, r5
- 8031e42: 9a09 ldr r2, [sp, #36] ; 0x24
- 8031e44: f7ef fda2 bl 802198c <memcpy>
- 8031e48: e019 b.n 8031e7e <tcp_write+0x1dc>
- */
- struct pbuf *p2;
- #if TCP_OVERSIZE
- LWIP_ASSERT("oversize == 0", oversize == 0);
- #endif /* TCP_OVERSIZE */
- if ((p2 = pbuf_alloc(PBUF_TRANSPORT, seglen, PBUF_ROM)) == NULL) {
- 8031e4a: 9808 ldr r0, [sp, #32]
- 8031e4c: 9909 ldr r1, [sp, #36] ; 0x24
- 8031e4e: 2201 movs r2, #1
- 8031e50: f7fe f829 bl 802fea6 <pbuf_alloc>
- 8031e54: 4603 mov r3, r0
- 8031e56: 2800 cmp r0, #0
- 8031e58: f000 808c beq.w 8031f74 <tcp_write+0x2d2>
- #if TCP_CHECKSUM_ON_COPY
- /* calculate the checksum of nocopy-data */
- chksum = ~inet_chksum((u8_t*)arg + pos, seglen);
- #endif /* TCP_CHECKSUM_ON_COPY */
- /* reference the non-volatile payload data */
- p2->payload = (u8_t*)arg + pos;
- 8031e5c: 9806 ldr r0, [sp, #24]
- 8031e5e: 1942 adds r2, r0, r5
- /* Second, allocate a pbuf for the headers. */
- if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) {
- 8031e60: 9808 ldr r0, [sp, #32]
- #if TCP_CHECKSUM_ON_COPY
- /* calculate the checksum of nocopy-data */
- chksum = ~inet_chksum((u8_t*)arg + pos, seglen);
- #endif /* TCP_CHECKSUM_ON_COPY */
- /* reference the non-volatile payload data */
- p2->payload = (u8_t*)arg + pos;
- 8031e62: 605a str r2, [r3, #4]
- /* Second, allocate a pbuf for the headers. */
- if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) {
- 8031e64: 4601 mov r1, r0
- 8031e66: 4602 mov r2, r0
- 8031e68: 9305 str r3, [sp, #20]
- 8031e6a: f7fe f81c bl 802fea6 <pbuf_alloc>
- 8031e6e: 9b05 ldr r3, [sp, #20]
- 8031e70: b908 cbnz r0, 8031e76 <tcp_write+0x1d4>
- /* If allocation fails, we have to deallocate the data pbuf as
- * well. */
- pbuf_free(p2);
- 8031e72: 4618 mov r0, r3
- 8031e74: e013 b.n 8031e9e <tcp_write+0x1fc>
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_write: could not allocate memory for header pbuf\n"));
- goto memerr;
- }
- /* Concatenate the headers and data pbufs together. */
- pbuf_cat(p/*header*/, p2/*data*/);
- 8031e76: 4619 mov r1, r3
- 8031e78: 9005 str r0, [sp, #20]
- 8031e7a: f7fe f8b1 bl 802ffe0 <pbuf_cat>
- 8031e7e: f8dd c014 ldr.w ip, [sp, #20]
- }
- queuelen += pbuf_clen(p);
- 8031e82: 4660 mov r0, ip
- 8031e84: f8cd c014 str.w ip, [sp, #20]
- 8031e88: f7fe f894 bl 802ffb4 <pbuf_clen>
- 8031e8c: 4458 add r0, fp
- 8031e8e: fa1f fb80 uxth.w fp, r0
- /* Now that there are more segments queued, we check again if the
- * length of the queue exceeds the configured maximum or
- * overflows. */
- if ((queuelen > TCP_SND_QUEUELEN) || (queuelen > TCP_SNDQUEUELEN_OVERFLOW)) {
- 8031e92: f1bb 0f48 cmp.w fp, #72 ; 0x48
- 8031e96: f8dd c014 ldr.w ip, [sp, #20]
- 8031e9a: d903 bls.n 8031ea4 <tcp_write+0x202>
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_write: queue too long %"U16_F" (%"U16_F")\n", queuelen, TCP_SND_QUEUELEN));
- pbuf_free(p);
- 8031e9c: 4660 mov r0, ip
- 8031e9e: f7fd ffb5 bl 802fe0c <pbuf_free>
- goto memerr;
- 8031ea2: e067 b.n 8031f74 <tcp_write+0x2d2>
- }
- if ((seg = tcp_create_segment(pcb, p, 0, pcb->snd_lbb + pos, optflags)) == NULL) {
- 8031ea4: 6de3 ldr r3, [r4, #92] ; 0x5c
- 8031ea6: 2200 movs r2, #0
- 8031ea8: 18eb adds r3, r5, r3
- 8031eaa: 9200 str r2, [sp, #0]
- 8031eac: 4620 mov r0, r4
- 8031eae: 4661 mov r1, ip
- 8031eb0: f7ff fe78 bl 8031ba4 <tcp_create_segment>
- 8031eb4: 4603 mov r3, r0
- 8031eb6: 2800 cmp r0, #0
- 8031eb8: d05c beq.n 8031f74 <tcp_write+0x2d2>
- seg->chksum_swapped = chksum_swapped;
- seg->flags |= TF_SEG_DATA_CHECKSUMMED;
- #endif /* TCP_CHECKSUM_ON_COPY */
- /* first segment of to-be-queued data? */
- if (queue == NULL) {
- 8031eba: f1b8 0f00 cmp.w r8, #0
- 8031ebe: d002 beq.n 8031ec6 <tcp_write+0x224>
- queue = seg;
- } else {
- /* Attach the segment to the end of the queued segments */
- LWIP_ASSERT("prev_seg != NULL", prev_seg != NULL);
- prev_seg->next = seg;
- 8031ec0: 990b ldr r1, [sp, #44] ; 0x2c
- 8031ec2: 6008 str r0, [r1, #0]
- 8031ec4: e000 b.n 8031ec8 <tcp_write+0x226>
- seg->chksum_swapped = chksum_swapped;
- seg->flags |= TF_SEG_DATA_CHECKSUMMED;
- #endif /* TCP_CHECKSUM_ON_COPY */
- /* first segment of to-be-queued data? */
- if (queue == NULL) {
- 8031ec6: 4680 mov r8, r0
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE, ("tcp_write: queueing %"U32_F":%"U32_F"\n",
- ntohl(seg->tcphdr->seqno),
- ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg)));
- pos += seglen;
- 8031ec8: 9a09 ldr r2, [sp, #36] ; 0x24
- 8031eca: 930b str r3, [sp, #44] ; 0x2c
- 8031ecc: 1955 adds r5, r2, r5
- 8031ece: b2ad uxth r5, r5
- * Phase 3: Create new segments.
- *
- * The new segments are chained together in the local 'queue'
- * variable, ready to be appended to pcb->unsent.
- */
- while (pos < len) {
- 8031ed0: 454d cmp r5, r9
- 8031ed2: d394 bcc.n 8031dfe <tcp_write+0x15c>
- /*
- * Phase 1: If data has been added to the preallocated tail of
- * last_unsent, we update the length fields of the pbuf chain.
- */
- #if TCP_OVERSIZE
- if (oversize_used > 0) {
- 8031ed4: f1ba 0f00 cmp.w sl, #0
- 8031ed8: d019 beq.n 8031f0e <tcp_write+0x26c>
- struct pbuf *p;
- /* Bump tot_len of whole chain, len of tail */
- for (p = last_unsent->p; p; p = p->next) {
- 8031eda: 6875 ldr r5, [r6, #4]
- 8031edc: e011 b.n 8031f02 <tcp_write+0x260>
- p->tot_len += oversize_used;
- 8031ede: 892a ldrh r2, [r5, #8]
- 8031ee0: 4452 add r2, sl
- 8031ee2: 812a strh r2, [r5, #8]
- if (p->next == NULL) {
- 8031ee4: 682a ldr r2, [r5, #0]
- 8031ee6: b95a cbnz r2, 8031f00 <tcp_write+0x25e>
- TCP_DATA_COPY((char *)p->payload + p->len, arg, oversize_used, last_unsent);
- 8031ee8: 686a ldr r2, [r5, #4]
- 8031eea: 8968 ldrh r0, [r5, #10]
- 8031eec: 9906 ldr r1, [sp, #24]
- 8031eee: 9305 str r3, [sp, #20]
- 8031ef0: 1810 adds r0, r2, r0
- 8031ef2: 4652 mov r2, sl
- 8031ef4: f7ef fd4a bl 802198c <memcpy>
- p->len += oversize_used;
- 8031ef8: 896a ldrh r2, [r5, #10]
- 8031efa: 9b05 ldr r3, [sp, #20]
- 8031efc: 4452 add r2, sl
- 8031efe: 816a strh r2, [r5, #10]
- */
- #if TCP_OVERSIZE
- if (oversize_used > 0) {
- struct pbuf *p;
- /* Bump tot_len of whole chain, len of tail */
- for (p = last_unsent->p; p; p = p->next) {
- 8031f00: 682d ldr r5, [r5, #0]
- 8031f02: 2d00 cmp r5, #0
- 8031f04: d1eb bne.n 8031ede <tcp_write+0x23c>
- if (p->next == NULL) {
- TCP_DATA_COPY((char *)p->payload + p->len, arg, oversize_used, last_unsent);
- p->len += oversize_used;
- }
- }
- last_unsent->len += oversize_used;
- 8031f06: 8932 ldrh r2, [r6, #8]
- 8031f08: 4492 add sl, r2
- 8031f0a: f8a6 a008 strh.w sl, [r6, #8]
- LWIP_ASSERT("last_unsent->oversize_left >= oversize_used",
- last_unsent->oversize_left >= oversize_used);
- last_unsent->oversize_left -= oversize_used;
- #endif /* TCP_OVERSIZE_DBGCHECK */
- }
- pcb->unsent_oversize = oversize;
- 8031f0e: f8bd 2036 ldrh.w r2, [sp, #54] ; 0x36
- 8031f12: f8a4 206a strh.w r2, [r4, #106] ; 0x6a
- #endif /* TCP_OVERSIZE */
- /*
- * Phase 2: concat_p can be concatenated onto last_unsent->p
- */
- if (concat_p != NULL) {
- 8031f16: b157 cbz r7, 8031f2e <tcp_write+0x28c>
- LWIP_ASSERT("tcp_write: cannot concatenate when pcb->unsent is empty",
- (last_unsent != NULL));
- pbuf_cat(last_unsent->p, concat_p);
- 8031f18: 6870 ldr r0, [r6, #4]
- 8031f1a: 9305 str r3, [sp, #20]
- 8031f1c: 4639 mov r1, r7
- 8031f1e: f7fe f85f bl 802ffe0 <pbuf_cat>
- last_unsent->len += concat_p->tot_len;
- 8031f22: 8939 ldrh r1, [r7, #8]
- 8031f24: 8932 ldrh r2, [r6, #8]
- 8031f26: 9b05 ldr r3, [sp, #20]
- 8031f28: 188a adds r2, r1, r2
- 8031f2a: 8132 strh r2, [r6, #8]
- 8031f2c: e003 b.n 8031f36 <tcp_write+0x294>
- /*
- * Phase 3: Append queue to pcb->unsent. Queue may be NULL, but that
- * is harmless
- */
- if (last_unsent == NULL) {
- 8031f2e: b916 cbnz r6, 8031f36 <tcp_write+0x294>
- pcb->unsent = queue;
- 8031f30: f8c4 806c str.w r8, [r4, #108] ; 0x6c
- 8031f34: e001 b.n 8031f3a <tcp_write+0x298>
- } else {
- last_unsent->next = queue;
- 8031f36: f8c6 8000 str.w r8, [r6]
- }
- /*
- * Finally update the pcb state.
- */
- pcb->snd_lbb += len;
- 8031f3a: 6de2 ldr r2, [r4, #92] ; 0x5c
- pcb->snd_buf -= len;
- pcb->snd_queuelen = queuelen;
- 8031f3c: f8a4 b068 strh.w fp, [r4, #104] ; 0x68
- }
- /*
- * Finally update the pcb state.
- */
- pcb->snd_lbb += len;
- 8031f40: 444a add r2, r9
- 8031f42: 65e2 str r2, [r4, #92] ; 0x5c
- pcb->snd_buf -= len;
- 8031f44: f8b4 2066 ldrh.w r2, [r4, #102] ; 0x66
- 8031f48: ebc9 0902 rsb r9, r9, r2
- 8031f4c: f8a4 9066 strh.w r9, [r4, #102] ; 0x66
- LWIP_ASSERT("tcp_write: valid queue length",
- pcb->unacked != NULL || pcb->unsent != NULL);
- }
- /* Set the PSH flag in the last segment that we enqueued. */
- if (seg != NULL && seg->tcphdr != NULL && ((apiflags & TCP_WRITE_FLAG_MORE)==0)) {
- 8031f50: b333 cbz r3, 8031fa0 <tcp_write+0x2fe>
- 8031f52: 68dc ldr r4, [r3, #12]
- 8031f54: b30c cbz r4, 8031f9a <tcp_write+0x2f8>
- 8031f56: 9b07 ldr r3, [sp, #28]
- 8031f58: f003 0502 and.w r5, r3, #2
- 8031f5c: b2ed uxtb r5, r5
- 8031f5e: b9e5 cbnz r5, 8031f9a <tcp_write+0x2f8>
- TCPH_SET_FLAG(seg->tcphdr, TCP_PSH);
- 8031f60: 2008 movs r0, #8
- 8031f62: 89a6 ldrh r6, [r4, #12]
- 8031f64: f7fc fe14 bl 802eb90 <lwip_htons>
- 8031f68: 4330 orrs r0, r6
- 8031f6a: 81a0 strh r0, [r4, #12]
- 8031f6c: e015 b.n 8031f9a <tcp_write+0x2f8>
- */
- err_t
- tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags)
- {
- struct pbuf *concat_p = NULL;
- struct tcp_seg *last_unsent = NULL, *seg = NULL, *prev_seg = NULL, *queue = NULL;
- 8031f6e: f04f 0800 mov.w r8, #0
- 8031f72: 4647 mov r7, r8
- TCPH_SET_FLAG(seg->tcphdr, TCP_PSH);
- }
- return ERR_OK;
- memerr:
- pcb->flags |= TF_NAGLEMEMERR;
- 8031f74: 7fa3 ldrb r3, [r4, #30]
- 8031f76: f063 037f orn r3, r3, #127 ; 0x7f
- 8031f7a: 77a3 strb r3, [r4, #30]
- TCP_STATS_INC(tcp.memerr);
- if (concat_p != NULL) {
- 8031f7c: b117 cbz r7, 8031f84 <tcp_write+0x2e2>
- pbuf_free(concat_p);
- 8031f7e: 4638 mov r0, r7
- 8031f80: f7fd ff44 bl 802fe0c <pbuf_free>
- }
- if (queue != NULL) {
- 8031f84: f1b8 0f00 cmp.w r8, #0
- 8031f88: d009 beq.n 8031f9e <tcp_write+0x2fc>
- tcp_segs_free(queue);
- 8031f8a: 4640 mov r0, r8
- 8031f8c: f7fe fa7b bl 8030486 <tcp_segs_free>
- 8031f90: e005 b.n 8031f9e <tcp_write+0x2fc>
- apiflags |= TCP_WRITE_FLAG_COPY;
- #endif /* LWIP_NETIF_TX_SINGLE_PBUF */
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_write(pcb=%p, data=%p, len=%"U16_F", apiflags=%"U16_F")\n",
- (void *)pcb, arg, len, (u16_t)apiflags));
- LWIP_ERROR("tcp_write: arg == NULL (programmer violates API)",
- 8031f92: 23f2 movs r3, #242 ; 0xf2
- 8031f94: e004 b.n 8031fa0 <tcp_write+0x2fe>
- if ((pcb->state != ESTABLISHED) &&
- (pcb->state != CLOSE_WAIT) &&
- (pcb->state != SYN_SENT) &&
- (pcb->state != SYN_RCVD)) {
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_STATE | LWIP_DBG_LEVEL_SEVERE, ("tcp_write() called in invalid state\n"));
- return ERR_CONN;
- 8031f96: 23f3 movs r3, #243 ; 0xf3
- 8031f98: e002 b.n 8031fa0 <tcp_write+0x2fe>
- /* Set the PSH flag in the last segment that we enqueued. */
- if (seg != NULL && seg->tcphdr != NULL && ((apiflags & TCP_WRITE_FLAG_MORE)==0)) {
- TCPH_SET_FLAG(seg->tcphdr, TCP_PSH);
- }
- return ERR_OK;
- 8031f9a: 2300 movs r3, #0
- 8031f9c: e000 b.n 8031fa0 <tcp_write+0x2fe>
- if (pcb->snd_queuelen != 0) {
- LWIP_ASSERT("tcp_write: valid queue length", pcb->unacked != NULL ||
- pcb->unsent != NULL);
- }
- LWIP_DEBUGF(TCP_QLEN_DEBUG | LWIP_DBG_STATE, ("tcp_write: %"S16_F" (with mem err)\n", pcb->snd_queuelen));
- return ERR_MEM;
- 8031f9e: 23ff movs r3, #255 ; 0xff
- 8031fa0: b258 sxtb r0, r3
- }
- 8031fa2: b00f add sp, #60 ; 0x3c
- 8031fa4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 08031fa8 <tcp_enqueue_flags>:
- LWIP_ASSERT("tcp_enqueue_flags: need either TCP_SYN or TCP_FIN in flags (programmer violates API)",
- (flags & (TCP_SYN | TCP_FIN)) != 0);
- /* check for configured max queuelen and possible overflow */
- if ((pcb->snd_queuelen >= TCP_SND_QUEUELEN) || (pcb->snd_queuelen > TCP_SNDQUEUELEN_OVERFLOW)) {
- 8031fa8: f8b0 3068 ldrh.w r3, [r0, #104] ; 0x68
- 8031fac: 2b47 cmp r3, #71 ; 0x47
- * @param optdata pointer to TCP options, or NULL.
- * @param optlen length of TCP options in bytes.
- */
- err_t
- tcp_enqueue_flags(struct tcp_pcb *pcb, u8_t flags)
- {
- 8031fae: b573 push {r0, r1, r4, r5, r6, lr}
- 8031fb0: 4604 mov r4, r0
- 8031fb2: 460d mov r5, r1
- LWIP_ASSERT("tcp_enqueue_flags: need either TCP_SYN or TCP_FIN in flags (programmer violates API)",
- (flags & (TCP_SYN | TCP_FIN)) != 0);
- /* check for configured max queuelen and possible overflow */
- if ((pcb->snd_queuelen >= TCP_SND_QUEUELEN) || (pcb->snd_queuelen > TCP_SNDQUEUELEN_OVERFLOW)) {
- 8031fb4: d900 bls.n 8031fb8 <tcp_enqueue_flags+0x10>
- 8031fb6: e014 b.n 8031fe2 <tcp_enqueue_flags+0x3a>
- /* tcp_enqueue_flags is always called with either SYN or FIN in flags.
- * We need one available snd_buf byte to do that.
- * This means we can't send FIN while snd_buf==0. A better fix would be to
- * not include SYN and FIN sequence numbers in the snd_buf count. */
- if (pcb->snd_buf == 0) {
- 8031fb8: f8b0 3066 ldrh.w r3, [r0, #102] ; 0x66
- err_t
- tcp_enqueue_flags(struct tcp_pcb *pcb, u8_t flags)
- {
- struct pbuf *p;
- struct tcp_seg *seg;
- u8_t optflags = 0;
- 8031fbc: f3c1 0640 ubfx r6, r1, #1, #1
- #if LWIP_TCP_TIMESTAMPS
- if ((pcb->flags & TF_TIMESTAMP)) {
- optflags |= TF_SEG_OPTS_TS;
- }
- #endif /* LWIP_TCP_TIMESTAMPS */
- optlen = LWIP_TCP_OPT_LENGTH(optflags);
- 8031fc0: 00b1 lsls r1, r6, #2
- /* tcp_enqueue_flags is always called with either SYN or FIN in flags.
- * We need one available snd_buf byte to do that.
- * This means we can't send FIN while snd_buf==0. A better fix would be to
- * not include SYN and FIN sequence numbers in the snd_buf count. */
- if (pcb->snd_buf == 0) {
- 8031fc2: 2b00 cmp r3, #0
- 8031fc4: d038 beq.n 8032038 <tcp_enqueue_flags+0x90>
- TCP_STATS_INC(tcp.memerr);
- return ERR_MEM;
- }
- /* Allocate pbuf with room for TCP header + options */
- if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) {
- 8031fc6: 2000 movs r0, #0
- 8031fc8: 4602 mov r2, r0
- 8031fca: f7fd ff6c bl 802fea6 <pbuf_alloc>
- 8031fce: 4601 mov r1, r0
- 8031fd0: b900 cbnz r0, 8031fd4 <tcp_enqueue_flags+0x2c>
- 8031fd2: e006 b.n 8031fe2 <tcp_enqueue_flags+0x3a>
- }
- LWIP_ASSERT("tcp_enqueue_flags: check that first pbuf can hold optlen",
- (p->len >= optlen));
- /* Allocate memory for tcp_seg, and fill in fields. */
- if ((seg = tcp_create_segment(pcb, p, flags, pcb->snd_lbb, optflags)) == NULL) {
- 8031fd4: 9600 str r6, [sp, #0]
- 8031fd6: 4620 mov r0, r4
- 8031fd8: 462a mov r2, r5
- 8031fda: 6de3 ldr r3, [r4, #92] ; 0x5c
- 8031fdc: f7ff fde2 bl 8031ba4 <tcp_create_segment>
- 8031fe0: b920 cbnz r0, 8031fec <tcp_enqueue_flags+0x44>
- pcb->flags |= TF_NAGLEMEMERR;
- 8031fe2: 7fa3 ldrb r3, [r4, #30]
- 8031fe4: f063 037f orn r3, r3, #127 ; 0x7f
- 8031fe8: 77a3 strb r3, [r4, #30]
- 8031fea: e025 b.n 8032038 <tcp_enqueue_flags+0x90>
- ntohl(seg->tcphdr->seqno),
- ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg),
- (u16_t)flags));
- /* Now append seg to pcb->unsent queue */
- if (pcb->unsent == NULL) {
- 8031fec: 6ee3 ldr r3, [r4, #108] ; 0x6c
- 8031fee: b913 cbnz r3, 8031ff6 <tcp_enqueue_flags+0x4e>
- pcb->unsent = seg;
- 8031ff0: 66e0 str r0, [r4, #108] ; 0x6c
- 8031ff2: e004 b.n 8031ffe <tcp_enqueue_flags+0x56>
- } else {
- struct tcp_seg *useg;
- for (useg = pcb->unsent; useg->next != NULL; useg = useg->next);
- 8031ff4: 4613 mov r3, r2
- 8031ff6: 681a ldr r2, [r3, #0]
- 8031ff8: 2a00 cmp r2, #0
- 8031ffa: d1fb bne.n 8031ff4 <tcp_enqueue_flags+0x4c>
- useg->next = seg;
- 8031ffc: 6018 str r0, [r3, #0]
- }
- #if TCP_OVERSIZE
- /* The new unsent tail has no space */
- pcb->unsent_oversize = 0;
- 8031ffe: 2300 movs r3, #0
- #endif /* TCP_OVERSIZE */
- /* SYN and FIN bump the sequence number */
- if ((flags & TCP_SYN) || (flags & TCP_FIN)) {
- 8032000: 07a9 lsls r1, r5, #30
- for (useg = pcb->unsent; useg->next != NULL; useg = useg->next);
- useg->next = seg;
- }
- #if TCP_OVERSIZE
- /* The new unsent tail has no space */
- pcb->unsent_oversize = 0;
- 8032002: f8a4 306a strh.w r3, [r4, #106] ; 0x6a
- #endif /* TCP_OVERSIZE */
- /* SYN and FIN bump the sequence number */
- if ((flags & TCP_SYN) || (flags & TCP_FIN)) {
- 8032006: d007 beq.n 8032018 <tcp_enqueue_flags+0x70>
- pcb->snd_lbb++;
- 8032008: 6de3 ldr r3, [r4, #92] ; 0x5c
- 803200a: 3301 adds r3, #1
- 803200c: 65e3 str r3, [r4, #92] ; 0x5c
- /* optlen does not influence snd_buf */
- pcb->snd_buf--;
- 803200e: f8b4 3066 ldrh.w r3, [r4, #102] ; 0x66
- 8032012: 3b01 subs r3, #1
- 8032014: f8a4 3066 strh.w r3, [r4, #102] ; 0x66
- }
- if (flags & TCP_FIN) {
- 8032018: 07ea lsls r2, r5, #31
- 803201a: d503 bpl.n 8032024 <tcp_enqueue_flags+0x7c>
- pcb->flags |= TF_FIN;
- 803201c: 7fa3 ldrb r3, [r4, #30]
- 803201e: f043 0320 orr.w r3, r3, #32
- 8032022: 77a3 strb r3, [r4, #30]
- }
- /* update number of segments on the queues */
- pcb->snd_queuelen += pbuf_clen(seg->p);
- 8032024: 6840 ldr r0, [r0, #4]
- 8032026: f8b4 5068 ldrh.w r5, [r4, #104] ; 0x68
- 803202a: f7fd ffc3 bl 802ffb4 <pbuf_clen>
- 803202e: 1940 adds r0, r0, r5
- 8032030: f8a4 0068 strh.w r0, [r4, #104] ; 0x68
- if (pcb->snd_queuelen != 0) {
- LWIP_ASSERT("tcp_enqueue_flags: invalid queue length",
- pcb->unacked != NULL || pcb->unsent != NULL);
- }
- return ERR_OK;
- 8032034: 2000 movs r0, #0
- 8032036: e000 b.n 803203a <tcp_enqueue_flags+0x92>
- * This means we can't send FIN while snd_buf==0. A better fix would be to
- * not include SYN and FIN sequence numbers in the snd_buf count. */
- if (pcb->snd_buf == 0) {
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, ("tcp_enqueue_flags: no send buffer available\n"));
- TCP_STATS_INC(tcp.memerr);
- return ERR_MEM;
- 8032038: 20ff movs r0, #255 ; 0xff
- LWIP_ASSERT("tcp_enqueue_flags: invalid queue length",
- pcb->unacked != NULL || pcb->unsent != NULL);
- }
- return ERR_OK;
- }
- 803203a: b240 sxtb r0, r0
- 803203c: bd7c pop {r2, r3, r4, r5, r6, pc}
- 0803203e <tcp_send_fin>:
- * @param pcb the tcp_pcb over which to send a segment
- * @return ERR_OK if sent, another err_t otherwise
- */
- err_t
- tcp_send_fin(struct tcp_pcb *pcb)
- {
- 803203e: b5f8 push {r3, r4, r5, r6, r7, lr}
- /* first, try to add the fin to the last unsent segment */
- if (pcb->unsent != NULL) {
- 8032040: 6ec4 ldr r4, [r0, #108] ; 0x6c
- * @param pcb the tcp_pcb over which to send a segment
- * @return ERR_OK if sent, another err_t otherwise
- */
- err_t
- tcp_send_fin(struct tcp_pcb *pcb)
- {
- 8032042: 4605 mov r5, r0
- /* first, try to add the fin to the last unsent segment */
- if (pcb->unsent != NULL) {
- 8032044: b90c cbnz r4, 803204a <tcp_send_fin+0xc>
- 8032046: e00a b.n 803205e <tcp_send_fin+0x20>
- struct tcp_seg *last_unsent;
- for (last_unsent = pcb->unsent; last_unsent->next != NULL;
- last_unsent = last_unsent->next);
- 8032048: 461c mov r4, r3
- tcp_send_fin(struct tcp_pcb *pcb)
- {
- /* first, try to add the fin to the last unsent segment */
- if (pcb->unsent != NULL) {
- struct tcp_seg *last_unsent;
- for (last_unsent = pcb->unsent; last_unsent->next != NULL;
- 803204a: 6823 ldr r3, [r4, #0]
- 803204c: 2b00 cmp r3, #0
- 803204e: d1fb bne.n 8032048 <tcp_send_fin+0xa>
- last_unsent = last_unsent->next);
- if ((TCPH_FLAGS(last_unsent->tcphdr) & (TCP_SYN | TCP_FIN | TCP_RST)) == 0) {
- 8032050: 68e3 ldr r3, [r4, #12]
- 8032052: 8998 ldrh r0, [r3, #12]
- 8032054: f7fc fda1 bl 802eb9a <lwip_ntohs>
- 8032058: f010 0607 ands.w r6, r0, #7
- 803205c: d005 beq.n 803206a <tcp_send_fin+0x2c>
- pcb->flags |= TF_FIN;
- return ERR_OK;
- }
- }
- /* no data, no length, flags, copy=1, no optdata */
- return tcp_enqueue_flags(pcb, TCP_FIN);
- 803205e: 4628 mov r0, r5
- 8032060: 2101 movs r1, #1
- }
- 8032062: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr}
- pcb->flags |= TF_FIN;
- return ERR_OK;
- }
- }
- /* no data, no length, flags, copy=1, no optdata */
- return tcp_enqueue_flags(pcb, TCP_FIN);
- 8032066: f7ff bf9f b.w 8031fa8 <tcp_enqueue_flags>
- for (last_unsent = pcb->unsent; last_unsent->next != NULL;
- last_unsent = last_unsent->next);
- if ((TCPH_FLAGS(last_unsent->tcphdr) & (TCP_SYN | TCP_FIN | TCP_RST)) == 0) {
- /* no SYN/FIN/RST flag in the header, we can add the FIN flag */
- TCPH_SET_FLAG(last_unsent->tcphdr, TCP_FIN);
- 803206a: 68e4 ldr r4, [r4, #12]
- 803206c: 2001 movs r0, #1
- 803206e: 89a7 ldrh r7, [r4, #12]
- 8032070: f7fc fd8e bl 802eb90 <lwip_htons>
- 8032074: 4338 orrs r0, r7
- 8032076: 81a0 strh r0, [r4, #12]
- pcb->flags |= TF_FIN;
- 8032078: 7fab ldrb r3, [r5, #30]
- 803207a: f043 0320 orr.w r3, r3, #32
- 803207e: 77ab strb r3, [r5, #30]
- return ERR_OK;
- }
- }
- /* no data, no length, flags, copy=1, no optdata */
- return tcp_enqueue_flags(pcb, TCP_FIN);
- }
- 8032080: 4630 mov r0, r6
- 8032082: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 08032084 <tcp_send_empty_ack>:
- *
- * @param pcb Protocol control block for the TCP connection to send the ACK
- */
- err_t
- tcp_send_empty_ack(struct tcp_pcb *pcb)
- {
- 8032084: b537 push {r0, r1, r2, r4, r5, lr}
- 8032086: 4604 mov r4, r0
- if (pcb->flags & TF_TIMESTAMP) {
- optlen = LWIP_TCP_OPT_LENGTH(TF_SEG_OPTS_TS);
- }
- #endif
- p = tcp_output_alloc_header(pcb, optlen, 0, htonl(pcb->snd_nxt));
- 8032088: 6d00 ldr r0, [r0, #80] ; 0x50
- 803208a: f7fc fd8b bl 802eba4 <lwip_htonl>
- 803208e: 2100 movs r1, #0
- 8032090: 4602 mov r2, r0
- 8032092: 4620 mov r0, r4
- 8032094: f7ff fdd8 bl 8031c48 <tcp_output_alloc_header.constprop.0>
- if (p == NULL) {
- 8032098: 4605 mov r5, r0
- 803209a: b188 cbz r0, 80320c0 <tcp_send_empty_ack+0x3c>
- }
- tcphdr = (struct tcp_hdr *)p->payload;
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG,
- ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt));
- /* remove ACK flags from the PCB, as we send an empty ACK now */
- pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);
- 803209c: 7fa3 ldrb r3, [r4, #30]
- #endif
- #if LWIP_NETIF_HWADDRHINT
- ip_output_hinted(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
- IP_PROTO_TCP, &(pcb->addr_hint));
- #else /* LWIP_NETIF_HWADDRHINT*/
- ip_output(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
- 803209e: 7a62 ldrb r2, [r4, #9]
- }
- tcphdr = (struct tcp_hdr *)p->payload;
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG,
- ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt));
- /* remove ACK flags from the PCB, as we send an empty ACK now */
- pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);
- 80320a0: f023 0303 bic.w r3, r3, #3
- #endif
- #if LWIP_NETIF_HWADDRHINT
- ip_output_hinted(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
- IP_PROTO_TCP, &(pcb->addr_hint));
- #else /* LWIP_NETIF_HWADDRHINT*/
- ip_output(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
- 80320a4: 9200 str r2, [sp, #0]
- 80320a6: 2206 movs r2, #6
- }
- tcphdr = (struct tcp_hdr *)p->payload;
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG,
- ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt));
- /* remove ACK flags from the PCB, as we send an empty ACK now */
- pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);
- 80320a8: 77a3 strb r3, [r4, #30]
- #endif
- #if LWIP_NETIF_HWADDRHINT
- ip_output_hinted(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
- IP_PROTO_TCP, &(pcb->addr_hint));
- #else /* LWIP_NETIF_HWADDRHINT*/
- ip_output(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
- 80320aa: 9201 str r2, [sp, #4]
- 80320ac: 7aa3 ldrb r3, [r4, #10]
- 80320ae: 4621 mov r1, r4
- 80320b0: 1d22 adds r2, r4, #4
- 80320b2: f001 f8ab bl 803320c <ip_output>
- IP_PROTO_TCP);
- #endif /* LWIP_NETIF_HWADDRHINT*/
- pbuf_free(p);
- 80320b6: 4628 mov r0, r5
- 80320b8: f7fd fea8 bl 802fe0c <pbuf_free>
- return ERR_OK;
- 80320bc: 2000 movs r0, #0
- 80320be: e000 b.n 80320c2 <tcp_send_empty_ack+0x3e>
- #endif
- p = tcp_output_alloc_header(pcb, optlen, 0, htonl(pcb->snd_nxt));
- if (p == NULL) {
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: (ACK) could not allocate pbuf\n"));
- return ERR_BUF;
- 80320c0: 20fe movs r0, #254 ; 0xfe
- IP_PROTO_TCP);
- #endif /* LWIP_NETIF_HWADDRHINT*/
- pbuf_free(p);
- return ERR_OK;
- }
- 80320c2: b240 sxtb r0, r0
- 80320c4: bd3e pop {r1, r2, r3, r4, r5, pc}
- 80320c6: 0000 movs r0, r0
- 080320c8 <tcp_output>:
- /* First, check if we are invoked by the TCP input processing
- code. If so, we do not output anything. Instead, we rely on the
- input processing code to call us when input processing is done
- with. */
- if (tcp_input_pcb == pcb) {
- 80320c8: 4b8f ldr r3, [pc, #572] ; (8032308 <tcp_output+0x240>)
- 80320ca: 681b ldr r3, [r3, #0]
- 80320cc: 4283 cmp r3, r0
- * @return ERR_OK if data has been sent or nothing to send
- * another err_t on error
- */
- err_t
- tcp_output(struct tcp_pcb *pcb)
- {
- 80320ce: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 80320d2: 4604 mov r4, r0
- /* First, check if we are invoked by the TCP input processing
- code. If so, we do not output anything. Instead, we rely on the
- input processing code to call us when input processing is done
- with. */
- if (tcp_input_pcb == pcb) {
- 80320d4: f000 8113 beq.w 80322fe <tcp_output+0x236>
- return ERR_OK;
- }
- wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd);
- 80320d8: f8b0 304c ldrh.w r3, [r0, #76] ; 0x4c
- 80320dc: f8b0 9060 ldrh.w r9, [r0, #96] ; 0x60
- seg = pcb->unsent;
- 80320e0: 6ec5 ldr r5, [r0, #108] ; 0x6c
- with. */
- if (tcp_input_pcb == pcb) {
- return ERR_OK;
- }
- wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd);
- 80320e2: 4599 cmp r9, r3
- 80320e4: bf28 it cs
- 80320e6: 4699 movcs r9, r3
- * because the ->unsent queue is empty or because the window does
- * not allow it), construct an empty ACK segment and send it.
- *
- * If data is to be sent, we will just piggyback the ACK (see below).
- */
- if (pcb->flags & TF_ACK_NOW &&
- 80320e8: 7f83 ldrb r3, [r0, #30]
- 80320ea: f003 0302 and.w r3, r3, #2
- 80320ee: b2db uxtb r3, r3
- 80320f0: b183 cbz r3, 8032114 <tcp_output+0x4c>
- 80320f2: b92d cbnz r5, 8032100 <tcp_output+0x38>
- (seg == NULL ||
- ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) {
- return tcp_send_empty_ack(pcb);
- 80320f4: 4620 mov r0, r4
- }
- #endif /* TCP_OVERSIZE */
- pcb->flags &= ~TF_NAGLEMEMERR;
- return ERR_OK;
- }
- 80320f6: b003 add sp, #12
- 80320f8: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- * If data is to be sent, we will just piggyback the ACK (see below).
- */
- if (pcb->flags & TF_ACK_NOW &&
- (seg == NULL ||
- ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) {
- return tcp_send_empty_ack(pcb);
- 80320fc: f7ff bfc2 b.w 8032084 <tcp_send_empty_ack>
- *
- * If data is to be sent, we will just piggyback the ACK (see below).
- */
- if (pcb->flags & TF_ACK_NOW &&
- (seg == NULL ||
- ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) {
- 8032100: 68eb ldr r3, [r5, #12]
- 8032102: 6858 ldr r0, [r3, #4]
- 8032104: f7fc fd50 bl 802eba8 <lwip_ntohl>
- 8032108: 892a ldrh r2, [r5, #8]
- 803210a: 6ca3 ldr r3, [r4, #72] ; 0x48
- 803210c: 1ad3 subs r3, r2, r3
- 803210e: 1818 adds r0, r3, r0
- * not allow it), construct an empty ACK segment and send it.
- *
- * If data is to be sent, we will just piggyback the ACK (see below).
- */
- if (pcb->flags & TF_ACK_NOW &&
- (seg == NULL ||
- 8032110: 4548 cmp r0, r9
- 8032112: d8ef bhi.n 80320f4 <tcp_output+0x2c>
- ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) {
- return tcp_send_empty_ack(pcb);
- }
- /* useg should point to last segment on unacked queue */
- useg = pcb->unacked;
- 8032114: 6f26 ldr r6, [r4, #112] ; 0x70
- if (useg != NULL) {
- 8032116: b90e cbnz r6, 803211c <tcp_output+0x54>
- 8032118: e0d1 b.n 80322be <tcp_output+0x1f6>
- for (; useg->next != NULL; useg = useg->next);
- 803211a: 461e mov r6, r3
- 803211c: 6833 ldr r3, [r6, #0]
- 803211e: 2b00 cmp r3, #0
- 8032120: d1fb bne.n 803211a <tcp_output+0x52>
- 8032122: e0cc b.n 80322be <tcp_output+0x1f6>
- }
- #endif /* TCP_CWND_DEBUG */
- /* data available and window allows it to be sent? */
- while (seg != NULL &&
- ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) {
- LWIP_ASSERT("RST not expected here!",
- 8032124: 68eb ldr r3, [r5, #12]
- 8032126: 8998 ldrh r0, [r3, #12]
- 8032128: f7fc fd37 bl 802eb9a <lwip_ntohs>
- * - if tcp_write had a memory error before (prevent delayed ACK timeout) or
- * - if FIN was already enqueued for this PCB (SYN is always alone in a segment -
- * either seg->next != NULL or pcb->unacked == NULL;
- * RST is no sent using tcp_write/tcp_output.
- */
- if((tcp_do_output_nagle(pcb) == 0) &&
- 803212c: 6f23 ldr r3, [r4, #112] ; 0x70
- 803212e: b19b cbz r3, 8032158 <tcp_output+0x90>
- 8032130: 7fa2 ldrb r2, [r4, #30]
- 8032132: f012 0f44 tst.w r2, #68 ; 0x44
- 8032136: d10f bne.n 8032158 <tcp_output+0x90>
- 8032138: 6ee3 ldr r3, [r4, #108] ; 0x6c
- 803213a: b12b cbz r3, 8032148 <tcp_output+0x80>
- 803213c: 6819 ldr r1, [r3, #0]
- 803213e: b959 cbnz r1, 8032158 <tcp_output+0x90>
- 8032140: 8919 ldrh r1, [r3, #8]
- 8032142: 8ee3 ldrh r3, [r4, #54] ; 0x36
- 8032144: 4299 cmp r1, r3
- 8032146: d207 bcs.n 8032158 <tcp_output+0x90>
- 8032148: f8b4 3066 ldrh.w r3, [r4, #102] ; 0x66
- 803214c: b123 cbz r3, 8032158 <tcp_output+0x90>
- 803214e: f8b4 3068 ldrh.w r3, [r4, #104] ; 0x68
- 8032152: 2b47 cmp r3, #71 ; 0x47
- 8032154: f240 80ce bls.w 80322f4 <tcp_output+0x22c>
- pcb->lastack,
- ntohl(seg->tcphdr->seqno), pcb->lastack, i));
- ++i;
- #endif /* TCP_CWND_DEBUG */
- pcb->unsent = seg->next;
- 8032158: 682b ldr r3, [r5, #0]
- 803215a: 66e3 str r3, [r4, #108] ; 0x6c
- if (pcb->state != SYN_SENT) {
- 803215c: 7e23 ldrb r3, [r4, #24]
- 803215e: 2b02 cmp r3, #2
- 8032160: d00c beq.n 803217c <tcp_output+0xb4>
- TCPH_SET_FLAG(seg->tcphdr, TCP_ACK);
- 8032162: 68ef ldr r7, [r5, #12]
- 8032164: 2010 movs r0, #16
- 8032166: f8b7 b00c ldrh.w fp, [r7, #12]
- 803216a: f7fc fd11 bl 802eb90 <lwip_htons>
- 803216e: ea40 000b orr.w r0, r0, fp
- 8032172: 81b8 strh r0, [r7, #12]
- pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);
- 8032174: 7fa3 ldrb r3, [r4, #30]
- 8032176: f023 0303 bic.w r3, r3, #3
- 803217a: 77a3 strb r3, [r4, #30]
- u16_t len;
- struct netif *netif;
- u32_t *opts;
- /** @bug Exclude retransmitted segments from this count. */
- snmp_inc_tcpoutsegs();
- 803217c: f002 fd6c bl 8034c58 <snmp_inc_tcpoutsegs>
- /* The TCP header has already been constructed, but the ackno and
- wnd fields remain. */
- seg->tcphdr->ackno = htonl(pcb->rcv_nxt);
- 8032180: 6aa0 ldr r0, [r4, #40] ; 0x28
- 8032182: 68ef ldr r7, [r5, #12]
- 8032184: f7fc fd0e bl 802eba4 <lwip_htonl>
- 8032188: 60b8 str r0, [r7, #8]
- /* advertise our receive window size in this TCP segment */
- seg->tcphdr->wnd = htons(pcb->rcv_ann_wnd);
- 803218a: 8de0 ldrh r0, [r4, #46] ; 0x2e
- 803218c: 68ef ldr r7, [r5, #12]
- 803218e: f7fc fcff bl 802eb90 <lwip_htons>
- 8032192: 81f8 strh r0, [r7, #14]
- pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd;
- 8032194: 8de2 ldrh r2, [r4, #46] ; 0x2e
- 8032196: 6aa3 ldr r3, [r4, #40] ; 0x28
- /* Add any requested options. NB MSS option is only set on SYN
- packets, so ignore it here */
- opts = (u32_t *)(void *)(seg->tcphdr + 1);
- 8032198: 68ef ldr r7, [r5, #12]
- seg->tcphdr->ackno = htonl(pcb->rcv_nxt);
- /* advertise our receive window size in this TCP segment */
- seg->tcphdr->wnd = htons(pcb->rcv_ann_wnd);
- pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd;
- 803219a: 18d3 adds r3, r2, r3
- 803219c: 6323 str r3, [r4, #48] ; 0x30
- /* Add any requested options. NB MSS option is only set on SYN
- packets, so ignore it here */
- opts = (u32_t *)(void *)(seg->tcphdr + 1);
- if (seg->flags & TF_SEG_OPTS_MSS) {
- 803219e: 7aab ldrb r3, [r5, #10]
- 80321a0: 07d8 lsls r0, r3, #31
- 80321a2: d509 bpl.n 80321b8 <tcp_output+0xf0>
- u16_t mss;
- #if TCP_CALCULATE_EFF_SEND_MSS
- mss = tcp_eff_send_mss(TCP_MSS, &pcb->remote_ip);
- 80321a4: 4641 mov r1, r8
- 80321a6: f240 50b4 movw r0, #1460 ; 0x5b4
- 80321aa: f7fe fd6a bl 8030c82 <tcp_eff_send_mss>
- #else /* TCP_CALCULATE_EFF_SEND_MSS */
- mss = TCP_MSS;
- #endif /* TCP_CALCULATE_EFF_SEND_MSS */
- *opts = TCP_BUILD_MSS_OPTION(mss);
- 80321ae: f040 7001 orr.w r0, r0, #33816576 ; 0x2040000
- 80321b2: f7fc fcf7 bl 802eba4 <lwip_htonl>
- 80321b6: 6178 str r0, [r7, #20]
- }
- #endif
- /* Set retransmission timer running if it is not currently enabled
- This must be set before checking the route. */
- if (pcb->rtime == -1) {
- 80321b8: f9b4 3034 ldrsh.w r3, [r4, #52] ; 0x34
- 80321bc: 3301 adds r3, #1
- 80321be: d101 bne.n 80321c4 <tcp_output+0xfc>
- pcb->rtime = 0;
- 80321c0: 2300 movs r3, #0
- 80321c2: 86a3 strh r3, [r4, #52] ; 0x34
- }
- /* If we don't have a local IP address, we get one by
- calling ip_route(). */
- if (ip_addr_isany(&(pcb->local_ip))) {
- 80321c4: 6823 ldr r3, [r4, #0]
- 80321c6: b92b cbnz r3, 80321d4 <tcp_output+0x10c>
- netif = ip_route(&(pcb->remote_ip));
- 80321c8: 4640 mov r0, r8
- 80321ca: f000 fecb bl 8032f64 <ip_route>
- if (netif == NULL) {
- 80321ce: b310 cbz r0, 8032216 <tcp_output+0x14e>
- return;
- }
- ip_addr_copy(pcb->local_ip, netif->ip_addr);
- 80321d0: 6843 ldr r3, [r0, #4]
- 80321d2: 6023 str r3, [r4, #0]
- }
- if (pcb->rttest == 0) {
- 80321d4: 6ba3 ldr r3, [r4, #56] ; 0x38
- 80321d6: b93b cbnz r3, 80321e8 <tcp_output+0x120>
- pcb->rttest = tcp_ticks;
- 80321d8: f8da 3000 ldr.w r3, [sl]
- 80321dc: 63a3 str r3, [r4, #56] ; 0x38
- pcb->rtseq = ntohl(seg->tcphdr->seqno);
- 80321de: 68eb ldr r3, [r5, #12]
- 80321e0: 6858 ldr r0, [r3, #4]
- 80321e2: f7fc fce1 bl 802eba8 <lwip_ntohl>
- 80321e6: 63e0 str r0, [r4, #60] ; 0x3c
- }
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %"U32_F":%"U32_F"\n",
- htonl(seg->tcphdr->seqno), htonl(seg->tcphdr->seqno) +
- seg->len));
- len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload);
- 80321e8: 6868 ldr r0, [r5, #4]
- 80321ea: 68eb ldr r3, [r5, #12]
- 80321ec: 6842 ldr r2, [r0, #4]
- seg->p->len -= len;
- 80321ee: 8941 ldrh r1, [r0, #10]
- seg->p->tot_len -= len;
- seg->p->payload = seg->tcphdr;
- 80321f0: 6043 str r3, [r0, #4]
- }
- LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %"U32_F":%"U32_F"\n",
- htonl(seg->tcphdr->seqno), htonl(seg->tcphdr->seqno) +
- seg->len));
- len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload);
- 80321f2: 1a9a subs r2, r3, r2
- seg->p->len -= len;
- 80321f4: 1a89 subs r1, r1, r2
- 80321f6: 8141 strh r1, [r0, #10]
- seg->p->tot_len -= len;
- 80321f8: 8901 ldrh r1, [r0, #8]
- 80321fa: 1a8a subs r2, r1, r2
- 80321fc: 8102 strh r2, [r0, #8]
- seg->p->payload = seg->tcphdr;
- seg->tcphdr->chksum = 0;
- 80321fe: 2200 movs r2, #0
- 8032200: 741a strb r2, [r3, #16]
- 8032202: 745a strb r2, [r3, #17]
- #if LWIP_NETIF_HWADDRHINT
- ip_output_hinted(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
- IP_PROTO_TCP, &(pcb->addr_hint));
- #else /* LWIP_NETIF_HWADDRHINT*/
- ip_output(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
- 8032204: 7a62 ldrb r2, [r4, #9]
- 8032206: 7aa3 ldrb r3, [r4, #10]
- 8032208: 9200 str r2, [sp, #0]
- 803220a: 2206 movs r2, #6
- 803220c: 9201 str r2, [sp, #4]
- 803220e: 4621 mov r1, r4
- 8032210: 4642 mov r2, r8
- 8032212: f000 fffb bl 803320c <ip_output>
- TCPH_SET_FLAG(seg->tcphdr, TCP_ACK);
- pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);
- }
- tcp_output_segment(seg, pcb);
- snd_nxt = ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg);
- 8032216: 68eb ldr r3, [r5, #12]
- 8032218: 6858 ldr r0, [r3, #4]
- 803221a: f7fc fcc5 bl 802eba8 <lwip_ntohl>
- 803221e: 68ea ldr r2, [r5, #12]
- 8032220: f8b5 b008 ldrh.w fp, [r5, #8]
- 8032224: 4607 mov r7, r0
- 8032226: 8990 ldrh r0, [r2, #12]
- 8032228: f7fc fcb7 bl 802eb9a <lwip_ntohs>
- 803222c: f010 0003 ands.w r0, r0, #3
- 8032230: bf18 it ne
- 8032232: 2001 movne r0, #1
- if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) {
- 8032234: 6d22 ldr r2, [r4, #80] ; 0x50
- TCPH_SET_FLAG(seg->tcphdr, TCP_ACK);
- pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);
- }
- tcp_output_segment(seg, pcb);
- snd_nxt = ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg);
- 8032236: eb0b 0300 add.w r3, fp, r0
- 803223a: 19db adds r3, r3, r7
- if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) {
- 803223c: 1ad2 subs r2, r2, r3
- 803223e: 2a00 cmp r2, #0
- pcb->snd_nxt = snd_nxt;
- 8032240: bfb8 it lt
- 8032242: 6523 strlt r3, [r4, #80] ; 0x50
- }
- /* put segment on unacknowledged list if length > 0 */
- if (TCP_TCPLEN(seg) > 0) {
- 8032244: 68eb ldr r3, [r5, #12]
- 8032246: 892f ldrh r7, [r5, #8]
- 8032248: 8998 ldrh r0, [r3, #12]
- 803224a: f7fc fca6 bl 802eb9a <lwip_ntohs>
- 803224e: f010 0003 ands.w r0, r0, #3
- 8032252: bf18 it ne
- 8032254: 2001 movne r0, #1
- 8032256: 1838 adds r0, r7, r0
- 8032258: b360 cbz r0, 80322b4 <tcp_output+0x1ec>
- seg->next = NULL;
- 803225a: 2300 movs r3, #0
- 803225c: 602b str r3, [r5, #0]
- /* unacked list is empty? */
- if (pcb->unacked == NULL) {
- 803225e: 6f23 ldr r3, [r4, #112] ; 0x70
- 8032260: b90b cbnz r3, 8032266 <tcp_output+0x19e>
- pcb->unacked = seg;
- 8032262: 6725 str r5, [r4, #112] ; 0x70
- 8032264: e024 b.n 80322b0 <tcp_output+0x1e8>
- /* unacked list is not empty? */
- } else {
- /* In the case of fast retransmit, the packet should not go to the tail
- * of the unacked queue, but rather somewhere before it. We need to check for
- * this case. -STJ Jul 27, 2004 */
- if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))) {
- 8032266: 68eb ldr r3, [r5, #12]
- 8032268: 6858 ldr r0, [r3, #4]
- 803226a: f7fc fc9d bl 802eba8 <lwip_ntohl>
- 803226e: 68f3 ldr r3, [r6, #12]
- 8032270: 4607 mov r7, r0
- 8032272: 6858 ldr r0, [r3, #4]
- 8032274: f7fc fc98 bl 802eba8 <lwip_ntohl>
- 8032278: 1a38 subs r0, r7, r0
- 803227a: 2800 cmp r0, #0
- 803227c: da17 bge.n 80322ae <tcp_output+0x1e6>
- /* add segment to before tail of unacked list, keeping the list sorted */
- struct tcp_seg **cur_seg = &(pcb->unacked);
- 803227e: f104 0770 add.w r7, r4, #112 ; 0x70
- while (*cur_seg &&
- 8032282: e000 b.n 8032286 <tcp_output+0x1be>
- TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) {
- cur_seg = &((*cur_seg)->next );
- 8032284: 683f ldr r7, [r7, #0]
- * of the unacked queue, but rather somewhere before it. We need to check for
- * this case. -STJ Jul 27, 2004 */
- if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))) {
- /* add segment to before tail of unacked list, keeping the list sorted */
- struct tcp_seg **cur_seg = &(pcb->unacked);
- while (*cur_seg &&
- 8032286: 683b ldr r3, [r7, #0]
- 8032288: b91b cbnz r3, 8032292 <tcp_output+0x1ca>
- TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) {
- cur_seg = &((*cur_seg)->next );
- }
- seg->next = (*cur_seg);
- 803228a: 683b ldr r3, [r7, #0]
- 803228c: 602b str r3, [r5, #0]
- (*cur_seg) = seg;
- 803228e: 603d str r5, [r7, #0]
- 8032290: e013 b.n 80322ba <tcp_output+0x1f2>
- * this case. -STJ Jul 27, 2004 */
- if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))) {
- /* add segment to before tail of unacked list, keeping the list sorted */
- struct tcp_seg **cur_seg = &(pcb->unacked);
- while (*cur_seg &&
- TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) {
- 8032292: 68db ldr r3, [r3, #12]
- 8032294: 6858 ldr r0, [r3, #4]
- 8032296: f7fc fc87 bl 802eba8 <lwip_ntohl>
- 803229a: 68eb ldr r3, [r5, #12]
- 803229c: 4683 mov fp, r0
- 803229e: 6858 ldr r0, [r3, #4]
- 80322a0: f7fc fc82 bl 802eba8 <lwip_ntohl>
- 80322a4: ebc0 000b rsb r0, r0, fp
- * of the unacked queue, but rather somewhere before it. We need to check for
- * this case. -STJ Jul 27, 2004 */
- if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))) {
- /* add segment to before tail of unacked list, keeping the list sorted */
- struct tcp_seg **cur_seg = &(pcb->unacked);
- while (*cur_seg &&
- 80322a8: 2800 cmp r0, #0
- 80322aa: dbeb blt.n 8032284 <tcp_output+0x1bc>
- 80322ac: e7ed b.n 803228a <tcp_output+0x1c2>
- }
- seg->next = (*cur_seg);
- (*cur_seg) = seg;
- } else {
- /* add segment to tail of unacked list */
- useg->next = seg;
- 80322ae: 6035 str r5, [r6, #0]
- 80322b0: 462e mov r6, r5
- 80322b2: e002 b.n 80322ba <tcp_output+0x1f2>
- useg = useg->next;
- }
- }
- /* do not queue empty segments on the unacked list */
- } else {
- tcp_seg_free(seg);
- 80322b4: 4628 mov r0, r5
- 80322b6: f7fe f8d8 bl 803046a <tcp_seg_free>
- }
- seg = pcb->unsent;
- 80322ba: 6ee5 ldr r5, [r4, #108] ; 0x6c
- 80322bc: e003 b.n 80322c6 <tcp_output+0x1fe>
- }
- ip_addr_copy(pcb->local_ip, netif->ip_addr);
- }
- if (pcb->rttest == 0) {
- pcb->rttest = tcp_ticks;
- 80322be: f8df a04c ldr.w sl, [pc, #76] ; 803230c <tcp_output+0x244>
- packets, so ignore it here */
- opts = (u32_t *)(void *)(seg->tcphdr + 1);
- if (seg->flags & TF_SEG_OPTS_MSS) {
- u16_t mss;
- #if TCP_CALCULATE_EFF_SEND_MSS
- mss = tcp_eff_send_mss(TCP_MSS, &pcb->remote_ip);
- 80322c2: f104 0804 add.w r8, r4, #4
- ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len,
- ntohl(seg->tcphdr->seqno), pcb->lastack));
- }
- #endif /* TCP_CWND_DEBUG */
- /* data available and window allows it to be sent? */
- while (seg != NULL &&
- 80322c6: b915 cbnz r5, 80322ce <tcp_output+0x206>
- tcp_seg_free(seg);
- }
- seg = pcb->unsent;
- }
- #if TCP_OVERSIZE
- if (pcb->unsent == NULL) {
- 80322c8: 6ee3 ldr r3, [r4, #108] ; 0x6c
- 80322ca: b973 cbnz r3, 80322ea <tcp_output+0x222>
- 80322cc: e00b b.n 80322e6 <tcp_output+0x21e>
- ntohl(seg->tcphdr->seqno), pcb->lastack));
- }
- #endif /* TCP_CWND_DEBUG */
- /* data available and window allows it to be sent? */
- while (seg != NULL &&
- ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) {
- 80322ce: 68eb ldr r3, [r5, #12]
- 80322d0: 6858 ldr r0, [r3, #4]
- 80322d2: f7fc fc69 bl 802eba8 <lwip_ntohl>
- 80322d6: 892a ldrh r2, [r5, #8]
- 80322d8: 6ca3 ldr r3, [r4, #72] ; 0x48
- 80322da: 1ad3 subs r3, r2, r3
- 80322dc: 1818 adds r0, r3, r0
- ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len,
- ntohl(seg->tcphdr->seqno), pcb->lastack));
- }
- #endif /* TCP_CWND_DEBUG */
- /* data available and window allows it to be sent? */
- while (seg != NULL &&
- 80322de: 4548 cmp r0, r9
- 80322e0: f67f af20 bls.w 8032124 <tcp_output+0x5c>
- 80322e4: e7f0 b.n 80322c8 <tcp_output+0x200>
- seg = pcb->unsent;
- }
- #if TCP_OVERSIZE
- if (pcb->unsent == NULL) {
- /* last unsent has been removed, reset unsent_oversize */
- pcb->unsent_oversize = 0;
- 80322e6: f8a4 306a strh.w r3, [r4, #106] ; 0x6a
- }
- #endif /* TCP_OVERSIZE */
- pcb->flags &= ~TF_NAGLEMEMERR;
- 80322ea: 7fa3 ldrb r3, [r4, #30]
- 80322ec: f003 037f and.w r3, r3, #127 ; 0x7f
- 80322f0: 77a3 strb r3, [r4, #30]
- return ERR_OK;
- 80322f2: e004 b.n 80322fe <tcp_output+0x236>
- * - if tcp_write had a memory error before (prevent delayed ACK timeout) or
- * - if FIN was already enqueued for this PCB (SYN is always alone in a segment -
- * either seg->next != NULL or pcb->unacked == NULL;
- * RST is no sent using tcp_write/tcp_output.
- */
- if((tcp_do_output_nagle(pcb) == 0) &&
- 80322f4: f012 0fa0 tst.w r2, #160 ; 0xa0
- 80322f8: f47f af2e bne.w 8032158 <tcp_output+0x90>
- 80322fc: e7e4 b.n 80322c8 <tcp_output+0x200>
- }
- #endif /* TCP_OVERSIZE */
- pcb->flags &= ~TF_NAGLEMEMERR;
- return ERR_OK;
- }
- 80322fe: 2000 movs r0, #0
- 8032300: b003 add sp, #12
- 8032302: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8032306: bf00 nop
- 8032308: 2000f6d4 .word 0x2000f6d4
- 803230c: 2000f6c0 .word 0x2000f6c0
- 08032310 <tcp_rst>:
- */
- void
- tcp_rst(u32_t seqno, u32_t ackno,
- ip_addr_t *local_ip, ip_addr_t *remote_ip,
- u16_t local_port, u16_t remote_port)
- {
- 8032310: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8032314: 4681 mov r9, r0
- 8032316: 460d mov r5, r1
- 8032318: 4690 mov r8, r2
- struct pbuf *p;
- struct tcp_hdr *tcphdr;
- p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM);
- 803231a: 2001 movs r0, #1
- 803231c: 2114 movs r1, #20
- 803231e: 2200 movs r2, #0
- */
- void
- tcp_rst(u32_t seqno, u32_t ackno,
- ip_addr_t *local_ip, ip_addr_t *remote_ip,
- u16_t local_port, u16_t remote_port)
- {
- 8032320: 461f mov r7, r3
- 8032322: f8bd b030 ldrh.w fp, [sp, #48] ; 0x30
- 8032326: f8bd a034 ldrh.w sl, [sp, #52] ; 0x34
- struct pbuf *p;
- struct tcp_hdr *tcphdr;
- p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM);
- 803232a: f7fd fdbc bl 802fea6 <pbuf_alloc>
- if (p == NULL) {
- 803232e: 4606 mov r6, r0
- 8032330: 2800 cmp r0, #0
- 8032332: d030 beq.n 8032396 <tcp_rst+0x86>
- return;
- }
- LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr",
- (p->len >= sizeof(struct tcp_hdr)));
- tcphdr = (struct tcp_hdr *)p->payload;
- 8032334: 6844 ldr r4, [r0, #4]
- tcphdr->src = htons(local_port);
- 8032336: 4658 mov r0, fp
- 8032338: f7fc fc2a bl 802eb90 <lwip_htons>
- 803233c: 8020 strh r0, [r4, #0]
- tcphdr->dest = htons(remote_port);
- 803233e: 4650 mov r0, sl
- 8032340: f7fc fc26 bl 802eb90 <lwip_htons>
- 8032344: 8060 strh r0, [r4, #2]
- tcphdr->seqno = htonl(seqno);
- 8032346: 4648 mov r0, r9
- 8032348: f7fc fc2c bl 802eba4 <lwip_htonl>
- 803234c: 6060 str r0, [r4, #4]
- tcphdr->ackno = htonl(ackno);
- 803234e: 4628 mov r0, r5
- 8032350: f7fc fc28 bl 802eba4 <lwip_htonl>
- 8032354: 60a0 str r0, [r4, #8]
- TCPH_HDRLEN_FLAGS_SET(tcphdr, TCP_HLEN/4, TCP_RST | TCP_ACK);
- 8032356: f245 0014 movw r0, #20500 ; 0x5014
- 803235a: f7fc fc19 bl 802eb90 <lwip_htons>
- tcphdr->wnd = PP_HTONS(TCP_WND);
- 803235e: 2316 movs r3, #22
- 8032360: 2500 movs r5, #0
- 8032362: 73a3 strb r3, [r4, #14]
- 8032364: f06f 032f mvn.w r3, #47 ; 0x2f
- tcphdr = (struct tcp_hdr *)p->payload;
- tcphdr->src = htons(local_port);
- tcphdr->dest = htons(remote_port);
- tcphdr->seqno = htonl(seqno);
- tcphdr->ackno = htonl(ackno);
- TCPH_HDRLEN_FLAGS_SET(tcphdr, TCP_HLEN/4, TCP_RST | TCP_ACK);
- 8032368: 81a0 strh r0, [r4, #12]
- tcphdr->wnd = PP_HTONS(TCP_WND);
- 803236a: 73e3 strb r3, [r4, #15]
- tcphdr->chksum = 0;
- 803236c: 7425 strb r5, [r4, #16]
- 803236e: 7465 strb r5, [r4, #17]
- tcphdr->urgp = 0;
- 8032370: 74a5 strb r5, [r4, #18]
- 8032372: 74e5 strb r5, [r4, #19]
- #if CHECKSUM_GEN_TCP
- tcphdr->chksum = inet_chksum_pseudo(p, local_ip, remote_ip,
- IP_PROTO_TCP, p->tot_len);
- #endif
- TCP_STATS_INC(tcp.xmit);
- snmp_inc_tcpoutrsts();
- 8032374: f002 fc88 bl 8034c88 <snmp_inc_tcpoutrsts>
- /* Send output with hardcoded TTL since we have no access to the pcb */
- ip_output(p, local_ip, remote_ip, TCP_TTL, 0, IP_PROTO_TCP);
- 8032378: 2306 movs r3, #6
- 803237a: 9301 str r3, [sp, #4]
- 803237c: 9500 str r5, [sp, #0]
- 803237e: 4630 mov r0, r6
- 8032380: 4641 mov r1, r8
- 8032382: 463a mov r2, r7
- 8032384: 23ff movs r3, #255 ; 0xff
- 8032386: f000 ff41 bl 803320c <ip_output>
- pbuf_free(p);
- 803238a: 4630 mov r0, r6
- LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno));
- }
- 803238c: b003 add sp, #12
- 803238e: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- #endif
- TCP_STATS_INC(tcp.xmit);
- snmp_inc_tcpoutrsts();
- /* Send output with hardcoded TTL since we have no access to the pcb */
- ip_output(p, local_ip, remote_ip, TCP_TTL, 0, IP_PROTO_TCP);
- pbuf_free(p);
- 8032392: f7fd bd3b b.w 802fe0c <pbuf_free>
- LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno));
- }
- 8032396: b003 add sp, #12
- 8032398: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 0803239c <tcp_rexmit_rto>:
- void
- tcp_rexmit_rto(struct tcp_pcb *pcb)
- {
- struct tcp_seg *seg;
- if (pcb->unacked == NULL) {
- 803239c: 6f02 ldr r2, [r0, #112] ; 0x70
- *
- * @param pcb the tcp_pcb for which to re-enqueue all unacked segments
- */
- void
- tcp_rexmit_rto(struct tcp_pcb *pcb)
- {
- 803239e: b510 push {r4, lr}
- struct tcp_seg *seg;
- if (pcb->unacked == NULL) {
- 80323a0: b19a cbz r2, 80323ca <tcp_rexmit_rto+0x2e>
- 80323a2: 4611 mov r1, r2
- 80323a4: e000 b.n 80323a8 <tcp_rexmit_rto+0xc>
- return;
- }
- /* Move all unacked segments to the head of the unsent queue */
- for (seg = pcb->unacked; seg->next != NULL; seg = seg->next);
- 80323a6: 4619 mov r1, r3
- 80323a8: 680b ldr r3, [r1, #0]
- 80323aa: 2b00 cmp r3, #0
- 80323ac: d1fb bne.n 80323a6 <tcp_rexmit_rto+0xa>
- /* concatenate unsent queue after unacked queue */
- seg->next = pcb->unsent;
- 80323ae: 6ec4 ldr r4, [r0, #108] ; 0x6c
- 80323b0: 600c str r4, [r1, #0]
- /* unsent queue is the concatenated queue (of unacked, unsent) */
- pcb->unsent = pcb->unacked;
- 80323b2: 66c2 str r2, [r0, #108] ; 0x6c
- /* unacked queue is now empty */
- pcb->unacked = NULL;
- /* last unsent hasn't changed, no need to reset unsent_oversize */
- /* increment number of retransmissions */
- ++pcb->nrtx;
- 80323b4: f890 2046 ldrb.w r2, [r0, #70] ; 0x46
- /* concatenate unsent queue after unacked queue */
- seg->next = pcb->unsent;
- /* unsent queue is the concatenated queue (of unacked, unsent) */
- pcb->unsent = pcb->unacked;
- /* unacked queue is now empty */
- pcb->unacked = NULL;
- 80323b8: 6703 str r3, [r0, #112] ; 0x70
- /* last unsent hasn't changed, no need to reset unsent_oversize */
- /* increment number of retransmissions */
- ++pcb->nrtx;
- 80323ba: 3201 adds r2, #1
- 80323bc: f880 2046 strb.w r2, [r0, #70] ; 0x46
- /* Don't take any RTT measurements after retransmitting. */
- pcb->rttest = 0;
- 80323c0: 6383 str r3, [r0, #56] ; 0x38
- /* Do the actual retransmission */
- tcp_output(pcb);
- }
- 80323c2: e8bd 4010 ldmia.w sp!, {r4, lr}
- /* Don't take any RTT measurements after retransmitting. */
- pcb->rttest = 0;
- /* Do the actual retransmission */
- tcp_output(pcb);
- 80323c6: f7ff be7f b.w 80320c8 <tcp_output>
- 80323ca: bd10 pop {r4, pc}
- 080323cc <tcp_rexmit>:
- *
- * @param pcb the tcp_pcb for which to retransmit the first unacked segment
- */
- void
- tcp_rexmit(struct tcp_pcb *pcb)
- {
- 80323cc: b5f8 push {r3, r4, r5, r6, r7, lr}
- struct tcp_seg *seg;
- struct tcp_seg **cur_seg;
- if (pcb->unacked == NULL) {
- 80323ce: 6f05 ldr r5, [r0, #112] ; 0x70
- *
- * @param pcb the tcp_pcb for which to retransmit the first unacked segment
- */
- void
- tcp_rexmit(struct tcp_pcb *pcb)
- {
- 80323d0: 4604 mov r4, r0
- struct tcp_seg *seg;
- struct tcp_seg **cur_seg;
- if (pcb->unacked == NULL) {
- 80323d2: 2d00 cmp r5, #0
- 80323d4: d027 beq.n 8032426 <tcp_rexmit+0x5a>
- }
- /* Move the first unacked segment to the unsent queue */
- /* Keep the unsent queue sorted. */
- seg = pcb->unacked;
- pcb->unacked = seg->next;
- 80323d6: 682b ldr r3, [r5, #0]
- cur_seg = &(pcb->unsent);
- 80323d8: f100 066c add.w r6, r0, #108 ; 0x6c
- }
- /* Move the first unacked segment to the unsent queue */
- /* Keep the unsent queue sorted. */
- seg = pcb->unacked;
- pcb->unacked = seg->next;
- 80323dc: 6703 str r3, [r0, #112] ; 0x70
- cur_seg = &(pcb->unsent);
- while (*cur_seg &&
- 80323de: e000 b.n 80323e2 <tcp_rexmit+0x16>
- TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) {
- cur_seg = &((*cur_seg)->next );
- 80323e0: 6836 ldr r6, [r6, #0]
- /* Keep the unsent queue sorted. */
- seg = pcb->unacked;
- pcb->unacked = seg->next;
- cur_seg = &(pcb->unsent);
- while (*cur_seg &&
- 80323e2: 6833 ldr r3, [r6, #0]
- 80323e4: b92b cbnz r3, 80323f2 <tcp_rexmit+0x26>
- TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) {
- cur_seg = &((*cur_seg)->next );
- }
- seg->next = *cur_seg;
- 80323e6: 6833 ldr r3, [r6, #0]
- 80323e8: 602b str r3, [r5, #0]
- *cur_seg = seg;
- 80323ea: 6035 str r5, [r6, #0]
- #if TCP_OVERSIZE
- if (seg->next == NULL) {
- 80323ec: 682b ldr r3, [r5, #0]
- 80323ee: b97b cbnz r3, 8032410 <tcp_rexmit+0x44>
- 80323f0: e00c b.n 803240c <tcp_rexmit+0x40>
- seg = pcb->unacked;
- pcb->unacked = seg->next;
- cur_seg = &(pcb->unsent);
- while (*cur_seg &&
- TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) {
- 80323f2: 68db ldr r3, [r3, #12]
- 80323f4: 6858 ldr r0, [r3, #4]
- 80323f6: f7fc fbd7 bl 802eba8 <lwip_ntohl>
- 80323fa: 68eb ldr r3, [r5, #12]
- 80323fc: 4607 mov r7, r0
- 80323fe: 6858 ldr r0, [r3, #4]
- 8032400: f7fc fbd2 bl 802eba8 <lwip_ntohl>
- 8032404: 1a38 subs r0, r7, r0
- /* Keep the unsent queue sorted. */
- seg = pcb->unacked;
- pcb->unacked = seg->next;
- cur_seg = &(pcb->unsent);
- while (*cur_seg &&
- 8032406: 2800 cmp r0, #0
- 8032408: dbea blt.n 80323e0 <tcp_rexmit+0x14>
- 803240a: e7ec b.n 80323e6 <tcp_rexmit+0x1a>
- seg->next = *cur_seg;
- *cur_seg = seg;
- #if TCP_OVERSIZE
- if (seg->next == NULL) {
- /* the retransmitted segment is last in unsent, so reset unsent_oversize */
- pcb->unsent_oversize = 0;
- 803240c: f8a4 306a strh.w r3, [r4, #106] ; 0x6a
- }
- #endif /* TCP_OVERSIZE */
- ++pcb->nrtx;
- 8032410: f894 3046 ldrb.w r3, [r4, #70] ; 0x46
- 8032414: 3301 adds r3, #1
- 8032416: f884 3046 strb.w r3, [r4, #70] ; 0x46
- /* Don't take any rtt measurements after retransmitting. */
- pcb->rttest = 0;
- 803241a: 2300 movs r3, #0
- 803241c: 63a3 str r3, [r4, #56] ; 0x38
- /* Do the actual retransmission. */
- snmp_inc_tcpretranssegs();
- /* No need to call tcp_output: we are always called from tcp_input()
- and thus tcp_output directly returns. */
- }
- 803241e: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr}
- /* Don't take any rtt measurements after retransmitting. */
- pcb->rttest = 0;
- /* Do the actual retransmission. */
- snmp_inc_tcpretranssegs();
- 8032422: f002 bc21 b.w 8034c68 <snmp_inc_tcpretranssegs>
- 8032426: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 08032428 <tcp_rexmit_fast>:
- * @param pcb the tcp_pcb for which to retransmit the first unacked segment
- */
- void
- tcp_rexmit_fast(struct tcp_pcb *pcb)
- {
- if (pcb->unacked != NULL && !(pcb->flags & TF_INFR)) {
- 8032428: 6f03 ldr r3, [r0, #112] ; 0x70
- *
- * @param pcb the tcp_pcb for which to retransmit the first unacked segment
- */
- void
- tcp_rexmit_fast(struct tcp_pcb *pcb)
- {
- 803242a: b510 push {r4, lr}
- 803242c: 4604 mov r4, r0
- if (pcb->unacked != NULL && !(pcb->flags & TF_INFR)) {
- 803242e: b333 cbz r3, 803247e <tcp_rexmit_fast+0x56>
- 8032430: 7f83 ldrb r3, [r0, #30]
- 8032432: f003 0304 and.w r3, r3, #4
- 8032436: b2db uxtb r3, r3
- 8032438: bb0b cbnz r3, 803247e <tcp_rexmit_fast+0x56>
- LWIP_DEBUGF(TCP_FR_DEBUG,
- ("tcp_receive: dupacks %"U16_F" (%"U32_F
- "), fast retransmit %"U32_F"\n",
- (u16_t)pcb->dupacks, pcb->lastack,
- ntohl(pcb->unacked->tcphdr->seqno)));
- tcp_rexmit(pcb);
- 803243a: f7ff ffc7 bl 80323cc <tcp_rexmit>
- /* Set ssthresh to half of the minimum of the current
- * cwnd and the advertised window */
- if (pcb->cwnd > pcb->snd_wnd) {
- 803243e: f8b4 304c ldrh.w r3, [r4, #76] ; 0x4c
- 8032442: f8b4 2060 ldrh.w r2, [r4, #96] ; 0x60
- 8032446: 4293 cmp r3, r2
- 8032448: d903 bls.n 8032452 <tcp_rexmit_fast+0x2a>
- pcb->ssthresh = pcb->snd_wnd / 2;
- 803244a: 0852 lsrs r2, r2, #1
- 803244c: f8a4 204e strh.w r2, [r4, #78] ; 0x4e
- 8032450: e002 b.n 8032458 <tcp_rexmit_fast+0x30>
- } else {
- pcb->ssthresh = pcb->cwnd / 2;
- 8032452: 085b lsrs r3, r3, #1
- 8032454: f8a4 304e strh.w r3, [r4, #78] ; 0x4e
- }
-
- /* The minimum value for ssthresh should be 2 MSS */
- if (pcb->ssthresh < 2*pcb->mss) {
- 8032458: 8ee3 ldrh r3, [r4, #54] ; 0x36
- 803245a: f8b4 104e ldrh.w r1, [r4, #78] ; 0x4e
- 803245e: 005a lsls r2, r3, #1
- 8032460: 4291 cmp r1, r2
- LWIP_DEBUGF(TCP_FR_DEBUG,
- ("tcp_receive: The minimum value for ssthresh %"U16_F
- " should be min 2 mss %"U16_F"...\n",
- pcb->ssthresh, 2*pcb->mss));
- pcb->ssthresh = 2*pcb->mss;
- 8032462: bfb8 it lt
- 8032464: f8a4 204e strhlt.w r2, [r4, #78] ; 0x4e
- }
-
- pcb->cwnd = pcb->ssthresh + 3 * pcb->mss;
- 8032468: f8b4 204e ldrh.w r2, [r4, #78] ; 0x4e
- 803246c: 2103 movs r1, #3
- 803246e: fb01 2303 mla r3, r1, r3, r2
- 8032472: f8a4 304c strh.w r3, [r4, #76] ; 0x4c
- pcb->flags |= TF_INFR;
- 8032476: 7fa3 ldrb r3, [r4, #30]
- 8032478: f043 0304 orr.w r3, r3, #4
- 803247c: 77a3 strb r3, [r4, #30]
- 803247e: bd10 pop {r4, pc}
- 08032480 <tcp_keepalive>:
- *
- * @param pcb the tcp_pcb for which to send a keepalive packet
- */
- void
- tcp_keepalive(struct tcp_pcb *pcb)
- {
- 8032480: b537 push {r0, r1, r2, r4, r5, lr}
- 8032482: 4604 mov r4, r0
- ip4_addr3_16(&pcb->remote_ip), ip4_addr4_16(&pcb->remote_ip)));
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: tcp_ticks %"U32_F" pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n",
- tcp_ticks, pcb->tmr, pcb->keep_cnt_sent));
-
- p = tcp_output_alloc_header(pcb, 0, 0, htonl(pcb->snd_nxt - 1));
- 8032484: 6d00 ldr r0, [r0, #80] ; 0x50
- 8032486: 3801 subs r0, #1
- 8032488: f7fc fb8c bl 802eba4 <lwip_htonl>
- 803248c: 2100 movs r1, #0
- 803248e: 4602 mov r2, r0
- 8032490: 4620 mov r0, r4
- 8032492: f7ff fbd9 bl 8031c48 <tcp_output_alloc_header.constprop.0>
- if(p == NULL) {
- 8032496: 4605 mov r5, r0
- 8032498: b178 cbz r0, 80324ba <tcp_keepalive+0x3a>
- /* Send output to IP */
- #if LWIP_NETIF_HWADDRHINT
- ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP,
- &(pcb->addr_hint));
- #else /* LWIP_NETIF_HWADDRHINT*/
- ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP);
- 803249a: 2200 movs r2, #0
- 803249c: f04f 0e06 mov.w lr, #6
- 80324a0: e88d 4004 stmia.w sp, {r2, lr}
- 80324a4: 7aa3 ldrb r3, [r4, #10]
- 80324a6: 4621 mov r1, r4
- 80324a8: 1d22 adds r2, r4, #4
- 80324aa: f000 feaf bl 803320c <ip_output>
- #endif /* LWIP_NETIF_HWADDRHINT*/
- pbuf_free(p);
- 80324ae: 4628 mov r0, r5
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F".\n",
- pcb->snd_nxt - 1, pcb->rcv_nxt));
- }
- 80324b0: b003 add sp, #12
- 80324b2: e8bd 4030 ldmia.w sp!, {r4, r5, lr}
- &(pcb->addr_hint));
- #else /* LWIP_NETIF_HWADDRHINT*/
- ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP);
- #endif /* LWIP_NETIF_HWADDRHINT*/
- pbuf_free(p);
- 80324b6: f7fd bca9 b.w 802fe0c <pbuf_free>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F".\n",
- pcb->snd_nxt - 1, pcb->rcv_nxt));
- }
- 80324ba: b003 add sp, #12
- 80324bc: bd30 pop {r4, r5, pc}
- 080324be <tcp_zero_window_probe>:
- *
- * @param pcb the tcp_pcb for which to send a zero-window probe packet
- */
- void
- tcp_zero_window_probe(struct tcp_pcb *pcb)
- {
- 80324be: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr}
- LWIP_DEBUGF(TCP_DEBUG,
- ("tcp_zero_window_probe: tcp_ticks %"U32_F
- " pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n",
- tcp_ticks, pcb->tmr, pcb->keep_cnt_sent));
- seg = pcb->unacked;
- 80324c2: 6f04 ldr r4, [r0, #112] ; 0x70
- *
- * @param pcb the tcp_pcb for which to send a zero-window probe packet
- */
- void
- tcp_zero_window_probe(struct tcp_pcb *pcb)
- {
- 80324c4: 4605 mov r5, r0
- " pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n",
- tcp_ticks, pcb->tmr, pcb->keep_cnt_sent));
- seg = pcb->unacked;
- if(seg == NULL) {
- 80324c6: b914 cbnz r4, 80324ce <tcp_zero_window_probe+0x10>
- seg = pcb->unsent;
- 80324c8: 6ec4 ldr r4, [r0, #108] ; 0x6c
- }
- if(seg == NULL) {
- 80324ca: 2c00 cmp r4, #0
- 80324cc: d042 beq.n 8032554 <tcp_zero_window_probe+0x96>
- return;
- }
- is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0);
- 80324ce: 68e3 ldr r3, [r4, #12]
- 80324d0: 8998 ldrh r0, [r3, #12]
- 80324d2: f7fc fb62 bl 802eb9a <lwip_ntohs>
- 80324d6: f010 0001 ands.w r0, r0, #1
- 80324da: d005 beq.n 80324e8 <tcp_zero_window_probe+0x2a>
- 80324dc: 8921 ldrh r1, [r4, #8]
- 80324de: f1d1 0101 rsbs r1, r1, #1
- 80324e2: bf38 it cc
- 80324e4: 2100 movcc r1, #0
- 80324e6: e000 b.n 80324ea <tcp_zero_window_probe+0x2c>
- 80324e8: 4601 mov r1, r0
- /* we want to send one seqno: either FIN or data (no options) */
- len = is_fin ? 0 : 1;
- p = tcp_output_alloc_header(pcb, 0, len, seg->tcphdr->seqno);
- 80324ea: 68e3 ldr r3, [r4, #12]
- }
- if(seg == NULL) {
- return;
- }
- is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0);
- 80324ec: fa5f f881 uxtb.w r8, r1
- /* we want to send one seqno: either FIN or data (no options) */
- len = is_fin ? 0 : 1;
- p = tcp_output_alloc_header(pcb, 0, len, seg->tcphdr->seqno);
- 80324f0: 4628 mov r0, r5
- 80324f2: f081 0101 eor.w r1, r1, #1
- 80324f6: 685a ldr r2, [r3, #4]
- 80324f8: f7ff fba6 bl 8031c48 <tcp_output_alloc_header.constprop.0>
- if(p == NULL) {
- 80324fc: 4606 mov r6, r0
- 80324fe: 2800 cmp r0, #0
- 8032500: d028 beq.n 8032554 <tcp_zero_window_probe+0x96>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: no memory for pbuf\n"));
- return;
- }
- tcphdr = (struct tcp_hdr *)p->payload;
- 8032502: 6847 ldr r7, [r0, #4]
- if (is_fin) {
- 8032504: f1b8 0f00 cmp.w r8, #0
- 8032508: d009 beq.n 803251e <tcp_zero_window_probe+0x60>
- /* FIN segment, no data */
- TCPH_FLAGS_SET(tcphdr, TCP_ACK | TCP_FIN);
- 803250a: 89bc ldrh r4, [r7, #12]
- 803250c: 2011 movs r0, #17
- 803250e: f7fc fb3f bl 802eb90 <lwip_htons>
- 8032512: f424 547c bic.w r4, r4, #16128 ; 0x3f00
- 8032516: b2a4 uxth r4, r4
- 8032518: 4320 orrs r0, r4
- 803251a: 81b8 strh r0, [r7, #12]
- 803251c: e009 b.n 8032532 <tcp_zero_window_probe+0x74>
- /* Data segment, copy in one byte from the head of the unacked queue */
- char *d = ((char *)p->payload + TCP_HLEN);
- /* Depending on whether the segment has already been sent (unacked) or not
- (unsent), seg->p->payload points to the IP header or TCP header.
- Ensure we copy the first TCP data byte: */
- pbuf_copy_partial(seg->p, d, 1, seg->p->tot_len - seg->len);
- 803251e: 6860 ldr r0, [r4, #4]
- 8032520: 8923 ldrh r3, [r4, #8]
- 8032522: 8902 ldrh r2, [r0, #8]
- 8032524: 1ad3 subs r3, r2, r3
- 8032526: f107 0114 add.w r1, r7, #20
- 803252a: 2201 movs r2, #1
- 803252c: b29b uxth r3, r3
- 803252e: f7fd fdbb bl 80300a8 <pbuf_copy_partial>
- /* Send output to IP */
- #if LWIP_NETIF_HWADDRHINT
- ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP,
- &(pcb->addr_hint));
- #else /* LWIP_NETIF_HWADDRHINT*/
- ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP);
- 8032532: 2200 movs r2, #0
- 8032534: f04f 0c06 mov.w ip, #6
- 8032538: e88d 1004 stmia.w sp, {r2, ip}
- 803253c: 7aab ldrb r3, [r5, #10]
- 803253e: 4630 mov r0, r6
- 8032540: 4629 mov r1, r5
- 8032542: 1d2a adds r2, r5, #4
- 8032544: f000 fe62 bl 803320c <ip_output>
- #endif /* LWIP_NETIF_HWADDRHINT*/
- pbuf_free(p);
- 8032548: 4630 mov r0, r6
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: seqno %"U32_F
- " ackno %"U32_F".\n",
- pcb->snd_nxt - 1, pcb->rcv_nxt));
- }
- 803254a: b002 add sp, #8
- 803254c: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
- &(pcb->addr_hint));
- #else /* LWIP_NETIF_HWADDRHINT*/
- ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP);
- #endif /* LWIP_NETIF_HWADDRHINT*/
- pbuf_free(p);
- 8032550: f7fd bc5c b.w 802fe0c <pbuf_free>
- LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: seqno %"U32_F
- " ackno %"U32_F".\n",
- pcb->snd_nxt - 1, pcb->rcv_nxt));
- }
- 8032554: b002 add sp, #8
- 8032556: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 803255a: 0000 movs r0, r0
- 0803255c <sys_timeout>:
- sys_timeout_debug(u32_t msecs, sys_timeout_handler handler, void *arg, const char* handler_name)
- #else /* LWIP_DEBUG_TIMERNAMES */
- void
- sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg)
- #endif /* LWIP_DEBUG_TIMERNAMES */
- {
- 803255c: b570 push {r4, r5, r6, lr}
- 803255e: 4604 mov r4, r0
- struct sys_timeo *timeout, *t;
- timeout = (struct sys_timeo *)memp_malloc(MEMP_SYS_TIMEOUT);
- 8032560: 2009 movs r0, #9
- sys_timeout_debug(u32_t msecs, sys_timeout_handler handler, void *arg, const char* handler_name)
- #else /* LWIP_DEBUG_TIMERNAMES */
- void
- sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg)
- #endif /* LWIP_DEBUG_TIMERNAMES */
- {
- 8032562: 460d mov r5, r1
- 8032564: 4616 mov r6, r2
- struct sys_timeo *timeout, *t;
- timeout = (struct sys_timeo *)memp_malloc(MEMP_SYS_TIMEOUT);
- 8032566: f7fd fb31 bl 802fbcc <memp_malloc>
- if (timeout == NULL) {
- 803256a: 4603 mov r3, r0
- 803256c: b308 cbz r0, 80325b2 <sys_timeout+0x56>
- timeout->handler_name = handler_name;
- LWIP_DEBUGF(TIMERS_DEBUG, ("sys_timeout: %p msecs=%"U32_F" handler=%s arg=%p\n",
- (void *)timeout, msecs, handler_name, (void *)arg));
- #endif /* LWIP_DEBUG_TIMERNAMES */
- if (next_timeout == NULL) {
- 803256e: 4911 ldr r1, [pc, #68] ; (80325b4 <sys_timeout+0x58>)
- timeout = (struct sys_timeo *)memp_malloc(MEMP_SYS_TIMEOUT);
- if (timeout == NULL) {
- LWIP_ASSERT("sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty", timeout != NULL);
- return;
- }
- timeout->next = NULL;
- 8032570: 2200 movs r2, #0
- timeout->h = handler;
- timeout->arg = arg;
- timeout->time = msecs;
- 8032572: e880 0074 stmia.w r0, {r2, r4, r5, r6}
- timeout->handler_name = handler_name;
- LWIP_DEBUGF(TIMERS_DEBUG, ("sys_timeout: %p msecs=%"U32_F" handler=%s arg=%p\n",
- (void *)timeout, msecs, handler_name, (void *)arg));
- #endif /* LWIP_DEBUG_TIMERNAMES */
- if (next_timeout == NULL) {
- 8032576: 680a ldr r2, [r1, #0]
- 8032578: b902 cbnz r2, 803257c <sys_timeout+0x20>
- 803257a: e005 b.n 8032588 <sys_timeout+0x2c>
- next_timeout = timeout;
- return;
- }
- if (next_timeout->time > msecs) {
- 803257c: 6850 ldr r0, [r2, #4]
- 803257e: 42a0 cmp r0, r4
- 8032580: d90c bls.n 803259c <sys_timeout+0x40>
- next_timeout->time -= msecs;
- 8032582: 1b04 subs r4, r0, r4
- 8032584: 6054 str r4, [r2, #4]
- timeout->next = next_timeout;
- 8032586: 601a str r2, [r3, #0]
- next_timeout = timeout;
- 8032588: 600b str r3, [r1, #0]
- 803258a: bd70 pop {r4, r5, r6, pc}
- } else {
- for(t = next_timeout; t != NULL; t = t->next) {
- timeout->time -= t->time;
- if (t->next == NULL || t->next->time > timeout->time) {
- 803258c: 684c ldr r4, [r1, #4]
- 803258e: 4284 cmp r4, r0
- 8032590: d80c bhi.n 80325ac <sys_timeout+0x50>
- 8032592: 460a mov r2, r1
- 8032594: e002 b.n 803259c <sys_timeout+0x40>
- if (t->next != NULL) {
- t->next->time -= timeout->time;
- }
- timeout->next = t->next;
- 8032596: 6019 str r1, [r3, #0]
- t->next = timeout;
- 8032598: 6013 str r3, [r2, #0]
- break;
- 803259a: bd70 pop {r4, r5, r6, pc}
- next_timeout->time -= msecs;
- timeout->next = next_timeout;
- next_timeout = timeout;
- } else {
- for(t = next_timeout; t != NULL; t = t->next) {
- timeout->time -= t->time;
- 803259c: 6851 ldr r1, [r2, #4]
- 803259e: 6858 ldr r0, [r3, #4]
- 80325a0: 1a40 subs r0, r0, r1
- if (t->next == NULL || t->next->time > timeout->time) {
- 80325a2: 6811 ldr r1, [r2, #0]
- next_timeout->time -= msecs;
- timeout->next = next_timeout;
- next_timeout = timeout;
- } else {
- for(t = next_timeout; t != NULL; t = t->next) {
- timeout->time -= t->time;
- 80325a4: 6058 str r0, [r3, #4]
- if (t->next == NULL || t->next->time > timeout->time) {
- 80325a6: 2900 cmp r1, #0
- 80325a8: d1f0 bne.n 803258c <sys_timeout+0x30>
- 80325aa: e7f4 b.n 8032596 <sys_timeout+0x3a>
- if (t->next != NULL) {
- t->next->time -= timeout->time;
- 80325ac: 1a20 subs r0, r4, r0
- 80325ae: 6048 str r0, [r1, #4]
- 80325b0: e7f1 b.n 8032596 <sys_timeout+0x3a>
- 80325b2: bd70 pop {r4, r5, r6, pc}
- 80325b4: 2000c410 .word 0x2000c410
- 080325b8 <sys_timeouts_init>:
- }
- #endif /* LWIP_DNS */
- /** Initialize this module */
- void sys_timeouts_init(void)
- {
- 80325b8: b508 push {r3, lr}
- #if IP_REASSEMBLY
- sys_timeout(IP_TMR_INTERVAL, ip_reass_timer, NULL);
- #endif /* IP_REASSEMBLY */
- #if LWIP_ARP
- sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL);
- 80325ba: 2200 movs r2, #0
- 80325bc: f241 3088 movw r0, #5000 ; 0x1388
- 80325c0: 4908 ldr r1, [pc, #32] ; (80325e4 <sys_timeouts_init+0x2c>)
- 80325c2: f7ff ffcb bl 803255c <sys_timeout>
- #endif /* LWIP_ARP */
- #if LWIP_DHCP
- sys_timeout(DHCP_COARSE_TIMER_MSECS, dhcp_timer_coarse, NULL);
- 80325c6: 2200 movs r2, #0
- 80325c8: f64e 2060 movw r0, #60000 ; 0xea60
- 80325cc: 4906 ldr r1, [pc, #24] ; (80325e8 <sys_timeouts_init+0x30>)
- 80325ce: f7ff ffc5 bl 803255c <sys_timeout>
- sys_timeout(DHCP_FINE_TIMER_MSECS, dhcp_timer_fine, NULL);
- 80325d2: 4906 ldr r1, [pc, #24] ; (80325ec <sys_timeouts_init+0x34>)
- 80325d4: f44f 70fa mov.w r0, #500 ; 0x1f4
- 80325d8: 2200 movs r2, #0
- #if NO_SYS
- /* Initialise timestamp for sys_check_timeouts */
- timeouts_last_time = sys_now();
- #endif
- }
- 80325da: e8bd 4008 ldmia.w sp!, {r3, lr}
- #if LWIP_ARP
- sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL);
- #endif /* LWIP_ARP */
- #if LWIP_DHCP
- sys_timeout(DHCP_COARSE_TIMER_MSECS, dhcp_timer_coarse, NULL);
- sys_timeout(DHCP_FINE_TIMER_MSECS, dhcp_timer_fine, NULL);
- 80325de: f7ff bfbd b.w 803255c <sys_timeout>
- 80325e2: bf00 nop
- 80325e4: 08032629 .word 0x08032629
- 80325e8: 0803260d .word 0x0803260d
- 80325ec: 080325f1 .word 0x080325f1
- 080325f0 <dhcp_timer_fine>:
- *
- * @param arg unused argument
- */
- static void
- dhcp_timer_fine(void *arg)
- {
- 80325f0: b508 push {r3, lr}
- LWIP_UNUSED_ARG(arg);
- LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: dhcp_fine_tmr()\n"));
- dhcp_fine_tmr();
- 80325f2: f7fd f8a7 bl 802f744 <dhcp_fine_tmr>
- sys_timeout(DHCP_FINE_TIMER_MSECS, dhcp_timer_fine, NULL);
- 80325f6: 4904 ldr r1, [pc, #16] ; (8032608 <dhcp_timer_fine+0x18>)
- 80325f8: f44f 70fa mov.w r0, #500 ; 0x1f4
- 80325fc: 2200 movs r2, #0
- }
- 80325fe: e8bd 4008 ldmia.w sp!, {r3, lr}
- dhcp_timer_fine(void *arg)
- {
- LWIP_UNUSED_ARG(arg);
- LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: dhcp_fine_tmr()\n"));
- dhcp_fine_tmr();
- sys_timeout(DHCP_FINE_TIMER_MSECS, dhcp_timer_fine, NULL);
- 8032602: f7ff bfab b.w 803255c <sys_timeout>
- 8032606: bf00 nop
- 8032608: 080325f1 .word 0x080325f1
- 0803260c <dhcp_timer_coarse>:
- *
- * @param arg unused argument
- */
- static void
- dhcp_timer_coarse(void *arg)
- {
- 803260c: b508 push {r3, lr}
- LWIP_UNUSED_ARG(arg);
- LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: dhcp_coarse_tmr()\n"));
- dhcp_coarse_tmr();
- 803260e: f7fd f817 bl 802f640 <dhcp_coarse_tmr>
- sys_timeout(DHCP_COARSE_TIMER_MSECS, dhcp_timer_coarse, NULL);
- 8032612: 4904 ldr r1, [pc, #16] ; (8032624 <dhcp_timer_coarse+0x18>)
- 8032614: f64e 2060 movw r0, #60000 ; 0xea60
- 8032618: 2200 movs r2, #0
- }
- 803261a: e8bd 4008 ldmia.w sp!, {r3, lr}
- dhcp_timer_coarse(void *arg)
- {
- LWIP_UNUSED_ARG(arg);
- LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: dhcp_coarse_tmr()\n"));
- dhcp_coarse_tmr();
- sys_timeout(DHCP_COARSE_TIMER_MSECS, dhcp_timer_coarse, NULL);
- 803261e: f7ff bf9d b.w 803255c <sys_timeout>
- 8032622: bf00 nop
- 8032624: 0803260d .word 0x0803260d
- 08032628 <arp_timer>:
- *
- * @param arg unused argument
- */
- static void
- arp_timer(void *arg)
- {
- 8032628: b508 push {r3, lr}
- LWIP_UNUSED_ARG(arg);
- LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: etharp_tmr()\n"));
- etharp_tmr();
- 803262a: f004 fd25 bl 8037078 <etharp_tmr>
- sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL);
- 803262e: 4904 ldr r1, [pc, #16] ; (8032640 <arp_timer+0x18>)
- 8032630: f241 3088 movw r0, #5000 ; 0x1388
- 8032634: 2200 movs r2, #0
- }
- 8032636: e8bd 4008 ldmia.w sp!, {r3, lr}
- arp_timer(void *arg)
- {
- LWIP_UNUSED_ARG(arg);
- LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: etharp_tmr()\n"));
- etharp_tmr();
- sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL);
- 803263a: f7ff bf8f b.w 803255c <sys_timeout>
- 803263e: bf00 nop
- 8032640: 08032629 .word 0x08032629
- 08032644 <tcp_timer_needed>:
- */
- void
- tcp_timer_needed(void)
- {
- /* timer is off but needed again? */
- if (!tcpip_tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs)) {
- 8032644: 4b08 ldr r3, [pc, #32] ; (8032668 <tcp_timer_needed+0x24>)
- 8032646: 681b ldr r3, [r3, #0]
- 8032648: b96b cbnz r3, 8032666 <tcp_timer_needed+0x22>
- 803264a: 4b08 ldr r3, [pc, #32] ; (803266c <tcp_timer_needed+0x28>)
- 803264c: 681b ldr r3, [r3, #0]
- 803264e: b913 cbnz r3, 8032656 <tcp_timer_needed+0x12>
- 8032650: 4b07 ldr r3, [pc, #28] ; (8032670 <tcp_timer_needed+0x2c>)
- 8032652: 681b ldr r3, [r3, #0]
- 8032654: b13b cbz r3, 8032666 <tcp_timer_needed+0x22>
- /* enable and start timer */
- tcpip_tcp_timer_active = 1;
- 8032656: 4b04 ldr r3, [pc, #16] ; (8032668 <tcp_timer_needed+0x24>)
- sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
- 8032658: 4906 ldr r1, [pc, #24] ; (8032674 <tcp_timer_needed+0x30>)
- tcp_timer_needed(void)
- {
- /* timer is off but needed again? */
- if (!tcpip_tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs)) {
- /* enable and start timer */
- tcpip_tcp_timer_active = 1;
- 803265a: 2201 movs r2, #1
- 803265c: 601a str r2, [r3, #0]
- sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
- 803265e: 20fa movs r0, #250 ; 0xfa
- 8032660: 2200 movs r2, #0
- 8032662: f7ff bf7b b.w 803255c <sys_timeout>
- 8032666: 4770 bx lr
- 8032668: 2000c40c .word 0x2000c40c
- 803266c: 2000f6bc .word 0x2000f6bc
- 8032670: 2000f6d0 .word 0x2000f6d0
- 8032674: 08032679 .word 0x08032679
- 08032678 <tcpip_tcp_timer>:
- *
- * @param arg unused argument
- */
- static void
- tcpip_tcp_timer(void *arg)
- {
- 8032678: b508 push {r3, lr}
- LWIP_UNUSED_ARG(arg);
- /* call TCP timer handler */
- tcp_tmr();
- 803267a: f7fe fa59 bl 8030b30 <tcp_tmr>
- /* timer still needed? */
- if (tcp_active_pcbs || tcp_tw_pcbs) {
- 803267e: 4b08 ldr r3, [pc, #32] ; (80326a0 <tcpip_tcp_timer+0x28>)
- 8032680: 681b ldr r3, [r3, #0]
- 8032682: b913 cbnz r3, 803268a <tcpip_tcp_timer+0x12>
- 8032684: 4b07 ldr r3, [pc, #28] ; (80326a4 <tcpip_tcp_timer+0x2c>)
- 8032686: 681b ldr r3, [r3, #0]
- 8032688: b133 cbz r3, 8032698 <tcpip_tcp_timer+0x20>
- /* restart timer */
- sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
- 803268a: 4907 ldr r1, [pc, #28] ; (80326a8 <tcpip_tcp_timer+0x30>)
- 803268c: 20fa movs r0, #250 ; 0xfa
- 803268e: 2200 movs r2, #0
- } else {
- /* disable timer */
- tcpip_tcp_timer_active = 0;
- }
- }
- 8032690: e8bd 4008 ldmia.w sp!, {r3, lr}
- /* call TCP timer handler */
- tcp_tmr();
- /* timer still needed? */
- if (tcp_active_pcbs || tcp_tw_pcbs) {
- /* restart timer */
- sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
- 8032694: f7ff bf62 b.w 803255c <sys_timeout>
- } else {
- /* disable timer */
- tcpip_tcp_timer_active = 0;
- 8032698: 4a04 ldr r2, [pc, #16] ; (80326ac <tcpip_tcp_timer+0x34>)
- 803269a: 6013 str r3, [r2, #0]
- 803269c: bd08 pop {r3, pc}
- 803269e: bf00 nop
- 80326a0: 2000f6bc .word 0x2000f6bc
- 80326a4: 2000f6d0 .word 0x2000f6d0
- 80326a8: 08032679 .word 0x08032679
- 80326ac: 2000c40c .word 0x2000c40c
- 080326b0 <sys_untimeout>:
- void
- sys_untimeout(sys_timeout_handler handler, void *arg)
- {
- struct sys_timeo *prev_t, *t;
- if (next_timeout == NULL) {
- 80326b0: 4b10 ldr r3, [pc, #64] ; (80326f4 <sys_untimeout+0x44>)
- 80326b2: 681b ldr r3, [r3, #0]
- * @param handler callback function that would be called by the timeout
- * @param arg callback argument that would be passed to handler
- */
- void
- sys_untimeout(sys_timeout_handler handler, void *arg)
- {
- 80326b4: b510 push {r4, lr}
- struct sys_timeo *prev_t, *t;
- if (next_timeout == NULL) {
- 80326b6: b1e3 cbz r3, 80326f2 <sys_untimeout+0x42>
- 80326b8: 2200 movs r2, #0
- 80326ba: e000 b.n 80326be <sys_untimeout+0xe>
- return;
- }
- for (t = next_timeout, prev_t = NULL; t != NULL; prev_t = t, t = t->next) {
- 80326bc: 4623 mov r3, r4
- if ((t->h == handler) && (t->arg == arg)) {
- 80326be: 689c ldr r4, [r3, #8]
- 80326c0: 4284 cmp r4, r0
- 80326c2: d112 bne.n 80326ea <sys_untimeout+0x3a>
- 80326c4: 68dc ldr r4, [r3, #12]
- 80326c6: 428c cmp r4, r1
- 80326c8: d10f bne.n 80326ea <sys_untimeout+0x3a>
- 80326ca: 6819 ldr r1, [r3, #0]
- /* We have a match */
- /* Unlink from previous in list */
- if (prev_t == NULL) {
- 80326cc: b902 cbnz r2, 80326d0 <sys_untimeout+0x20>
- next_timeout = t->next;
- 80326ce: 4a09 ldr r2, [pc, #36] ; (80326f4 <sys_untimeout+0x44>)
- } else {
- prev_t->next = t->next;
- 80326d0: 6011 str r1, [r2, #0]
- }
- /* If not the last one, add time of this one back to next */
- if (t->next != NULL) {
- 80326d2: 681a ldr r2, [r3, #0]
- 80326d4: b11a cbz r2, 80326de <sys_untimeout+0x2e>
- t->next->time += t->time;
- 80326d6: 6850 ldr r0, [r2, #4]
- 80326d8: 6859 ldr r1, [r3, #4]
- 80326da: 1841 adds r1, r0, r1
- 80326dc: 6051 str r1, [r2, #4]
- }
- memp_free(MEMP_SYS_TIMEOUT, t);
- 80326de: 2009 movs r0, #9
- 80326e0: 4619 mov r1, r3
- return;
- }
- }
- return;
- }
- 80326e2: e8bd 4010 ldmia.w sp!, {r4, lr}
- }
- /* If not the last one, add time of this one back to next */
- if (t->next != NULL) {
- t->next->time += t->time;
- }
- memp_free(MEMP_SYS_TIMEOUT, t);
- 80326e6: f7fd ba87 b.w 802fbf8 <memp_free>
- if (next_timeout == NULL) {
- return;
- }
- for (t = next_timeout, prev_t = NULL; t != NULL; prev_t = t, t = t->next) {
- 80326ea: 681c ldr r4, [r3, #0]
- 80326ec: 461a mov r2, r3
- 80326ee: 2c00 cmp r4, #0
- 80326f0: d1e4 bne.n 80326bc <sys_untimeout+0xc>
- 80326f2: bd10 pop {r4, pc}
- 80326f4: 2000c410 .word 0x2000c410
- 080326f8 <sys_timeouts_mbox_fetch>:
- * @param mbox the mbox to fetch the message from
- * @param msg the place to store the message
- */
- void
- sys_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg)
- {
- 80326f8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- struct sys_timeo *tmptimeout;
- sys_timeout_handler handler;
- void *arg;
- again:
- if (!next_timeout) {
- 80326fc: 4e18 ldr r6, [pc, #96] ; (8032760 <sys_timeouts_mbox_fetch+0x68>)
- * @param mbox the mbox to fetch the message from
- * @param msg the place to store the message
- */
- void
- sys_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg)
- {
- 80326fe: 4604 mov r4, r0
- 8032700: 460d mov r5, r1
- 8032702: 4637 mov r7, r6
- struct sys_timeo *tmptimeout;
- sys_timeout_handler handler;
- void *arg;
- again:
- if (!next_timeout) {
- 8032704: 6832 ldr r2, [r6, #0]
- 8032706: b92a cbnz r2, 8032714 <sys_timeouts_mbox_fetch+0x1c>
- time_needed = sys_arch_mbox_fetch(mbox, msg, 0);
- 8032708: 4620 mov r0, r4
- 803270a: 4629 mov r1, r5
- } else {
- next_timeout->time = 0;
- }
- }
- }
- }
- 803270c: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- sys_timeout_handler handler;
- void *arg;
- again:
- if (!next_timeout) {
- time_needed = sys_arch_mbox_fetch(mbox, msg, 0);
- 8032710: f005 b8fc b.w 803790c <sys_arch_mbox_fetch>
- } else {
- if (next_timeout->time > 0) {
- 8032714: 6852 ldr r2, [r2, #4]
- 8032716: b96a cbnz r2, 8032734 <sys_timeouts_mbox_fetch+0x3c>
- if (time_needed == SYS_ARCH_TIMEOUT) {
- /* If time == SYS_ARCH_TIMEOUT, a timeout occured before a message
- could be fetched. We should now call the timeout handler and
- deallocate the memory allocated for the timeout. */
- tmptimeout = next_timeout;
- 8032718: 6839 ldr r1, [r7, #0]
- next_timeout = tmptimeout->next;
- 803271a: 680a ldr r2, [r1, #0]
- handler = tmptimeout->h;
- 803271c: f8d1 8008 ldr.w r8, [r1, #8]
- if (time_needed == SYS_ARCH_TIMEOUT) {
- /* If time == SYS_ARCH_TIMEOUT, a timeout occured before a message
- could be fetched. We should now call the timeout handler and
- deallocate the memory allocated for the timeout. */
- tmptimeout = next_timeout;
- next_timeout = tmptimeout->next;
- 8032720: 603a str r2, [r7, #0]
- if (handler != NULL) {
- LWIP_DEBUGF(TIMERS_DEBUG, ("stmf calling h=%s arg=%p\n",
- tmptimeout->handler_name, arg));
- }
- #endif /* LWIP_DEBUG_TIMERNAMES */
- memp_free(MEMP_SYS_TIMEOUT, tmptimeout);
- 8032722: 2009 movs r0, #9
- could be fetched. We should now call the timeout handler and
- deallocate the memory allocated for the timeout. */
- tmptimeout = next_timeout;
- next_timeout = tmptimeout->next;
- handler = tmptimeout->h;
- arg = tmptimeout->arg;
- 8032724: f8d1 900c ldr.w r9, [r1, #12]
- if (handler != NULL) {
- LWIP_DEBUGF(TIMERS_DEBUG, ("stmf calling h=%s arg=%p\n",
- tmptimeout->handler_name, arg));
- }
- #endif /* LWIP_DEBUG_TIMERNAMES */
- memp_free(MEMP_SYS_TIMEOUT, tmptimeout);
- 8032728: f7fd fa66 bl 802fbf8 <memp_free>
- if (handler != NULL) {
- 803272c: f1b8 0f00 cmp.w r8, #0
- 8032730: d0e8 beq.n 8032704 <sys_timeouts_mbox_fetch+0xc>
- 8032732: e006 b.n 8032742 <sys_timeouts_mbox_fetch+0x4a>
- again:
- if (!next_timeout) {
- time_needed = sys_arch_mbox_fetch(mbox, msg, 0);
- } else {
- if (next_timeout->time > 0) {
- time_needed = sys_arch_mbox_fetch(mbox, msg, next_timeout->time);
- 8032734: 4620 mov r0, r4
- 8032736: 4629 mov r1, r5
- 8032738: f005 f8e8 bl 803790c <sys_arch_mbox_fetch>
- } else {
- time_needed = SYS_ARCH_TIMEOUT;
- }
- if (time_needed == SYS_ARCH_TIMEOUT) {
- 803273c: 1c43 adds r3, r0, #1
- 803273e: d0eb beq.n 8032718 <sys_timeouts_mbox_fetch+0x20>
- 8032740: e002 b.n 8032748 <sys_timeouts_mbox_fetch+0x50>
- memp_free(MEMP_SYS_TIMEOUT, tmptimeout);
- if (handler != NULL) {
- /* For LWIP_TCPIP_CORE_LOCKING, lock the core before calling the
- timeout handler function. */
- LOCK_TCPIP_CORE();
- handler(arg);
- 8032742: 4648 mov r0, r9
- 8032744: 47c0 blx r8
- 8032746: e7dd b.n 8032704 <sys_timeouts_mbox_fetch+0xc>
- goto again;
- } else {
- /* If time != SYS_ARCH_TIMEOUT, a message was received before the timeout
- occured. The time variable is set to the number of
- milliseconds we waited for the message. */
- if (time_needed < next_timeout->time) {
- 8032748: 4b05 ldr r3, [pc, #20] ; (8032760 <sys_timeouts_mbox_fetch+0x68>)
- 803274a: 681b ldr r3, [r3, #0]
- 803274c: 6859 ldr r1, [r3, #4]
- 803274e: 4288 cmp r0, r1
- next_timeout->time -= time_needed;
- 8032750: bf34 ite cc
- 8032752: ebc0 0201 rsbcc r2, r0, r1
- } else {
- next_timeout->time = 0;
- 8032756: 2200 movcs r2, #0
- 8032758: 605a str r2, [r3, #4]
- 803275a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
- 803275e: bf00 nop
- 8032760: 2000c410 .word 0x2000c410
- 08032764 <udp_init>:
- /**
- * Initialize this module.
- */
- void
- udp_init(void)
- {
- 8032764: 4770 bx lr
- 8032766: 0000 movs r0, r0
- 08032768 <udp_input>:
- * @param inp network interface on which the datagram was received.
- *
- */
- void
- udp_input(struct pbuf *p, struct netif *inp)
- {
- 8032768: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- PERF_START;
- UDP_STATS_INC(udp.recv);
- iphdr = (struct ip_hdr *)p->payload;
- 803276c: f8d0 9004 ldr.w r9, [r0, #4]
- /* Check minimum length (IP header + UDP header)
- * and move payload pointer to UDP header */
- if (p->tot_len < (IPH_HL(iphdr) * 4 + UDP_HLEN) || pbuf_header(p, -(s16_t)(IPH_HL(iphdr) * 4))) {
- 8032770: 8903 ldrh r3, [r0, #8]
- * @param inp network interface on which the datagram was received.
- *
- */
- void
- udp_input(struct pbuf *p, struct netif *inp)
- {
- 8032772: 460e mov r6, r1
- iphdr = (struct ip_hdr *)p->payload;
- /* Check minimum length (IP header + UDP header)
- * and move payload pointer to UDP header */
- if (p->tot_len < (IPH_HL(iphdr) * 4 + UDP_HLEN) || pbuf_header(p, -(s16_t)(IPH_HL(iphdr) * 4))) {
- 8032774: f899 1000 ldrb.w r1, [r9]
- 8032778: f001 010f and.w r1, r1, #15
- 803277c: 1c8a adds r2, r1, #2
- 803277e: ebb3 0f82 cmp.w r3, r2, lsl #2
- * @param inp network interface on which the datagram was received.
- *
- */
- void
- udp_input(struct pbuf *p, struct netif *inp)
- {
- 8032782: b085 sub sp, #20
- 8032784: 4605 mov r5, r0
- iphdr = (struct ip_hdr *)p->payload;
- /* Check minimum length (IP header + UDP header)
- * and move payload pointer to UDP header */
- if (p->tot_len < (IPH_HL(iphdr) * 4 + UDP_HLEN) || pbuf_header(p, -(s16_t)(IPH_HL(iphdr) * 4))) {
- 8032786: db05 blt.n 8032794 <udp_input+0x2c>
- 8032788: 0089 lsls r1, r1, #2
- 803278a: 4249 negs r1, r1
- 803278c: f7fd fb13 bl 802fdb6 <pbuf_header>
- 8032790: 4683 mov fp, r0
- 8032792: b110 cbz r0, 803279a <udp_input+0x32>
- /* drop short packets */
- LWIP_DEBUGF(UDP_DEBUG,
- ("udp_input: short UDP datagram (%"U16_F" bytes) discarded\n", p->tot_len));
- UDP_STATS_INC(udp.lenerr);
- UDP_STATS_INC(udp.drop);
- snmp_inc_udpinerrors();
- 8032794: f002 fa90 bl 8034cb8 <snmp_inc_udpinerrors>
- 8032798: e096 b.n 80328c8 <udp_input+0x160>
- }
- udphdr = (struct udp_hdr *)p->payload;
- /* is broadcast packet ? */
- broadcast = ip_addr_isbroadcast(¤t_iphdr_dest, inp);
- 803279a: f8df a150 ldr.w sl, [pc, #336] ; 80328ec <udp_input+0x184>
- snmp_inc_udpinerrors();
- pbuf_free(p);
- goto end;
- }
- udphdr = (struct udp_hdr *)p->payload;
- 803279e: 686c ldr r4, [r5, #4]
- /* is broadcast packet ? */
- broadcast = ip_addr_isbroadcast(¤t_iphdr_dest, inp);
- 80327a0: f8da 0000 ldr.w r0, [sl]
- 80327a4: 4631 mov r1, r6
- 80327a6: f000 faed bl 8032d84 <ip4_addr_isbroadcast>
- 80327aa: 4680 mov r8, r0
- LWIP_DEBUGF(UDP_DEBUG, ("udp_input: received datagram of length %"U16_F"\n", p->tot_len));
- /* convert src and dest ports to host byte order */
- src = ntohs(udphdr->src);
- 80327ac: 8820 ldrh r0, [r4, #0]
- 80327ae: f7fc f9f4 bl 802eb9a <lwip_ntohs>
- 80327b2: 4607 mov r7, r0
- dest = ntohs(udphdr->dest);
- 80327b4: 8860 ldrh r0, [r4, #2]
- 80327b6: f7fc f9f0 bl 802eb9a <lwip_ntohs>
- #if LWIP_DHCP
- pcb = NULL;
- /* when LWIP_DHCP is active, packets to DHCP_CLIENT_PORT may only be processed by
- the dhcp module, no other UDP pcb may use the local UDP port DHCP_CLIENT_PORT */
- if (dest == DHCP_CLIENT_PORT) {
- 80327ba: 2844 cmp r0, #68 ; 0x44
- 80327bc: d10f bne.n 80327de <udp_input+0x76>
- /* all packets for DHCP_CLIENT_PORT not coming from DHCP_SERVER_PORT are dropped! */
- if (src == DHCP_SERVER_PORT) {
- 80327be: 2f43 cmp r7, #67 ; 0x43
- 80327c0: d14f bne.n 8032862 <udp_input+0xfa>
- if ((inp->dhcp != NULL) && (inp->dhcp->pcb != NULL)) {
- 80327c2: 6a33 ldr r3, [r6, #32]
- 80327c4: 2b00 cmp r3, #0
- 80327c6: d04c beq.n 8032862 <udp_input+0xfa>
- 80327c8: 685c ldr r4, [r3, #4]
- 80327ca: 2c00 cmp r4, #0
- 80327cc: d049 beq.n 8032862 <udp_input+0xfa>
- /* accept the packe if
- (- broadcast or directed to us) -> DHCP is link-layer-addressed, local ip is always ANY!
- - inp->dhcp->pcb->remote == ANY or iphdr->src */
- if ((ip_addr_isany(&inp->dhcp->pcb->remote_ip) ||
- 80327ce: 6863 ldr r3, [r4, #4]
- 80327d0: 2b00 cmp r3, #0
- 80327d2: d04e beq.n 8032872 <udp_input+0x10a>
- ip_addr_cmp(&(inp->dhcp->pcb->remote_ip), ¤t_iphdr_src))) {
- 80327d4: 4a43 ldr r2, [pc, #268] ; (80328e4 <udp_input+0x17c>)
- if (src == DHCP_SERVER_PORT) {
- if ((inp->dhcp != NULL) && (inp->dhcp->pcb != NULL)) {
- /* accept the packe if
- (- broadcast or directed to us) -> DHCP is link-layer-addressed, local ip is always ANY!
- - inp->dhcp->pcb->remote == ANY or iphdr->src */
- if ((ip_addr_isany(&inp->dhcp->pcb->remote_ip) ||
- 80327d6: 6812 ldr r2, [r2, #0]
- 80327d8: 4293 cmp r3, r2
- 80327da: d142 bne.n 8032862 <udp_input+0xfa>
- 80327dc: e049 b.n 8032872 <udp_input+0x10a>
- uncon_pcb = NULL;
- /* Iterate through the UDP pcb list for a matching pcb.
- * 'Perfect match' pcbs (connected to the remote port & ip address) are
- * preferred. If no perfect match is found, the first unconnected pcb that
- * matches the local port and ip address gets the datagram. */
- for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {
- 80327de: 4b42 ldr r3, [pc, #264] ; (80328e8 <udp_input+0x180>)
- /* compare PCB local addr+port to UDP destination addr+port */
- if (pcb->local_port == dest) {
- if (
- (!broadcast && ip_addr_isany(&pcb->local_ip)) ||
- ip_addr_cmp(&(pcb->local_ip), ¤t_iphdr_dest) ||
- 80327e0: f8da a000 ldr.w sl, [sl]
- uncon_pcb = NULL;
- /* Iterate through the UDP pcb list for a matching pcb.
- * 'Perfect match' pcbs (connected to the remote port & ip address) are
- * preferred. If no perfect match is found, the first unconnected pcb that
- * matches the local port and ip address gets the datagram. */
- for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {
- 80327e4: f8d3 c000 ldr.w ip, [r3]
- }
- /* compare PCB remote addr+port to UDP source addr+port */
- if ((local_match != 0) &&
- (pcb->remote_port == src) &&
- (ip_addr_isany(&pcb->remote_ip) ||
- ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src))) {
- 80327e8: 4b3e ldr r3, [pc, #248] ; (80328e4 <udp_input+0x17c>)
- 80327ea: 681b ldr r3, [r3, #0]
- uncon_pcb = NULL;
- /* Iterate through the UDP pcb list for a matching pcb.
- * 'Perfect match' pcbs (connected to the remote port & ip address) are
- * preferred. If no perfect match is found, the first unconnected pcb that
- * matches the local port and ip address gets the datagram. */
- for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {
- 80327ec: 4664 mov r4, ip
- }
- /* compare PCB remote addr+port to UDP source addr+port */
- if ((local_match != 0) &&
- (pcb->remote_port == src) &&
- (ip_addr_isany(&pcb->remote_ip) ||
- ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src))) {
- 80327ee: 9303 str r3, [sp, #12]
- }
- }
- } else
- #endif /* LWIP_DHCP */
- {
- prev = NULL;
- 80327f0: 4659 mov r1, fp
- local_match = 0;
- uncon_pcb = NULL;
- 80327f2: 465b mov r3, fp
- /* Iterate through the UDP pcb list for a matching pcb.
- * 'Perfect match' pcbs (connected to the remote port & ip address) are
- * preferred. If no perfect match is found, the first unconnected pcb that
- * matches the local port and ip address gets the datagram. */
- for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {
- 80327f4: e032 b.n 803285c <udp_input+0xf4>
- ip4_addr3_16(&pcb->local_ip), ip4_addr4_16(&pcb->local_ip), pcb->local_port,
- ip4_addr1_16(&pcb->remote_ip), ip4_addr2_16(&pcb->remote_ip),
- ip4_addr3_16(&pcb->remote_ip), ip4_addr4_16(&pcb->remote_ip), pcb->remote_port));
- /* compare PCB local addr+port to UDP destination addr+port */
- if (pcb->local_port == dest) {
- 80327f6: 8a62 ldrh r2, [r4, #18]
- 80327f8: 4282 cmp r2, r0
- 80327fa: d12d bne.n 8032858 <udp_input+0xf0>
- 80327fc: 6822 ldr r2, [r4, #0]
- if (
- 80327fe: f1b8 0f00 cmp.w r8, #0
- 8032802: d100 bne.n 8032806 <udp_input+0x9e>
- (!broadcast && ip_addr_isany(&pcb->local_ip)) ||
- 8032804: b15a cbz r2, 803281e <udp_input+0xb6>
- 8032806: 4552 cmp r2, sl
- 8032808: d009 beq.n 803281e <udp_input+0xb6>
- ip_addr_cmp(&(pcb->local_ip), ¤t_iphdr_dest) ||
- 803280a: f1b8 0f00 cmp.w r8, #0
- 803280e: d023 beq.n 8032858 <udp_input+0xf0>
- (broadcast && ip_get_option(pcb, SOF_BROADCAST) &&
- (ip_addr_isany(&pcb->local_ip) ||
- ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))) {
- #else /* IP_SOF_BROADCAST_RECV */
- (broadcast &&
- (ip_addr_isany(&pcb->local_ip) ||
- 8032810: b12a cbz r2, 803281e <udp_input+0xb6>
- ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))) {
- 8032812: ea8a 0b02 eor.w fp, sl, r2
- 8032816: 68b2 ldr r2, [r6, #8]
- (broadcast && ip_get_option(pcb, SOF_BROADCAST) &&
- (ip_addr_isany(&pcb->local_ip) ||
- ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))) {
- #else /* IP_SOF_BROADCAST_RECV */
- (broadcast &&
- (ip_addr_isany(&pcb->local_ip) ||
- 8032818: ea1b 0f02 tst.w fp, r2
- 803281c: d11c bne.n 8032858 <udp_input+0xf0>
- ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))) {
- #endif /* IP_SOF_BROADCAST_RECV */
- local_match = 1;
- if ((uncon_pcb == NULL) &&
- 803281e: 2b00 cmp r3, #0
- 8032820: d158 bne.n 80328d4 <udp_input+0x16c>
- ((pcb->flags & UDP_FLAGS_CONNECTED) == 0)) {
- 8032822: 7c23 ldrb r3, [r4, #16]
- (broadcast &&
- (ip_addr_isany(&pcb->local_ip) ||
- ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))) {
- #endif /* IP_SOF_BROADCAST_RECV */
- local_match = 1;
- if ((uncon_pcb == NULL) &&
- 8032824: f003 0304 and.w r3, r3, #4
- 8032828: b2db uxtb r3, r3
- 803282a: 2b00 cmp r3, #0
- 803282c: bf0c ite eq
- 803282e: 4623 moveq r3, r4
- 8032830: 2300 movne r3, #0
- 8032832: e04f b.n 80328d4 <udp_input+0x16c>
- }
- }
- /* compare PCB remote addr+port to UDP source addr+port */
- if ((local_match != 0) &&
- (pcb->remote_port == src) &&
- (ip_addr_isany(&pcb->remote_ip) ||
- 8032834: f8d4 b004 ldr.w fp, [r4, #4]
- 8032838: f1bb 0f00 cmp.w fp, #0
- 803283c: d101 bne.n 8032842 <udp_input+0xda>
- ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src))) {
- /* the first fully matching PCB */
- if (prev != NULL) {
- 803283e: b921 cbnz r1, 803284a <udp_input+0xe2>
- 8032840: e017 b.n 8032872 <udp_input+0x10a>
- }
- }
- /* compare PCB remote addr+port to UDP source addr+port */
- if ((local_match != 0) &&
- (pcb->remote_port == src) &&
- (ip_addr_isany(&pcb->remote_ip) ||
- 8032842: 9a03 ldr r2, [sp, #12]
- 8032844: 4593 cmp fp, r2
- 8032846: d107 bne.n 8032858 <udp_input+0xf0>
- 8032848: e7f9 b.n 803283e <udp_input+0xd6>
- ip_addr_cmp(&(pcb->remote_ip), ¤t_iphdr_src))) {
- /* the first fully matching PCB */
- if (prev != NULL) {
- /* move the pcb to the front of udp_pcbs so that is
- found faster next time */
- prev->next = pcb->next;
- 803284a: 68e3 ldr r3, [r4, #12]
- 803284c: 60cb str r3, [r1, #12]
- pcb->next = udp_pcbs;
- udp_pcbs = pcb;
- 803284e: 4b26 ldr r3, [pc, #152] ; (80328e8 <udp_input+0x180>)
- /* the first fully matching PCB */
- if (prev != NULL) {
- /* move the pcb to the front of udp_pcbs so that is
- found faster next time */
- prev->next = pcb->next;
- pcb->next = udp_pcbs;
- 8032850: f8c4 c00c str.w ip, [r4, #12]
- udp_pcbs = pcb;
- 8032854: 601c str r4, [r3, #0]
- 8032856: e00c b.n 8032872 <udp_input+0x10a>
- 8032858: 4621 mov r1, r4
- uncon_pcb = NULL;
- /* Iterate through the UDP pcb list for a matching pcb.
- * 'Perfect match' pcbs (connected to the remote port & ip address) are
- * preferred. If no perfect match is found, the first unconnected pcb that
- * matches the local port and ip address gets the datagram. */
- for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {
- 803285a: 68e4 ldr r4, [r4, #12]
- 803285c: 2c00 cmp r4, #0
- 803285e: d1ca bne.n 80327f6 <udp_input+0x8e>
- pcb = uncon_pcb;
- }
- }
- /* Check checksum if this is a match or if it was directed at us. */
- if (pcb != NULL || ip_addr_cmp(&inp->ip_addr, ¤t_iphdr_dest)) {
- 8032860: b933 cbnz r3, 8032870 <udp_input+0x108>
- 8032862: 4b22 ldr r3, [pc, #136] ; (80328ec <udp_input+0x184>)
- 8032864: 6872 ldr r2, [r6, #4]
- 8032866: 681b ldr r3, [r3, #0]
- 8032868: 429a cmp r2, r3
- 803286a: d12d bne.n 80328c8 <udp_input+0x160>
- 803286c: 2400 movs r4, #0
- 803286e: e000 b.n 8032872 <udp_input+0x10a>
- 8032870: 461c mov r4, r3
- goto end;
- }
- }
- #endif /* CHECKSUM_CHECK_UDP */
- }
- if(pbuf_header(p, -UDP_HLEN)) {
- 8032872: 4628 mov r0, r5
- 8032874: f06f 0107 mvn.w r1, #7
- 8032878: f7fd fa9d bl 802fdb6 <pbuf_header>
- 803287c: 2800 cmp r0, #0
- 803287e: d189 bne.n 8032794 <udp_input+0x2c>
- UDP_STATS_INC(udp.drop);
- snmp_inc_udpinerrors();
- pbuf_free(p);
- goto end;
- }
- if (pcb != NULL) {
- 8032880: b154 cbz r4, 8032898 <udp_input+0x130>
- snmp_inc_udpindatagrams();
- 8032882: f002 fa09 bl 8034c98 <snmp_inc_udpindatagrams>
- pbuf_header(p, -(s16_t)((IPH_HL(iphdr) * 4) + UDP_HLEN));
- }
- }
- #endif /* SO_REUSE && SO_REUSE_RXTOALL */
- /* callback */
- if (pcb->recv != NULL) {
- 8032886: 69a6 ldr r6, [r4, #24]
- 8032888: b1f6 cbz r6, 80328c8 <udp_input+0x160>
- /* now the recv function is responsible for freeing p */
- pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr(), src);
- 803288a: 9700 str r7, [sp, #0]
- 803288c: 69e0 ldr r0, [r4, #28]
- 803288e: 4b15 ldr r3, [pc, #84] ; (80328e4 <udp_input+0x17c>)
- 8032890: 4621 mov r1, r4
- 8032892: 462a mov r2, r5
- 8032894: 47b0 blx r6
- 8032896: e021 b.n 80328dc <udp_input+0x174>
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: not for us.\n"));
- #if LWIP_ICMP
- /* No match was found, send ICMP destination port unreachable unless
- destination address was broadcast/multicast. */
- if (!broadcast &&
- 8032898: f1b8 0f00 cmp.w r8, #0
- 803289c: d112 bne.n 80328c4 <udp_input+0x15c>
- !ip_addr_ismulticast(¤t_iphdr_dest)) {
- 803289e: 4b13 ldr r3, [pc, #76] ; (80328ec <udp_input+0x184>)
- 80328a0: 681b ldr r3, [r3, #0]
- 80328a2: f003 03f0 and.w r3, r3, #240 ; 0xf0
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: not for us.\n"));
- #if LWIP_ICMP
- /* No match was found, send ICMP destination port unreachable unless
- destination address was broadcast/multicast. */
- if (!broadcast &&
- 80328a6: 2be0 cmp r3, #224 ; 0xe0
- 80328a8: d00c beq.n 80328c4 <udp_input+0x15c>
- !ip_addr_ismulticast(¤t_iphdr_dest)) {
- /* move payload pointer back to ip header */
- pbuf_header(p, (IPH_HL(iphdr) * 4) + UDP_HLEN);
- 80328aa: f899 1000 ldrb.w r1, [r9]
- 80328ae: f001 010f and.w r1, r1, #15
- 80328b2: 3102 adds r1, #2
- 80328b4: 0089 lsls r1, r1, #2
- 80328b6: 4628 mov r0, r5
- 80328b8: f7fd fa7d bl 802fdb6 <pbuf_header>
- LWIP_ASSERT("p->payload == iphdr", (p->payload == iphdr));
- icmp_dest_unreach(p, ICMP_DUR_PORT);
- 80328bc: 4628 mov r0, r5
- 80328be: 2103 movs r1, #3
- 80328c0: f000 f9d2 bl 8032c68 <icmp_dest_unreach>
- }
- #endif /* LWIP_ICMP */
- UDP_STATS_INC(udp.proterr);
- UDP_STATS_INC(udp.drop);
- snmp_inc_udpnoports();
- 80328c4: f002 f9f0 bl 8034ca8 <snmp_inc_udpnoports>
- pbuf_free(p);
- 80328c8: 4628 mov r0, r5
- } else {
- pbuf_free(p);
- }
- end:
- PERF_STOP("udp_input");
- }
- 80328ca: b005 add sp, #20
- 80328cc: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- }
- #endif /* LWIP_ICMP */
- UDP_STATS_INC(udp.proterr);
- UDP_STATS_INC(udp.drop);
- snmp_inc_udpnoports();
- pbuf_free(p);
- 80328d0: f7fd ba9c b.w 802fe0c <pbuf_free>
- uncon_pcb = pcb;
- }
- }
- }
- /* compare PCB remote addr+port to UDP source addr+port */
- if ((local_match != 0) &&
- 80328d4: 8aa2 ldrh r2, [r4, #20]
- 80328d6: 42ba cmp r2, r7
- 80328d8: d1be bne.n 8032858 <udp_input+0xf0>
- 80328da: e7ab b.n 8032834 <udp_input+0xcc>
- } else {
- pbuf_free(p);
- }
- end:
- PERF_STOP("udp_input");
- }
- 80328dc: b005 add sp, #20
- 80328de: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 80328e2: bf00 nop
- 80328e4: 2000f6dc .word 0x2000f6dc
- 80328e8: 2000f6d8 .word 0x2000f6d8
- 80328ec: 2000f6e4 .word 0x2000f6e4
- 080328f0 <udp_bind>:
- *
- * @see udp_disconnect()
- */
- err_t
- udp_bind(struct udp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)
- {
- 80328f0: b5f8 push {r3, r4, r5, r6, r7, lr}
- ip_addr_debug_print(UDP_DEBUG, ipaddr);
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (", port = %"U16_F")\n", port));
- rebind = 0;
- /* Check for double bind and rebind of the same pcb */
- for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {
- 80328f2: 4b25 ldr r3, [pc, #148] ; (8032988 <udp_bind+0x98>)
- *
- * @see udp_disconnect()
- */
- err_t
- udp_bind(struct udp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)
- {
- 80328f4: 4604 mov r4, r0
- ip_addr_debug_print(UDP_DEBUG, ipaddr);
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (", port = %"U16_F")\n", port));
- rebind = 0;
- /* Check for double bind and rebind of the same pcb */
- for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {
- 80328f6: 6818 ldr r0, [r3, #0]
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_bind(ipaddr = "));
- ip_addr_debug_print(UDP_DEBUG, ipaddr);
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (", port = %"U16_F")\n", port));
- rebind = 0;
- 80328f8: 2500 movs r5, #0
- /* Check for double bind and rebind of the same pcb */
- for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {
- 80328fa: 4603 mov r3, r0
- 80328fc: e012 b.n 8032924 <udp_bind+0x34>
- /* is this UDP PCB already on active list? */
- if (pcb == ipcb) {
- 80328fe: 429c cmp r4, r3
- 8032900: d00e beq.n 8032920 <udp_bind+0x30>
- !ip_get_option(ipcb, SOF_REUSEADDR)) {
- #else /* SO_REUSE */
- /* port matches that of PCB in list and REUSEADDR not set -> reject */
- else {
- #endif /* SO_REUSE */
- if ((ipcb->local_port == port) &&
- 8032902: 8a5e ldrh r6, [r3, #18]
- 8032904: 4296 cmp r6, r2
- 8032906: d10c bne.n 8032922 <udp_bind+0x32>
- /* IP address matches, or one is IP_ADDR_ANY? */
- (ip_addr_isany(&(ipcb->local_ip)) ||
- 8032908: 681f ldr r7, [r3, #0]
- 803290a: b90f cbnz r7, 8032910 <udp_bind+0x20>
- ip_addr_isany(ipaddr) ||
- ip_addr_cmp(&(ipcb->local_ip), ipaddr))) {
- /* other PCB already binds to this local IP and port */
- LWIP_DEBUGF(UDP_DEBUG,
- ("udp_bind: local port %"U16_F" already bound by another pcb\n", port));
- return ERR_USE;
- 803290c: 20f8 movs r0, #248 ; 0xf8
- 803290e: e039 b.n 8032984 <udp_bind+0x94>
- /* port matches that of PCB in list and REUSEADDR not set -> reject */
- else {
- #endif /* SO_REUSE */
- if ((ipcb->local_port == port) &&
- /* IP address matches, or one is IP_ADDR_ANY? */
- (ip_addr_isany(&(ipcb->local_ip)) ||
- 8032910: 2900 cmp r1, #0
- 8032912: d0fb beq.n 803290c <udp_bind+0x1c>
- ip_addr_isany(ipaddr) ||
- 8032914: 680e ldr r6, [r1, #0]
- 8032916: 2e00 cmp r6, #0
- 8032918: d0f8 beq.n 803290c <udp_bind+0x1c>
- 803291a: 42b7 cmp r7, r6
- 803291c: d101 bne.n 8032922 <udp_bind+0x32>
- 803291e: e7f5 b.n 803290c <udp_bind+0x1c>
- /* is this UDP PCB already on active list? */
- if (pcb == ipcb) {
- /* pcb may occur at most once in active list */
- LWIP_ASSERT("rebind == 0", rebind == 0);
- /* pcb already in list, just rebind */
- rebind = 1;
- 8032920: 2501 movs r5, #1
- ip_addr_debug_print(UDP_DEBUG, ipaddr);
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (", port = %"U16_F")\n", port));
- rebind = 0;
- /* Check for double bind and rebind of the same pcb */
- for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {
- 8032922: 68db ldr r3, [r3, #12]
- 8032924: 2b00 cmp r3, #0
- 8032926: d1ea bne.n 80328fe <udp_bind+0xe>
- return ERR_USE;
- }
- }
- }
- ip_addr_set(&pcb->local_ip, ipaddr);
- 8032928: b101 cbz r1, 803292c <udp_bind+0x3c>
- 803292a: 6809 ldr r1, [r1, #0]
- 803292c: 6021 str r1, [r4, #0]
- /* no port specified? */
- if (port == 0) {
- 803292e: b9fa cbnz r2, 8032970 <udp_bind+0x80>
- 8032930: 4b16 ldr r3, [pc, #88] ; (803298c <udp_bind+0x9c>)
- 8032932: 881a ldrh r2, [r3, #0]
- 8032934: f44f 4180 mov.w r1, #16384 ; 0x4000
- {
- u16_t n = 0;
- struct udp_pcb *pcb;
-
- again:
- if (udp_port++ == UDP_LOCAL_PORT_RANGE_END) {
- 8032938: f64f 76ff movw r6, #65535 ; 0xffff
- 803293c: 42b2 cmp r2, r6
- 803293e: d002 beq.n 8032946 <udp_bind+0x56>
- 8032940: 3201 adds r2, #1
- 8032942: b292 uxth r2, r2
- 8032944: e001 b.n 803294a <udp_bind+0x5a>
- udp_port = UDP_LOCAL_PORT_RANGE_START;
- 8032946: f44f 4240 mov.w r2, #49152 ; 0xc000
- }
- /* Check all PCBs. */
- for(pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {
- 803294a: 4603 mov r3, r0
- 803294c: e00a b.n 8032964 <udp_bind+0x74>
- if (pcb->local_port == udp_port) {
- 803294e: 8a5f ldrh r7, [r3, #18]
- 8032950: 4297 cmp r7, r2
- 8032952: d106 bne.n 8032962 <udp_bind+0x72>
- 8032954: 3901 subs r1, #1
- 8032956: b289 uxth r1, r1
- if (++n > (UDP_LOCAL_PORT_RANGE_END - UDP_LOCAL_PORT_RANGE_START)) {
- 8032958: 2900 cmp r1, #0
- 803295a: d1ef bne.n 803293c <udp_bind+0x4c>
- 803295c: 4b0b ldr r3, [pc, #44] ; (803298c <udp_bind+0x9c>)
- 803295e: 801a strh r2, [r3, #0]
- 8032960: e7d4 b.n 803290c <udp_bind+0x1c>
- again:
- if (udp_port++ == UDP_LOCAL_PORT_RANGE_END) {
- udp_port = UDP_LOCAL_PORT_RANGE_START;
- }
- /* Check all PCBs. */
- for(pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {
- 8032962: 68db ldr r3, [r3, #12]
- 8032964: 2b00 cmp r3, #0
- 8032966: d1f2 bne.n 803294e <udp_bind+0x5e>
- 8032968: 4b08 ldr r3, [pc, #32] ; (803298c <udp_bind+0x9c>)
- 803296a: 801a strh r2, [r3, #0]
- ip_addr_set(&pcb->local_ip, ipaddr);
- /* no port specified? */
- if (port == 0) {
- port = udp_new_port();
- if (port == 0) {
- 803296c: 2a00 cmp r2, #0
- 803296e: d0cd beq.n 803290c <udp_bind+0x1c>
- /* no more ports available in local range */
- LWIP_DEBUGF(UDP_DEBUG, ("udp_bind: out of free UDP ports\n"));
- return ERR_USE;
- }
- }
- pcb->local_port = port;
- 8032970: 8262 strh r2, [r4, #18]
- snmp_insert_udpidx_tree(pcb);
- 8032972: 4620 mov r0, r4
- 8032974: f002 f9b0 bl 8034cd8 <snmp_insert_udpidx_tree>
- /* pcb not active yet? */
- if (rebind == 0) {
- 8032978: b91d cbnz r5, 8032982 <udp_bind+0x92>
- /* place the PCB on the active list if not already there */
- pcb->next = udp_pcbs;
- 803297a: 4b03 ldr r3, [pc, #12] ; (8032988 <udp_bind+0x98>)
- 803297c: 681a ldr r2, [r3, #0]
- udp_pcbs = pcb;
- 803297e: 601c str r4, [r3, #0]
- pcb->local_port = port;
- snmp_insert_udpidx_tree(pcb);
- /* pcb not active yet? */
- if (rebind == 0) {
- /* place the PCB on the active list if not already there */
- pcb->next = udp_pcbs;
- 8032980: 60e2 str r2, [r4, #12]
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("udp_bind: bound to %"U16_F".%"U16_F".%"U16_F".%"U16_F", port %"U16_F"\n",
- ip4_addr1_16(&pcb->local_ip), ip4_addr2_16(&pcb->local_ip),
- ip4_addr3_16(&pcb->local_ip), ip4_addr4_16(&pcb->local_ip),
- pcb->local_port));
- return ERR_OK;
- 8032982: 2000 movs r0, #0
- }
- 8032984: b240 sxtb r0, r0
- 8032986: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 8032988: 2000f6d8 .word 0x2000f6d8
- 803298c: 2000071e .word 0x2000071e
- 08032990 <udp_sendto_if>:
- * @see udp_disconnect() udp_send()
- */
- err_t
- udp_sendto_if(struct udp_pcb *pcb, struct pbuf *p,
- ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif)
- {
- 8032990: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr}
- 8032994: 4692 mov sl, r2
- return ERR_VAL;
- }
- #endif /* IP_SOF_BROADCAST */
- /* if the PCB is not yet bound to a port, bind it here */
- if (pcb->local_port == 0) {
- 8032996: 8a42 ldrh r2, [r0, #18]
- * @see udp_disconnect() udp_send()
- */
- err_t
- udp_sendto_if(struct udp_pcb *pcb, struct pbuf *p,
- ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif)
- {
- 8032998: f8dd 8030 ldr.w r8, [sp, #48] ; 0x30
- 803299c: 4605 mov r5, r0
- 803299e: 460e mov r6, r1
- 80329a0: 4699 mov r9, r3
- return ERR_VAL;
- }
- #endif /* IP_SOF_BROADCAST */
- /* if the PCB is not yet bound to a port, bind it here */
- if (pcb->local_port == 0) {
- 80329a2: b132 cbz r2, 80329b2 <udp_sendto_if+0x22>
- return err;
- }
- }
- /* not enough space to add an UDP header to first pbuf in given p chain? */
- if (pbuf_header(p, UDP_HLEN)) {
- 80329a4: 4630 mov r0, r6
- 80329a6: 2108 movs r1, #8
- 80329a8: f7fd fa05 bl 802fdb6 <pbuf_header>
- 80329ac: b940 cbnz r0, 80329c0 <udp_sendto_if+0x30>
- 80329ae: 4634 mov r4, r6
- 80329b0: e013 b.n 80329da <udp_sendto_if+0x4a>
- #endif /* IP_SOF_BROADCAST */
- /* if the PCB is not yet bound to a port, bind it here */
- if (pcb->local_port == 0) {
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send: not yet bound to a port, binding now\n"));
- err = udp_bind(pcb, &pcb->local_ip, pcb->local_port);
- 80329b2: 4601 mov r1, r0
- 80329b4: f7ff ff9c bl 80328f0 <udp_bind>
- if (err != ERR_OK) {
- 80329b8: 4607 mov r7, r0
- 80329ba: 2800 cmp r0, #0
- 80329bc: d0f2 beq.n 80329a4 <udp_sendto_if+0x14>
- 80329be: e044 b.n 8032a4a <udp_sendto_if+0xba>
- }
- /* not enough space to add an UDP header to first pbuf in given p chain? */
- if (pbuf_header(p, UDP_HLEN)) {
- /* allocate header in a separate new pbuf */
- q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM);
- 80329c0: 2001 movs r0, #1
- 80329c2: 2108 movs r1, #8
- 80329c4: 2200 movs r2, #0
- 80329c6: f7fd fa6e bl 802fea6 <pbuf_alloc>
- /* new header pbuf could not be allocated? */
- if (q == NULL) {
- 80329ca: 4604 mov r4, r0
- 80329cc: 2800 cmp r0, #0
- 80329ce: d039 beq.n 8032a44 <udp_sendto_if+0xb4>
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: could not allocate header\n"));
- return ERR_MEM;
- }
- if (p->tot_len != 0) {
- 80329d0: 8933 ldrh r3, [r6, #8]
- 80329d2: b113 cbz r3, 80329da <udp_sendto_if+0x4a>
- /* chain header q in front of given pbuf p (only if p contains data) */
- pbuf_chain(q, p);
- 80329d4: 4631 mov r1, r6
- 80329d6: f7fd fb14 bl 8030002 <pbuf_chain>
- }
- LWIP_ASSERT("check that first pbuf can hold struct udp_hdr",
- (q->len >= sizeof(struct udp_hdr)));
- /* q now represents the packet to be sent */
- udphdr = (struct udp_hdr *)q->payload;
- udphdr->src = htons(pcb->local_port);
- 80329da: 8a68 ldrh r0, [r5, #18]
- LWIP_DEBUGF(UDP_DEBUG, ("udp_send: added header in given pbuf %p\n", (void *)p));
- }
- LWIP_ASSERT("check that first pbuf can hold struct udp_hdr",
- (q->len >= sizeof(struct udp_hdr)));
- /* q now represents the packet to be sent */
- udphdr = (struct udp_hdr *)q->payload;
- 80329dc: 6867 ldr r7, [r4, #4]
- udphdr->src = htons(pcb->local_port);
- 80329de: f7fc f8d7 bl 802eb90 <lwip_htons>
- 80329e2: 8038 strh r0, [r7, #0]
- udphdr->dest = htons(dst_port);
- 80329e4: 4648 mov r0, r9
- 80329e6: f7fc f8d3 bl 802eb90 <lwip_htons>
- /* in UDP, 0 checksum means 'no checksum' */
- udphdr->chksum = 0x0000;
- 80329ea: 2300 movs r3, #0
- LWIP_ASSERT("check that first pbuf can hold struct udp_hdr",
- (q->len >= sizeof(struct udp_hdr)));
- /* q now represents the packet to be sent */
- udphdr = (struct udp_hdr *)q->payload;
- udphdr->src = htons(pcb->local_port);
- udphdr->dest = htons(dst_port);
- 80329ec: 8078 strh r0, [r7, #2]
- /* in UDP, 0 checksum means 'no checksum' */
- udphdr->chksum = 0x0000;
- 80329ee: 71bb strb r3, [r7, #6]
- 80329f0: 71fb strb r3, [r7, #7]
- }
- #endif /* LWIP_IGMP */
- /* PCB local address is IP_ANY_ADDR? */
- if (ip_addr_isany(&pcb->local_ip)) {
- 80329f2: 682b ldr r3, [r5, #0]
- 80329f4: b913 cbnz r3, 80329fc <udp_sendto_if+0x6c>
- /* use outgoing network interface IP address as source address */
- src_ip = &(netif->ip_addr);
- 80329f6: f108 0904 add.w r9, r8, #4
- 80329fa: e00a b.n 8032a12 <udp_sendto_if+0x82>
- } else {
- /* check if UDP PCB local IP address is correct
- * this could be an old address if netif->ip_addr has changed */
- if (!ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr))) {
- 80329fc: f8d8 2004 ldr.w r2, [r8, #4]
- 8032a00: 4293 cmp r3, r2
- 8032a02: d005 beq.n 8032a10 <udp_sendto_if+0x80>
- /* local_ip doesn't match, drop the packet */
- if (q != p) {
- 8032a04: 42b4 cmp r4, r6
- 8032a06: d01f beq.n 8032a48 <udp_sendto_if+0xb8>
- /* free the header pbuf */
- pbuf_free(q);
- 8032a08: 4620 mov r0, r4
- 8032a0a: f7fd f9ff bl 802fe0c <pbuf_free>
- 8032a0e: e01b b.n 8032a48 <udp_sendto_if+0xb8>
- }
- #endif /* LWIP_IGMP */
- /* PCB local address is IP_ANY_ADDR? */
- if (ip_addr_isany(&pcb->local_ip)) {
- 8032a10: 46a9 mov r9, r5
- NETIF_SET_HWADDRHINT(netif, NULL);
- } else
- #endif /* LWIP_UDPLITE */
- { /* UDP */
- LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP packet length %"U16_F"\n", q->tot_len));
- udphdr->len = htons(q->tot_len);
- 8032a12: 8920 ldrh r0, [r4, #8]
- 8032a14: f7fc f8bc bl 802eb90 <lwip_htons>
- 8032a18: 80b8 strh r0, [r7, #4]
- #endif /* CHECKSUM_GEN_UDP */
- LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP checksum 0x%04"X16_F"\n", udphdr->chksum));
- LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDP,)\n"));
- /* output to IP */
- NETIF_SET_HWADDRHINT(netif, &pcb->addr_hint);
- err = ip_output_if(q, src_ip, dst_ip, pcb->ttl, pcb->tos, IP_PROTO_UDP, netif);
- 8032a1a: 7a6a ldrb r2, [r5, #9]
- 8032a1c: 7aab ldrb r3, [r5, #10]
- 8032a1e: 9200 str r2, [sp, #0]
- 8032a20: 2211 movs r2, #17
- 8032a22: 9201 str r2, [sp, #4]
- 8032a24: 4649 mov r1, r9
- 8032a26: 4652 mov r2, sl
- 8032a28: f8cd 8008 str.w r8, [sp, #8]
- 8032a2c: 4620 mov r0, r4
- 8032a2e: f000 fb9d bl 803316c <ip_output_if>
- 8032a32: 4607 mov r7, r0
- NETIF_SET_HWADDRHINT(netif, NULL);
- }
- /* TODO: must this be increased even if error occured? */
- snmp_inc_udpoutdatagrams();
- 8032a34: f002 f948 bl 8034cc8 <snmp_inc_udpoutdatagrams>
- /* did we chain a separate header pbuf earlier? */
- if (q != p) {
- 8032a38: 42b4 cmp r4, r6
- 8032a3a: d006 beq.n 8032a4a <udp_sendto_if+0xba>
- /* free the header pbuf */
- pbuf_free(q);
- 8032a3c: 4620 mov r0, r4
- 8032a3e: f7fd f9e5 bl 802fe0c <pbuf_free>
- 8032a42: e002 b.n 8032a4a <udp_sendto_if+0xba>
- /* allocate header in a separate new pbuf */
- q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM);
- /* new header pbuf could not be allocated? */
- if (q == NULL) {
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: could not allocate header\n"));
- return ERR_MEM;
- 8032a44: 27ff movs r7, #255 ; 0xff
- 8032a46: e000 b.n 8032a4a <udp_sendto_if+0xba>
- /* free the header pbuf */
- pbuf_free(q);
- q = NULL;
- /* p is still referenced by the caller, and will live on */
- }
- return ERR_VAL;
- 8032a48: 27fa movs r7, #250 ; 0xfa
- /* p is still referenced by the caller, and will live on */
- }
- UDP_STATS_INC(udp.xmit);
- return err;
- }
- 8032a4a: b278 sxtb r0, r7
- 8032a4c: b004 add sp, #16
- 8032a4e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 08032a52 <udp_sendto>:
- * @see udp_disconnect() udp_send()
- */
- err_t
- udp_sendto(struct udp_pcb *pcb, struct pbuf *p,
- ip_addr_t *dst_ip, u16_t dst_port)
- {
- 8032a52: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
- 8032a54: 4605 mov r5, r0
- /* find the outgoing network interface for this packet */
- #if LWIP_IGMP
- netif = ip_route((ip_addr_ismulticast(dst_ip))?(&(pcb->multicast_ip)):(dst_ip));
- #else
- netif = ip_route(dst_ip);
- 8032a56: 4610 mov r0, r2
- * @see udp_disconnect() udp_send()
- */
- err_t
- udp_sendto(struct udp_pcb *pcb, struct pbuf *p,
- ip_addr_t *dst_ip, u16_t dst_port)
- {
- 8032a58: 460f mov r7, r1
- 8032a5a: 4614 mov r4, r2
- 8032a5c: 461e mov r6, r3
- /* find the outgoing network interface for this packet */
- #if LWIP_IGMP
- netif = ip_route((ip_addr_ismulticast(dst_ip))?(&(pcb->multicast_ip)):(dst_ip));
- #else
- netif = ip_route(dst_ip);
- 8032a5e: f000 fa81 bl 8032f64 <ip_route>
- #endif /* LWIP_IGMP */
- /* no outgoing network interface could be found? */
- if (netif == NULL) {
- 8032a62: b138 cbz r0, 8032a74 <udp_sendto+0x22>
- return ERR_RTE;
- }
- #if LWIP_CHECKSUM_ON_COPY
- return udp_sendto_if_chksum(pcb, p, dst_ip, dst_port, netif, have_chksum, chksum);
- #else /* LWIP_CHECKSUM_ON_COPY */
- return udp_sendto_if(pcb, p, dst_ip, dst_port, netif);
- 8032a64: 9000 str r0, [sp, #0]
- 8032a66: 4639 mov r1, r7
- 8032a68: 4628 mov r0, r5
- 8032a6a: 4622 mov r2, r4
- 8032a6c: 4633 mov r3, r6
- 8032a6e: f7ff ff8f bl 8032990 <udp_sendto_if>
- 8032a72: e000 b.n 8032a76 <udp_sendto+0x24>
- /* no outgoing network interface could be found? */
- if (netif == NULL) {
- LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
- ip4_addr1_16(dst_ip), ip4_addr2_16(dst_ip), ip4_addr3_16(dst_ip), ip4_addr4_16(dst_ip)));
- UDP_STATS_INC(udp.rterr);
- return ERR_RTE;
- 8032a74: 20fc movs r0, #252 ; 0xfc
- #if LWIP_CHECKSUM_ON_COPY
- return udp_sendto_if_chksum(pcb, p, dst_ip, dst_port, netif, have_chksum, chksum);
- #else /* LWIP_CHECKSUM_ON_COPY */
- return udp_sendto_if(pcb, p, dst_ip, dst_port, netif);
- #endif /* LWIP_CHECKSUM_ON_COPY */
- }
- 8032a76: b240 sxtb r0, r0
- 8032a78: bdfe pop {r1, r2, r3, r4, r5, r6, r7, pc}
- 08032a7a <udp_send>:
- */
- err_t
- udp_send(struct udp_pcb *pcb, struct pbuf *p)
- {
- /* send to the packet using remote ip and port stored in the pcb */
- return udp_sendto(pcb, p, &pcb->remote_ip, pcb->remote_port);
- 8032a7a: 8a83 ldrh r3, [r0, #20]
- 8032a7c: 1d02 adds r2, r0, #4
- 8032a7e: f7ff bfe8 b.w 8032a52 <udp_sendto>
- 8032a82: 0000 movs r0, r0
- 08032a84 <udp_connect>:
- *
- * @see udp_disconnect()
- */
- err_t
- udp_connect(struct udp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)
- {
- 8032a84: b570 push {r4, r5, r6, lr}
- 8032a86: 4616 mov r6, r2
- struct udp_pcb *ipcb;
- if (pcb->local_port == 0) {
- 8032a88: 8a42 ldrh r2, [r0, #18]
- *
- * @see udp_disconnect()
- */
- err_t
- udp_connect(struct udp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)
- {
- 8032a8a: 4604 mov r4, r0
- 8032a8c: 460d mov r5, r1
- struct udp_pcb *ipcb;
- if (pcb->local_port == 0) {
- 8032a8e: b10a cbz r2, 8032a94 <udp_connect+0x10>
- if (err != ERR_OK) {
- return err;
- }
- }
- ip_addr_set(&pcb->remote_ip, ipaddr);
- 8032a90: b935 cbnz r5, 8032aa0 <udp_connect+0x1c>
- 8032a92: e006 b.n 8032aa2 <udp_connect+0x1e>
- udp_connect(struct udp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)
- {
- struct udp_pcb *ipcb;
- if (pcb->local_port == 0) {
- err_t err = udp_bind(pcb, &pcb->local_ip, pcb->local_port);
- 8032a94: 4601 mov r1, r0
- 8032a96: f7ff ff2b bl 80328f0 <udp_bind>
- if (err != ERR_OK) {
- 8032a9a: 2800 cmp r0, #0
- 8032a9c: d0f8 beq.n 8032a90 <udp_connect+0xc>
- 8032a9e: e013 b.n 8032ac8 <udp_connect+0x44>
- return err;
- }
- }
- ip_addr_set(&pcb->remote_ip, ipaddr);
- 8032aa0: 682d ldr r5, [r5, #0]
- pcb->remote_port = port;
- pcb->flags |= UDP_FLAGS_CONNECTED;
- 8032aa2: 7c23 ldrb r3, [r4, #16]
- ip4_addr1_16(&pcb->local_ip), ip4_addr2_16(&pcb->local_ip),
- ip4_addr3_16(&pcb->local_ip), ip4_addr4_16(&pcb->local_ip),
- pcb->local_port));
- /* Insert UDP PCB into the list of active UDP PCBs. */
- for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {
- 8032aa4: 4a09 ldr r2, [pc, #36] ; (8032acc <udp_connect+0x48>)
- if (err != ERR_OK) {
- return err;
- }
- }
- ip_addr_set(&pcb->remote_ip, ipaddr);
- 8032aa6: 6065 str r5, [r4, #4]
- pcb->remote_port = port;
- pcb->flags |= UDP_FLAGS_CONNECTED;
- 8032aa8: f043 0304 orr.w r3, r3, #4
- 8032aac: 7423 strb r3, [r4, #16]
- ip4_addr1_16(&pcb->local_ip), ip4_addr2_16(&pcb->local_ip),
- ip4_addr3_16(&pcb->local_ip), ip4_addr4_16(&pcb->local_ip),
- pcb->local_port));
- /* Insert UDP PCB into the list of active UDP PCBs. */
- for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {
- 8032aae: 6813 ldr r3, [r2, #0]
- return err;
- }
- }
- ip_addr_set(&pcb->remote_ip, ipaddr);
- pcb->remote_port = port;
- 8032ab0: 82a6 strh r6, [r4, #20]
- ip4_addr1_16(&pcb->local_ip), ip4_addr2_16(&pcb->local_ip),
- ip4_addr3_16(&pcb->local_ip), ip4_addr4_16(&pcb->local_ip),
- pcb->local_port));
- /* Insert UDP PCB into the list of active UDP PCBs. */
- for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {
- 8032ab2: 4618 mov r0, r3
- 8032ab4: e002 b.n 8032abc <udp_connect+0x38>
- if (pcb == ipcb) {
- 8032ab6: 4284 cmp r4, r0
- 8032ab8: d005 beq.n 8032ac6 <udp_connect+0x42>
- ip4_addr1_16(&pcb->local_ip), ip4_addr2_16(&pcb->local_ip),
- ip4_addr3_16(&pcb->local_ip), ip4_addr4_16(&pcb->local_ip),
- pcb->local_port));
- /* Insert UDP PCB into the list of active UDP PCBs. */
- for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {
- 8032aba: 68c0 ldr r0, [r0, #12]
- 8032abc: 2800 cmp r0, #0
- 8032abe: d1fa bne.n 8032ab6 <udp_connect+0x32>
- /* already on the list, just return */
- return ERR_OK;
- }
- }
- /* PCB not yet on the list, add PCB now */
- pcb->next = udp_pcbs;
- 8032ac0: 60e3 str r3, [r4, #12]
- udp_pcbs = pcb;
- 8032ac2: 6014 str r4, [r2, #0]
- return ERR_OK;
- 8032ac4: e000 b.n 8032ac8 <udp_connect+0x44>
- /* Insert UDP PCB into the list of active UDP PCBs. */
- for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {
- if (pcb == ipcb) {
- /* already on the list, just return */
- return ERR_OK;
- 8032ac6: 2000 movs r0, #0
- }
- /* PCB not yet on the list, add PCB now */
- pcb->next = udp_pcbs;
- udp_pcbs = pcb;
- return ERR_OK;
- }
- 8032ac8: b240 sxtb r0, r0
- 8032aca: bd70 pop {r4, r5, r6, pc}
- 8032acc: 2000f6d8 .word 0x2000f6d8
- 08032ad0 <udp_disconnect>:
- */
- void
- udp_disconnect(struct udp_pcb *pcb)
- {
- /* reset remote address association */
- ip_addr_set_any(&pcb->remote_ip);
- 8032ad0: 2300 movs r3, #0
- 8032ad2: 6043 str r3, [r0, #4]
- pcb->remote_port = 0;
- 8032ad4: 8283 strh r3, [r0, #20]
- /* mark PCB as unconnected */
- pcb->flags &= ~UDP_FLAGS_CONNECTED;
- 8032ad6: 7c03 ldrb r3, [r0, #16]
- 8032ad8: f023 0304 bic.w r3, r3, #4
- 8032adc: 7403 strb r3, [r0, #16]
- 8032ade: 4770 bx lr
- 08032ae0 <udp_recv>:
- */
- void
- udp_recv(struct udp_pcb *pcb, udp_recv_fn recv, void *recv_arg)
- {
- /* remember recv() callback and user data */
- pcb->recv = recv;
- 8032ae0: 6181 str r1, [r0, #24]
- pcb->recv_arg = recv_arg;
- 8032ae2: 61c2 str r2, [r0, #28]
- 8032ae4: 4770 bx lr
- 8032ae6: 0000 movs r0, r0
- 08032ae8 <udp_remove>:
- *
- * @see udp_new()
- */
- void
- udp_remove(struct udp_pcb *pcb)
- {
- 8032ae8: b510 push {r4, lr}
- 8032aea: 4604 mov r4, r0
- struct udp_pcb *pcb2;
- snmp_delete_udpidx_tree(pcb);
- 8032aec: f002 f938 bl 8034d60 <snmp_delete_udpidx_tree>
- /* pcb to be removed is first in list? */
- if (udp_pcbs == pcb) {
- 8032af0: 4a0a ldr r2, [pc, #40] ; (8032b1c <udp_remove+0x34>)
- 8032af2: 6813 ldr r3, [r2, #0]
- 8032af4: 42a3 cmp r3, r4
- 8032af6: d109 bne.n 8032b0c <udp_remove+0x24>
- /* make list start at 2nd pcb */
- udp_pcbs = udp_pcbs->next;
- 8032af8: 68e3 ldr r3, [r4, #12]
- 8032afa: 6013 str r3, [r2, #0]
- 8032afc: e008 b.n 8032b10 <udp_remove+0x28>
- /* pcb not 1st in list */
- } else {
- for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) {
- /* find pcb in udp_pcbs list */
- if (pcb2->next != NULL && pcb2->next == pcb) {
- 8032afe: 68da ldr r2, [r3, #12]
- 8032b00: b11a cbz r2, 8032b0a <udp_remove+0x22>
- 8032b02: 42a2 cmp r2, r4
- /* remove pcb from list */
- pcb2->next = pcb->next;
- 8032b04: bf04 itt eq
- 8032b06: 68e2 ldreq r2, [r4, #12]
- 8032b08: 60da streq r2, [r3, #12]
- if (udp_pcbs == pcb) {
- /* make list start at 2nd pcb */
- udp_pcbs = udp_pcbs->next;
- /* pcb not 1st in list */
- } else {
- for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) {
- 8032b0a: 68db ldr r3, [r3, #12]
- 8032b0c: 2b00 cmp r3, #0
- 8032b0e: d1f6 bne.n 8032afe <udp_remove+0x16>
- /* remove pcb from list */
- pcb2->next = pcb->next;
- }
- }
- }
- memp_free(MEMP_UDP_PCB, pcb);
- 8032b10: 2001 movs r0, #1
- 8032b12: 4621 mov r1, r4
- }
- 8032b14: e8bd 4010 ldmia.w sp!, {r4, lr}
- /* remove pcb from list */
- pcb2->next = pcb->next;
- }
- }
- }
- memp_free(MEMP_UDP_PCB, pcb);
- 8032b18: f7fd b86e b.w 802fbf8 <memp_free>
- 8032b1c: 2000f6d8 .word 0x2000f6d8
- 08032b20 <udp_new>:
- *
- * @see udp_remove()
- */
- struct udp_pcb *
- udp_new(void)
- {
- 8032b20: b510 push {r4, lr}
- struct udp_pcb *pcb;
- pcb = (struct udp_pcb *)memp_malloc(MEMP_UDP_PCB);
- 8032b22: 2001 movs r0, #1
- 8032b24: f7fd f852 bl 802fbcc <memp_malloc>
- /* could allocate UDP PCB? */
- if (pcb != NULL) {
- 8032b28: 4604 mov r4, r0
- 8032b2a: b128 cbz r0, 8032b38 <udp_new+0x18>
- /* UDP Lite: by initializing to all zeroes, chksum_len is set to 0
- * which means checksum is generated over the whole datagram per default
- * (recommended as default by RFC 3828). */
- /* initialize PCB to all zeroes */
- memset(pcb, 0, sizeof(struct udp_pcb));
- 8032b2c: 2100 movs r1, #0
- 8032b2e: 2220 movs r2, #32
- 8032b30: f7ee ffe6 bl 8021b00 <memset>
- pcb->ttl = UDP_TTL;
- 8032b34: 23ff movs r3, #255 ; 0xff
- 8032b36: 72a3 strb r3, [r4, #10]
- }
- return pcb;
- }
- 8032b38: 4620 mov r0, r4
- 8032b3a: bd10 pop {r4, pc}
- 08032b3c <icmp_input>:
- * @param p the icmp echo request packet, p->payload pointing to the ip header
- * @param inp the netif on which this packet was received
- */
- void
- icmp_input(struct pbuf *p, struct netif *inp)
- {
- 8032b3c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- 8032b40: 4604 mov r4, r0
- 8032b42: b085 sub sp, #20
- 8032b44: 460f mov r7, r1
- struct icmp_echo_hdr *iecho;
- struct ip_hdr *iphdr;
- s16_t hlen;
- ICMP_STATS_INC(icmp.recv);
- snmp_inc_icmpinmsgs();
- 8032b46: f002 f837 bl 8034bb8 <snmp_inc_icmpinmsgs>
- iphdr = (struct ip_hdr *)p->payload;
- 8032b4a: 6865 ldr r5, [r4, #4]
- hlen = IPH_HL(iphdr) * 4;
- 8032b4c: f895 8000 ldrb.w r8, [r5]
- 8032b50: f008 080f and.w r8, r8, #15
- 8032b54: ea4f 0888 mov.w r8, r8, lsl #2
- if (pbuf_header(p, -hlen) || (p->tot_len < sizeof(u16_t)*2)) {
- 8032b58: f1c8 0900 rsb r9, r8, #0
- 8032b5c: 4620 mov r0, r4
- 8032b5e: fa0f f189 sxth.w r1, r9
- 8032b62: f7fd f928 bl 802fdb6 <pbuf_header>
- 8032b66: 2800 cmp r0, #0
- 8032b68: d172 bne.n 8032c50 <icmp_input+0x114>
- 8032b6a: 8923 ldrh r3, [r4, #8]
- 8032b6c: 2b03 cmp r3, #3
- 8032b6e: d96f bls.n 8032c50 <icmp_input+0x114>
- LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: short ICMP (%"U16_F" bytes) received\n", p->tot_len));
- goto lenerr;
- }
- type = *((u8_t *)p->payload);
- 8032b70: 6863 ldr r3, [r4, #4]
- #ifdef LWIP_DEBUG
- code = *(((u8_t *)p->payload)+1);
- #endif /* LWIP_DEBUG */
- switch (type) {
- 8032b72: 781b ldrb r3, [r3, #0]
- 8032b74: 2b08 cmp r3, #8
- 8032b76: d165 bne.n 8032c44 <icmp_input+0x108>
- #if !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING
- {
- int accepted = 1;
- #if !LWIP_MULTICAST_PING
- /* multicast destination address? */
- if (ip_addr_ismulticast(¤t_iphdr_dest)) {
- 8032b78: 4b39 ldr r3, [pc, #228] ; (8032c60 <icmp_input+0x124>)
- 8032b7a: 681e ldr r6, [r3, #0]
- accepted = 0;
- }
- #endif /* LWIP_MULTICAST_PING */
- #if !LWIP_BROADCAST_PING
- /* broadcast destination address? */
- if (ip_addr_isbroadcast(¤t_iphdr_dest, inp)) {
- 8032b7c: 4639 mov r1, r7
- 8032b7e: 4630 mov r0, r6
- 8032b80: f000 f900 bl 8032d84 <ip4_addr_isbroadcast>
- 8032b84: 2800 cmp r0, #0
- 8032b86: d15d bne.n 8032c44 <icmp_input+0x108>
- #if !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING
- {
- int accepted = 1;
- #if !LWIP_MULTICAST_PING
- /* multicast destination address? */
- if (ip_addr_ismulticast(¤t_iphdr_dest)) {
- 8032b88: f006 06f0 and.w r6, r6, #240 ; 0xf0
- if (ip_addr_isbroadcast(¤t_iphdr_dest, inp)) {
- accepted = 0;
- }
- #endif /* LWIP_BROADCAST_PING */
- /* broadcast or multicast destination address not acceptd? */
- if (!accepted) {
- 8032b8c: 2ee0 cmp r6, #224 ; 0xe0
- 8032b8e: d100 bne.n 8032b92 <icmp_input+0x56>
- 8032b90: e058 b.n 8032c44 <icmp_input+0x108>
- return;
- }
- }
- #endif /* !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING */
- LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ping\n"));
- if (p->tot_len < sizeof(struct icmp_echo_hdr)) {
- 8032b92: 8923 ldrh r3, [r4, #8]
- 8032b94: 2b07 cmp r3, #7
- 8032b96: d95b bls.n 8032c50 <icmp_input+0x114>
- LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: bad ICMP echo received\n"));
- goto lenerr;
- }
- if (inet_chksum_pbuf(p) != 0) {
- 8032b98: 4620 mov r0, r4
- 8032b9a: f000 f8cf bl 8032d3c <inet_chksum_pbuf>
- 8032b9e: b100 cbz r0, 8032ba2 <icmp_input+0x66>
- 8032ba0: e056 b.n 8032c50 <icmp_input+0x114>
- ICMP_STATS_INC(icmp.chkerr);
- snmp_inc_icmpinerrors();
- return;
- }
- #if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN
- if (pbuf_header(p, (PBUF_IP_HLEN + PBUF_LINK_HLEN))) {
- 8032ba2: 4620 mov r0, r4
- 8032ba4: 2122 movs r1, #34 ; 0x22
- ICMP_STATS_INC(icmp.recv);
- snmp_inc_icmpinmsgs();
- iphdr = (struct ip_hdr *)p->payload;
- hlen = IPH_HL(iphdr) * 4;
- 8032ba6: fa1f f888 uxth.w r8, r8
- ICMP_STATS_INC(icmp.chkerr);
- snmp_inc_icmpinerrors();
- return;
- }
- #if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN
- if (pbuf_header(p, (PBUF_IP_HLEN + PBUF_LINK_HLEN))) {
- 8032baa: f7fd f904 bl 802fdb6 <pbuf_header>
- 8032bae: b1f8 cbz r0, 8032bf0 <icmp_input+0xb4>
- /* p is not big enough to contain link headers
- * allocate a new one and copy p into it
- */
- struct pbuf *r;
- /* switch p->payload to ip header */
- if (pbuf_header(p, hlen)) {
- 8032bb0: 4620 mov r0, r4
- 8032bb2: 4641 mov r1, r8
- 8032bb4: f7fd f8ff bl 802fdb6 <pbuf_header>
- 8032bb8: 4602 mov r2, r0
- 8032bba: 2800 cmp r0, #0
- 8032bbc: d148 bne.n 8032c50 <icmp_input+0x114>
- LWIP_ASSERT("icmp_input: moving p->payload to ip header failed\n", 0);
- goto memerr;
- }
- /* allocate new packet buffer with space for link headers */
- r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM);
- 8032bbe: 2002 movs r0, #2
- 8032bc0: 8921 ldrh r1, [r4, #8]
- 8032bc2: f7fd f970 bl 802fea6 <pbuf_alloc>
- if (r == NULL) {
- 8032bc6: 4606 mov r6, r0
- 8032bc8: 2800 cmp r0, #0
- 8032bca: d041 beq.n 8032c50 <icmp_input+0x114>
- goto memerr;
- }
- LWIP_ASSERT("check that first pbuf can hold struct the ICMP header",
- (r->len >= hlen + sizeof(struct icmp_echo_hdr)));
- /* copy the whole packet including ip header */
- if (pbuf_copy(r, p) != ERR_OK) {
- 8032bcc: 4621 mov r1, r4
- 8032bce: f7fd fa21 bl 8030014 <pbuf_copy>
- 8032bd2: 2800 cmp r0, #0
- 8032bd4: d13c bne.n 8032c50 <icmp_input+0x114>
- LWIP_ASSERT("icmp_input: copying to new pbuf failed\n", 0);
- goto memerr;
- }
- iphdr = (struct ip_hdr *)r->payload;
- /* switch r->payload back to icmp header */
- if (pbuf_header(r, -hlen)) {
- 8032bd6: 4630 mov r0, r6
- 8032bd8: fa0f f189 sxth.w r1, r9
- /* copy the whole packet including ip header */
- if (pbuf_copy(r, p) != ERR_OK) {
- LWIP_ASSERT("icmp_input: copying to new pbuf failed\n", 0);
- goto memerr;
- }
- iphdr = (struct ip_hdr *)r->payload;
- 8032bdc: 6875 ldr r5, [r6, #4]
- /* switch r->payload back to icmp header */
- if (pbuf_header(r, -hlen)) {
- 8032bde: f7fd f8ea bl 802fdb6 <pbuf_header>
- 8032be2: 2800 cmp r0, #0
- 8032be4: d134 bne.n 8032c50 <icmp_input+0x114>
- LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0);
- goto memerr;
- }
- /* free the original p */
- pbuf_free(p);
- 8032be6: 4620 mov r0, r4
- 8032be8: f7fd f910 bl 802fe0c <pbuf_free>
- 8032bec: 4634 mov r4, r6
- 8032bee: e006 b.n 8032bfe <icmp_input+0xc2>
- /* we now have an identical copy of p that has room for link headers */
- p = r;
- } else {
- /* restore p->payload to point to icmp header */
- if (pbuf_header(p, -(s16_t)(PBUF_IP_HLEN + PBUF_LINK_HLEN))) {
- 8032bf0: 4620 mov r0, r4
- 8032bf2: f06f 0121 mvn.w r1, #33 ; 0x21
- 8032bf6: f7fd f8de bl 802fdb6 <pbuf_header>
- 8032bfa: 2800 cmp r0, #0
- 8032bfc: d128 bne.n 8032c50 <icmp_input+0x114>
- #endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */
- /* At this point, all checks are OK. */
- /* We generate an answer by switching the dest and src ip addresses,
- * setting the icmp type to ECHO_RESPONSE and updating the checksum. */
- iecho = (struct icmp_echo_hdr *)p->payload;
- ip_addr_copy(iphdr->src, *ip_current_dest_addr());
- 8032bfe: f8df 9060 ldr.w r9, [pc, #96] ; 8032c60 <icmp_input+0x124>
- }
- #endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */
- /* At this point, all checks are OK. */
- /* We generate an answer by switching the dest and src ip addresses,
- * setting the icmp type to ECHO_RESPONSE and updating the checksum. */
- iecho = (struct icmp_echo_hdr *)p->payload;
- 8032c02: 6863 ldr r3, [r4, #4]
- ip_addr_copy(iphdr->src, *ip_current_dest_addr());
- 8032c04: f8d9 2000 ldr.w r2, [r9]
- 8032c08: 60ea str r2, [r5, #12]
- ip_addr_copy(iphdr->dest, *ip_current_src_addr());
- 8032c0a: 4a16 ldr r2, [pc, #88] ; (8032c64 <icmp_input+0x128>)
- 8032c0c: 6812 ldr r2, [r2, #0]
- #else // CHECKSUM_GEN_ICMP
- iecho->chksum = 0;
- #endif // CHECKSUM_GEN_ICMP
- */
- /* Set the correct TTL and recalculate the header checksum. */
- IPH_TTL_SET(iphdr, ICMP_TTL);
- 8032c0e: 26ff movs r6, #255 ; 0xff
- /* At this point, all checks are OK. */
- /* We generate an answer by switching the dest and src ip addresses,
- * setting the icmp type to ECHO_RESPONSE and updating the checksum. */
- iecho = (struct icmp_echo_hdr *)p->payload;
- ip_addr_copy(iphdr->src, *ip_current_dest_addr());
- ip_addr_copy(iphdr->dest, *ip_current_src_addr());
- 8032c10: 612a str r2, [r5, #16]
- ICMPH_TYPE_SET(iecho, ICMP_ER);
- 8032c12: 2200 movs r2, #0
- 8032c14: 701a strb r2, [r3, #0]
- //-----------------------------------------------------------
- // Добавил фикс 15.08.15.
- // Фикс исправляет баг с пингом.
- #ifdef CHECKSUM_BY_HARDWARE
- iecho->chksum = 0;
- 8032c16: 709a strb r2, [r3, #2]
- 8032c18: 70da strb r2, [r3, #3]
- iecho->chksum = 0;
- #endif // CHECKSUM_GEN_ICMP
- */
- /* Set the correct TTL and recalculate the header checksum. */
- IPH_TTL_SET(iphdr, ICMP_TTL);
- IPH_CHKSUM_SET(iphdr, 0);
- 8032c1a: 72aa strb r2, [r5, #10]
- 8032c1c: 72ea strb r2, [r5, #11]
- #else // CHECKSUM_GEN_ICMP
- iecho->chksum = 0;
- #endif // CHECKSUM_GEN_ICMP
- */
- /* Set the correct TTL and recalculate the header checksum. */
- IPH_TTL_SET(iphdr, ICMP_TTL);
- 8032c1e: 722e strb r6, [r5, #8]
- IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN));
- #endif /* CHECKSUM_GEN_IP */
- ICMP_STATS_INC(icmp.xmit);
- /* increase number of messages attempted to send */
- snmp_inc_icmpoutmsgs();
- 8032c20: f001 ffda bl 8034bd8 <snmp_inc_icmpoutmsgs>
- /* increase number of echo replies attempted to send */
- snmp_inc_icmpoutechoreps();
- 8032c24: f001 ffe8 bl 8034bf8 <snmp_inc_icmpoutechoreps>
- if(pbuf_header(p, hlen)) {
- 8032c28: 4620 mov r0, r4
- 8032c2a: 4641 mov r1, r8
- 8032c2c: f7fd f8c3 bl 802fdb6 <pbuf_header>
- 8032c30: 4602 mov r2, r0
- 8032c32: b938 cbnz r0, 8032c44 <icmp_input+0x108>
- LWIP_ASSERT("Can't move over header in packet", 0);
- } else {
- err_t ret;
- /* send an ICMP packet, src addr is the dest addr of the curren packet */
- ret = ip_output_if(p, ip_current_dest_addr(), IP_HDRINCL,
- 8032c34: 2301 movs r3, #1
- 8032c36: e88d 0089 stmia.w sp, {r0, r3, r7}
- 8032c3a: 4620 mov r0, r4
- 8032c3c: 4649 mov r1, r9
- 8032c3e: 4633 mov r3, r6
- 8032c40: f000 fa94 bl 803316c <ip_output_if>
- LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ICMP type %"S16_F" code %"S16_F" not supported.\n",
- (s16_t)type, (s16_t)code));
- ICMP_STATS_INC(icmp.proterr);
- ICMP_STATS_INC(icmp.drop);
- }
- pbuf_free(p);
- 8032c44: 4620 mov r0, r4
- pbuf_free(p);
- ICMP_STATS_INC(icmp.err);
- snmp_inc_icmpinerrors();
- return;
- #endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */
- }
- 8032c46: b005 add sp, #20
- 8032c48: e8bd 43f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, lr}
- LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ICMP type %"S16_F" code %"S16_F" not supported.\n",
- (s16_t)type, (s16_t)code));
- ICMP_STATS_INC(icmp.proterr);
- ICMP_STATS_INC(icmp.drop);
- }
- pbuf_free(p);
- 8032c4c: f7fd b8de b.w 802fe0c <pbuf_free>
- ICMP_STATS_INC(icmp.lenerr);
- snmp_inc_icmpinerrors();
- return;
- #if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN
- memerr:
- pbuf_free(p);
- 8032c50: 4620 mov r0, r4
- 8032c52: f7fd f8db bl 802fe0c <pbuf_free>
- ICMP_STATS_INC(icmp.err);
- snmp_inc_icmpinerrors();
- return;
- #endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */
- }
- 8032c56: b005 add sp, #20
- 8032c58: e8bd 43f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, lr}
- return;
- #if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN
- memerr:
- pbuf_free(p);
- ICMP_STATS_INC(icmp.err);
- snmp_inc_icmpinerrors();
- 8032c5c: f001 bfb4 b.w 8034bc8 <snmp_inc_icmpinerrors>
- 8032c60: 2000f6e4 .word 0x2000f6e4
- 8032c64: 2000f6dc .word 0x2000f6dc
- 08032c68 <icmp_dest_unreach>:
- * p->payload pointing to the IP header
- * @param t type of the 'unreachable' packet
- */
- void
- icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t)
- {
- 8032c68: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr}
- 8032c6c: 4607 mov r7, r0
- 8032c6e: 460d mov r5, r1
- /* we can use the echo header here */
- struct icmp_echo_hdr *icmphdr;
- ip_addr_t iphdr_src;
- /* ICMP header + IP header + 8 bytes of data */
- q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE,
- 8032c70: 2001 movs r0, #1
- 8032c72: 2124 movs r1, #36 ; 0x24
- 8032c74: 2200 movs r2, #0
- 8032c76: f7fd f916 bl 802fea6 <pbuf_alloc>
- PBUF_RAM);
- if (q == NULL) {
- 8032c7a: 4606 mov r6, r0
- 8032c7c: b358 cbz r0, 8032cd6 <icmp_dest_unreach+0x6e>
- ip_addr_debug_print(ICMP_DEBUG, &(iphdr->src));
- LWIP_DEBUGF(ICMP_DEBUG, (" to "));
- ip_addr_debug_print(ICMP_DEBUG, &(iphdr->dest));
- LWIP_DEBUGF(ICMP_DEBUG, ("\n"));
- icmphdr = (struct icmp_echo_hdr *)q->payload;
- 8032c7e: 6844 ldr r4, [r0, #4]
- return;
- }
- LWIP_ASSERT("check that first pbuf can hold icmp message",
- (q->len >= (sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE)));
- iphdr = (struct ip_hdr *)p->payload;
- 8032c80: f8d7 8004 ldr.w r8, [r7, #4]
- ip_addr_debug_print(ICMP_DEBUG, &(iphdr->dest));
- LWIP_DEBUGF(ICMP_DEBUG, ("\n"));
- icmphdr = (struct icmp_echo_hdr *)q->payload;
- icmphdr->type = type;
- icmphdr->code = code;
- 8032c84: 7065 strb r5, [r4, #1]
- LWIP_DEBUGF(ICMP_DEBUG, (" to "));
- ip_addr_debug_print(ICMP_DEBUG, &(iphdr->dest));
- LWIP_DEBUGF(ICMP_DEBUG, ("\n"));
- icmphdr = (struct icmp_echo_hdr *)q->payload;
- icmphdr->type = type;
- 8032c86: 2303 movs r3, #3
- icmphdr->code = code;
- icmphdr->id = 0;
- 8032c88: 2500 movs r5, #0
- LWIP_DEBUGF(ICMP_DEBUG, (" to "));
- ip_addr_debug_print(ICMP_DEBUG, &(iphdr->dest));
- LWIP_DEBUGF(ICMP_DEBUG, ("\n"));
- icmphdr = (struct icmp_echo_hdr *)q->payload;
- icmphdr->type = type;
- 8032c8a: 7023 strb r3, [r4, #0]
- icmphdr->code = code;
- icmphdr->id = 0;
- 8032c8c: 7125 strb r5, [r4, #4]
- 8032c8e: 7165 strb r5, [r4, #5]
- icmphdr->seqno = 0;
- 8032c90: 71a5 strb r5, [r4, #6]
- 8032c92: 71e5 strb r5, [r4, #7]
- /* copy fields from original packet */
- SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload,
- 8032c94: 6840 ldr r0, [r0, #4]
- 8032c96: 6879 ldr r1, [r7, #4]
- 8032c98: 221c movs r2, #28
- 8032c9a: 3008 adds r0, #8
- 8032c9c: f7ee fe76 bl 802198c <memcpy>
- IP_HLEN + ICMP_DEST_UNREACH_DATASIZE);
- /* calculate checksum */
- icmphdr->chksum = 0;
- 8032ca0: 70a5 strb r5, [r4, #2]
- 8032ca2: 70e5 strb r5, [r4, #3]
- icmphdr->chksum = inet_chksum(icmphdr, q->len);
- 8032ca4: 8971 ldrh r1, [r6, #10]
- 8032ca6: 4620 mov r0, r4
- 8032ca8: f000 f842 bl 8032d30 <inet_chksum>
- 8032cac: 8060 strh r0, [r4, #2]
- ICMP_STATS_INC(icmp.xmit);
- /* increase number of messages attempted to send */
- snmp_inc_icmpoutmsgs();
- 8032cae: f001 ff93 bl 8034bd8 <snmp_inc_icmpoutmsgs>
- /* increase number of destination unreachable messages attempted to send */
- snmp_inc_icmpouttimeexcds();
- 8032cb2: f001 ff99 bl 8034be8 <snmp_inc_icmpouttimeexcds>
- ip_addr_copy(iphdr_src, iphdr->src);
- 8032cb6: f8d8 300c ldr.w r3, [r8, #12]
- 8032cba: aa04 add r2, sp, #16
- ip_output(q, NULL, &iphdr_src, ICMP_TTL, 0, IP_PROTO_ICMP);
- 8032cbc: 4630 mov r0, r6
- ICMP_STATS_INC(icmp.xmit);
- /* increase number of messages attempted to send */
- snmp_inc_icmpoutmsgs();
- /* increase number of destination unreachable messages attempted to send */
- snmp_inc_icmpouttimeexcds();
- ip_addr_copy(iphdr_src, iphdr->src);
- 8032cbe: f842 3d04 str.w r3, [r2, #-4]!
- ip_output(q, NULL, &iphdr_src, ICMP_TTL, 0, IP_PROTO_ICMP);
- 8032cc2: 2301 movs r3, #1
- 8032cc4: 9301 str r3, [sp, #4]
- 8032cc6: 9500 str r5, [sp, #0]
- 8032cc8: 4629 mov r1, r5
- 8032cca: 23ff movs r3, #255 ; 0xff
- 8032ccc: f000 fa9e bl 803320c <ip_output>
- pbuf_free(q);
- 8032cd0: 4630 mov r0, r6
- 8032cd2: f7fd f89b bl 802fe0c <pbuf_free>
- */
- void
- icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t)
- {
- icmp_send_response(p, ICMP_DUR, t);
- }
- 8032cd6: e8bd 81ff ldmia.w sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, pc}
- 08032cda <lwip_standard_chksum>:
- * @return host order (!) lwip checksum (non-inverted Internet sum)
- */
- static u16_t
- lwip_standard_chksum(void *dataptr, int len)
- {
- 8032cda: b513 push {r0, r1, r4, lr}
- u8_t *pb = (u8_t *)dataptr;
- u16_t *ps, t = 0;
- 8032cdc: 2300 movs r3, #0
- u32_t sum = 0;
- int odd = ((mem_ptr_t)pb & 1);
- /* Get aligned to u16_t */
- if (odd && len > 0) {
- 8032cde: f010 0201 ands.w r2, r0, #1
- static u16_t
- lwip_standard_chksum(void *dataptr, int len)
- {
- u8_t *pb = (u8_t *)dataptr;
- u16_t *ps, t = 0;
- 8032ce2: f8ad 3006 strh.w r3, [sp, #6]
- u32_t sum = 0;
- int odd = ((mem_ptr_t)pb & 1);
- /* Get aligned to u16_t */
- if (odd && len > 0) {
- 8032ce6: d006 beq.n 8032cf6 <lwip_standard_chksum+0x1c>
- 8032ce8: 4299 cmp r1, r3
- 8032cea: dd04 ble.n 8032cf6 <lwip_standard_chksum+0x1c>
- ((u8_t *)&t)[1] = *pb++;
- 8032cec: f810 3b01 ldrb.w r3, [r0], #1
- len--;
- 8032cf0: 3901 subs r1, #1
- u32_t sum = 0;
- int odd = ((mem_ptr_t)pb & 1);
- /* Get aligned to u16_t */
- if (odd && len > 0) {
- ((u8_t *)&t)[1] = *pb++;
- 8032cf2: f88d 3007 strb.w r3, [sp, #7]
- static u16_t
- lwip_standard_chksum(void *dataptr, int len)
- {
- u8_t *pb = (u8_t *)dataptr;
- u16_t *ps, t = 0;
- u32_t sum = 0;
- 8032cf6: 2300 movs r3, #0
- len--;
- }
- /* Add the bulk of the data */
- ps = (u16_t *)(void *)pb;
- while (len > 1) {
- 8032cf8: e003 b.n 8032d02 <lwip_standard_chksum+0x28>
- sum += *ps++;
- 8032cfa: f830 4b02 ldrh.w r4, [r0], #2
- len -= 2;
- 8032cfe: 3902 subs r1, #2
- }
- /* Add the bulk of the data */
- ps = (u16_t *)(void *)pb;
- while (len > 1) {
- sum += *ps++;
- 8032d00: 191b adds r3, r3, r4
- len--;
- }
- /* Add the bulk of the data */
- ps = (u16_t *)(void *)pb;
- while (len > 1) {
- 8032d02: 2901 cmp r1, #1
- 8032d04: dcf9 bgt.n 8032cfa <lwip_standard_chksum+0x20>
- len -= 2;
- }
- /* Consume left-over byte, if any */
- if (len > 0) {
- ((u8_t *)&t)[0] = *(u8_t *)ps;
- 8032d06: bf04 itt eq
- 8032d08: 7801 ldrbeq r1, [r0, #0]
- 8032d0a: f88d 1006 strbeq.w r1, [sp, #6]
- }
- /* Add end bytes */
- sum += t;
- 8032d0e: f8bd 0006 ldrh.w r0, [sp, #6]
- 8032d12: 181b adds r3, r3, r0
- /* Fold 32-bit sum to 16 bits
- calling this twice is propably faster than if statements... */
- sum = FOLD_U32T(sum);
- 8032d14: b298 uxth r0, r3
- 8032d16: eb00 4313 add.w r3, r0, r3, lsr #16
- sum = FOLD_U32T(sum);
- 8032d1a: b298 uxth r0, r3
- 8032d1c: eb00 4013 add.w r0, r0, r3, lsr #16
- /* Swap if alignment was odd */
- if (odd) {
- 8032d20: b122 cbz r2, 8032d2c <lwip_standard_chksum+0x52>
- sum = SWAP_BYTES_IN_WORD(sum);
- 8032d22: 0603 lsls r3, r0, #24
- 8032d24: f3c0 2007 ubfx r0, r0, #8, #8
- 8032d28: ea40 4013 orr.w r0, r0, r3, lsr #16
- }
- return (u16_t)sum;
- }
- 8032d2c: b280 uxth r0, r0
- 8032d2e: bd1c pop {r2, r3, r4, pc}
- 08032d30 <inet_chksum>:
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
- u16_t
- inet_chksum(void *dataptr, u16_t len)
- {
- 8032d30: b508 push {r3, lr}
- return ~LWIP_CHKSUM(dataptr, len);
- 8032d32: f7ff ffd2 bl 8032cda <lwip_standard_chksum>
- 8032d36: 43c0 mvns r0, r0
- }
- 8032d38: b280 uxth r0, r0
- 8032d3a: bd08 pop {r3, pc}
- 08032d3c <inet_chksum_pbuf>:
- * @param p pbuf chain over that the checksum should be calculated
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
- u16_t
- inet_chksum_pbuf(struct pbuf *p)
- {
- 8032d3c: b570 push {r4, r5, r6, lr}
- u32_t acc;
- struct pbuf *q;
- u8_t swapped;
- acc = 0;
- swapped = 0;
- 8032d3e: 2600 movs r6, #0
- * @param p pbuf chain over that the checksum should be calculated
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
- u16_t
- inet_chksum_pbuf(struct pbuf *p)
- {
- 8032d40: 4605 mov r5, r0
- u32_t acc;
- struct pbuf *q;
- u8_t swapped;
- acc = 0;
- 8032d42: 4634 mov r4, r6
- swapped = 0;
- for(q = p; q != NULL; q = q->next) {
- 8032d44: e013 b.n 8032d6e <inet_chksum_pbuf+0x32>
- acc += LWIP_CHKSUM(q->payload, q->len);
- 8032d46: 8969 ldrh r1, [r5, #10]
- 8032d48: 6868 ldr r0, [r5, #4]
- 8032d4a: f7ff ffc6 bl 8032cda <lwip_standard_chksum>
- acc = FOLD_U32T(acc);
- if (q->len % 2 != 0) {
- 8032d4e: 896b ldrh r3, [r5, #10]
- u8_t swapped;
- acc = 0;
- swapped = 0;
- for(q = p; q != NULL; q = q->next) {
- acc += LWIP_CHKSUM(q->payload, q->len);
- 8032d50: 1900 adds r0, r0, r4
- acc = FOLD_U32T(acc);
- 8032d52: b284 uxth r4, r0
- if (q->len % 2 != 0) {
- 8032d54: 07d9 lsls r1, r3, #31
- acc = 0;
- swapped = 0;
- for(q = p; q != NULL; q = q->next) {
- acc += LWIP_CHKSUM(q->payload, q->len);
- acc = FOLD_U32T(acc);
- 8032d56: eb04 4410 add.w r4, r4, r0, lsr #16
- if (q->len % 2 != 0) {
- 8032d5a: d507 bpl.n 8032d6c <inet_chksum_pbuf+0x30>
- swapped = 1 - swapped;
- acc = SWAP_BYTES_IN_WORD(acc);
- 8032d5c: 0623 lsls r3, r4, #24
- swapped = 0;
- for(q = p; q != NULL; q = q->next) {
- acc += LWIP_CHKSUM(q->payload, q->len);
- acc = FOLD_U32T(acc);
- if (q->len % 2 != 0) {
- swapped = 1 - swapped;
- 8032d5e: f1c6 0601 rsb r6, r6, #1
- acc = SWAP_BYTES_IN_WORD(acc);
- 8032d62: f3c4 2407 ubfx r4, r4, #8, #8
- swapped = 0;
- for(q = p; q != NULL; q = q->next) {
- acc += LWIP_CHKSUM(q->payload, q->len);
- acc = FOLD_U32T(acc);
- if (q->len % 2 != 0) {
- swapped = 1 - swapped;
- 8032d66: b2f6 uxtb r6, r6
- acc = SWAP_BYTES_IN_WORD(acc);
- 8032d68: ea44 4413 orr.w r4, r4, r3, lsr #16
- struct pbuf *q;
- u8_t swapped;
- acc = 0;
- swapped = 0;
- for(q = p; q != NULL; q = q->next) {
- 8032d6c: 682d ldr r5, [r5, #0]
- 8032d6e: 2d00 cmp r5, #0
- 8032d70: d1e9 bne.n 8032d46 <inet_chksum_pbuf+0xa>
- swapped = 1 - swapped;
- acc = SWAP_BYTES_IN_WORD(acc);
- }
- }
- if (swapped) {
- 8032d72: b126 cbz r6, 8032d7e <inet_chksum_pbuf+0x42>
- acc = SWAP_BYTES_IN_WORD(acc);
- 8032d74: 0623 lsls r3, r4, #24
- 8032d76: f3c4 2407 ubfx r4, r4, #8, #8
- 8032d7a: ea44 4413 orr.w r4, r4, r3, lsr #16
- }
- return (u16_t)~(acc & 0xffffUL);
- 8032d7e: 43e0 mvns r0, r4
- }
- 8032d80: b280 uxth r0, r0
- 8032d82: bd70 pop {r4, r5, r6, pc}
- 08032d84 <ip4_addr_isbroadcast>:
- {
- ip_addr_t ipaddr;
- ip4_addr_set_u32(&ipaddr, addr);
- /* all ones (broadcast) or all zeroes (old skool broadcast) */
- if ((~addr == IPADDR_ANY) ||
- 8032d84: 1e43 subs r3, r0, #1
- 8032d86: 3303 adds r3, #3
- 8032d88: d811 bhi.n 8032dae <ip4_addr_isbroadcast+0x2a>
- (addr == IPADDR_ANY)) {
- return 1;
- /* no broadcast support on this network interface? */
- } else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) {
- 8032d8a: f891 302d ldrb.w r3, [r1, #45] ; 0x2d
- 8032d8e: f003 0302 and.w r3, r3, #2
- 8032d92: b2db uxtb r3, r3
- 8032d94: b16b cbz r3, 8032db2 <ip4_addr_isbroadcast+0x2e>
- /* the given address cannot be a broadcast address
- * nor can we check against any broadcast addresses */
- return 0;
- /* address matches network interface address exactly? => no broadcast */
- } else if (addr == ip4_addr_get_u32(&netif->ip_addr)) {
- 8032d96: 684a ldr r2, [r1, #4]
- 8032d98: 4290 cmp r0, r2
- 8032d9a: d00a beq.n 8032db2 <ip4_addr_isbroadcast+0x2e>
- return 0;
- /* on the same (sub) network... */
- } else if (ip_addr_netcmp(&ipaddr, &(netif->ip_addr), &(netif->netmask))
- 8032d9c: 688b ldr r3, [r1, #8]
- 8032d9e: 4042 eors r2, r0
- 8032da0: 421a tst r2, r3
- 8032da2: d000 beq.n 8032da6 <ip4_addr_isbroadcast+0x22>
- 8032da4: e005 b.n 8032db2 <ip4_addr_isbroadcast+0x2e>
- /* ...and host identifier bits are all ones? =>... */
- && ((addr & ~ip4_addr_get_u32(&netif->netmask)) ==
- 8032da6: 43db mvns r3, r3
- 8032da8: 4018 ands r0, r3
- 8032daa: 4298 cmp r0, r3
- 8032dac: d101 bne.n 8032db2 <ip4_addr_isbroadcast+0x2e>
- ip4_addr_set_u32(&ipaddr, addr);
- /* all ones (broadcast) or all zeroes (old skool broadcast) */
- if ((~addr == IPADDR_ANY) ||
- (addr == IPADDR_ANY)) {
- return 1;
- 8032dae: 2001 movs r0, #1
- 8032db0: 4770 bx lr
- /* no broadcast support on this network interface? */
- } else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) {
- /* the given address cannot be a broadcast address
- * nor can we check against any broadcast addresses */
- return 0;
- 8032db2: 2000 movs r0, #0
- /* => network broadcast address */
- return 1;
- } else {
- return 0;
- }
- }
- 8032db4: 4770 bx lr
- 08032db6 <ipaddr_aton>:
- * @param addr pointer to which to save the ip address in network order
- * @return 1 if cp could be converted to addr, 0 on failure
- */
- int
- ipaddr_aton(const char *cp, ip_addr_t *addr)
- {
- 8032db6: b5f0 push {r4, r5, r6, r7, lr}
- u8_t base;
- char c;
- u32_t parts[4];
- u32_t *pp = parts;
- c = *cp;
- 8032db8: 7803 ldrb r3, [r0, #0]
- * @param addr pointer to which to save the ip address in network order
- * @return 1 if cp could be converted to addr, 0 on failure
- */
- int
- ipaddr_aton(const char *cp, ip_addr_t *addr)
- {
- 8032dba: b085 sub sp, #20
- 8032dbc: 460e mov r6, r1
- u8_t base;
- char c;
- u32_t parts[4];
- u32_t *pp = parts;
- c = *cp;
- 8032dbe: 2400 movs r4, #0
- * @param cp IP address in ascii represenation (e.g. "127.0.0.1")
- * @param addr pointer to which to save the ip address in network order
- * @return 1 if cp could be converted to addr, 0 on failure
- */
- int
- ipaddr_aton(const char *cp, ip_addr_t *addr)
- 8032dc0: aa00 add r2, sp, #0
- 8032dc2: 18a7 adds r7, r4, r2
- /*
- * Collect number up to ``.''.
- * Values are specified as for C:
- * 0x=hex, 0=octal, 1-9=decimal.
- */
- if (!isdigit(c))
- 8032dc4: f1a3 0230 sub.w r2, r3, #48 ; 0x30
- 8032dc8: 2a09 cmp r2, #9
- 8032dca: d86d bhi.n 8032ea8 <ipaddr_aton+0xf2>
- return (0);
- val = 0;
- base = 10;
- if (c == '0') {
- 8032dcc: 2b30 cmp r3, #48 ; 0x30
- 8032dce: d10b bne.n 8032de8 <ipaddr_aton+0x32>
- c = *++cp;
- 8032dd0: 7843 ldrb r3, [r0, #1]
- if (c == 'x' || c == 'X') {
- 8032dd2: 2b78 cmp r3, #120 ; 0x78
- 8032dd4: d004 beq.n 8032de0 <ipaddr_aton+0x2a>
- 8032dd6: 2b58 cmp r3, #88 ; 0x58
- 8032dd8: d002 beq.n 8032de0 <ipaddr_aton+0x2a>
- if (!isdigit(c))
- return (0);
- val = 0;
- base = 10;
- if (c == '0') {
- c = *++cp;
- 8032dda: 3001 adds r0, #1
- if (c == 'x' || c == 'X') {
- base = 16;
- c = *++cp;
- } else
- base = 8;
- 8032ddc: 2508 movs r5, #8
- 8032dde: e004 b.n 8032dea <ipaddr_aton+0x34>
- base = 10;
- if (c == '0') {
- c = *++cp;
- if (c == 'x' || c == 'X') {
- base = 16;
- c = *++cp;
- 8032de0: 7883 ldrb r3, [r0, #2]
- val = 0;
- base = 10;
- if (c == '0') {
- c = *++cp;
- if (c == 'x' || c == 'X') {
- base = 16;
- 8032de2: 2510 movs r5, #16
- c = *++cp;
- 8032de4: 3002 adds r0, #2
- 8032de6: e000 b.n 8032dea <ipaddr_aton+0x34>
- * 0x=hex, 0=octal, 1-9=decimal.
- */
- if (!isdigit(c))
- return (0);
- val = 0;
- base = 10;
- 8032de8: 250a movs r5, #10
- 8032dea: 4602 mov r2, r0
- if (c == '0') {
- c = *++cp;
- if (c == 'x' || c == 'X') {
- base = 16;
- 8032dec: 2000 movs r0, #0
- 8032dee: e000 b.n 8032df2 <ipaddr_aton+0x3c>
- 8032df0: 3201 adds r2, #1
- c = *++cp;
- } else
- base = 8;
- }
- for (;;) {
- if (isdigit(c)) {
- 8032df2: f1a3 0130 sub.w r1, r3, #48 ; 0x30
- 8032df6: 2909 cmp r1, #9
- 8032df8: d803 bhi.n 8032e02 <ipaddr_aton+0x4c>
- val = (val * base) + (int)(c - '0');
- 8032dfa: fb05 3000 mla r0, r5, r0, r3
- 8032dfe: 3830 subs r0, #48 ; 0x30
- 8032e00: e013 b.n 8032e2a <ipaddr_aton+0x74>
- c = *++cp;
- } else if (base == 16 && isxdigit(c)) {
- 8032e02: 2d10 cmp r5, #16
- 8032e04: d113 bne.n 8032e2e <ipaddr_aton+0x78>
- 8032e06: f1a3 0161 sub.w r1, r3, #97 ; 0x61
- 8032e0a: b2c9 uxtb r1, r1
- 8032e0c: 2905 cmp r1, #5
- 8032e0e: d904 bls.n 8032e1a <ipaddr_aton+0x64>
- 8032e10: f1a3 0c41 sub.w ip, r3, #65 ; 0x41
- 8032e14: f1bc 0f05 cmp.w ip, #5
- 8032e18: d809 bhi.n 8032e2e <ipaddr_aton+0x78>
- val = (val << 4) | (int)(c + 10 - (islower(c) ? 'a' : 'A'));
- 8032e1a: 330a adds r3, #10
- 8032e1c: 2919 cmp r1, #25
- 8032e1e: bf8c ite hi
- 8032e20: 2141 movhi r1, #65 ; 0x41
- 8032e22: 2161 movls r1, #97 ; 0x61
- 8032e24: 1a5b subs r3, r3, r1
- 8032e26: ea43 1000 orr.w r0, r3, r0, lsl #4
- c = *++cp;
- 8032e2a: 7853 ldrb r3, [r2, #1]
- 8032e2c: e7e0 b.n 8032df0 <ipaddr_aton+0x3a>
- } else
- break;
- }
- if (c == '.') {
- 8032e2e: 2b2e cmp r3, #46 ; 0x2e
- 8032e30: d107 bne.n 8032e42 <ipaddr_aton+0x8c>
- * Internet format:
- * a.b.c.d
- * a.b.c (with c treated as 16 bits)
- * a.b (with b treated as 24 bits)
- */
- if (pp >= parts + 3) {
- 8032e32: 2c0c cmp r4, #12
- 8032e34: d038 beq.n 8032ea8 <ipaddr_aton+0xf2>
- return (0);
- }
- *pp++ = val;
- 8032e36: f84d 0004 str.w r0, [sp, r4]
- c = *++cp;
- 8032e3a: 7853 ldrb r3, [r2, #1]
- 8032e3c: 1c50 adds r0, r2, #1
- 8032e3e: 3404 adds r4, #4
- } else
- break;
- }
- 8032e40: e7be b.n 8032dc0 <ipaddr_aton+0xa>
- 8032e42: 2b0d cmp r3, #13
- 8032e44: d803 bhi.n 8032e4e <ipaddr_aton+0x98>
- 8032e46: 2b09 cmp r3, #9
- 8032e48: d203 bcs.n 8032e52 <ipaddr_aton+0x9c>
- 8032e4a: b113 cbz r3, 8032e52 <ipaddr_aton+0x9c>
- 8032e4c: e02c b.n 8032ea8 <ipaddr_aton+0xf2>
- 8032e4e: 2b20 cmp r3, #32
- 8032e50: d12a bne.n 8032ea8 <ipaddr_aton+0xf2>
- }
- /*
- * Concoct the address according to
- * the number of parts specified.
- */
- switch (pp - parts + 1) {
- 8032e52: 466b mov r3, sp
- 8032e54: 1afb subs r3, r7, r3
- 8032e56: 109b asrs r3, r3, #2
- 8032e58: 3301 adds r3, #1
- 8032e5a: 2b04 cmp r3, #4
- 8032e5c: d81f bhi.n 8032e9e <ipaddr_aton+0xe8>
- 8032e5e: e8df f003 tbb [pc, r3]
- 8032e62: 1e23 .short 0x1e23
- 8032e64: 0a03 .short 0x0a03
- 8032e66: 13 .byte 0x13
- 8032e67: 00 .byte 0x00
- case 1: /* a -- 32 bits */
- break;
- case 2: /* a.b -- 8.24 bits */
- if (val > 0xffffffUL) {
- 8032e68: f1b0 7f80 cmp.w r0, #16777216 ; 0x1000000
- 8032e6c: d21c bcs.n 8032ea8 <ipaddr_aton+0xf2>
- return (0);
- }
- val |= parts[0] << 24;
- 8032e6e: 9b00 ldr r3, [sp, #0]
- 8032e70: ea40 6003 orr.w r0, r0, r3, lsl #24
- break;
- 8032e74: e013 b.n 8032e9e <ipaddr_aton+0xe8>
- case 3: /* a.b.c -- 8.8.16 bits */
- if (val > 0xffff) {
- 8032e76: f5b0 3f80 cmp.w r0, #65536 ; 0x10000
- 8032e7a: d215 bcs.n 8032ea8 <ipaddr_aton+0xf2>
- return (0);
- }
- val |= (parts[0] << 24) | (parts[1] << 16);
- 8032e7c: 9b00 ldr r3, [sp, #0]
- 8032e7e: 061a lsls r2, r3, #24
- 8032e80: 9b01 ldr r3, [sp, #4]
- 8032e82: ea42 4303 orr.w r3, r2, r3, lsl #16
- 8032e86: e009 b.n 8032e9c <ipaddr_aton+0xe6>
- break;
- case 4: /* a.b.c.d -- 8.8.8.8 bits */
- if (val > 0xff) {
- 8032e88: 28ff cmp r0, #255 ; 0xff
- 8032e8a: d80d bhi.n 8032ea8 <ipaddr_aton+0xf2>
- return (0);
- }
- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
- 8032e8c: 9b00 ldr r3, [sp, #0]
- 8032e8e: 061a lsls r2, r3, #24
- 8032e90: 9b01 ldr r3, [sp, #4]
- 8032e92: ea42 4203 orr.w r2, r2, r3, lsl #16
- 8032e96: 9b02 ldr r3, [sp, #8]
- 8032e98: ea42 2303 orr.w r3, r2, r3, lsl #8
- 8032e9c: 4318 orrs r0, r3
- break;
- default:
- LWIP_ASSERT("unhandled", 0);
- break;
- }
- if (addr) {
- 8032e9e: b12e cbz r6, 8032eac <ipaddr_aton+0xf6>
- ip4_addr_set_u32(addr, htonl(val));
- 8032ea0: f7fb fe80 bl 802eba4 <lwip_htonl>
- 8032ea4: 6030 str r0, [r6, #0]
- 8032ea6: e001 b.n 8032eac <ipaddr_aton+0xf6>
- * Collect number up to ``.''.
- * Values are specified as for C:
- * 0x=hex, 0=octal, 1-9=decimal.
- */
- if (!isdigit(c))
- return (0);
- 8032ea8: 2000 movs r0, #0
- 8032eaa: e000 b.n 8032eae <ipaddr_aton+0xf8>
- break;
- }
- if (addr) {
- ip4_addr_set_u32(addr, htonl(val));
- }
- return (1);
- 8032eac: 2001 movs r0, #1
- }
- 8032eae: b005 add sp, #20
- 8032eb0: bdf0 pop {r4, r5, r6, r7, pc}
- 08032eb2 <ipaddr_addr>:
- * @param cp IP address in ascii represenation (e.g. "127.0.0.1")
- * @return ip address in network order
- */
- u32_t
- ipaddr_addr(const char *cp)
- {
- 8032eb2: b507 push {r0, r1, r2, lr}
- ip_addr_t val;
- if (ipaddr_aton(cp, &val)) {
- 8032eb4: a901 add r1, sp, #4
- 8032eb6: f7ff ff7e bl 8032db6 <ipaddr_aton>
- 8032eba: b108 cbz r0, 8032ec0 <ipaddr_addr+0xe>
- return ip4_addr_get_u32(&val);
- 8032ebc: 9801 ldr r0, [sp, #4]
- 8032ebe: e001 b.n 8032ec4 <ipaddr_addr+0x12>
- }
- return (IPADDR_NONE);
- 8032ec0: f04f 30ff mov.w r0, #4294967295
- }
- 8032ec4: bd0e pop {r1, r2, r3, pc}
- 08032ec6 <ipaddr_ntoa_r>:
- * @param buflen length of buf
- * @return either pointer to buf which now holds the ASCII
- * representation of addr or NULL if buf was too small
- */
- char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen)
- {
- 8032ec6: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- u8_t rem;
- u8_t n;
- u8_t i;
- int len = 0;
- s_addr = ip4_addr_get_u32(addr);
- 8032eca: 6803 ldr r3, [r0, #0]
- 8032ecc: a802 add r0, sp, #8
- * @param buf target buffer where the string is stored
- * @param buflen length of buf
- * @return either pointer to buf which now holds the ASCII
- * representation of addr or NULL if buf was too small
- */
- char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen)
- 8032ece: f10d 0807 add.w r8, sp, #7
- u8_t rem;
- u8_t n;
- u8_t i;
- int len = 0;
- s_addr = ip4_addr_get_u32(addr);
- 8032ed2: f840 3d04 str.w r3, [r0, #-4]!
- rp = buf;
- 8032ed6: 460c mov r4, r1
- * @param buf target buffer where the string is stored
- * @param buflen length of buf
- * @return either pointer to buf which now holds the ASCII
- * representation of addr or NULL if buf was too small
- */
- char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen)
- 8032ed8: 3801 subs r0, #1
- char *rp;
- u8_t *ap;
- u8_t rem;
- u8_t n;
- u8_t i;
- int len = 0;
- 8032eda: 2700 movs r7, #0
- rp = buf;
- ap = (u8_t *)&s_addr;
- for(n = 0; n < 4; n++) {
- i = 0;
- do {
- rem = *ap % (u8_t)10;
- 8032edc: f04f 0c0a mov.w ip, #10
- *rp++ = inv[i];
- }
- if (len++ >= buflen) {
- return NULL;
- }
- *rp++ = '.';
- 8032ee0: f04f 092e mov.w r9, #46 ; 0x2e
- 8032ee4: 7843 ldrb r3, [r0, #1]
- * @param buf target buffer where the string is stored
- * @param buflen length of buf
- * @return either pointer to buf which now holds the ASCII
- * representation of addr or NULL if buf was too small
- */
- char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen)
- 8032ee6: 2500 movs r5, #0
- rp = buf;
- ap = (u8_t *)&s_addr;
- for(n = 0; n < 4; n++) {
- i = 0;
- do {
- rem = *ap % (u8_t)10;
- 8032ee8: fbb3 f6fc udiv r6, r3, ip
- *ap /= (u8_t)10;
- inv[i++] = '0' + rem;
- 8032eec: f10d 0b08 add.w fp, sp, #8
- rp = buf;
- ap = (u8_t *)&s_addr;
- for(n = 0; n < 4; n++) {
- i = 0;
- do {
- rem = *ap % (u8_t)10;
- 8032ef0: fb0c 3a16 mls sl, ip, r6, r3
- *ap /= (u8_t)10;
- inv[i++] = '0' + rem;
- 8032ef4: eb0b 0305 add.w r3, fp, r5
- 8032ef8: f10a 0a30 add.w sl, sl, #48 ; 0x30
- 8032efc: 3501 adds r5, #1
- 8032efe: f803 ac08 strb.w sl, [r3, #-8]
- } while(*ap);
- 8032f02: f016 03ff ands.w r3, r6, #255 ; 0xff
- for(n = 0; n < 4; n++) {
- i = 0;
- do {
- rem = *ap % (u8_t)10;
- *ap /= (u8_t)10;
- inv[i++] = '0' + rem;
- 8032f06: b2ed uxtb r5, r5
- } while(*ap);
- 8032f08: d1ee bne.n 8032ee8 <ipaddr_ntoa_r+0x22>
- 8032f0a: 3d01 subs r5, #1
- * @param buf target buffer where the string is stored
- * @param buflen length of buf
- * @return either pointer to buf which now holds the ASCII
- * representation of addr or NULL if buf was too small
- */
- char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen)
- 8032f0c: 1be6 subs r6, r4, r7
- 8032f0e: f800 3f01 strb.w r3, [r0, #1]!
- 8032f12: b2ed uxtb r5, r5
- 8032f14: 463b mov r3, r7
- 8032f16: 4637 mov r7, r6
- 8032f18: e00b b.n 8032f32 <ipaddr_ntoa_r+0x6c>
- 8032f1a: 1e6c subs r4, r5, #1
- rem = *ap % (u8_t)10;
- *ap /= (u8_t)10;
- inv[i++] = '0' + rem;
- } while(*ap);
- while(i--) {
- if (len++ >= buflen) {
- 8032f1c: 4293 cmp r3, r2
- 8032f1e: b2e4 uxtb r4, r4
- 8032f20: da16 bge.n 8032f50 <ipaddr_ntoa_r+0x8a>
- return NULL;
- }
- *rp++ = inv[i];
- 8032f22: f10d 0a08 add.w sl, sp, #8
- 8032f26: 4455 add r5, sl
- 8032f28: f815 5c08 ldrb.w r5, [r5, #-8]
- 8032f2c: 54fd strb r5, [r7, r3]
- 8032f2e: 3301 adds r3, #1
- 8032f30: 4625 mov r5, r4
- do {
- rem = *ap % (u8_t)10;
- *ap /= (u8_t)10;
- inv[i++] = '0' + rem;
- } while(*ap);
- while(i--) {
- 8032f32: 2dff cmp r5, #255 ; 0xff
- * @param buf target buffer where the string is stored
- * @param buflen length of buf
- * @return either pointer to buf which now holds the ASCII
- * representation of addr or NULL if buf was too small
- */
- char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen)
- 8032f34: eb06 0403 add.w r4, r6, r3
- do {
- rem = *ap % (u8_t)10;
- *ap /= (u8_t)10;
- inv[i++] = '0' + rem;
- } while(*ap);
- while(i--) {
- 8032f38: d1ef bne.n 8032f1a <ipaddr_ntoa_r+0x54>
- if (len++ >= buflen) {
- return NULL;
- }
- *rp++ = inv[i];
- }
- if (len++ >= buflen) {
- 8032f3a: 1c5f adds r7, r3, #1
- 8032f3c: 4293 cmp r3, r2
- 8032f3e: da07 bge.n 8032f50 <ipaddr_ntoa_r+0x8a>
- s_addr = ip4_addr_get_u32(addr);
- rp = buf;
- ap = (u8_t *)&s_addr;
- for(n = 0; n < 4; n++) {
- 8032f40: 4540 cmp r0, r8
- *rp++ = inv[i];
- }
- if (len++ >= buflen) {
- return NULL;
- }
- *rp++ = '.';
- 8032f42: f804 9b01 strb.w r9, [r4], #1
- s_addr = ip4_addr_get_u32(addr);
- rp = buf;
- ap = (u8_t *)&s_addr;
- for(n = 0; n < 4; n++) {
- 8032f46: d1cd bne.n 8032ee4 <ipaddr_ntoa_r+0x1e>
- return NULL;
- }
- *rp++ = '.';
- ap++;
- }
- *--rp = 0;
- 8032f48: 2300 movs r3, #0
- 8032f4a: f804 3c01 strb.w r3, [r4, #-1]
- 8032f4e: e000 b.n 8032f52 <ipaddr_ntoa_r+0x8c>
- *ap /= (u8_t)10;
- inv[i++] = '0' + rem;
- } while(*ap);
- while(i--) {
- if (len++ >= buflen) {
- return NULL;
- 8032f50: 2100 movs r1, #0
- *rp++ = '.';
- ap++;
- }
- *--rp = 0;
- return buf;
- }
- 8032f52: 4608 mov r0, r1
- 8032f54: e8bd 8ffe ldmia.w sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 08032f58 <ipaddr_ntoa>:
- */
- char *
- ipaddr_ntoa(const ip_addr_t *addr)
- {
- static char str[16];
- return ipaddr_ntoa_r(addr, str, 16);
- 8032f58: 4901 ldr r1, [pc, #4] ; (8032f60 <ipaddr_ntoa+0x8>)
- 8032f5a: 2210 movs r2, #16
- 8032f5c: f7ff bfb3 b.w 8032ec6 <ipaddr_ntoa_r>
- 8032f60: 2000c414 .word 0x2000c414
- 08032f64 <ip_route>:
- return netif;
- }
- #endif
- /* iterate through netifs */
- for (netif = netif_list; netif != NULL; netif = netif->next) {
- 8032f64: 4b0f ldr r3, [pc, #60] ; (8032fa4 <ip_route+0x40>)
- * @param dest the destination IP address for which to find the route
- * @return the netif on which to send to reach dest
- */
- struct netif *
- ip_route(ip_addr_t *dest)
- {
- 8032f66: b510 push {r4, lr}
- return netif;
- }
- #endif
- /* iterate through netifs */
- for (netif = netif_list; netif != NULL; netif = netif->next) {
- 8032f68: 681c ldr r4, [r3, #0]
- 8032f6a: e00a b.n 8032f82 <ip_route+0x1e>
- /* network mask matches? */
- if (netif_is_up(netif)) {
- 8032f6c: f894 302d ldrb.w r3, [r4, #45] ; 0x2d
- 8032f70: 07d9 lsls r1, r3, #31
- 8032f72: d505 bpl.n 8032f80 <ip_route+0x1c>
- if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) {
- 8032f74: 6803 ldr r3, [r0, #0]
- 8032f76: 6862 ldr r2, [r4, #4]
- 8032f78: 405a eors r2, r3
- 8032f7a: 68a3 ldr r3, [r4, #8]
- 8032f7c: 421a tst r2, r3
- 8032f7e: d00e beq.n 8032f9e <ip_route+0x3a>
- return netif;
- }
- #endif
- /* iterate through netifs */
- for (netif = netif_list; netif != NULL; netif = netif->next) {
- 8032f80: 6824 ldr r4, [r4, #0]
- 8032f82: 2c00 cmp r4, #0
- 8032f84: d1f2 bne.n 8032f6c <ip_route+0x8>
- /* return netif on which to forward IP packet */
- return netif;
- }
- }
- }
- if ((netif_default == NULL) || (!netif_is_up(netif_default))) {
- 8032f86: 4b08 ldr r3, [pc, #32] ; (8032fa8 <ip_route+0x44>)
- 8032f88: 681b ldr r3, [r3, #0]
- 8032f8a: b12b cbz r3, 8032f98 <ip_route+0x34>
- 8032f8c: f893 202d ldrb.w r2, [r3, #45] ; 0x2d
- 8032f90: 07d2 lsls r2, r2, #31
- 8032f92: bf48 it mi
- 8032f94: 461c movmi r4, r3
- 8032f96: d402 bmi.n 8032f9e <ip_route+0x3a>
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_route: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
- ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest)));
- IP_STATS_INC(ip.rterr);
- snmp_inc_ipoutnoroutes();
- 8032f98: f001 fcd8 bl 803494c <snmp_inc_ipoutnoroutes>
- return NULL;
- 8032f9c: e7ff b.n 8032f9e <ip_route+0x3a>
- }
- /* no matching netif found, use default netif */
- return netif_default;
- }
- 8032f9e: 4620 mov r0, r4
- 8032fa0: bd10 pop {r4, pc}
- 8032fa2: bf00 nop
- 8032fa4: 2000f6b0 .word 0x2000f6b0
- 8032fa8: 2000f6b4 .word 0x2000f6b4
- 08032fac <ip_input>:
- * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't
- * processed, but currently always returns ERR_OK)
- */
- err_t
- ip_input(struct pbuf *p, struct netif *inp)
- {
- 8032fac: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8032fb0: 4604 mov r4, r0
- 8032fb2: 460f mov r7, r1
- #if IP_ACCEPT_LINK_LAYER_ADDRESSING
- int check_ip_src=1;
- #endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */
- IP_STATS_INC(ip.recv);
- snmp_inc_ipinreceives();
- 8032fb4: f001 fc8a bl 80348cc <snmp_inc_ipinreceives>
- /* identify the IP header */
- iphdr = (struct ip_hdr *)p->payload;
- 8032fb8: 6866 ldr r6, [r4, #4]
- if (IPH_V(iphdr) != 4) {
- 8032fba: f896 8000 ldrb.w r8, [r6]
- 8032fbe: ea4f 1318 mov.w r3, r8, lsr #4
- 8032fc2: 2b04 cmp r3, #4
- 8032fc4: d005 beq.n 8032fd2 <ip_input+0x26>
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_WARNING, ("IP packet dropped due to bad version number %"U16_F"\n", IPH_V(iphdr)));
- ip_debug_print(p);
- pbuf_free(p);
- 8032fc6: 4620 mov r0, r4
- 8032fc8: f7fc ff20 bl 802fe0c <pbuf_free>
- IP_STATS_INC(ip.err);
- IP_STATS_INC(ip.drop);
- snmp_inc_ipinhdrerrors();
- 8032fcc: f001 fc86 bl 80348dc <snmp_inc_ipinhdrerrors>
- return ERR_OK;
- 8032fd0: e0be b.n 8033150 <ip_input+0x1a4>
- /* obtain IP header length in number of 32-bit words */
- iphdr_hlen = IPH_HL(iphdr);
- /* calculate IP header length in bytes */
- iphdr_hlen *= 4;
- /* obtain ip length in bytes */
- iphdr_len = ntohs(IPH_LEN(iphdr));
- 8032fd2: 8870 ldrh r0, [r6, #2]
- 8032fd4: f7fb fde1 bl 802eb9a <lwip_ntohs>
- return ERR_OK;
- }
- #endif
- /* obtain IP header length in number of 32-bit words */
- iphdr_hlen = IPH_HL(iphdr);
- 8032fd8: f008 080f and.w r8, r8, #15
- iphdr_hlen *= 4;
- /* obtain ip length in bytes */
- iphdr_len = ntohs(IPH_LEN(iphdr));
- /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */
- if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len)) {
- 8032fdc: 8963 ldrh r3, [r4, #10]
- #endif
- /* obtain IP header length in number of 32-bit words */
- iphdr_hlen = IPH_HL(iphdr);
- /* calculate IP header length in bytes */
- iphdr_hlen *= 4;
- 8032fde: ea4f 0888 mov.w r8, r8, lsl #2
- /* obtain ip length in bytes */
- iphdr_len = ntohs(IPH_LEN(iphdr));
- /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */
- if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len)) {
- 8032fe2: 4543 cmp r3, r8
- /* obtain IP header length in number of 32-bit words */
- iphdr_hlen = IPH_HL(iphdr);
- /* calculate IP header length in bytes */
- iphdr_hlen *= 4;
- /* obtain ip length in bytes */
- iphdr_len = ntohs(IPH_LEN(iphdr));
- 8032fe4: 4601 mov r1, r0
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS,
- ("IP (len %"U16_F") is longer than pbuf (len %"U16_F"), IP packet dropped.\n",
- iphdr_len, p->tot_len));
- }
- /* free (drop) packet pbufs */
- pbuf_free(p);
- 8032fe6: 4620 mov r0, r4
- iphdr_hlen *= 4;
- /* obtain ip length in bytes */
- iphdr_len = ntohs(IPH_LEN(iphdr));
- /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */
- if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len)) {
- 8032fe8: d302 bcc.n 8032ff0 <ip_input+0x44>
- 8032fea: 8923 ldrh r3, [r4, #8]
- 8032fec: 428b cmp r3, r1
- 8032fee: d202 bcs.n 8032ff6 <ip_input+0x4a>
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS,
- ("IP (len %"U16_F") is longer than pbuf (len %"U16_F"), IP packet dropped.\n",
- iphdr_len, p->tot_len));
- }
- /* free (drop) packet pbufs */
- pbuf_free(p);
- 8032ff0: f7fc ff0c bl 802fe0c <pbuf_free>
- 8032ff4: e045 b.n 8033082 <ip_input+0xd6>
- }
- #endif
- /* Trim pbuf. This should have been done at the netif layer,
- * but we'll do it anyway just to be sure that its done. */
- pbuf_realloc(p, iphdr_len);
- 8032ff6: f7fc ff30 bl 802fe5a <pbuf_realloc>
- /* copy IP addresses to aligned ip_addr_t */
- ip_addr_copy(current_iphdr_dest, iphdr->dest);
- 8032ffa: 6932 ldr r2, [r6, #16]
- 8032ffc: 4b56 ldr r3, [pc, #344] ; (8033158 <ip_input+0x1ac>)
- }
- #endif /* LWIP_AUTOIP */
- }
- if (first) {
- first = 0;
- netif = netif_list;
- 8032ffe: f8df b168 ldr.w fp, [pc, #360] ; 8033168 <ip_input+0x1bc>
- /* Trim pbuf. This should have been done at the netif layer,
- * but we'll do it anyway just to be sure that its done. */
- pbuf_realloc(p, iphdr_len);
- /* copy IP addresses to aligned ip_addr_t */
- ip_addr_copy(current_iphdr_dest, iphdr->dest);
- 8033002: 601a str r2, [r3, #0]
- ip_addr_copy(current_iphdr_src, iphdr->src);
- 8033004: 68f1 ldr r1, [r6, #12]
- 8033006: 4a55 ldr r2, [pc, #340] ; (803315c <ip_input+0x1b0>)
- 8033008: 463d mov r5, r7
- 803300a: 6011 str r1, [r2, #0]
- #endif /* LWIP_IGMP */
- {
- /* start trying with inp. if that's not acceptable, start walking the
- list of configured netifs.
- 'first' is used as a boolean to mark whether we started walking the list */
- int first = 1;
- 803300c: f04f 0901 mov.w r9, #1
- ip4_addr_get_u32(&iphdr->dest) & ~ip4_addr_get_u32(&netif->netmask)));
- /* interface is up and configured? */
- if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) {
- /* unicast to this interface address? */
- if (ip_addr_cmp(¤t_iphdr_dest, &(netif->ip_addr)) ||
- 8033010: 469a mov sl, r3
- ip4_addr_get_u32(&iphdr->dest) & ip4_addr_get_u32(&netif->netmask),
- ip4_addr_get_u32(&netif->ip_addr) & ip4_addr_get_u32(&netif->netmask),
- ip4_addr_get_u32(&iphdr->dest) & ~ip4_addr_get_u32(&netif->netmask)));
- /* interface is up and configured? */
- if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) {
- 8033012: f895 302d ldrb.w r3, [r5, #45] ; 0x2d
- 8033016: 07d8 lsls r0, r3, #31
- 8033018: d403 bmi.n 8033022 <ip_input+0x76>
- /* break out of for loop */
- break;
- }
- #endif /* LWIP_AUTOIP */
- }
- if (first) {
- 803301a: f1b9 0f00 cmp.w r9, #0
- 803301e: d10e bne.n 803303e <ip_input+0x92>
- 8033020: e010 b.n 8033044 <ip_input+0x98>
- ip4_addr_get_u32(&iphdr->dest) & ip4_addr_get_u32(&netif->netmask),
- ip4_addr_get_u32(&netif->ip_addr) & ip4_addr_get_u32(&netif->netmask),
- ip4_addr_get_u32(&iphdr->dest) & ~ip4_addr_get_u32(&netif->netmask)));
- /* interface is up and configured? */
- if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) {
- 8033022: 686b ldr r3, [r5, #4]
- 8033024: 2b00 cmp r3, #0
- 8033026: d0f8 beq.n 803301a <ip_input+0x6e>
- /* unicast to this interface address? */
- if (ip_addr_cmp(¤t_iphdr_dest, &(netif->ip_addr)) ||
- 8033028: f8da 0000 ldr.w r0, [sl]
- 803302c: 4298 cmp r0, r3
- 803302e: f000 8088 beq.w 8033142 <ip_input+0x196>
- /* or broadcast on this interface network address? */
- ip_addr_isbroadcast(¤t_iphdr_dest, netif)) {
- 8033032: 4629 mov r1, r5
- 8033034: f7ff fea6 bl 8032d84 <ip4_addr_isbroadcast>
- ip4_addr_get_u32(&iphdr->dest) & ~ip4_addr_get_u32(&netif->netmask)));
- /* interface is up and configured? */
- if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) {
- /* unicast to this interface address? */
- if (ip_addr_cmp(¤t_iphdr_dest, &(netif->ip_addr)) ||
- 8033038: 2800 cmp r0, #0
- 803303a: d0ee beq.n 803301a <ip_input+0x6e>
- 803303c: e081 b.n 8033142 <ip_input+0x196>
- }
- #endif /* LWIP_AUTOIP */
- }
- if (first) {
- first = 0;
- netif = netif_list;
- 803303e: f8db 5000 ldr.w r5, [fp]
- 8033042: e000 b.n 8033046 <ip_input+0x9a>
- } else {
- netif = netif->next;
- 8033044: 682d ldr r5, [r5, #0]
- }
- if (netif == inp) {
- 8033046: 42bd cmp r5, r7
- netif = netif->next;
- 8033048: bf08 it eq
- 803304a: 682d ldreq r5, [r5, #0]
- 803304c: f04f 0900 mov.w r9, #0
- }
- } while(netif != NULL);
- 8033050: 2d00 cmp r5, #0
- 8033052: d1de bne.n 8033012 <ip_input+0x66>
- 8033054: e072 b.n 803313c <ip_input+0x190>
- /* remote port is DHCP server? */
- if (IPH_PROTO(iphdr) == IP_PROTO_UDP) {
- struct udp_hdr *udphdr = (struct udp_hdr *)((u8_t *)iphdr + iphdr_hlen);
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: UDP packet to DHCP client port %"U16_F"\n",
- ntohs(udphdr->dest)));
- if (IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(udphdr->dest)) {
- 8033056: eb06 0308 add.w r3, r6, r8
- 803305a: 885b ldrh r3, [r3, #2]
- 803305c: f5b3 4f88 cmp.w r3, #17408 ; 0x4400
- 8033060: d16f bne.n 8033142 <ip_input+0x196>
- 8033062: e011 b.n 8033088 <ip_input+0xdc>
- /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */
- #if IP_ACCEPT_LINK_LAYER_ADDRESSING
- /* DHCP servers need 0.0.0.0 to be allowed as source address (RFC 1.1.2.2: 3.2.1.3/a) */
- if (check_ip_src && !ip_addr_isany(¤t_iphdr_src))
- #endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */
- { if ((ip_addr_isbroadcast(¤t_iphdr_src, inp)) ||
- 8033064: 4639 mov r1, r7
- 8033066: f7ff fe8d bl 8032d84 <ip4_addr_isbroadcast>
- 803306a: b928 cbnz r0, 8033078 <ip_input+0xcc>
- (ip_addr_ismulticast(¤t_iphdr_src))) {
- 803306c: f8d8 3000 ldr.w r3, [r8]
- 8033070: f003 03f0 and.w r3, r3, #240 ; 0xf0
- /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */
- #if IP_ACCEPT_LINK_LAYER_ADDRESSING
- /* DHCP servers need 0.0.0.0 to be allowed as source address (RFC 1.1.2.2: 3.2.1.3/a) */
- if (check_ip_src && !ip_addr_isany(¤t_iphdr_src))
- #endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */
- { if ((ip_addr_isbroadcast(¤t_iphdr_src, inp)) ||
- 8033074: 2be0 cmp r3, #224 ; 0xe0
- 8033076: d108 bne.n 803308a <ip_input+0xde>
- (ip_addr_ismulticast(¤t_iphdr_src))) {
- /* packet source is not valid */
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("ip_input: packet source is not valid.\n"));
- /* free (drop) packet pbufs */
- pbuf_free(p);
- 8033078: 4620 mov r0, r4
- 803307a: f7fc fec7 bl 802fe0c <pbuf_free>
- IP_STATS_INC(ip.drop);
- snmp_inc_ipinaddrerrors();
- 803307e: f001 fc35 bl 80348ec <snmp_inc_ipinaddrerrors>
- snmp_inc_ipindiscards();
- 8033082: f001 fc43 bl 803490c <snmp_inc_ipindiscards>
- return ERR_OK;
- 8033086: e063 b.n 8033150 <ip_input+0x1a4>
- /* remote port is DHCP server? */
- if (IPH_PROTO(iphdr) == IP_PROTO_UDP) {
- struct udp_hdr *udphdr = (struct udp_hdr *)((u8_t *)iphdr + iphdr_hlen);
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: UDP packet to DHCP client port %"U16_F"\n",
- ntohs(udphdr->dest)));
- if (IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(udphdr->dest)) {
- 8033088: 463d mov r5, r7
- return ERR_OK;
- }
- }
- /* packet not for us? */
- if (netif == NULL) {
- 803308a: b93d cbnz r5, 803309c <ip_input+0xf0>
- /* try to forward IP packet on (other) interfaces */
- ip_forward(p, iphdr, inp);
- } else
- #endif /* IP_FORWARD */
- {
- snmp_inc_ipinaddrerrors();
- 803308c: f001 fc2e bl 80348ec <snmp_inc_ipinaddrerrors>
- snmp_inc_ipindiscards();
- 8033090: f001 fc3c bl 803490c <snmp_inc_ipindiscards>
- }
- pbuf_free(p);
- 8033094: 4620 mov r0, r4
- 8033096: f7fc feb9 bl 802fe0c <pbuf_free>
- return ERR_OK;
- 803309a: e059 b.n 8033150 <ip_input+0x1a4>
- }
- /* packet consists of multiple fragments? */
- if ((IPH_OFFSET(iphdr) & PP_HTONS(IP_OFFMASK | IP_MF)) != 0) {
- 803309c: 88f3 ldrh r3, [r6, #6]
- 803309e: f023 03c0 bic.w r3, r3, #192 ; 0xc0
- 80330a2: b29b uxth r3, r3
- 80330a4: b12b cbz r3, 80330b2 <ip_input+0x106>
- if (p == NULL) {
- return ERR_OK;
- }
- iphdr = (struct ip_hdr *)p->payload;
- #else /* IP_REASSEMBLY == 0, no packet fragment reassembly code present */
- pbuf_free(p);
- 80330a6: 4620 mov r0, r4
- 80330a8: f7fc feb0 bl 802fe0c <pbuf_free>
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since it was fragmented (0x%"X16_F") (while IP_REASSEMBLY == 0).\n",
- ntohs(IPH_OFFSET(iphdr))));
- IP_STATS_INC(ip.opterr);
- IP_STATS_INC(ip.drop);
- /* unsupported protocol feature */
- snmp_inc_ipinunknownprotos();
- 80330ac: f001 fc26 bl 80348fc <snmp_inc_ipinunknownprotos>
- return ERR_OK;
- 80330b0: e04e b.n 8033150 <ip_input+0x1a4>
- /* send to upper layers */
- LWIP_DEBUGF(IP_DEBUG, ("ip_input: \n"));
- ip_debug_print(p);
- LWIP_DEBUGF(IP_DEBUG, ("ip_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len));
- current_netif = inp;
- 80330b2: 4b2b ldr r3, [pc, #172] ; (8033160 <ip_input+0x1b4>)
- 80330b4: 601f str r7, [r3, #0]
- current_header = iphdr;
- 80330b6: 4b2b ldr r3, [pc, #172] ; (8033164 <ip_input+0x1b8>)
- #if LWIP_RAW
- /* raw input did not eat the packet? */
- if (raw_input(p, inp) == 0)
- 80330b8: 4620 mov r0, r4
- 80330ba: 4639 mov r1, r7
- LWIP_DEBUGF(IP_DEBUG, ("ip_input: \n"));
- ip_debug_print(p);
- LWIP_DEBUGF(IP_DEBUG, ("ip_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len));
- current_netif = inp;
- current_header = iphdr;
- 80330bc: 601e str r6, [r3, #0]
- #if LWIP_RAW
- /* raw input did not eat the packet? */
- if (raw_input(p, inp) == 0)
- 80330be: f7fd f825 bl 803010c <raw_input>
- 80330c2: bb88 cbnz r0, 8033128 <ip_input+0x17c>
- #endif /* LWIP_RAW */
- {
- switch (IPH_PROTO(iphdr)) {
- 80330c4: 7a73 ldrb r3, [r6, #9]
- 80330c6: 2b06 cmp r3, #6
- 80330c8: d00b beq.n 80330e2 <ip_input+0x136>
- 80330ca: 2b11 cmp r3, #17
- 80330cc: d002 beq.n 80330d4 <ip_input+0x128>
- 80330ce: 2b01 cmp r3, #1
- 80330d0: d115 bne.n 80330fe <ip_input+0x152>
- 80330d2: e00d b.n 80330f0 <ip_input+0x144>
- #if LWIP_UDP
- case IP_PROTO_UDP:
- #if LWIP_UDPLITE
- case IP_PROTO_UDPLITE:
- #endif /* LWIP_UDPLITE */
- snmp_inc_ipindelivers();
- 80330d4: f001 fc22 bl 803491c <snmp_inc_ipindelivers>
- udp_input(p, inp);
- 80330d8: 4620 mov r0, r4
- 80330da: 4639 mov r1, r7
- 80330dc: f7ff fb44 bl 8032768 <udp_input>
- break;
- 80330e0: e022 b.n 8033128 <ip_input+0x17c>
- #endif /* LWIP_UDP */
- #if LWIP_TCP
- case IP_PROTO_TCP:
- snmp_inc_ipindelivers();
- 80330e2: f001 fc1b bl 803491c <snmp_inc_ipindelivers>
- tcp_input(p, inp);
- 80330e6: 4620 mov r0, r4
- 80330e8: 4639 mov r1, r7
- 80330ea: f7fe f8e7 bl 80312bc <tcp_input>
- break;
- 80330ee: e01b b.n 8033128 <ip_input+0x17c>
- #endif /* LWIP_TCP */
- #if LWIP_ICMP
- case IP_PROTO_ICMP:
- snmp_inc_ipindelivers();
- 80330f0: f001 fc14 bl 803491c <snmp_inc_ipindelivers>
- icmp_input(p, inp);
- 80330f4: 4620 mov r0, r4
- 80330f6: 4639 mov r1, r7
- 80330f8: f7ff fd20 bl 8032b3c <icmp_input>
- break;
- 80330fc: e014 b.n 8033128 <ip_input+0x17c>
- break;
- #endif /* LWIP_IGMP */
- default:
- #if LWIP_ICMP
- /* send ICMP destination protocol unreachable unless is was a broadcast */
- if (!ip_addr_isbroadcast(¤t_iphdr_dest, inp) &&
- 80330fe: 4d16 ldr r5, [pc, #88] ; (8033158 <ip_input+0x1ac>)
- 8033100: 4639 mov r1, r7
- 8033102: 6828 ldr r0, [r5, #0]
- 8033104: f7ff fe3e bl 8032d84 <ip4_addr_isbroadcast>
- 8033108: b948 cbnz r0, 803311e <ip_input+0x172>
- !ip_addr_ismulticast(¤t_iphdr_dest)) {
- 803310a: 682b ldr r3, [r5, #0]
- 803310c: f003 03f0 and.w r3, r3, #240 ; 0xf0
- break;
- #endif /* LWIP_IGMP */
- default:
- #if LWIP_ICMP
- /* send ICMP destination protocol unreachable unless is was a broadcast */
- if (!ip_addr_isbroadcast(¤t_iphdr_dest, inp) &&
- 8033110: 2be0 cmp r3, #224 ; 0xe0
- 8033112: d004 beq.n 803311e <ip_input+0x172>
- !ip_addr_ismulticast(¤t_iphdr_dest)) {
- p->payload = iphdr;
- 8033114: 6066 str r6, [r4, #4]
- icmp_dest_unreach(p, ICMP_DUR_PROTO);
- 8033116: 4620 mov r0, r4
- 8033118: 2102 movs r1, #2
- 803311a: f7ff fda5 bl 8032c68 <icmp_dest_unreach>
- }
- #endif /* LWIP_ICMP */
- pbuf_free(p);
- 803311e: 4620 mov r0, r4
- 8033120: f7fc fe74 bl 802fe0c <pbuf_free>
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("Unsupported transport protocol %"U16_F"\n", IPH_PROTO(iphdr)));
- IP_STATS_INC(ip.proterr);
- IP_STATS_INC(ip.drop);
- snmp_inc_ipinunknownprotos();
- 8033124: f001 fbea bl 80348fc <snmp_inc_ipinunknownprotos>
- }
- }
- current_netif = NULL;
- 8033128: 4a0d ldr r2, [pc, #52] ; (8033160 <ip_input+0x1b4>)
- 803312a: 2300 movs r3, #0
- 803312c: 6013 str r3, [r2, #0]
- current_header = NULL;
- 803312e: 4a0d ldr r2, [pc, #52] ; (8033164 <ip_input+0x1b8>)
- 8033130: 6013 str r3, [r2, #0]
- ip_addr_set_any(¤t_iphdr_src);
- 8033132: 4a0a ldr r2, [pc, #40] ; (803315c <ip_input+0x1b0>)
- 8033134: 6013 str r3, [r2, #0]
- ip_addr_set_any(¤t_iphdr_dest);
- 8033136: 4a08 ldr r2, [pc, #32] ; (8033158 <ip_input+0x1ac>)
- 8033138: 6013 str r3, [r2, #0]
- return ERR_OK;
- 803313a: e009 b.n 8033150 <ip_input+0x1a4>
- *
- * #define LWIP_IP_ACCEPT_UDP_PORT(dst_port) ((dst_port) == PP_NTOHS(12345))
- */
- if (netif == NULL) {
- /* remote port is DHCP server? */
- if (IPH_PROTO(iphdr) == IP_PROTO_UDP) {
- 803313c: 7a73 ldrb r3, [r6, #9]
- 803313e: 2b11 cmp r3, #17
- 8033140: d089 beq.n 8033056 <ip_input+0xaa>
- #endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */
- /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */
- #if IP_ACCEPT_LINK_LAYER_ADDRESSING
- /* DHCP servers need 0.0.0.0 to be allowed as source address (RFC 1.1.2.2: 3.2.1.3/a) */
- if (check_ip_src && !ip_addr_isany(¤t_iphdr_src))
- 8033142: f8df 8018 ldr.w r8, [pc, #24] ; 803315c <ip_input+0x1b0>
- 8033146: f8d8 0000 ldr.w r0, [r8]
- 803314a: 2800 cmp r0, #0
- 803314c: d09d beq.n 803308a <ip_input+0xde>
- 803314e: e789 b.n 8033064 <ip_input+0xb8>
- current_header = NULL;
- ip_addr_set_any(¤t_iphdr_src);
- ip_addr_set_any(¤t_iphdr_dest);
- return ERR_OK;
- }
- 8033150: 2000 movs r0, #0
- 8033152: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8033156: bf00 nop
- 8033158: 2000f6e4 .word 0x2000f6e4
- 803315c: 2000f6dc .word 0x2000f6dc
- 8033160: 2000f6e0 .word 0x2000f6e0
- 8033164: 2000f6e8 .word 0x2000f6e8
- 8033168: 2000f6b0 .word 0x2000f6b0
- 0803316c <ip_output_if>:
- */
- err_t
- ip_output_if(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,
- u8_t ttl, u8_t tos,
- u8_t proto, struct netif *netif)
- {
- 803316c: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr}
- 8033170: 4615 mov r5, r2
- 8033172: 4606 mov r6, r0
- 8033174: 4689 mov r9, r1
- 8033176: 469a mov sl, r3
- 8033178: 9f0c ldr r7, [sp, #48] ; 0x30
- /* pbufs passed to IP must have a ref-count of 1 as their payload pointer
- gets altered as the packet is passed down the stack */
- LWIP_ASSERT("p->ref == 1", p->ref == 1);
- snmp_inc_ipoutrequests();
- 803317a: f001 fbd7 bl 803492c <snmp_inc_ipoutrequests>
- /* Should the IP header be generated or is it already included in p? */
- if (dest != IP_HDRINCL) {
- 803317e: b3b5 cbz r5, 80331ee <ip_output_if+0x82>
- }
- #endif /* CHECKSUM_GEN_IP_INLINE */
- }
- #endif /* IP_OPTIONS_SEND */
- /* generate IP header */
- if (pbuf_header(p, IP_HLEN)) {
- 8033180: 4630 mov r0, r6
- 8033182: 2114 movs r1, #20
- 8033184: f7fc fe17 bl 802fdb6 <pbuf_header>
- 8033188: 4680 mov r8, r0
- 803318a: b118 cbz r0, 8033194 <ip_output_if+0x28>
- LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output: not enough room for IP header in pbuf\n"));
- IP_STATS_INC(ip.err);
- snmp_inc_ipoutdiscards();
- 803318c: f001 fbd6 bl 803493c <snmp_inc_ipoutdiscards>
- return ERR_BUF;
- 8033190: 20fe movs r0, #254 ; 0xfe
- 8033192: e036 b.n 8033202 <ip_output_if+0x96>
- }
- iphdr = (struct ip_hdr *)p->payload;
- 8033194: 6874 ldr r4, [r6, #4]
- LWIP_ASSERT("check that first pbuf can hold struct ip_hdr",
- (p->len >= sizeof(struct ip_hdr)));
- IPH_TTL_SET(iphdr, ttl);
- IPH_PROTO_SET(iphdr, proto);
- 8033196: f89d 302c ldrb.w r3, [sp, #44] ; 0x2c
- iphdr = (struct ip_hdr *)p->payload;
- LWIP_ASSERT("check that first pbuf can hold struct ip_hdr",
- (p->len >= sizeof(struct ip_hdr)));
- IPH_TTL_SET(iphdr, ttl);
- 803319a: f884 a008 strb.w sl, [r4, #8]
- IPH_PROTO_SET(iphdr, proto);
- 803319e: 7263 strb r3, [r4, #9]
- #if CHECKSUM_GEN_IP_INLINE
- chk_sum += LWIP_MAKE_U16(proto, ttl);
- #endif /* CHECKSUM_GEN_IP_INLINE */
- /* dest cannot be NULL here */
- ip_addr_copy(iphdr->dest, *dest);
- 80331a0: 682b ldr r3, [r5, #0]
- 80331a2: 6123 str r3, [r4, #16]
- #if CHECKSUM_GEN_IP_INLINE
- chk_sum += ip4_addr_get_u32(&iphdr->dest) & 0xFFFF;
- chk_sum += ip4_addr_get_u32(&iphdr->dest) >> 16;
- #endif /* CHECKSUM_GEN_IP_INLINE */
- IPH_VHL_SET(iphdr, 4, ip_hlen / 4);
- 80331a4: 2345 movs r3, #69 ; 0x45
- 80331a6: 7023 strb r3, [r4, #0]
- IPH_TOS_SET(iphdr, tos);
- 80331a8: f89d 3028 ldrb.w r3, [sp, #40] ; 0x28
- 80331ac: 7063 strb r3, [r4, #1]
- #if CHECKSUM_GEN_IP_INLINE
- chk_sum += LWIP_MAKE_U16(tos, iphdr->_v_hl);
- #endif /* CHECKSUM_GEN_IP_INLINE */
- IPH_LEN_SET(iphdr, htons(p->tot_len));
- 80331ae: 8930 ldrh r0, [r6, #8]
- 80331b0: f7fb fcee bl 802eb90 <lwip_htons>
- #if CHECKSUM_GEN_IP_INLINE
- chk_sum += iphdr->_len;
- #endif /* CHECKSUM_GEN_IP_INLINE */
- IPH_OFFSET_SET(iphdr, 0);
- 80331b4: f884 8006 strb.w r8, [r4, #6]
- 80331b8: f884 8007 strb.w r8, [r4, #7]
- IPH_ID_SET(iphdr, htons(ip_id));
- 80331bc: f8df 8048 ldr.w r8, [pc, #72] ; 8033208 <ip_output_if+0x9c>
- IPH_VHL_SET(iphdr, 4, ip_hlen / 4);
- IPH_TOS_SET(iphdr, tos);
- #if CHECKSUM_GEN_IP_INLINE
- chk_sum += LWIP_MAKE_U16(tos, iphdr->_v_hl);
- #endif /* CHECKSUM_GEN_IP_INLINE */
- IPH_LEN_SET(iphdr, htons(p->tot_len));
- 80331c0: 8060 strh r0, [r4, #2]
- #if CHECKSUM_GEN_IP_INLINE
- chk_sum += iphdr->_len;
- #endif /* CHECKSUM_GEN_IP_INLINE */
- IPH_OFFSET_SET(iphdr, 0);
- IPH_ID_SET(iphdr, htons(ip_id));
- 80331c2: f8b8 0000 ldrh.w r0, [r8]
- 80331c6: f7fb fce3 bl 802eb90 <lwip_htons>
- 80331ca: 80a0 strh r0, [r4, #4]
- #if CHECKSUM_GEN_IP_INLINE
- chk_sum += iphdr->_id;
- #endif /* CHECKSUM_GEN_IP_INLINE */
- ++ip_id;
- 80331cc: f8b8 3000 ldrh.w r3, [r8]
- 80331d0: 3301 adds r3, #1
- 80331d2: f8a8 3000 strh.w r3, [r8]
- if (ip_addr_isany(src)) {
- 80331d6: f1b9 0f00 cmp.w r9, #0
- 80331da: d002 beq.n 80331e2 <ip_output_if+0x76>
- 80331dc: f8d9 3000 ldr.w r3, [r9]
- 80331e0: b903 cbnz r3, 80331e4 <ip_output_if+0x78>
- ip_addr_copy(iphdr->src, netif->ip_addr);
- 80331e2: 687b ldr r3, [r7, #4]
- } else {
- /* src cannot be NULL here */
- ip_addr_copy(iphdr->src, *src);
- 80331e4: 60e3 str r3, [r4, #12]
- chk_sum = (chk_sum >> 16) + (chk_sum & 0xFFFF);
- chk_sum = (chk_sum >> 16) + chk_sum;
- chk_sum = ~chk_sum;
- iphdr->_chksum = chk_sum; /* network order */
- #else /* CHECKSUM_GEN_IP_INLINE */
- IPH_CHKSUM_SET(iphdr, 0);
- 80331e6: 2300 movs r3, #0
- 80331e8: 72a3 strb r3, [r4, #10]
- 80331ea: 72e3 strb r3, [r4, #11]
- 80331ec: e004 b.n 80331f8 <ip_output_if+0x8c>
- #endif
- #endif /* CHECKSUM_GEN_IP_INLINE */
- } else {
- /* IP header already included in p */
- iphdr = (struct ip_hdr *)p->payload;
- ip_addr_copy(dest_addr, iphdr->dest);
- 80331ee: 6873 ldr r3, [r6, #4]
- 80331f0: ad02 add r5, sp, #8
- 80331f2: 691b ldr r3, [r3, #16]
- 80331f4: f845 3d04 str.w r3, [r5, #-4]!
- return ip_frag(p, netif, dest);
- }
- #endif /* IP_FRAG */
- LWIP_DEBUGF(IP_DEBUG, ("netif->output()"));
- return netif->output(netif, p, dest);
- 80331f8: 697b ldr r3, [r7, #20]
- 80331fa: 4638 mov r0, r7
- 80331fc: 4631 mov r1, r6
- 80331fe: 462a mov r2, r5
- 8033200: 4798 blx r3
- }
- 8033202: b240 sxtb r0, r0
- 8033204: e8bd 87fc ldmia.w sp!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, pc}
- 8033208: 2000c424 .word 0x2000c424
- 0803320c <ip_output>:
- * see ip_output_if() for more return values
- */
- err_t
- ip_output(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,
- u8_t ttl, u8_t tos, u8_t proto)
- {
- 803320c: b5f0 push {r4, r5, r6, r7, lr}
- 803320e: 4605 mov r5, r0
- 8033210: b085 sub sp, #20
- /* pbufs passed to IP must have a ref-count of 1 as their payload pointer
- gets altered as the packet is passed down the stack */
- LWIP_ASSERT("p->ref == 1", p->ref == 1);
- if ((netif = ip_route(dest)) == NULL) {
- 8033212: 4610 mov r0, r2
- * see ip_output_if() for more return values
- */
- err_t
- ip_output(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,
- u8_t ttl, u8_t tos, u8_t proto)
- {
- 8033214: 460f mov r7, r1
- 8033216: 4614 mov r4, r2
- 8033218: 461e mov r6, r3
- /* pbufs passed to IP must have a ref-count of 1 as their payload pointer
- gets altered as the packet is passed down the stack */
- LWIP_ASSERT("p->ref == 1", p->ref == 1);
- if ((netif = ip_route(dest)) == NULL) {
- 803321a: f7ff fea3 bl 8032f64 <ip_route>
- 803321e: b168 cbz r0, 803323c <ip_output+0x30>
- ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest)));
- IP_STATS_INC(ip.rterr);
- return ERR_RTE;
- }
- return ip_output_if(p, src, dest, ttl, tos, proto, netif);
- 8033220: f89d 3028 ldrb.w r3, [sp, #40] ; 0x28
- 8033224: 9002 str r0, [sp, #8]
- 8033226: 9300 str r3, [sp, #0]
- 8033228: f89d 302c ldrb.w r3, [sp, #44] ; 0x2c
- 803322c: 4628 mov r0, r5
- 803322e: 9301 str r3, [sp, #4]
- 8033230: 4639 mov r1, r7
- 8033232: 4622 mov r2, r4
- 8033234: 4633 mov r3, r6
- 8033236: f7ff ff99 bl 803316c <ip_output_if>
- 803323a: e000 b.n 803323e <ip_output+0x32>
- if ((netif = ip_route(dest)) == NULL) {
- LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
- ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest)));
- IP_STATS_INC(ip.rterr);
- return ERR_RTE;
- 803323c: 20fc movs r0, #252 ; 0xfc
- }
- return ip_output_if(p, src, dest, ttl, tos, proto, netif);
- }
- 803323e: b240 sxtb r0, r0
- 8033240: b005 add sp, #20
- 8033242: bdf0 pop {r4, r5, r6, r7, pc}
- 08033244 <snmp_asn1_dec_type>:
- * @param type return ASN1 type
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode
- */
- err_t
- snmp_asn1_dec_type(struct pbuf *p, u16_t ofs, u8_t *type)
- {
- 8033244: b510 push {r4, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- 8033246: 2300 movs r3, #0
- while (p != NULL)
- 8033248: e00c b.n 8033264 <snmp_asn1_dec_type+0x20>
- {
- base = plen;
- plen += p->len;
- 803324a: 8944 ldrh r4, [r0, #10]
- 803324c: 191c adds r4, r3, r4
- 803324e: b2a4 uxth r4, r4
- if (ofs < plen)
- 8033250: 42a1 cmp r1, r4
- 8033252: d205 bcs.n 8033260 <snmp_asn1_dec_type+0x1c>
- {
- msg_ptr = (u8_t*)p->payload;
- 8033254: 6840 ldr r0, [r0, #4]
- msg_ptr += ofs - base;
- 8033256: 1acb subs r3, r1, r3
- *type = *msg_ptr;
- 8033258: 5cc3 ldrb r3, [r0, r3]
- return ERR_OK;
- 803325a: 2000 movs r0, #0
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- *type = *msg_ptr;
- 803325c: 7013 strb r3, [r2, #0]
- return ERR_OK;
- 803325e: e004 b.n 803326a <snmp_asn1_dec_type+0x26>
- }
- p = p->next;
- 8033260: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 8033262: 4623 mov r3, r4
- {
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- while (p != NULL)
- 8033264: 2800 cmp r0, #0
- 8033266: d1f0 bne.n 803324a <snmp_asn1_dec_type+0x6>
- return ERR_OK;
- }
- p = p->next;
- }
- /* p == NULL, ofs >= plen */
- return ERR_ARG;
- 8033268: 20f2 movs r0, #242 ; 0xf2
- }
- 803326a: b240 sxtb r0, r0
- 803326c: bd10 pop {r4, pc}
- 0803326e <snmp_asn1_dec_length>:
- * @param length return host order length, upto 64k
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode
- */
- err_t
- snmp_asn1_dec_length(struct pbuf *p, u16_t ofs, u8_t *octets_used, u16_t *length)
- {
- 803326e: b5f0 push {r4, r5, r6, r7, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- 8033270: 2500 movs r5, #0
- while (p != NULL)
- 8033272: e079 b.n 8033368 <snmp_asn1_dec_length+0xfa>
- {
- base = plen;
- plen += p->len;
- 8033274: 8944 ldrh r4, [r0, #10]
- 8033276: 192c adds r4, r5, r4
- 8033278: b2a4 uxth r4, r4
- if (ofs < plen)
- 803327a: 42a1 cmp r1, r4
- 803327c: d272 bcs.n 8033364 <snmp_asn1_dec_length+0xf6>
- {
- msg_ptr = (u8_t*)p->payload;
- 803327e: f8d0 c004 ldr.w ip, [r0, #4]
- msg_ptr += ofs - base;
- 8033282: 1b4f subs r7, r1, r5
- 8033284: eb0c 0507 add.w r5, ip, r7
- if (*msg_ptr < 0x80)
- 8033288: f81c 6007 ldrb.w r6, [ip, r7]
- 803328c: f016 0f80 tst.w r6, #128 ; 0x80
- 8033290: d105 bne.n 803329e <snmp_asn1_dec_length+0x30>
- {
- /* primitive definite length format */
- *octets_used = 1;
- 8033292: 2101 movs r1, #1
- 8033294: 7011 strb r1, [r2, #0]
- *length = *msg_ptr;
- 8033296: f81c 2007 ldrb.w r2, [ip, r7]
- 803329a: 801a strh r2, [r3, #0]
- 803329c: e05a b.n 8033354 <snmp_asn1_dec_length+0xe6>
- return ERR_OK;
- }
- else if (*msg_ptr == 0x80)
- 803329e: 2e80 cmp r6, #128 ; 0x80
- 80332a0: d12a bne.n 80332f8 <snmp_asn1_dec_length+0x8a>
- {
- /* constructed indefinite length format, termination with two zero octets */
- u8_t zeros;
- u8_t i;
- *length = 0;
- 80332a2: 2600 movs r6, #0
- 80332a4: 801e strh r6, [r3, #0]
- 80332a6: e022 b.n 80332ee <snmp_asn1_dec_length+0x80>
- {
- i = 2;
- while (i > 0)
- {
- i--;
- (*length) += 1;
- 80332a8: f8b3 c000 ldrh.w ip, [r3]
- ofs += 1;
- 80332ac: 3101 adds r1, #1
- 80332ae: b289 uxth r1, r1
- {
- i = 2;
- while (i > 0)
- {
- i--;
- (*length) += 1;
- 80332b0: f10c 0c01 add.w ip, ip, #1
- ofs += 1;
- if (ofs >= plen)
- 80332b4: 42a1 cmp r1, r4
- {
- i = 2;
- while (i > 0)
- {
- i--;
- (*length) += 1;
- 80332b6: f8a3 c000 strh.w ip, [r3]
- ofs += 1;
- if (ofs >= plen)
- 80332ba: d308 bcc.n 80332ce <snmp_asn1_dec_length+0x60>
- {
- /* next octet in next pbuf */
- p = p->next;
- 80332bc: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 80332be: b900 cbnz r0, 80332c2 <snmp_asn1_dec_length+0x54>
- 80332c0: e04e b.n 8033360 <snmp_asn1_dec_length+0xf2>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 80332c2: f8b0 c00a ldrh.w ip, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 80332c6: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 80332c8: 4464 add r4, ip
- 80332ca: b2a4 uxth r4, r4
- 80332cc: e000 b.n 80332d0 <snmp_asn1_dec_length+0x62>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 80332ce: 3501 adds r5, #1
- }
- if (*msg_ptr == 0)
- 80332d0: f895 c000 ldrb.w ip, [r5]
- 80332d4: f1bc 0f00 cmp.w ip, #0
- 80332d8: d104 bne.n 80332e4 <snmp_asn1_dec_length+0x76>
- {
- zeros++;
- 80332da: 3601 adds r6, #1
- 80332dc: b2f6 uxtb r6, r6
- if (zeros == 2)
- 80332de: 2e02 cmp r6, #2
- 80332e0: d101 bne.n 80332e6 <snmp_asn1_dec_length+0x78>
- 80332e2: e007 b.n 80332f4 <snmp_asn1_dec_length+0x86>
- i = 0;
- }
- }
- else
- {
- zeros = 0;
- 80332e4: 2600 movs r6, #0
- *length = 0;
- zeros = 0;
- while (zeros != 2)
- {
- i = 2;
- while (i > 0)
- 80332e6: 42b9 cmp r1, r7
- 80332e8: d1de bne.n 80332a8 <snmp_asn1_dec_length+0x3a>
- u8_t zeros;
- u8_t i;
- *length = 0;
- zeros = 0;
- while (zeros != 2)
- 80332ea: 2e02 cmp r6, #2
- 80332ec: d002 beq.n 80332f4 <snmp_asn1_dec_length+0x86>
- * @param octets_used returns number of octets used by the length code
- * @param length return host order length, upto 64k
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode
- */
- err_t
- snmp_asn1_dec_length(struct pbuf *p, u16_t ofs, u8_t *octets_used, u16_t *length)
- 80332ee: 1c8f adds r7, r1, #2
- 80332f0: b2bf uxth r7, r7
- 80332f2: e7d9 b.n 80332a8 <snmp_asn1_dec_length+0x3a>
- {
- zeros = 0;
- }
- }
- }
- *octets_used = 1;
- 80332f4: 2301 movs r3, #1
- 80332f6: e02c b.n 8033352 <snmp_asn1_dec_length+0xe4>
- return ERR_OK;
- }
- else if (*msg_ptr == 0x81)
- 80332f8: 2e81 cmp r6, #129 ; 0x81
- 80332fa: d10c bne.n 8033316 <snmp_asn1_dec_length+0xa8>
- {
- /* constructed definite length format, one octet */
- ofs += 1;
- 80332fc: 3101 adds r1, #1
- if (ofs >= plen)
- 80332fe: b289 uxth r1, r1
- 8033300: 42a1 cmp r1, r4
- 8033302: d303 bcc.n 803330c <snmp_asn1_dec_length+0x9e>
- {
- /* next octet in next pbuf */
- p = p->next;
- 8033304: 6801 ldr r1, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 8033306: b359 cbz r1, 8033360 <snmp_asn1_dec_length+0xf2>
- msg_ptr = (u8_t*)p->payload;
- 8033308: 684d ldr r5, [r1, #4]
- 803330a: e000 b.n 803330e <snmp_asn1_dec_length+0xa0>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 803330c: 3501 adds r5, #1
- }
- *length = *msg_ptr;
- 803330e: 7829 ldrb r1, [r5, #0]
- 8033310: 8019 strh r1, [r3, #0]
- *octets_used = 2;
- 8033312: 2302 movs r3, #2
- 8033314: e01d b.n 8033352 <snmp_asn1_dec_length+0xe4>
- return ERR_OK;
- }
- else if (*msg_ptr == 0x82)
- 8033316: 2e82 cmp r6, #130 ; 0x82
- 8033318: d11e bne.n 8033358 <snmp_asn1_dec_length+0xea>
- /* constructed definite length format, two octets */
- i = 2;
- while (i > 0)
- {
- i--;
- ofs += 1;
- 803331a: 1c4e adds r6, r1, #1
- if (ofs >= plen)
- 803331c: b2b6 uxth r6, r6
- 803331e: 42a6 cmp r6, r4
- 8033320: d201 bcs.n 8033326 <snmp_asn1_dec_length+0xb8>
- plen += p->len;
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 8033322: 3501 adds r5, #1
- 8033324: e005 b.n 8033332 <snmp_asn1_dec_length+0xc4>
- i--;
- ofs += 1;
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- 8033326: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 8033328: b1d0 cbz r0, 8033360 <snmp_asn1_dec_length+0xf2>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 803332a: 8946 ldrh r6, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 803332c: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 803332e: 19a4 adds r4, r4, r6
- 8033330: b2a4 uxth r4, r4
- *length |= *msg_ptr;
- }
- else
- {
- /* most significant length octet */
- *length = (*msg_ptr) << 8;
- 8033332: 782e ldrb r6, [r5, #0]
- /* constructed definite length format, two octets */
- i = 2;
- while (i > 0)
- {
- i--;
- ofs += 1;
- 8033334: 3102 adds r1, #2
- if (ofs >= plen)
- 8033336: b289 uxth r1, r1
- *length |= *msg_ptr;
- }
- else
- {
- /* most significant length octet */
- *length = (*msg_ptr) << 8;
- 8033338: 0236 lsls r6, r6, #8
- i = 2;
- while (i > 0)
- {
- i--;
- ofs += 1;
- if (ofs >= plen)
- 803333a: 42a1 cmp r1, r4
- *length |= *msg_ptr;
- }
- else
- {
- /* most significant length octet */
- *length = (*msg_ptr) << 8;
- 803333c: 801e strh r6, [r3, #0]
- i = 2;
- while (i > 0)
- {
- i--;
- ofs += 1;
- if (ofs >= plen)
- 803333e: d201 bcs.n 8033344 <snmp_asn1_dec_length+0xd6>
- plen += p->len;
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 8033340: 3501 adds r5, #1
- 8033342: e002 b.n 803334a <snmp_asn1_dec_length+0xdc>
- i--;
- ofs += 1;
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- 8033344: 6801 ldr r1, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 8033346: b159 cbz r1, 8033360 <snmp_asn1_dec_length+0xf2>
- msg_ptr = (u8_t*)p->payload;
- 8033348: 684d ldr r5, [r1, #4]
- msg_ptr++;
- }
- if (i == 0)
- {
- /* least significant length octet */
- *length |= *msg_ptr;
- 803334a: 7829 ldrb r1, [r5, #0]
- 803334c: 430e orrs r6, r1
- 803334e: 801e strh r6, [r3, #0]
- {
- /* most significant length octet */
- *length = (*msg_ptr) << 8;
- }
- }
- *octets_used = 3;
- 8033350: 2303 movs r3, #3
- 8033352: 7013 strb r3, [r2, #0]
- return ERR_OK;
- 8033354: 2000 movs r0, #0
- 8033356: e00a b.n 803336e <snmp_asn1_dec_length+0x100>
- }
- else
- {
- /* constructed definite length format 3..127 octets, this is too big (>64k) */
- /** @todo: do we need to accept inefficient codings with many leading zero's? */
- *octets_used = 1 + ((*msg_ptr) & 0x7f);
- 8033358: f006 067f and.w r6, r6, #127 ; 0x7f
- 803335c: 3601 adds r6, #1
- 803335e: 7016 strb r6, [r2, #0]
- return ERR_ARG;
- 8033360: 20f2 movs r0, #242 ; 0xf2
- 8033362: e004 b.n 803336e <snmp_asn1_dec_length+0x100>
- }
- }
- p = p->next;
- 8033364: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 8033366: 4625 mov r5, r4
- {
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- while (p != NULL)
- 8033368: 2800 cmp r0, #0
- 803336a: d183 bne.n 8033274 <snmp_asn1_dec_length+0x6>
- 803336c: e7f8 b.n 8033360 <snmp_asn1_dec_length+0xf2>
- p = p->next;
- }
- /* p == NULL, ofs >= plen */
- return ERR_ARG;
- }
- 803336e: b240 sxtb r0, r0
- 8033370: bdf0 pop {r4, r5, r6, r7, pc}
- 08033372 <snmp_asn1_dec_u32t>:
- * as 0x00,0xFF,0xFF. Note the leading sign octet. A positive value
- * of 0xFFFFFFFF is preceded with 0x00 and the length is 5 octets!!
- */
- err_t
- snmp_asn1_dec_u32t(struct pbuf *p, u16_t ofs, u16_t len, u32_t *value)
- {
- 8033372: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- 8033376: 2500 movs r5, #0
- while (p != NULL)
- 8033378: e049 b.n 803340e <snmp_asn1_dec_u32t+0x9c>
- {
- base = plen;
- plen += p->len;
- 803337a: 8944 ldrh r4, [r0, #10]
- 803337c: 192c adds r4, r5, r4
- 803337e: b2a4 uxth r4, r4
- if (ofs < plen)
- 8033380: 42a1 cmp r1, r4
- 8033382: d242 bcs.n 803340a <snmp_asn1_dec_u32t+0x98>
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- if ((len > 0) && (len < 6))
- 8033384: 1e56 subs r6, r2, #1
- {
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- 8033386: f8d0 c004 ldr.w ip, [r0, #4]
- msg_ptr += ofs - base;
- if ((len > 0) && (len < 6))
- 803338a: b2b6 uxth r6, r6
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- 803338c: 1b4f subs r7, r1, r5
- if ((len > 0) && (len < 6))
- 803338e: 2e04 cmp r6, #4
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- 8033390: eb0c 0507 add.w r5, ip, r7
- if ((len > 0) && (len < 6))
- 8033394: d901 bls.n 803339a <snmp_asn1_dec_u32t+0x28>
- *value |= *msg_ptr;
- return ERR_OK;
- }
- else
- {
- return ERR_ARG;
- 8033396: 20f2 movs r0, #242 ; 0xf2
- 8033398: e03c b.n 8033414 <snmp_asn1_dec_u32t+0xa2>
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- if ((len > 0) && (len < 6))
- {
- /* start from zero */
- *value = 0;
- 803339a: f04f 0800 mov.w r8, #0
- 803339e: f8c3 8000 str.w r8, [r3]
- if (*msg_ptr & 0x80)
- 80333a2: f81c 7007 ldrb.w r7, [ip, r7]
- 80333a6: f017 0f80 tst.w r7, #128 ; 0x80
- 80333aa: d1f4 bne.n 8033396 <snmp_asn1_dec_u32t+0x24>
- return ERR_ARG;
- }
- else
- {
- /* positive */
- if ((len > 1) && (*msg_ptr == 0))
- 80333ac: 2a01 cmp r2, #1
- 80333ae: d00e beq.n 80333ce <snmp_asn1_dec_u32t+0x5c>
- 80333b0: b96f cbnz r7, 80333ce <snmp_asn1_dec_u32t+0x5c>
- {
- /* skip leading "sign byte" octet 0x00 */
- len--;
- ofs += 1;
- 80333b2: 3101 adds r1, #1
- 80333b4: b289 uxth r1, r1
- if (ofs >= plen)
- 80333b6: 42a1 cmp r1, r4
- {
- /* positive */
- if ((len > 1) && (*msg_ptr == 0))
- {
- /* skip leading "sign byte" octet 0x00 */
- len--;
- 80333b8: 4632 mov r2, r6
- ofs += 1;
- if (ofs >= plen)
- 80333ba: d307 bcc.n 80333cc <snmp_asn1_dec_u32t+0x5a>
- {
- /* next octet in next pbuf */
- p = p->next;
- 80333bc: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 80333be: 2800 cmp r0, #0
- 80333c0: d0e9 beq.n 8033396 <snmp_asn1_dec_u32t+0x24>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 80333c2: 8946 ldrh r6, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 80333c4: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 80333c6: 19a4 adds r4, r4, r6
- 80333c8: b2a4 uxth r4, r4
- 80333ca: e000 b.n 80333ce <snmp_asn1_dec_u32t+0x5c>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 80333cc: 3501 adds r5, #1
- 80333ce: 1c4e adds r6, r1, #1
- * @note ASN coded integers are _always_ signed. E.g. +0xFFFF is coded
- * as 0x00,0xFF,0xFF. Note the leading sign octet. A positive value
- * of 0xFFFFFFFF is preceded with 0x00 and the length is 5 octets!!
- */
- err_t
- snmp_asn1_dec_u32t(struct pbuf *p, u16_t ofs, u16_t len, u32_t *value)
- 80333d0: 188a adds r2, r1, r2
- 80333d2: b2b6 uxth r6, r6
- 80333d4: b292 uxth r2, r2
- 80333d6: e010 b.n 80333fa <snmp_asn1_dec_u32t+0x88>
- }
- /* OR octets with value */
- while (len > 1)
- {
- len--;
- *value |= *msg_ptr;
- 80333d8: 7829 ldrb r1, [r5, #0]
- 80333da: 430f orrs r7, r1
- *value <<= 8;
- 80333dc: 023f lsls r7, r7, #8
- ofs += 1;
- if (ofs >= plen)
- 80333de: 42a6 cmp r6, r4
- /* OR octets with value */
- while (len > 1)
- {
- len--;
- *value |= *msg_ptr;
- *value <<= 8;
- 80333e0: 601f str r7, [r3, #0]
- ofs += 1;
- if (ofs >= plen)
- 80333e2: d307 bcc.n 80333f4 <snmp_asn1_dec_u32t+0x82>
- {
- /* next octet in next pbuf */
- p = p->next;
- 80333e4: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 80333e6: 2800 cmp r0, #0
- 80333e8: d0d5 beq.n 8033396 <snmp_asn1_dec_u32t+0x24>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 80333ea: 8941 ldrh r1, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 80333ec: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 80333ee: 1864 adds r4, r4, r1
- 80333f0: b2a4 uxth r4, r4
- 80333f2: e000 b.n 80333f6 <snmp_asn1_dec_u32t+0x84>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 80333f4: 3501 adds r5, #1
- 80333f6: 3601 adds r6, #1
- 80333f8: b2b6 uxth r6, r6
- msg_ptr++;
- }
- }
- }
- /* OR octets with value */
- while (len > 1)
- 80333fa: 4296 cmp r6, r2
- 80333fc: 681f ldr r7, [r3, #0]
- 80333fe: d1eb bne.n 80333d8 <snmp_asn1_dec_u32t+0x66>
- {
- /* next octet in same pbuf */
- msg_ptr++;
- }
- }
- *value |= *msg_ptr;
- 8033400: 782a ldrb r2, [r5, #0]
- 8033402: 4317 orrs r7, r2
- 8033404: 601f str r7, [r3, #0]
- return ERR_OK;
- 8033406: 2000 movs r0, #0
- 8033408: e004 b.n 8033414 <snmp_asn1_dec_u32t+0xa2>
- else
- {
- return ERR_ARG;
- }
- }
- p = p->next;
- 803340a: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 803340c: 4625 mov r5, r4
- {
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- while (p != NULL)
- 803340e: 2800 cmp r0, #0
- 8033410: d1b3 bne.n 803337a <snmp_asn1_dec_u32t+0x8>
- 8033412: e7c0 b.n 8033396 <snmp_asn1_dec_u32t+0x24>
- }
- p = p->next;
- }
- /* p == NULL, ofs >= plen */
- return ERR_ARG;
- }
- 8033414: b240 sxtb r0, r0
- 8033416: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 0803341a <snmp_asn1_dec_s32t>:
- *
- * @note ASN coded integers are _always_ signed!
- */
- err_t
- snmp_asn1_dec_s32t(struct pbuf *p, u16_t ofs, u16_t len, s32_t *value)
- {
- 803341a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- #if BYTE_ORDER == BIG_ENDIAN
- u8_t *lsb_ptr = (u8_t*)value + sizeof(s32_t) - 1;
- #endif
- u8_t sign;
- plen = 0;
- 803341e: 2500 movs r5, #0
- while (p != NULL)
- 8033420: e04e b.n 80334c0 <snmp_asn1_dec_s32t+0xa6>
- {
- base = plen;
- plen += p->len;
- 8033422: 8944 ldrh r4, [r0, #10]
- 8033424: 192c adds r4, r5, r4
- 8033426: b2a4 uxth r4, r4
- if (ofs < plen)
- 8033428: 42a1 cmp r1, r4
- 803342a: d247 bcs.n 80334bc <snmp_asn1_dec_s32t+0xa2>
- {
- msg_ptr = (u8_t*)p->payload;
- 803342c: 6847 ldr r7, [r0, #4]
- msg_ptr += ofs - base;
- if ((len > 0) && (len < 5))
- 803342e: f102 3cff add.w ip, r2, #4294967295
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- 8033432: 1b4e subs r6, r1, r5
- if ((len > 0) && (len < 5))
- 8033434: f1bc 0f03 cmp.w ip, #3
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- 8033438: eb07 0506 add.w r5, r7, r6
- if ((len > 0) && (len < 5))
- 803343c: d901 bls.n 8033442 <snmp_asn1_dec_s32t+0x28>
- }
- return ERR_OK;
- }
- else
- {
- return ERR_ARG;
- 803343e: 20f2 movs r0, #242 ; 0xf2
- 8033440: e041 b.n 80334c6 <snmp_asn1_dec_s32t+0xac>
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- if ((len > 0) && (len < 5))
- {
- if (*msg_ptr & 0x80)
- 8033442: 57be ldrsb r6, [r7, r6]
- 8033444: 2e00 cmp r6, #0
- 8033446: da0b bge.n 8033460 <snmp_asn1_dec_s32t+0x46>
- {
- /* negative, start from -1 */
- *value = -1;
- 8033448: f04f 36ff mov.w r6, #4294967295
- 803344c: 601e str r6, [r3, #0]
- sign = 1;
- 803344e: 2601 movs r6, #1
- 8033450: f101 0c01 add.w ip, r1, #1
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode
- *
- * @note ASN coded integers are _always_ signed!
- */
- err_t
- snmp_asn1_dec_s32t(struct pbuf *p, u16_t ofs, u16_t len, s32_t *value)
- 8033454: 1852 adds r2, r2, r1
- 8033456: fa1f fc8c uxth.w ip, ip
- 803345a: b292 uxth r2, r2
- len--;
- if (sign)
- {
- *lsb_ptr &= *msg_ptr;
- *value <<= 8;
- *lsb_ptr |= 255;
- 803345c: 21ff movs r1, #255 ; 0xff
- 803345e: e022 b.n 80334a6 <snmp_asn1_dec_s32t+0x8c>
- sign = 1;
- }
- else
- {
- /* positive, start from 0 */
- *value = 0;
- 8033460: 2600 movs r6, #0
- 8033462: 601e str r6, [r3, #0]
- 8033464: e7f4 b.n 8033450 <snmp_asn1_dec_s32t+0x36>
- 8033466: f895 8000 ldrb.w r8, [r5]
- }
- /* OR/AND octets with value */
- while (len > 1)
- {
- len--;
- if (sign)
- 803346a: b13e cbz r6, 803347c <snmp_asn1_dec_s32t+0x62>
- {
- *lsb_ptr &= *msg_ptr;
- 803346c: ea08 0707 and.w r7, r8, r7
- 8033470: 701f strb r7, [r3, #0]
- *value <<= 8;
- 8033472: 681f ldr r7, [r3, #0]
- 8033474: 023f lsls r7, r7, #8
- 8033476: 601f str r7, [r3, #0]
- *lsb_ptr |= 255;
- 8033478: 7019 strb r1, [r3, #0]
- 803347a: e005 b.n 8033488 <snmp_asn1_dec_s32t+0x6e>
- }
- else
- {
- *lsb_ptr |= *msg_ptr;
- 803347c: ea48 0707 orr.w r7, r8, r7
- 8033480: 701f strb r7, [r3, #0]
- *value <<= 8;
- 8033482: 681f ldr r7, [r3, #0]
- 8033484: 023f lsls r7, r7, #8
- 8033486: 601f str r7, [r3, #0]
- }
- ofs += 1;
- if (ofs >= plen)
- 8033488: 45a4 cmp ip, r4
- 803348a: d307 bcc.n 803349c <snmp_asn1_dec_s32t+0x82>
- {
- /* next octet in next pbuf */
- p = p->next;
- 803348c: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 803348e: 2800 cmp r0, #0
- 8033490: d0d5 beq.n 803343e <snmp_asn1_dec_s32t+0x24>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 8033492: 8947 ldrh r7, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 8033494: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 8033496: 19e4 adds r4, r4, r7
- 8033498: b2a4 uxth r4, r4
- 803349a: e000 b.n 803349e <snmp_asn1_dec_s32t+0x84>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 803349c: 3501 adds r5, #1
- 803349e: f10c 0c01 add.w ip, ip, #1
- 80334a2: fa1f fc8c uxth.w ip, ip
- /* positive, start from 0 */
- *value = 0;
- sign = 0;
- }
- /* OR/AND octets with value */
- while (len > 1)
- 80334a6: 4594 cmp ip, r2
- 80334a8: 781f ldrb r7, [r3, #0]
- 80334aa: d1dc bne.n 8033466 <snmp_asn1_dec_s32t+0x4c>
- 80334ac: 782a ldrb r2, [r5, #0]
- {
- /* next octet in same pbuf */
- msg_ptr++;
- }
- }
- if (sign)
- 80334ae: b11e cbz r6, 80334b8 <snmp_asn1_dec_s32t+0x9e>
- {
- *lsb_ptr &= *msg_ptr;
- 80334b0: 4017 ands r7, r2
- 80334b2: 701f strb r7, [r3, #0]
- }
- else
- {
- *lsb_ptr |= *msg_ptr;
- }
- return ERR_OK;
- 80334b4: 2000 movs r0, #0
- 80334b6: e006 b.n 80334c6 <snmp_asn1_dec_s32t+0xac>
- {
- *lsb_ptr &= *msg_ptr;
- }
- else
- {
- *lsb_ptr |= *msg_ptr;
- 80334b8: 4317 orrs r7, r2
- 80334ba: e7fa b.n 80334b2 <snmp_asn1_dec_s32t+0x98>
- else
- {
- return ERR_ARG;
- }
- }
- p = p->next;
- 80334bc: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 80334be: 4625 mov r5, r4
- u8_t *lsb_ptr = (u8_t*)value + sizeof(s32_t) - 1;
- #endif
- u8_t sign;
- plen = 0;
- while (p != NULL)
- 80334c0: 2800 cmp r0, #0
- 80334c2: d1ae bne.n 8033422 <snmp_asn1_dec_s32t+0x8>
- 80334c4: e7bb b.n 803343e <snmp_asn1_dec_s32t+0x24>
- }
- p = p->next;
- }
- /* p == NULL, ofs >= plen */
- return ERR_ARG;
- }
- 80334c6: b240 sxtb r0, r0
- 80334c8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 080334cc <snmp_asn1_dec_oid>:
- * @param oid return object identifier struct
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode
- */
- err_t
- snmp_asn1_dec_oid(struct pbuf *p, u16_t ofs, u16_t len, struct snmp_obj_id *oid)
- {
- 80334cc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- s32_t *oid_ptr;
- plen = 0;
- 80334d0: 2600 movs r6, #0
- while (p != NULL)
- 80334d2: e08d b.n 80335f0 <snmp_asn1_dec_oid+0x124>
- {
- base = plen;
- plen += p->len;
- 80334d4: 8944 ldrh r4, [r0, #10]
- 80334d6: 1934 adds r4, r6, r4
- 80334d8: b2a4 uxth r4, r4
- if (ofs < plen)
- 80334da: 42a1 cmp r1, r4
- 80334dc: f080 8086 bcs.w 80335ec <snmp_asn1_dec_oid+0x120>
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- oid->len = 0;
- 80334e0: f04f 0800 mov.w r8, #0
- {
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- 80334e4: 6847 ldr r7, [r0, #4]
- msg_ptr += ofs - base;
- oid->len = 0;
- 80334e6: f883 8000 strb.w r8, [r3]
- oid_ptr = &oid->id[0];
- if (len > 0)
- 80334ea: b90a cbnz r2, 80334f0 <snmp_asn1_dec_oid+0x24>
- }
- else
- {
- /* accepting zero length identifiers e.g. for
- getnext operation. uncommon but valid */
- return ERR_OK;
- 80334ec: 2000 movs r0, #0
- 80334ee: e083 b.n 80335f8 <snmp_asn1_dec_oid+0x12c>
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- 80334f0: 1b8e subs r6, r1, r6
- 80334f2: 19bd adds r5, r7, r6
- oid->len = 0;
- oid_ptr = &oid->id[0];
- if (len > 0)
- {
- /* first compressed octet */
- if (*msg_ptr == 0x2B)
- 80334f4: f817 c006 ldrb.w ip, [r7, r6]
- 80334f8: f1bc 0f2b cmp.w ip, #43 ; 0x2b
- 80334fc: d103 bne.n 8033506 <snmp_asn1_dec_oid+0x3a>
- {
- /* (most) common case 1.3 (iso.org) */
- *oid_ptr = 1;
- 80334fe: 2601 movs r6, #1
- 8033500: 605e str r6, [r3, #4]
- oid_ptr++;
- *oid_ptr = 3;
- 8033502: 2603 movs r6, #3
- 8033504: e016 b.n 8033534 <snmp_asn1_dec_oid+0x68>
- oid_ptr++;
- }
- else if (*msg_ptr < 40)
- 8033506: f1bc 0f27 cmp.w ip, #39 ; 0x27
- 803350a: d803 bhi.n 8033514 <snmp_asn1_dec_oid+0x48>
- {
- *oid_ptr = 0;
- 803350c: f8c3 8004 str.w r8, [r3, #4]
- oid_ptr++;
- *oid_ptr = *msg_ptr;
- 8033510: 5dbe ldrb r6, [r7, r6]
- 8033512: e00f b.n 8033534 <snmp_asn1_dec_oid+0x68>
- oid_ptr++;
- }
- else if (*msg_ptr < 80)
- 8033514: f1bc 0f4f cmp.w ip, #79 ; 0x4f
- 8033518: d806 bhi.n 8033528 <snmp_asn1_dec_oid+0x5c>
- {
- *oid_ptr = 1;
- 803351a: f04f 0c01 mov.w ip, #1
- 803351e: f8c3 c004 str.w ip, [r3, #4]
- oid_ptr++;
- *oid_ptr = (*msg_ptr) - 40;
- 8033522: 5dbe ldrb r6, [r7, r6]
- 8033524: 3e28 subs r6, #40 ; 0x28
- 8033526: e005 b.n 8033534 <snmp_asn1_dec_oid+0x68>
- oid_ptr++;
- }
- else
- {
- *oid_ptr = 2;
- 8033528: f04f 0c02 mov.w ip, #2
- 803352c: f8c3 c004 str.w ip, [r3, #4]
- oid_ptr++;
- *oid_ptr = (*msg_ptr) - 80;
- 8033530: 5dbe ldrb r6, [r7, r6]
- 8033532: 3e50 subs r6, #80 ; 0x50
- {
- /* accepting zero length identifiers e.g. for
- getnext operation. uncommon but valid */
- return ERR_OK;
- }
- len--;
- 8033534: 3a01 subs r2, #1
- *oid_ptr = 2;
- oid_ptr++;
- *oid_ptr = (*msg_ptr) - 80;
- oid_ptr++;
- }
- oid->len = 2;
- 8033536: 2702 movs r7, #2
- {
- /* accepting zero length identifiers e.g. for
- getnext operation. uncommon but valid */
- return ERR_OK;
- }
- len--;
- 8033538: b292 uxth r2, r2
- }
- else
- {
- *oid_ptr = 2;
- oid_ptr++;
- *oid_ptr = (*msg_ptr) - 80;
- 803353a: 609e str r6, [r3, #8]
- oid_ptr++;
- }
- oid->len = 2;
- 803353c: 701f strb r7, [r3, #0]
- else
- {
- *oid_ptr = 2;
- oid_ptr++;
- *oid_ptr = (*msg_ptr) - 80;
- oid_ptr++;
- 803353e: f103 060c add.w r6, r3, #12
- /* accepting zero length identifiers e.g. for
- getnext operation. uncommon but valid */
- return ERR_OK;
- }
- len--;
- if (len > 0)
- 8033542: 2a00 cmp r2, #0
- 8033544: d04b beq.n 80335de <snmp_asn1_dec_oid+0x112>
- {
- ofs += 1;
- 8033546: 3101 adds r1, #1
- 8033548: b289 uxth r1, r1
- if (ofs >= plen)
- 803354a: 42a1 cmp r1, r4
- 803354c: d308 bcc.n 8033560 <snmp_asn1_dec_oid+0x94>
- {
- /* next octet in next pbuf */
- p = p->next;
- 803354e: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 8033550: b908 cbnz r0, 8033556 <snmp_asn1_dec_oid+0x8a>
- 8033552: 20f2 movs r0, #242 ; 0xf2
- 8033554: e050 b.n 80335f8 <snmp_asn1_dec_oid+0x12c>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 8033556: 8947 ldrh r7, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 8033558: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 803355a: 19e4 adds r4, r4, r7
- 803355c: b2a4 uxth r4, r4
- 803355e: e03e b.n 80335de <snmp_asn1_dec_oid+0x112>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 8033560: 3501 adds r5, #1
- 8033562: e03c b.n 80335de <snmp_asn1_dec_oid+0x112>
- }
- }
- while ((len > 0) && (oid->len < LWIP_SNMP_OBJ_ID_LEN))
- {
- /* sub-identifier uses multiple octets */
- if (*msg_ptr & 0x80)
- 8033564: 782f ldrb r7, [r5, #0]
- 8033566: f017 0f80 tst.w r7, #128 ; 0x80
- 803356a: d023 beq.n 80335b4 <snmp_asn1_dec_oid+0xe8>
- 803356c: e014 b.n 8033598 <snmp_asn1_dec_oid+0xcc>
- while ((*msg_ptr & 0x80) && (len > 1))
- {
- len--;
- sub_id = (sub_id << 7) + (*msg_ptr & ~0x80);
- ofs += 1;
- 803356e: 3101 adds r1, #1
- 8033570: b289 uxth r1, r1
- {
- s32_t sub_id = 0;
- while ((*msg_ptr & 0x80) && (len > 1))
- {
- len--;
- 8033572: 3a01 subs r2, #1
- sub_id = (sub_id << 7) + (*msg_ptr & ~0x80);
- 8033574: f02c 0c80 bic.w ip, ip, #128 ; 0x80
- ofs += 1;
- if (ofs >= plen)
- 8033578: 42a1 cmp r1, r4
- {
- s32_t sub_id = 0;
- while ((*msg_ptr & 0x80) && (len > 1))
- {
- len--;
- 803357a: b292 uxth r2, r2
- sub_id = (sub_id << 7) + (*msg_ptr & ~0x80);
- 803357c: eb0c 17c7 add.w r7, ip, r7, lsl #7
- ofs += 1;
- if (ofs >= plen)
- 8033580: d308 bcc.n 8033594 <snmp_asn1_dec_oid+0xc8>
- {
- /* next octet in next pbuf */
- p = p->next;
- 8033582: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 8033584: 2800 cmp r0, #0
- 8033586: d0e4 beq.n 8033552 <snmp_asn1_dec_oid+0x86>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 8033588: f8b0 c00a ldrh.w ip, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 803358c: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 803358e: 4464 add r4, ip
- 8033590: b2a4 uxth r4, r4
- 8033592: e002 b.n 803359a <snmp_asn1_dec_oid+0xce>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 8033594: 3501 adds r5, #1
- 8033596: e000 b.n 803359a <snmp_asn1_dec_oid+0xce>
- }
- }
- while ((len > 0) && (oid->len < LWIP_SNMP_OBJ_ID_LEN))
- {
- /* sub-identifier uses multiple octets */
- if (*msg_ptr & 0x80)
- 8033598: 2700 movs r7, #0
- {
- s32_t sub_id = 0;
- while ((*msg_ptr & 0x80) && (len > 1))
- 803359a: f895 c000 ldrb.w ip, [r5]
- 803359e: f01c 0f80 tst.w ip, #128 ; 0x80
- 80335a2: d02c beq.n 80335fe <snmp_asn1_dec_oid+0x132>
- 80335a4: 2a01 cmp r2, #1
- 80335a6: d1e2 bne.n 803356e <snmp_asn1_dec_oid+0xa2>
- 80335a8: e009 b.n 80335be <snmp_asn1_dec_oid+0xf2>
- }
- }
- if (!(*msg_ptr & 0x80) && (len > 0))
- {
- /* last octet sub-identifier */
- len--;
- 80335aa: 3a01 subs r2, #1
- 80335ac: b292 uxth r2, r2
- sub_id = (sub_id << 7) + *msg_ptr;
- 80335ae: eb0c 17c7 add.w r7, ip, r7, lsl #7
- 80335b2: e001 b.n 80335b8 <snmp_asn1_dec_oid+0xec>
- }
- }
- else
- {
- /* !(*msg_ptr & 0x80) sub-identifier uses single octet */
- len--;
- 80335b4: 3a01 subs r2, #1
- 80335b6: b292 uxth r2, r2
- *oid_ptr = *msg_ptr;
- 80335b8: f846 7c04 str.w r7, [r6, #-4]
- }
- if (len > 0)
- 80335bc: b162 cbz r2, 80335d8 <snmp_asn1_dec_oid+0x10c>
- {
- /* remaining oid bytes available ... */
- ofs += 1;
- 80335be: 3101 adds r1, #1
- 80335c0: b289 uxth r1, r1
- if (ofs >= plen)
- 80335c2: 42a1 cmp r1, r4
- 80335c4: d307 bcc.n 80335d6 <snmp_asn1_dec_oid+0x10a>
- {
- /* next octet in next pbuf */
- p = p->next;
- 80335c6: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 80335c8: 2800 cmp r0, #0
- 80335ca: d0c2 beq.n 8033552 <snmp_asn1_dec_oid+0x86>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 80335cc: 8947 ldrh r7, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 80335ce: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 80335d0: 19e4 adds r4, r4, r7
- 80335d2: b2a4 uxth r4, r4
- 80335d4: e000 b.n 80335d8 <snmp_asn1_dec_oid+0x10c>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 80335d6: 3501 adds r5, #1
- }
- }
- oid_ptr++;
- oid->len++;
- 80335d8: 781f ldrb r7, [r3, #0]
- 80335da: 3701 adds r7, #1
- 80335dc: 701f strb r7, [r3, #0]
- 80335de: 3604 adds r6, #4
- {
- /* next octet in same pbuf */
- msg_ptr++;
- }
- }
- while ((len > 0) && (oid->len < LWIP_SNMP_OBJ_ID_LEN))
- 80335e0: 2a00 cmp r2, #0
- 80335e2: d083 beq.n 80334ec <snmp_asn1_dec_oid+0x20>
- 80335e4: 781f ldrb r7, [r3, #0]
- 80335e6: 2f1f cmp r7, #31
- 80335e8: d9bc bls.n 8033564 <snmp_asn1_dec_oid+0x98>
- 80335ea: e7b2 b.n 8033552 <snmp_asn1_dec_oid+0x86>
- /* len > 0, oid->len == LWIP_SNMP_OBJ_ID_LEN or malformed encoding */
- return ERR_ARG;
- }
- }
- p = p->next;
- 80335ec: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 80335ee: 4626 mov r6, r4
- u16_t plen, base;
- u8_t *msg_ptr;
- s32_t *oid_ptr;
- plen = 0;
- while (p != NULL)
- 80335f0: 2800 cmp r0, #0
- 80335f2: f47f af6f bne.w 80334d4 <snmp_asn1_dec_oid+0x8>
- 80335f6: e7ac b.n 8033552 <snmp_asn1_dec_oid+0x86>
- 80335f8: b240 sxtb r0, r0
- 80335fa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- {
- /* next octet in same pbuf */
- msg_ptr++;
- }
- }
- if (!(*msg_ptr & 0x80) && (len > 0))
- 80335fe: 2a00 cmp r2, #0
- 8033600: d1d3 bne.n 80335aa <snmp_asn1_dec_oid+0xde>
- 8033602: e7e9 b.n 80335d8 <snmp_asn1_dec_oid+0x10c>
- 08033604 <snmp_asn1_dec_raw>:
- * @param raw return raw bytes
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode
- */
- err_t
- snmp_asn1_dec_raw(struct pbuf *p, u16_t ofs, u16_t len, u16_t raw_len, u8_t *raw)
- {
- 8033604: b5f0 push {r4, r5, r6, r7, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- if (len > 0)
- 8033606: 2a00 cmp r2, #0
- 8033608: d12d bne.n 8033666 <snmp_asn1_dec_raw+0x62>
- 803360a: e027 b.n 803365c <snmp_asn1_dec_raw+0x58>
- {
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 803360c: 8944 ldrh r4, [r0, #10]
- 803360e: 1934 adds r4, r6, r4
- 8033610: b2a4 uxth r4, r4
- if (ofs < plen)
- 8033612: 42a1 cmp r1, r4
- 8033614: d224 bcs.n 8033660 <snmp_asn1_dec_raw+0x5c>
- {
- msg_ptr = (u8_t*)p->payload;
- 8033616: 6847 ldr r7, [r0, #4]
- msg_ptr += ofs - base;
- 8033618: 1b8d subs r5, r1, r6
- if (raw_len >= len)
- 803361a: 4293 cmp r3, r2
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- 803361c: 443d add r5, r7
- if (raw_len >= len)
- 803361e: d305 bcc.n 803362c <snmp_asn1_dec_raw+0x28>
- 8033620: 9b05 ldr r3, [sp, #20]
- * @param raw_len length of the raw return value
- * @param raw return raw bytes
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode
- */
- err_t
- snmp_asn1_dec_raw(struct pbuf *p, u16_t ofs, u16_t len, u16_t raw_len, u8_t *raw)
- 8033622: b29e uxth r6, r3
- 8033624: 18b2 adds r2, r6, r2
- 8033626: b292 uxth r2, r2
- 8033628: 1b89 subs r1, r1, r6
- 803362a: e011 b.n 8033650 <snmp_asn1_dec_raw+0x4c>
- return ERR_OK;
- }
- else
- {
- /* raw_len < len, not enough dst space */
- return ERR_ARG;
- 803362c: 20f2 movs r0, #242 ; 0xf2
- 803362e: e01e b.n 803366e <snmp_asn1_dec_raw+0x6a>
- {
- while (len > 1)
- {
- /* copy len - 1 octets */
- len--;
- *raw = *msg_ptr;
- 8033630: 782e ldrb r6, [r5, #0]
- 8033632: f803 6b01 strb.w r6, [r3], #1
- * @param raw_len length of the raw return value
- * @param raw return raw bytes
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) decode
- */
- err_t
- snmp_asn1_dec_raw(struct pbuf *p, u16_t ofs, u16_t len, u16_t raw_len, u8_t *raw)
- 8033636: 18ce adds r6, r1, r3
- /* copy len - 1 octets */
- len--;
- *raw = *msg_ptr;
- raw++;
- ofs += 1;
- if (ofs >= plen)
- 8033638: b2b6 uxth r6, r6
- 803363a: 42a6 cmp r6, r4
- 803363c: d307 bcc.n 803364e <snmp_asn1_dec_raw+0x4a>
- {
- /* next octet in next pbuf */
- p = p->next;
- 803363e: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 8033640: 2800 cmp r0, #0
- 8033642: d0f3 beq.n 803362c <snmp_asn1_dec_raw+0x28>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 8033644: 8946 ldrh r6, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 8033646: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 8033648: 19a4 adds r4, r4, r6
- 803364a: b2a4 uxth r4, r4
- 803364c: e000 b.n 8033650 <snmp_asn1_dec_raw+0x4c>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 803364e: 3501 adds r5, #1
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- if (raw_len >= len)
- {
- while (len > 1)
- 8033650: 1ad7 subs r7, r2, r3
- 8033652: b2bf uxth r7, r7
- 8033654: 2f01 cmp r7, #1
- 8033656: d8eb bhi.n 8033630 <snmp_asn1_dec_raw+0x2c>
- /* next octet in same pbuf */
- msg_ptr++;
- }
- }
- /* copy last octet */
- *raw = *msg_ptr;
- 8033658: 782a ldrb r2, [r5, #0]
- 803365a: 701a strb r2, [r3, #0]
- return ERR_OK;
- 803365c: 2000 movs r0, #0
- 803365e: e006 b.n 803366e <snmp_asn1_dec_raw+0x6a>
- {
- /* raw_len < len, not enough dst space */
- return ERR_ARG;
- }
- }
- p = p->next;
- 8033660: 6800 ldr r0, [r0, #0]
- {
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 8033662: 4626 mov r6, r4
- 8033664: e000 b.n 8033668 <snmp_asn1_dec_raw+0x64>
- snmp_asn1_dec_raw(struct pbuf *p, u16_t ofs, u16_t len, u16_t raw_len, u8_t *raw)
- {
- u16_t plen, base;
- u8_t *msg_ptr;
- if (len > 0)
- 8033666: 2600 movs r6, #0
- {
- plen = 0;
- while (p != NULL)
- 8033668: 2800 cmp r0, #0
- 803366a: d1cf bne.n 803360c <snmp_asn1_dec_raw+0x8>
- 803366c: e7de b.n 803362c <snmp_asn1_dec_raw+0x28>
- else
- {
- /* len == 0, empty string */
- return ERR_OK;
- }
- }
- 803366e: b240 sxtb r0, r0
- 8033670: bdf0 pop {r4, r5, r6, r7, pc}
- 08033672 <snmp_asn1_enc_length_cnt>:
- * @param octets_needed points to the return value
- */
- void
- snmp_asn1_enc_length_cnt(u16_t length, u8_t *octets_needed)
- {
- if (length < 0x80U)
- 8033672: 287f cmp r0, #127 ; 0x7f
- 8033674: d801 bhi.n 803367a <snmp_asn1_enc_length_cnt+0x8>
- {
- *octets_needed = 1;
- 8033676: 2301 movs r3, #1
- 8033678: e004 b.n 8033684 <snmp_asn1_enc_length_cnt+0x12>
- }
- else if (length < 0x100U)
- 803367a: 28ff cmp r0, #255 ; 0xff
- 803367c: d801 bhi.n 8033682 <snmp_asn1_enc_length_cnt+0x10>
- {
- *octets_needed = 2;
- 803367e: 2302 movs r3, #2
- 8033680: e000 b.n 8033684 <snmp_asn1_enc_length_cnt+0x12>
- }
- else
- {
- *octets_needed = 3;
- 8033682: 2303 movs r3, #3
- 8033684: 700b strb r3, [r1, #0]
- 8033686: 4770 bx lr
- 08033688 <snmp_asn1_enc_u32t_cnt>:
- * of 0xFFFFFFFF is preceded with 0x00 and the length is 5 octets!!
- */
- void
- snmp_asn1_enc_u32t_cnt(u32_t value, u16_t *octets_needed)
- {
- if (value < 0x80UL)
- 8033688: 287f cmp r0, #127 ; 0x7f
- 803368a: d801 bhi.n 8033690 <snmp_asn1_enc_u32t_cnt+0x8>
- {
- *octets_needed = 1;
- 803368c: 2301 movs r3, #1
- 803368e: e00e b.n 80336ae <snmp_asn1_enc_u32t_cnt+0x26>
- }
- else if (value < 0x8000UL)
- 8033690: f5b0 4f00 cmp.w r0, #32768 ; 0x8000
- 8033694: d201 bcs.n 803369a <snmp_asn1_enc_u32t_cnt+0x12>
- {
- *octets_needed = 2;
- 8033696: 2302 movs r3, #2
- 8033698: e009 b.n 80336ae <snmp_asn1_enc_u32t_cnt+0x26>
- }
- else if (value < 0x800000UL)
- 803369a: f5b0 0f00 cmp.w r0, #8388608 ; 0x800000
- 803369e: d201 bcs.n 80336a4 <snmp_asn1_enc_u32t_cnt+0x1c>
- {
- *octets_needed = 3;
- 80336a0: 2303 movs r3, #3
- 80336a2: e004 b.n 80336ae <snmp_asn1_enc_u32t_cnt+0x26>
- }
- else if (value < 0x80000000UL)
- 80336a4: 2800 cmp r0, #0
- 80336a6: db01 blt.n 80336ac <snmp_asn1_enc_u32t_cnt+0x24>
- {
- *octets_needed = 4;
- 80336a8: 2304 movs r3, #4
- 80336aa: e000 b.n 80336ae <snmp_asn1_enc_u32t_cnt+0x26>
- }
- else
- {
- *octets_needed = 5;
- 80336ac: 2305 movs r3, #5
- 80336ae: 800b strh r3, [r1, #0]
- 80336b0: 4770 bx lr
- 080336b2 <snmp_asn1_enc_s32t_cnt>:
- void
- snmp_asn1_enc_s32t_cnt(s32_t value, u16_t *octets_needed)
- {
- if (value < 0)
- {
- value = ~value;
- 80336b2: 43c3 mvns r3, r0
- 80336b4: 4283 cmp r3, r0
- 80336b6: bfa8 it ge
- 80336b8: 4618 movge r0, r3
- }
- if (value < 0x80L)
- 80336ba: 287f cmp r0, #127 ; 0x7f
- 80336bc: dc01 bgt.n 80336c2 <snmp_asn1_enc_s32t_cnt+0x10>
- {
- *octets_needed = 1;
- 80336be: 2301 movs r3, #1
- 80336c0: e00a b.n 80336d8 <snmp_asn1_enc_s32t_cnt+0x26>
- }
- else if (value < 0x8000L)
- 80336c2: f5b0 4f00 cmp.w r0, #32768 ; 0x8000
- 80336c6: da01 bge.n 80336cc <snmp_asn1_enc_s32t_cnt+0x1a>
- {
- *octets_needed = 2;
- 80336c8: 2302 movs r3, #2
- 80336ca: e005 b.n 80336d8 <snmp_asn1_enc_s32t_cnt+0x26>
- }
- else if (value < 0x800000L)
- 80336cc: f5b0 0f00 cmp.w r0, #8388608 ; 0x800000
- 80336d0: da01 bge.n 80336d6 <snmp_asn1_enc_s32t_cnt+0x24>
- {
- *octets_needed = 3;
- 80336d2: 2303 movs r3, #3
- 80336d4: e000 b.n 80336d8 <snmp_asn1_enc_s32t_cnt+0x26>
- }
- else
- {
- *octets_needed = 4;
- 80336d6: 2304 movs r3, #4
- 80336d8: 800b strh r3, [r1, #0]
- 80336da: 4770 bx lr
- 080336dc <snmp_asn1_enc_oid_cnt>:
- {
- s32_t sub_id;
- u8_t cnt;
- cnt = 0;
- if (ident_len > 1)
- 80336dc: 2801 cmp r0, #1
- * @param ident points to object identifier array
- * @param octets_needed points to the return value
- */
- void
- snmp_asn1_enc_oid_cnt(u8_t ident_len, s32_t *ident, u16_t *octets_needed)
- {
- 80336de: b510 push {r4, lr}
- s32_t sub_id;
- u8_t cnt;
- cnt = 0;
- if (ident_len > 1)
- 80336e0: d904 bls.n 80336ec <snmp_asn1_enc_oid_cnt+0x10>
- {
- /* compressed prefix in one octet */
- cnt++;
- ident_len -= 2;
- 80336e2: 3802 subs r0, #2
- 80336e4: b2c0 uxtb r0, r0
- ident += 2;
- 80336e6: 3108 adds r1, #8
- cnt = 0;
- if (ident_len > 1)
- {
- /* compressed prefix in one octet */
- cnt++;
- 80336e8: 2301 movs r3, #1
- 80336ea: e000 b.n 80336ee <snmp_asn1_enc_oid_cnt+0x12>
- snmp_asn1_enc_oid_cnt(u8_t ident_len, s32_t *ident, u16_t *octets_needed)
- {
- s32_t sub_id;
- u8_t cnt;
- cnt = 0;
- 80336ec: 2300 movs r3, #0
- * @param ident_len object identifier array length
- * @param ident points to object identifier array
- * @param octets_needed points to the return value
- */
- void
- snmp_asn1_enc_oid_cnt(u8_t ident_len, s32_t *ident, u16_t *octets_needed)
- 80336ee: 3904 subs r1, #4
- 80336f0: e008 b.n 8033704 <snmp_asn1_enc_oid_cnt+0x28>
- ident_len -= 2;
- ident += 2;
- }
- while(ident_len > 0)
- {
- ident_len--;
- 80336f2: 3801 subs r0, #1
- sub_id = *ident;
- 80336f4: f851 4f04 ldr.w r4, [r1, #4]!
- ident_len -= 2;
- ident += 2;
- }
- while(ident_len > 0)
- {
- ident_len--;
- 80336f8: b2c0 uxtb r0, r0
- sub_id >>= 7;
- cnt++;
- while(sub_id > 0)
- {
- sub_id >>= 7;
- 80336fa: 11e4 asrs r4, r4, #7
- cnt++;
- 80336fc: 3301 adds r3, #1
- ident_len--;
- sub_id = *ident;
- sub_id >>= 7;
- cnt++;
- while(sub_id > 0)
- 80336fe: 2c00 cmp r4, #0
- {
- sub_id >>= 7;
- cnt++;
- 8033700: b2db uxtb r3, r3
- ident_len--;
- sub_id = *ident;
- sub_id >>= 7;
- cnt++;
- while(sub_id > 0)
- 8033702: dcfa bgt.n 80336fa <snmp_asn1_enc_oid_cnt+0x1e>
- /* compressed prefix in one octet */
- cnt++;
- ident_len -= 2;
- ident += 2;
- }
- while(ident_len > 0)
- 8033704: 2800 cmp r0, #0
- 8033706: d1f4 bne.n 80336f2 <snmp_asn1_enc_oid_cnt+0x16>
- sub_id >>= 7;
- cnt++;
- }
- ident++;
- }
- *octets_needed = cnt;
- 8033708: 8013 strh r3, [r2, #0]
- 803370a: bd10 pop {r4, pc}
- 0803370c <snmp_asn1_enc_type>:
- * @param type input ASN1 type
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- */
- err_t
- snmp_asn1_enc_type(struct pbuf *p, u16_t ofs, u8_t type)
- {
- 803370c: b510 push {r4, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- 803370e: 2300 movs r3, #0
- while (p != NULL)
- 8033710: e00b b.n 803372a <snmp_asn1_enc_type+0x1e>
- {
- base = plen;
- plen += p->len;
- 8033712: 8944 ldrh r4, [r0, #10]
- 8033714: 191c adds r4, r3, r4
- 8033716: b2a4 uxth r4, r4
- if (ofs < plen)
- 8033718: 42a1 cmp r1, r4
- 803371a: d204 bcs.n 8033726 <snmp_asn1_enc_type+0x1a>
- {
- msg_ptr = (u8_t*)p->payload;
- 803371c: 6840 ldr r0, [r0, #4]
- msg_ptr += ofs - base;
- 803371e: 1acb subs r3, r1, r3
- *msg_ptr = type;
- 8033720: 54c2 strb r2, [r0, r3]
- return ERR_OK;
- 8033722: 2000 movs r0, #0
- 8033724: e004 b.n 8033730 <snmp_asn1_enc_type+0x24>
- }
- p = p->next;
- 8033726: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 8033728: 4623 mov r3, r4
- {
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- while (p != NULL)
- 803372a: 2800 cmp r0, #0
- 803372c: d1f1 bne.n 8033712 <snmp_asn1_enc_type+0x6>
- return ERR_OK;
- }
- p = p->next;
- }
- /* p == NULL, ofs >= plen */
- return ERR_ARG;
- 803372e: 20f2 movs r0, #242 ; 0xf2
- }
- 8033730: b240 sxtb r0, r0
- 8033732: bd10 pop {r4, pc}
- 08033734 <snmp_asn1_enc_length>:
- * @param length is the host order length to be encoded
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- */
- err_t
- snmp_asn1_enc_length(struct pbuf *p, u16_t ofs, u16_t length)
- {
- 8033734: b5f0 push {r4, r5, r6, r7, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- 8033736: 2400 movs r4, #0
- while (p != NULL)
- 8033738: e03f b.n 80337ba <snmp_asn1_enc_length+0x86>
- {
- base = plen;
- plen += p->len;
- 803373a: 8943 ldrh r3, [r0, #10]
- 803373c: 18e3 adds r3, r4, r3
- 803373e: b29b uxth r3, r3
- if (ofs < plen)
- 8033740: 4299 cmp r1, r3
- 8033742: d238 bcs.n 80337b6 <snmp_asn1_enc_length+0x82>
- {
- msg_ptr = (u8_t*)p->payload;
- 8033744: 6845 ldr r5, [r0, #4]
- msg_ptr += ofs - base;
- 8033746: 1b0c subs r4, r1, r4
- if (length < 0x80)
- 8033748: 2a7f cmp r2, #127 ; 0x7f
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- 803374a: eb05 0604 add.w r6, r5, r4
- if (length < 0x80)
- 803374e: d801 bhi.n 8033754 <snmp_asn1_enc_length+0x20>
- {
- *msg_ptr = (u8_t)length;
- 8033750: 552a strb r2, [r5, r4]
- 8033752: e02e b.n 80337b2 <snmp_asn1_enc_length+0x7e>
- return ERR_OK;
- }
- else if (length < 0x100)
- 8033754: 2aff cmp r2, #255 ; 0xff
- 8033756: f101 0701 add.w r7, r1, #1
- 803375a: d80d bhi.n 8033778 <snmp_asn1_enc_length+0x44>
- {
- *msg_ptr = 0x81;
- ofs += 1;
- if (ofs >= plen)
- 803375c: b2bf uxth r7, r7
- *msg_ptr = (u8_t)length;
- return ERR_OK;
- }
- else if (length < 0x100)
- {
- *msg_ptr = 0x81;
- 803375e: 2181 movs r1, #129 ; 0x81
- ofs += 1;
- if (ofs >= plen)
- 8033760: 429f cmp r7, r3
- *msg_ptr = (u8_t)length;
- return ERR_OK;
- }
- else if (length < 0x100)
- {
- *msg_ptr = 0x81;
- 8033762: 5529 strb r1, [r5, r4]
- ofs += 1;
- if (ofs >= plen)
- 8033764: d305 bcc.n 8033772 <snmp_asn1_enc_length+0x3e>
- {
- /* next octet in next pbuf */
- p = p->next;
- 8033766: 6803 ldr r3, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 8033768: b90b cbnz r3, 803376e <snmp_asn1_enc_length+0x3a>
- 803376a: 20f2 movs r0, #242 ; 0xf2
- 803376c: e028 b.n 80337c0 <snmp_asn1_enc_length+0x8c>
- msg_ptr = (u8_t*)p->payload;
- 803376e: 685e ldr r6, [r3, #4]
- 8033770: e000 b.n 8033774 <snmp_asn1_enc_length+0x40>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 8033772: 3601 adds r6, #1
- }
- *msg_ptr = (u8_t)length;
- 8033774: 7032 strb r2, [r6, #0]
- 8033776: e01c b.n 80337b2 <snmp_asn1_enc_length+0x7e>
- i = 2;
- while (i > 0)
- {
- i--;
- ofs += 1;
- if (ofs >= plen)
- 8033778: b2bf uxth r7, r7
- else
- {
- u8_t i;
- /* length >= 0x100 && length <= 0xFFFF */
- *msg_ptr = 0x82;
- 803377a: f04f 0c82 mov.w ip, #130 ; 0x82
- i = 2;
- while (i > 0)
- {
- i--;
- ofs += 1;
- if (ofs >= plen)
- 803377e: 429f cmp r7, r3
- else
- {
- u8_t i;
- /* length >= 0x100 && length <= 0xFFFF */
- *msg_ptr = 0x82;
- 8033780: f805 c004 strb.w ip, [r5, r4]
- i = 2;
- while (i > 0)
- {
- i--;
- ofs += 1;
- if (ofs >= plen)
- 8033784: d201 bcs.n 803378a <snmp_asn1_enc_length+0x56>
- plen += p->len;
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 8033786: 1c74 adds r4, r6, #1
- 8033788: e006 b.n 8033798 <snmp_asn1_enc_length+0x64>
- i--;
- ofs += 1;
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- 803378a: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 803378c: 2800 cmp r0, #0
- 803378e: d0ec beq.n 803376a <snmp_asn1_enc_length+0x36>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 8033790: 8945 ldrh r5, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 8033792: 6844 ldr r4, [r0, #4]
- plen += p->len;
- 8033794: 195b adds r3, r3, r5
- 8033796: b29b uxth r3, r3
- *msg_ptr = 0x82;
- i = 2;
- while (i > 0)
- {
- i--;
- ofs += 1;
- 8033798: 3102 adds r1, #2
- if (ofs >= plen)
- 803379a: b289 uxth r1, r1
- *msg_ptr = (u8_t)length;
- }
- else
- {
- /* most significant length octet */
- *msg_ptr = (u8_t)(length >> 8);
- 803379c: 0a15 lsrs r5, r2, #8
- i = 2;
- while (i > 0)
- {
- i--;
- ofs += 1;
- if (ofs >= plen)
- 803379e: 4299 cmp r1, r3
- *msg_ptr = (u8_t)length;
- }
- else
- {
- /* most significant length octet */
- *msg_ptr = (u8_t)(length >> 8);
- 80337a0: 7025 strb r5, [r4, #0]
- i = 2;
- while (i > 0)
- {
- i--;
- ofs += 1;
- if (ofs >= plen)
- 80337a2: d201 bcs.n 80337a8 <snmp_asn1_enc_length+0x74>
- plen += p->len;
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 80337a4: 3401 adds r4, #1
- 80337a6: e003 b.n 80337b0 <snmp_asn1_enc_length+0x7c>
- i--;
- ofs += 1;
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- 80337a8: 6803 ldr r3, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 80337aa: 2b00 cmp r3, #0
- 80337ac: d0dd beq.n 803376a <snmp_asn1_enc_length+0x36>
- msg_ptr = (u8_t*)p->payload;
- 80337ae: 685c ldr r4, [r3, #4]
- msg_ptr++;
- }
- if (i == 0)
- {
- /* least significant length octet */
- *msg_ptr = (u8_t)length;
- 80337b0: 7022 strb r2, [r4, #0]
- {
- /* most significant length octet */
- *msg_ptr = (u8_t)(length >> 8);
- }
- }
- return ERR_OK;
- 80337b2: 2000 movs r0, #0
- 80337b4: e004 b.n 80337c0 <snmp_asn1_enc_length+0x8c>
- }
- }
- p = p->next;
- 80337b6: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 80337b8: 461c mov r4, r3
- {
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- while (p != NULL)
- 80337ba: 2800 cmp r0, #0
- 80337bc: d1bd bne.n 803373a <snmp_asn1_enc_length+0x6>
- 80337be: e7d4 b.n 803376a <snmp_asn1_enc_length+0x36>
- }
- p = p->next;
- }
- /* p == NULL, ofs >= plen */
- return ERR_ARG;
- }
- 80337c0: b240 sxtb r0, r0
- 80337c2: bdf0 pop {r4, r5, r6, r7, pc}
- 080337c4 <snmp_asn1_enc_u32t>:
- *
- * @see snmp_asn1_enc_u32t_cnt()
- */
- err_t
- snmp_asn1_enc_u32t(struct pbuf *p, u16_t ofs, u16_t octets_needed, u32_t value)
- {
- 80337c4: b5f0 push {r4, r5, r6, r7, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- 80337c6: 2500 movs r5, #0
- while (p != NULL)
- 80337c8: e037 b.n 803383a <snmp_asn1_enc_u32t+0x76>
- {
- base = plen;
- plen += p->len;
- 80337ca: 8944 ldrh r4, [r0, #10]
- 80337cc: 192c adds r4, r5, r4
- 80337ce: b2a4 uxth r4, r4
- if (ofs < plen)
- 80337d0: 42a1 cmp r1, r4
- 80337d2: d230 bcs.n 8033836 <snmp_asn1_enc_u32t+0x72>
- {
- msg_ptr = (u8_t*)p->payload;
- 80337d4: 6847 ldr r7, [r0, #4]
- msg_ptr += ofs - base;
- 80337d6: 1b4e subs r6, r1, r5
- if (octets_needed == 5)
- 80337d8: 2a05 cmp r2, #5
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- 80337da: eb07 0506 add.w r5, r7, r6
- if (octets_needed == 5)
- 80337de: d110 bne.n 8033802 <snmp_asn1_enc_u32t+0x3e>
- {
- /* not enough bits in 'value' add leading 0x00 */
- octets_needed--;
- *msg_ptr = 0x00;
- ofs += 1;
- 80337e0: 3101 adds r1, #1
- 80337e2: b289 uxth r1, r1
- if (octets_needed == 5)
- {
- /* not enough bits in 'value' add leading 0x00 */
- octets_needed--;
- *msg_ptr = 0x00;
- 80337e4: 2200 movs r2, #0
- ofs += 1;
- if (ofs >= plen)
- 80337e6: 42a1 cmp r1, r4
- if (octets_needed == 5)
- {
- /* not enough bits in 'value' add leading 0x00 */
- octets_needed--;
- *msg_ptr = 0x00;
- 80337e8: 55ba strb r2, [r7, r6]
- ofs += 1;
- if (ofs >= plen)
- 80337ea: d308 bcc.n 80337fe <snmp_asn1_enc_u32t+0x3a>
- {
- /* next octet in next pbuf */
- p = p->next;
- 80337ec: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 80337ee: b908 cbnz r0, 80337f4 <snmp_asn1_enc_u32t+0x30>
- 80337f0: 20f2 movs r0, #242 ; 0xf2
- 80337f2: e025 b.n 8033840 <snmp_asn1_enc_u32t+0x7c>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 80337f4: 8942 ldrh r2, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 80337f6: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 80337f8: 18a4 adds r4, r4, r2
- 80337fa: b2a4 uxth r4, r4
- 80337fc: e000 b.n 8033800 <snmp_asn1_enc_u32t+0x3c>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 80337fe: 3501 adds r5, #1
- msg_ptr += ofs - base;
- if (octets_needed == 5)
- {
- /* not enough bits in 'value' add leading 0x00 */
- octets_needed--;
- 8033800: 2204 movs r2, #4
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- *
- * @see snmp_asn1_enc_u32t_cnt()
- */
- err_t
- snmp_asn1_enc_u32t(struct pbuf *p, u16_t ofs, u16_t octets_needed, u32_t value)
- 8033802: 1851 adds r1, r2, r1
- 8033804: e012 b.n 803382c <snmp_asn1_enc_u32t+0x68>
- msg_ptr++;
- }
- }
- while (octets_needed > 1)
- {
- octets_needed--;
- 8033806: 3a01 subs r2, #1
- 8033808: b292 uxth r2, r2
- *msg_ptr = (u8_t)(value >> (octets_needed << 3));
- 803380a: 00d6 lsls r6, r2, #3
- 803380c: fa23 f606 lsr.w r6, r3, r6
- 8033810: 702e strb r6, [r5, #0]
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- *
- * @see snmp_asn1_enc_u32t_cnt()
- */
- err_t
- snmp_asn1_enc_u32t(struct pbuf *p, u16_t ofs, u16_t octets_needed, u32_t value)
- 8033812: 1a8e subs r6, r1, r2
- while (octets_needed > 1)
- {
- octets_needed--;
- *msg_ptr = (u8_t)(value >> (octets_needed << 3));
- ofs += 1;
- if (ofs >= plen)
- 8033814: b2b6 uxth r6, r6
- 8033816: 42a6 cmp r6, r4
- 8033818: d307 bcc.n 803382a <snmp_asn1_enc_u32t+0x66>
- {
- /* next octet in next pbuf */
- p = p->next;
- 803381a: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 803381c: 2800 cmp r0, #0
- 803381e: d0e7 beq.n 80337f0 <snmp_asn1_enc_u32t+0x2c>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 8033820: 8946 ldrh r6, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 8033822: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 8033824: 19a4 adds r4, r4, r6
- 8033826: b2a4 uxth r4, r4
- 8033828: e000 b.n 803382c <snmp_asn1_enc_u32t+0x68>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 803382a: 3501 adds r5, #1
- {
- /* next octet in same pbuf */
- msg_ptr++;
- }
- }
- while (octets_needed > 1)
- 803382c: 2a01 cmp r2, #1
- 803382e: d8ea bhi.n 8033806 <snmp_asn1_enc_u32t+0x42>
- /* next octet in same pbuf */
- msg_ptr++;
- }
- }
- /* (only) one least significant octet */
- *msg_ptr = (u8_t)value;
- 8033830: 702b strb r3, [r5, #0]
- return ERR_OK;
- 8033832: 2000 movs r0, #0
- 8033834: e004 b.n 8033840 <snmp_asn1_enc_u32t+0x7c>
- }
- p = p->next;
- 8033836: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 8033838: 4625 mov r5, r4
- {
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- while (p != NULL)
- 803383a: 2800 cmp r0, #0
- 803383c: d1c5 bne.n 80337ca <snmp_asn1_enc_u32t+0x6>
- 803383e: e7d7 b.n 80337f0 <snmp_asn1_enc_u32t+0x2c>
- }
- p = p->next;
- }
- /* p == NULL, ofs >= plen */
- return ERR_ARG;
- }
- 8033840: b240 sxtb r0, r0
- 8033842: bdf0 pop {r4, r5, r6, r7, pc}
- 08033844 <snmp_asn1_enc_s32t>:
- *
- * @see snmp_asn1_enc_s32t_cnt()
- */
- err_t
- snmp_asn1_enc_s32t(struct pbuf *p, u16_t ofs, u16_t octets_needed, s32_t value)
- {
- 8033844: b5f0 push {r4, r5, r6, r7, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- 8033846: 2600 movs r6, #0
- while (p != NULL)
- 8033848: e024 b.n 8033894 <snmp_asn1_enc_s32t+0x50>
- {
- base = plen;
- plen += p->len;
- 803384a: 8944 ldrh r4, [r0, #10]
- 803384c: 1934 adds r4, r6, r4
- 803384e: b2a4 uxth r4, r4
- if (ofs < plen)
- 8033850: 42a1 cmp r1, r4
- 8033852: d21d bcs.n 8033890 <snmp_asn1_enc_s32t+0x4c>
- {
- msg_ptr = (u8_t*)p->payload;
- 8033854: 6847 ldr r7, [r0, #4]
- msg_ptr += ofs - base;
- 8033856: 1b8d subs r5, r1, r6
- 8033858: 197d adds r5, r7, r5
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- *
- * @see snmp_asn1_enc_s32t_cnt()
- */
- err_t
- snmp_asn1_enc_s32t(struct pbuf *p, u16_t ofs, u16_t octets_needed, s32_t value)
- 803385a: 1851 adds r1, r2, r1
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- while (octets_needed > 1)
- 803385c: e013 b.n 8033886 <snmp_asn1_enc_s32t+0x42>
- {
- octets_needed--;
- 803385e: 3a01 subs r2, #1
- 8033860: b292 uxth r2, r2
- *msg_ptr = (u8_t)(value >> (octets_needed << 3));
- 8033862: 00d6 lsls r6, r2, #3
- 8033864: fa43 f606 asr.w r6, r3, r6
- 8033868: 702e strb r6, [r5, #0]
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- *
- * @see snmp_asn1_enc_s32t_cnt()
- */
- err_t
- snmp_asn1_enc_s32t(struct pbuf *p, u16_t ofs, u16_t octets_needed, s32_t value)
- 803386a: 1a8e subs r6, r1, r2
- while (octets_needed > 1)
- {
- octets_needed--;
- *msg_ptr = (u8_t)(value >> (octets_needed << 3));
- ofs += 1;
- if (ofs >= plen)
- 803386c: b2b6 uxth r6, r6
- 803386e: 42a6 cmp r6, r4
- 8033870: d308 bcc.n 8033884 <snmp_asn1_enc_s32t+0x40>
- {
- /* next octet in next pbuf */
- p = p->next;
- 8033872: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 8033874: b908 cbnz r0, 803387a <snmp_asn1_enc_s32t+0x36>
- 8033876: 20f2 movs r0, #242 ; 0xf2
- 8033878: e00f b.n 803389a <snmp_asn1_enc_s32t+0x56>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 803387a: 8946 ldrh r6, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 803387c: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 803387e: 19a4 adds r4, r4, r6
- 8033880: b2a4 uxth r4, r4
- 8033882: e000 b.n 8033886 <snmp_asn1_enc_s32t+0x42>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 8033884: 3501 adds r5, #1
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- while (octets_needed > 1)
- 8033886: 2a01 cmp r2, #1
- 8033888: d8e9 bhi.n 803385e <snmp_asn1_enc_s32t+0x1a>
- /* next octet in same pbuf */
- msg_ptr++;
- }
- }
- /* (only) one least significant octet */
- *msg_ptr = (u8_t)value;
- 803388a: 702b strb r3, [r5, #0]
- return ERR_OK;
- 803388c: 2000 movs r0, #0
- 803388e: e004 b.n 803389a <snmp_asn1_enc_s32t+0x56>
- }
- p = p->next;
- 8033890: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 8033892: 4626 mov r6, r4
- {
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- while (p != NULL)
- 8033894: 2800 cmp r0, #0
- 8033896: d1d8 bne.n 803384a <snmp_asn1_enc_s32t+0x6>
- 8033898: e7ed b.n 8033876 <snmp_asn1_enc_s32t+0x32>
- }
- p = p->next;
- }
- /* p == NULL, ofs >= plen */
- return ERR_ARG;
- }
- 803389a: b240 sxtb r0, r0
- 803389c: bdf0 pop {r4, r5, r6, r7, pc}
- 0803389e <snmp_asn1_enc_oid>:
- * @param ident points to object identifier array
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- */
- err_t
- snmp_asn1_enc_oid(struct pbuf *p, u16_t ofs, u8_t ident_len, s32_t *ident)
- {
- 803389e: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- 80338a2: 2500 movs r5, #0
- while (p != NULL)
- 80338a4: e068 b.n 8033978 <snmp_asn1_enc_oid+0xda>
- {
- base = plen;
- plen += p->len;
- 80338a6: 8944 ldrh r4, [r0, #10]
- 80338a8: 192c adds r4, r5, r4
- 80338aa: b2a4 uxth r4, r4
- if (ofs < plen)
- 80338ac: 42a1 cmp r1, r4
- 80338ae: d261 bcs.n 8033974 <snmp_asn1_enc_oid+0xd6>
- {
- msg_ptr = (u8_t*)p->payload;
- 80338b0: 6846 ldr r6, [r0, #4]
- msg_ptr += ofs - base;
- 80338b2: 1b4d subs r5, r1, r5
- if (ident_len > 1)
- 80338b4: 2a01 cmp r2, #1
- base = plen;
- plen += p->len;
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- 80338b6: eb06 0805 add.w r8, r6, r5
- if (ident_len > 1)
- 80338ba: d801 bhi.n 80338c0 <snmp_asn1_enc_oid+0x22>
- }
- else
- {
- /* @bug: allow empty varbinds for symmetry (we must decode them for getnext), allow partial compression?? */
- /* ident_len <= 1, at least we need zeroDotZero (0.0) (ident_len == 2) */
- return ERR_ARG;
- 80338bc: 20f2 movs r0, #242 ; 0xf2
- 80338be: e05e b.n 803397e <snmp_asn1_enc_oid+0xe0>
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- if (ident_len > 1)
- {
- if ((ident[0] == 1) && (ident[1] == 3))
- 80338c0: f8d3 c000 ldr.w ip, [r3]
- 80338c4: f1bc 0f01 cmp.w ip, #1
- 80338c8: d105 bne.n 80338d6 <snmp_asn1_enc_oid+0x38>
- 80338ca: 685f ldr r7, [r3, #4]
- 80338cc: 2f03 cmp r7, #3
- 80338ce: d102 bne.n 80338d6 <snmp_asn1_enc_oid+0x38>
- {
- /* compressed (most common) prefix .iso.org */
- *msg_ptr = 0x2b;
- 80338d0: 272b movs r7, #43 ; 0x2b
- 80338d2: 5577 strb r7, [r6, r5]
- 80338d4: e006 b.n 80338e4 <snmp_asn1_enc_oid+0x46>
- }
- else
- {
- /* calculate prefix */
- *msg_ptr = (u8_t)((ident[0] * 40) + ident[1]);
- 80338d6: 685f ldr r7, [r3, #4]
- 80338d8: f04f 0928 mov.w r9, #40 ; 0x28
- 80338dc: fb09 7c0c mla ip, r9, ip, r7
- 80338e0: f806 c005 strb.w ip, [r6, r5]
- }
- ofs += 1;
- 80338e4: 3101 adds r1, #1
- 80338e6: b289 uxth r1, r1
- if (ofs >= plen)
- 80338e8: 42a1 cmp r1, r4
- 80338ea: d307 bcc.n 80338fc <snmp_asn1_enc_oid+0x5e>
- {
- /* next octet in next pbuf */
- p = p->next;
- 80338ec: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 80338ee: 2800 cmp r0, #0
- 80338f0: d0e4 beq.n 80338bc <snmp_asn1_enc_oid+0x1e>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 80338f2: 8946 ldrh r6, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 80338f4: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 80338f6: 19a4 adds r4, r4, r6
- 80338f8: b2a4 uxth r4, r4
- 80338fa: e001 b.n 8033900 <snmp_asn1_enc_oid+0x62>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 80338fc: f108 0501 add.w r5, r8, #1
- }
- ident_len -= 2;
- 8033900: 3a02 subs r2, #2
- 8033902: b2d2 uxtb r2, r2
- * @param ident_len object identifier array length
- * @param ident points to object identifier array
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- */
- err_t
- snmp_asn1_enc_oid(struct pbuf *p, u16_t ofs, u8_t ident_len, s32_t *ident)
- 8033904: 3304 adds r3, #4
- {
- /* @bug: allow empty varbinds for symmetry (we must decode them for getnext), allow partial compression?? */
- /* ident_len <= 1, at least we need zeroDotZero (0.0) (ident_len == 2) */
- return ERR_ARG;
- }
- while (ident_len > 0)
- 8033906: e031 b.n 803396c <snmp_asn1_enc_oid+0xce>
- {
- s32_t sub_id;
- u8_t shift, tail;
- ident_len--;
- 8033908: 3a01 subs r2, #1
- sub_id = *ident;
- 803390a: f853 cf04 ldr.w ip, [r3, #4]!
- while (ident_len > 0)
- {
- s32_t sub_id;
- u8_t shift, tail;
- ident_len--;
- 803390e: b2d2 uxtb r2, r2
- sub_id = *ident;
- 8033910: 261c movs r6, #28
- tail = 0;
- 8033912: 2700 movs r7, #0
- shift = 28;
- while(shift > 0)
- {
- u8_t code;
- code = (u8_t)(sub_id >> shift);
- 8033914: fa4c f806 asr.w r8, ip, r6
- if ((code != 0) || (tail != 0))
- 8033918: f018 0fff tst.w r8, #255 ; 0xff
- 803391c: d100 bne.n 8033920 <snmp_asn1_enc_oid+0x82>
- 803391e: b18f cbz r7, 8033944 <snmp_asn1_enc_oid+0xa6>
- {
- tail = 1;
- *msg_ptr = code | 0x80;
- ofs += 1;
- 8033920: 3101 adds r1, #1
- 8033922: b289 uxth r1, r1
- code = (u8_t)(sub_id >> shift);
- if ((code != 0) || (tail != 0))
- {
- tail = 1;
- *msg_ptr = code | 0x80;
- 8033924: f048 0880 orr.w r8, r8, #128 ; 0x80
- ofs += 1;
- if (ofs >= plen)
- 8033928: 42a1 cmp r1, r4
- code = (u8_t)(sub_id >> shift);
- if ((code != 0) || (tail != 0))
- {
- tail = 1;
- *msg_ptr = code | 0x80;
- 803392a: f885 8000 strb.w r8, [r5]
- ofs += 1;
- if (ofs >= plen)
- 803392e: d307 bcc.n 8033940 <snmp_asn1_enc_oid+0xa2>
- {
- /* next octet in next pbuf */
- p = p->next;
- 8033930: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 8033932: 2800 cmp r0, #0
- 8033934: d0c2 beq.n 80338bc <snmp_asn1_enc_oid+0x1e>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 8033936: 8947 ldrh r7, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 8033938: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 803393a: 19e4 adds r4, r4, r7
- 803393c: b2a4 uxth r4, r4
- 803393e: e000 b.n 8033942 <snmp_asn1_enc_oid+0xa4>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 8033940: 3501 adds r5, #1
- u8_t code;
- code = (u8_t)(sub_id >> shift);
- if ((code != 0) || (tail != 0))
- {
- tail = 1;
- 8033942: 2701 movs r7, #1
- ident_len--;
- sub_id = *ident;
- tail = 0;
- shift = 28;
- while(shift > 0)
- 8033944: 3e07 subs r6, #7
- 8033946: d1e5 bne.n 8033914 <snmp_asn1_enc_oid+0x76>
- msg_ptr++;
- }
- }
- shift -= 7;
- }
- *msg_ptr = (u8_t)sub_id & 0x7F;
- 8033948: f00c 0c7f and.w ip, ip, #127 ; 0x7f
- 803394c: f885 c000 strb.w ip, [r5]
- if (ident_len > 0)
- 8033950: b172 cbz r2, 8033970 <snmp_asn1_enc_oid+0xd2>
- {
- ofs += 1;
- 8033952: 3101 adds r1, #1
- 8033954: b289 uxth r1, r1
- if (ofs >= plen)
- 8033956: 42a1 cmp r1, r4
- 8033958: d307 bcc.n 803396a <snmp_asn1_enc_oid+0xcc>
- {
- /* next octet in next pbuf */
- p = p->next;
- 803395a: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 803395c: 2800 cmp r0, #0
- 803395e: d0ad beq.n 80338bc <snmp_asn1_enc_oid+0x1e>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 8033960: 8946 ldrh r6, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 8033962: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 8033964: 19a4 adds r4, r4, r6
- 8033966: b2a4 uxth r4, r4
- 8033968: e000 b.n 803396c <snmp_asn1_enc_oid+0xce>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 803396a: 3501 adds r5, #1
- {
- /* @bug: allow empty varbinds for symmetry (we must decode them for getnext), allow partial compression?? */
- /* ident_len <= 1, at least we need zeroDotZero (0.0) (ident_len == 2) */
- return ERR_ARG;
- }
- while (ident_len > 0)
- 803396c: 2a00 cmp r2, #0
- 803396e: d1cb bne.n 8033908 <snmp_asn1_enc_oid+0x6a>
- }
- }
- /* proceed to next sub-identifier */
- ident++;
- }
- return ERR_OK;
- 8033970: 2000 movs r0, #0
- 8033972: e004 b.n 803397e <snmp_asn1_enc_oid+0xe0>
- }
- p = p->next;
- 8033974: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 8033976: 4625 mov r5, r4
- {
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- while (p != NULL)
- 8033978: 2800 cmp r0, #0
- 803397a: d194 bne.n 80338a6 <snmp_asn1_enc_oid+0x8>
- 803397c: e79e b.n 80338bc <snmp_asn1_enc_oid+0x1e>
- }
- p = p->next;
- }
- /* p == NULL, ofs >= plen */
- return ERR_ARG;
- }
- 803397e: b240 sxtb r0, r0
- 8033980: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
- 08033984 <snmp_asn1_enc_raw>:
- * @param raw points raw data
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- */
- err_t
- snmp_asn1_enc_raw(struct pbuf *p, u16_t ofs, u16_t raw_len, u8_t *raw)
- {
- 8033984: b5f0 push {r4, r5, r6, r7, lr}
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- 8033986: 2600 movs r6, #0
- while (p != NULL)
- 8033988: e025 b.n 80339d6 <snmp_asn1_enc_raw+0x52>
- {
- base = plen;
- plen += p->len;
- 803398a: 8944 ldrh r4, [r0, #10]
- 803398c: 1934 adds r4, r6, r4
- 803398e: b2a4 uxth r4, r4
- if (ofs < plen)
- 8033990: 42a1 cmp r1, r4
- 8033992: d21e bcs.n 80339d2 <snmp_asn1_enc_raw+0x4e>
- {
- msg_ptr = (u8_t*)p->payload;
- 8033994: 6847 ldr r7, [r0, #4]
- msg_ptr += ofs - base;
- 8033996: 1b8d subs r5, r1, r6
- 8033998: 197d adds r5, r7, r5
- * @param raw_len raw data length
- * @param raw points raw data
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- */
- err_t
- snmp_asn1_enc_raw(struct pbuf *p, u16_t ofs, u16_t raw_len, u8_t *raw)
- 803399a: 1851 adds r1, r2, r1
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- while (raw_len > 1)
- 803399c: e012 b.n 80339c4 <snmp_asn1_enc_raw+0x40>
- {
- /* copy raw_len - 1 octets */
- raw_len--;
- 803399e: 3a01 subs r2, #1
- *msg_ptr = *raw;
- 80339a0: f813 6b01 ldrb.w r6, [r3], #1
- msg_ptr += ofs - base;
- while (raw_len > 1)
- {
- /* copy raw_len - 1 octets */
- raw_len--;
- 80339a4: b292 uxth r2, r2
- *msg_ptr = *raw;
- 80339a6: 702e strb r6, [r5, #0]
- * @param raw_len raw data length
- * @param raw points raw data
- * @return ERR_OK if successfull, ERR_ARG if we can't (or won't) encode
- */
- err_t
- snmp_asn1_enc_raw(struct pbuf *p, u16_t ofs, u16_t raw_len, u8_t *raw)
- 80339a8: 1a8e subs r6, r1, r2
- /* copy raw_len - 1 octets */
- raw_len--;
- *msg_ptr = *raw;
- raw++;
- ofs += 1;
- if (ofs >= plen)
- 80339aa: b2b6 uxth r6, r6
- 80339ac: 42a6 cmp r6, r4
- 80339ae: d308 bcc.n 80339c2 <snmp_asn1_enc_raw+0x3e>
- {
- /* next octet in next pbuf */
- p = p->next;
- 80339b0: 6800 ldr r0, [r0, #0]
- if (p == NULL) { return ERR_ARG; }
- 80339b2: b908 cbnz r0, 80339b8 <snmp_asn1_enc_raw+0x34>
- 80339b4: 20f2 movs r0, #242 ; 0xf2
- 80339b6: e012 b.n 80339de <snmp_asn1_enc_raw+0x5a>
- msg_ptr = (u8_t*)p->payload;
- plen += p->len;
- 80339b8: 8946 ldrh r6, [r0, #10]
- if (ofs >= plen)
- {
- /* next octet in next pbuf */
- p = p->next;
- if (p == NULL) { return ERR_ARG; }
- msg_ptr = (u8_t*)p->payload;
- 80339ba: 6845 ldr r5, [r0, #4]
- plen += p->len;
- 80339bc: 19a4 adds r4, r4, r6
- 80339be: b2a4 uxth r4, r4
- 80339c0: e000 b.n 80339c4 <snmp_asn1_enc_raw+0x40>
- }
- else
- {
- /* next octet in same pbuf */
- msg_ptr++;
- 80339c2: 3501 adds r5, #1
- if (ofs < plen)
- {
- msg_ptr = (u8_t*)p->payload;
- msg_ptr += ofs - base;
- while (raw_len > 1)
- 80339c4: 2a01 cmp r2, #1
- 80339c6: d8ea bhi.n 803399e <snmp_asn1_enc_raw+0x1a>
- {
- /* next octet in same pbuf */
- msg_ptr++;
- }
- }
- if (raw_len > 0)
- 80339c8: b142 cbz r2, 80339dc <snmp_asn1_enc_raw+0x58>
- {
- /* copy last or single octet */
- *msg_ptr = *raw;
- 80339ca: 781b ldrb r3, [r3, #0]
- }
- return ERR_OK;
- 80339cc: 2000 movs r0, #0
- }
- }
- if (raw_len > 0)
- {
- /* copy last or single octet */
- *msg_ptr = *raw;
- 80339ce: 702b strb r3, [r5, #0]
- 80339d0: e005 b.n 80339de <snmp_asn1_enc_raw+0x5a>
- }
- return ERR_OK;
- }
- p = p->next;
- 80339d2: 6800 ldr r0, [r0, #0]
- plen = 0;
- while (p != NULL)
- {
- base = plen;
- plen += p->len;
- 80339d4: 4626 mov r6, r4
- {
- u16_t plen, base;
- u8_t *msg_ptr;
- plen = 0;
- while (p != NULL)
- 80339d6: 2800 cmp r0, #0
- 80339d8: d1d7 bne.n 803398a <snmp_asn1_enc_raw+0x6>
- 80339da: e7eb b.n 80339b4 <snmp_asn1_enc_raw+0x30>
- if (raw_len > 0)
- {
- /* copy last or single octet */
- *msg_ptr = *raw;
- }
- return ERR_OK;
- 80339dc: 4610 mov r0, r2
- }
- p = p->next;
- }
- /* p == NULL, ofs >= plen */
- return ERR_ARG;
- }
- 80339de: b240 sxtb r0, r0
- 80339e0: bdf0 pop {r4, r5, r6, r7, pc}
- 080339e2 <noleafs_get_object_def>:
- void
- noleafs_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- LWIP_UNUSED_ARG(ident_len);
- LWIP_UNUSED_ARG(ident);
- od->instance = MIB_OBJECT_NONE;
- 80339e2: 2300 movs r3, #0
- 80339e4: 7013 strb r3, [r2, #0]
- 80339e6: 4770 bx lr
- 080339e8 <noleafs_get_value>:
- }
- void
- noleafs_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 80339e8: 4770 bx lr
- 080339ea <noleafs_set_test>:
- LWIP_UNUSED_ARG(od);
- LWIP_UNUSED_ARG(len);
- LWIP_UNUSED_ARG(value);
- /* can't set */
- return 0;
- }
- 80339ea: 2000 movs r0, #0
- 80339ec: 4770 bx lr
- 080339ee <noleafs_set_value>:
- void
- noleafs_set_value(struct obj_def *od, u16_t len, void *value)
- {
- 80339ee: 4770 bx lr
- 080339f0 <system_get_object_def>:
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 80339f0: 2801 cmp r0, #1
- 80339f2: d145 bne.n 8033a80 <system_get_object_def+0x90>
- {
- od->id_inst_len = ident_len;
- 80339f4: 2002 movs r0, #2
- {
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- 80339f6: 1f0b subs r3, r1, #4
- if (ident_len == 2)
- {
- od->id_inst_len = ident_len;
- 80339f8: 7190 strb r0, [r2, #6]
- od->id_inst_ptr = ident;
- 80339fa: 6093 str r3, [r2, #8]
- LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
- id = (u8_t)ident[0];
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def system.%"U16_F".0\n",(u16_t)id));
- switch (id)
- 80339fc: f811 3c04 ldrb.w r3, [r1, #-4]
- 8033a00: 3b01 subs r3, #1
- 8033a02: 2b06 cmp r3, #6
- 8033a04: d83c bhi.n 8033a80 <system_get_object_def+0x90>
- 8033a06: e8df f003 tbb [pc, r3]
- 8033a0a: 0b04 .short 0x0b04
- 8033a0c: 2a221a14 .word 0x2a221a14
- 8033a10: 34 .byte 0x34
- 8033a11: 00 .byte 0x00
- {
- case 1: /* sysDescr */
- od->instance = MIB_OBJECT_SCALAR;
- 8033a12: 2301 movs r3, #1
- 8033a14: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033a16: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- 8033a18: 2304 movs r3, #4
- 8033a1a: 7093 strb r3, [r2, #2]
- od->v_len = *sysdescr_len_ptr;
- 8033a1c: 4b1a ldr r3, [pc, #104] ; (8033a88 <system_get_object_def+0x98>)
- 8033a1e: e025 b.n 8033a6c <system_get_object_def+0x7c>
- break;
- case 2: /* sysObjectID */
- od->instance = MIB_OBJECT_SCALAR;
- 8033a20: 2301 movs r3, #1
- 8033a22: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033a24: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID);
- 8033a26: 2306 movs r3, #6
- 8033a28: 7093 strb r3, [r2, #2]
- od->v_len = sysobjid.len * sizeof(s32_t);
- 8033a2a: 4b18 ldr r3, [pc, #96] ; (8033a8c <system_get_object_def+0x9c>)
- 8033a2c: 781b ldrb r3, [r3, #0]
- 8033a2e: 009b lsls r3, r3, #2
- 8033a30: e024 b.n 8033a7c <system_get_object_def+0x8c>
- break;
- case 3: /* sysUpTime */
- od->instance = MIB_OBJECT_SCALAR;
- 8033a32: 2301 movs r3, #1
- 8033a34: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033a36: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS);
- 8033a38: 2343 movs r3, #67 ; 0x43
- 8033a3a: 7093 strb r3, [r2, #2]
- 8033a3c: e01d b.n 8033a7a <system_get_object_def+0x8a>
- od->v_len = sizeof(u32_t);
- break;
- case 4: /* sysContact */
- od->instance = MIB_OBJECT_SCALAR;
- 8033a3e: 2301 movs r3, #1
- 8033a40: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 8033a42: 2303 movs r3, #3
- 8033a44: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- 8033a46: 2304 movs r3, #4
- 8033a48: 7093 strb r3, [r2, #2]
- od->v_len = *syscontact_len_ptr;
- 8033a4a: 4b11 ldr r3, [pc, #68] ; (8033a90 <system_get_object_def+0xa0>)
- 8033a4c: e00e b.n 8033a6c <system_get_object_def+0x7c>
- break;
- case 5: /* sysName */
- od->instance = MIB_OBJECT_SCALAR;
- 8033a4e: 2301 movs r3, #1
- 8033a50: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 8033a52: 2303 movs r3, #3
- 8033a54: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- 8033a56: 2304 movs r3, #4
- 8033a58: 7093 strb r3, [r2, #2]
- od->v_len = *sysname_len_ptr;
- 8033a5a: 4b0e ldr r3, [pc, #56] ; (8033a94 <system_get_object_def+0xa4>)
- 8033a5c: e006 b.n 8033a6c <system_get_object_def+0x7c>
- break;
- case 6: /* sysLocation */
- od->instance = MIB_OBJECT_SCALAR;
- 8033a5e: 2301 movs r3, #1
- 8033a60: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 8033a62: 2303 movs r3, #3
- 8033a64: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- 8033a66: 2304 movs r3, #4
- 8033a68: 7093 strb r3, [r2, #2]
- od->v_len = *syslocation_len_ptr;
- 8033a6a: 4b0b ldr r3, [pc, #44] ; (8033a98 <system_get_object_def+0xa8>)
- 8033a6c: 681b ldr r3, [r3, #0]
- 8033a6e: 781b ldrb r3, [r3, #0]
- 8033a70: e004 b.n 8033a7c <system_get_object_def+0x8c>
- break;
- case 7: /* sysServices */
- od->instance = MIB_OBJECT_SCALAR;
- 8033a72: 2301 movs r3, #1
- 8033a74: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033a76: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- 8033a78: 7090 strb r0, [r2, #2]
- od->v_len = sizeof(s32_t);
- 8033a7a: 2304 movs r3, #4
- 8033a7c: 8093 strh r3, [r2, #4]
- break;
- 8033a7e: 4770 bx lr
- };
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 8033a80: 2300 movs r3, #0
- 8033a82: 7013 strb r3, [r2, #0]
- 8033a84: 4770 bx lr
- 8033a86: bf00 nop
- 8033a88: 2000093c .word 0x2000093c
- 8033a8c: 200007ec .word 0x200007ec
- 8033a90: 20000798 .word 0x20000798
- 8033a94: 20000794 .word 0x20000794
- 8033a98: 20000980 .word 0x20000980
- 08033a9c <interfaces_get_object_def>:
- interfaces_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 8033a9c: 2801 cmp r0, #1
- 8033a9e: d109 bne.n 8033ab4 <interfaces_get_object_def+0x18>
- {
- od->id_inst_len = ident_len;
- 8033aa0: 2302 movs r3, #2
- 8033aa2: 7193 strb r3, [r2, #6]
- static void
- interfaces_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- 8033aa4: 3904 subs r1, #4
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- 8033aa6: 7093 strb r3, [r2, #2]
- od->v_len = sizeof(s32_t);
- 8033aa8: 2304 movs r3, #4
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- {
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- 8033aaa: 6091 str r1, [r2, #8]
- od->instance = MIB_OBJECT_SCALAR;
- 8033aac: 7010 strb r0, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033aae: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- od->v_len = sizeof(s32_t);
- 8033ab0: 8093 strh r3, [r2, #4]
- 8033ab2: 4770 bx lr
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("interfaces_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 8033ab4: 2300 movs r3, #0
- 8033ab6: 7013 strb r3, [r2, #0]
- 8033ab8: 4770 bx lr
- 8033aba: 0000 movs r0, r0
- 08033abc <interfaces_get_value>:
- */
- static void
- interfaces_get_value(struct obj_def *od, u16_t len, void *value)
- {
- LWIP_UNUSED_ARG(len);
- if (od->id_inst_ptr[0] == 1)
- 8033abc: 6883 ldr r3, [r0, #8]
- 8033abe: 681b ldr r3, [r3, #0]
- 8033ac0: 2b01 cmp r3, #1
- 8033ac2: d102 bne.n 8033aca <interfaces_get_value+0xe>
- {
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = iflist_root.count;
- 8033ac4: 4b01 ldr r3, [pc, #4] ; (8033acc <interfaces_get_value+0x10>)
- 8033ac6: 8b9b ldrh r3, [r3, #28]
- 8033ac8: 6013 str r3, [r2, #0]
- 8033aca: 4770 bx lr
- 8033acc: 200007cc .word 0x200007cc
- 08033ad0 <ip_get_value>:
- {
- u8_t id;
- LWIP_UNUSED_ARG(len);
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8033ad0: 6883 ldr r3, [r0, #8]
- switch (id)
- 8033ad2: 781b ldrb r3, [r3, #0]
- 8033ad4: 3b01 subs r3, #1
- 8033ad6: 2b16 cmp r3, #22
- 8033ad8: d836 bhi.n 8033b48 <ip_get_value+0x78>
- 8033ada: e8df f003 tbb [pc, r3]
- 8033ade: 0e0c .short 0x0e0c
- 8033ae0: 16141210 .word 0x16141210
- 8033ae4: 1e1c1a18 .word 0x1e1c1a18
- 8033ae8: 26242220 .word 0x26242220
- 8033aec: 2e2c2a28 .word 0x2e2c2a28
- 8033af0: 35353530 .word 0x35353530
- 8033af4: 32 .byte 0x32
- 8033af5: 00 .byte 0x00
- #if IP_FORWARD
- /* forwarding */
- *sint_ptr = 1;
- #else
- /* not-forwarding */
- *sint_ptr = 2;
- 8033af6: 2302 movs r3, #2
- 8033af8: e025 b.n 8033b46 <ip_get_value+0x76>
- }
- break;
- case 2: /* ipDefaultTTL */
- {
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = IP_DEFAULT_TTL;
- 8033afa: 23ff movs r3, #255 ; 0xff
- 8033afc: e023 b.n 8033b46 <ip_get_value+0x76>
- }
- break;
- case 3: /* ipInReceives */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipinreceives;
- 8033afe: 4b13 ldr r3, [pc, #76] ; (8033b4c <ip_get_value+0x7c>)
- 8033b00: e020 b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 4: /* ipInHdrErrors */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipinhdrerrors;
- 8033b02: 4b13 ldr r3, [pc, #76] ; (8033b50 <ip_get_value+0x80>)
- 8033b04: e01e b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 5: /* ipInAddrErrors */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipinaddrerrors;
- 8033b06: 4b13 ldr r3, [pc, #76] ; (8033b54 <ip_get_value+0x84>)
- 8033b08: e01c b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 6: /* ipForwDatagrams */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipforwdatagrams;
- 8033b0a: 4b13 ldr r3, [pc, #76] ; (8033b58 <ip_get_value+0x88>)
- 8033b0c: e01a b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 7: /* ipInUnknownProtos */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipinunknownprotos;
- 8033b0e: 4b13 ldr r3, [pc, #76] ; (8033b5c <ip_get_value+0x8c>)
- 8033b10: e018 b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 8: /* ipInDiscards */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipindiscards;
- 8033b12: 4b13 ldr r3, [pc, #76] ; (8033b60 <ip_get_value+0x90>)
- 8033b14: e016 b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 9: /* ipInDelivers */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipindelivers;
- 8033b16: 4b13 ldr r3, [pc, #76] ; (8033b64 <ip_get_value+0x94>)
- 8033b18: e014 b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 10: /* ipOutRequests */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipoutrequests;
- 8033b1a: 4b13 ldr r3, [pc, #76] ; (8033b68 <ip_get_value+0x98>)
- 8033b1c: e012 b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 11: /* ipOutDiscards */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipoutdiscards;
- 8033b1e: 4b13 ldr r3, [pc, #76] ; (8033b6c <ip_get_value+0x9c>)
- 8033b20: e010 b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 12: /* ipOutNoRoutes */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipoutnoroutes;
- 8033b22: 4b13 ldr r3, [pc, #76] ; (8033b70 <ip_get_value+0xa0>)
- 8033b24: e00e b.n 8033b44 <ip_get_value+0x74>
- {
- s32_t *sint_ptr = (s32_t*)value;
- #if IP_REASSEMBLY
- *sint_ptr = IP_REASS_MAXAGE;
- #else
- *sint_ptr = 0;
- 8033b26: 2300 movs r3, #0
- 8033b28: e00d b.n 8033b46 <ip_get_value+0x76>
- }
- break;
- case 14: /* ipReasmReqds */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipreasmreqds;
- 8033b2a: 4b12 ldr r3, [pc, #72] ; (8033b74 <ip_get_value+0xa4>)
- 8033b2c: e00a b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 15: /* ipReasmOKs */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipreasmoks;
- 8033b2e: 4b12 ldr r3, [pc, #72] ; (8033b78 <ip_get_value+0xa8>)
- 8033b30: e008 b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 16: /* ipReasmFails */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipreasmfails;
- 8033b32: 4b12 ldr r3, [pc, #72] ; (8033b7c <ip_get_value+0xac>)
- 8033b34: e006 b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 17: /* ipFragOKs */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipfragoks;
- 8033b36: 4b12 ldr r3, [pc, #72] ; (8033b80 <ip_get_value+0xb0>)
- 8033b38: e004 b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 18: /* ipFragFails */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipfragfails;
- 8033b3a: 4b12 ldr r3, [pc, #72] ; (8033b84 <ip_get_value+0xb4>)
- 8033b3c: e002 b.n 8033b44 <ip_get_value+0x74>
- }
- break;
- case 19: /* ipFragCreates */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = ipfragcreates;
- 8033b3e: 4b12 ldr r3, [pc, #72] ; (8033b88 <ip_get_value+0xb8>)
- 8033b40: e000 b.n 8033b44 <ip_get_value+0x74>
- break;
- case 23: /* ipRoutingDiscards */
- /** @todo can lwIP discard routes at all?? hardwire this to 0?? */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = iproutingdiscards;
- 8033b42: 4b12 ldr r3, [pc, #72] ; (8033b8c <ip_get_value+0xbc>)
- 8033b44: 681b ldr r3, [r3, #0]
- 8033b46: 6013 str r3, [r2, #0]
- 8033b48: 4770 bx lr
- 8033b4a: bf00 nop
- 8033b4c: 2000c4d4 .word 0x2000c4d4
- 8033b50: 2000c45c .word 0x2000c45c
- 8033b54: 2000c440 .word 0x2000c440
- 8033b58: 2000c55c .word 0x2000c55c
- 8033b5c: 2000c49c .word 0x2000c49c
- 8033b60: 2000c528 .word 0x2000c528
- 8033b64: 2000c560 .word 0x2000c560
- 8033b68: 2000c548 .word 0x2000c548
- 8033b6c: 2000c4ec .word 0x2000c4ec
- 8033b70: 2000c56c .word 0x2000c56c
- 8033b74: 2000c4bc .word 0x2000c4bc
- 8033b78: 2000c468 .word 0x2000c468
- 8033b7c: 2000c51c .word 0x2000c51c
- 8033b80: 2000c42c .word 0x2000c42c
- 8033b84: 2000c498 .word 0x2000c498
- 8033b88: 2000c538 .word 0x2000c538
- 8033b8c: 2000c524 .word 0x2000c524
- 08033b90 <ip_set_test>:
- s32_t *sint_ptr = (s32_t*)value;
- LWIP_UNUSED_ARG(len);
- set_ok = 0;
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8033b90: 6883 ldr r3, [r0, #8]
- switch (id)
- 8033b92: 781b ldrb r3, [r3, #0]
- 8033b94: 2b01 cmp r3, #1
- 8033b96: d002 beq.n 8033b9e <ip_set_test+0xe>
- 8033b98: 2b02 cmp r3, #2
- 8033b9a: d109 bne.n 8033bb0 <ip_set_test+0x20>
- 8033b9c: e002 b.n 8033ba4 <ip_set_test+0x14>
- #if IP_FORWARD
- /* forwarding */
- if (*sint_ptr == 1)
- #else
- /* not-forwarding */
- if (*sint_ptr == 2)
- 8033b9e: 6810 ldr r0, [r2, #0]
- {
- u8_t id, set_ok;
- s32_t *sint_ptr = (s32_t*)value;
- LWIP_UNUSED_ARG(len);
- set_ok = 0;
- 8033ba0: 2802 cmp r0, #2
- 8033ba2: e001 b.n 8033ba8 <ip_set_test+0x18>
- {
- set_ok = 1;
- }
- break;
- case 2: /* ipDefaultTTL */
- if (*sint_ptr == IP_DEFAULT_TTL)
- 8033ba4: 6810 ldr r0, [r2, #0]
- {
- u8_t id, set_ok;
- s32_t *sint_ptr = (s32_t*)value;
- LWIP_UNUSED_ARG(len);
- set_ok = 0;
- 8033ba6: 28ff cmp r0, #255 ; 0xff
- 8033ba8: bf14 ite ne
- 8033baa: 2000 movne r0, #0
- 8033bac: 2001 moveq r0, #1
- 8033bae: 4770 bx lr
- 8033bb0: 2000 movs r0, #0
- set_ok = 1;
- }
- break;
- };
- return set_ok;
- }
- 8033bb2: 4770 bx lr
- 08033bb4 <ip_rteentry_get_object_def>:
- /* return to object name, adding index depth (4) */
- ident_len += 4;
- ident -= 4;
- if (ident_len == 5)
- 8033bb4: 2801 cmp r0, #1
- 8033bb6: d12c bne.n 8033c12 <ip_rteentry_get_object_def+0x5e>
- {
- od->id_inst_len = ident_len;
- 8033bb8: 2305 movs r3, #5
- 8033bba: 7193 strb r3, [r2, #6]
- {
- u8_t id;
- /* return to object name, adding index depth (4) */
- ident_len += 4;
- ident -= 4;
- 8033bbc: f1a1 0310 sub.w r3, r1, #16
- if (ident_len == 5)
- {
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- 8033bc0: 6093 str r3, [r2, #8]
- LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
- id = (u8_t)ident[0];
- switch (id)
- 8033bc2: f811 3c10 ldrb.w r3, [r1, #-16]
- 8033bc6: 3b01 subs r3, #1
- 8033bc8: 2b0c cmp r3, #12
- 8033bca: d822 bhi.n 8033c12 <ip_rteentry_get_object_def+0x5e>
- 8033bcc: e8df f003 tbb [pc, r3]
- 8033bd0: 0d0d0d07 .word 0x0d0d0d07
- 8033bd4: 0d070d0d .word 0x0d070d0d
- 8033bd8: 0d070d11 .word 0x0d070d11
- 8033bdc: 18 .byte 0x18
- 8033bdd: 00 .byte 0x00
- {
- case 1: /* ipRouteDest */
- case 7: /* ipRouteNextHop */
- case 11: /* ipRouteMask */
- od->instance = MIB_OBJECT_TAB;
- 8033bde: 2302 movs r3, #2
- 8033be0: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 8033be2: 2303 movs r3, #3
- 8033be4: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
- 8033be6: 2340 movs r3, #64 ; 0x40
- 8033be8: e007 b.n 8033bfa <ip_rteentry_get_object_def+0x46>
- case 5: /* ipRouteMetric3 */
- case 6: /* ipRouteMetric4 */
- case 8: /* ipRouteType */
- case 10: /* ipRouteAge */
- case 12: /* ipRouteMetric5 */
- od->instance = MIB_OBJECT_TAB;
- 8033bea: 2302 movs r3, #2
- 8033bec: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 8033bee: 2103 movs r1, #3
- 8033bf0: e002 b.n 8033bf8 <ip_rteentry_get_object_def+0x44>
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- od->v_len = sizeof(s32_t);
- break;
- case 9: /* ipRouteProto */
- od->instance = MIB_OBJECT_TAB;
- 8033bf2: 2302 movs r3, #2
- 8033bf4: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033bf6: 2101 movs r1, #1
- 8033bf8: 7051 strb r1, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- 8033bfa: 7093 strb r3, [r2, #2]
- od->v_len = sizeof(s32_t);
- 8033bfc: 2304 movs r3, #4
- 8033bfe: e006 b.n 8033c0e <ip_rteentry_get_object_def+0x5a>
- break;
- case 13: /* ipRouteInfo */
- /** @note returning zeroDotZero (0.0) no routing protocol specific MIB */
- od->instance = MIB_OBJECT_TAB;
- 8033c00: 2302 movs r3, #2
- 8033c02: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033c04: 2301 movs r3, #1
- 8033c06: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID);
- 8033c08: 2306 movs r3, #6
- 8033c0a: 7093 strb r3, [r2, #2]
- od->v_len = iprouteinfo.len * sizeof(s32_t);
- 8033c0c: 2308 movs r3, #8
- 8033c0e: 8093 strh r3, [r2, #4]
- break;
- 8033c10: 4770 bx lr
- }
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_rteentry_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 8033c12: 2300 movs r3, #0
- 8033c14: 7013 strb r3, [r2, #0]
- 8033c16: 4770 bx lr
- 08033c18 <icmp_get_object_def>:
- icmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if ((ident_len == 2) &&
- 8033c18: 2801 cmp r0, #1
- 8033c1a: d110 bne.n 8033c3e <icmp_get_object_def+0x26>
- (ident[0] > 0) && (ident[0] < 27))
- 8033c1c: f851 3c04 ldr.w r3, [r1, #-4]
- icmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if ((ident_len == 2) &&
- 8033c20: 2b00 cmp r3, #0
- 8033c22: dd0c ble.n 8033c3e <icmp_get_object_def+0x26>
- (ident[0] > 0) && (ident[0] < 27))
- 8033c24: 2b1a cmp r3, #26
- 8033c26: dc0a bgt.n 8033c3e <icmp_get_object_def+0x26>
- {
- od->id_inst_len = ident_len;
- 8033c28: 2302 movs r3, #2
- 8033c2a: 7193 strb r3, [r2, #6]
- od->id_inst_ptr = ident;
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- 8033c2c: 2341 movs r3, #65 ; 0x41
- static void
- icmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- 8033c2e: 3904 subs r1, #4
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- 8033c30: 7093 strb r3, [r2, #2]
- od->v_len = sizeof(u32_t);
- 8033c32: 2304 movs r3, #4
- ident -= 1;
- if ((ident_len == 2) &&
- (ident[0] > 0) && (ident[0] < 27))
- {
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- 8033c34: 6091 str r1, [r2, #8]
- od->instance = MIB_OBJECT_SCALAR;
- 8033c36: 7010 strb r0, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033c38: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- od->v_len = sizeof(u32_t);
- 8033c3a: 8093 strh r3, [r2, #4]
- 8033c3c: 4770 bx lr
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("icmp_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 8033c3e: 2300 movs r3, #0
- 8033c40: 7013 strb r3, [r2, #0]
- 8033c42: 4770 bx lr
- 08033c44 <icmp_get_value>:
- u32_t *uint_ptr = (u32_t*)value;
- u8_t id;
- LWIP_UNUSED_ARG(len);
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8033c44: 6883 ldr r3, [r0, #8]
- switch (id)
- 8033c46: 781b ldrb r3, [r3, #0]
- 8033c48: 3b01 subs r3, #1
- 8033c4a: 2b19 cmp r3, #25
- 8033c4c: d843 bhi.n 8033cd6 <icmp_get_value+0x92>
- 8033c4e: e8df f003 tbb [pc, r3]
- 8033c52: 0f0d .short 0x0f0d
- 8033c54: 17151311 .word 0x17151311
- 8033c58: 1f1d1b19 .word 0x1f1d1b19
- 8033c5c: 27252321 .word 0x27252321
- 8033c60: 2f2d2b29 .word 0x2f2d2b29
- 8033c64: 37353331 .word 0x37353331
- 8033c68: 3f3d3b39 .word 0x3f3d3b39
- {
- case 1: /* icmpInMsgs */
- *uint_ptr = icmpinmsgs;
- 8033c6c: 4b1a ldr r3, [pc, #104] ; (8033cd8 <icmp_get_value+0x94>)
- 8033c6e: e030 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 2: /* icmpInErrors */
- *uint_ptr = icmpinerrors;
- 8033c70: 4b1a ldr r3, [pc, #104] ; (8033cdc <icmp_get_value+0x98>)
- 8033c72: e02e b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 3: /* icmpInDestUnreachs */
- *uint_ptr = icmpindestunreachs;
- 8033c74: 4b1a ldr r3, [pc, #104] ; (8033ce0 <icmp_get_value+0x9c>)
- 8033c76: e02c b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 4: /* icmpInTimeExcds */
- *uint_ptr = icmpintimeexcds;
- 8033c78: 4b1a ldr r3, [pc, #104] ; (8033ce4 <icmp_get_value+0xa0>)
- 8033c7a: e02a b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 5: /* icmpInParmProbs */
- *uint_ptr = icmpinparmprobs;
- 8033c7c: 4b1a ldr r3, [pc, #104] ; (8033ce8 <icmp_get_value+0xa4>)
- 8033c7e: e028 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 6: /* icmpInSrcQuenchs */
- *uint_ptr = icmpinsrcquenchs;
- 8033c80: 4b1a ldr r3, [pc, #104] ; (8033cec <icmp_get_value+0xa8>)
- 8033c82: e026 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 7: /* icmpInRedirects */
- *uint_ptr = icmpinredirects;
- 8033c84: 4b1a ldr r3, [pc, #104] ; (8033cf0 <icmp_get_value+0xac>)
- 8033c86: e024 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 8: /* icmpInEchos */
- *uint_ptr = icmpinechos;
- 8033c88: 4b1a ldr r3, [pc, #104] ; (8033cf4 <icmp_get_value+0xb0>)
- 8033c8a: e022 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 9: /* icmpInEchoReps */
- *uint_ptr = icmpinechoreps;
- 8033c8c: 4b1a ldr r3, [pc, #104] ; (8033cf8 <icmp_get_value+0xb4>)
- 8033c8e: e020 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 10: /* icmpInTimestamps */
- *uint_ptr = icmpintimestamps;
- 8033c90: 4b1a ldr r3, [pc, #104] ; (8033cfc <icmp_get_value+0xb8>)
- 8033c92: e01e b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 11: /* icmpInTimestampReps */
- *uint_ptr = icmpintimestampreps;
- 8033c94: 4b1a ldr r3, [pc, #104] ; (8033d00 <icmp_get_value+0xbc>)
- 8033c96: e01c b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 12: /* icmpInAddrMasks */
- *uint_ptr = icmpinaddrmasks;
- 8033c98: 4b1a ldr r3, [pc, #104] ; (8033d04 <icmp_get_value+0xc0>)
- 8033c9a: e01a b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 13: /* icmpInAddrMaskReps */
- *uint_ptr = icmpinaddrmaskreps;
- 8033c9c: 4b1a ldr r3, [pc, #104] ; (8033d08 <icmp_get_value+0xc4>)
- 8033c9e: e018 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 14: /* icmpOutMsgs */
- *uint_ptr = icmpoutmsgs;
- 8033ca0: 4b1a ldr r3, [pc, #104] ; (8033d0c <icmp_get_value+0xc8>)
- 8033ca2: e016 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 15: /* icmpOutErrors */
- *uint_ptr = icmpouterrors;
- 8033ca4: 4b1a ldr r3, [pc, #104] ; (8033d10 <icmp_get_value+0xcc>)
- 8033ca6: e014 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 16: /* icmpOutDestUnreachs */
- *uint_ptr = icmpoutdestunreachs;
- 8033ca8: 4b1a ldr r3, [pc, #104] ; (8033d14 <icmp_get_value+0xd0>)
- 8033caa: e012 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 17: /* icmpOutTimeExcds */
- *uint_ptr = icmpouttimeexcds;
- 8033cac: 4b1a ldr r3, [pc, #104] ; (8033d18 <icmp_get_value+0xd4>)
- 8033cae: e010 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 18: /* icmpOutParmProbs */
- *uint_ptr = icmpoutparmprobs;
- 8033cb0: 4b1a ldr r3, [pc, #104] ; (8033d1c <icmp_get_value+0xd8>)
- 8033cb2: e00e b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 19: /* icmpOutSrcQuenchs */
- *uint_ptr = icmpoutsrcquenchs;
- 8033cb4: 4b1a ldr r3, [pc, #104] ; (8033d20 <icmp_get_value+0xdc>)
- 8033cb6: e00c b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 20: /* icmpOutRedirects */
- *uint_ptr = icmpoutredirects;
- 8033cb8: 4b1a ldr r3, [pc, #104] ; (8033d24 <icmp_get_value+0xe0>)
- 8033cba: e00a b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 21: /* icmpOutEchos */
- *uint_ptr = icmpoutechos;
- 8033cbc: 4b1a ldr r3, [pc, #104] ; (8033d28 <icmp_get_value+0xe4>)
- 8033cbe: e008 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 22: /* icmpOutEchoReps */
- *uint_ptr = icmpoutechoreps;
- 8033cc0: 4b1a ldr r3, [pc, #104] ; (8033d2c <icmp_get_value+0xe8>)
- 8033cc2: e006 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 23: /* icmpOutTimestamps */
- *uint_ptr = icmpouttimestamps;
- 8033cc4: 4b1a ldr r3, [pc, #104] ; (8033d30 <icmp_get_value+0xec>)
- 8033cc6: e004 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 24: /* icmpOutTimestampReps */
- *uint_ptr = icmpouttimestampreps;
- 8033cc8: 4b1a ldr r3, [pc, #104] ; (8033d34 <icmp_get_value+0xf0>)
- 8033cca: e002 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 25: /* icmpOutAddrMasks */
- *uint_ptr = icmpoutaddrmasks;
- 8033ccc: 4b1a ldr r3, [pc, #104] ; (8033d38 <icmp_get_value+0xf4>)
- 8033cce: e000 b.n 8033cd2 <icmp_get_value+0x8e>
- break;
- case 26: /* icmpOutAddrMaskReps */
- *uint_ptr = icmpoutaddrmaskreps;
- 8033cd0: 4b1a ldr r3, [pc, #104] ; (8033d3c <icmp_get_value+0xf8>)
- 8033cd2: 681b ldr r3, [r3, #0]
- 8033cd4: 6013 str r3, [r2, #0]
- 8033cd6: 4770 bx lr
- 8033cd8: 2000c464 .word 0x2000c464
- 8033cdc: 2000c460 .word 0x2000c460
- 8033ce0: 2000c43c .word 0x2000c43c
- 8033ce4: 2000c520 .word 0x2000c520
- 8033ce8: 2000c554 .word 0x2000c554
- 8033cec: 2000c44c .word 0x2000c44c
- 8033cf0: 2000c478 .word 0x2000c478
- 8033cf4: 2000c518 .word 0x2000c518
- 8033cf8: 2000c490 .word 0x2000c490
- 8033cfc: 2000c480 .word 0x2000c480
- 8033d00: 2000c4c0 .word 0x2000c4c0
- 8033d04: 2000c558 .word 0x2000c558
- 8033d08: 2000c4f4 .word 0x2000c4f4
- 8033d0c: 2000c4e4 .word 0x2000c4e4
- 8033d10: 2000c568 .word 0x2000c568
- 8033d14: 2000c4fc .word 0x2000c4fc
- 8033d18: 2000c4b0 .word 0x2000c4b0
- 8033d1c: 2000c474 .word 0x2000c474
- 8033d20: 2000c4c8 .word 0x2000c4c8
- 8033d24: 2000c484 .word 0x2000c484
- 8033d28: 2000c564 .word 0x2000c564
- 8033d2c: 2000c504 .word 0x2000c504
- 8033d30: 2000c4d0 .word 0x2000c4d0
- 8033d34: 2000c4b4 .word 0x2000c4b4
- 8033d38: 2000c47c .word 0x2000c47c
- 8033d3c: 2000c4dc .word 0x2000c4dc
- 08033d40 <tcp_get_value>:
- s32_t *sint_ptr = (s32_t*)value;
- u8_t id;
- LWIP_UNUSED_ARG(len);
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8033d40: 6883 ldr r3, [r0, #8]
- switch (id)
- 8033d42: 781b ldrb r3, [r3, #0]
- 8033d44: 3b01 subs r3, #1
- 8033d46: 2b0e cmp r3, #14
- 8033d48: d836 bhi.n 8033db8 <tcp_get_value+0x78>
- 8033d4a: e8df f003 tbb [pc, r3]
- 8033d4e: 0a08 .short 0x0a08
- 8033d50: 1412100d .word 0x1412100d
- 8033d54: 2a1a1816 .word 0x2a1a1816
- 8033d58: 30352e2c .word 0x30352e2c
- 8033d5c: 32 .byte 0x32
- 8033d5d: 00 .byte 0x00
- {
- case 1: /* tcpRtoAlgorithm, vanj(4) */
- *sint_ptr = 4;
- 8033d5e: 2304 movs r3, #4
- 8033d60: e029 b.n 8033db6 <tcp_get_value+0x76>
- break;
- case 2: /* tcpRtoMin */
- /* @todo not the actual value, a guess,
- needs to be calculated */
- *sint_ptr = 1000;
- 8033d62: f44f 737a mov.w r3, #1000 ; 0x3e8
- 8033d66: e026 b.n 8033db6 <tcp_get_value+0x76>
- break;
- case 3: /* tcpRtoMax */
- /* @todo not the actual value, a guess,
- needs to be calculated */
- *sint_ptr = 60000;
- 8033d68: f64e 2360 movw r3, #60000 ; 0xea60
- 8033d6c: e023 b.n 8033db6 <tcp_get_value+0x76>
- break;
- case 4: /* tcpMaxConn */
- *sint_ptr = MEMP_NUM_TCP_PCB;
- 8033d6e: 230c movs r3, #12
- 8033d70: e021 b.n 8033db6 <tcp_get_value+0x76>
- break;
- case 5: /* tcpActiveOpens */
- *uint_ptr = tcpactiveopens;
- 8033d72: 4b12 ldr r3, [pc, #72] ; (8033dbc <tcp_get_value+0x7c>)
- 8033d74: e01e b.n 8033db4 <tcp_get_value+0x74>
- break;
- case 6: /* tcpPassiveOpens */
- *uint_ptr = tcppassiveopens;
- 8033d76: 4b12 ldr r3, [pc, #72] ; (8033dc0 <tcp_get_value+0x80>)
- 8033d78: e01c b.n 8033db4 <tcp_get_value+0x74>
- break;
- case 7: /* tcpAttemptFails */
- *uint_ptr = tcpattemptfails;
- 8033d7a: 4b12 ldr r3, [pc, #72] ; (8033dc4 <tcp_get_value+0x84>)
- 8033d7c: e01a b.n 8033db4 <tcp_get_value+0x74>
- break;
- case 8: /* tcpEstabResets */
- *uint_ptr = tcpestabresets;
- 8033d7e: 4b12 ldr r3, [pc, #72] ; (8033dc8 <tcp_get_value+0x88>)
- 8033d80: e018 b.n 8033db4 <tcp_get_value+0x74>
- break;
- case 9: /* tcpCurrEstab */
- {
- u16_t tcpcurrestab = 0;
- struct tcp_pcb *pcb = tcp_active_pcbs;
- 8033d82: 4b12 ldr r3, [pc, #72] ; (8033dcc <tcp_get_value+0x8c>)
- case 8: /* tcpEstabResets */
- *uint_ptr = tcpestabresets;
- break;
- case 9: /* tcpCurrEstab */
- {
- u16_t tcpcurrestab = 0;
- 8033d84: 2100 movs r1, #0
- struct tcp_pcb *pcb = tcp_active_pcbs;
- 8033d86: 681b ldr r3, [r3, #0]
- while (pcb != NULL)
- 8033d88: e007 b.n 8033d9a <tcp_get_value+0x5a>
- {
- if ((pcb->state == ESTABLISHED) ||
- 8033d8a: 7e18 ldrb r0, [r3, #24]
- 8033d8c: 2804 cmp r0, #4
- 8033d8e: d001 beq.n 8033d94 <tcp_get_value+0x54>
- 8033d90: 2807 cmp r0, #7
- 8033d92: d101 bne.n 8033d98 <tcp_get_value+0x58>
- (pcb->state == CLOSE_WAIT))
- {
- tcpcurrestab++;
- 8033d94: 3101 adds r1, #1
- 8033d96: b289 uxth r1, r1
- }
- pcb = pcb->next;
- 8033d98: 68db ldr r3, [r3, #12]
- break;
- case 9: /* tcpCurrEstab */
- {
- u16_t tcpcurrestab = 0;
- struct tcp_pcb *pcb = tcp_active_pcbs;
- while (pcb != NULL)
- 8033d9a: 2b00 cmp r3, #0
- 8033d9c: d1f5 bne.n 8033d8a <tcp_get_value+0x4a>
- {
- tcpcurrestab++;
- }
- pcb = pcb->next;
- }
- *uint_ptr = tcpcurrestab;
- 8033d9e: 6011 str r1, [r2, #0]
- }
- break;
- 8033da0: 4770 bx lr
- case 10: /* tcpInSegs */
- *uint_ptr = tcpinsegs;
- 8033da2: 4b0b ldr r3, [pc, #44] ; (8033dd0 <tcp_get_value+0x90>)
- 8033da4: e006 b.n 8033db4 <tcp_get_value+0x74>
- break;
- case 11: /* tcpOutSegs */
- *uint_ptr = tcpoutsegs;
- 8033da6: 4b0b ldr r3, [pc, #44] ; (8033dd4 <tcp_get_value+0x94>)
- 8033da8: e004 b.n 8033db4 <tcp_get_value+0x74>
- break;
- case 12: /* tcpRetransSegs */
- *uint_ptr = tcpretranssegs;
- 8033daa: 4b0b ldr r3, [pc, #44] ; (8033dd8 <tcp_get_value+0x98>)
- 8033dac: e002 b.n 8033db4 <tcp_get_value+0x74>
- break;
- case 14: /* tcpInErrs */
- *uint_ptr = tcpinerrs;
- 8033dae: 4b0b ldr r3, [pc, #44] ; (8033ddc <tcp_get_value+0x9c>)
- 8033db0: e000 b.n 8033db4 <tcp_get_value+0x74>
- break;
- case 15: /* tcpOutRsts */
- *uint_ptr = tcpoutrsts;
- 8033db2: 4b0b ldr r3, [pc, #44] ; (8033de0 <tcp_get_value+0xa0>)
- 8033db4: 681b ldr r3, [r3, #0]
- 8033db6: 6013 str r3, [r2, #0]
- 8033db8: 4770 bx lr
- 8033dba: bf00 nop
- 8033dbc: 2000c458 .word 0x2000c458
- 8033dc0: 2000c48c .word 0x2000c48c
- 8033dc4: 2000c4d8 .word 0x2000c4d8
- 8033dc8: 2000c46c .word 0x2000c46c
- 8033dcc: 2000f6bc .word 0x2000f6bc
- 8033dd0: 2000c4e8 .word 0x2000c4e8
- 8033dd4: 2000c534 .word 0x2000c534
- 8033dd8: 2000c508 .word 0x2000c508
- 8033ddc: 2000c494 .word 0x2000c494
- 8033de0: 2000c4f8 .word 0x2000c4f8
- 08033de4 <udp_get_object_def>:
- udp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if ((ident_len == 2) &&
- 8033de4: 2801 cmp r0, #1
- 8033de6: d110 bne.n 8033e0a <udp_get_object_def+0x26>
- (ident[0] > 0) && (ident[0] < 6))
- 8033de8: f851 3c04 ldr.w r3, [r1, #-4]
- udp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if ((ident_len == 2) &&
- 8033dec: 2b00 cmp r3, #0
- 8033dee: dd0c ble.n 8033e0a <udp_get_object_def+0x26>
- (ident[0] > 0) && (ident[0] < 6))
- 8033df0: 2b05 cmp r3, #5
- 8033df2: dc0a bgt.n 8033e0a <udp_get_object_def+0x26>
- {
- od->id_inst_len = ident_len;
- 8033df4: 2302 movs r3, #2
- 8033df6: 7193 strb r3, [r2, #6]
- od->id_inst_ptr = ident;
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- 8033df8: 2341 movs r3, #65 ; 0x41
- static void
- udp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- 8033dfa: 3904 subs r1, #4
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- 8033dfc: 7093 strb r3, [r2, #2]
- od->v_len = sizeof(u32_t);
- 8033dfe: 2304 movs r3, #4
- ident -= 1;
- if ((ident_len == 2) &&
- (ident[0] > 0) && (ident[0] < 6))
- {
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- 8033e00: 6091 str r1, [r2, #8]
- od->instance = MIB_OBJECT_SCALAR;
- 8033e02: 7010 strb r0, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033e04: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- od->v_len = sizeof(u32_t);
- 8033e06: 8093 strh r3, [r2, #4]
- 8033e08: 4770 bx lr
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("udp_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 8033e0a: 2300 movs r3, #0
- 8033e0c: 7013 strb r3, [r2, #0]
- 8033e0e: 4770 bx lr
- 08033e10 <udp_get_value>:
- u32_t *uint_ptr = (u32_t*)value;
- u8_t id;
- LWIP_UNUSED_ARG(len);
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8033e10: 6883 ldr r3, [r0, #8]
- switch (id)
- 8033e12: 781b ldrb r3, [r3, #0]
- 8033e14: 3b01 subs r3, #1
- 8033e16: 2b03 cmp r3, #3
- 8033e18: d80c bhi.n 8033e34 <udp_get_value+0x24>
- 8033e1a: e8df f003 tbb [pc, r3]
- 8033e1e: 0402 .short 0x0402
- 8033e20: 0806 .short 0x0806
- {
- case 1: /* udpInDatagrams */
- *uint_ptr = udpindatagrams;
- 8033e22: 4b05 ldr r3, [pc, #20] ; (8033e38 <udp_get_value+0x28>)
- 8033e24: e004 b.n 8033e30 <udp_get_value+0x20>
- break;
- case 2: /* udpNoPorts */
- *uint_ptr = udpnoports;
- 8033e26: 4b05 ldr r3, [pc, #20] ; (8033e3c <udp_get_value+0x2c>)
- 8033e28: e002 b.n 8033e30 <udp_get_value+0x20>
- break;
- case 3: /* udpInErrors */
- *uint_ptr = udpinerrors;
- 8033e2a: 4b05 ldr r3, [pc, #20] ; (8033e40 <udp_get_value+0x30>)
- 8033e2c: e000 b.n 8033e30 <udp_get_value+0x20>
- break;
- case 4: /* udpOutDatagrams */
- *uint_ptr = udpoutdatagrams;
- 8033e2e: 4b05 ldr r3, [pc, #20] ; (8033e44 <udp_get_value+0x34>)
- 8033e30: 681b ldr r3, [r3, #0]
- 8033e32: 6013 str r3, [r2, #0]
- 8033e34: 4770 bx lr
- 8033e36: bf00 nop
- 8033e38: 2000c514 .word 0x2000c514
- 8033e3c: 2000c4cc .word 0x2000c4cc
- 8033e40: 2000c53c .word 0x2000c53c
- 8033e44: 2000c4c4 .word 0x2000c4c4
- 08033e48 <snmp_get_value>:
- u32_t *uint_ptr = (u32_t*)value;
- u8_t id;
- LWIP_UNUSED_ARG(len);
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8033e48: 6883 ldr r3, [r0, #8]
- switch (id)
- 8033e4a: 781b ldrb r3, [r3, #0]
- 8033e4c: 3b01 subs r3, #1
- 8033e4e: 2b1d cmp r3, #29
- 8033e50: d84b bhi.n 8033eea <snmp_get_value+0xa2>
- 8033e52: e8df f003 tbb [pc, r3]
- 8033e56: 110f .short 0x110f
- 8033e58: 19171513 .word 0x19171513
- 8033e5c: 1f1d1b4a .word 0x1f1d1b4a
- 8033e60: 27252321 .word 0x27252321
- 8033e64: 2f2d2b29 .word 0x2f2d2b29
- 8033e68: 37353331 .word 0x37353331
- 8033e6c: 3d3b394a .word 0x3d3b394a
- 8033e70: 4643413f .word 0x4643413f
- {
- case 1: /* snmpInPkts */
- *uint_ptr = snmpinpkts;
- 8033e74: 4b1d ldr r3, [pc, #116] ; (8033eec <snmp_get_value+0xa4>)
- 8033e76: e032 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 2: /* snmpOutPkts */
- *uint_ptr = snmpoutpkts;
- 8033e78: 4b1d ldr r3, [pc, #116] ; (8033ef0 <snmp_get_value+0xa8>)
- 8033e7a: e030 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 3: /* snmpInBadVersions */
- *uint_ptr = snmpinbadversions;
- 8033e7c: 4b1d ldr r3, [pc, #116] ; (8033ef4 <snmp_get_value+0xac>)
- 8033e7e: e02e b.n 8033ede <snmp_get_value+0x96>
- break;
- case 4: /* snmpInBadCommunityNames */
- *uint_ptr = snmpinbadcommunitynames;
- 8033e80: 4b1d ldr r3, [pc, #116] ; (8033ef8 <snmp_get_value+0xb0>)
- 8033e82: e02c b.n 8033ede <snmp_get_value+0x96>
- break;
- case 5: /* snmpInBadCommunityUses */
- *uint_ptr = snmpinbadcommunityuses;
- 8033e84: 4b1d ldr r3, [pc, #116] ; (8033efc <snmp_get_value+0xb4>)
- 8033e86: e02a b.n 8033ede <snmp_get_value+0x96>
- break;
- case 6: /* snmpInASNParseErrs */
- *uint_ptr = snmpinasnparseerrs;
- 8033e88: 4b1d ldr r3, [pc, #116] ; (8033f00 <snmp_get_value+0xb8>)
- 8033e8a: e028 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 8: /* snmpInTooBigs */
- *uint_ptr = snmpintoobigs;
- 8033e8c: 4b1d ldr r3, [pc, #116] ; (8033f04 <snmp_get_value+0xbc>)
- 8033e8e: e026 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 9: /* snmpInNoSuchNames */
- *uint_ptr = snmpinnosuchnames;
- 8033e90: 4b1d ldr r3, [pc, #116] ; (8033f08 <snmp_get_value+0xc0>)
- 8033e92: e024 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 10: /* snmpInBadValues */
- *uint_ptr = snmpinbadvalues;
- 8033e94: 4b1d ldr r3, [pc, #116] ; (8033f0c <snmp_get_value+0xc4>)
- 8033e96: e022 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 11: /* snmpInReadOnlys */
- *uint_ptr = snmpinreadonlys;
- 8033e98: 4b1d ldr r3, [pc, #116] ; (8033f10 <snmp_get_value+0xc8>)
- 8033e9a: e020 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 12: /* snmpInGenErrs */
- *uint_ptr = snmpingenerrs;
- 8033e9c: 4b1d ldr r3, [pc, #116] ; (8033f14 <snmp_get_value+0xcc>)
- 8033e9e: e01e b.n 8033ede <snmp_get_value+0x96>
- break;
- case 13: /* snmpInTotalReqVars */
- *uint_ptr = snmpintotalreqvars;
- 8033ea0: 4b1d ldr r3, [pc, #116] ; (8033f18 <snmp_get_value+0xd0>)
- 8033ea2: e01c b.n 8033ede <snmp_get_value+0x96>
- break;
- case 14: /* snmpInTotalSetVars */
- *uint_ptr = snmpintotalsetvars;
- 8033ea4: 4b1d ldr r3, [pc, #116] ; (8033f1c <snmp_get_value+0xd4>)
- 8033ea6: e01a b.n 8033ede <snmp_get_value+0x96>
- break;
- case 15: /* snmpInGetRequests */
- *uint_ptr = snmpingetrequests;
- 8033ea8: 4b1d ldr r3, [pc, #116] ; (8033f20 <snmp_get_value+0xd8>)
- 8033eaa: e018 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 16: /* snmpInGetNexts */
- *uint_ptr = snmpingetnexts;
- 8033eac: 4b1d ldr r3, [pc, #116] ; (8033f24 <snmp_get_value+0xdc>)
- 8033eae: e016 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 17: /* snmpInSetRequests */
- *uint_ptr = snmpinsetrequests;
- 8033eb0: 4b1d ldr r3, [pc, #116] ; (8033f28 <snmp_get_value+0xe0>)
- 8033eb2: e014 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 18: /* snmpInGetResponses */
- *uint_ptr = snmpingetresponses;
- 8033eb4: 4b1d ldr r3, [pc, #116] ; (8033f2c <snmp_get_value+0xe4>)
- 8033eb6: e012 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 19: /* snmpInTraps */
- *uint_ptr = snmpintraps;
- 8033eb8: 4b1d ldr r3, [pc, #116] ; (8033f30 <snmp_get_value+0xe8>)
- 8033eba: e010 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 20: /* snmpOutTooBigs */
- *uint_ptr = snmpouttoobigs;
- 8033ebc: 4b1d ldr r3, [pc, #116] ; (8033f34 <snmp_get_value+0xec>)
- 8033ebe: e00e b.n 8033ede <snmp_get_value+0x96>
- break;
- case 21: /* snmpOutNoSuchNames */
- *uint_ptr = snmpoutnosuchnames;
- 8033ec0: 4b1d ldr r3, [pc, #116] ; (8033f38 <snmp_get_value+0xf0>)
- 8033ec2: e00c b.n 8033ede <snmp_get_value+0x96>
- break;
- case 22: /* snmpOutBadValues */
- *uint_ptr = snmpoutbadvalues;
- 8033ec4: 4b1d ldr r3, [pc, #116] ; (8033f3c <snmp_get_value+0xf4>)
- 8033ec6: e00a b.n 8033ede <snmp_get_value+0x96>
- break;
- case 24: /* snmpOutGenErrs */
- *uint_ptr = snmpoutgenerrs;
- 8033ec8: 4b1d ldr r3, [pc, #116] ; (8033f40 <snmp_get_value+0xf8>)
- 8033eca: e008 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 25: /* snmpOutGetRequests */
- *uint_ptr = snmpoutgetrequests;
- 8033ecc: 4b1d ldr r3, [pc, #116] ; (8033f44 <snmp_get_value+0xfc>)
- 8033ece: e006 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 26: /* snmpOutGetNexts */
- *uint_ptr = snmpoutgetnexts;
- 8033ed0: 4b1d ldr r3, [pc, #116] ; (8033f48 <snmp_get_value+0x100>)
- 8033ed2: e004 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 27: /* snmpOutSetRequests */
- *uint_ptr = snmpoutsetrequests;
- 8033ed4: 4b1d ldr r3, [pc, #116] ; (8033f4c <snmp_get_value+0x104>)
- 8033ed6: e002 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 28: /* snmpOutGetResponses */
- *uint_ptr = snmpoutgetresponses;
- 8033ed8: 4b1d ldr r3, [pc, #116] ; (8033f50 <snmp_get_value+0x108>)
- 8033eda: e000 b.n 8033ede <snmp_get_value+0x96>
- break;
- case 29: /* snmpOutTraps */
- *uint_ptr = snmpouttraps;
- 8033edc: 4b1d ldr r3, [pc, #116] ; (8033f54 <snmp_get_value+0x10c>)
- 8033ede: 681b ldr r3, [r3, #0]
- 8033ee0: e002 b.n 8033ee8 <snmp_get_value+0xa0>
- break;
- case 30: /* snmpEnableAuthenTraps */
- *uint_ptr = *snmpenableauthentraps_ptr;
- 8033ee2: 4b1d ldr r3, [pc, #116] ; (8033f58 <snmp_get_value+0x110>)
- 8033ee4: 681b ldr r3, [r3, #0]
- 8033ee6: 781b ldrb r3, [r3, #0]
- 8033ee8: 6013 str r3, [r2, #0]
- 8033eea: 4770 bx lr
- 8033eec: 2000c470 .word 0x2000c470
- 8033ef0: 2000c540 .word 0x2000c540
- 8033ef4: 2000c52c .word 0x2000c52c
- 8033ef8: 2000c444 .word 0x2000c444
- 8033efc: 2000c448 .word 0x2000c448
- 8033f00: 2000c530 .word 0x2000c530
- 8033f04: 2000c4f0 .word 0x2000c4f0
- 8033f08: 2000c570 .word 0x2000c570
- 8033f0c: 2000c50c .word 0x2000c50c
- 8033f10: 2000c4e0 .word 0x2000c4e0
- 8033f14: 2000c4b8 .word 0x2000c4b8
- 8033f18: 2000c510 .word 0x2000c510
- 8033f1c: 2000c450 .word 0x2000c450
- 8033f20: 2000c4a4 .word 0x2000c4a4
- 8033f24: 2000c428 .word 0x2000c428
- 8033f28: 2000c54c .word 0x2000c54c
- 8033f2c: 2000c4a0 .word 0x2000c4a0
- 8033f30: 2000c438 .word 0x2000c438
- 8033f34: 2000c488 .word 0x2000c488
- 8033f38: 2000c454 .word 0x2000c454
- 8033f3c: 2000c434 .word 0x2000c434
- 8033f40: 2000c574 .word 0x2000c574
- 8033f44: 2000c4ac .word 0x2000c4ac
- 8033f48: 2000c544 .word 0x2000c544
- 8033f4c: 2000c550 .word 0x2000c550
- 8033f50: 2000c430 .word 0x2000c430
- 8033f54: 2000c4a8 .word 0x2000c4a8
- 8033f58: 20000898 .word 0x20000898
- 08033f5c <snmp_set_value>:
- {
- u8_t id;
- LWIP_UNUSED_ARG(len);
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8033f5c: 6883 ldr r3, [r0, #8]
- if (id == 30)
- 8033f5e: 781b ldrb r3, [r3, #0]
- 8033f60: 2b1e cmp r3, #30
- 8033f62: d103 bne.n 8033f6c <snmp_set_value+0x10>
- {
- /* snmpEnableAuthenTraps */
- /* @todo @fixme: which kind of pointer is 'value'? s32_t or u8_t??? */
- u8_t *ptr = (u8_t*)value;
- *snmpenableauthentraps_ptr = *ptr;
- 8033f64: 4b02 ldr r3, [pc, #8] ; (8033f70 <snmp_set_value+0x14>)
- 8033f66: 7812 ldrb r2, [r2, #0]
- 8033f68: 681b ldr r3, [r3, #0]
- 8033f6a: 701a strb r2, [r3, #0]
- 8033f6c: 4770 bx lr
- 8033f6e: bf00 nop
- 8033f70: 20000898 .word 0x20000898
- 08033f74 <ifentry_get_object_def>:
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 8033f74: 2801 cmp r0, #1
- * @param ident points to objectname.index
- * @param od points to object definition.
- */
- static void
- ifentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- 8033f76: b513 push {r0, r1, r4, lr}
- 8033f78: 4614 mov r4, r2
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 8033f7a: d149 bne.n 8034010 <ifentry_get_object_def+0x9c>
- {
- od->id_inst_len = ident_len;
- 8033f7c: 2302 movs r3, #2
- 8033f7e: 7193 strb r3, [r2, #6]
- {
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- 8033f80: 1f0a subs r2, r1, #4
- if (ident_len == 2)
- {
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- 8033f82: 60a2 str r2, [r4, #8]
- LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
- id = (u8_t)ident[0];
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def ifentry.%"U16_F"\n",(u16_t)id));
- switch (id)
- 8033f84: f811 2c04 ldrb.w r2, [r1, #-4]
- 8033f88: 3a01 subs r2, #1
- 8033f8a: 2a15 cmp r2, #21
- 8033f8c: d840 bhi.n 8034010 <ifentry_get_object_def+0x9c>
- 8033f8e: e8df f002 tbb [pc, r2]
- 8033f92: 0e0b .short 0x0e0b
- 8033f94: 19140b0b .word 0x19140b0b
- 8033f98: 302b0b27 .word 0x302b0b27
- 8033f9c: 30303030 .word 0x30303030
- 8033fa0: 30303030 .word 0x30303030
- 8033fa4: 37143030 .word 0x37143030
- {
- case 1: /* ifIndex */
- case 3: /* ifType */
- case 4: /* ifMtu */
- case 8: /* ifOperStatus */
- od->instance = MIB_OBJECT_TAB;
- 8033fa8: 7023 strb r3, [r4, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033faa: 2201 movs r2, #1
- 8033fac: e01a b.n 8033fe4 <ifentry_get_object_def+0x70>
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- od->v_len = sizeof(s32_t);
- break;
- case 2: /* ifDescr */
- od->instance = MIB_OBJECT_TAB;
- od->access = MIB_OBJECT_READ_ONLY;
- 8033fae: 2201 movs r2, #1
- 8033fb0: 7062 strb r2, [r4, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- 8033fb2: 2204 movs r2, #4
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- od->v_len = sizeof(s32_t);
- break;
- case 2: /* ifDescr */
- od->instance = MIB_OBJECT_TAB;
- 8033fb4: 7023 strb r3, [r4, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- 8033fb6: 70a2 strb r2, [r4, #2]
- 8033fb8: e028 b.n 803400c <ifentry_get_object_def+0x98>
- /** @todo this should be some sort of sizeof(struct netif.name) */
- od->v_len = 2;
- break;
- case 5: /* ifSpeed */
- case 21: /* ifOutQLen */
- od->instance = MIB_OBJECT_TAB;
- 8033fba: 7023 strb r3, [r4, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033fbc: 2301 movs r3, #1
- 8033fbe: 7063 strb r3, [r4, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE);
- 8033fc0: 2342 movs r3, #66 ; 0x42
- 8033fc2: e01a b.n 8033ffa <ifentry_get_object_def+0x86>
- break;
- case 6: /* ifPhysAddress */
- {
- struct netif *netif;
- snmp_ifindextonetif(ident[1], &netif);
- 8033fc4: 6808 ldr r0, [r1, #0]
- 8033fc6: a901 add r1, sp, #4
- 8033fc8: f001 f824 bl 8035014 <snmp_ifindextonetif>
- od->instance = MIB_OBJECT_TAB;
- 8033fcc: 2302 movs r3, #2
- 8033fce: 7023 strb r3, [r4, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033fd0: 2301 movs r3, #1
- 8033fd2: 7063 strb r3, [r4, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- 8033fd4: 2304 movs r3, #4
- 8033fd6: 70a3 strb r3, [r4, #2]
- od->v_len = netif->hwaddr_len;
- 8033fd8: 9b01 ldr r3, [sp, #4]
- 8033fda: f893 3026 ldrb.w r3, [r3, #38] ; 0x26
- 8033fde: e015 b.n 803400c <ifentry_get_object_def+0x98>
- }
- break;
- case 7: /* ifAdminStatus */
- od->instance = MIB_OBJECT_TAB;
- 8033fe0: 7023 strb r3, [r4, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 8033fe2: 2203 movs r2, #3
- 8033fe4: 7062 strb r2, [r4, #1]
- 8033fe6: e008 b.n 8033ffa <ifentry_get_object_def+0x86>
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- od->v_len = sizeof(s32_t);
- break;
- case 9: /* ifLastChange */
- od->instance = MIB_OBJECT_TAB;
- 8033fe8: 7023 strb r3, [r4, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033fea: 2301 movs r3, #1
- 8033fec: 7063 strb r3, [r4, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS);
- 8033fee: 2343 movs r3, #67 ; 0x43
- 8033ff0: e003 b.n 8033ffa <ifentry_get_object_def+0x86>
- case 16: /* ifOutOctets */
- case 17: /* ifOutUcastPkts */
- case 18: /* ifOutNUcastPkts */
- case 19: /* ifOutDiscarts */
- case 20: /* ifOutErrors */
- od->instance = MIB_OBJECT_TAB;
- 8033ff2: 7023 strb r3, [r4, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8033ff4: 2301 movs r3, #1
- 8033ff6: 7063 strb r3, [r4, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- 8033ff8: 2341 movs r3, #65 ; 0x41
- 8033ffa: 70a3 strb r3, [r4, #2]
- od->v_len = sizeof(u32_t);
- 8033ffc: 2304 movs r3, #4
- 8033ffe: e005 b.n 803400c <ifentry_get_object_def+0x98>
- break;
- case 22: /* ifSpecific */
- /** @note returning zeroDotZero (0.0) no media specific MIB support */
- od->instance = MIB_OBJECT_TAB;
- 8034000: 7023 strb r3, [r4, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8034002: 2301 movs r3, #1
- 8034004: 7063 strb r3, [r4, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID);
- 8034006: 2306 movs r3, #6
- 8034008: 70a3 strb r3, [r4, #2]
- od->v_len = ifspecific.len * sizeof(s32_t);
- 803400a: 2308 movs r3, #8
- 803400c: 80a3 strh r3, [r4, #4]
- break;
- 803400e: e001 b.n 8034014 <ifentry_get_object_def+0xa0>
- };
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("ifentry_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 8034010: 2300 movs r3, #0
- 8034012: 7023 strb r3, [r4, #0]
- }
- }
- 8034014: bd1c pop {r2, r3, r4, pc}
- 8034016: 0000 movs r0, r0
- 08034018 <udpentry_get_value>:
- }
- }
- static void
- udpentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034018: b537 push {r0, r1, r2, r4, r5, lr}
- 803401a: 4604 mov r4, r0
- struct udp_pcb *pcb;
- ip_addr_t ip;
- u16_t port;
- LWIP_UNUSED_ARG(len);
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- 803401c: 6880 ldr r0, [r0, #8]
- 803401e: a901 add r1, sp, #4
- 8034020: 3004 adds r0, #4
- }
- }
- static void
- udpentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034022: 4615 mov r5, r2
- struct udp_pcb *pcb;
- ip_addr_t ip;
- u16_t port;
- LWIP_UNUSED_ARG(len);
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- 8034024: f001 f814 bl 8035050 <snmp_oidtoip>
- LWIP_ASSERT("invalid port", (od->id_inst_ptr[5] >= 0) && (od->id_inst_ptr[5] <= 0xffff));
- port = (u16_t)od->id_inst_ptr[5];
- 8034028: 68a1 ldr r1, [r4, #8]
- pcb = udp_pcbs;
- 803402a: 4b0c ldr r3, [pc, #48] ; (803405c <udpentry_get_value+0x44>)
- u16_t port;
- LWIP_UNUSED_ARG(len);
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- LWIP_ASSERT("invalid port", (od->id_inst_ptr[5] >= 0) && (od->id_inst_ptr[5] <= 0xffff));
- port = (u16_t)od->id_inst_ptr[5];
- 803402c: 8a8a ldrh r2, [r1, #20]
- pcb = udp_pcbs;
- 803402e: 681b ldr r3, [r3, #0]
- while ((pcb != NULL) &&
- !(ip_addr_cmp(&pcb->local_ip, &ip) &&
- 8034030: 9801 ldr r0, [sp, #4]
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- LWIP_ASSERT("invalid port", (od->id_inst_ptr[5] >= 0) && (od->id_inst_ptr[5] <= 0xffff));
- port = (u16_t)od->id_inst_ptr[5];
- pcb = udp_pcbs;
- while ((pcb != NULL) &&
- 8034032: e000 b.n 8034036 <udpentry_get_value+0x1e>
- !(ip_addr_cmp(&pcb->local_ip, &ip) &&
- (pcb->local_port == port)))
- {
- pcb = pcb->next;
- 8034034: 68db ldr r3, [r3, #12]
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- LWIP_ASSERT("invalid port", (od->id_inst_ptr[5] >= 0) && (od->id_inst_ptr[5] <= 0xffff));
- port = (u16_t)od->id_inst_ptr[5];
- pcb = udp_pcbs;
- while ((pcb != NULL) &&
- 8034036: b17b cbz r3, 8034058 <udpentry_get_value+0x40>
- 8034038: 681c ldr r4, [r3, #0]
- 803403a: 4284 cmp r4, r0
- 803403c: d1fa bne.n 8034034 <udpentry_get_value+0x1c>
- !(ip_addr_cmp(&pcb->local_ip, &ip) &&
- (pcb->local_port == port)))
- 803403e: 8a5c ldrh r4, [r3, #18]
- LWIP_ASSERT("invalid port", (od->id_inst_ptr[5] >= 0) && (od->id_inst_ptr[5] <= 0xffff));
- port = (u16_t)od->id_inst_ptr[5];
- pcb = udp_pcbs;
- while ((pcb != NULL) &&
- !(ip_addr_cmp(&pcb->local_ip, &ip) &&
- 8034040: 4294 cmp r4, r2
- 8034042: d1f7 bne.n 8034034 <udpentry_get_value+0x1c>
- 8034044: e003 b.n 803404e <udpentry_get_value+0x36>
- switch (id)
- {
- case 1: /* udpLocalAddress */
- {
- ip_addr_t *dst = (ip_addr_t*)value;
- *dst = pcb->local_ip;
- 8034046: 6028 str r0, [r5, #0]
- }
- break;
- 8034048: e006 b.n 8034058 <udpentry_get_value+0x40>
- case 2: /* udpLocalPort */
- {
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = pcb->local_port;
- 803404a: 602a str r2, [r5, #0]
- }
- break;
- 803404c: e004 b.n 8034058 <udpentry_get_value+0x40>
- if (pcb != NULL)
- {
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- switch (id)
- 803404e: 780b ldrb r3, [r1, #0]
- 8034050: 2b01 cmp r3, #1
- 8034052: d0f8 beq.n 8034046 <udpentry_get_value+0x2e>
- 8034054: 2b02 cmp r3, #2
- 8034056: d0f8 beq.n 803404a <udpentry_get_value+0x32>
- *sint_ptr = pcb->local_port;
- }
- break;
- }
- }
- }
- 8034058: bd3e pop {r1, r2, r3, r4, r5, pc}
- 803405a: bf00 nop
- 803405c: 2000f6d8 .word 0x2000f6d8
- 08034060 <ip_addrentry_get_value>:
- }
- }
- static void
- ip_addrentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034060: b573 push {r0, r1, r4, r5, r6, lr}
- 8034062: 4606 mov r6, r0
- u16_t ifidx;
- ip_addr_t ip;
- struct netif *netif = netif_list;
- LWIP_UNUSED_ARG(len);
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- 8034064: 6880 ldr r0, [r0, #8]
- ip_addrentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- u8_t id;
- u16_t ifidx;
- ip_addr_t ip;
- struct netif *netif = netif_list;
- 8034066: 4b18 ldr r3, [pc, #96] ; (80340c8 <ip_addrentry_get_value+0x68>)
- LWIP_UNUSED_ARG(len);
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- 8034068: a901 add r1, sp, #4
- 803406a: 3004 adds r0, #4
- ip_addrentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- u8_t id;
- u16_t ifidx;
- ip_addr_t ip;
- struct netif *netif = netif_list;
- 803406c: 681c ldr r4, [r3, #0]
- }
- }
- static void
- ip_addrentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 803406e: 4615 mov r5, r2
- u16_t ifidx;
- ip_addr_t ip;
- struct netif *netif = netif_list;
- LWIP_UNUSED_ARG(len);
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- 8034070: f000 ffee bl 8035050 <snmp_oidtoip>
- ifidx = 0;
- while ((netif != NULL) && !ip_addr_cmp(&ip, &netif->ip_addr))
- 8034074: 9901 ldr r1, [sp, #4]
- ip_addr_t ip;
- struct netif *netif = netif_list;
- LWIP_UNUSED_ARG(len);
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- ifidx = 0;
- 8034076: 2300 movs r3, #0
- while ((netif != NULL) && !ip_addr_cmp(&ip, &netif->ip_addr))
- 8034078: e002 b.n 8034080 <ip_addrentry_get_value+0x20>
- {
- netif = netif->next;
- ifidx++;
- 803407a: 3301 adds r3, #1
- LWIP_UNUSED_ARG(len);
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- ifidx = 0;
- while ((netif != NULL) && !ip_addr_cmp(&ip, &netif->ip_addr))
- {
- netif = netif->next;
- 803407c: 6824 ldr r4, [r4, #0]
- ifidx++;
- 803407e: b29b uxth r3, r3
- struct netif *netif = netif_list;
- LWIP_UNUSED_ARG(len);
- snmp_oidtoip(&od->id_inst_ptr[1], &ip);
- ifidx = 0;
- while ((netif != NULL) && !ip_addr_cmp(&ip, &netif->ip_addr))
- 8034080: b304 cbz r4, 80340c4 <ip_addrentry_get_value+0x64>
- 8034082: 6862 ldr r2, [r4, #4]
- 8034084: 4291 cmp r1, r2
- 8034086: d1f8 bne.n 803407a <ip_addrentry_get_value+0x1a>
- 8034088: e00a b.n 80340a0 <ip_addrentry_get_value+0x40>
- switch (id)
- {
- case 1: /* ipAdEntAddr */
- {
- ip_addr_t *dst = (ip_addr_t*)value;
- *dst = netif->ip_addr;
- 803408a: 6863 ldr r3, [r4, #4]
- 803408c: e006 b.n 803409c <ip_addrentry_get_value+0x3c>
- }
- break;
- case 2: /* ipAdEntIfIndex */
- {
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = ifidx + 1;
- 803408e: 3301 adds r3, #1
- 8034090: e004 b.n 803409c <ip_addrentry_get_value+0x3c>
- }
- break;
- case 3: /* ipAdEntNetMask */
- {
- ip_addr_t *dst = (ip_addr_t*)value;
- *dst = netif->netmask;
- 8034092: 68a3 ldr r3, [r4, #8]
- 8034094: e002 b.n 803409c <ip_addrentry_get_value+0x3c>
- {
- s32_t *sint_ptr = (s32_t*)value;
- /* lwIP oddity, there's no broadcast
- address in the netif we can rely on */
- *sint_ptr = IPADDR_BROADCAST & 1;
- 8034096: 2301 movs r3, #1
- 8034098: e000 b.n 803409c <ip_addrentry_get_value+0x3c>
- *sint_ptr = (IP_HLEN + ((IP_REASS_MAX_PBUFS/2) *
- (PBUF_POOL_BUFSIZE - PBUF_LINK_HLEN - IP_HLEN)));
- #else
- /** @todo returning MTU would be a bad thing and
- returning a wild guess like '576' isn't good either */
- *sint_ptr = 0;
- 803409a: 2300 movs r3, #0
- 803409c: 602b str r3, [r5, #0]
- #endif
- }
- break;
- 803409e: e011 b.n 80340c4 <ip_addrentry_get_value+0x64>
- }
- if (netif != NULL)
- {
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 80340a0: 68b2 ldr r2, [r6, #8]
- switch (id)
- 80340a2: 7812 ldrb r2, [r2, #0]
- 80340a4: 3a01 subs r2, #1
- 80340a6: 2a04 cmp r2, #4
- 80340a8: d80c bhi.n 80340c4 <ip_addrentry_get_value+0x64>
- 80340aa: a101 add r1, pc, #4 ; (adr r1, 80340b0 <ip_addrentry_get_value+0x50>)
- 80340ac: f851 f022 ldr.w pc, [r1, r2, lsl #2]
- 80340b0: 0803408b .word 0x0803408b
- 80340b4: 0803408f .word 0x0803408f
- 80340b8: 08034093 .word 0x08034093
- 80340bc: 08034097 .word 0x08034097
- 80340c0: 0803409b .word 0x0803409b
- #endif
- }
- break;
- }
- }
- }
- 80340c4: bd7c pop {r2, r3, r4, r5, r6, pc}
- 80340c6: bf00 nop
- 80340c8: 2000f6b0 .word 0x2000f6b0
- 080340cc <ip_ntomentry_get_value>:
- }
- }
- static void
- ip_ntomentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 80340cc: b530 push {r4, r5, lr}
- struct netif *netif;
- LWIP_UNUSED_ARG(len);
- LWIP_UNUSED_ARG(value);/* if !LWIP_ARP */
- snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
- 80340ce: 6883 ldr r3, [r0, #8]
- }
- }
- static void
- ip_ntomentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 80340d0: b085 sub sp, #20
- 80340d2: 4605 mov r5, r0
- struct netif *netif;
- LWIP_UNUSED_ARG(len);
- LWIP_UNUSED_ARG(value);/* if !LWIP_ARP */
- snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
- 80340d4: a903 add r1, sp, #12
- 80340d6: 6858 ldr r0, [r3, #4]
- }
- }
- static void
- ip_ntomentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 80340d8: 4614 mov r4, r2
- struct netif *netif;
- LWIP_UNUSED_ARG(len);
- LWIP_UNUSED_ARG(value);/* if !LWIP_ARP */
- snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
- 80340da: f000 ff9b bl 8035014 <snmp_ifindextonetif>
- snmp_oidtoip(&od->id_inst_ptr[2], &ip);
- 80340de: 68a8 ldr r0, [r5, #8]
- 80340e0: a902 add r1, sp, #8
- 80340e2: 3008 adds r0, #8
- 80340e4: f000 ffb4 bl 8035050 <snmp_oidtoip>
- #if LWIP_ARP /** @todo implement a netif_find_addr */
- if (etharp_find_addr(netif, &ip, ðaddr_ret, &ipaddr_ret) > -1)
- 80340e8: 9803 ldr r0, [sp, #12]
- 80340ea: a902 add r1, sp, #8
- 80340ec: 466a mov r2, sp
- 80340ee: ab01 add r3, sp, #4
- 80340f0: f002 fff4 bl 80370dc <etharp_find_addr>
- 80340f4: 2800 cmp r0, #0
- 80340f6: db15 blt.n 8034124 <ip_ntomentry_get_value+0x58>
- {
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 80340f8: 68ab ldr r3, [r5, #8]
- switch (id)
- 80340fa: 781a ldrb r2, [r3, #0]
- 80340fc: 3a01 subs r2, #1
- 80340fe: 2a03 cmp r2, #3
- 8034100: d810 bhi.n 8034124 <ip_ntomentry_get_value+0x58>
- 8034102: e8df f002 tbb [pc, r2]
- 8034106: 0402 .short 0x0402
- 8034108: 0d0a .short 0x0d0a
- {
- case 1: /* ipNetToMediaIfIndex */
- {
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = od->id_inst_ptr[1];
- 803410a: 685b ldr r3, [r3, #4]
- 803410c: e009 b.n 8034122 <ip_ntomentry_get_value+0x56>
- break;
- case 2: /* ipNetToMediaPhysAddress */
- {
- struct eth_addr *dst = (struct eth_addr*)value;
- *dst = *ethaddr_ret;
- 803410e: 9b00 ldr r3, [sp, #0]
- 8034110: 681a ldr r2, [r3, #0]
- 8034112: 6022 str r2, [r4, #0]
- 8034114: 889b ldrh r3, [r3, #4]
- 8034116: 80a3 strh r3, [r4, #4]
- }
- break;
- 8034118: e004 b.n 8034124 <ip_ntomentry_get_value+0x58>
- case 3: /* ipNetToMediaNetAddress */
- {
- ip_addr_t *dst = (ip_addr_t*)value;
- *dst = *ipaddr_ret;
- 803411a: 9b01 ldr r3, [sp, #4]
- 803411c: 681b ldr r3, [r3, #0]
- 803411e: e000 b.n 8034122 <ip_ntomentry_get_value+0x56>
- break;
- case 4: /* ipNetToMediaType */
- {
- s32_t *sint_ptr = (s32_t*)value;
- /* dynamic (?) */
- *sint_ptr = 3;
- 8034120: 2303 movs r3, #3
- 8034122: 6023 str r3, [r4, #0]
- }
- break;
- }
- }
- #endif /* LWIP_ARP */
- }
- 8034124: b005 add sp, #20
- 8034126: bd30 pop {r4, r5, pc}
- 08034128 <atentry_get_value>:
- }
- }
- static void
- atentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034128: b530 push {r4, r5, lr}
- struct netif *netif;
- LWIP_UNUSED_ARG(len);
- LWIP_UNUSED_ARG(value);/* if !LWIP_ARP */
- snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
- 803412a: 6883 ldr r3, [r0, #8]
- }
- }
- static void
- atentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 803412c: b085 sub sp, #20
- 803412e: 4605 mov r5, r0
- struct netif *netif;
- LWIP_UNUSED_ARG(len);
- LWIP_UNUSED_ARG(value);/* if !LWIP_ARP */
- snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
- 8034130: a903 add r1, sp, #12
- 8034132: 6858 ldr r0, [r3, #4]
- }
- }
- static void
- atentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034134: 4614 mov r4, r2
- struct netif *netif;
- LWIP_UNUSED_ARG(len);
- LWIP_UNUSED_ARG(value);/* if !LWIP_ARP */
- snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
- 8034136: f000 ff6d bl 8035014 <snmp_ifindextonetif>
- snmp_oidtoip(&od->id_inst_ptr[2], &ip);
- 803413a: 68a8 ldr r0, [r5, #8]
- 803413c: a902 add r1, sp, #8
- 803413e: 3008 adds r0, #8
- 8034140: f000 ff86 bl 8035050 <snmp_oidtoip>
- #if LWIP_ARP /** @todo implement a netif_find_addr */
- if (etharp_find_addr(netif, &ip, ðaddr_ret, &ipaddr_ret) > -1)
- 8034144: 9803 ldr r0, [sp, #12]
- 8034146: a902 add r1, sp, #8
- 8034148: 466a mov r2, sp
- 803414a: ab01 add r3, sp, #4
- 803414c: f002 ffc6 bl 80370dc <etharp_find_addr>
- 8034150: 2800 cmp r0, #0
- 8034152: db12 blt.n 803417a <atentry_get_value+0x52>
- {
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8034154: 68aa ldr r2, [r5, #8]
- switch (id)
- 8034156: 7813 ldrb r3, [r2, #0]
- 8034158: 2b02 cmp r3, #2
- 803415a: d005 beq.n 8034168 <atentry_get_value+0x40>
- 803415c: 2b03 cmp r3, #3
- 803415e: d009 beq.n 8034174 <atentry_get_value+0x4c>
- 8034160: 2b01 cmp r3, #1
- 8034162: d10a bne.n 803417a <atentry_get_value+0x52>
- {
- case 1: /* atIfIndex */
- {
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = od->id_inst_ptr[1];
- 8034164: 6853 ldr r3, [r2, #4]
- 8034166: e007 b.n 8034178 <atentry_get_value+0x50>
- break;
- case 2: /* atPhysAddress */
- {
- struct eth_addr *dst = (struct eth_addr*)value;
- *dst = *ethaddr_ret;
- 8034168: 9b00 ldr r3, [sp, #0]
- 803416a: 681a ldr r2, [r3, #0]
- 803416c: 6022 str r2, [r4, #0]
- 803416e: 889b ldrh r3, [r3, #4]
- 8034170: 80a3 strh r3, [r4, #4]
- }
- break;
- 8034172: e002 b.n 803417a <atentry_get_value+0x52>
- case 3: /* atNetAddress */
- {
- ip_addr_t *dst = (ip_addr_t*)value;
- *dst = *ipaddr_ret;
- 8034174: 9b01 ldr r3, [sp, #4]
- 8034176: 681b ldr r3, [r3, #0]
- 8034178: 6023 str r3, [r4, #0]
- }
- break;
- }
- }
- #endif /* LWIP_ARP */
- }
- 803417a: b005 add sp, #20
- 803417c: bd30 pop {r4, r5, pc}
- 803417e: 0000 movs r0, r0
- 08034180 <system_set_test>:
- u8_t id, set_ok;
- LWIP_UNUSED_ARG(value);
- set_ok = 0;
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8034180: 6883 ldr r3, [r0, #8]
- switch (id)
- 8034182: 781b ldrb r3, [r3, #0]
- 8034184: 2b05 cmp r3, #5
- 8034186: d007 beq.n 8034198 <system_set_test+0x18>
- 8034188: 2b06 cmp r3, #6
- 803418a: d00f beq.n 80341ac <system_set_test+0x2c>
- 803418c: 2b04 cmp r3, #4
- 803418e: d111 bne.n 80341b4 <system_set_test+0x34>
- {
- case 4: /* sysContact */
- if ((syscontact_ptr != syscontact_default) &&
- 8034190: 4b09 ldr r3, [pc, #36] ; (80341b8 <system_set_test+0x38>)
- 8034192: 681a ldr r2, [r3, #0]
- 8034194: 4b09 ldr r3, [pc, #36] ; (80341bc <system_set_test+0x3c>)
- 8034196: e002 b.n 803419e <system_set_test+0x1e>
- {
- set_ok = 1;
- }
- break;
- case 5: /* sysName */
- if ((sysname_ptr != sysname_default) &&
- 8034198: 4b09 ldr r3, [pc, #36] ; (80341c0 <system_set_test+0x40>)
- 803419a: 681a ldr r2, [r3, #0]
- 803419c: 4b09 ldr r3, [pc, #36] ; (80341c4 <system_set_test+0x44>)
- 803419e: 429a cmp r2, r3
- 80341a0: d008 beq.n 80341b4 <system_set_test+0x34>
- system_set_test(struct obj_def *od, u16_t len, void *value)
- {
- u8_t id, set_ok;
- LWIP_UNUSED_ARG(value);
- set_ok = 0;
- 80341a2: 29ff cmp r1, #255 ; 0xff
- 80341a4: bf8c ite hi
- 80341a6: 2000 movhi r0, #0
- 80341a8: 2001 movls r0, #1
- 80341aa: 4770 bx lr
- {
- set_ok = 1;
- }
- break;
- case 6: /* sysLocation */
- if ((syslocation_ptr != syslocation_default) &&
- 80341ac: 4b06 ldr r3, [pc, #24] ; (80341c8 <system_set_test+0x48>)
- 80341ae: 681a ldr r2, [r3, #0]
- 80341b0: 4b06 ldr r3, [pc, #24] ; (80341cc <system_set_test+0x4c>)
- 80341b2: e7f4 b.n 803419e <system_set_test+0x1e>
- system_set_test(struct obj_def *od, u16_t len, void *value)
- {
- u8_t id, set_ok;
- LWIP_UNUSED_ARG(value);
- set_ok = 0;
- 80341b4: 2000 movs r0, #0
- set_ok = 1;
- }
- break;
- };
- return set_ok;
- }
- 80341b6: 4770 bx lr
- 80341b8: 20000914 .word 0x20000914
- 80341bc: 08045408 .word 0x08045408
- 80341c0: 200008a0 .word 0x200008a0
- 80341c4: 08045120 .word 0x08045120
- 80341c8: 20000a2c .word 0x20000a2c
- 80341cc: 08045150 .word 0x08045150
- 080341d0 <atentry_get_object_def>:
- {
- /* return to object name, adding index depth (5) */
- ident_len += 5;
- ident -= 5;
- if (ident_len == 6)
- 80341d0: 2801 cmp r0, #1
- 80341d2: d120 bne.n 8034216 <atentry_get_object_def+0x46>
- {
- od->id_inst_len = ident_len;
- 80341d4: 2006 movs r0, #6
- static void
- atentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (5) */
- ident_len += 5;
- ident -= 5;
- 80341d6: f1a1 0314 sub.w r3, r1, #20
- if (ident_len == 6)
- {
- od->id_inst_len = ident_len;
- 80341da: 7190 strb r0, [r2, #6]
- od->id_inst_ptr = ident;
- 80341dc: 6093 str r3, [r2, #8]
- switch (ident[0])
- 80341de: f851 3c14 ldr.w r3, [r1, #-20]
- 80341e2: 2b02 cmp r3, #2
- 80341e4: d008 beq.n 80341f8 <atentry_get_object_def+0x28>
- 80341e6: 2b03 cmp r3, #3
- 80341e8: d00d beq.n 8034206 <atentry_get_object_def+0x36>
- 80341ea: 2b01 cmp r3, #1
- 80341ec: d113 bne.n 8034216 <atentry_get_object_def+0x46>
- {
- case 1: /* atIfIndex */
- od->instance = MIB_OBJECT_TAB;
- 80341ee: 2302 movs r3, #2
- od->access = MIB_OBJECT_READ_WRITE;
- 80341f0: 2103 movs r1, #3
- od->id_inst_ptr = ident;
- switch (ident[0])
- {
- case 1: /* atIfIndex */
- od->instance = MIB_OBJECT_TAB;
- 80341f2: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 80341f4: 7051 strb r1, [r2, #1]
- 80341f6: e00a b.n 803420e <atentry_get_object_def+0x3e>
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- od->v_len = sizeof(s32_t);
- break;
- case 2: /* atPhysAddress */
- od->instance = MIB_OBJECT_TAB;
- 80341f8: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 80341fa: 2303 movs r3, #3
- 80341fc: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- 80341fe: 2304 movs r3, #4
- 8034200: 7093 strb r3, [r2, #2]
- od->v_len = 6; /** @todo try to use netif::hwaddr_len */
- 8034202: 8090 strh r0, [r2, #4]
- break;
- 8034204: 4770 bx lr
- case 3: /* atNetAddress */
- od->instance = MIB_OBJECT_TAB;
- 8034206: 2102 movs r1, #2
- od->access = MIB_OBJECT_READ_WRITE;
- 8034208: 7053 strb r3, [r2, #1]
- od->access = MIB_OBJECT_READ_WRITE;
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- od->v_len = 6; /** @todo try to use netif::hwaddr_len */
- break;
- case 3: /* atNetAddress */
- od->instance = MIB_OBJECT_TAB;
- 803420a: 7011 strb r1, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
- 803420c: 2340 movs r3, #64 ; 0x40
- 803420e: 7093 strb r3, [r2, #2]
- od->v_len = 4;
- 8034210: 2304 movs r3, #4
- 8034212: 8093 strh r3, [r2, #4]
- break;
- 8034214: 4770 bx lr
- }
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("atentry_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 8034216: 2300 movs r3, #0
- 8034218: 7013 strb r3, [r2, #0]
- 803421a: 4770 bx lr
- 0803421c <ip_get_object_def>:
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 803421c: 2801 cmp r0, #1
- #endif /* LWIP_ARP */
- }
- static void
- ip_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- 803421e: b510 push {r4, lr}
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 8034220: d121 bne.n 8034266 <ip_get_object_def+0x4a>
- {
- od->id_inst_len = ident_len;
- 8034222: 2402 movs r4, #2
- {
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- 8034224: 1f0b subs r3, r1, #4
- if (ident_len == 2)
- {
- od->id_inst_len = ident_len;
- 8034226: 7194 strb r4, [r2, #6]
- od->id_inst_ptr = ident;
- 8034228: 6093 str r3, [r2, #8]
- LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
- id = (u8_t)ident[0];
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def ip.%"U16_F".0\n",(u16_t)id));
- switch (id)
- 803422a: f811 3c04 ldrb.w r3, [r1, #-4]
- 803422e: 2b17 cmp r3, #23
- 8034230: d819 bhi.n 8034266 <ip_get_object_def+0x4a>
- 8034232: 490e ldr r1, [pc, #56] ; (803426c <ip_get_object_def+0x50>)
- 8034234: 4099 lsls r1, r3
- 8034236: d40b bmi.n 8034250 <ip_get_object_def+0x34>
- 8034238: f44f 2180 mov.w r1, #262144 ; 0x40000
- 803423c: 4099 lsls r1, r3
- 803423e: d40c bmi.n 803425a <ip_get_object_def+0x3e>
- 8034240: f04f 41c0 mov.w r1, #1610612736 ; 0x60000000
- 8034244: 4099 lsls r1, r3
- 8034246: d50e bpl.n 8034266 <ip_get_object_def+0x4a>
- {
- case 1: /* ipForwarding */
- case 2: /* ipDefaultTTL */
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_WRITE;
- 8034248: 2303 movs r3, #3
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def ip.%"U16_F".0\n",(u16_t)id));
- switch (id)
- {
- case 1: /* ipForwarding */
- case 2: /* ipDefaultTTL */
- od->instance = MIB_OBJECT_SCALAR;
- 803424a: 7010 strb r0, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 803424c: 7053 strb r3, [r2, #1]
- 803424e: e006 b.n 803425e <ip_get_object_def+0x42>
- case 18: /* ipFragFails */
- case 19: /* ipFragCreates */
- case 23: /* ipRoutingDiscards */
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- 8034250: 2341 movs r3, #65 ; 0x41
- case 16: /* ipReasmFails */
- case 17: /* ipFragOKs */
- case 18: /* ipFragFails */
- case 19: /* ipFragCreates */
- case 23: /* ipRoutingDiscards */
- od->instance = MIB_OBJECT_SCALAR;
- 8034252: 7010 strb r0, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8034254: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- 8034256: 7093 strb r3, [r2, #2]
- 8034258: e002 b.n 8034260 <ip_get_object_def+0x44>
- od->v_len = sizeof(u32_t);
- break;
- case 13: /* ipReasmTimeout */
- od->instance = MIB_OBJECT_SCALAR;
- 803425a: 7010 strb r0, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 803425c: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- 803425e: 7094 strb r4, [r2, #2]
- od->v_len = sizeof(s32_t);
- 8034260: 2304 movs r3, #4
- 8034262: 8093 strh r3, [r2, #4]
- break;
- 8034264: bd10 pop {r4, pc}
- };
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 8034266: 2300 movs r3, #0
- 8034268: 7013 strb r3, [r2, #0]
- 803426a: bd10 pop {r4, pc}
- 803426c: 1ffbf100 .word 0x1ffbf100
- 08034270 <ip_addrentry_get_object_def>:
- {
- /* return to object name, adding index depth (4) */
- ident_len += 4;
- ident -= 4;
- if (ident_len == 5)
- 8034270: 2801 cmp r0, #1
- 8034272: d11c bne.n 80342ae <ip_addrentry_get_object_def+0x3e>
- {
- u8_t id;
- od->id_inst_len = ident_len;
- 8034274: 2305 movs r3, #5
- 8034276: 7193 strb r3, [r2, #6]
- static void
- ip_addrentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (4) */
- ident_len += 4;
- ident -= 4;
- 8034278: f1a1 0310 sub.w r3, r1, #16
- if (ident_len == 5)
- {
- u8_t id;
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- 803427c: 6093 str r3, [r2, #8]
- LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
- id = (u8_t)ident[0];
- switch (id)
- 803427e: f811 3c10 ldrb.w r3, [r1, #-16]
- 8034282: 2b05 cmp r3, #5
- 8034284: d813 bhi.n 80342ae <ip_addrentry_get_object_def+0x3e>
- 8034286: f04f 5130 mov.w r1, #738197504 ; 0x2c000000
- 803428a: 4099 lsls r1, r3
- 803428c: d408 bmi.n 80342a0 <ip_addrentry_get_object_def+0x30>
- 803428e: f04f 41a0 mov.w r1, #1342177280 ; 0x50000000
- 8034292: 4099 lsls r1, r3
- 8034294: d50b bpl.n 80342ae <ip_addrentry_get_object_def+0x3e>
- {
- case 1: /* ipAdEntAddr */
- case 3: /* ipAdEntNetMask */
- od->instance = MIB_OBJECT_TAB;
- 8034296: 2302 movs r3, #2
- 8034298: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 803429a: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
- 803429c: 2340 movs r3, #64 ; 0x40
- 803429e: e002 b.n 80342a6 <ip_addrentry_get_object_def+0x36>
- od->v_len = 4;
- break;
- case 2: /* ipAdEntIfIndex */
- case 4: /* ipAdEntBcastAddr */
- case 5: /* ipAdEntReasmMaxSize */
- od->instance = MIB_OBJECT_TAB;
- 80342a0: 2302 movs r3, #2
- 80342a2: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 80342a4: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- 80342a6: 7093 strb r3, [r2, #2]
- od->v_len = sizeof(s32_t);
- 80342a8: 2304 movs r3, #4
- 80342aa: 8093 strh r3, [r2, #4]
- break;
- 80342ac: 4770 bx lr
- }
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_addrentry_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 80342ae: 2300 movs r3, #0
- 80342b0: 7013 strb r3, [r2, #0]
- 80342b2: 4770 bx lr
- 080342b4 <ip_ntomentry_get_object_def>:
- {
- /* return to object name, adding index depth (5) */
- ident_len += 5;
- ident -= 5;
- if (ident_len == 6)
- 80342b4: 2801 cmp r0, #1
- 80342b6: d123 bne.n 8034300 <ip_ntomentry_get_object_def+0x4c>
- {
- u8_t id;
- od->id_inst_len = ident_len;
- 80342b8: 2306 movs r3, #6
- 80342ba: 7193 strb r3, [r2, #6]
- static void
- ip_ntomentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (5) */
- ident_len += 5;
- ident -= 5;
- 80342bc: f1a1 0314 sub.w r3, r1, #20
- if (ident_len == 6)
- {
- u8_t id;
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- 80342c0: 6093 str r3, [r2, #8]
- LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
- id = (u8_t)ident[0];
- switch (id)
- 80342c2: f811 3c14 ldrb.w r3, [r1, #-20]
- 80342c6: 3b01 subs r3, #1
- 80342c8: 2b03 cmp r3, #3
- 80342ca: d819 bhi.n 8034300 <ip_ntomentry_get_object_def+0x4c>
- 80342cc: e8df f003 tbb [pc, r3]
- 80342d0: 020f0702 .word 0x020f0702
- {
- case 1: /* ipNetToMediaIfIndex */
- case 4: /* ipNetToMediaType */
- od->instance = MIB_OBJECT_TAB;
- 80342d4: 2302 movs r3, #2
- od->access = MIB_OBJECT_READ_WRITE;
- 80342d6: 2103 movs r1, #3
- id = (u8_t)ident[0];
- switch (id)
- {
- case 1: /* ipNetToMediaIfIndex */
- case 4: /* ipNetToMediaType */
- od->instance = MIB_OBJECT_TAB;
- 80342d8: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 80342da: 7051 strb r1, [r2, #1]
- 80342dc: e00c b.n 80342f8 <ip_ntomentry_get_object_def+0x44>
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- od->v_len = sizeof(s32_t);
- break;
- case 2: /* ipNetToMediaPhysAddress */
- od->instance = MIB_OBJECT_TAB;
- 80342de: 2302 movs r3, #2
- 80342e0: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 80342e2: 2303 movs r3, #3
- 80342e4: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
- 80342e6: 2304 movs r3, #4
- 80342e8: 7093 strb r3, [r2, #2]
- od->v_len = 6; /** @todo try to use netif::hwaddr_len */
- 80342ea: 2306 movs r3, #6
- 80342ec: e006 b.n 80342fc <ip_ntomentry_get_object_def+0x48>
- break;
- case 3: /* ipNetToMediaNetAddress */
- od->instance = MIB_OBJECT_TAB;
- 80342ee: 2302 movs r3, #2
- 80342f0: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 80342f2: 2303 movs r3, #3
- 80342f4: 7053 strb r3, [r2, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
- 80342f6: 2340 movs r3, #64 ; 0x40
- 80342f8: 7093 strb r3, [r2, #2]
- od->v_len = 4;
- 80342fa: 2304 movs r3, #4
- 80342fc: 8093 strh r3, [r2, #4]
- break;
- 80342fe: 4770 bx lr
- }
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("ip_ntomentry_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 8034300: 2300 movs r3, #0
- 8034302: 7013 strb r3, [r2, #0]
- 8034304: 4770 bx lr
- 8034306: 0000 movs r0, r0
- 08034308 <tcp_get_object_def>:
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 8034308: 2801 cmp r0, #1
- #if LWIP_TCP
- /** @todo tcp grp */
- static void
- tcp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- 803430a: b510 push {r4, lr}
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 803430c: d121 bne.n 8034352 <tcp_get_object_def+0x4a>
- {
- od->id_inst_len = ident_len;
- 803430e: 2402 movs r4, #2
- {
- u8_t id;
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- 8034310: 1f0b subs r3, r1, #4
- if (ident_len == 2)
- {
- od->id_inst_len = ident_len;
- 8034312: 7194 strb r4, [r2, #6]
- od->id_inst_ptr = ident;
- 8034314: 6093 str r3, [r2, #8]
- LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
- id = (u8_t)ident[0];
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def tcp.%"U16_F".0\n",(u16_t)id));
- switch (id)
- 8034316: f811 3c04 ldrb.w r3, [r1, #-4]
- 803431a: 2b0f cmp r3, #15
- 803431c: d819 bhi.n 8034352 <tcp_get_object_def+0x4a>
- 803431e: 490e ldr r1, [pc, #56] ; (8034358 <tcp_get_object_def+0x50>)
- 8034320: 4099 lsls r1, r3
- 8034322: d40b bmi.n 803433c <tcp_get_object_def+0x34>
- 8034324: f44f 0180 mov.w r1, #4194304 ; 0x400000
- 8034328: 4099 lsls r1, r3
- 803432a: d40b bmi.n 8034344 <tcp_get_object_def+0x3c>
- 803432c: f04f 41f0 mov.w r1, #2013265920 ; 0x78000000
- 8034330: 4099 lsls r1, r3
- 8034332: d50e bpl.n 8034352 <tcp_get_object_def+0x4a>
- {
- case 1: /* tcpRtoAlgorithm */
- case 2: /* tcpRtoMin */
- case 3: /* tcpRtoMax */
- case 4: /* tcpMaxConn */
- od->instance = MIB_OBJECT_SCALAR;
- 8034334: 7010 strb r0, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8034336: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- 8034338: 7094 strb r4, [r2, #2]
- 803433a: e007 b.n 803434c <tcp_get_object_def+0x44>
- case 10: /* tcpInSegs */
- case 11: /* tcpOutSegs */
- case 12: /* tcpRetransSegs */
- case 14: /* tcpInErrs */
- case 15: /* tcpOutRsts */
- od->instance = MIB_OBJECT_SCALAR;
- 803433c: 7010 strb r0, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 803433e: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- 8034340: 2341 movs r3, #65 ; 0x41
- 8034342: e002 b.n 803434a <tcp_get_object_def+0x42>
- od->v_len = sizeof(u32_t);
- break;
- case 9: /* tcpCurrEstab */
- od->instance = MIB_OBJECT_TAB;
- 8034344: 7014 strb r4, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8034346: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE);
- 8034348: 2342 movs r3, #66 ; 0x42
- 803434a: 7093 strb r3, [r2, #2]
- od->v_len = sizeof(u32_t);
- 803434c: 2304 movs r3, #4
- 803434e: 8093 strh r3, [r2, #4]
- break;
- 8034350: bd10 pop {r4, pc}
- };
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcp_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 8034352: 2300 movs r3, #0
- 8034354: 7013 strb r3, [r2, #0]
- 8034356: bd10 pop {r4, pc}
- 8034358: 07bb0000 .word 0x07bb0000
- 0803435c <udpentry_get_object_def>:
- {
- /* return to object name, adding index depth (5) */
- ident_len += 5;
- ident -= 5;
- if (ident_len == 6)
- 803435c: 2801 cmp r0, #1
- 803435e: d116 bne.n 803438e <udpentry_get_object_def+0x32>
- {
- od->id_inst_len = ident_len;
- 8034360: 2306 movs r3, #6
- 8034362: 7193 strb r3, [r2, #6]
- static void
- udpentry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (5) */
- ident_len += 5;
- ident -= 5;
- 8034364: f1a1 0314 sub.w r3, r1, #20
- if (ident_len == 6)
- {
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- 8034368: 6093 str r3, [r2, #8]
- switch (ident[0])
- 803436a: f851 3c14 ldr.w r3, [r1, #-20]
- 803436e: 2b01 cmp r3, #1
- 8034370: d002 beq.n 8034378 <udpentry_get_object_def+0x1c>
- 8034372: 2b02 cmp r3, #2
- 8034374: d10b bne.n 803438e <udpentry_get_object_def+0x32>
- 8034376: e004 b.n 8034382 <udpentry_get_object_def+0x26>
- {
- case 1: /* udpLocalAddress */
- od->instance = MIB_OBJECT_TAB;
- 8034378: 2102 movs r1, #2
- od->access = MIB_OBJECT_READ_ONLY;
- 803437a: 7053 strb r3, [r2, #1]
- od->id_inst_ptr = ident;
- switch (ident[0])
- {
- case 1: /* udpLocalAddress */
- od->instance = MIB_OBJECT_TAB;
- 803437c: 7011 strb r1, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR);
- 803437e: 2340 movs r3, #64 ; 0x40
- 8034380: e001 b.n 8034386 <udpentry_get_object_def+0x2a>
- od->v_len = 4;
- break;
- case 2: /* udpLocalPort */
- od->instance = MIB_OBJECT_TAB;
- 8034382: 7013 strb r3, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 8034384: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- 8034386: 7093 strb r3, [r2, #2]
- od->v_len = sizeof(s32_t);
- 8034388: 2304 movs r3, #4
- 803438a: 8093 strh r3, [r2, #4]
- break;
- 803438c: 4770 bx lr
- }
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("udpentry_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 803438e: 2300 movs r3, #0
- 8034390: 7013 strb r3, [r2, #0]
- 8034392: 4770 bx lr
- 08034394 <snmp_get_object_def>:
- snmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 8034394: 2801 cmp r0, #1
- }
- }
- static void
- snmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- 8034396: b510 push {r4, lr}
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 8034398: d119 bne.n 80343ce <snmp_get_object_def+0x3a>
- {
- u8_t id;
- od->id_inst_len = ident_len;
- 803439a: 2302 movs r3, #2
- 803439c: 7193 strb r3, [r2, #6]
- static void
- snmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- 803439e: 1f0c subs r4, r1, #4
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
- id = (u8_t)ident[0];
- switch (id)
- 80343a0: f811 1c04 ldrb.w r1, [r1, #-4]
- if (ident_len == 2)
- {
- u8_t id;
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- 80343a4: 6094 str r4, [r2, #8]
- LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
- id = (u8_t)ident[0];
- switch (id)
- 80343a6: 291e cmp r1, #30
- 80343a8: d811 bhi.n 80343ce <snmp_get_object_def+0x3a>
- 80343aa: 4c0a ldr r4, [pc, #40] ; (80343d4 <snmp_get_object_def+0x40>)
- 80343ac: 408c lsls r4, r1
- 80343ae: d403 bmi.n 80343b8 <snmp_get_object_def+0x24>
- 80343b0: fa13 f101 lsls.w r1, r3, r1
- 80343b4: d404 bmi.n 80343c0 <snmp_get_object_def+0x2c>
- 80343b6: e00a b.n 80343ce <snmp_get_object_def+0x3a>
- case 25: /* snmpOutGetRequests */
- case 26: /* snmpOutGetNexts */
- case 27: /* snmpOutSetRequests */
- case 28: /* snmpOutGetResponses */
- case 29: /* snmpOutTraps */
- od->instance = MIB_OBJECT_SCALAR;
- 80343b8: 7010 strb r0, [r2, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 80343ba: 7050 strb r0, [r2, #1]
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- 80343bc: 2341 movs r3, #65 ; 0x41
- 80343be: e002 b.n 80343c6 <snmp_get_object_def+0x32>
- od->v_len = sizeof(u32_t);
- break;
- case 30: /* snmpEnableAuthenTraps */
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_READ_WRITE;
- 80343c0: 2103 movs r1, #3
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER);
- od->v_len = sizeof(u32_t);
- break;
- case 30: /* snmpEnableAuthenTraps */
- od->instance = MIB_OBJECT_SCALAR;
- 80343c2: 7010 strb r0, [r2, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 80343c4: 7051 strb r1, [r2, #1]
- od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
- 80343c6: 7093 strb r3, [r2, #2]
- od->v_len = sizeof(s32_t);
- 80343c8: 2304 movs r3, #4
- 80343ca: 8093 strh r3, [r2, #4]
- break;
- 80343cc: bd10 pop {r4, pc}
- };
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 80343ce: 2300 movs r3, #0
- 80343d0: 7013 strb r3, [r2, #0]
- 80343d2: bd10 pop {r4, pc}
- 80343d4: 7efffefc .word 0x7efffefc
- 080343d8 <snmp_set_test>:
- u8_t id, set_ok;
- LWIP_UNUSED_ARG(len);
- set_ok = 0;
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 80343d8: 6883 ldr r3, [r0, #8]
- if (id == 30)
- 80343da: 781b ldrb r3, [r3, #0]
- 80343dc: 2b1e cmp r3, #30
- 80343de: d10f bne.n 8034400 <snmp_set_test+0x28>
- {
- /* snmpEnableAuthenTraps */
- s32_t *sint_ptr = (s32_t*)value;
- if (snmpenableauthentraps_ptr != &snmpenableauthentraps_default)
- 80343e0: 4b08 ldr r3, [pc, #32] ; (8034404 <snmp_set_test+0x2c>)
- 80343e2: 6810 ldr r0, [r2, #0]
- 80343e4: 6819 ldr r1, [r3, #0]
- 80343e6: 4b08 ldr r3, [pc, #32] ; (8034408 <snmp_set_test+0x30>)
- 80343e8: 4299 cmp r1, r3
- 80343ea: d005 beq.n 80343f8 <snmp_set_test+0x20>
- {
- /* we should have writable non-volatile mem here */
- if ((*sint_ptr == 1) || (*sint_ptr == 2))
- 80343ec: 3801 subs r0, #1
- snmp_set_test(struct obj_def *od, u16_t len, void *value)
- {
- u8_t id, set_ok;
- LWIP_UNUSED_ARG(len);
- set_ok = 0;
- 80343ee: 2801 cmp r0, #1
- 80343f0: bf8c ite hi
- 80343f2: 2000 movhi r0, #0
- 80343f4: 2001 movls r0, #1
- 80343f6: 4770 bx lr
- 80343f8: 1e83 subs r3, r0, #2
- 80343fa: 4258 negs r0, r3
- 80343fc: 4158 adcs r0, r3
- 80343fe: 4770 bx lr
- 8034400: 2000 movs r0, #0
- set_ok = 1;
- }
- }
- }
- return set_ok;
- }
- 8034402: 4770 bx lr
- 8034404: 20000898 .word 0x20000898
- 8034408: 08045204 .word 0x08045204
- 0803440c <ocstrncpy>:
- * @param dst points to destination
- * @param src points to source
- * @param n number of octets to copy.
- */
- void ocstrncpy(u8_t *dst, u8_t *src, u16_t n)
- {
- 803440c: b510 push {r4, lr}
- u16_t i = n;
- while (i > 0) {
- 803440e: 2300 movs r3, #0
- 8034410: e002 b.n 8034418 <ocstrncpy+0xc>
- i--;
- *dst++ = *src++;
- 8034412: 5ccc ldrb r4, [r1, r3]
- 8034414: 54c4 strb r4, [r0, r3]
- 8034416: 3301 adds r3, #1
- * @param n number of octets to copy.
- */
- void ocstrncpy(u8_t *dst, u8_t *src, u16_t n)
- {
- u16_t i = n;
- while (i > 0) {
- 8034418: b29c uxth r4, r3
- 803441a: 42a2 cmp r2, r4
- 803441c: d1f9 bne.n 8034412 <ocstrncpy+0x6>
- i--;
- *dst++ = *src++;
- }
- }
- 803441e: bd10 pop {r4, pc}
- 08034420 <system_set_value>:
- {
- u8_t id;
- LWIP_ASSERT("invalid len", len <= 0xff);
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8034420: 6883 ldr r3, [r0, #8]
- switch (id)
- 8034422: 781b ldrb r3, [r3, #0]
- 8034424: 2b05 cmp r3, #5
- return set_ok;
- }
- static void
- system_set_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034426: b510 push {r4, lr}
- 8034428: 460c mov r4, r1
- 803442a: 4611 mov r1, r2
- u8_t id;
- LWIP_ASSERT("invalid len", len <= 0xff);
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- switch (id)
- 803442c: d00a beq.n 8034444 <system_set_value+0x24>
- 803442e: 2b06 cmp r3, #6
- 8034430: d00f beq.n 8034452 <system_set_value+0x32>
- 8034432: 2b04 cmp r3, #4
- 8034434: d115 bne.n 8034462 <system_set_value+0x42>
- {
- case 4: /* sysContact */
- ocstrncpy(syscontact_ptr, (u8_t*)value, len);
- 8034436: 4b0b ldr r3, [pc, #44] ; (8034464 <system_set_value+0x44>)
- 8034438: 4622 mov r2, r4
- 803443a: 6818 ldr r0, [r3, #0]
- 803443c: f7ff ffe6 bl 803440c <ocstrncpy>
- *syscontact_len_ptr = (u8_t)len;
- 8034440: 4b09 ldr r3, [pc, #36] ; (8034468 <system_set_value+0x48>)
- 8034442: e00c b.n 803445e <system_set_value+0x3e>
- break;
- case 5: /* sysName */
- ocstrncpy(sysname_ptr, (u8_t*)value, len);
- 8034444: 4b09 ldr r3, [pc, #36] ; (803446c <system_set_value+0x4c>)
- 8034446: 4622 mov r2, r4
- 8034448: 6818 ldr r0, [r3, #0]
- 803444a: f7ff ffdf bl 803440c <ocstrncpy>
- *sysname_len_ptr = (u8_t)len;
- 803444e: 4b08 ldr r3, [pc, #32] ; (8034470 <system_set_value+0x50>)
- 8034450: e005 b.n 803445e <system_set_value+0x3e>
- break;
- case 6: /* sysLocation */
- ocstrncpy(syslocation_ptr, (u8_t*)value, len);
- 8034452: 4b08 ldr r3, [pc, #32] ; (8034474 <system_set_value+0x54>)
- 8034454: 4622 mov r2, r4
- 8034456: 6818 ldr r0, [r3, #0]
- 8034458: f7ff ffd8 bl 803440c <ocstrncpy>
- *syslocation_len_ptr = (u8_t)len;
- 803445c: 4b06 ldr r3, [pc, #24] ; (8034478 <system_set_value+0x58>)
- 803445e: 681b ldr r3, [r3, #0]
- 8034460: 701c strb r4, [r3, #0]
- 8034462: bd10 pop {r4, pc}
- 8034464: 20000914 .word 0x20000914
- 8034468: 20000798 .word 0x20000798
- 803446c: 200008a0 .word 0x200008a0
- 8034470: 20000794 .word 0x20000794
- 8034474: 20000a2c .word 0x20000a2c
- 8034478: 20000980 .word 0x20000980
- 0803447c <objectidncpy>:
- *
- * @param dst points to destination
- * @param src points to source
- * @param n number of sub identifiers to copy.
- */
- void objectidncpy(s32_t *dst, s32_t *src, u8_t n)
- 803447c: 3904 subs r1, #4
- {
- u8_t i = n;
- while(i > 0) {
- 803447e: e005 b.n 803448c <objectidncpy+0x10>
- i--;
- *dst++ = *src++;
- 8034480: f851 3f04 ldr.w r3, [r1, #4]!
- */
- void objectidncpy(s32_t *dst, s32_t *src, u8_t n)
- {
- u8_t i = n;
- while(i > 0) {
- i--;
- 8034484: 3a01 subs r2, #1
- *dst++ = *src++;
- 8034486: f840 3b04 str.w r3, [r0], #4
- */
- void objectidncpy(s32_t *dst, s32_t *src, u8_t n)
- {
- u8_t i = n;
- while(i > 0) {
- i--;
- 803448a: b2d2 uxtb r2, r2
- * @param n number of sub identifiers to copy.
- */
- void objectidncpy(s32_t *dst, s32_t *src, u8_t n)
- {
- u8_t i = n;
- while(i > 0) {
- 803448c: 2a00 cmp r2, #0
- 803448e: d1f7 bne.n 8034480 <objectidncpy+0x4>
- i--;
- *dst++ = *src++;
- }
- }
- 8034490: 4770 bx lr
- 8034492: 0000 movs r0, r0
- 08034494 <ifentry_get_value>:
- * @param len return value space (in bytes)
- * @param value points to (varbind) space to copy value into.
- */
- static void
- ifentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034494: b573 push {r0, r1, r4, r5, r6, lr}
- struct netif *netif;
- u8_t id;
- snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
- 8034496: 6883 ldr r3, [r0, #8]
- * @param len return value space (in bytes)
- * @param value points to (varbind) space to copy value into.
- */
- static void
- ifentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034498: 4606 mov r6, r0
- 803449a: 460d mov r5, r1
- struct netif *netif;
- u8_t id;
- snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
- 803449c: 6858 ldr r0, [r3, #4]
- 803449e: a901 add r1, sp, #4
- * @param len return value space (in bytes)
- * @param value points to (varbind) space to copy value into.
- */
- static void
- ifentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 80344a0: 4614 mov r4, r2
- struct netif *netif;
- u8_t id;
- snmp_ifindextonetif(od->id_inst_ptr[1], &netif);
- 80344a2: f000 fdb7 bl 8035014 <snmp_ifindextonetif>
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 80344a6: 68b3 ldr r3, [r6, #8]
- switch (id)
- 80344a8: 781a ldrb r2, [r3, #0]
- 80344aa: 3a01 subs r2, #1
- 80344ac: 2a15 cmp r2, #21
- 80344ae: d85c bhi.n 803456a <ifentry_get_value+0xd6>
- 80344b0: e8df f002 tbb [pc, r2]
- 80344b4: 15110d0b .word 0x15110d0b
- 80344b8: 2e221b18 .word 0x2e221b18
- 80344bc: 403d3a37 .word 0x403d3a37
- 80344c0: 46525243 .word 0x46525243
- 80344c4: 524f4c49 .word 0x524f4c49
- 80344c8: 5552 .short 0x5552
- {
- case 1: /* ifIndex */
- {
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = od->id_inst_ptr[1];
- 80344ca: 685b ldr r3, [r3, #4]
- 80344cc: e045 b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 2: /* ifDescr */
- ocstrncpy((u8_t*)value, (u8_t*)netif->name, len);
- 80344ce: 9901 ldr r1, [sp, #4]
- 80344d0: 4620 mov r0, r4
- 80344d2: 312e adds r1, #46 ; 0x2e
- 80344d4: e00c b.n 80344f0 <ifentry_get_value+0x5c>
- break;
- case 3: /* ifType */
- {
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = netif->link_type;
- 80344d6: 9b01 ldr r3, [sp, #4]
- 80344d8: f893 3031 ldrb.w r3, [r3, #49] ; 0x31
- 80344dc: e03d b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 4: /* ifMtu */
- {
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = netif->mtu;
- 80344de: 9b01 ldr r3, [sp, #4]
- 80344e0: 8c9b ldrh r3, [r3, #36] ; 0x24
- 80344e2: e03a b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 5: /* ifSpeed */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = netif->link_speed;
- 80344e4: 9b01 ldr r3, [sp, #4]
- 80344e6: 6b5b ldr r3, [r3, #52] ; 0x34
- 80344e8: e037 b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 6: /* ifPhysAddress */
- ocstrncpy((u8_t*)value, netif->hwaddr, len);
- 80344ea: 9901 ldr r1, [sp, #4]
- 80344ec: 4620 mov r0, r4
- 80344ee: 3127 adds r1, #39 ; 0x27
- 80344f0: 462a mov r2, r5
- 80344f2: f7ff ff8b bl 803440c <ocstrncpy>
- break;
- 80344f6: e038 b.n 803456a <ifentry_get_value+0xd6>
- case 7: /* ifAdminStatus */
- {
- s32_t *sint_ptr = (s32_t*)value;
- if (netif_is_up(netif))
- 80344f8: 9b01 ldr r3, [sp, #4]
- 80344fa: f893 302d ldrb.w r3, [r3, #45] ; 0x2d
- 80344fe: 07d9 lsls r1, r3, #31
- 8034500: d50d bpl.n 803451e <ifentry_get_value+0x8a>
- {
- if (netif_is_link_up(netif))
- 8034502: f003 0310 and.w r3, r3, #16
- 8034506: b2db uxtb r3, r3
- 8034508: b103 cbz r3, 803450c <ifentry_get_value+0x78>
- 803450a: e006 b.n 803451a <ifentry_get_value+0x86>
- {
- *sint_ptr = 1; /* up */
- }
- else
- {
- *sint_ptr = 7; /* lowerLayerDown */
- 803450c: 2307 movs r3, #7
- 803450e: e024 b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 8: /* ifOperStatus */
- {
- s32_t *sint_ptr = (s32_t*)value;
- if (netif_is_up(netif))
- 8034510: 9b01 ldr r3, [sp, #4]
- 8034512: f893 302d ldrb.w r3, [r3, #45] ; 0x2d
- 8034516: 07da lsls r2, r3, #31
- 8034518: d501 bpl.n 803451e <ifentry_get_value+0x8a>
- {
- *sint_ptr = 1;
- 803451a: 2301 movs r3, #1
- 803451c: e01d b.n 803455a <ifentry_get_value+0xc6>
- }
- else
- {
- *sint_ptr = 2;
- 803451e: 2302 movs r3, #2
- 8034520: e01b b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 9: /* ifLastChange */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = netif->ts;
- 8034522: 9b01 ldr r3, [sp, #4]
- 8034524: 6b9b ldr r3, [r3, #56] ; 0x38
- 8034526: e018 b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 10: /* ifInOctets */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = netif->ifinoctets;
- 8034528: 9b01 ldr r3, [sp, #4]
- 803452a: 6bdb ldr r3, [r3, #60] ; 0x3c
- 803452c: e015 b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 11: /* ifInUcastPkts */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = netif->ifinucastpkts;
- 803452e: 9b01 ldr r3, [sp, #4]
- 8034530: 6c1b ldr r3, [r3, #64] ; 0x40
- 8034532: e012 b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 12: /* ifInNUcastPkts */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = netif->ifinnucastpkts;
- 8034534: 9b01 ldr r3, [sp, #4]
- 8034536: 6c5b ldr r3, [r3, #68] ; 0x44
- 8034538: e00f b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 13: /* ifInDiscarts */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = netif->ifindiscards;
- 803453a: 9b01 ldr r3, [sp, #4]
- 803453c: 6c9b ldr r3, [r3, #72] ; 0x48
- 803453e: e00c b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 16: /* ifOutOctets */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = netif->ifoutoctets;
- 8034540: 9b01 ldr r3, [sp, #4]
- 8034542: 6cdb ldr r3, [r3, #76] ; 0x4c
- 8034544: e009 b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 17: /* ifOutUcastPkts */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = netif->ifoutucastpkts;
- 8034546: 9b01 ldr r3, [sp, #4]
- 8034548: 6d1b ldr r3, [r3, #80] ; 0x50
- 803454a: e006 b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 18: /* ifOutNUcastPkts */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = netif->ifoutnucastpkts;
- 803454c: 9b01 ldr r3, [sp, #4]
- 803454e: 6d5b ldr r3, [r3, #84] ; 0x54
- 8034550: e003 b.n 803455a <ifentry_get_value+0xc6>
- }
- break;
- case 19: /* ifOutDiscarts */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = netif->ifoutdiscards;
- 8034552: 9b01 ldr r3, [sp, #4]
- 8034554: 6d9b ldr r3, [r3, #88] ; 0x58
- 8034556: e000 b.n 803455a <ifentry_get_value+0xc6>
- break;
- case 21: /* ifOutQLen */
- /** @todo figure out if this must be 0 (no queue) or 1? */
- {
- u32_t *uint_ptr = (u32_t*)value;
- *uint_ptr = 0;
- 8034558: 2300 movs r3, #0
- 803455a: 6023 str r3, [r4, #0]
- }
- break;
- 803455c: e005 b.n 803456a <ifentry_get_value+0xd6>
- case 22: /* ifSpecific */
- objectidncpy((s32_t*)value, (s32_t*)ifspecific.id, (u8_t)(len / sizeof(s32_t)));
- 803455e: 4620 mov r0, r4
- 8034560: 4902 ldr r1, [pc, #8] ; (803456c <ifentry_get_value+0xd8>)
- 8034562: f3c5 0287 ubfx r2, r5, #2, #8
- 8034566: f7ff ff89 bl 803447c <objectidncpy>
- break;
- };
- }
- 803456a: bd7c pop {r2, r3, r4, r5, r6, pc}
- 803456c: 0804528c .word 0x0804528c
- 08034570 <ip_rteentry_get_value>:
- }
- }
- static void
- ip_rteentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034570: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
- struct netif *netif;
- ip_addr_t dest;
- s32_t *ident;
- u8_t id;
- ident = od->id_inst_ptr;
- 8034572: 6885 ldr r5, [r0, #8]
- }
- }
- static void
- ip_rteentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034574: 460f mov r7, r1
- ip_addr_t dest;
- s32_t *ident;
- u8_t id;
- ident = od->id_inst_ptr;
- snmp_oidtoip(&ident[1], &dest);
- 8034576: 1d28 adds r0, r5, #4
- 8034578: a901 add r1, sp, #4
- }
- }
- static void
- ip_rteentry_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 803457a: 4614 mov r4, r2
- ip_addr_t dest;
- s32_t *ident;
- u8_t id;
- ident = od->id_inst_ptr;
- snmp_oidtoip(&ident[1], &dest);
- 803457c: f000 fd68 bl 8035050 <snmp_oidtoip>
- if (ip_addr_isany(&dest))
- 8034580: 9b01 ldr r3, [sp, #4]
- 8034582: b91b cbnz r3, 803458c <ip_rteentry_get_value+0x1c>
- {
- /* ip_route() uses default netif for default route */
- netif = netif_default;
- 8034584: 4a23 ldr r2, [pc, #140] ; (8034614 <ip_rteentry_get_value+0xa4>)
- 8034586: 6810 ldr r0, [r2, #0]
- !ip_addr_netcmp(&dest, &(netif->ip_addr), &(netif->netmask)) )
- {
- netif = netif->next;
- }
- }
- if (netif != NULL)
- 8034588: b960 cbnz r0, 80345a4 <ip_rteentry_get_value+0x34>
- 803458a: e041 b.n 8034610 <ip_rteentry_get_value+0xa0>
- netif = netif_default;
- }
- else
- {
- /* not using ip_route(), need exact match! */
- netif = netif_list;
- 803458c: 4a22 ldr r2, [pc, #136] ; (8034618 <ip_rteentry_get_value+0xa8>)
- 803458e: 6810 ldr r0, [r2, #0]
- while ((netif != NULL) &&
- 8034590: e000 b.n 8034594 <ip_rteentry_get_value+0x24>
- !ip_addr_netcmp(&dest, &(netif->ip_addr), &(netif->netmask)) )
- {
- netif = netif->next;
- 8034592: 6800 ldr r0, [r0, #0]
- }
- else
- {
- /* not using ip_route(), need exact match! */
- netif = netif_list;
- while ((netif != NULL) &&
- 8034594: 2800 cmp r0, #0
- 8034596: d03b beq.n 8034610 <ip_rteentry_get_value+0xa0>
- !ip_addr_netcmp(&dest, &(netif->ip_addr), &(netif->netmask)) )
- 8034598: 6846 ldr r6, [r0, #4]
- 803459a: ea83 0206 eor.w r2, r3, r6
- 803459e: 6886 ldr r6, [r0, #8]
- }
- else
- {
- /* not using ip_route(), need exact match! */
- netif = netif_list;
- while ((netif != NULL) &&
- 80345a0: 4232 tst r2, r6
- 80345a2: d1f6 bne.n 8034592 <ip_rteentry_get_value+0x22>
- }
- if (netif != NULL)
- {
- LWIP_ASSERT("invalid id", (ident[0] >= 0) && (ident[0] <= 0xff));
- id = (u8_t)ident[0];
- switch (id)
- 80345a4: 782d ldrb r5, [r5, #0]
- 80345a6: 3d01 subs r5, #1
- 80345a8: 2d0c cmp r5, #12
- 80345aa: d831 bhi.n 8034610 <ip_rteentry_get_value+0xa0>
- 80345ac: e8df f005 tbb [pc, r5]
- 80345b0: 14110d07 .word 0x14110d07
- 80345b4: 1c171414 .word 0x1c171414
- 80345b8: 14252321 .word 0x14252321
- 80345bc: 2a .byte 0x2a
- 80345bd: 00 .byte 0x00
- {
- case 1: /* ipRouteDest */
- {
- ip_addr_t *dst = (ip_addr_t*)value;
- if (ip_addr_isany(&dest))
- 80345be: b903 cbnz r3, 80345c2 <ip_rteentry_get_value+0x52>
- 80345c0: e01e b.n 8034600 <ip_rteentry_get_value+0x90>
- ip_addr_set_zero(dst);
- }
- else
- {
- /* netifs have netaddress dest */
- ip_addr_get_network(dst, &netif->ip_addr, &netif->netmask);
- 80345c2: 6882 ldr r2, [r0, #8]
- 80345c4: 6843 ldr r3, [r0, #4]
- 80345c6: 4013 ands r3, r2
- 80345c8: e01a b.n 8034600 <ip_rteentry_get_value+0x90>
- break;
- case 2: /* ipRouteIfIndex */
- {
- s32_t *sint_ptr = (s32_t*)value;
- snmp_netiftoifindex(netif, sint_ptr);
- 80345ca: 4621 mov r1, r4
- 80345cc: f000 fd30 bl 8035030 <snmp_netiftoifindex>
- }
- break;
- 80345d0: e01e b.n 8034610 <ip_rteentry_get_value+0xa0>
- case 3: /* ipRouteMetric1 */
- {
- s32_t *sint_ptr = (s32_t*)value;
- if (ip_addr_isany(&dest))
- 80345d2: b983 cbnz r3, 80345f6 <ip_rteentry_get_value+0x86>
- {
- /* default rte has metric 1 */
- *sint_ptr = 1;
- 80345d4: 2301 movs r3, #1
- 80345d6: e013 b.n 8034600 <ip_rteentry_get_value+0x90>
- case 6: /* ipRouteMetric4 */
- case 12: /* ipRouteMetric5 */
- {
- s32_t *sint_ptr = (s32_t*)value;
- /* not used */
- *sint_ptr = -1;
- 80345d8: f04f 33ff mov.w r3, #4294967295
- 80345dc: e010 b.n 8034600 <ip_rteentry_get_value+0x90>
- break;
- case 7: /* ipRouteNextHop */
- {
- ip_addr_t *dst = (ip_addr_t*)value;
- if (ip_addr_isany(&dest))
- 80345de: b90b cbnz r3, 80345e4 <ip_rteentry_get_value+0x74>
- {
- /* default rte: gateway */
- *dst = netif->gw;
- 80345e0: 68c3 ldr r3, [r0, #12]
- 80345e2: e00d b.n 8034600 <ip_rteentry_get_value+0x90>
- }
- else
- {
- /* other rtes: netif ip_addr */
- *dst = netif->ip_addr;
- 80345e4: 6843 ldr r3, [r0, #4]
- 80345e6: e00b b.n 8034600 <ip_rteentry_get_value+0x90>
- break;
- case 8: /* ipRouteType */
- {
- s32_t *sint_ptr = (s32_t*)value;
- if (ip_addr_isany(&dest))
- 80345e8: b90b cbnz r3, 80345ee <ip_rteentry_get_value+0x7e>
- {
- /* default rte is indirect */
- *sint_ptr = 4;
- 80345ea: 2304 movs r3, #4
- 80345ec: e008 b.n 8034600 <ip_rteentry_get_value+0x90>
- }
- else
- {
- /* other rtes are direct */
- *sint_ptr = 3;
- 80345ee: 2303 movs r3, #3
- 80345f0: e006 b.n 8034600 <ip_rteentry_get_value+0x90>
- break;
- case 9: /* ipRouteProto */
- {
- s32_t *sint_ptr = (s32_t*)value;
- /* locally defined routes */
- *sint_ptr = 2;
- 80345f2: 2302 movs r3, #2
- 80345f4: e004 b.n 8034600 <ip_rteentry_get_value+0x90>
- case 10: /* ipRouteAge */
- {
- s32_t *sint_ptr = (s32_t*)value;
- /** @todo (sysuptime - timestamp last change) / 100
- @see snmp_insert_iprteidx_tree() */
- *sint_ptr = 0;
- 80345f6: 2300 movs r3, #0
- 80345f8: e002 b.n 8034600 <ip_rteentry_get_value+0x90>
- break;
- case 11: /* ipRouteMask */
- {
- ip_addr_t *dst = (ip_addr_t*)value;
- if (ip_addr_isany(&dest))
- 80345fa: b903 cbnz r3, 80345fe <ip_rteentry_get_value+0x8e>
- 80345fc: e000 b.n 8034600 <ip_rteentry_get_value+0x90>
- ip_addr_set_zero(dst);
- }
- else
- {
- /* other rtes use netmask */
- *dst = netif->netmask;
- 80345fe: 6883 ldr r3, [r0, #8]
- 8034600: 6023 str r3, [r4, #0]
- 8034602: e005 b.n 8034610 <ip_rteentry_get_value+0xa0>
- }
- }
- break;
- case 13: /* ipRouteInfo */
- objectidncpy((s32_t*)value, (s32_t*)iprouteinfo.id, (u8_t)(len / sizeof(s32_t)));
- 8034604: 4620 mov r0, r4
- 8034606: 4905 ldr r1, [pc, #20] ; (803461c <ip_rteentry_get_value+0xac>)
- 8034608: f3c7 0287 ubfx r2, r7, #2, #8
- 803460c: f7ff ff36 bl 803447c <objectidncpy>
- break;
- }
- }
- }
- 8034610: bdfe pop {r1, r2, r3, r4, r5, r6, r7, pc}
- 8034612: bf00 nop
- 8034614: 2000f6b4 .word 0x2000f6b4
- 8034618: 2000f6b0 .word 0x2000f6b0
- 803461c: 080450a0 .word 0x080450a0
- 08034620 <snmp_set_sysdesr>:
- * @param str if non-NULL then copy str pointer
- * @param len points to string length, excluding zero terminator
- */
- void snmp_set_sysdesr(u8_t *str, u8_t *len)
- {
- if (str != NULL)
- 8034620: b118 cbz r0, 803462a <snmp_set_sysdesr+0xa>
- {
- sysdescr_ptr = str;
- 8034622: 4b02 ldr r3, [pc, #8] ; (803462c <snmp_set_sysdesr+0xc>)
- 8034624: 6018 str r0, [r3, #0]
- sysdescr_len_ptr = len;
- 8034626: 4b02 ldr r3, [pc, #8] ; (8034630 <snmp_set_sysdesr+0x10>)
- 8034628: 6019 str r1, [r3, #0]
- 803462a: 4770 bx lr
- 803462c: 200008c0 .word 0x200008c0
- 8034630: 2000093c .word 0x2000093c
- 08034634 <snmp_set_sysobjid>:
- * Initializes sysObjectID value.
- *
- * @param oid points to stuct snmp_obj_id to copy
- */
- void snmp_set_sysobjid(struct snmp_obj_id *oid)
- {
- 8034634: 4601 mov r1, r0
- 8034636: b508 push {r3, lr}
- sysobjid = *oid;
- 8034638: 2284 movs r2, #132 ; 0x84
- 803463a: 4802 ldr r0, [pc, #8] ; (8034644 <snmp_set_sysobjid+0x10>)
- 803463c: f7ed f9a6 bl 802198c <memcpy>
- 8034640: bd08 pop {r3, pc}
- 8034642: bf00 nop
- 8034644: 200007ec .word 0x200007ec
- 08034648 <snmp_inc_sysuptime>:
- * Must be called at regular 10 msec interval from a timer interrupt
- * or signal handler depending on your runtime environment.
- */
- void snmp_inc_sysuptime(void)
- {
- sysuptime++;
- 8034648: 4b02 ldr r3, [pc, #8] ; (8034654 <snmp_inc_sysuptime+0xc>)
- 803464a: 681a ldr r2, [r3, #0]
- 803464c: 3201 adds r2, #1
- 803464e: 601a str r2, [r3, #0]
- 8034650: 4770 bx lr
- 8034652: bf00 nop
- 8034654: 2000c500 .word 0x2000c500
- 08034658 <snmp_get_sysuptime>:
- {
- sysuptime+=value;
- }
- void snmp_get_sysuptime(u32_t *value)
- {
- 8034658: b510 push {r4, lr}
- 803465a: 4604 mov r4, r0
- SNMP_GET_SYSUPTIME(sysuptime);
- 803465c: f003 fa1a bl 8037a94 <sys_now>
- 8034660: 230a movs r3, #10
- 8034662: 4a03 ldr r2, [pc, #12] ; (8034670 <snmp_get_sysuptime+0x18>)
- 8034664: fbb0 f0f3 udiv r0, r0, r3
- 8034668: 6010 str r0, [r2, #0]
- *value = sysuptime;
- 803466a: 6020 str r0, [r4, #0]
- 803466c: bd10 pop {r4, pc}
- 803466e: bf00 nop
- 8034670: 2000c500 .word 0x2000c500
- 08034674 <system_get_value>:
- * @param len return value space (in bytes)
- * @param value points to (varbind) space to copy value into.
- */
- static void
- system_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 8034674: 4613 mov r3, r2
- u8_t id;
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- 8034676: 6882 ldr r2, [r0, #8]
- switch (id)
- 8034678: 7812 ldrb r2, [r2, #0]
- 803467a: 3a01 subs r2, #1
- * @param len return value space (in bytes)
- * @param value points to (varbind) space to copy value into.
- */
- static void
- system_get_value(struct obj_def *od, u16_t len, void *value)
- {
- 803467c: b510 push {r4, lr}
- 803467e: 460c mov r4, r1
- u8_t id;
- LWIP_ASSERT("invalid id", (od->id_inst_ptr[0] >= 0) && (od->id_inst_ptr[0] <= 0xff));
- id = (u8_t)od->id_inst_ptr[0];
- switch (id)
- 8034680: 2a06 cmp r2, #6
- 8034682: d825 bhi.n 80346d0 <system_get_value+0x5c>
- 8034684: e8df f002 tbb [pc, r2]
- 8034688: 140f0704 .word 0x140f0704
- 803468c: 1a17 .short 0x1a17
- 803468e: 22 .byte 0x22
- 803468f: 00 .byte 0x00
- {
- case 1: /* sysDescr */
- ocstrncpy((u8_t*)value, sysdescr_ptr, len);
- 8034690: 4618 mov r0, r3
- 8034692: 4b10 ldr r3, [pc, #64] ; (80346d4 <system_get_value+0x60>)
- 8034694: e014 b.n 80346c0 <system_get_value+0x4c>
- break;
- case 2: /* sysObjectID */
- objectidncpy((s32_t*)value, (s32_t*)sysobjid.id, (u8_t)(len / sizeof(s32_t)));
- 8034696: 4910 ldr r1, [pc, #64] ; (80346d8 <system_get_value+0x64>)
- 8034698: 4618 mov r0, r3
- 803469a: f3c4 0287 ubfx r2, r4, #2, #8
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = sysservices;
- }
- break;
- };
- }
- 803469e: e8bd 4010 ldmia.w sp!, {r4, lr}
- {
- case 1: /* sysDescr */
- ocstrncpy((u8_t*)value, sysdescr_ptr, len);
- break;
- case 2: /* sysObjectID */
- objectidncpy((s32_t*)value, (s32_t*)sysobjid.id, (u8_t)(len / sizeof(s32_t)));
- 80346a2: f7ff beeb b.w 803447c <objectidncpy>
- break;
- case 3: /* sysUpTime */
- {
- snmp_get_sysuptime((u32_t*)value);
- 80346a6: 4618 mov r0, r3
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = sysservices;
- }
- break;
- };
- }
- 80346a8: e8bd 4010 ldmia.w sp!, {r4, lr}
- case 2: /* sysObjectID */
- objectidncpy((s32_t*)value, (s32_t*)sysobjid.id, (u8_t)(len / sizeof(s32_t)));
- break;
- case 3: /* sysUpTime */
- {
- snmp_get_sysuptime((u32_t*)value);
- 80346ac: f7ff bfd4 b.w 8034658 <snmp_get_sysuptime>
- }
- break;
- case 4: /* sysContact */
- ocstrncpy((u8_t*)value, syscontact_ptr, len);
- 80346b0: 4618 mov r0, r3
- 80346b2: 4b0a ldr r3, [pc, #40] ; (80346dc <system_get_value+0x68>)
- 80346b4: e004 b.n 80346c0 <system_get_value+0x4c>
- break;
- case 5: /* sysName */
- ocstrncpy((u8_t*)value, sysname_ptr, len);
- 80346b6: 4618 mov r0, r3
- 80346b8: 4b09 ldr r3, [pc, #36] ; (80346e0 <system_get_value+0x6c>)
- 80346ba: e001 b.n 80346c0 <system_get_value+0x4c>
- break;
- case 6: /* sysLocation */
- ocstrncpy((u8_t*)value, syslocation_ptr, len);
- 80346bc: 4618 mov r0, r3
- 80346be: 4b09 ldr r3, [pc, #36] ; (80346e4 <system_get_value+0x70>)
- 80346c0: 6819 ldr r1, [r3, #0]
- 80346c2: 4622 mov r2, r4
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = sysservices;
- }
- break;
- };
- }
- 80346c4: e8bd 4010 ldmia.w sp!, {r4, lr}
- break;
- case 5: /* sysName */
- ocstrncpy((u8_t*)value, sysname_ptr, len);
- break;
- case 6: /* sysLocation */
- ocstrncpy((u8_t*)value, syslocation_ptr, len);
- 80346c8: f7ff bea0 b.w 803440c <ocstrncpy>
- break;
- case 7: /* sysServices */
- {
- s32_t *sint_ptr = (s32_t*)value;
- *sint_ptr = sysservices;
- 80346cc: 2248 movs r2, #72 ; 0x48
- 80346ce: 601a str r2, [r3, #0]
- 80346d0: bd10 pop {r4, pc}
- 80346d2: bf00 nop
- 80346d4: 200008c0 .word 0x200008c0
- 80346d8: 200007f0 .word 0x200007f0
- 80346dc: 20000914 .word 0x20000914
- 80346e0: 200008a0 .word 0x200008a0
- 80346e4: 20000a2c .word 0x20000a2c
- 080346e8 <snmp_set_syscontact>:
- * @param ocstr if non-NULL then copy str pointer
- * @param ocstrlen points to string length, excluding zero terminator
- */
- void snmp_set_syscontact(u8_t *ocstr, u8_t *ocstrlen)
- {
- if (ocstr != NULL)
- 80346e8: b118 cbz r0, 80346f2 <snmp_set_syscontact+0xa>
- {
- syscontact_ptr = ocstr;
- 80346ea: 4b02 ldr r3, [pc, #8] ; (80346f4 <snmp_set_syscontact+0xc>)
- 80346ec: 6018 str r0, [r3, #0]
- syscontact_len_ptr = ocstrlen;
- 80346ee: 4b02 ldr r3, [pc, #8] ; (80346f8 <snmp_set_syscontact+0x10>)
- 80346f0: 6019 str r1, [r3, #0]
- 80346f2: 4770 bx lr
- 80346f4: 20000914 .word 0x20000914
- 80346f8: 20000798 .word 0x20000798
- 080346fc <snmp_set_sysname>:
- * @param ocstr if non-NULL then copy str pointer
- * @param ocstrlen points to string length, excluding zero terminator
- */
- void snmp_set_sysname(u8_t *ocstr, u8_t *ocstrlen)
- {
- if (ocstr != NULL)
- 80346fc: b118 cbz r0, 8034706 <snmp_set_sysname+0xa>
- {
- sysname_ptr = ocstr;
- 80346fe: 4b02 ldr r3, [pc, #8] ; (8034708 <snmp_set_sysname+0xc>)
- 8034700: 6018 str r0, [r3, #0]
- sysname_len_ptr = ocstrlen;
- 8034702: 4b02 ldr r3, [pc, #8] ; (803470c <snmp_set_sysname+0x10>)
- 8034704: 6019 str r1, [r3, #0]
- 8034706: 4770 bx lr
- 8034708: 200008a0 .word 0x200008a0
- 803470c: 20000794 .word 0x20000794
- 08034710 <snmp_set_syslocation>:
- * @param ocstr if non-NULL then copy str pointer
- * @param ocstrlen points to string length, excluding zero terminator
- */
- void snmp_set_syslocation(u8_t *ocstr, u8_t *ocstrlen)
- {
- if (ocstr != NULL)
- 8034710: b118 cbz r0, 803471a <snmp_set_syslocation+0xa>
- {
- syslocation_ptr = ocstr;
- 8034712: 4b02 ldr r3, [pc, #8] ; (803471c <snmp_set_syslocation+0xc>)
- 8034714: 6018 str r0, [r3, #0]
- syslocation_len_ptr = ocstrlen;
- 8034716: 4b02 ldr r3, [pc, #8] ; (8034720 <snmp_set_syslocation+0x10>)
- 8034718: 6019 str r1, [r3, #0]
- 803471a: 4770 bx lr
- 803471c: 20000a2c .word 0x20000a2c
- 8034720: 20000980 .word 0x20000980
- 08034724 <snmp_inc_iflist>:
- {
- (ni->ifoutdiscards)++;
- }
- void snmp_inc_iflist(void)
- {
- 8034724: b507 push {r0, r1, r2, lr}
- struct mib_list_node *if_node = NULL;
- snmp_mib_node_insert(&iflist_root, iflist_root.count + 1, &if_node);
- 8034726: 4806 ldr r0, [pc, #24] ; (8034740 <snmp_inc_iflist+0x1c>)
- (ni->ifoutdiscards)++;
- }
- void snmp_inc_iflist(void)
- {
- struct mib_list_node *if_node = NULL;
- 8034728: aa02 add r2, sp, #8
- snmp_mib_node_insert(&iflist_root, iflist_root.count + 1, &if_node);
- 803472a: 8b81 ldrh r1, [r0, #28]
- (ni->ifoutdiscards)++;
- }
- void snmp_inc_iflist(void)
- {
- struct mib_list_node *if_node = NULL;
- 803472c: 2300 movs r3, #0
- 803472e: f842 3d04 str.w r3, [r2, #-4]!
- snmp_mib_node_insert(&iflist_root, iflist_root.count + 1, &if_node);
- 8034732: 3101 adds r1, #1
- 8034734: f000 fcd4 bl 80350e0 <snmp_mib_node_insert>
- /* enable getnext traversal on filled table */
- iftable.maxlength = 1;
- 8034738: 4b02 ldr r3, [pc, #8] ; (8034744 <snmp_inc_iflist+0x20>)
- 803473a: 2201 movs r2, #1
- 803473c: 825a strh r2, [r3, #18]
- }
- 803473e: bd0e pop {r1, r2, r3, pc}
- 8034740: 200007cc .word 0x200007cc
- 8034744: 20000944 .word 0x20000944
- 08034748 <snmp_insert_arpidx_tree>:
- /**
- * Inserts ARP table indexes (.xIfIndex.xNetAddress)
- * into arp table index trees (both atTable and ipNetToMediaTable).
- */
- void snmp_insert_arpidx_tree(struct netif *ni, ip_addr_t *ip)
- {
- 8034748: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- 803474c: b086 sub sp, #24
- 803474e: 460c mov r4, r1
- struct mib_list_node *at_node;
- s32_t arpidx[5];
- u8_t level, tree;
- LWIP_ASSERT("ni != NULL", ni != NULL);
- snmp_netiftoifindex(ni, &arpidx[0]);
- 8034750: a901 add r1, sp, #4
- 8034752: f000 fc6d bl 8035030 <snmp_netiftoifindex>
- snmp_iptooid(ip, &arpidx[1]);
- 8034756: 4620 mov r0, r4
- 8034758: a902 add r1, sp, #8
- 803475a: f000 fc86 bl 803506a <snmp_iptooid>
- for (tree = 0; tree < 2; tree++)
- {
- if (tree == 0)
- {
- at_rn = &arptree_root;
- 803475e: f8df 80a0 ldr.w r8, [pc, #160] ; 8034800 <snmp_insert_arpidx_tree+0xb8>
- LWIP_ASSERT("ni != NULL", ni != NULL);
- snmp_netiftoifindex(ni, &arpidx[0]);
- snmp_iptooid(ip, &arpidx[1]);
- for (tree = 0; tree < 2; tree++)
- 8034762: 2500 movs r5, #0
- {
- if (tree == 0)
- {
- at_rn = &arptree_root;
- 8034764: 4c1f ldr r4, [pc, #124] ; (80347e4 <snmp_insert_arpidx_tree+0x9c>)
- else
- {
- at_rn->get_object_def = ip_ntomentry_get_object_def;
- at_rn->get_value = ip_ntomentry_get_value;
- }
- at_rn->set_test = noleafs_set_test;
- 8034766: f8df 909c ldr.w r9, [pc, #156] ; 8034804 <snmp_insert_arpidx_tree+0xbc>
- at_rn->set_value = noleafs_set_value;
- 803476a: f8df a09c ldr.w sl, [pc, #156] ; 8034808 <snmp_insert_arpidx_tree+0xc0>
- for (tree = 0; tree < 2; tree++)
- {
- if (tree == 0)
- {
- at_rn = &arptree_root;
- 803476e: 2d00 cmp r5, #0
- 8034770: bf18 it ne
- 8034772: 4644 movne r4, r8
- }
- else
- {
- at_rn = &ipntomtree_root;
- 8034774: 2600 movs r6, #0
- }
- for (level = 0; level < 5; level++)
- {
- at_node = NULL;
- 8034776: 2300 movs r3, #0
- 8034778: 9300 str r3, [sp, #0]
- snmp_mib_node_insert(at_rn, arpidx[level], &at_node);
- 803477a: ab01 add r3, sp, #4
- 803477c: 4620 mov r0, r4
- 803477e: f853 1026 ldr.w r1, [r3, r6, lsl #2]
- 8034782: aa00 add r2, sp, #0
- 8034784: b2f7 uxtb r7, r6
- 8034786: f000 fcab bl 80350e0 <snmp_mib_node_insert>
- if ((level != 4) && (at_node != NULL))
- 803478a: 2f04 cmp r7, #4
- 803478c: d01d beq.n 80347ca <snmp_insert_arpidx_tree+0x82>
- 803478e: 9b00 ldr r3, [sp, #0]
- 8034790: b1db cbz r3, 80347ca <snmp_insert_arpidx_tree+0x82>
- {
- if (at_node->nptr == NULL)
- 8034792: 68dc ldr r4, [r3, #12]
- 8034794: b9cc cbnz r4, 80347ca <snmp_insert_arpidx_tree+0x82>
- {
- at_rn = snmp_mib_lrn_alloc();
- 8034796: f000 fc81 bl 803509c <snmp_mib_lrn_alloc>
- at_node->nptr = (struct mib_node*)at_rn;
- 803479a: 9b00 ldr r3, [sp, #0]
- snmp_mib_node_insert(at_rn, arpidx[level], &at_node);
- if ((level != 4) && (at_node != NULL))
- {
- if (at_node->nptr == NULL)
- {
- at_rn = snmp_mib_lrn_alloc();
- 803479c: 4604 mov r4, r0
- at_node->nptr = (struct mib_node*)at_rn;
- 803479e: 60d8 str r0, [r3, #12]
- if (at_rn != NULL)
- 80347a0: b920 cbnz r0, 80347ac <snmp_insert_arpidx_tree+0x64>
- LWIP_ASSERT("ni != NULL", ni != NULL);
- snmp_netiftoifindex(ni, &arpidx[0]);
- snmp_iptooid(ip, &arpidx[1]);
- for (tree = 0; tree < 2; tree++)
- 80347a2: 3501 adds r5, #1
- 80347a4: b2ed uxtb r5, r5
- 80347a6: 2d02 cmp r5, #2
- 80347a8: d1dc bne.n 8034764 <snmp_insert_arpidx_tree+0x1c>
- 80347aa: e012 b.n 80347d2 <snmp_insert_arpidx_tree+0x8a>
- {
- at_rn = snmp_mib_lrn_alloc();
- at_node->nptr = (struct mib_node*)at_rn;
- if (at_rn != NULL)
- {
- if (level == 3)
- 80347ac: 2f03 cmp r7, #3
- 80347ae: d10c bne.n 80347ca <snmp_insert_arpidx_tree+0x82>
- {
- if (tree == 0)
- 80347b0: b91d cbnz r5, 80347ba <snmp_insert_arpidx_tree+0x72>
- {
- at_rn->get_object_def = atentry_get_object_def;
- 80347b2: 4b0d ldr r3, [pc, #52] ; (80347e8 <snmp_insert_arpidx_tree+0xa0>)
- 80347b4: 6003 str r3, [r0, #0]
- at_rn->get_value = atentry_get_value;
- 80347b6: 4b0d ldr r3, [pc, #52] ; (80347ec <snmp_insert_arpidx_tree+0xa4>)
- 80347b8: e002 b.n 80347c0 <snmp_insert_arpidx_tree+0x78>
- }
- else
- {
- at_rn->get_object_def = ip_ntomentry_get_object_def;
- 80347ba: 4b0d ldr r3, [pc, #52] ; (80347f0 <snmp_insert_arpidx_tree+0xa8>)
- 80347bc: 6003 str r3, [r0, #0]
- at_rn->get_value = ip_ntomentry_get_value;
- 80347be: 4b0d ldr r3, [pc, #52] ; (80347f4 <snmp_insert_arpidx_tree+0xac>)
- 80347c0: 6063 str r3, [r4, #4]
- }
- at_rn->set_test = noleafs_set_test;
- 80347c2: f8c4 9008 str.w r9, [r4, #8]
- at_rn->set_value = noleafs_set_value;
- 80347c6: f8c4 a00c str.w sl, [r4, #12]
- 80347ca: 3601 adds r6, #1
- }
- else
- {
- at_rn = &ipntomtree_root;
- }
- for (level = 0; level < 5; level++)
- 80347cc: 2e05 cmp r6, #5
- 80347ce: d1d2 bne.n 8034776 <snmp_insert_arpidx_tree+0x2e>
- 80347d0: e7e7 b.n 80347a2 <snmp_insert_arpidx_tree+0x5a>
- }
- }
- }
- }
- /* enable getnext traversal on filled tables */
- at.maxlength = 1;
- 80347d2: 4a09 ldr r2, [pc, #36] ; (80347f8 <snmp_insert_arpidx_tree+0xb0>)
- 80347d4: 2301 movs r3, #1
- 80347d6: 8253 strh r3, [r2, #18]
- ipntomtable.maxlength = 1;
- 80347d8: 4a08 ldr r2, [pc, #32] ; (80347fc <snmp_insert_arpidx_tree+0xb4>)
- 80347da: 8253 strh r3, [r2, #18]
- }
- 80347dc: b006 add sp, #24
- 80347de: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 80347e2: bf00 nop
- 80347e4: 20000918 .word 0x20000918
- 80347e8: 080341d1 .word 0x080341d1
- 80347ec: 08034129 .word 0x08034129
- 80347f0: 080342b5 .word 0x080342b5
- 80347f4: 080340cd .word 0x080340cd
- 80347f8: 2000073c .word 0x2000073c
- 80347fc: 20000720 .word 0x20000720
- 8034800: 20000a08 .word 0x20000a08
- 8034804: 080339eb .word 0x080339eb
- 8034808: 080339ef .word 0x080339ef
- 0803480c <snmp_delete_arpidx_tree>:
- /**
- * Removes ARP table indexes (.xIfIndex.xNetAddress)
- * from arp table index trees.
- */
- void snmp_delete_arpidx_tree(struct netif *ni, ip_addr_t *ip)
- {
- 803480c: b5f0 push {r4, r5, r6, r7, lr}
- 803480e: b091 sub sp, #68 ; 0x44
- 8034810: 460c mov r4, r1
- struct mib_list_rootnode *at_rn, *next, *del_rn[5];
- struct mib_list_node *at_n, *del_n[5];
- s32_t arpidx[5];
- u8_t fc, tree, level, del_cnt;
- snmp_netiftoifindex(ni, &arpidx[0]);
- 8034812: a90b add r1, sp, #44 ; 0x2c
- 8034814: f000 fc0c bl 8035030 <snmp_netiftoifindex>
- snmp_iptooid(ip, &arpidx[1]);
- 8034818: 4620 mov r0, r4
- 803481a: a90c add r1, sp, #48 ; 0x30
- 803481c: f000 fc25 bl 803506a <snmp_iptooid>
- for (tree = 0; tree < 2; tree++)
- 8034820: 2700 movs r7, #0
- {
- /* mark nodes for deletion */
- if (tree == 0)
- {
- at_rn = &arptree_root;
- 8034822: 4b26 ldr r3, [pc, #152] ; (80348bc <snmp_delete_arpidx_tree+0xb0>)
- 8034824: 4d26 ldr r5, [pc, #152] ; (80348c0 <snmp_delete_arpidx_tree+0xb4>)
- }
- else
- {
- at_rn = &ipntomtree_root;
- 8034826: 2600 movs r6, #0
- for (tree = 0; tree < 2; tree++)
- {
- /* mark nodes for deletion */
- if (tree == 0)
- {
- at_rn = &arptree_root;
- 8034828: 2f00 cmp r7, #0
- 803482a: bf08 it eq
- 803482c: 461d moveq r5, r3
- }
- else
- {
- at_rn = &ipntomtree_root;
- 803482e: 4634 mov r4, r6
- }
- level = 0;
- del_cnt = 0;
- while ((level < 5) && (at_rn != NULL))
- {
- fc = snmp_mib_node_find(at_rn, arpidx[level], &at_n);
- 8034830: ab0b add r3, sp, #44 ; 0x2c
- 8034832: 4628 mov r0, r5
- 8034834: 58f1 ldr r1, [r6, r3]
- 8034836: aa00 add r2, sp, #0
- 8034838: f000 fc8d bl 8035156 <snmp_mib_node_find>
- 803483c: b2c0 uxtb r0, r0
- if (fc == 0)
- 803483e: b198 cbz r0, 8034868 <snmp_delete_arpidx_tree+0x5c>
- {
- /* arpidx[level] does not exist */
- del_cnt = 0;
- at_rn = NULL;
- }
- else if (fc == 1)
- 8034840: 2801 cmp r0, #1
- 8034842: d10b bne.n 803485c <snmp_delete_arpidx_tree+0x50>
- {
- del_rn[del_cnt] = at_rn;
- 8034844: ab10 add r3, sp, #64 ; 0x40
- 8034846: eb03 0284 add.w r2, r3, r4, lsl #2
- del_n[del_cnt] = at_n;
- 803484a: 9b00 ldr r3, [sp, #0]
- del_cnt = 0;
- at_rn = NULL;
- }
- else if (fc == 1)
- {
- del_rn[del_cnt] = at_rn;
- 803484c: f842 5c3c str.w r5, [r2, #-60]
- del_n[del_cnt] = at_n;
- del_cnt++;
- 8034850: 3401 adds r4, #1
- at_rn = NULL;
- }
- else if (fc == 1)
- {
- del_rn[del_cnt] = at_rn;
- del_n[del_cnt] = at_n;
- 8034852: f842 3c28 str.w r3, [r2, #-40]
- del_cnt++;
- 8034856: b2e4 uxtb r4, r4
- at_rn = (struct mib_list_rootnode*)(at_n->nptr);
- 8034858: 68dd ldr r5, [r3, #12]
- 803485a: e007 b.n 803486c <snmp_delete_arpidx_tree+0x60>
- }
- else if (fc == 2)
- 803485c: 2802 cmp r0, #2
- 803485e: d105 bne.n 803486c <snmp_delete_arpidx_tree+0x60>
- {
- /* reset delete (2 or more childs) */
- del_cnt = 0;
- at_rn = (struct mib_list_rootnode*)(at_n->nptr);
- 8034860: 9b00 ldr r3, [sp, #0]
- at_rn = (struct mib_list_rootnode*)(at_n->nptr);
- }
- else if (fc == 2)
- {
- /* reset delete (2 or more childs) */
- del_cnt = 0;
- 8034862: 2400 movs r4, #0
- at_rn = (struct mib_list_rootnode*)(at_n->nptr);
- 8034864: 68dd ldr r5, [r3, #12]
- 8034866: e001 b.n 803486c <snmp_delete_arpidx_tree+0x60>
- {
- fc = snmp_mib_node_find(at_rn, arpidx[level], &at_n);
- if (fc == 0)
- {
- /* arpidx[level] does not exist */
- del_cnt = 0;
- 8034868: 4604 mov r4, r0
- at_rn = NULL;
- 803486a: 4605 mov r5, r0
- 803486c: 3604 adds r6, #4
- {
- at_rn = &ipntomtree_root;
- }
- level = 0;
- del_cnt = 0;
- while ((level < 5) && (at_rn != NULL))
- 803486e: 2e14 cmp r6, #20
- 8034870: d011 beq.n 8034896 <snmp_delete_arpidx_tree+0x8a>
- 8034872: 2d00 cmp r5, #0
- 8034874: d1dc bne.n 8034830 <snmp_delete_arpidx_tree+0x24>
- 8034876: e00e b.n 8034896 <snmp_delete_arpidx_tree+0x8a>
- level++;
- }
- /* delete marked index nodes */
- while (del_cnt > 0)
- {
- del_cnt--;
- 8034878: 3c01 subs r4, #1
- 803487a: b2e4 uxtb r4, r4
- at_rn = del_rn[del_cnt];
- 803487c: aa10 add r2, sp, #64 ; 0x40
- 803487e: eb02 0384 add.w r3, r2, r4, lsl #2
- at_n = del_n[del_cnt];
- 8034882: f853 1c28 ldr.w r1, [r3, #-40]
- /* delete marked index nodes */
- while (del_cnt > 0)
- {
- del_cnt--;
- at_rn = del_rn[del_cnt];
- 8034886: f853 0c3c ldr.w r0, [r3, #-60]
- at_n = del_n[del_cnt];
- 803488a: 9100 str r1, [sp, #0]
- next = snmp_mib_node_delete(at_rn, at_n);
- 803488c: f000 fc7d bl 803518a <snmp_mib_node_delete>
- if (next != NULL)
- 8034890: b108 cbz r0, 8034896 <snmp_delete_arpidx_tree+0x8a>
- {
- LWIP_ASSERT("next_count == 0",next->count == 0);
- snmp_mib_lrn_free(next);
- 8034892: f000 fc21 bl 80350d8 <snmp_mib_lrn_free>
- at_rn = (struct mib_list_rootnode*)(at_n->nptr);
- }
- level++;
- }
- /* delete marked index nodes */
- while (del_cnt > 0)
- 8034896: 2c00 cmp r4, #0
- 8034898: d1ee bne.n 8034878 <snmp_delete_arpidx_tree+0x6c>
- u8_t fc, tree, level, del_cnt;
- snmp_netiftoifindex(ni, &arpidx[0]);
- snmp_iptooid(ip, &arpidx[1]);
- for (tree = 0; tree < 2; tree++)
- 803489a: 3701 adds r7, #1
- 803489c: b2ff uxtb r7, r7
- 803489e: 2f02 cmp r7, #2
- 80348a0: d1bf bne.n 8034822 <snmp_delete_arpidx_tree+0x16>
- snmp_mib_lrn_free(next);
- }
- }
- }
- /* disable getnext traversal on empty tables */
- if(arptree_root.count == 0) at.maxlength = 0;
- 80348a2: 4b06 ldr r3, [pc, #24] ; (80348bc <snmp_delete_arpidx_tree+0xb0>)
- 80348a4: 8b9b ldrh r3, [r3, #28]
- 80348a6: b90b cbnz r3, 80348ac <snmp_delete_arpidx_tree+0xa0>
- 80348a8: 4b06 ldr r3, [pc, #24] ; (80348c4 <snmp_delete_arpidx_tree+0xb8>)
- 80348aa: 825c strh r4, [r3, #18]
- if(ipntomtree_root.count == 0) ipntomtable.maxlength = 0;
- 80348ac: 4b04 ldr r3, [pc, #16] ; (80348c0 <snmp_delete_arpidx_tree+0xb4>)
- 80348ae: 8b9b ldrh r3, [r3, #28]
- 80348b0: b90b cbnz r3, 80348b6 <snmp_delete_arpidx_tree+0xaa>
- 80348b2: 4a05 ldr r2, [pc, #20] ; (80348c8 <snmp_delete_arpidx_tree+0xbc>)
- 80348b4: 8253 strh r3, [r2, #18]
- }
- 80348b6: b011 add sp, #68 ; 0x44
- 80348b8: bdf0 pop {r4, r5, r6, r7, pc}
- 80348ba: bf00 nop
- 80348bc: 20000918 .word 0x20000918
- 80348c0: 20000a08 .word 0x20000a08
- 80348c4: 2000073c .word 0x2000073c
- 80348c8: 20000720 .word 0x20000720
- 080348cc <snmp_inc_ipinreceives>:
- void snmp_inc_ipinreceives(void)
- {
- ipinreceives++;
- 80348cc: 4b02 ldr r3, [pc, #8] ; (80348d8 <snmp_inc_ipinreceives+0xc>)
- 80348ce: 681a ldr r2, [r3, #0]
- 80348d0: 3201 adds r2, #1
- 80348d2: 601a str r2, [r3, #0]
- 80348d4: 4770 bx lr
- 80348d6: bf00 nop
- 80348d8: 2000c4d4 .word 0x2000c4d4
- 080348dc <snmp_inc_ipinhdrerrors>:
- }
- void snmp_inc_ipinhdrerrors(void)
- {
- ipinhdrerrors++;
- 80348dc: 4b02 ldr r3, [pc, #8] ; (80348e8 <snmp_inc_ipinhdrerrors+0xc>)
- 80348de: 681a ldr r2, [r3, #0]
- 80348e0: 3201 adds r2, #1
- 80348e2: 601a str r2, [r3, #0]
- 80348e4: 4770 bx lr
- 80348e6: bf00 nop
- 80348e8: 2000c45c .word 0x2000c45c
- 080348ec <snmp_inc_ipinaddrerrors>:
- }
- void snmp_inc_ipinaddrerrors(void)
- {
- ipinaddrerrors++;
- 80348ec: 4b02 ldr r3, [pc, #8] ; (80348f8 <snmp_inc_ipinaddrerrors+0xc>)
- 80348ee: 681a ldr r2, [r3, #0]
- 80348f0: 3201 adds r2, #1
- 80348f2: 601a str r2, [r3, #0]
- 80348f4: 4770 bx lr
- 80348f6: bf00 nop
- 80348f8: 2000c440 .word 0x2000c440
- 080348fc <snmp_inc_ipinunknownprotos>:
- ipforwdatagrams++;
- }
- void snmp_inc_ipinunknownprotos(void)
- {
- ipinunknownprotos++;
- 80348fc: 4b02 ldr r3, [pc, #8] ; (8034908 <snmp_inc_ipinunknownprotos+0xc>)
- 80348fe: 681a ldr r2, [r3, #0]
- 8034900: 3201 adds r2, #1
- 8034902: 601a str r2, [r3, #0]
- 8034904: 4770 bx lr
- 8034906: bf00 nop
- 8034908: 2000c49c .word 0x2000c49c
- 0803490c <snmp_inc_ipindiscards>:
- }
- void snmp_inc_ipindiscards(void)
- {
- ipindiscards++;
- 803490c: 4b02 ldr r3, [pc, #8] ; (8034918 <snmp_inc_ipindiscards+0xc>)
- 803490e: 681a ldr r2, [r3, #0]
- 8034910: 3201 adds r2, #1
- 8034912: 601a str r2, [r3, #0]
- 8034914: 4770 bx lr
- 8034916: bf00 nop
- 8034918: 2000c528 .word 0x2000c528
- 0803491c <snmp_inc_ipindelivers>:
- }
- void snmp_inc_ipindelivers(void)
- {
- ipindelivers++;
- 803491c: 4b02 ldr r3, [pc, #8] ; (8034928 <snmp_inc_ipindelivers+0xc>)
- 803491e: 681a ldr r2, [r3, #0]
- 8034920: 3201 adds r2, #1
- 8034922: 601a str r2, [r3, #0]
- 8034924: 4770 bx lr
- 8034926: bf00 nop
- 8034928: 2000c560 .word 0x2000c560
- 0803492c <snmp_inc_ipoutrequests>:
- }
- void snmp_inc_ipoutrequests(void)
- {
- ipoutrequests++;
- 803492c: 4b02 ldr r3, [pc, #8] ; (8034938 <snmp_inc_ipoutrequests+0xc>)
- 803492e: 681a ldr r2, [r3, #0]
- 8034930: 3201 adds r2, #1
- 8034932: 601a str r2, [r3, #0]
- 8034934: 4770 bx lr
- 8034936: bf00 nop
- 8034938: 2000c548 .word 0x2000c548
- 0803493c <snmp_inc_ipoutdiscards>:
- }
- void snmp_inc_ipoutdiscards(void)
- {
- ipoutdiscards++;
- 803493c: 4b02 ldr r3, [pc, #8] ; (8034948 <snmp_inc_ipoutdiscards+0xc>)
- 803493e: 681a ldr r2, [r3, #0]
- 8034940: 3201 adds r2, #1
- 8034942: 601a str r2, [r3, #0]
- 8034944: 4770 bx lr
- 8034946: bf00 nop
- 8034948: 2000c4ec .word 0x2000c4ec
- 0803494c <snmp_inc_ipoutnoroutes>:
- }
- void snmp_inc_ipoutnoroutes(void)
- {
- ipoutnoroutes++;
- 803494c: 4b02 ldr r3, [pc, #8] ; (8034958 <snmp_inc_ipoutnoroutes+0xc>)
- 803494e: 681a ldr r2, [r3, #0]
- 8034950: 3201 adds r2, #1
- 8034952: 601a str r2, [r3, #0]
- 8034954: 4770 bx lr
- 8034956: bf00 nop
- 8034958: 2000c56c .word 0x2000c56c
- 0803495c <snmp_insert_ipaddridx_tree>:
- /**
- * Inserts ipAddrTable indexes (.ipAdEntAddr)
- * into index tree.
- */
- void snmp_insert_ipaddridx_tree(struct netif *ni)
- {
- 803495c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8034960: b086 sub sp, #24
- struct mib_list_node *ipa_node;
- s32_t ipaddridx[4];
- u8_t level;
- LWIP_ASSERT("ni != NULL", ni != NULL);
- snmp_iptooid(&ni->ip_addr, &ipaddridx[0]);
- 8034962: 3004 adds r0, #4
- 8034964: a902 add r1, sp, #8
- 8034966: f000 fb80 bl 803506a <snmp_iptooid>
- level = 0;
- ipa_rn = &ipaddrtree_root;
- 803496a: 4c17 ldr r4, [pc, #92] ; (80349c8 <snmp_insert_ipaddridx_tree+0x6c>)
- ipa_node->nptr = (struct mib_node*)ipa_rn;
- if (ipa_rn != NULL)
- {
- if (level == 2)
- {
- ipa_rn->get_object_def = ip_addrentry_get_object_def;
- 803496c: 4f17 ldr r7, [pc, #92] ; (80349cc <snmp_insert_ipaddridx_tree+0x70>)
- ipa_rn->get_value = ip_addrentry_get_value;
- 803496e: f8df 806c ldr.w r8, [pc, #108] ; 80349dc <snmp_insert_ipaddridx_tree+0x80>
- struct mib_list_node *ipa_node;
- s32_t ipaddridx[4];
- u8_t level;
- LWIP_ASSERT("ni != NULL", ni != NULL);
- snmp_iptooid(&ni->ip_addr, &ipaddridx[0]);
- 8034972: 2500 movs r5, #0
- level = 0;
- ipa_rn = &ipaddrtree_root;
- while (level < 4)
- {
- ipa_node = NULL;
- 8034974: 2300 movs r3, #0
- 8034976: 9301 str r3, [sp, #4]
- snmp_mib_node_insert(ipa_rn, ipaddridx[level], &ipa_node);
- 8034978: ab02 add r3, sp, #8
- 803497a: 4620 mov r0, r4
- 803497c: f853 1025 ldr.w r1, [r3, r5, lsl #2]
- 8034980: aa01 add r2, sp, #4
- 8034982: b2ee uxtb r6, r5
- 8034984: f000 fbac bl 80350e0 <snmp_mib_node_insert>
- if ((level != 3) && (ipa_node != NULL))
- 8034988: 2e03 cmp r6, #3
- 803498a: d015 beq.n 80349b8 <snmp_insert_ipaddridx_tree+0x5c>
- 803498c: 9b01 ldr r3, [sp, #4]
- 803498e: b19b cbz r3, 80349b8 <snmp_insert_ipaddridx_tree+0x5c>
- {
- if (ipa_node->nptr == NULL)
- 8034990: 68dc ldr r4, [r3, #12]
- 8034992: b98c cbnz r4, 80349b8 <snmp_insert_ipaddridx_tree+0x5c>
- {
- ipa_rn = snmp_mib_lrn_alloc();
- 8034994: f000 fb82 bl 803509c <snmp_mib_lrn_alloc>
- ipa_node->nptr = (struct mib_node*)ipa_rn;
- 8034998: 9b01 ldr r3, [sp, #4]
- snmp_mib_node_insert(ipa_rn, ipaddridx[level], &ipa_node);
- if ((level != 3) && (ipa_node != NULL))
- {
- if (ipa_node->nptr == NULL)
- {
- ipa_rn = snmp_mib_lrn_alloc();
- 803499a: 4604 mov r4, r0
- ipa_node->nptr = (struct mib_node*)ipa_rn;
- 803499c: 60d8 str r0, [r3, #12]
- if (ipa_rn != NULL)
- 803499e: b918 cbnz r0, 80349a8 <snmp_insert_ipaddridx_tree+0x4c>
- }
- }
- level++;
- }
- /* enable getnext traversal on filled table */
- ipaddrtable.maxlength = 1;
- 80349a0: 4b0b ldr r3, [pc, #44] ; (80349d0 <snmp_insert_ipaddridx_tree+0x74>)
- 80349a2: 2201 movs r2, #1
- 80349a4: 825a strh r2, [r3, #18]
- 80349a6: e00b b.n 80349c0 <snmp_insert_ipaddridx_tree+0x64>
- {
- ipa_rn = snmp_mib_lrn_alloc();
- ipa_node->nptr = (struct mib_node*)ipa_rn;
- if (ipa_rn != NULL)
- {
- if (level == 2)
- 80349a8: 2e02 cmp r6, #2
- 80349aa: d105 bne.n 80349b8 <snmp_insert_ipaddridx_tree+0x5c>
- {
- ipa_rn->get_object_def = ip_addrentry_get_object_def;
- ipa_rn->get_value = ip_addrentry_get_value;
- ipa_rn->set_test = noleafs_set_test;
- 80349ac: 4b09 ldr r3, [pc, #36] ; (80349d4 <snmp_insert_ipaddridx_tree+0x78>)
- if (ipa_rn != NULL)
- {
- if (level == 2)
- {
- ipa_rn->get_object_def = ip_addrentry_get_object_def;
- ipa_rn->get_value = ip_addrentry_get_value;
- 80349ae: e880 0180 stmia.w r0, {r7, r8}
- ipa_rn->set_test = noleafs_set_test;
- 80349b2: 6083 str r3, [r0, #8]
- ipa_rn->set_value = noleafs_set_value;
- 80349b4: 4b08 ldr r3, [pc, #32] ; (80349d8 <snmp_insert_ipaddridx_tree+0x7c>)
- 80349b6: 60c3 str r3, [r0, #12]
- 80349b8: 3501 adds r5, #1
- LWIP_ASSERT("ni != NULL", ni != NULL);
- snmp_iptooid(&ni->ip_addr, &ipaddridx[0]);
- level = 0;
- ipa_rn = &ipaddrtree_root;
- while (level < 4)
- 80349ba: 2d04 cmp r5, #4
- 80349bc: d1da bne.n 8034974 <snmp_insert_ipaddridx_tree+0x18>
- 80349be: e7ef b.n 80349a0 <snmp_insert_ipaddridx_tree+0x44>
- }
- level++;
- }
- /* enable getnext traversal on filled table */
- ipaddrtable.maxlength = 1;
- }
- 80349c0: b006 add sp, #24
- 80349c2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 80349c6: bf00 nop
- 80349c8: 20000874 .word 0x20000874
- 80349cc: 08034271 .word 0x08034271
- 80349d0: 200008f8 .word 0x200008f8
- 80349d4: 080339eb .word 0x080339eb
- 80349d8: 080339ef .word 0x080339ef
- 80349dc: 08034061 .word 0x08034061
- 080349e0 <snmp_delete_ipaddridx_tree>:
- /**
- * Removes ipAddrTable indexes (.ipAdEntAddr)
- * from index tree.
- */
- void snmp_delete_ipaddridx_tree(struct netif *ni)
- {
- 80349e0: b570 push {r4, r5, r6, lr}
- 80349e2: b08e sub sp, #56 ; 0x38
- struct mib_list_node *ipa_n, *del_n[4];
- s32_t ipaddridx[4];
- u8_t fc, level, del_cnt;
- LWIP_ASSERT("ni != NULL", ni != NULL);
- snmp_iptooid(&ni->ip_addr, &ipaddridx[0]);
- 80349e4: 3004 adds r0, #4
- 80349e6: a90a add r1, sp, #40 ; 0x28
- 80349e8: f000 fb3f bl 803506a <snmp_iptooid>
- 80349ec: 2600 movs r6, #0
- /* mark nodes for deletion */
- level = 0;
- del_cnt = 0;
- ipa_rn = &ipaddrtree_root;
- 80349ee: 4d1f ldr r5, [pc, #124] ; (8034a6c <snmp_delete_ipaddridx_tree+0x8c>)
- LWIP_ASSERT("ni != NULL", ni != NULL);
- snmp_iptooid(&ni->ip_addr, &ipaddridx[0]);
- /* mark nodes for deletion */
- level = 0;
- del_cnt = 0;
- 80349f0: 4634 mov r4, r6
- ipa_rn = &ipaddrtree_root;
- while ((level < 4) && (ipa_rn != NULL))
- {
- fc = snmp_mib_node_find(ipa_rn, ipaddridx[level], &ipa_n);
- 80349f2: ab0a add r3, sp, #40 ; 0x28
- 80349f4: 4628 mov r0, r5
- 80349f6: 58f1 ldr r1, [r6, r3]
- 80349f8: aa01 add r2, sp, #4
- 80349fa: f000 fbac bl 8035156 <snmp_mib_node_find>
- 80349fe: b2c0 uxtb r0, r0
- if (fc == 0)
- 8034a00: b198 cbz r0, 8034a2a <snmp_delete_ipaddridx_tree+0x4a>
- {
- /* ipaddridx[level] does not exist */
- del_cnt = 0;
- ipa_rn = NULL;
- }
- else if (fc == 1)
- 8034a02: 2801 cmp r0, #1
- 8034a04: d10b bne.n 8034a1e <snmp_delete_ipaddridx_tree+0x3e>
- {
- del_rn[del_cnt] = ipa_rn;
- 8034a06: ab0e add r3, sp, #56 ; 0x38
- 8034a08: eb03 0284 add.w r2, r3, r4, lsl #2
- del_n[del_cnt] = ipa_n;
- 8034a0c: 9b01 ldr r3, [sp, #4]
- del_cnt = 0;
- ipa_rn = NULL;
- }
- else if (fc == 1)
- {
- del_rn[del_cnt] = ipa_rn;
- 8034a0e: f842 5c30 str.w r5, [r2, #-48]
- del_n[del_cnt] = ipa_n;
- del_cnt++;
- 8034a12: 3401 adds r4, #1
- ipa_rn = NULL;
- }
- else if (fc == 1)
- {
- del_rn[del_cnt] = ipa_rn;
- del_n[del_cnt] = ipa_n;
- 8034a14: f842 3c20 str.w r3, [r2, #-32]
- del_cnt++;
- 8034a18: b2e4 uxtb r4, r4
- ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);
- 8034a1a: 68dd ldr r5, [r3, #12]
- 8034a1c: e007 b.n 8034a2e <snmp_delete_ipaddridx_tree+0x4e>
- }
- else if (fc == 2)
- 8034a1e: 2802 cmp r0, #2
- 8034a20: d105 bne.n 8034a2e <snmp_delete_ipaddridx_tree+0x4e>
- {
- /* reset delete (2 or more childs) */
- del_cnt = 0;
- ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);
- 8034a22: 9b01 ldr r3, [sp, #4]
- ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);
- }
- else if (fc == 2)
- {
- /* reset delete (2 or more childs) */
- del_cnt = 0;
- 8034a24: 2400 movs r4, #0
- ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);
- 8034a26: 68dd ldr r5, [r3, #12]
- 8034a28: e001 b.n 8034a2e <snmp_delete_ipaddridx_tree+0x4e>
- {
- fc = snmp_mib_node_find(ipa_rn, ipaddridx[level], &ipa_n);
- if (fc == 0)
- {
- /* ipaddridx[level] does not exist */
- del_cnt = 0;
- 8034a2a: 4604 mov r4, r0
- ipa_rn = NULL;
- 8034a2c: 4605 mov r5, r0
- /* mark nodes for deletion */
- level = 0;
- del_cnt = 0;
- ipa_rn = &ipaddrtree_root;
- while ((level < 4) && (ipa_rn != NULL))
- 8034a2e: 2e0c cmp r6, #12
- 8034a30: d012 beq.n 8034a58 <snmp_delete_ipaddridx_tree+0x78>
- 8034a32: 3604 adds r6, #4
- 8034a34: 2d00 cmp r5, #0
- 8034a36: d1dc bne.n 80349f2 <snmp_delete_ipaddridx_tree+0x12>
- 8034a38: e00e b.n 8034a58 <snmp_delete_ipaddridx_tree+0x78>
- level++;
- }
- /* delete marked index nodes */
- while (del_cnt > 0)
- {
- del_cnt--;
- 8034a3a: 3c01 subs r4, #1
- 8034a3c: b2e4 uxtb r4, r4
- ipa_rn = del_rn[del_cnt];
- 8034a3e: aa0e add r2, sp, #56 ; 0x38
- 8034a40: eb02 0384 add.w r3, r2, r4, lsl #2
- ipa_n = del_n[del_cnt];
- 8034a44: f853 1c20 ldr.w r1, [r3, #-32]
- /* delete marked index nodes */
- while (del_cnt > 0)
- {
- del_cnt--;
- ipa_rn = del_rn[del_cnt];
- 8034a48: f853 0c30 ldr.w r0, [r3, #-48]
- ipa_n = del_n[del_cnt];
- 8034a4c: 9101 str r1, [sp, #4]
- next = snmp_mib_node_delete(ipa_rn, ipa_n);
- 8034a4e: f000 fb9c bl 803518a <snmp_mib_node_delete>
- if (next != NULL)
- 8034a52: b108 cbz r0, 8034a58 <snmp_delete_ipaddridx_tree+0x78>
- {
- LWIP_ASSERT("next_count == 0",next->count == 0);
- snmp_mib_lrn_free(next);
- 8034a54: f000 fb40 bl 80350d8 <snmp_mib_lrn_free>
- ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);
- }
- level++;
- }
- /* delete marked index nodes */
- while (del_cnt > 0)
- 8034a58: 2c00 cmp r4, #0
- 8034a5a: d1ee bne.n 8034a3a <snmp_delete_ipaddridx_tree+0x5a>
- LWIP_ASSERT("next_count == 0",next->count == 0);
- snmp_mib_lrn_free(next);
- }
- }
- /* disable getnext traversal on empty table */
- if (ipaddrtree_root.count == 0) ipaddrtable.maxlength = 0;
- 8034a5c: 4b03 ldr r3, [pc, #12] ; (8034a6c <snmp_delete_ipaddridx_tree+0x8c>)
- 8034a5e: 8b9b ldrh r3, [r3, #28]
- 8034a60: b90b cbnz r3, 8034a66 <snmp_delete_ipaddridx_tree+0x86>
- 8034a62: 4b03 ldr r3, [pc, #12] ; (8034a70 <snmp_delete_ipaddridx_tree+0x90>)
- 8034a64: 825c strh r4, [r3, #18]
- }
- 8034a66: b00e add sp, #56 ; 0x38
- 8034a68: bd70 pop {r4, r5, r6, pc}
- 8034a6a: bf00 nop
- 8034a6c: 20000874 .word 0x20000874
- 8034a70: 200008f8 .word 0x200008f8
- 08034a74 <snmp_insert_iprteidx_tree>:
- *
- * @todo record sysuptime for _this_ route when it is installed
- * (needed for ipRouteAge) in the netif.
- */
- void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni)
- {
- 8034a74: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8034a78: b086 sub sp, #24
- u8_t insert = 0;
- ip_addr_t dst;
- if (dflt != 0)
- 8034a7a: b110 cbz r0, 8034a82 <snmp_insert_iprteidx_tree+0xe>
- {
- /* the default route 0.0.0.0 */
- ip_addr_set_any(&dst);
- 8034a7c: 2300 movs r3, #0
- 8034a7e: 9300 str r3, [sp, #0]
- 8034a80: e02b b.n 8034ada <snmp_insert_iprteidx_tree+0x66>
- insert = 1;
- }
- else
- {
- /* route to the network address */
- ip_addr_get_network(&dst, &ni->ip_addr, &ni->netmask);
- 8034a82: 688a ldr r2, [r1, #8]
- 8034a84: 684b ldr r3, [r1, #4]
- 8034a86: 4013 ands r3, r2
- 8034a88: 9300 str r3, [sp, #0]
- /* exclude 0.0.0.0 network (reserved for default rte) */
- if (!ip_addr_isany(&dst)) {
- 8034a8a: bb33 cbnz r3, 8034ada <snmp_insert_iprteidx_tree+0x66>
- 8034a8c: e021 b.n 8034ad2 <snmp_insert_iprteidx_tree+0x5e>
- snmp_iptooid(&dst, &iprteidx[0]);
- level = 0;
- iprte_rn = &iprtetree_root;
- while (level < 4)
- {
- iprte_node = NULL;
- 8034a8e: 2300 movs r3, #0
- 8034a90: 9301 str r3, [sp, #4]
- snmp_mib_node_insert(iprte_rn, iprteidx[level], &iprte_node);
- 8034a92: ab02 add r3, sp, #8
- 8034a94: 4620 mov r0, r4
- 8034a96: f853 1025 ldr.w r1, [r3, r5, lsl #2]
- 8034a9a: aa01 add r2, sp, #4
- 8034a9c: b2ee uxtb r6, r5
- 8034a9e: f000 fb1f bl 80350e0 <snmp_mib_node_insert>
- if ((level != 3) && (iprte_node != NULL))
- 8034aa2: 2e03 cmp r6, #3
- 8034aa4: d012 beq.n 8034acc <snmp_insert_iprteidx_tree+0x58>
- 8034aa6: 9b01 ldr r3, [sp, #4]
- 8034aa8: b183 cbz r3, 8034acc <snmp_insert_iprteidx_tree+0x58>
- {
- if (iprte_node->nptr == NULL)
- 8034aaa: 68dc ldr r4, [r3, #12]
- 8034aac: b974 cbnz r4, 8034acc <snmp_insert_iprteidx_tree+0x58>
- {
- iprte_rn = snmp_mib_lrn_alloc();
- 8034aae: f000 faf5 bl 803509c <snmp_mib_lrn_alloc>
- iprte_node->nptr = (struct mib_node*)iprte_rn;
- 8034ab2: 9b01 ldr r3, [sp, #4]
- snmp_mib_node_insert(iprte_rn, iprteidx[level], &iprte_node);
- if ((level != 3) && (iprte_node != NULL))
- {
- if (iprte_node->nptr == NULL)
- {
- iprte_rn = snmp_mib_lrn_alloc();
- 8034ab4: 4604 mov r4, r0
- iprte_node->nptr = (struct mib_node*)iprte_rn;
- 8034ab6: 60d8 str r0, [r3, #12]
- if (iprte_rn != NULL)
- 8034ab8: b158 cbz r0, 8034ad2 <snmp_insert_iprteidx_tree+0x5e>
- {
- if (level == 2)
- 8034aba: 2e02 cmp r6, #2
- 8034abc: d106 bne.n 8034acc <snmp_insert_iprteidx_tree+0x58>
- {
- iprte_rn->get_object_def = ip_rteentry_get_object_def;
- iprte_rn->get_value = ip_rteentry_get_value;
- iprte_rn->set_test = noleafs_set_test;
- 8034abe: 4b0d ldr r3, [pc, #52] ; (8034af4 <snmp_insert_iprteidx_tree+0x80>)
- iprte_node->nptr = (struct mib_node*)iprte_rn;
- if (iprte_rn != NULL)
- {
- if (level == 2)
- {
- iprte_rn->get_object_def = ip_rteentry_get_object_def;
- 8034ac0: f8c0 8000 str.w r8, [r0]
- iprte_rn->get_value = ip_rteentry_get_value;
- iprte_rn->set_test = noleafs_set_test;
- 8034ac4: 6083 str r3, [r0, #8]
- iprte_rn->set_value = noleafs_set_value;
- 8034ac6: 4b0c ldr r3, [pc, #48] ; (8034af8 <snmp_insert_iprteidx_tree+0x84>)
- if (iprte_rn != NULL)
- {
- if (level == 2)
- {
- iprte_rn->get_object_def = ip_rteentry_get_object_def;
- iprte_rn->get_value = ip_rteentry_get_value;
- 8034ac8: 6047 str r7, [r0, #4]
- iprte_rn->set_test = noleafs_set_test;
- iprte_rn->set_value = noleafs_set_value;
- 8034aca: 60c3 str r3, [r0, #12]
- 8034acc: 3501 adds r5, #1
- u8_t level;
- snmp_iptooid(&dst, &iprteidx[0]);
- level = 0;
- iprte_rn = &iprtetree_root;
- while (level < 4)
- 8034ace: 2d04 cmp r5, #4
- 8034ad0: d1dd bne.n 8034a8e <snmp_insert_iprteidx_tree+0x1a>
- }
- level++;
- }
- }
- /* enable getnext traversal on filled table */
- iprtetable.maxlength = 1;
- 8034ad2: 4b0a ldr r3, [pc, #40] ; (8034afc <snmp_insert_iprteidx_tree+0x88>)
- 8034ad4: 2201 movs r2, #1
- 8034ad6: 825a strh r2, [r3, #18]
- 8034ad8: e009 b.n 8034aee <snmp_insert_iprteidx_tree+0x7a>
- struct mib_list_rootnode *iprte_rn;
- struct mib_list_node *iprte_node;
- s32_t iprteidx[4];
- u8_t level;
- snmp_iptooid(&dst, &iprteidx[0]);
- 8034ada: 4668 mov r0, sp
- 8034adc: a902 add r1, sp, #8
- 8034ade: f000 fac4 bl 803506a <snmp_iptooid>
- 8034ae2: 2500 movs r5, #0
- level = 0;
- iprte_rn = &iprtetree_root;
- 8034ae4: 4c06 ldr r4, [pc, #24] ; (8034b00 <snmp_insert_iprteidx_tree+0x8c>)
- iprte_node->nptr = (struct mib_node*)iprte_rn;
- if (iprte_rn != NULL)
- {
- if (level == 2)
- {
- iprte_rn->get_object_def = ip_rteentry_get_object_def;
- 8034ae6: f8df 8020 ldr.w r8, [pc, #32] ; 8034b08 <snmp_insert_iprteidx_tree+0x94>
- iprte_rn->get_value = ip_rteentry_get_value;
- 8034aea: 4f06 ldr r7, [pc, #24] ; (8034b04 <snmp_insert_iprteidx_tree+0x90>)
- 8034aec: e7cf b.n 8034a8e <snmp_insert_iprteidx_tree+0x1a>
- level++;
- }
- }
- /* enable getnext traversal on filled table */
- iprtetable.maxlength = 1;
- }
- 8034aee: b006 add sp, #24
- 8034af0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 8034af4: 080339eb .word 0x080339eb
- 8034af8: 080339ef .word 0x080339ef
- 8034afc: 20000960 .word 0x20000960
- 8034b00: 200007a4 .word 0x200007a4
- 8034b04: 08034571 .word 0x08034571
- 8034b08: 08033bb5 .word 0x08033bb5
- 08034b0c <snmp_delete_iprteidx_tree>:
- * @param dflt non-zero for the default rte, zero for network rte
- * @param ni points to network interface for this rte or NULL
- * for default route to be removed.
- */
- void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni)
- {
- 8034b0c: b570 push {r4, r5, r6, lr}
- 8034b0e: b08e sub sp, #56 ; 0x38
- u8_t del = 0;
- ip_addr_t dst;
- if (dflt != 0)
- 8034b10: b110 cbz r0, 8034b18 <snmp_delete_iprteidx_tree+0xc>
- {
- /* the default route 0.0.0.0 */
- ip_addr_set_any(&dst);
- 8034b12: 2300 movs r3, #0
- 8034b14: 9300 str r3, [sp, #0]
- 8034b16: e041 b.n 8034b9c <snmp_delete_iprteidx_tree+0x90>
- del = 1;
- }
- else
- {
- /* route to the network address */
- ip_addr_get_network(&dst, &ni->ip_addr, &ni->netmask);
- 8034b18: 688a ldr r2, [r1, #8]
- 8034b1a: 684b ldr r3, [r1, #4]
- 8034b1c: 4013 ands r3, r2
- 8034b1e: 9300 str r3, [sp, #0]
- /* exclude 0.0.0.0 network (reserved for default rte) */
- if (!ip_addr_isany(&dst)) {
- 8034b20: 2b00 cmp r3, #0
- 8034b22: d13b bne.n 8034b9c <snmp_delete_iprteidx_tree+0x90>
- 8034b24: e034 b.n 8034b90 <snmp_delete_iprteidx_tree+0x84>
- level = 0;
- del_cnt = 0;
- iprte_rn = &iprtetree_root;
- while ((level < 4) && (iprte_rn != NULL))
- {
- fc = snmp_mib_node_find(iprte_rn, iprteidx[level], &iprte_n);
- 8034b26: ab0a add r3, sp, #40 ; 0x28
- 8034b28: 4628 mov r0, r5
- 8034b2a: 58f1 ldr r1, [r6, r3]
- 8034b2c: aa01 add r2, sp, #4
- 8034b2e: f000 fb12 bl 8035156 <snmp_mib_node_find>
- 8034b32: b2c0 uxtb r0, r0
- if (fc == 0)
- 8034b34: b198 cbz r0, 8034b5e <snmp_delete_iprteidx_tree+0x52>
- {
- /* iprteidx[level] does not exist */
- del_cnt = 0;
- iprte_rn = NULL;
- }
- else if (fc == 1)
- 8034b36: 2801 cmp r0, #1
- 8034b38: d10b bne.n 8034b52 <snmp_delete_iprteidx_tree+0x46>
- {
- del_rn[del_cnt] = iprte_rn;
- 8034b3a: ab0e add r3, sp, #56 ; 0x38
- 8034b3c: eb03 0284 add.w r2, r3, r4, lsl #2
- del_n[del_cnt] = iprte_n;
- 8034b40: 9b01 ldr r3, [sp, #4]
- del_cnt = 0;
- iprte_rn = NULL;
- }
- else if (fc == 1)
- {
- del_rn[del_cnt] = iprte_rn;
- 8034b42: f842 5c30 str.w r5, [r2, #-48]
- del_n[del_cnt] = iprte_n;
- del_cnt++;
- 8034b46: 3401 adds r4, #1
- iprte_rn = NULL;
- }
- else if (fc == 1)
- {
- del_rn[del_cnt] = iprte_rn;
- del_n[del_cnt] = iprte_n;
- 8034b48: f842 3c20 str.w r3, [r2, #-32]
- del_cnt++;
- 8034b4c: b2e4 uxtb r4, r4
- iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
- 8034b4e: 68dd ldr r5, [r3, #12]
- 8034b50: e007 b.n 8034b62 <snmp_delete_iprteidx_tree+0x56>
- }
- else if (fc == 2)
- 8034b52: 2802 cmp r0, #2
- 8034b54: d105 bne.n 8034b62 <snmp_delete_iprteidx_tree+0x56>
- {
- /* reset delete (2 or more childs) */
- del_cnt = 0;
- iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
- 8034b56: 9b01 ldr r3, [sp, #4]
- iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
- }
- else if (fc == 2)
- {
- /* reset delete (2 or more childs) */
- del_cnt = 0;
- 8034b58: 2400 movs r4, #0
- iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
- 8034b5a: 68dd ldr r5, [r3, #12]
- 8034b5c: e001 b.n 8034b62 <snmp_delete_iprteidx_tree+0x56>
- {
- fc = snmp_mib_node_find(iprte_rn, iprteidx[level], &iprte_n);
- if (fc == 0)
- {
- /* iprteidx[level] does not exist */
- del_cnt = 0;
- 8034b5e: 4604 mov r4, r0
- iprte_rn = NULL;
- 8034b60: 4605 mov r5, r0
- snmp_iptooid(&dst, &iprteidx[0]);
- /* mark nodes for deletion */
- level = 0;
- del_cnt = 0;
- iprte_rn = &iprtetree_root;
- while ((level < 4) && (iprte_rn != NULL))
- 8034b62: 2e0c cmp r6, #12
- 8034b64: d012 beq.n 8034b8c <snmp_delete_iprteidx_tree+0x80>
- 8034b66: 3604 adds r6, #4
- 8034b68: 2d00 cmp r5, #0
- 8034b6a: d1dc bne.n 8034b26 <snmp_delete_iprteidx_tree+0x1a>
- 8034b6c: e00e b.n 8034b8c <snmp_delete_iprteidx_tree+0x80>
- level++;
- }
- /* delete marked index nodes */
- while (del_cnt > 0)
- {
- del_cnt--;
- 8034b6e: 3c01 subs r4, #1
- 8034b70: b2e4 uxtb r4, r4
- iprte_rn = del_rn[del_cnt];
- 8034b72: aa0e add r2, sp, #56 ; 0x38
- 8034b74: eb02 0384 add.w r3, r2, r4, lsl #2
- iprte_n = del_n[del_cnt];
- 8034b78: f853 1c20 ldr.w r1, [r3, #-32]
- /* delete marked index nodes */
- while (del_cnt > 0)
- {
- del_cnt--;
- iprte_rn = del_rn[del_cnt];
- 8034b7c: f853 0c30 ldr.w r0, [r3, #-48]
- iprte_n = del_n[del_cnt];
- 8034b80: 9101 str r1, [sp, #4]
- next = snmp_mib_node_delete(iprte_rn, iprte_n);
- 8034b82: f000 fb02 bl 803518a <snmp_mib_node_delete>
- if (next != NULL)
- 8034b86: b108 cbz r0, 8034b8c <snmp_delete_iprteidx_tree+0x80>
- {
- LWIP_ASSERT("next_count == 0",next->count == 0);
- snmp_mib_lrn_free(next);
- 8034b88: f000 faa6 bl 80350d8 <snmp_mib_lrn_free>
- iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
- }
- level++;
- }
- /* delete marked index nodes */
- while (del_cnt > 0)
- 8034b8c: 2c00 cmp r4, #0
- 8034b8e: d1ee bne.n 8034b6e <snmp_delete_iprteidx_tree+0x62>
- snmp_mib_lrn_free(next);
- }
- }
- }
- /* disable getnext traversal on empty table */
- if (iprtetree_root.count == 0) iprtetable.maxlength = 0;
- 8034b90: 4b07 ldr r3, [pc, #28] ; (8034bb0 <snmp_delete_iprteidx_tree+0xa4>)
- 8034b92: 8b9b ldrh r3, [r3, #28]
- 8034b94: b953 cbnz r3, 8034bac <snmp_delete_iprteidx_tree+0xa0>
- 8034b96: 4a07 ldr r2, [pc, #28] ; (8034bb4 <snmp_delete_iprteidx_tree+0xa8>)
- 8034b98: 8253 strh r3, [r2, #18]
- 8034b9a: e007 b.n 8034bac <snmp_delete_iprteidx_tree+0xa0>
- struct mib_list_rootnode *iprte_rn, *next, *del_rn[4];
- struct mib_list_node *iprte_n, *del_n[4];
- s32_t iprteidx[4];
- u8_t fc, level, del_cnt;
- snmp_iptooid(&dst, &iprteidx[0]);
- 8034b9c: 4668 mov r0, sp
- 8034b9e: a90a add r1, sp, #40 ; 0x28
- 8034ba0: 2600 movs r6, #0
- 8034ba2: f000 fa62 bl 803506a <snmp_iptooid>
- /* mark nodes for deletion */
- level = 0;
- del_cnt = 0;
- 8034ba6: 4634 mov r4, r6
- iprte_rn = &iprtetree_root;
- 8034ba8: 4d01 ldr r5, [pc, #4] ; (8034bb0 <snmp_delete_iprteidx_tree+0xa4>)
- 8034baa: e7bc b.n 8034b26 <snmp_delete_iprteidx_tree+0x1a>
- }
- }
- }
- /* disable getnext traversal on empty table */
- if (iprtetree_root.count == 0) iprtetable.maxlength = 0;
- }
- 8034bac: b00e add sp, #56 ; 0x38
- 8034bae: bd70 pop {r4, r5, r6, pc}
- 8034bb0: 200007a4 .word 0x200007a4
- 8034bb4: 20000960 .word 0x20000960
- 08034bb8 <snmp_inc_icmpinmsgs>:
- void snmp_inc_icmpinmsgs(void)
- {
- icmpinmsgs++;
- 8034bb8: 4b02 ldr r3, [pc, #8] ; (8034bc4 <snmp_inc_icmpinmsgs+0xc>)
- 8034bba: 681a ldr r2, [r3, #0]
- 8034bbc: 3201 adds r2, #1
- 8034bbe: 601a str r2, [r3, #0]
- 8034bc0: 4770 bx lr
- 8034bc2: bf00 nop
- 8034bc4: 2000c464 .word 0x2000c464
- 08034bc8 <snmp_inc_icmpinerrors>:
- }
- void snmp_inc_icmpinerrors(void)
- {
- icmpinerrors++;
- 8034bc8: 4b02 ldr r3, [pc, #8] ; (8034bd4 <snmp_inc_icmpinerrors+0xc>)
- 8034bca: 681a ldr r2, [r3, #0]
- 8034bcc: 3201 adds r2, #1
- 8034bce: 601a str r2, [r3, #0]
- 8034bd0: 4770 bx lr
- 8034bd2: bf00 nop
- 8034bd4: 2000c460 .word 0x2000c460
- 08034bd8 <snmp_inc_icmpoutmsgs>:
- icmpinaddrmaskreps++;
- }
- void snmp_inc_icmpoutmsgs(void)
- {
- icmpoutmsgs++;
- 8034bd8: 4b02 ldr r3, [pc, #8] ; (8034be4 <snmp_inc_icmpoutmsgs+0xc>)
- 8034bda: 681a ldr r2, [r3, #0]
- 8034bdc: 3201 adds r2, #1
- 8034bde: 601a str r2, [r3, #0]
- 8034be0: 4770 bx lr
- 8034be2: bf00 nop
- 8034be4: 2000c4e4 .word 0x2000c4e4
- 08034be8 <snmp_inc_icmpouttimeexcds>:
- icmpoutdestunreachs++;
- }
- void snmp_inc_icmpouttimeexcds(void)
- {
- icmpouttimeexcds++;
- 8034be8: 4b02 ldr r3, [pc, #8] ; (8034bf4 <snmp_inc_icmpouttimeexcds+0xc>)
- 8034bea: 681a ldr r2, [r3, #0]
- 8034bec: 3201 adds r2, #1
- 8034bee: 601a str r2, [r3, #0]
- 8034bf0: 4770 bx lr
- 8034bf2: bf00 nop
- 8034bf4: 2000c4b0 .word 0x2000c4b0
- 08034bf8 <snmp_inc_icmpoutechoreps>:
- icmpoutechos++;
- }
- void snmp_inc_icmpoutechoreps(void)
- {
- icmpoutechoreps++;
- 8034bf8: 4b02 ldr r3, [pc, #8] ; (8034c04 <snmp_inc_icmpoutechoreps+0xc>)
- 8034bfa: 681a ldr r2, [r3, #0]
- 8034bfc: 3201 adds r2, #1
- 8034bfe: 601a str r2, [r3, #0]
- 8034c00: 4770 bx lr
- 8034c02: bf00 nop
- 8034c04: 2000c504 .word 0x2000c504
- 08034c08 <snmp_inc_tcpactiveopens>:
- icmpoutaddrmaskreps++;
- }
- void snmp_inc_tcpactiveopens(void)
- {
- tcpactiveopens++;
- 8034c08: 4b02 ldr r3, [pc, #8] ; (8034c14 <snmp_inc_tcpactiveopens+0xc>)
- 8034c0a: 681a ldr r2, [r3, #0]
- 8034c0c: 3201 adds r2, #1
- 8034c0e: 601a str r2, [r3, #0]
- 8034c10: 4770 bx lr
- 8034c12: bf00 nop
- 8034c14: 2000c458 .word 0x2000c458
- 08034c18 <snmp_inc_tcppassiveopens>:
- }
- void snmp_inc_tcppassiveopens(void)
- {
- tcppassiveopens++;
- 8034c18: 4b02 ldr r3, [pc, #8] ; (8034c24 <snmp_inc_tcppassiveopens+0xc>)
- 8034c1a: 681a ldr r2, [r3, #0]
- 8034c1c: 3201 adds r2, #1
- 8034c1e: 601a str r2, [r3, #0]
- 8034c20: 4770 bx lr
- 8034c22: bf00 nop
- 8034c24: 2000c48c .word 0x2000c48c
- 08034c28 <snmp_inc_tcpattemptfails>:
- }
- void snmp_inc_tcpattemptfails(void)
- {
- tcpattemptfails++;
- 8034c28: 4b02 ldr r3, [pc, #8] ; (8034c34 <snmp_inc_tcpattemptfails+0xc>)
- 8034c2a: 681a ldr r2, [r3, #0]
- 8034c2c: 3201 adds r2, #1
- 8034c2e: 601a str r2, [r3, #0]
- 8034c30: 4770 bx lr
- 8034c32: bf00 nop
- 8034c34: 2000c4d8 .word 0x2000c4d8
- 08034c38 <snmp_inc_tcpestabresets>:
- }
- void snmp_inc_tcpestabresets(void)
- {
- tcpestabresets++;
- 8034c38: 4b02 ldr r3, [pc, #8] ; (8034c44 <snmp_inc_tcpestabresets+0xc>)
- 8034c3a: 681a ldr r2, [r3, #0]
- 8034c3c: 3201 adds r2, #1
- 8034c3e: 601a str r2, [r3, #0]
- 8034c40: 4770 bx lr
- 8034c42: bf00 nop
- 8034c44: 2000c46c .word 0x2000c46c
- 08034c48 <snmp_inc_tcpinsegs>:
- }
- void snmp_inc_tcpinsegs(void)
- {
- tcpinsegs++;
- 8034c48: 4b02 ldr r3, [pc, #8] ; (8034c54 <snmp_inc_tcpinsegs+0xc>)
- 8034c4a: 681a ldr r2, [r3, #0]
- 8034c4c: 3201 adds r2, #1
- 8034c4e: 601a str r2, [r3, #0]
- 8034c50: 4770 bx lr
- 8034c52: bf00 nop
- 8034c54: 2000c4e8 .word 0x2000c4e8
- 08034c58 <snmp_inc_tcpoutsegs>:
- }
- void snmp_inc_tcpoutsegs(void)
- {
- tcpoutsegs++;
- 8034c58: 4b02 ldr r3, [pc, #8] ; (8034c64 <snmp_inc_tcpoutsegs+0xc>)
- 8034c5a: 681a ldr r2, [r3, #0]
- 8034c5c: 3201 adds r2, #1
- 8034c5e: 601a str r2, [r3, #0]
- 8034c60: 4770 bx lr
- 8034c62: bf00 nop
- 8034c64: 2000c534 .word 0x2000c534
- 08034c68 <snmp_inc_tcpretranssegs>:
- }
- void snmp_inc_tcpretranssegs(void)
- {
- tcpretranssegs++;
- 8034c68: 4b02 ldr r3, [pc, #8] ; (8034c74 <snmp_inc_tcpretranssegs+0xc>)
- 8034c6a: 681a ldr r2, [r3, #0]
- 8034c6c: 3201 adds r2, #1
- 8034c6e: 601a str r2, [r3, #0]
- 8034c70: 4770 bx lr
- 8034c72: bf00 nop
- 8034c74: 2000c508 .word 0x2000c508
- 08034c78 <snmp_inc_tcpinerrs>:
- }
- void snmp_inc_tcpinerrs(void)
- {
- tcpinerrs++;
- 8034c78: 4b02 ldr r3, [pc, #8] ; (8034c84 <snmp_inc_tcpinerrs+0xc>)
- 8034c7a: 681a ldr r2, [r3, #0]
- 8034c7c: 3201 adds r2, #1
- 8034c7e: 601a str r2, [r3, #0]
- 8034c80: 4770 bx lr
- 8034c82: bf00 nop
- 8034c84: 2000c494 .word 0x2000c494
- 08034c88 <snmp_inc_tcpoutrsts>:
- }
- void snmp_inc_tcpoutrsts(void)
- {
- tcpoutrsts++;
- 8034c88: 4b02 ldr r3, [pc, #8] ; (8034c94 <snmp_inc_tcpoutrsts+0xc>)
- 8034c8a: 681a ldr r2, [r3, #0]
- 8034c8c: 3201 adds r2, #1
- 8034c8e: 601a str r2, [r3, #0]
- 8034c90: 4770 bx lr
- 8034c92: bf00 nop
- 8034c94: 2000c4f8 .word 0x2000c4f8
- 08034c98 <snmp_inc_udpindatagrams>:
- }
- void snmp_inc_udpindatagrams(void)
- {
- udpindatagrams++;
- 8034c98: 4b02 ldr r3, [pc, #8] ; (8034ca4 <snmp_inc_udpindatagrams+0xc>)
- 8034c9a: 681a ldr r2, [r3, #0]
- 8034c9c: 3201 adds r2, #1
- 8034c9e: 601a str r2, [r3, #0]
- 8034ca0: 4770 bx lr
- 8034ca2: bf00 nop
- 8034ca4: 2000c514 .word 0x2000c514
- 08034ca8 <snmp_inc_udpnoports>:
- }
- void snmp_inc_udpnoports(void)
- {
- udpnoports++;
- 8034ca8: 4b02 ldr r3, [pc, #8] ; (8034cb4 <snmp_inc_udpnoports+0xc>)
- 8034caa: 681a ldr r2, [r3, #0]
- 8034cac: 3201 adds r2, #1
- 8034cae: 601a str r2, [r3, #0]
- 8034cb0: 4770 bx lr
- 8034cb2: bf00 nop
- 8034cb4: 2000c4cc .word 0x2000c4cc
- 08034cb8 <snmp_inc_udpinerrors>:
- }
- void snmp_inc_udpinerrors(void)
- {
- udpinerrors++;
- 8034cb8: 4b02 ldr r3, [pc, #8] ; (8034cc4 <snmp_inc_udpinerrors+0xc>)
- 8034cba: 681a ldr r2, [r3, #0]
- 8034cbc: 3201 adds r2, #1
- 8034cbe: 601a str r2, [r3, #0]
- 8034cc0: 4770 bx lr
- 8034cc2: bf00 nop
- 8034cc4: 2000c53c .word 0x2000c53c
- 08034cc8 <snmp_inc_udpoutdatagrams>:
- }
- void snmp_inc_udpoutdatagrams(void)
- {
- udpoutdatagrams++;
- 8034cc8: 4b02 ldr r3, [pc, #8] ; (8034cd4 <snmp_inc_udpoutdatagrams+0xc>)
- 8034cca: 681a ldr r2, [r3, #0]
- 8034ccc: 3201 adds r2, #1
- 8034cce: 601a str r2, [r3, #0]
- 8034cd0: 4770 bx lr
- 8034cd2: bf00 nop
- 8034cd4: 2000c4c4 .word 0x2000c4c4
- 08034cd8 <snmp_insert_udpidx_tree>:
- /**
- * Inserts udpTable indexes (.udpLocalAddress.udpLocalPort)
- * into index tree.
- */
- void snmp_insert_udpidx_tree(struct udp_pcb *pcb)
- {
- 8034cd8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8034cdc: 4604 mov r4, r0
- 8034cde: b086 sub sp, #24
- struct mib_list_node *udp_node;
- s32_t udpidx[5];
- u8_t level;
- LWIP_ASSERT("pcb != NULL", pcb != NULL);
- snmp_iptooid(&pcb->local_ip, &udpidx[0]);
- 8034ce0: a901 add r1, sp, #4
- 8034ce2: f000 f9c2 bl 803506a <snmp_iptooid>
- udpidx[4] = pcb->local_port;
- 8034ce6: 8a63 ldrh r3, [r4, #18]
- udp_node->nptr = (struct mib_node*)udp_rn;
- if (udp_rn != NULL)
- {
- if (level == 3)
- {
- udp_rn->get_object_def = udpentry_get_object_def;
- 8034ce8: 4f17 ldr r7, [pc, #92] ; (8034d48 <snmp_insert_udpidx_tree+0x70>)
- LWIP_ASSERT("pcb != NULL", pcb != NULL);
- snmp_iptooid(&pcb->local_ip, &udpidx[0]);
- udpidx[4] = pcb->local_port;
- udp_rn = &udp_root;
- 8034cea: 4c18 ldr r4, [pc, #96] ; (8034d4c <snmp_insert_udpidx_tree+0x74>)
- if (udp_rn != NULL)
- {
- if (level == 3)
- {
- udp_rn->get_object_def = udpentry_get_object_def;
- udp_rn->get_value = udpentry_get_value;
- 8034cec: f8df 806c ldr.w r8, [pc, #108] ; 8034d5c <snmp_insert_udpidx_tree+0x84>
- s32_t udpidx[5];
- u8_t level;
- LWIP_ASSERT("pcb != NULL", pcb != NULL);
- snmp_iptooid(&pcb->local_ip, &udpidx[0]);
- udpidx[4] = pcb->local_port;
- 8034cf0: 9305 str r3, [sp, #20]
- 8034cf2: 2500 movs r5, #0
- udp_rn = &udp_root;
- for (level = 0; level < 5; level++)
- {
- udp_node = NULL;
- 8034cf4: 2300 movs r3, #0
- 8034cf6: 9300 str r3, [sp, #0]
- snmp_mib_node_insert(udp_rn, udpidx[level], &udp_node);
- 8034cf8: ab01 add r3, sp, #4
- 8034cfa: 4620 mov r0, r4
- 8034cfc: f853 1025 ldr.w r1, [r3, r5, lsl #2]
- 8034d00: 466a mov r2, sp
- 8034d02: b2ee uxtb r6, r5
- 8034d04: f000 f9ec bl 80350e0 <snmp_mib_node_insert>
- if ((level != 4) && (udp_node != NULL))
- 8034d08: 2e04 cmp r6, #4
- 8034d0a: d015 beq.n 8034d38 <snmp_insert_udpidx_tree+0x60>
- 8034d0c: 9b00 ldr r3, [sp, #0]
- 8034d0e: b19b cbz r3, 8034d38 <snmp_insert_udpidx_tree+0x60>
- {
- if (udp_node->nptr == NULL)
- 8034d10: 68dc ldr r4, [r3, #12]
- 8034d12: b98c cbnz r4, 8034d38 <snmp_insert_udpidx_tree+0x60>
- {
- udp_rn = snmp_mib_lrn_alloc();
- 8034d14: f000 f9c2 bl 803509c <snmp_mib_lrn_alloc>
- udp_node->nptr = (struct mib_node*)udp_rn;
- 8034d18: 9b00 ldr r3, [sp, #0]
- snmp_mib_node_insert(udp_rn, udpidx[level], &udp_node);
- if ((level != 4) && (udp_node != NULL))
- {
- if (udp_node->nptr == NULL)
- {
- udp_rn = snmp_mib_lrn_alloc();
- 8034d1a: 4604 mov r4, r0
- udp_node->nptr = (struct mib_node*)udp_rn;
- 8034d1c: 60d8 str r0, [r3, #12]
- if (udp_rn != NULL)
- 8034d1e: b918 cbnz r0, 8034d28 <snmp_insert_udpidx_tree+0x50>
- {
- udp_rn = (struct mib_list_rootnode*)udp_node->nptr;
- }
- }
- }
- udptable.maxlength = 1;
- 8034d20: 4b0b ldr r3, [pc, #44] ; (8034d50 <snmp_insert_udpidx_tree+0x78>)
- 8034d22: 2201 movs r2, #1
- 8034d24: 825a strh r2, [r3, #18]
- 8034d26: e00b b.n 8034d40 <snmp_insert_udpidx_tree+0x68>
- {
- udp_rn = snmp_mib_lrn_alloc();
- udp_node->nptr = (struct mib_node*)udp_rn;
- if (udp_rn != NULL)
- {
- if (level == 3)
- 8034d28: 2e03 cmp r6, #3
- 8034d2a: d105 bne.n 8034d38 <snmp_insert_udpidx_tree+0x60>
- {
- udp_rn->get_object_def = udpentry_get_object_def;
- udp_rn->get_value = udpentry_get_value;
- udp_rn->set_test = noleafs_set_test;
- 8034d2c: 4b09 ldr r3, [pc, #36] ; (8034d54 <snmp_insert_udpidx_tree+0x7c>)
- if (udp_rn != NULL)
- {
- if (level == 3)
- {
- udp_rn->get_object_def = udpentry_get_object_def;
- udp_rn->get_value = udpentry_get_value;
- 8034d2e: e880 0180 stmia.w r0, {r7, r8}
- udp_rn->set_test = noleafs_set_test;
- 8034d32: 6083 str r3, [r0, #8]
- udp_rn->set_value = noleafs_set_value;
- 8034d34: 4b08 ldr r3, [pc, #32] ; (8034d58 <snmp_insert_udpidx_tree+0x80>)
- 8034d36: 60c3 str r3, [r0, #12]
- 8034d38: 3501 adds r5, #1
- LWIP_ASSERT("pcb != NULL", pcb != NULL);
- snmp_iptooid(&pcb->local_ip, &udpidx[0]);
- udpidx[4] = pcb->local_port;
- udp_rn = &udp_root;
- for (level = 0; level < 5; level++)
- 8034d3a: 2d05 cmp r5, #5
- 8034d3c: d1da bne.n 8034cf4 <snmp_insert_udpidx_tree+0x1c>
- 8034d3e: e7ef b.n 8034d20 <snmp_insert_udpidx_tree+0x48>
- udp_rn = (struct mib_list_rootnode*)udp_node->nptr;
- }
- }
- }
- udptable.maxlength = 1;
- }
- 8034d40: b006 add sp, #24
- 8034d42: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 8034d46: bf00 nop
- 8034d48: 0803435d .word 0x0803435d
- 8034d4c: 20000774 .word 0x20000774
- 8034d50: 20000758 .word 0x20000758
- 8034d54: 080339eb .word 0x080339eb
- 8034d58: 080339ef .word 0x080339ef
- 8034d5c: 08034019 .word 0x08034019
- 08034d60 <snmp_delete_udpidx_tree>:
- /**
- * Removes udpTable indexes (.udpLocalAddress.udpLocalPort)
- * from index tree.
- */
- void snmp_delete_udpidx_tree(struct udp_pcb *pcb)
- {
- 8034d60: b570 push {r4, r5, r6, lr}
- 8034d62: 4604 mov r4, r0
- 8034d64: b090 sub sp, #64 ; 0x40
- struct mib_list_node *udp_n, *del_n[5];
- s32_t udpidx[5];
- u8_t bindings, fc, level, del_cnt;
- LWIP_ASSERT("pcb != NULL", pcb != NULL);
- snmp_iptooid(&pcb->local_ip, &udpidx[0]);
- 8034d66: a90b add r1, sp, #44 ; 0x2c
- 8034d68: f000 f97f bl 803506a <snmp_iptooid>
- udpidx[4] = pcb->local_port;
- 8034d6c: 8a61 ldrh r1, [r4, #18]
- /* count PCBs for a given binding
- (e.g. when reusing ports or for temp output PCBs) */
- bindings = 0;
- npcb = udp_pcbs;
- 8034d6e: 4b2a ldr r3, [pc, #168] ; (8034e18 <snmp_delete_udpidx_tree+0xb8>)
- s32_t udpidx[5];
- u8_t bindings, fc, level, del_cnt;
- LWIP_ASSERT("pcb != NULL", pcb != NULL);
- snmp_iptooid(&pcb->local_ip, &udpidx[0]);
- udpidx[4] = pcb->local_port;
- 8034d70: 910f str r1, [sp, #60] ; 0x3c
- /* count PCBs for a given binding
- (e.g. when reusing ports or for temp output PCBs) */
- bindings = 0;
- npcb = udp_pcbs;
- 8034d72: 681b ldr r3, [r3, #0]
- snmp_iptooid(&pcb->local_ip, &udpidx[0]);
- udpidx[4] = pcb->local_port;
- /* count PCBs for a given binding
- (e.g. when reusing ports or for temp output PCBs) */
- bindings = 0;
- 8034d74: 2200 movs r2, #0
- npcb = udp_pcbs;
- while ((npcb != NULL))
- 8034d76: e009 b.n 8034d8c <snmp_delete_udpidx_tree+0x2c>
- {
- if (ip_addr_cmp(&npcb->local_ip, &pcb->local_ip) &&
- 8034d78: 681d ldr r5, [r3, #0]
- 8034d7a: 6820 ldr r0, [r4, #0]
- 8034d7c: 4285 cmp r5, r0
- 8034d7e: d104 bne.n 8034d8a <snmp_delete_udpidx_tree+0x2a>
- (npcb->local_port == udpidx[4]))
- 8034d80: 8a58 ldrh r0, [r3, #18]
- (e.g. when reusing ports or for temp output PCBs) */
- bindings = 0;
- npcb = udp_pcbs;
- while ((npcb != NULL))
- {
- if (ip_addr_cmp(&npcb->local_ip, &pcb->local_ip) &&
- 8034d82: 4288 cmp r0, r1
- 8034d84: d101 bne.n 8034d8a <snmp_delete_udpidx_tree+0x2a>
- (npcb->local_port == udpidx[4]))
- {
- bindings++;
- 8034d86: 3201 adds r2, #1
- 8034d88: b2d2 uxtb r2, r2
- }
- npcb = npcb->next;
- 8034d8a: 68db ldr r3, [r3, #12]
- /* count PCBs for a given binding
- (e.g. when reusing ports or for temp output PCBs) */
- bindings = 0;
- npcb = udp_pcbs;
- while ((npcb != NULL))
- 8034d8c: 2b00 cmp r3, #0
- 8034d8e: d1f3 bne.n 8034d78 <snmp_delete_udpidx_tree+0x18>
- {
- bindings++;
- }
- npcb = npcb->next;
- }
- if (bindings == 1)
- 8034d90: 2a01 cmp r2, #1
- 8034d92: d004 beq.n 8034d9e <snmp_delete_udpidx_tree+0x3e>
- snmp_mib_lrn_free(next);
- }
- }
- }
- /* disable getnext traversal on empty table */
- if (udp_root.count == 0) udptable.maxlength = 0;
- 8034d94: 4b21 ldr r3, [pc, #132] ; (8034e1c <snmp_delete_udpidx_tree+0xbc>)
- 8034d96: 8b9b ldrh r3, [r3, #28]
- 8034d98: 2b00 cmp r3, #0
- 8034d9a: d039 beq.n 8034e10 <snmp_delete_udpidx_tree+0xb0>
- 8034d9c: e03a b.n 8034e14 <snmp_delete_udpidx_tree+0xb4>
- {
- /* selectively remove */
- /* mark nodes for deletion */
- level = 0;
- del_cnt = 0;
- udp_rn = &udp_root;
- 8034d9e: 4d1f ldr r5, [pc, #124] ; (8034e1c <snmp_delete_udpidx_tree+0xbc>)
- {
- bindings++;
- }
- npcb = npcb->next;
- }
- if (bindings == 1)
- 8034da0: 461e mov r6, r3
- 8034da2: 461c mov r4, r3
- level = 0;
- del_cnt = 0;
- udp_rn = &udp_root;
- while ((level < 5) && (udp_rn != NULL))
- {
- fc = snmp_mib_node_find(udp_rn, udpidx[level], &udp_n);
- 8034da4: ab0b add r3, sp, #44 ; 0x2c
- 8034da6: 4628 mov r0, r5
- 8034da8: 58f1 ldr r1, [r6, r3]
- 8034daa: 466a mov r2, sp
- 8034dac: f000 f9d3 bl 8035156 <snmp_mib_node_find>
- 8034db0: b2c0 uxtb r0, r0
- if (fc == 0)
- 8034db2: b198 cbz r0, 8034ddc <snmp_delete_udpidx_tree+0x7c>
- {
- /* udpidx[level] does not exist */
- del_cnt = 0;
- udp_rn = NULL;
- }
- else if (fc == 1)
- 8034db4: 2801 cmp r0, #1
- 8034db6: d10b bne.n 8034dd0 <snmp_delete_udpidx_tree+0x70>
- {
- del_rn[del_cnt] = udp_rn;
- 8034db8: ab10 add r3, sp, #64 ; 0x40
- 8034dba: eb03 0284 add.w r2, r3, r4, lsl #2
- del_n[del_cnt] = udp_n;
- 8034dbe: 9b00 ldr r3, [sp, #0]
- del_cnt = 0;
- udp_rn = NULL;
- }
- else if (fc == 1)
- {
- del_rn[del_cnt] = udp_rn;
- 8034dc0: f842 5c3c str.w r5, [r2, #-60]
- del_n[del_cnt] = udp_n;
- del_cnt++;
- 8034dc4: 3401 adds r4, #1
- udp_rn = NULL;
- }
- else if (fc == 1)
- {
- del_rn[del_cnt] = udp_rn;
- del_n[del_cnt] = udp_n;
- 8034dc6: f842 3c28 str.w r3, [r2, #-40]
- del_cnt++;
- 8034dca: b2e4 uxtb r4, r4
- udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
- 8034dcc: 68dd ldr r5, [r3, #12]
- 8034dce: e007 b.n 8034de0 <snmp_delete_udpidx_tree+0x80>
- }
- else if (fc == 2)
- 8034dd0: 2802 cmp r0, #2
- 8034dd2: d105 bne.n 8034de0 <snmp_delete_udpidx_tree+0x80>
- {
- /* reset delete (2 or more childs) */
- del_cnt = 0;
- udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
- 8034dd4: 9b00 ldr r3, [sp, #0]
- udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
- }
- else if (fc == 2)
- {
- /* reset delete (2 or more childs) */
- del_cnt = 0;
- 8034dd6: 2400 movs r4, #0
- udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
- 8034dd8: 68dd ldr r5, [r3, #12]
- 8034dda: e001 b.n 8034de0 <snmp_delete_udpidx_tree+0x80>
- {
- fc = snmp_mib_node_find(udp_rn, udpidx[level], &udp_n);
- if (fc == 0)
- {
- /* udpidx[level] does not exist */
- del_cnt = 0;
- 8034ddc: 4604 mov r4, r0
- udp_rn = NULL;
- 8034dde: 4605 mov r5, r0
- /* selectively remove */
- /* mark nodes for deletion */
- level = 0;
- del_cnt = 0;
- udp_rn = &udp_root;
- while ((level < 5) && (udp_rn != NULL))
- 8034de0: 2e10 cmp r6, #16
- 8034de2: d012 beq.n 8034e0a <snmp_delete_udpidx_tree+0xaa>
- 8034de4: 3604 adds r6, #4
- 8034de6: 2d00 cmp r5, #0
- 8034de8: d1dc bne.n 8034da4 <snmp_delete_udpidx_tree+0x44>
- 8034dea: e00e b.n 8034e0a <snmp_delete_udpidx_tree+0xaa>
- level++;
- }
- /* delete marked index nodes */
- while (del_cnt > 0)
- {
- del_cnt--;
- 8034dec: 3c01 subs r4, #1
- 8034dee: b2e4 uxtb r4, r4
- udp_rn = del_rn[del_cnt];
- 8034df0: aa10 add r2, sp, #64 ; 0x40
- 8034df2: eb02 0384 add.w r3, r2, r4, lsl #2
- udp_n = del_n[del_cnt];
- 8034df6: f853 1c28 ldr.w r1, [r3, #-40]
- /* delete marked index nodes */
- while (del_cnt > 0)
- {
- del_cnt--;
- udp_rn = del_rn[del_cnt];
- 8034dfa: f853 0c3c ldr.w r0, [r3, #-60]
- udp_n = del_n[del_cnt];
- 8034dfe: 9100 str r1, [sp, #0]
- next = snmp_mib_node_delete(udp_rn, udp_n);
- 8034e00: f000 f9c3 bl 803518a <snmp_mib_node_delete>
- if (next != NULL)
- 8034e04: b108 cbz r0, 8034e0a <snmp_delete_udpidx_tree+0xaa>
- {
- LWIP_ASSERT("next_count == 0",next->count == 0);
- snmp_mib_lrn_free(next);
- 8034e06: f000 f967 bl 80350d8 <snmp_mib_lrn_free>
- udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
- }
- level++;
- }
- /* delete marked index nodes */
- while (del_cnt > 0)
- 8034e0a: 2c00 cmp r4, #0
- 8034e0c: d1ee bne.n 8034dec <snmp_delete_udpidx_tree+0x8c>
- 8034e0e: e7c1 b.n 8034d94 <snmp_delete_udpidx_tree+0x34>
- snmp_mib_lrn_free(next);
- }
- }
- }
- /* disable getnext traversal on empty table */
- if (udp_root.count == 0) udptable.maxlength = 0;
- 8034e10: 4a03 ldr r2, [pc, #12] ; (8034e20 <snmp_delete_udpidx_tree+0xc0>)
- 8034e12: 8253 strh r3, [r2, #18]
- }
- 8034e14: b010 add sp, #64 ; 0x40
- 8034e16: bd70 pop {r4, r5, r6, pc}
- 8034e18: 2000f6d8 .word 0x2000f6d8
- 8034e1c: 20000774 .word 0x20000774
- 8034e20: 20000758 .word 0x20000758
- 08034e24 <snmp_inc_snmpinpkts>:
- void snmp_inc_snmpinpkts(void)
- {
- snmpinpkts++;
- 8034e24: 4b02 ldr r3, [pc, #8] ; (8034e30 <snmp_inc_snmpinpkts+0xc>)
- 8034e26: 681a ldr r2, [r3, #0]
- 8034e28: 3201 adds r2, #1
- 8034e2a: 601a str r2, [r3, #0]
- 8034e2c: 4770 bx lr
- 8034e2e: bf00 nop
- 8034e30: 2000c470 .word 0x2000c470
- 08034e34 <snmp_inc_snmpoutpkts>:
- }
- void snmp_inc_snmpoutpkts(void)
- {
- snmpoutpkts++;
- 8034e34: 4b02 ldr r3, [pc, #8] ; (8034e40 <snmp_inc_snmpoutpkts+0xc>)
- 8034e36: 681a ldr r2, [r3, #0]
- 8034e38: 3201 adds r2, #1
- 8034e3a: 601a str r2, [r3, #0]
- 8034e3c: 4770 bx lr
- 8034e3e: bf00 nop
- 8034e40: 2000c540 .word 0x2000c540
- 08034e44 <snmp_inc_snmpinbadversions>:
- }
- void snmp_inc_snmpinbadversions(void)
- {
- snmpinbadversions++;
- 8034e44: 4b02 ldr r3, [pc, #8] ; (8034e50 <snmp_inc_snmpinbadversions+0xc>)
- 8034e46: 681a ldr r2, [r3, #0]
- 8034e48: 3201 adds r2, #1
- 8034e4a: 601a str r2, [r3, #0]
- 8034e4c: 4770 bx lr
- 8034e4e: bf00 nop
- 8034e50: 2000c52c .word 0x2000c52c
- 08034e54 <snmp_inc_snmpinbadcommunitynames>:
- }
- void snmp_inc_snmpinbadcommunitynames(void)
- {
- snmpinbadcommunitynames++;
- 8034e54: 4b02 ldr r3, [pc, #8] ; (8034e60 <snmp_inc_snmpinbadcommunitynames+0xc>)
- 8034e56: 681a ldr r2, [r3, #0]
- 8034e58: 3201 adds r2, #1
- 8034e5a: 601a str r2, [r3, #0]
- 8034e5c: 4770 bx lr
- 8034e5e: bf00 nop
- 8034e60: 2000c444 .word 0x2000c444
- 08034e64 <snmp_inc_snmpinasnparseerrs>:
- snmpinbadcommunityuses++;
- }
- void snmp_inc_snmpinasnparseerrs(void)
- {
- snmpinasnparseerrs++;
- 8034e64: 4b02 ldr r3, [pc, #8] ; (8034e70 <snmp_inc_snmpinasnparseerrs+0xc>)
- 8034e66: 681a ldr r2, [r3, #0]
- 8034e68: 3201 adds r2, #1
- 8034e6a: 601a str r2, [r3, #0]
- 8034e6c: 4770 bx lr
- 8034e6e: bf00 nop
- 8034e70: 2000c530 .word 0x2000c530
- 08034e74 <snmp_inc_snmpintoobigs>:
- }
- void snmp_inc_snmpintoobigs(void)
- {
- snmpintoobigs++;
- 8034e74: 4b02 ldr r3, [pc, #8] ; (8034e80 <snmp_inc_snmpintoobigs+0xc>)
- 8034e76: 681a ldr r2, [r3, #0]
- 8034e78: 3201 adds r2, #1
- 8034e7a: 601a str r2, [r3, #0]
- 8034e7c: 4770 bx lr
- 8034e7e: bf00 nop
- 8034e80: 2000c4f0 .word 0x2000c4f0
- 08034e84 <snmp_inc_snmpinnosuchnames>:
- }
- void snmp_inc_snmpinnosuchnames(void)
- {
- snmpinnosuchnames++;
- 8034e84: 4b02 ldr r3, [pc, #8] ; (8034e90 <snmp_inc_snmpinnosuchnames+0xc>)
- 8034e86: 681a ldr r2, [r3, #0]
- 8034e88: 3201 adds r2, #1
- 8034e8a: 601a str r2, [r3, #0]
- 8034e8c: 4770 bx lr
- 8034e8e: bf00 nop
- 8034e90: 2000c570 .word 0x2000c570
- 08034e94 <snmp_inc_snmpinbadvalues>:
- }
- void snmp_inc_snmpinbadvalues(void)
- {
- snmpinbadvalues++;
- 8034e94: 4b02 ldr r3, [pc, #8] ; (8034ea0 <snmp_inc_snmpinbadvalues+0xc>)
- 8034e96: 681a ldr r2, [r3, #0]
- 8034e98: 3201 adds r2, #1
- 8034e9a: 601a str r2, [r3, #0]
- 8034e9c: 4770 bx lr
- 8034e9e: bf00 nop
- 8034ea0: 2000c50c .word 0x2000c50c
- 08034ea4 <snmp_inc_snmpinreadonlys>:
- }
- void snmp_inc_snmpinreadonlys(void)
- {
- snmpinreadonlys++;
- 8034ea4: 4b02 ldr r3, [pc, #8] ; (8034eb0 <snmp_inc_snmpinreadonlys+0xc>)
- 8034ea6: 681a ldr r2, [r3, #0]
- 8034ea8: 3201 adds r2, #1
- 8034eaa: 601a str r2, [r3, #0]
- 8034eac: 4770 bx lr
- 8034eae: bf00 nop
- 8034eb0: 2000c4e0 .word 0x2000c4e0
- 08034eb4 <snmp_inc_snmpingenerrs>:
- }
- void snmp_inc_snmpingenerrs(void)
- {
- snmpingenerrs++;
- 8034eb4: 4b02 ldr r3, [pc, #8] ; (8034ec0 <snmp_inc_snmpingenerrs+0xc>)
- 8034eb6: 681a ldr r2, [r3, #0]
- 8034eb8: 3201 adds r2, #1
- 8034eba: 601a str r2, [r3, #0]
- 8034ebc: 4770 bx lr
- 8034ebe: bf00 nop
- 8034ec0: 2000c4b8 .word 0x2000c4b8
- 08034ec4 <snmp_add_snmpintotalreqvars>:
- }
- void snmp_add_snmpintotalreqvars(u8_t value)
- {
- snmpintotalreqvars += value;
- 8034ec4: 4b02 ldr r3, [pc, #8] ; (8034ed0 <snmp_add_snmpintotalreqvars+0xc>)
- 8034ec6: 681a ldr r2, [r3, #0]
- 8034ec8: 1880 adds r0, r0, r2
- 8034eca: 6018 str r0, [r3, #0]
- 8034ecc: 4770 bx lr
- 8034ece: bf00 nop
- 8034ed0: 2000c510 .word 0x2000c510
- 08034ed4 <snmp_add_snmpintotalsetvars>:
- }
- void snmp_add_snmpintotalsetvars(u8_t value)
- {
- snmpintotalsetvars += value;
- 8034ed4: 4b02 ldr r3, [pc, #8] ; (8034ee0 <snmp_add_snmpintotalsetvars+0xc>)
- 8034ed6: 681a ldr r2, [r3, #0]
- 8034ed8: 1880 adds r0, r0, r2
- 8034eda: 6018 str r0, [r3, #0]
- 8034edc: 4770 bx lr
- 8034ede: bf00 nop
- 8034ee0: 2000c450 .word 0x2000c450
- 08034ee4 <snmp_inc_snmpingetrequests>:
- }
- void snmp_inc_snmpingetrequests(void)
- {
- snmpingetrequests++;
- 8034ee4: 4b02 ldr r3, [pc, #8] ; (8034ef0 <snmp_inc_snmpingetrequests+0xc>)
- 8034ee6: 681a ldr r2, [r3, #0]
- 8034ee8: 3201 adds r2, #1
- 8034eea: 601a str r2, [r3, #0]
- 8034eec: 4770 bx lr
- 8034eee: bf00 nop
- 8034ef0: 2000c4a4 .word 0x2000c4a4
- 08034ef4 <snmp_inc_snmpingetnexts>:
- }
- void snmp_inc_snmpingetnexts(void)
- {
- snmpingetnexts++;
- 8034ef4: 4b02 ldr r3, [pc, #8] ; (8034f00 <snmp_inc_snmpingetnexts+0xc>)
- 8034ef6: 681a ldr r2, [r3, #0]
- 8034ef8: 3201 adds r2, #1
- 8034efa: 601a str r2, [r3, #0]
- 8034efc: 4770 bx lr
- 8034efe: bf00 nop
- 8034f00: 2000c428 .word 0x2000c428
- 08034f04 <snmp_inc_snmpinsetrequests>:
- }
- void snmp_inc_snmpinsetrequests(void)
- {
- snmpinsetrequests++;
- 8034f04: 4b02 ldr r3, [pc, #8] ; (8034f10 <snmp_inc_snmpinsetrequests+0xc>)
- 8034f06: 681a ldr r2, [r3, #0]
- 8034f08: 3201 adds r2, #1
- 8034f0a: 601a str r2, [r3, #0]
- 8034f0c: 4770 bx lr
- 8034f0e: bf00 nop
- 8034f10: 2000c54c .word 0x2000c54c
- 08034f14 <snmp_inc_snmpingetresponses>:
- }
- void snmp_inc_snmpingetresponses(void)
- {
- snmpingetresponses++;
- 8034f14: 4b02 ldr r3, [pc, #8] ; (8034f20 <snmp_inc_snmpingetresponses+0xc>)
- 8034f16: 681a ldr r2, [r3, #0]
- 8034f18: 3201 adds r2, #1
- 8034f1a: 601a str r2, [r3, #0]
- 8034f1c: 4770 bx lr
- 8034f1e: bf00 nop
- 8034f20: 2000c4a0 .word 0x2000c4a0
- 08034f24 <snmp_inc_snmpintraps>:
- }
- void snmp_inc_snmpintraps(void)
- {
- snmpintraps++;
- 8034f24: 4b02 ldr r3, [pc, #8] ; (8034f30 <snmp_inc_snmpintraps+0xc>)
- 8034f26: 681a ldr r2, [r3, #0]
- 8034f28: 3201 adds r2, #1
- 8034f2a: 601a str r2, [r3, #0]
- 8034f2c: 4770 bx lr
- 8034f2e: bf00 nop
- 8034f30: 2000c438 .word 0x2000c438
- 08034f34 <snmp_inc_snmpouttoobigs>:
- }
- void snmp_inc_snmpouttoobigs(void)
- {
- snmpouttoobigs++;
- 8034f34: 4b02 ldr r3, [pc, #8] ; (8034f40 <snmp_inc_snmpouttoobigs+0xc>)
- 8034f36: 681a ldr r2, [r3, #0]
- 8034f38: 3201 adds r2, #1
- 8034f3a: 601a str r2, [r3, #0]
- 8034f3c: 4770 bx lr
- 8034f3e: bf00 nop
- 8034f40: 2000c488 .word 0x2000c488
- 08034f44 <snmp_inc_snmpoutnosuchnames>:
- }
- void snmp_inc_snmpoutnosuchnames(void)
- {
- snmpoutnosuchnames++;
- 8034f44: 4b02 ldr r3, [pc, #8] ; (8034f50 <snmp_inc_snmpoutnosuchnames+0xc>)
- 8034f46: 681a ldr r2, [r3, #0]
- 8034f48: 3201 adds r2, #1
- 8034f4a: 601a str r2, [r3, #0]
- 8034f4c: 4770 bx lr
- 8034f4e: bf00 nop
- 8034f50: 2000c454 .word 0x2000c454
- 08034f54 <snmp_inc_snmpoutbadvalues>:
- }
- void snmp_inc_snmpoutbadvalues(void)
- {
- snmpoutbadvalues++;
- 8034f54: 4b02 ldr r3, [pc, #8] ; (8034f60 <snmp_inc_snmpoutbadvalues+0xc>)
- 8034f56: 681a ldr r2, [r3, #0]
- 8034f58: 3201 adds r2, #1
- 8034f5a: 601a str r2, [r3, #0]
- 8034f5c: 4770 bx lr
- 8034f5e: bf00 nop
- 8034f60: 2000c434 .word 0x2000c434
- 08034f64 <snmp_inc_snmpoutgenerrs>:
- }
- void snmp_inc_snmpoutgenerrs(void)
- {
- snmpoutgenerrs++;
- 8034f64: 4b02 ldr r3, [pc, #8] ; (8034f70 <snmp_inc_snmpoutgenerrs+0xc>)
- 8034f66: 681a ldr r2, [r3, #0]
- 8034f68: 3201 adds r2, #1
- 8034f6a: 601a str r2, [r3, #0]
- 8034f6c: 4770 bx lr
- 8034f6e: bf00 nop
- 8034f70: 2000c574 .word 0x2000c574
- 08034f74 <snmp_inc_snmpoutgetresponses>:
- snmpoutsetrequests++;
- }
- void snmp_inc_snmpoutgetresponses(void)
- {
- snmpoutgetresponses++;
- 8034f74: 4b02 ldr r3, [pc, #8] ; (8034f80 <snmp_inc_snmpoutgetresponses+0xc>)
- 8034f76: 681a ldr r2, [r3, #0]
- 8034f78: 3201 adds r2, #1
- 8034f7a: 601a str r2, [r3, #0]
- 8034f7c: 4770 bx lr
- 8034f7e: bf00 nop
- 8034f80: 2000c430 .word 0x2000c430
- 08034f84 <snmp_inc_snmpouttraps>:
- }
- void snmp_inc_snmpouttraps(void)
- {
- snmpouttraps++;
- 8034f84: 4b02 ldr r3, [pc, #8] ; (8034f90 <snmp_inc_snmpouttraps+0xc>)
- 8034f86: 681a ldr r2, [r3, #0]
- 8034f88: 3201 adds r2, #1
- 8034f8a: 601a str r2, [r3, #0]
- 8034f8c: 4770 bx lr
- 8034f8e: bf00 nop
- 8034f90: 2000c4a8 .word 0x2000c4a8
- 08034f94 <snmp_get_snmpgrpid_ptr>:
- }
- void snmp_get_snmpgrpid_ptr(struct snmp_obj_id **oid)
- {
- *oid = &snmpgrp_id;
- 8034f94: 4b01 ldr r3, [pc, #4] ; (8034f9c <snmp_get_snmpgrpid_ptr+0x8>)
- 8034f96: 6003 str r3, [r0, #0]
- 8034f98: 4770 bx lr
- 8034f9a: bf00 nop
- 8034f9c: 20000984 .word 0x20000984
- 08034fa0 <snmp_get_snmpenableauthentraps>:
- }
- }
- void snmp_get_snmpenableauthentraps(u8_t *value)
- {
- *value = *snmpenableauthentraps_ptr;
- 8034fa0: 4b02 ldr r3, [pc, #8] ; (8034fac <snmp_get_snmpenableauthentraps+0xc>)
- 8034fa2: 681b ldr r3, [r3, #0]
- 8034fa4: 781b ldrb r3, [r3, #0]
- 8034fa6: 7003 strb r3, [r0, #0]
- 8034fa8: 4770 bx lr
- 8034faa: bf00 nop
- 8034fac: 20000898 .word 0x20000898
- 08034fb0 <push_node>:
- /**
- * Pushes nse struct onto stack.
- */
- static void
- push_node(struct nse* node)
- {
- 8034fb0: b530 push {r4, r5, lr}
- LWIP_ASSERT("node_stack_cnt < NODE_STACK_SIZE",node_stack_cnt < NODE_STACK_SIZE);
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("push_node() node=%p id=%"S32_F"\n",(void*)(node->r_ptr),node->r_id));
- if (node_stack_cnt < NODE_STACK_SIZE)
- 8034fb2: 4d07 ldr r5, [pc, #28] ; (8034fd0 <push_node+0x20>)
- 8034fb4: 782b ldrb r3, [r5, #0]
- 8034fb6: 2b1f cmp r3, #31
- 8034fb8: d808 bhi.n 8034fcc <push_node+0x1c>
- {
- node_stack[node_stack_cnt] = *node;
- 8034fba: 4a06 ldr r2, [pc, #24] ; (8034fd4 <push_node+0x24>)
- 8034fbc: 240c movs r4, #12
- 8034fbe: fb04 2403 mla r4, r4, r3, r2
- 8034fc2: c807 ldmia r0, {r0, r1, r2}
- 8034fc4: e884 0007 stmia.w r4, {r0, r1, r2}
- node_stack_cnt++;
- 8034fc8: 3301 adds r3, #1
- 8034fca: 702b strb r3, [r5, #0]
- 8034fcc: bd30 pop {r4, r5, pc}
- 8034fce: bf00 nop
- 8034fd0: 2000c578 .word 0x2000c578
- 8034fd4: 2000c57c .word 0x2000c57c
- 08034fd8 <empty_table>:
- empty_table(struct mib_node *node)
- {
- u8_t node_type;
- u8_t empty = 0;
- if (node != NULL)
- 8034fd8: b1d0 cbz r0, 8035010 <empty_table+0x38>
- {
- node_type = node->node_type;
- 8034fda: 7c03 ldrb r3, [r0, #16]
- if (node_type == MIB_NODE_LR)
- 8034fdc: 2b04 cmp r3, #4
- 8034fde: d105 bne.n 8034fec <empty_table+0x14>
- {
- struct mib_list_rootnode *lrn;
- lrn = (struct mib_list_rootnode *)node;
- if ((lrn->count == 0) || (lrn->head == NULL))
- 8034fe0: 8b83 ldrh r3, [r0, #28]
- 8034fe2: b903 cbnz r3, 8034fe6 <empty_table+0xe>
- 8034fe4: e009 b.n 8034ffa <empty_table+0x22>
- 8034fe6: 6943 ldr r3, [r0, #20]
- 8034fe8: b13b cbz r3, 8034ffa <empty_table+0x22>
- 8034fea: e010 b.n 803500e <empty_table+0x36>
- {
- empty = 1;
- }
- }
- else if ((node_type == MIB_NODE_AR) || (node_type == MIB_NODE_RA))
- 8034fec: 1e9a subs r2, r3, #2
- 8034fee: 2a01 cmp r2, #1
- 8034ff0: d805 bhi.n 8034ffe <empty_table+0x26>
- {
- struct mib_array_node *an;
- an = (struct mib_array_node *)node;
- if ((an->maxlength == 0) || (an->nptr == NULL))
- 8034ff2: 8a43 ldrh r3, [r0, #18]
- 8034ff4: b10b cbz r3, 8034ffa <empty_table+0x22>
- 8034ff6: 6980 ldr r0, [r0, #24]
- 8034ff8: e004 b.n 8035004 <empty_table+0x2c>
- {
- empty = 1;
- 8034ffa: 2001 movs r0, #1
- 8034ffc: 4770 bx lr
- }
- }
- else if (node_type == MIB_NODE_EX)
- 8034ffe: 2b05 cmp r3, #5
- 8035000: d105 bne.n 803500e <empty_table+0x36>
- {
- struct mib_external_node *en;
- en = (struct mib_external_node *)node;
- if (en->tree_levels == 0)
- 8035002: 7e00 ldrb r0, [r0, #24]
- */
- static u8_t
- empty_table(struct mib_node *node)
- {
- u8_t node_type;
- u8_t empty = 0;
- 8035004: f1d0 0001 rsbs r0, r0, #1
- 8035008: bf38 it cc
- 803500a: 2000 movcc r0, #0
- 803500c: 4770 bx lr
- 803500e: 2000 movs r0, #0
- empty = 1;
- }
- }
- }
- return empty;
- }
- 8035010: 4770 bx lr
- 8035012: 0000 movs r0, r0
- 08035014 <snmp_ifindextonetif>:
- * @param netif points to returned netif struct pointer
- */
- void
- snmp_ifindextonetif(s32_t ifindex, struct netif **netif)
- {
- struct netif *nif = netif_list;
- 8035014: 4b05 ldr r3, [pc, #20] ; (803502c <snmp_ifindextonetif+0x18>)
- s32_t i, ifidx;
- ifidx = ifindex - 1;
- 8035016: 3801 subs r0, #1
- * @param netif points to returned netif struct pointer
- */
- void
- snmp_ifindextonetif(s32_t ifindex, struct netif **netif)
- {
- struct netif *nif = netif_list;
- 8035018: 681b ldr r3, [r3, #0]
- s32_t i, ifidx;
- ifidx = ifindex - 1;
- i = 0;
- 803501a: 2200 movs r2, #0
- while ((nif != NULL) && (i < ifidx))
- 803501c: e001 b.n 8035022 <snmp_ifindextonetif+0xe>
- {
- nif = nif->next;
- 803501e: 681b ldr r3, [r3, #0]
- i++;
- 8035020: 3201 adds r2, #1
- struct netif *nif = netif_list;
- s32_t i, ifidx;
- ifidx = ifindex - 1;
- i = 0;
- while ((nif != NULL) && (i < ifidx))
- 8035022: b10b cbz r3, 8035028 <snmp_ifindextonetif+0x14>
- 8035024: 4282 cmp r2, r0
- 8035026: dbfa blt.n 803501e <snmp_ifindextonetif+0xa>
- {
- nif = nif->next;
- i++;
- }
- *netif = nif;
- 8035028: 600b str r3, [r1, #0]
- 803502a: 4770 bx lr
- 803502c: 2000f6b0 .word 0x2000f6b0
- 08035030 <snmp_netiftoifindex>:
- * @param ifidx points to s32_t object sub-identifier
- */
- void
- snmp_netiftoifindex(struct netif *netif, s32_t *ifidx)
- {
- struct netif *nif = netif_list;
- 8035030: 4b06 ldr r3, [pc, #24] ; (803504c <snmp_netiftoifindex+0x1c>)
- u16_t i;
- i = 0;
- 8035032: 2200 movs r2, #0
- * @param ifidx points to s32_t object sub-identifier
- */
- void
- snmp_netiftoifindex(struct netif *netif, s32_t *ifidx)
- {
- struct netif *nif = netif_list;
- 8035034: 681b ldr r3, [r3, #0]
- u16_t i;
- i = 0;
- while ((nif != NULL) && (nif != netif))
- 8035036: e001 b.n 803503c <snmp_netiftoifindex+0xc>
- {
- nif = nif->next;
- 8035038: 681b ldr r3, [r3, #0]
- i++;
- 803503a: b292 uxth r2, r2
- 803503c: 3201 adds r2, #1
- {
- struct netif *nif = netif_list;
- u16_t i;
- i = 0;
- while ((nif != NULL) && (nif != netif))
- 803503e: b90b cbnz r3, 8035044 <snmp_netiftoifindex+0x14>
- {
- nif = nif->next;
- i++;
- }
- *ifidx = i+1;
- 8035040: 600a str r2, [r1, #0]
- 8035042: 4770 bx lr
- {
- struct netif *nif = netif_list;
- u16_t i;
- i = 0;
- while ((nif != NULL) && (nif != netif))
- 8035044: 4283 cmp r3, r0
- 8035046: d1f7 bne.n 8035038 <snmp_netiftoifindex+0x8>
- 8035048: e7fa b.n 8035040 <snmp_netiftoifindex+0x10>
- 803504a: bf00 nop
- 803504c: 2000f6b0 .word 0x2000f6b0
- 08035050 <snmp_oidtoip>:
- * @param ip points to output struct
- */
- void
- snmp_oidtoip(s32_t *ident, ip_addr_t *ip)
- {
- IP4_ADDR(ip, ident[0], ident[1], ident[2], ident[3]);
- 8035050: 7802 ldrb r2, [r0, #0]
- 8035052: 68c3 ldr r3, [r0, #12]
- 8035054: ea42 6303 orr.w r3, r2, r3, lsl #24
- 8035058: 7a02 ldrb r2, [r0, #8]
- 803505a: ea43 4302 orr.w r3, r3, r2, lsl #16
- 803505e: 6842 ldr r2, [r0, #4]
- 8035060: 0612 lsls r2, r2, #24
- 8035062: ea43 4312 orr.w r3, r3, r2, lsr #16
- 8035066: 600b str r3, [r1, #0]
- 8035068: 4770 bx lr
- 0803506a <snmp_iptooid>:
- * @param ident points to s32_t ident[4] output
- */
- void
- snmp_iptooid(ip_addr_t *ip, s32_t *ident)
- {
- ident[0] = ip4_addr1(ip);
- 803506a: 7803 ldrb r3, [r0, #0]
- 803506c: 600b str r3, [r1, #0]
- ident[1] = ip4_addr2(ip);
- 803506e: 7843 ldrb r3, [r0, #1]
- 8035070: 604b str r3, [r1, #4]
- ident[2] = ip4_addr3(ip);
- 8035072: 7883 ldrb r3, [r0, #2]
- 8035074: 608b str r3, [r1, #8]
- ident[3] = ip4_addr4(ip);
- 8035076: 78c3 ldrb r3, [r0, #3]
- 8035078: 60cb str r3, [r1, #12]
- 803507a: 4770 bx lr
- 0803507c <snmp_mib_ln_alloc>:
- }
- struct mib_list_node *
- snmp_mib_ln_alloc(s32_t id)
- {
- 803507c: b510 push {r4, lr}
- 803507e: 4604 mov r4, r0
- struct mib_list_node *ln;
- ln = (struct mib_list_node *)memp_malloc(MEMP_SNMP_NODE);
- 8035080: 200b movs r0, #11
- 8035082: f7fa fda3 bl 802fbcc <memp_malloc>
- if (ln != NULL)
- 8035086: b120 cbz r0, 8035092 <snmp_mib_ln_alloc+0x16>
- {
- ln->prev = NULL;
- 8035088: 2300 movs r3, #0
- 803508a: 6003 str r3, [r0, #0]
- ln->next = NULL;
- 803508c: 6043 str r3, [r0, #4]
- ln->objid = id;
- 803508e: 6084 str r4, [r0, #8]
- ln->nptr = NULL;
- 8035090: 60c3 str r3, [r0, #12]
- }
- return ln;
- }
- 8035092: bd10 pop {r4, pc}
- 08035094 <snmp_mib_ln_free>:
- void
- snmp_mib_ln_free(struct mib_list_node *ln)
- {
- 8035094: 4601 mov r1, r0
- memp_free(MEMP_SNMP_NODE, ln);
- 8035096: 200b movs r0, #11
- 8035098: f7fa bdae b.w 802fbf8 <memp_free>
- 0803509c <snmp_mib_lrn_alloc>:
- }
- struct mib_list_rootnode *
- snmp_mib_lrn_alloc(void)
- {
- 803509c: b508 push {r3, lr}
- struct mib_list_rootnode *lrn;
- lrn = (struct mib_list_rootnode*)memp_malloc(MEMP_SNMP_ROOTNODE);
- 803509e: 200a movs r0, #10
- 80350a0: f7fa fd94 bl 802fbcc <memp_malloc>
- if (lrn != NULL)
- 80350a4: b170 cbz r0, 80350c4 <snmp_mib_lrn_alloc+0x28>
- {
- lrn->get_object_def = noleafs_get_object_def;
- 80350a6: 4b08 ldr r3, [pc, #32] ; (80350c8 <snmp_mib_lrn_alloc+0x2c>)
- 80350a8: 6003 str r3, [r0, #0]
- lrn->get_value = noleafs_get_value;
- 80350aa: 4b08 ldr r3, [pc, #32] ; (80350cc <snmp_mib_lrn_alloc+0x30>)
- 80350ac: 6043 str r3, [r0, #4]
- lrn->set_test = noleafs_set_test;
- 80350ae: 4b08 ldr r3, [pc, #32] ; (80350d0 <snmp_mib_lrn_alloc+0x34>)
- 80350b0: 6083 str r3, [r0, #8]
- lrn->set_value = noleafs_set_value;
- 80350b2: 4b08 ldr r3, [pc, #32] ; (80350d4 <snmp_mib_lrn_alloc+0x38>)
- 80350b4: 60c3 str r3, [r0, #12]
- lrn->node_type = MIB_NODE_LR;
- 80350b6: 2304 movs r3, #4
- 80350b8: 7403 strb r3, [r0, #16]
- lrn->maxlength = 0;
- 80350ba: 2300 movs r3, #0
- 80350bc: 8243 strh r3, [r0, #18]
- lrn->head = NULL;
- 80350be: 6143 str r3, [r0, #20]
- lrn->tail = NULL;
- 80350c0: 6183 str r3, [r0, #24]
- lrn->count = 0;
- 80350c2: 8383 strh r3, [r0, #28]
- }
- return lrn;
- }
- 80350c4: bd08 pop {r3, pc}
- 80350c6: bf00 nop
- 80350c8: 080339e3 .word 0x080339e3
- 80350cc: 080339e9 .word 0x080339e9
- 80350d0: 080339eb .word 0x080339eb
- 80350d4: 080339ef .word 0x080339ef
- 080350d8 <snmp_mib_lrn_free>:
- void
- snmp_mib_lrn_free(struct mib_list_rootnode *lrn)
- {
- 80350d8: 4601 mov r1, r0
- memp_free(MEMP_SNMP_ROOTNODE, lrn);
- 80350da: 200a movs r0, #10
- 80350dc: f7fa bd8c b.w 802fbf8 <memp_free>
- 080350e0 <snmp_mib_node_insert>:
- * used for constructing the tree.
- * @return -1 if failed, 1 if inserted, 2 if present.
- */
- s8_t
- snmp_mib_node_insert(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **insn)
- {
- 80350e0: b5f8 push {r3, r4, r5, r6, r7, lr}
- 80350e2: 4605 mov r5, r0
- 80350e4: 4616 mov r6, r2
- LWIP_ASSERT("rn != NULL",rn != NULL);
- /* -1 = malloc failure, 0 = not inserted, 1 = inserted, 2 = was present */
- insert = 0;
- if (rn->head == NULL)
- 80350e6: 696c ldr r4, [r5, #20]
- * used for constructing the tree.
- * @return -1 if failed, 1 if inserted, 2 if present.
- */
- s8_t
- snmp_mib_node_insert(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **insn)
- {
- 80350e8: 4608 mov r0, r1
- LWIP_ASSERT("rn != NULL",rn != NULL);
- /* -1 = malloc failure, 0 = not inserted, 1 = inserted, 2 = was present */
- insert = 0;
- if (rn->head == NULL)
- 80350ea: b93c cbnz r4, 80350fc <snmp_mib_node_insert+0x1c>
- {
- /* empty list, add first node */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("alloc empty list objid==%"S32_F"\n",objid));
- nn = snmp_mib_ln_alloc(objid);
- 80350ec: f7ff ffc6 bl 803507c <snmp_mib_ln_alloc>
- if (nn != NULL)
- 80350f0: b350 cbz r0, 8035148 <snmp_mib_node_insert+0x68>
- {
- rn->head = nn;
- 80350f2: 6168 str r0, [r5, #20]
- rn->tail = nn;
- 80350f4: 61a8 str r0, [r5, #24]
- *insn = nn;
- 80350f6: 6030 str r0, [r6, #0]
- 80350f8: e021 b.n 803513e <snmp_mib_node_insert+0x5e>
- *insn = n;
- insert = 2;
- }
- else if (n->objid < objid)
- {
- if (n->next == NULL)
- 80350fa: 463c mov r4, r7
- struct mib_list_node *n;
- /* at least one node is present */
- n = rn->head;
- while ((n != NULL) && (insert == 0))
- {
- if (n->objid == objid)
- 80350fc: 68a3 ldr r3, [r4, #8]
- 80350fe: 4283 cmp r3, r0
- 8035100: d102 bne.n 8035108 <snmp_mib_node_insert+0x28>
- {
- /* node is already there */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("node already there objid==%"S32_F"\n",objid));
- *insn = n;
- 8035102: 6034 str r4, [r6, #0]
- insert = 2;
- 8035104: 2302 movs r3, #2
- 8035106: e023 b.n 8035150 <snmp_mib_node_insert+0x70>
- }
- else if (n->objid < objid)
- 8035108: da0a bge.n 8035120 <snmp_mib_node_insert+0x40>
- {
- if (n->next == NULL)
- 803510a: 6867 ldr r7, [r4, #4]
- 803510c: 2f00 cmp r7, #0
- 803510e: d1f4 bne.n 80350fa <snmp_mib_node_insert+0x1a>
- {
- /* alloc and insert at the tail */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("alloc ins tail objid==%"S32_F"\n",objid));
- nn = snmp_mib_ln_alloc(objid);
- 8035110: f7ff ffb4 bl 803507c <snmp_mib_ln_alloc>
- if (nn != NULL)
- 8035114: b1d8 cbz r0, 803514e <snmp_mib_node_insert+0x6e>
- {
- nn->next = NULL;
- nn->prev = n;
- 8035116: e880 0090 stmia.w r0, {r4, r7}
- n->next = nn;
- 803511a: 6060 str r0, [r4, #4]
- rn->tail = nn;
- 803511c: 61a8 str r0, [r5, #24]
- 803511e: e00b b.n 8035138 <snmp_mib_node_insert+0x58>
- else
- {
- /* n->objid > objid */
- /* alloc and insert between n->prev and n */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("alloc ins n->prev, objid==%"S32_F", n\n",objid));
- nn = snmp_mib_ln_alloc(objid);
- 8035120: f7ff ffac bl 803507c <snmp_mib_ln_alloc>
- if (nn != NULL)
- 8035124: b198 cbz r0, 803514e <snmp_mib_node_insert+0x6e>
- {
- if (n->prev == NULL)
- 8035126: 6822 ldr r2, [r4, #0]
- {
- /* insert at the head */
- nn->next = n;
- nn->prev = NULL;
- 8035128: e880 0014 stmia.w r0, {r2, r4}
- /* alloc and insert between n->prev and n */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("alloc ins n->prev, objid==%"S32_F", n\n",objid));
- nn = snmp_mib_ln_alloc(objid);
- if (nn != NULL)
- {
- if (n->prev == NULL)
- 803512c: b90a cbnz r2, 8035132 <snmp_mib_node_insert+0x52>
- {
- /* insert at the head */
- nn->next = n;
- nn->prev = NULL;
- rn->head = nn;
- 803512e: 6168 str r0, [r5, #20]
- 8035130: e001 b.n 8035136 <snmp_mib_node_insert+0x56>
- else
- {
- /* insert in the middle */
- nn->next = n;
- nn->prev = n->prev;
- n->prev->next = nn;
- 8035132: 6822 ldr r2, [r4, #0]
- 8035134: 6050 str r0, [r2, #4]
- n->prev = nn;
- 8035136: 6020 str r0, [r4, #0]
- }
- *insn = nn;
- 8035138: 6030 str r0, [r6, #0]
- insert = 1;
- 803513a: 2301 movs r3, #1
- 803513c: e008 b.n 8035150 <snmp_mib_node_insert+0x70>
- }
- }
- }
- if (insert == 1)
- {
- rn->count += 1;
- 803513e: 8bab ldrh r3, [r5, #28]
- 8035140: 3301 adds r3, #1
- 8035142: 83ab strh r3, [r5, #28]
- 8035144: 2301 movs r3, #1
- 8035146: e000 b.n 803514a <snmp_mib_node_insert+0x6a>
- *insn = nn;
- insert = 1;
- }
- else
- {
- insert = -1;
- 8035148: 23ff movs r3, #255 ; 0xff
- if (insert == 1)
- {
- rn->count += 1;
- }
- LWIP_ASSERT("insert != 0",insert != 0);
- return insert;
- 803514a: b258 sxtb r0, r3
- 803514c: bdf8 pop {r3, r4, r5, r6, r7, pc}
- insert = 1;
- }
- else
- {
- /* insertion failure */
- insert = -1;
- 803514e: 23ff movs r3, #255 ; 0xff
- }
- }
- }
- }
- if (insert == 1)
- 8035150: 2b01 cmp r3, #1
- 8035152: d1fa bne.n 803514a <snmp_mib_node_insert+0x6a>
- 8035154: e7f3 b.n 803513e <snmp_mib_node_insert+0x5e>
- 08035156 <snmp_mib_node_find>:
- {
- s8_t fc;
- struct mib_list_node *n;
- LWIP_ASSERT("rn != NULL",rn != NULL);
- n = rn->head;
- 8035156: 6943 ldr r3, [r0, #20]
- while ((n != NULL) && (n->objid != objid))
- 8035158: e000 b.n 803515c <snmp_mib_node_find+0x6>
- {
- n = n->next;
- 803515a: 685b ldr r3, [r3, #4]
- s8_t fc;
- struct mib_list_node *n;
- LWIP_ASSERT("rn != NULL",rn != NULL);
- n = rn->head;
- while ((n != NULL) && (n->objid != objid))
- 803515c: b16b cbz r3, 803517a <snmp_mib_node_find+0x24>
- 803515e: 6898 ldr r0, [r3, #8]
- 8035160: 4288 cmp r0, r1
- 8035162: d1fa bne.n 803515a <snmp_mib_node_find+0x4>
- }
- if (n == NULL)
- {
- fc = 0;
- }
- else if (n->nptr == NULL)
- 8035164: 68d9 ldr r1, [r3, #12]
- 8035166: b161 cbz r1, 8035182 <snmp_mib_node_find+0x2c>
- }
- else
- {
- struct mib_list_rootnode *r;
- if (n->nptr->node_type == MIB_NODE_LR)
- 8035168: 7c08 ldrb r0, [r1, #16]
- 803516a: 2804 cmp r0, #4
- 803516c: d107 bne.n 803517e <snmp_mib_node_find+0x28>
- {
- r = (struct mib_list_rootnode *)n->nptr;
- if (r->count > 1)
- 803516e: 8b88 ldrh r0, [r1, #28]
- {
- /* can't delete node */
- fc = 2;
- 8035170: 2801 cmp r0, #1
- 8035172: bf94 ite ls
- 8035174: 2001 movls r0, #1
- 8035176: 2002 movhi r0, #2
- 8035178: e004 b.n 8035184 <snmp_mib_node_find+0x2e>
- {
- n = n->next;
- }
- if (n == NULL)
- {
- fc = 0;
- 803517a: 4618 mov r0, r3
- 803517c: e002 b.n 8035184 <snmp_mib_node_find+0x2e>
- }
- }
- else
- {
- /* other node type */
- fc = 3;
- 803517e: 2003 movs r0, #3
- 8035180: e000 b.n 8035184 <snmp_mib_node_find+0x2e>
- fc = 0;
- }
- else if (n->nptr == NULL)
- {
- /* leaf, can delete node */
- fc = 1;
- 8035182: 2001 movs r0, #1
- {
- /* other node type */
- fc = 3;
- }
- }
- *fn = n;
- 8035184: 6013 str r3, [r2, #0]
- return fc;
- }
- 8035186: b240 sxtb r0, r0
- 8035188: 4770 bx lr
- 0803518a <snmp_mib_node_delete>:
- * @param n points to the node to delete
- * @return the nptr to be freed by caller
- */
- struct mib_list_rootnode *
- snmp_mib_node_delete(struct mib_list_rootnode *rn, struct mib_list_node *n)
- {
- 803518a: b538 push {r3, r4, r5, lr}
- LWIP_ASSERT("rn != NULL",rn != NULL);
- LWIP_ASSERT("n != NULL",n != NULL);
- /* caller must remove this sub-tree */
- next = (struct mib_list_rootnode*)(n->nptr);
- rn->count -= 1;
- 803518c: 8b83 ldrh r3, [r0, #28]
- LWIP_ASSERT("rn != NULL",rn != NULL);
- LWIP_ASSERT("n != NULL",n != NULL);
- /* caller must remove this sub-tree */
- next = (struct mib_list_rootnode*)(n->nptr);
- 803518e: 68cd ldr r5, [r1, #12]
- rn->count -= 1;
- 8035190: 3b01 subs r3, #1
- 8035192: 8383 strh r3, [r0, #28]
- if (n == rn->head)
- 8035194: 6943 ldr r3, [r0, #20]
- 8035196: 4299 cmp r1, r3
- * @param n points to the node to delete
- * @return the nptr to be freed by caller
- */
- struct mib_list_rootnode *
- snmp_mib_node_delete(struct mib_list_rootnode *rn, struct mib_list_node *n)
- {
- 8035198: 4604 mov r4, r0
- /* caller must remove this sub-tree */
- next = (struct mib_list_rootnode*)(n->nptr);
- rn->count -= 1;
- if (n == rn->head)
- 803519a: d105 bne.n 80351a8 <snmp_mib_node_delete+0x1e>
- {
- rn->head = n->next;
- 803519c: 684b ldr r3, [r1, #4]
- 803519e: 6143 str r3, [r0, #20]
- if (n->next != NULL)
- 80351a0: b17b cbz r3, 80351c2 <snmp_mib_node_delete+0x38>
- {
- /* not last node, new list begin */
- n->next->prev = NULL;
- 80351a2: 2200 movs r2, #0
- 80351a4: 601a str r2, [r3, #0]
- 80351a6: e00c b.n 80351c2 <snmp_mib_node_delete+0x38>
- }
- }
- else if (n == rn->tail)
- 80351a8: 6983 ldr r3, [r0, #24]
- 80351aa: 4299 cmp r1, r3
- 80351ac: 680b ldr r3, [r1, #0]
- 80351ae: d104 bne.n 80351ba <snmp_mib_node_delete+0x30>
- {
- rn->tail = n->prev;
- 80351b0: 6183 str r3, [r0, #24]
- if (n->prev != NULL)
- 80351b2: b133 cbz r3, 80351c2 <snmp_mib_node_delete+0x38>
- {
- /* not last node, new list end */
- n->prev->next = NULL;
- 80351b4: 2200 movs r2, #0
- 80351b6: 605a str r2, [r3, #4]
- 80351b8: e003 b.n 80351c2 <snmp_mib_node_delete+0x38>
- }
- }
- else
- {
- /* node must be in the middle */
- n->prev->next = n->next;
- 80351ba: 684a ldr r2, [r1, #4]
- 80351bc: 605a str r2, [r3, #4]
- n->next->prev = n->prev;
- 80351be: 684a ldr r2, [r1, #4]
- 80351c0: 6013 str r3, [r2, #0]
- }
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("free list objid==%"S32_F"\n",n->objid));
- snmp_mib_ln_free(n);
- 80351c2: 4608 mov r0, r1
- 80351c4: f7ff ff66 bl 8035094 <snmp_mib_ln_free>
- if (rn->count == 0)
- 80351c8: 8ba3 ldrh r3, [r4, #28]
- 80351ca: b90b cbnz r3, 80351d0 <snmp_mib_node_delete+0x46>
- {
- rn->head = NULL;
- 80351cc: 6163 str r3, [r4, #20]
- rn->tail = NULL;
- 80351ce: 61a3 str r3, [r4, #24]
- }
- return next;
- }
- 80351d0: 4628 mov r0, r5
- 80351d2: bd38 pop {r3, r4, r5, pc}
- 080351d4 <snmp_search_tree>:
- * @param np points to the found object instance (return)
- * @return pointer to the requested parent (!) node if success, NULL otherwise
- */
- struct mib_node *
- snmp_search_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_name_ptr *np)
- {
- 80351d4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 80351d8: 4604 mov r4, r0
- 80351da: b085 sub sp, #20
- 80351dc: 460d mov r5, r1
- 80351de: 461e mov r6, r3
- * @param ident points to the array of sub identifiers
- * @param np points to the found object instance (return)
- * @return pointer to the requested parent (!) node if success, NULL otherwise
- */
- struct mib_node *
- snmp_search_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_name_ptr *np)
- 80351e0: f102 0804 add.w r8, r2, #4
- {
- u8_t node_type, ext_level;
- ext_level = 0;
- 80351e4: f04f 0b00 mov.w fp, #0
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("node==%p *ident==%"S32_F"\n",(void*)node,*ident));
- while (node != NULL)
- 80351e8: e068 b.n 80352bc <snmp_search_tree+0xe8>
- {
- node_type = node->node_type;
- 80351ea: 7c23 ldrb r3, [r4, #16]
- if ((node_type == MIB_NODE_AR) || (node_type == MIB_NODE_RA))
- 80351ec: 1e9a subs r2, r3, #2
- 80351ee: 2a01 cmp r2, #1
- 80351f0: d812 bhi.n 8035218 <snmp_search_tree+0x44>
- {
- struct mib_array_node *an;
- u16_t i;
- if (ident_len > 0)
- 80351f2: b90d cbnz r5, 80351f8 <snmp_search_tree+0x24>
- }
- else
- {
- /* search failed, short object identifier (nosuchname) */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("an search failed, short object identifier\n"));
- return NULL;
- 80351f4: 2000 movs r0, #0
- 80351f6: e06a b.n 80352ce <snmp_search_tree+0xfa>
- if (ident_len > 0)
- {
- /* array node (internal ROM or RAM, fixed length) */
- an = (struct mib_array_node *)node;
- i = 0;
- while ((i < an->maxlength) && (an->objid[i] != *ident))
- 80351f8: 8a67 ldrh r7, [r4, #18]
- 80351fa: 2300 movs r3, #0
- 80351fc: b29a uxth r2, r3
- 80351fe: 42ba cmp r2, r7
- 8035200: d2f8 bcs.n 80351f4 <snmp_search_tree+0x20>
- 8035202: 009a lsls r2, r3, #2
- 8035204: 6961 ldr r1, [r4, #20]
- 8035206: 5888 ldr r0, [r1, r2]
- 8035208: f858 1c04 ldr.w r1, [r8, #-4]
- 803520c: 3301 adds r3, #1
- 803520e: 4288 cmp r0, r1
- 8035210: d1f4 bne.n 80351fc <snmp_search_tree+0x28>
- }
- if (i < an->maxlength)
- {
- /* found it, if available proceed to child, otherwise inspect leaf */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("an->objid[%"U16_F"]==%"S32_F" *ident==%"S32_F"\n",i,an->objid[i],*ident));
- if (an->nptr[i] == NULL)
- 8035212: 69a3 ldr r3, [r4, #24]
- 8035214: 589b ldr r3, [r3, r2]
- 8035216: e057 b.n 80352c8 <snmp_search_tree+0xf4>
- /* search failed, short object identifier (nosuchname) */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("an search failed, short object identifier\n"));
- return NULL;
- }
- }
- else if(node_type == MIB_NODE_LR)
- 8035218: 2b04 cmp r3, #4
- 803521a: d10c bne.n 8035236 <snmp_search_tree+0x62>
- {
- struct mib_list_rootnode *lrn;
- struct mib_list_node *ln;
- if (ident_len > 0)
- 803521c: 2d00 cmp r5, #0
- 803521e: d0e9 beq.n 80351f4 <snmp_search_tree+0x20>
- {
- /* list root node (internal 'RAM', variable length) */
- lrn = (struct mib_list_rootnode *)node;
- ln = lrn->head;
- 8035220: 6963 ldr r3, [r4, #20]
- /* iterate over list, head to tail */
- while ((ln != NULL) && (ln->objid != *ident))
- 8035222: e000 b.n 8035226 <snmp_search_tree+0x52>
- {
- ln = ln->next;
- 8035224: 685b ldr r3, [r3, #4]
- {
- /* list root node (internal 'RAM', variable length) */
- lrn = (struct mib_list_rootnode *)node;
- ln = lrn->head;
- /* iterate over list, head to tail */
- while ((ln != NULL) && (ln->objid != *ident))
- 8035226: 2b00 cmp r3, #0
- 8035228: d0e4 beq.n 80351f4 <snmp_search_tree+0x20>
- 803522a: 6899 ldr r1, [r3, #8]
- 803522c: f858 2c04 ldr.w r2, [r8, #-4]
- 8035230: 4291 cmp r1, r2
- 8035232: d1f7 bne.n 8035224 <snmp_search_tree+0x50>
- 8035234: e047 b.n 80352c6 <snmp_search_tree+0xf2>
- /* search failed, short object identifier (nosuchname) */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("ln search failed, short object identifier\n"));
- return NULL;
- }
- }
- else if(node_type == MIB_NODE_EX)
- 8035236: 2b05 cmp r3, #5
- 8035238: d12e bne.n 8035298 <snmp_search_tree+0xc4>
- {
- struct mib_external_node *en;
- u16_t i, len;
- if (ident_len > 0)
- 803523a: 2d00 cmp r5, #0
- 803523c: d0da beq.n 80351f4 <snmp_search_tree+0x20>
- {
- /* external node (addressing and access via functions) */
- en = (struct mib_external_node *)node;
- i = 0;
- len = en->level_length(en->addr_inf,ext_level);
- 803523e: 69e3 ldr r3, [r4, #28]
- 8035240: 6960 ldr r0, [r4, #20]
- 8035242: 4659 mov r1, fp
- 8035244: 4798 blx r3
- if (ident_len > 0)
- {
- /* external node (addressing and access via functions) */
- en = (struct mib_external_node *)node;
- i = 0;
- 8035246: f04f 0900 mov.w r9, #0
- len = en->level_length(en->addr_inf,ext_level);
- 803524a: 4684 mov ip, r0
- while ((i < len) && (en->ident_cmp(en->addr_inf,ext_level,i,*ident) != 0))
- 803524c: e003 b.n 8035256 <snmp_search_tree+0x82>
- {
- i++;
- 803524e: f109 0901 add.w r9, r9, #1
- 8035252: fa1f f989 uxth.w r9, r9
- /* external node (addressing and access via functions) */
- en = (struct mib_external_node *)node;
- i = 0;
- len = en->level_length(en->addr_inf,ext_level);
- while ((i < len) && (en->ident_cmp(en->addr_inf,ext_level,i,*ident) != 0))
- 8035256: 45e1 cmp r9, ip
- 8035258: d0cc beq.n 80351f4 <snmp_search_tree+0x20>
- 803525a: 6960 ldr r0, [r4, #20]
- 803525c: f858 3c04 ldr.w r3, [r8, #-4]
- 8035260: 6a27 ldr r7, [r4, #32]
- 8035262: f8cd c004 str.w ip, [sp, #4]
- 8035266: 4659 mov r1, fp
- 8035268: 464a mov r2, r9
- 803526a: 47b8 blx r7
- 803526c: f8dd c004 ldr.w ip, [sp, #4]
- 8035270: 2800 cmp r0, #0
- 8035272: d1ec bne.n 803524e <snmp_search_tree+0x7a>
- {
- i++;
- }
- if (i < len)
- 8035274: 45e1 cmp r9, ip
- 8035276: d2bd bcs.n 80351f4 <snmp_search_tree+0x20>
- {
- s32_t debug_id;
- en->get_objid(en->addr_inf,ext_level,i,&debug_id);
- 8035278: 4659 mov r1, fp
- 803527a: ab03 add r3, sp, #12
- 803527c: 6a67 ldr r7, [r4, #36] ; 0x24
- 803527e: 6960 ldr r0, [r4, #20]
- 8035280: 464a mov r2, r9
- 8035282: 47b8 blx r7
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("en->objid==%"S32_F" *ident==%"S32_F"\n",debug_id,*ident));
- if ((ext_level + 1) == en->tree_levels)
- 8035284: 7e23 ldrb r3, [r4, #24]
- 8035286: f10b 0b01 add.w fp, fp, #1
- 803528a: 459b cmp fp, r3
- 803528c: d100 bne.n 8035290 <snmp_search_tree+0xbc>
- 803528e: e00b b.n 80352a8 <snmp_search_tree+0xd4>
- else
- {
- /* found it, proceed to child */
- ident_len--;
- ident++;
- ext_level++;
- 8035290: fa5f fb8b uxtb.w fp, fp
- 8035294: 4623 mov r3, r4
- 8035296: e00c b.n 80352b2 <snmp_search_tree+0xde>
- /* search failed, short object identifier (nosuchname) */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("en search failed, short object identifier\n"));
- return NULL;
- }
- }
- else if (node_type == MIB_NODE_SC)
- 8035298: 2b01 cmp r3, #1
- 803529a: d1ab bne.n 80351f4 <snmp_search_tree+0x20>
- {
- mib_scalar_node *sn;
- sn = (mib_scalar_node *)node;
- if ((ident_len == 1) && (*ident == 0))
- 803529c: 2d01 cmp r5, #1
- 803529e: d1a9 bne.n 80351f4 <snmp_search_tree+0x20>
- 80352a0: f8da 3000 ldr.w r3, [sl]
- 80352a4: 2b00 cmp r3, #0
- 80352a6: d1a5 bne.n 80351f4 <snmp_search_tree+0x20>
- {
- np->ident_len = ident_len;
- 80352a8: 7035 strb r5, [r6, #0]
- np->ident = ident;
- 80352aa: f8c6 a004 str.w sl, [r6, #4]
- return (struct mib_node*)sn;
- 80352ae: 4620 mov r0, r4
- 80352b0: e00d b.n 80352ce <snmp_search_tree+0xfa>
- 80352b2: 3d01 subs r5, #1
- 80352b4: b2ed uxtb r5, r5
- 80352b6: f108 0804 add.w r8, r8, #4
- 80352ba: 461c mov r4, r3
- * @param ident points to the array of sub identifiers
- * @param np points to the found object instance (return)
- * @return pointer to the requested parent (!) node if success, NULL otherwise
- */
- struct mib_node *
- snmp_search_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_name_ptr *np)
- 80352bc: f1a8 0a04 sub.w sl, r8, #4
- {
- u8_t node_type, ext_level;
- ext_level = 0;
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("node==%p *ident==%"S32_F"\n",(void*)node,*ident));
- while (node != NULL)
- 80352c0: 2c00 cmp r4, #0
- 80352c2: d192 bne.n 80351ea <snmp_search_tree+0x16>
- 80352c4: e796 b.n 80351f4 <snmp_search_tree+0x20>
- }
- if (ln != NULL)
- {
- /* found it, proceed to child */;
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("ln->objid==%"S32_F" *ident==%"S32_F"\n",ln->objid,*ident));
- if (ln->nptr == NULL)
- 80352c6: 68db ldr r3, [r3, #12]
- 80352c8: 2b00 cmp r3, #0
- 80352ca: d1f2 bne.n 80352b2 <snmp_search_tree+0xde>
- 80352cc: e7ec b.n 80352a8 <snmp_search_tree+0xd4>
- }
- }
- /* done, found nothing */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("search failed node==%p\n",(void*)node));
- return NULL;
- }
- 80352ce: b005 add sp, #20
- 80352d0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 080352d4 <snmp_expand_tree>:
- /**
- * Tree expansion.
- */
- struct mib_node *
- snmp_expand_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret)
- {
- 80352d4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 80352d8: 461d mov r5, r3
- 80352da: b08b sub sp, #44 ; 0x2c
- u8_t node_type, ext_level, climb_tree;
- ext_level = 0;
- /* reset node stack */
- node_stack_cnt = 0;
- 80352dc: 4ba4 ldr r3, [pc, #656] ; (8035570 <snmp_expand_tree+0x29c>)
- 80352de: f04f 0a00 mov.w sl, #0
- j = (u8_t)i + 1;
- if (j < len)
- {
- /* right node is the current external node */
- cur_node.r_ptr = node;
- en->get_objid(en->addr_inf,ext_level,j,&cur_node.r_id);
- 80352e2: af08 add r7, sp, #32
- /**
- * Tree expansion.
- */
- struct mib_node *
- snmp_expand_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret)
- {
- 80352e4: 4604 mov r4, r0
- 80352e6: 460e mov r6, r1
- 80352e8: 4690 mov r8, r2
- u8_t node_type, ext_level, climb_tree;
- ext_level = 0;
- /* reset node stack */
- node_stack_cnt = 0;
- 80352ea: f883 a000 strb.w sl, [r3]
- j = (u8_t)i + 1;
- if (j < len)
- {
- /* right node is the current external node */
- cur_node.r_ptr = node;
- en->get_objid(en->addr_inf,ext_level,j,&cur_node.r_id);
- 80352ee: 9705 str r7, [sp, #20]
- u8_t node_type, ext_level, climb_tree;
- ext_level = 0;
- /* reset node stack */
- node_stack_cnt = 0;
- while (node != NULL)
- 80352f0: e19c b.n 803562c <snmp_expand_tree+0x358>
- {
- climb_tree = 0;
- node_type = node->node_type;
- 80352f2: 7c23 ldrb r3, [r4, #16]
- if ((node_type == MIB_NODE_AR) || (node_type == MIB_NODE_RA))
- 80352f4: 1e9a subs r2, r3, #2
- 80352f6: 2a01 cmp r2, #1
- 80352f8: f200 808f bhi.w 803541a <snmp_expand_tree+0x146>
- 80352fc: 8a67 ldrh r7, [r4, #18]
- struct mib_array_node *an;
- u16_t i;
- /* array node (internal ROM or RAM, fixed length) */
- an = (struct mib_array_node *)node;
- if (ident_len > 0)
- 80352fe: b90e cbnz r6, 8035304 <snmp_expand_tree+0x30>
- else
- {
- u8_t j;
- /* ident_len == 0, complete with leftmost '.thing' */
- j = 0;
- while ((j < an->maxlength) && empty_table(an->nptr[j]))
- 8035300: 46b1 mov r9, r6
- 8035302: e06f b.n 80353e4 <snmp_expand_tree+0x110>
- /* array node (internal ROM or RAM, fixed length) */
- an = (struct mib_array_node *)node;
- if (ident_len > 0)
- {
- i = 0;
- while ((i < an->maxlength) && (an->objid[i] < *ident))
- 8035304: f04f 0c00 mov.w ip, #0
- 8035308: fa1f f28c uxth.w r2, ip
- 803530c: 42ba cmp r2, r7
- 803530e: f080 8168 bcs.w 80355e2 <snmp_expand_tree+0x30e>
- 8035312: 6963 ldr r3, [r4, #20]
- 8035314: f853 102c ldr.w r1, [r3, ip, lsl #2]
- 8035318: f8d8 3000 ldr.w r3, [r8]
- 803531c: 4299 cmp r1, r3
- 803531e: ea4f 098c mov.w r9, ip, lsl #2
- 8035322: f10c 0c01 add.w ip, ip, #1
- 8035326: dbef blt.n 8035308 <snmp_expand_tree+0x34>
- }
- if (i < an->maxlength)
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("an->objid[%"U16_F"]==%"S32_F" *ident==%"S32_F"\n",i,an->objid[i],*ident));
- /* add identifier to oidret */
- oidret->id[oidret->len] = an->objid[i];
- 8035328: 782b ldrb r3, [r5, #0]
- 803532a: eb05 0783 add.w r7, r5, r3, lsl #2
- 803532e: 6079 str r1, [r7, #4]
- (oidret->len)++;
- 8035330: 1c59 adds r1, r3, #1
- 8035332: 7029 strb r1, [r5, #0]
- if (an->nptr[i] == NULL)
- 8035334: f8d4 b018 ldr.w fp, [r4, #24]
- 8035338: f85b 0009 ldr.w r0, [fp, r9]
- 803533c: b998 cbnz r0, 8035366 <snmp_expand_tree+0x92>
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("leaf node\n"));
- /* leaf node (e.g. in a fixed size table) */
- if (an->objid[i] > *ident)
- 803533e: 6960 ldr r0, [r4, #20]
- 8035340: f850 6009 ldr.w r6, [r0, r9]
- 8035344: f8d8 0000 ldr.w r0, [r8]
- 8035348: 4286 cmp r6, r0
- 803534a: f300 8173 bgt.w 8035634 <snmp_expand_tree+0x360>
- {
- return (struct mib_node*)an;
- }
- else if ((i + 1) < an->maxlength)
- 803534e: 8a60 ldrh r0, [r4, #18]
- {
- /* an->objid[i] == *ident */
- (oidret->len)--;
- 8035350: 702b strb r3, [r5, #0]
- /* leaf node (e.g. in a fixed size table) */
- if (an->objid[i] > *ident)
- {
- return (struct mib_node*)an;
- }
- else if ((i + 1) < an->maxlength)
- 8035352: 3201 adds r2, #1
- 8035354: 4282 cmp r2, r0
- 8035356: f280 8144 bge.w 80355e2 <snmp_expand_tree+0x30e>
- {
- /* an->objid[i] == *ident */
- (oidret->len)--;
- oidret->id[oidret->len] = an->objid[i + 1];
- 803535a: 6963 ldr r3, [r4, #20]
- 803535c: f853 302c ldr.w r3, [r3, ip, lsl #2]
- (oidret->len)++;
- 8035360: 7029 strb r1, [r5, #0]
- }
- else if ((i + 1) < an->maxlength)
- {
- /* an->objid[i] == *ident */
- (oidret->len)--;
- oidret->id[oidret->len] = an->objid[i + 1];
- 8035362: 607b str r3, [r7, #4]
- 8035364: e166 b.n 8035634 <snmp_expand_tree+0x360>
- struct nse cur_node;
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("non-leaf node\n"));
- /* non-leaf, store right child ptr and id */
- LWIP_ASSERT("i < 0xff", i < 0xff);
- j = (u8_t)i + 1;
- 8035366: 3201 adds r2, #1
- while ((j < an->maxlength) && (empty_table(an->nptr[j])))
- 8035368: 8a61 ldrh r1, [r4, #18]
- struct nse cur_node;
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("non-leaf node\n"));
- /* non-leaf, store right child ptr and id */
- LWIP_ASSERT("i < 0xff", i < 0xff);
- j = (u8_t)i + 1;
- 803536a: fa5f fc82 uxtb.w ip, r2
- while ((j < an->maxlength) && (empty_table(an->nptr[j])))
- 803536e: 2700 movs r7, #0
- /**
- * Tree expansion.
- */
- struct mib_node *
- snmp_expand_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret)
- 8035370: eb0c 0307 add.w r3, ip, r7
- 8035374: b2db uxtb r3, r3
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("non-leaf node\n"));
- /* non-leaf, store right child ptr and id */
- LWIP_ASSERT("i < 0xff", i < 0xff);
- j = (u8_t)i + 1;
- while ((j < an->maxlength) && (empty_table(an->nptr[j])))
- 8035376: 428b cmp r3, r1
- 8035378: d21a bcs.n 80353b0 <snmp_expand_tree+0xdc>
- 803537a: b21b sxth r3, r3
- 803537c: 009a lsls r2, r3, #2
- 803537e: f85b 3023 ldr.w r3, [fp, r3, lsl #2]
- 8035382: 9104 str r1, [sp, #16]
- 8035384: 4618 mov r0, r3
- 8035386: 9203 str r2, [sp, #12]
- 8035388: 9302 str r3, [sp, #8]
- 803538a: f8cd c004 str.w ip, [sp, #4]
- 803538e: f7ff fe23 bl 8034fd8 <empty_table>
- 8035392: 3701 adds r7, #1
- 8035394: 9904 ldr r1, [sp, #16]
- 8035396: 9a03 ldr r2, [sp, #12]
- 8035398: 9b02 ldr r3, [sp, #8]
- 803539a: f8dd c004 ldr.w ip, [sp, #4]
- 803539e: 2800 cmp r0, #0
- 80353a0: d1e6 bne.n 8035370 <snmp_expand_tree+0x9c>
- {
- j++;
- }
- if (j < an->maxlength)
- {
- cur_node.r_ptr = an->nptr[j];
- 80353a2: 9307 str r3, [sp, #28]
- cur_node.r_id = an->objid[j];
- 80353a4: 6963 ldr r3, [r4, #20]
- 80353a6: 589b ldr r3, [r3, r2]
- cur_node.r_nl = 0;
- 80353a8: f88d 0024 strb.w r0, [sp, #36] ; 0x24
- j++;
- }
- if (j < an->maxlength)
- {
- cur_node.r_ptr = an->nptr[j];
- cur_node.r_id = an->objid[j];
- 80353ac: 9308 str r3, [sp, #32]
- 80353ae: e001 b.n 80353b4 <snmp_expand_tree+0xe0>
- cur_node.r_nl = 0;
- }
- else
- {
- cur_node.r_ptr = NULL;
- 80353b0: 2300 movs r3, #0
- 80353b2: 9307 str r3, [sp, #28]
- }
- push_node(&cur_node);
- 80353b4: a807 add r0, sp, #28
- 80353b6: f7ff fdfb bl 8034fb0 <push_node>
- if (an->objid[i] == *ident)
- 80353ba: 6963 ldr r3, [r4, #20]
- 80353bc: f853 2009 ldr.w r2, [r3, r9]
- 80353c0: f8d8 3000 ldr.w r3, [r8]
- 80353c4: 429a cmp r2, r3
- 80353c6: d104 bne.n 80353d2 <snmp_expand_tree+0xfe>
- {
- ident_len--;
- 80353c8: 3e01 subs r6, #1
- 80353ca: b2f6 uxtb r6, r6
- ident++;
- 80353cc: f108 0804 add.w r8, r8, #4
- 80353d0: e000 b.n 80353d4 <snmp_expand_tree+0x100>
- }
- else
- {
- /* an->objid[i] < *ident */
- ident_len = 0;
- 80353d2: 2600 movs r6, #0
- }
- /* follow next child pointer */
- node = an->nptr[i];
- 80353d4: 69a3 ldr r3, [r4, #24]
- 80353d6: f853 3009 ldr.w r3, [r3, r9]
- 80353da: e140 b.n 803565e <snmp_expand_tree+0x38a>
- u8_t j;
- /* ident_len == 0, complete with leftmost '.thing' */
- j = 0;
- while ((j < an->maxlength) && empty_table(an->nptr[j]))
- {
- j++;
- 80353dc: f109 0901 add.w r9, r9, #1
- 80353e0: fa5f f989 uxtb.w r9, r9
- else
- {
- u8_t j;
- /* ident_len == 0, complete with leftmost '.thing' */
- j = 0;
- while ((j < an->maxlength) && empty_table(an->nptr[j]))
- 80353e4: 45b9 cmp r9, r7
- 80353e6: f080 80fc bcs.w 80355e2 <snmp_expand_tree+0x30e>
- 80353ea: fa0f f289 sxth.w r2, r9
- 80353ee: 69a3 ldr r3, [r4, #24]
- 80353f0: f853 0022 ldr.w r0, [r3, r2, lsl #2]
- 80353f4: ea4f 0b82 mov.w fp, r2, lsl #2
- 80353f8: f7ff fdee bl 8034fd8 <empty_table>
- 80353fc: 2800 cmp r0, #0
- 80353fe: d1ed bne.n 80353dc <snmp_expand_tree+0x108>
- j++;
- }
- if (j < an->maxlength)
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("left an->objid[j]==%"S32_F"\n",an->objid[j]));
- oidret->id[oidret->len] = an->objid[j];
- 8035400: 6962 ldr r2, [r4, #20]
- 8035402: 782b ldrb r3, [r5, #0]
- 8035404: f852 100b ldr.w r1, [r2, fp]
- 8035408: eb05 0283 add.w r2, r5, r3, lsl #2
- (oidret->len)++;
- 803540c: 3301 adds r3, #1
- 803540e: 702b strb r3, [r5, #0]
- if (an->nptr[j] == NULL)
- 8035410: 69a3 ldr r3, [r4, #24]
- j++;
- }
- if (j < an->maxlength)
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("left an->objid[j]==%"S32_F"\n",an->objid[j]));
- oidret->id[oidret->len] = an->objid[j];
- 8035412: 6051 str r1, [r2, #4]
- (oidret->len)++;
- if (an->nptr[j] == NULL)
- 8035414: f853 300b ldr.w r3, [r3, fp]
- 8035418: e11f b.n 803565a <snmp_expand_tree+0x386>
- /* j == an->maxlength */
- climb_tree = 1;
- }
- }
- }
- else if(node_type == MIB_NODE_LR)
- 803541a: 2b04 cmp r3, #4
- 803541c: d14c bne.n 80354b8 <snmp_expand_tree+0x1e4>
- 803541e: 6967 ldr r7, [r4, #20]
- struct mib_list_rootnode *lrn;
- struct mib_list_node *ln;
- /* list root node (internal 'RAM', variable length) */
- lrn = (struct mib_list_rootnode *)node;
- if (ident_len > 0)
- 8035420: 2e00 cmp r6, #0
- 8035422: d040 beq.n 80354a6 <snmp_expand_tree+0x1d2>
- {
- ln = lrn->head;
- /* iterate over list, head to tail */
- while ((ln != NULL) && (ln->objid < *ident))
- 8035424: e000 b.n 8035428 <snmp_expand_tree+0x154>
- {
- ln = ln->next;
- 8035426: 687f ldr r7, [r7, #4]
- lrn = (struct mib_list_rootnode *)node;
- if (ident_len > 0)
- {
- ln = lrn->head;
- /* iterate over list, head to tail */
- while ((ln != NULL) && (ln->objid < *ident))
- 8035428: 2f00 cmp r7, #0
- 803542a: f000 80da beq.w 80355e2 <snmp_expand_tree+0x30e>
- 803542e: 68ba ldr r2, [r7, #8]
- 8035430: f8d8 3000 ldr.w r3, [r8]
- 8035434: 429a cmp r2, r3
- 8035436: dbf6 blt.n 8035426 <snmp_expand_tree+0x152>
- ln = ln->next;
- }
- if (ln != NULL)
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("ln->objid==%"S32_F" *ident==%"S32_F"\n",ln->objid,*ident));
- oidret->id[oidret->len] = ln->objid;
- 8035438: 782b ldrb r3, [r5, #0]
- 803543a: eb05 0183 add.w r1, r5, r3, lsl #2
- 803543e: 604a str r2, [r1, #4]
- (oidret->len)++;
- 8035440: 1c5a adds r2, r3, #1
- 8035442: 702a strb r2, [r5, #0]
- if (ln->nptr == NULL)
- 8035444: 68f8 ldr r0, [r7, #12]
- 8035446: b978 cbnz r0, 8035468 <snmp_expand_tree+0x194>
- {
- /* leaf node */
- if (ln->objid > *ident)
- 8035448: 68b8 ldr r0, [r7, #8]
- 803544a: f8d8 6000 ldr.w r6, [r8]
- 803544e: 42b0 cmp r0, r6
- 8035450: f300 80f0 bgt.w 8035634 <snmp_expand_tree+0x360>
- {
- return (struct mib_node*)lrn;
- }
- else if (ln->next != NULL)
- 8035454: 6878 ldr r0, [r7, #4]
- {
- /* ln->objid == *ident */
- (oidret->len)--;
- 8035456: 702b strb r3, [r5, #0]
- /* leaf node */
- if (ln->objid > *ident)
- {
- return (struct mib_node*)lrn;
- }
- else if (ln->next != NULL)
- 8035458: 2800 cmp r0, #0
- 803545a: f000 80c2 beq.w 80355e2 <snmp_expand_tree+0x30e>
- {
- /* ln->objid == *ident */
- (oidret->len)--;
- oidret->id[oidret->len] = ln->next->objid;
- 803545e: 687b ldr r3, [r7, #4]
- 8035460: 689b ldr r3, [r3, #8]
- (oidret->len)++;
- 8035462: 702a strb r2, [r5, #0]
- }
- else if (ln->next != NULL)
- {
- /* ln->objid == *ident */
- (oidret->len)--;
- oidret->id[oidret->len] = ln->next->objid;
- 8035464: 604b str r3, [r1, #4]
- 8035466: e0e5 b.n 8035634 <snmp_expand_tree+0x360>
- {
- struct mib_list_node *jn;
- struct nse cur_node;
- /* non-leaf, store right child ptr and id */
- jn = ln->next;
- 8035468: 687c ldr r4, [r7, #4]
- while ((jn != NULL) && empty_table(jn->nptr))
- 803546a: e000 b.n 803546e <snmp_expand_tree+0x19a>
- {
- jn = jn->next;
- 803546c: 6864 ldr r4, [r4, #4]
- struct mib_list_node *jn;
- struct nse cur_node;
- /* non-leaf, store right child ptr and id */
- jn = ln->next;
- while ((jn != NULL) && empty_table(jn->nptr))
- 803546e: 2c00 cmp r4, #0
- 8035470: f000 80e9 beq.w 8035646 <snmp_expand_tree+0x372>
- 8035474: f8d4 900c ldr.w r9, [r4, #12]
- 8035478: 4648 mov r0, r9
- 803547a: f7ff fdad bl 8034fd8 <empty_table>
- 803547e: 2800 cmp r0, #0
- 8035480: d1f4 bne.n 803546c <snmp_expand_tree+0x198>
- 8035482: e0d9 b.n 8035638 <snmp_expand_tree+0x364>
- }
- else
- {
- cur_node.r_ptr = NULL;
- }
- push_node(&cur_node);
- 8035484: a807 add r0, sp, #28
- 8035486: f7ff fd93 bl 8034fb0 <push_node>
- if (ln->objid == *ident)
- 803548a: 68ba ldr r2, [r7, #8]
- 803548c: f8d8 3000 ldr.w r3, [r8]
- 8035490: 429a cmp r2, r3
- 8035492: d104 bne.n 803549e <snmp_expand_tree+0x1ca>
- {
- ident_len--;
- 8035494: 3e01 subs r6, #1
- 8035496: b2f6 uxtb r6, r6
- ident++;
- 8035498: f108 0804 add.w r8, r8, #4
- 803549c: e000 b.n 80354a0 <snmp_expand_tree+0x1cc>
- }
- else
- {
- /* ln->objid < *ident */
- ident_len = 0;
- 803549e: 2600 movs r6, #0
- }
- /* follow next child pointer */
- node = ln->nptr;
- 80354a0: 68fb ldr r3, [r7, #12]
- 80354a2: e0dc b.n 803565e <snmp_expand_tree+0x38a>
- struct mib_list_node *jn;
- /* ident_len == 0, complete with leftmost '.thing' */
- jn = lrn->head;
- while ((jn != NULL) && empty_table(jn->nptr))
- {
- jn = jn->next;
- 80354a4: 687f ldr r7, [r7, #4]
- else
- {
- struct mib_list_node *jn;
- /* ident_len == 0, complete with leftmost '.thing' */
- jn = lrn->head;
- while ((jn != NULL) && empty_table(jn->nptr))
- 80354a6: 2f00 cmp r7, #0
- 80354a8: f000 809b beq.w 80355e2 <snmp_expand_tree+0x30e>
- 80354ac: 68f8 ldr r0, [r7, #12]
- 80354ae: f7ff fd93 bl 8034fd8 <empty_table>
- 80354b2: 2800 cmp r0, #0
- 80354b4: d1f6 bne.n 80354a4 <snmp_expand_tree+0x1d0>
- 80354b6: e0c8 b.n 803564a <snmp_expand_tree+0x376>
- /* jn == NULL */
- climb_tree = 1;
- }
- }
- }
- else if(node_type == MIB_NODE_EX)
- 80354b8: 2b05 cmp r3, #5
- 80354ba: f040 8086 bne.w 80355ca <snmp_expand_tree+0x2f6>
- struct mib_external_node *en;
- s32_t ex_id;
- /* external node (addressing and access via functions) */
- en = (struct mib_external_node *)node;
- if (ident_len > 0)
- 80354be: 2e00 cmp r6, #0
- 80354c0: d06e beq.n 80355a0 <snmp_expand_tree+0x2cc>
- {
- u16_t i, len;
- i = 0;
- len = en->level_length(en->addr_inf,ext_level);
- 80354c2: 69e3 ldr r3, [r4, #28]
- 80354c4: 6960 ldr r0, [r4, #20]
- 80354c6: 4651 mov r1, sl
- 80354c8: 4798 blx r3
- en = (struct mib_external_node *)node;
- if (ident_len > 0)
- {
- u16_t i, len;
- i = 0;
- 80354ca: f04f 0900 mov.w r9, #0
- len = en->level_length(en->addr_inf,ext_level);
- 80354ce: 4683 mov fp, r0
- while ((i < len) && (en->ident_cmp(en->addr_inf,ext_level,i,*ident) < 0))
- 80354d0: e003 b.n 80354da <snmp_expand_tree+0x206>
- {
- i++;
- 80354d2: f109 0901 add.w r9, r9, #1
- 80354d6: fa1f f989 uxth.w r9, r9
- {
- u16_t i, len;
- i = 0;
- len = en->level_length(en->addr_inf,ext_level);
- while ((i < len) && (en->ident_cmp(en->addr_inf,ext_level,i,*ident) < 0))
- 80354da: 45d9 cmp r9, fp
- 80354dc: f000 8081 beq.w 80355e2 <snmp_expand_tree+0x30e>
- 80354e0: 6a27 ldr r7, [r4, #32]
- 80354e2: 6960 ldr r0, [r4, #20]
- 80354e4: f8d8 3000 ldr.w r3, [r8]
- 80354e8: 4651 mov r1, sl
- 80354ea: 464a mov r2, r9
- 80354ec: 47b8 blx r7
- 80354ee: 2800 cmp r0, #0
- 80354f0: dbef blt.n 80354d2 <snmp_expand_tree+0x1fe>
- {
- i++;
- }
- if (i < len)
- 80354f2: 45d9 cmp r9, fp
- 80354f4: d275 bcs.n 80355e2 <snmp_expand_tree+0x30e>
- {
- /* add identifier to oidret */
- en->get_objid(en->addr_inf,ext_level,i,&ex_id);
- 80354f6: 4651 mov r1, sl
- 80354f8: 464a mov r2, r9
- 80354fa: ab06 add r3, sp, #24
- 80354fc: 6a67 ldr r7, [r4, #36] ; 0x24
- 80354fe: 6960 ldr r0, [r4, #20]
- 8035500: 47b8 blx r7
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("en->objid[%"U16_F"]==%"S32_F" *ident==%"S32_F"\n",i,ex_id,*ident));
- oidret->id[oidret->len] = ex_id;
- 8035502: 782b ldrb r3, [r5, #0]
- 8035504: 9a06 ldr r2, [sp, #24]
- 8035506: eb05 0183 add.w r1, r5, r3, lsl #2
- (oidret->len)++;
- if ((ext_level + 1) == en->tree_levels)
- 803550a: f10a 0c01 add.w ip, sl, #1
- if (i < len)
- {
- /* add identifier to oidret */
- en->get_objid(en->addr_inf,ext_level,i,&ex_id);
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("en->objid[%"U16_F"]==%"S32_F" *ident==%"S32_F"\n",i,ex_id,*ident));
- oidret->id[oidret->len] = ex_id;
- 803550e: 604a str r2, [r1, #4]
- (oidret->len)++;
- 8035510: 1c59 adds r1, r3, #1
- 8035512: 7029 strb r1, [r5, #0]
- if ((ext_level + 1) == en->tree_levels)
- 8035514: 7e21 ldrb r1, [r4, #24]
- 8035516: 458c cmp ip, r1
- 8035518: d118 bne.n 803554c <snmp_expand_tree+0x278>
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("leaf node\n"));
- /* leaf node */
- if (ex_id > *ident)
- 803551a: f8d8 1000 ldr.w r1, [r8]
- 803551e: 428a cmp r2, r1
- 8035520: f300 8088 bgt.w 8035634 <snmp_expand_tree+0x360>
- {
- return (struct mib_node*)en;
- }
- else if ((i + 1) < len)
- 8035524: f109 0201 add.w r2, r9, #1
- 8035528: 455a cmp r2, fp
- 803552a: da0d bge.n 8035548 <snmp_expand_tree+0x274>
- {
- /* ex_id == *ident */
- en->get_objid(en->addr_inf,ext_level,i + 1,&ex_id);
- 803552c: ab06 add r3, sp, #24
- 803552e: 6a66 ldr r6, [r4, #36] ; 0x24
- 8035530: 6960 ldr r0, [r4, #20]
- 8035532: 4651 mov r1, sl
- 8035534: b292 uxth r2, r2
- 8035536: 47b0 blx r6
- (oidret->len)--;
- 8035538: 782b ldrb r3, [r5, #0]
- 803553a: 3b01 subs r3, #1
- oidret->id[oidret->len] = ex_id;
- 803553c: b2db uxtb r3, r3
- 803553e: eb05 0583 add.w r5, r5, r3, lsl #2
- 8035542: 9b06 ldr r3, [sp, #24]
- 8035544: 606b str r3, [r5, #4]
- 8035546: e075 b.n 8035634 <snmp_expand_tree+0x360>
- return (struct mib_node*)en;
- }
- else
- {
- /* (i + 1) == len */
- (oidret->len)--;
- 8035548: 702b strb r3, [r5, #0]
- 803554a: e04a b.n 80355e2 <snmp_expand_tree+0x30e>
- struct nse cur_node;
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("non-leaf node\n"));
- /* non-leaf, store right child ptr and id */
- LWIP_ASSERT("i < 0xff", i < 0xff);
- j = (u8_t)i + 1;
- 803554c: f109 0201 add.w r2, r9, #1
- if (j < len)
- 8035550: b2d2 uxtb r2, r2
- 8035552: 455a cmp r2, fp
- 8035554: d20e bcs.n 8035574 <snmp_expand_tree+0x2a0>
- {
- /* right node is the current external node */
- cur_node.r_ptr = node;
- 8035556: 9407 str r4, [sp, #28]
- en->get_objid(en->addr_inf,ext_level,j,&cur_node.r_id);
- 8035558: 6960 ldr r0, [r4, #20]
- 803555a: 9b05 ldr r3, [sp, #20]
- 803555c: f8cd c004 str.w ip, [sp, #4]
- 8035560: 4651 mov r1, sl
- 8035562: 6a67 ldr r7, [r4, #36] ; 0x24
- 8035564: 47b8 blx r7
- cur_node.r_nl = ext_level + 1;
- 8035566: f8dd c004 ldr.w ip, [sp, #4]
- 803556a: f88d c024 strb.w ip, [sp, #36] ; 0x24
- 803556e: e003 b.n 8035578 <snmp_expand_tree+0x2a4>
- 8035570: 2000c578 .word 0x2000c578
- }
- else
- {
- cur_node.r_ptr = NULL;
- 8035574: 2300 movs r3, #0
- 8035576: 9307 str r3, [sp, #28]
- }
- push_node(&cur_node);
- 8035578: a807 add r0, sp, #28
- 803557a: f7ff fd19 bl 8034fb0 <push_node>
- if (en->ident_cmp(en->addr_inf,ext_level,i,*ident) == 0)
- 803557e: 6a27 ldr r7, [r4, #32]
- 8035580: 6960 ldr r0, [r4, #20]
- 8035582: f8d8 3000 ldr.w r3, [r8]
- 8035586: 4651 mov r1, sl
- 8035588: 464a mov r2, r9
- 803558a: 47b8 blx r7
- 803558c: b920 cbnz r0, 8035598 <snmp_expand_tree+0x2c4>
- {
- ident_len--;
- 803558e: 3e01 subs r6, #1
- 8035590: b2f6 uxtb r6, r6
- ident++;
- 8035592: f108 0804 add.w r8, r8, #4
- 8035596: e000 b.n 803559a <snmp_expand_tree+0x2c6>
- }
- else
- {
- /* external id < *ident */
- ident_len = 0;
- 8035598: 2600 movs r6, #0
- }
- /* proceed to child */
- ext_level++;
- 803559a: f10a 0a01 add.w sl, sl, #1
- 803559e: e011 b.n 80355c4 <snmp_expand_tree+0x2f0>
- }
- }
- else
- {
- /* ident_len == 0, complete with leftmost '.thing' */
- en->get_objid(en->addr_inf,ext_level,0,&ex_id);
- 80355a0: 4651 mov r1, sl
- 80355a2: 4632 mov r2, r6
- 80355a4: ab06 add r3, sp, #24
- 80355a6: 6a67 ldr r7, [r4, #36] ; 0x24
- 80355a8: 6960 ldr r0, [r4, #20]
- 80355aa: 47b8 blx r7
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("left en->objid==%"S32_F"\n",ex_id));
- oidret->id[oidret->len] = ex_id;
- 80355ac: 782b ldrb r3, [r5, #0]
- 80355ae: 9a06 ldr r2, [sp, #24]
- 80355b0: eb05 0183 add.w r1, r5, r3, lsl #2
- (oidret->len)++;
- 80355b4: 3301 adds r3, #1
- else
- {
- /* ident_len == 0, complete with leftmost '.thing' */
- en->get_objid(en->addr_inf,ext_level,0,&ex_id);
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("left en->objid==%"S32_F"\n",ex_id));
- oidret->id[oidret->len] = ex_id;
- 80355b6: 604a str r2, [r1, #4]
- (oidret->len)++;
- 80355b8: 702b strb r3, [r5, #0]
- if ((ext_level + 1) == en->tree_levels)
- 80355ba: 7e23 ldrb r3, [r4, #24]
- 80355bc: f10a 0a01 add.w sl, sl, #1
- 80355c0: 459a cmp sl, r3
- 80355c2: d037 beq.n 8035634 <snmp_expand_tree+0x360>
- return (struct mib_node*)en;
- }
- else
- {
- /* no leaf, proceed to child */
- ext_level++;
- 80355c4: fa5f fa8a uxtb.w sl, sl
- 80355c8: e030 b.n 803562c <snmp_expand_tree+0x358>
- }
- }
- }
- else if(node_type == MIB_NODE_SC)
- 80355ca: 2b01 cmp r3, #1
- 80355cc: d001 beq.n 80355d2 <snmp_expand_tree+0x2fe>
- }
- else
- {
- /* unknown/unhandled node_type */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("expand failed node_type %"U16_F" unkown\n",(u16_t)node_type));
- return NULL;
- 80355ce: 2000 movs r0, #0
- 80355d0: e047 b.n 8035662 <snmp_expand_tree+0x38e>
- {
- mib_scalar_node *sn;
- /* scalar node */
- sn = (mib_scalar_node *)node;
- if (ident_len > 0)
- 80355d2: b936 cbnz r6, 80355e2 <snmp_expand_tree+0x30e>
- climb_tree = 1;
- }
- else
- {
- /* ident_len == 0, complete object identifier */
- oidret->id[oidret->len] = 0;
- 80355d4: 782b ldrb r3, [r5, #0]
- 80355d6: eb05 0283 add.w r2, r5, r3, lsl #2
- (oidret->len)++;
- 80355da: 3301 adds r3, #1
- climb_tree = 1;
- }
- else
- {
- /* ident_len == 0, complete object identifier */
- oidret->id[oidret->len] = 0;
- 80355dc: 6056 str r6, [r2, #4]
- (oidret->len)++;
- 80355de: 702b strb r3, [r5, #0]
- 80355e0: e028 b.n 8035634 <snmp_expand_tree+0x360>
- 80355e2: 4921 ldr r1, [pc, #132] ; (8035668 <snmp_expand_tree+0x394>)
- struct nse child;
- /* find right child ptr */
- child.r_ptr = NULL;
- child.r_id = 0;
- child.r_nl = 0;
- 80355e4: f04f 0a00 mov.w sl, #0
- 80355e8: 780b ldrb r3, [r1, #0]
- pop_node(struct nse* node)
- {
- if (node_stack_cnt > 0)
- {
- node_stack_cnt--;
- *node = node_stack[node_stack_cnt];
- 80355ea: 4920 ldr r1, [pc, #128] ; (803566c <snmp_expand_tree+0x398>)
- {
- struct nse child;
- /* find right child ptr */
- child.r_ptr = NULL;
- child.r_id = 0;
- 80355ec: 4652 mov r2, sl
- if (climb_tree)
- {
- struct nse child;
- /* find right child ptr */
- child.r_ptr = NULL;
- 80355ee: 4654 mov r4, sl
- pop_node(struct nse* node)
- {
- if (node_stack_cnt > 0)
- {
- node_stack_cnt--;
- *node = node_stack[node_stack_cnt];
- 80355f0: 260c movs r6, #12
- /* find right child ptr */
- child.r_ptr = NULL;
- child.r_id = 0;
- child.r_nl = 0;
- while ((node_stack_cnt > 0) && (child.r_ptr == NULL))
- 80355f2: e00b b.n 803560c <snmp_expand_tree+0x338>
- static void
- pop_node(struct nse* node)
- {
- if (node_stack_cnt > 0)
- {
- node_stack_cnt--;
- 80355f4: 3b01 subs r3, #1
- 80355f6: b2db uxtb r3, r3
- *node = node_stack[node_stack_cnt];
- 80355f8: fb06 f203 mul.w r2, r6, r3
- 80355fc: 1888 adds r0, r1, r2
- 80355fe: 588c ldr r4, [r1, r2]
- 8035600: f890 a008 ldrb.w sl, [r0, #8]
- 8035604: 6842 ldr r2, [r0, #4]
- child.r_nl = 0;
- while ((node_stack_cnt > 0) && (child.r_ptr == NULL))
- {
- pop_node(&child);
- /* trim returned oid */
- (oidret->len)--;
- 8035606: 7828 ldrb r0, [r5, #0]
- 8035608: 3801 subs r0, #1
- 803560a: 7028 strb r0, [r5, #0]
- /* find right child ptr */
- child.r_ptr = NULL;
- child.r_id = 0;
- child.r_nl = 0;
- while ((node_stack_cnt > 0) && (child.r_ptr == NULL))
- 803560c: b91b cbnz r3, 8035616 <snmp_expand_tree+0x342>
- 803560e: 4f16 ldr r7, [pc, #88] ; (8035668 <snmp_expand_tree+0x394>)
- 8035610: 703b strb r3, [r7, #0]
- {
- pop_node(&child);
- /* trim returned oid */
- (oidret->len)--;
- }
- if (child.r_ptr != NULL)
- 8035612: b924 cbnz r4, 803561e <snmp_expand_tree+0x34a>
- 8035614: e7db b.n 80355ce <snmp_expand_tree+0x2fa>
- /* find right child ptr */
- child.r_ptr = NULL;
- child.r_id = 0;
- child.r_nl = 0;
- while ((node_stack_cnt > 0) && (child.r_ptr == NULL))
- 8035616: 2c00 cmp r4, #0
- 8035618: d0ec beq.n 80355f4 <snmp_expand_tree+0x320>
- 803561a: 4913 ldr r1, [pc, #76] ; (8035668 <snmp_expand_tree+0x394>)
- 803561c: 700b strb r3, [r1, #0]
- }
- if (child.r_ptr != NULL)
- {
- /* incoming ident is useless beyond this point */
- ident_len = 0;
- oidret->id[oidret->len] = child.r_id;
- 803561e: 782b ldrb r3, [r5, #0]
- 8035620: eb05 0183 add.w r1, r5, r3, lsl #2
- oidret->len++;
- 8035624: 3301 adds r3, #1
- }
- if (child.r_ptr != NULL)
- {
- /* incoming ident is useless beyond this point */
- ident_len = 0;
- oidret->id[oidret->len] = child.r_id;
- 8035626: 604a str r2, [r1, #4]
- oidret->len++;
- 8035628: 702b strb r3, [r5, #0]
- (oidret->len)--;
- }
- if (child.r_ptr != NULL)
- {
- /* incoming ident is useless beyond this point */
- ident_len = 0;
- 803562a: 2600 movs r6, #0
- u8_t node_type, ext_level, climb_tree;
- ext_level = 0;
- /* reset node stack */
- node_stack_cnt = 0;
- while (node != NULL)
- 803562c: 2c00 cmp r4, #0
- 803562e: f47f ae60 bne.w 80352f2 <snmp_expand_tree+0x1e>
- 8035632: e7cc b.n 80355ce <snmp_expand_tree+0x2fa>
- if (jn != NULL)
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("left jn->objid==%"S32_F"\n",jn->objid));
- oidret->id[oidret->len] = jn->objid;
- (oidret->len)++;
- if (jn->nptr == NULL)
- 8035634: 4620 mov r0, r4
- 8035636: e014 b.n 8035662 <snmp_expand_tree+0x38e>
- jn = jn->next;
- }
- if (jn != NULL)
- {
- cur_node.r_ptr = jn->nptr;
- cur_node.r_id = jn->objid;
- 8035638: 68a3 ldr r3, [r4, #8]
- {
- jn = jn->next;
- }
- if (jn != NULL)
- {
- cur_node.r_ptr = jn->nptr;
- 803563a: f8cd 901c str.w r9, [sp, #28]
- cur_node.r_id = jn->objid;
- 803563e: 9308 str r3, [sp, #32]
- cur_node.r_nl = 0;
- 8035640: f88d 0024 strb.w r0, [sp, #36] ; 0x24
- 8035644: e71e b.n 8035484 <snmp_expand_tree+0x1b0>
- }
- else
- {
- cur_node.r_ptr = NULL;
- 8035646: 9407 str r4, [sp, #28]
- 8035648: e71c b.n 8035484 <snmp_expand_tree+0x1b0>
- jn = jn->next;
- }
- if (jn != NULL)
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("left jn->objid==%"S32_F"\n",jn->objid));
- oidret->id[oidret->len] = jn->objid;
- 803564a: 782b ldrb r3, [r5, #0]
- 803564c: 68ba ldr r2, [r7, #8]
- 803564e: eb05 0183 add.w r1, r5, r3, lsl #2
- (oidret->len)++;
- 8035652: 3301 adds r3, #1
- 8035654: 702b strb r3, [r5, #0]
- if (jn->nptr == NULL)
- 8035656: 68fb ldr r3, [r7, #12]
- jn = jn->next;
- }
- if (jn != NULL)
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("left jn->objid==%"S32_F"\n",jn->objid));
- oidret->id[oidret->len] = jn->objid;
- 8035658: 604a str r2, [r1, #4]
- (oidret->len)++;
- if (jn->nptr == NULL)
- 803565a: 2b00 cmp r3, #0
- 803565c: d0ea beq.n 8035634 <snmp_expand_tree+0x360>
- (oidret->len)--;
- }
- if (child.r_ptr != NULL)
- {
- /* incoming ident is useless beyond this point */
- ident_len = 0;
- 803565e: 461c mov r4, r3
- 8035660: e7e4 b.n 803562c <snmp_expand_tree+0x358>
- }
- }
- /* done, found nothing */
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("expand failed node==%p\n",(void*)node));
- return NULL;
- }
- 8035662: b00b add sp, #44 ; 0x2c
- 8035664: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8035668: 2000c578 .word 0x2000c578
- 803566c: 2000c57c .word 0x2000c57c
- 08035670 <snmp_iso_prefix_tst>:
- * @return 1 if it matches, 0 otherwise
- */
- u8_t
- snmp_iso_prefix_tst(u8_t ident_len, s32_t *ident)
- {
- if ((ident_len > 3) &&
- 8035670: 2803 cmp r0, #3
- 8035672: d90d bls.n 8035690 <snmp_iso_prefix_tst+0x20>
- 8035674: 680b ldr r3, [r1, #0]
- 8035676: 2b01 cmp r3, #1
- 8035678: d10a bne.n 8035690 <snmp_iso_prefix_tst+0x20>
- (ident[0] == 1) && (ident[1] == 3) &&
- 803567a: 684b ldr r3, [r1, #4]
- 803567c: 2b03 cmp r3, #3
- 803567e: d107 bne.n 8035690 <snmp_iso_prefix_tst+0x20>
- 8035680: 688b ldr r3, [r1, #8]
- 8035682: 2b06 cmp r3, #6
- 8035684: d104 bne.n 8035690 <snmp_iso_prefix_tst+0x20>
- (ident[2] == 6) && (ident[3] == 1))
- 8035686: 68c8 ldr r0, [r1, #12]
- {
- return 1;
- 8035688: 1e43 subs r3, r0, #1
- 803568a: 4258 negs r0, r3
- 803568c: 4158 adcs r0, r3
- 803568e: 4770 bx lr
- }
- else
- {
- return 0;
- 8035690: 2000 movs r0, #0
- }
- }
- 8035692: 4770 bx lr
- 08035694 <snmp_iso_prefix_expand>:
- i = 0;
- prefix_ptr = &prefix[0];
- ret_ptr = &oidret->id[0];
- ident_len = ((ident_len < 4)?ident_len:4);
- while ((i < ident_len) && ((*ident) <= (*prefix_ptr)))
- 8035694: 2300 movs r3, #0
- *
- * @note ident_len 0 is allowed, expanding to the first known object id!!
- */
- u8_t
- snmp_iso_prefix_expand(u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret)
- {
- 8035696: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- s32_t *ret_ptr;
- u8_t i;
- i = 0;
- prefix_ptr = &prefix[0];
- ret_ptr = &oidret->id[0];
- 803569a: 1d15 adds r5, r2, #4
- ident_len = ((ident_len < 4)?ident_len:4);
- 803569c: 2804 cmp r0, #4
- 803569e: bf34 ite cc
- 80356a0: 4680 movcc r8, r0
- 80356a2: f04f 0804 movcs.w r8, #4
- {
- const s32_t *prefix_ptr;
- s32_t *ret_ptr;
- u8_t i;
- i = 0;
- 80356a6: 461c mov r4, r3
- * @return 1 if it matches, 0 otherwise
- *
- * @note ident_len 0 is allowed, expanding to the first known object id!!
- */
- u8_t
- snmp_iso_prefix_expand(u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret)
- 80356a8: 4f10 ldr r7, [pc, #64] ; (80356ec <snmp_iso_prefix_expand+0x58>)
- i = 0;
- prefix_ptr = &prefix[0];
- ret_ptr = &oidret->id[0];
- ident_len = ((ident_len < 4)?ident_len:4);
- while ((i < ident_len) && ((*ident) <= (*prefix_ptr)))
- 80356aa: e003 b.n 80356b4 <snmp_iso_prefix_expand+0x20>
- {
- *ret_ptr++ = *prefix_ptr++;
- ident++;
- i++;
- 80356ac: 3401 adds r4, #1
- prefix_ptr = &prefix[0];
- ret_ptr = &oidret->id[0];
- ident_len = ((ident_len < 4)?ident_len:4);
- while ((i < ident_len) && ((*ident) <= (*prefix_ptr)))
- {
- *ret_ptr++ = *prefix_ptr++;
- 80356ae: 50ee str r6, [r5, r3]
- ident++;
- i++;
- 80356b0: b2e4 uxtb r4, r4
- 80356b2: 3304 adds r3, #4
- i = 0;
- prefix_ptr = &prefix[0];
- ret_ptr = &oidret->id[0];
- ident_len = ((ident_len < 4)?ident_len:4);
- while ((i < ident_len) && ((*ident) <= (*prefix_ptr)))
- 80356b4: 4544 cmp r4, r8
- * @return 1 if it matches, 0 otherwise
- *
- * @note ident_len 0 is allowed, expanding to the first known object id!!
- */
- u8_t
- snmp_iso_prefix_expand(u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret)
- 80356b6: eb05 0c03 add.w ip, r5, r3
- 80356ba: eb07 0603 add.w r6, r7, r3
- i = 0;
- prefix_ptr = &prefix[0];
- ret_ptr = &oidret->id[0];
- ident_len = ((ident_len < 4)?ident_len:4);
- while ((i < ident_len) && ((*ident) <= (*prefix_ptr)))
- 80356be: d101 bne.n 80356c4 <snmp_iso_prefix_expand+0x30>
- 80356c0: 2300 movs r3, #0
- 80356c2: e00c b.n 80356de <snmp_iso_prefix_expand+0x4a>
- 80356c4: 59de ldr r6, [r3, r7]
- 80356c6: 58c8 ldr r0, [r1, r3]
- 80356c8: 42b0 cmp r0, r6
- 80356ca: ddef ble.n 80356ac <snmp_iso_prefix_expand+0x18>
- return 1;
- }
- else
- {
- /* i != ident_len */
- return 0;
- 80356cc: 2000 movs r0, #0
- 80356ce: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- if (i == ident_len)
- {
- /* match, complete missing bits */
- while (i < 4)
- {
- *ret_ptr++ = *prefix_ptr++;
- 80356d2: 58f1 ldr r1, [r6, r3]
- i++;
- 80356d4: 3401 adds r4, #1
- if (i == ident_len)
- {
- /* match, complete missing bits */
- while (i < 4)
- {
- *ret_ptr++ = *prefix_ptr++;
- 80356d6: f84c 1003 str.w r1, [ip, r3]
- i++;
- 80356da: b2e4 uxtb r4, r4
- 80356dc: 3304 adds r3, #4
- i++;
- }
- if (i == ident_len)
- {
- /* match, complete missing bits */
- while (i < 4)
- 80356de: 2c03 cmp r4, #3
- 80356e0: d9f7 bls.n 80356d2 <snmp_iso_prefix_expand+0x3e>
- {
- *ret_ptr++ = *prefix_ptr++;
- i++;
- }
- oidret->len = i;
- 80356e2: 7014 strb r4, [r2, #0]
- return 1;
- 80356e4: 2001 movs r0, #1
- else
- {
- /* i != ident_len */
- return 0;
- }
- }
- 80356e6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 80356ea: bf00 nop
- 80356ec: 0804591c .word 0x0804591c
- 080356f0 <snmp_init>:
- * Starts SNMP Agent.
- * Allocates UDP pcb and binds it to IP_ADDR_ANY port 161.
- */
- void
- snmp_init(void)
- {
- 80356f0: b510 push {r4, lr}
- struct snmp_msg_pstat *msg_ps;
- u8_t i;
- snmp1_pcb = udp_new();
- 80356f2: f7fd fa15 bl 8032b20 <udp_new>
- 80356f6: 4c0b ldr r4, [pc, #44] ; (8035724 <snmp_init+0x34>)
- 80356f8: 6020 str r0, [r4, #0]
- if (snmp1_pcb != NULL)
- 80356fa: b140 cbz r0, 803570e <snmp_init+0x1e>
- {
- udp_recv(snmp1_pcb, snmp_recv, (void *)SNMP_IN_PORT);
- 80356fc: 490a ldr r1, [pc, #40] ; (8035728 <snmp_init+0x38>)
- 80356fe: 22a1 movs r2, #161 ; 0xa1
- 8035700: f7fd f9ee bl 8032ae0 <udp_recv>
- udp_bind(snmp1_pcb, IP_ADDR_ANY, SNMP_IN_PORT);
- 8035704: 6820 ldr r0, [r4, #0]
- 8035706: 4909 ldr r1, [pc, #36] ; (803572c <snmp_init+0x3c>)
- 8035708: 22a1 movs r2, #161 ; 0xa1
- 803570a: f7fd f8f1 bl 80328f0 <udp_bind>
- }
- msg_ps = &msg_input_list[0];
- for (i=0; i<SNMP_CONCURRENT_REQUESTS; i++)
- {
- msg_ps->state = SNMP_MSG_EMPTY;
- 803570e: 4b08 ldr r3, [pc, #32] ; (8035730 <snmp_init+0x40>)
- 8035710: 2200 movs r2, #0
- 8035712: f883 205a strb.w r2, [r3, #90] ; 0x5a
- msg_ps->error_index = 0;
- 8035716: 615a str r2, [r3, #20]
- msg_ps->error_status = SNMP_ES_NOERROR;
- 8035718: 611a str r2, [r3, #16]
- msg_ps++;
- }
- trap_msg.pcb = snmp1_pcb;
- 803571a: 4b02 ldr r3, [pc, #8] ; (8035724 <snmp_init+0x34>)
- 803571c: 681a ldr r2, [r3, #0]
- 803571e: 4b05 ldr r3, [pc, #20] ; (8035734 <snmp_init+0x44>)
- 8035720: 601a str r2, [r3, #0]
- 8035722: bd10 pop {r4, pc}
- 8035724: 2000f6ec .word 0x2000f6ec
- 8035728: 0803629d .word 0x0803629d
- 803572c: 08045008 .word 0x08045008
- 8035730: 2000f6f0 .word 0x2000f6f0
- 8035734: 2000f828 .word 0x2000f828
- 08035738 <snmp_varbind_alloc>:
- return ERR_OK;
- }
- struct snmp_varbind*
- snmp_varbind_alloc(struct snmp_obj_id *oid, u8_t type, u8_t len)
- {
- 8035738: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- 803573c: 4680 mov r8, r0
- struct snmp_varbind *vb;
- vb = (struct snmp_varbind *)memp_malloc(MEMP_SNMP_VARBIND);
- 803573e: 200c movs r0, #12
- return ERR_OK;
- }
- struct snmp_varbind*
- snmp_varbind_alloc(struct snmp_obj_id *oid, u8_t type, u8_t len)
- {
- 8035740: 4689 mov r9, r1
- 8035742: 4617 mov r7, r2
- struct snmp_varbind *vb;
- vb = (struct snmp_varbind *)memp_malloc(MEMP_SNMP_VARBIND);
- 8035744: f7fa fa42 bl 802fbcc <memp_malloc>
- if (vb != NULL)
- 8035748: 4604 mov r4, r0
- 803574a: 2800 cmp r0, #0
- 803574c: d032 beq.n 80357b4 <snmp_varbind_alloc+0x7c>
- {
- u8_t i;
- vb->next = NULL;
- 803574e: 2300 movs r3, #0
- 8035750: 6003 str r3, [r0, #0]
- vb->prev = NULL;
- 8035752: 6043 str r3, [r0, #4]
- i = oid->len;
- 8035754: f898 5000 ldrb.w r5, [r8]
- vb->ident_len = i;
- 8035758: 7205 strb r5, [r0, #8]
- if (i > 0)
- 803575a: b1ad cbz r5, 8035788 <snmp_varbind_alloc+0x50>
- {
- LWIP_ASSERT("SNMP_MAX_TREE_DEPTH is configured too low", i <= SNMP_MAX_TREE_DEPTH);
- /* allocate array of s32_t for our object identifier */
- vb->ident = (s32_t*)memp_malloc(MEMP_SNMP_VALUE);
- 803575c: 200d movs r0, #13
- 803575e: f7fa fa35 bl 802fbcc <memp_malloc>
- 8035762: 4606 mov r6, r0
- 8035764: 60e0 str r0, [r4, #12]
- if (vb->ident == NULL)
- 8035766: b928 cbnz r0, 8035774 <snmp_varbind_alloc+0x3c>
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_varbind_alloc: couldn't allocate ident value space\n"));
- memp_free(MEMP_SNMP_VARBIND, vb);
- 8035768: 4621 mov r1, r4
- 803576a: 200c movs r0, #12
- 803576c: f7fa fa44 bl 802fbf8 <memp_free>
- return NULL;
- 8035770: 4634 mov r4, r6
- 8035772: e01f b.n 80357b4 <snmp_varbind_alloc+0x7c>
- }
- while(i > 0)
- {
- i--;
- 8035774: 3d01 subs r5, #1
- 8035776: b2ed uxtb r5, r5
- vb->ident[i] = oid->id[i];
- 8035778: eb08 0385 add.w r3, r8, r5, lsl #2
- 803577c: 685b ldr r3, [r3, #4]
- 803577e: f846 3025 str.w r3, [r6, r5, lsl #2]
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_varbind_alloc: couldn't allocate ident value space\n"));
- memp_free(MEMP_SNMP_VARBIND, vb);
- return NULL;
- }
- while(i > 0)
- 8035782: 2d00 cmp r5, #0
- 8035784: d1f6 bne.n 8035774 <snmp_varbind_alloc+0x3c>
- 8035786: e000 b.n 803578a <snmp_varbind_alloc+0x52>
- }
- }
- else
- {
- /* i == 0, pass zero length object identifier */
- vb->ident = NULL;
- 8035788: 60c5 str r5, [r0, #12]
- }
- vb->value_type = type;
- 803578a: f884 9010 strb.w r9, [r4, #16]
- vb->value_len = len;
- 803578e: 7467 strb r7, [r4, #17]
- if (len > 0)
- 8035790: b17f cbz r7, 80357b2 <snmp_varbind_alloc+0x7a>
- {
- LWIP_ASSERT("SNMP_MAX_OCTET_STRING_LEN is configured too low", vb->value_len <= SNMP_MAX_VALUE_SIZE);
- /* allocate raw bytes for our object value */
- vb->value = memp_malloc(MEMP_SNMP_VALUE);
- 8035792: 200d movs r0, #13
- 8035794: f7fa fa1a bl 802fbcc <memp_malloc>
- 8035798: 6160 str r0, [r4, #20]
- if (vb->value == NULL)
- 803579a: b958 cbnz r0, 80357b4 <snmp_varbind_alloc+0x7c>
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_varbind_alloc: couldn't allocate value space\n"));
- if (vb->ident != NULL)
- 803579c: 68e1 ldr r1, [r4, #12]
- 803579e: b111 cbz r1, 80357a6 <snmp_varbind_alloc+0x6e>
- {
- memp_free(MEMP_SNMP_VALUE, vb->ident);
- 80357a0: 200d movs r0, #13
- 80357a2: f7fa fa29 bl 802fbf8 <memp_free>
- }
- memp_free(MEMP_SNMP_VARBIND, vb);
- 80357a6: 4621 mov r1, r4
- 80357a8: 200c movs r0, #12
- 80357aa: f7fa fa25 bl 802fbf8 <memp_free>
- return NULL;
- 80357ae: 2400 movs r4, #0
- 80357b0: e000 b.n 80357b4 <snmp_varbind_alloc+0x7c>
- }
- }
- else
- {
- /* ASN1_NUL type, or zero length ASN1_OC_STR */
- vb->value = NULL;
- 80357b2: 6167 str r7, [r4, #20]
- else
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_varbind_alloc: couldn't allocate varbind space\n"));
- }
- return vb;
- }
- 80357b4: 4620 mov r0, r4
- 80357b6: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
- 080357ba <snmp_varbind_free>:
- void
- snmp_varbind_free(struct snmp_varbind *vb)
- {
- if (vb->value != NULL )
- 80357ba: 6941 ldr r1, [r0, #20]
- return vb;
- }
- void
- snmp_varbind_free(struct snmp_varbind *vb)
- {
- 80357bc: b510 push {r4, lr}
- 80357be: 4604 mov r4, r0
- if (vb->value != NULL )
- 80357c0: b111 cbz r1, 80357c8 <snmp_varbind_free+0xe>
- {
- memp_free(MEMP_SNMP_VALUE, vb->value);
- 80357c2: 200d movs r0, #13
- 80357c4: f7fa fa18 bl 802fbf8 <memp_free>
- }
- if (vb->ident != NULL )
- 80357c8: 68e1 ldr r1, [r4, #12]
- 80357ca: b111 cbz r1, 80357d2 <snmp_varbind_free+0x18>
- {
- memp_free(MEMP_SNMP_VALUE, vb->ident);
- 80357cc: 200d movs r0, #13
- 80357ce: f7fa fa13 bl 802fbf8 <memp_free>
- }
- memp_free(MEMP_SNMP_VARBIND, vb);
- 80357d2: 200c movs r0, #12
- 80357d4: 4621 mov r1, r4
- }
- 80357d6: e8bd 4010 ldmia.w sp!, {r4, lr}
- }
- if (vb->ident != NULL )
- {
- memp_free(MEMP_SNMP_VALUE, vb->ident);
- }
- memp_free(MEMP_SNMP_VARBIND, vb);
- 80357da: f7fa ba0d b.w 802fbf8 <memp_free>
- 080357de <snmp_varbind_list_free>:
- }
- void
- snmp_varbind_list_free(struct snmp_varbind_root *root)
- {
- 80357de: b538 push {r3, r4, r5, lr}
- 80357e0: 4604 mov r4, r0
- struct snmp_varbind *vb, *prev;
- vb = root->tail;
- 80357e2: 6840 ldr r0, [r0, #4]
- while ( vb != NULL )
- 80357e4: e003 b.n 80357ee <snmp_varbind_list_free+0x10>
- {
- prev = vb->prev;
- 80357e6: 6845 ldr r5, [r0, #4]
- snmp_varbind_free(vb);
- 80357e8: f7ff ffe7 bl 80357ba <snmp_varbind_free>
- vb = prev;
- 80357ec: 4628 mov r0, r5
- snmp_varbind_list_free(struct snmp_varbind_root *root)
- {
- struct snmp_varbind *vb, *prev;
- vb = root->tail;
- while ( vb != NULL )
- 80357ee: 2800 cmp r0, #0
- 80357f0: d1f9 bne.n 80357e6 <snmp_varbind_list_free+0x8>
- {
- prev = vb->prev;
- snmp_varbind_free(vb);
- vb = prev;
- }
- root->count = 0;
- 80357f2: 7220 strb r0, [r4, #8]
- root->head = NULL;
- 80357f4: 6020 str r0, [r4, #0]
- root->tail = NULL;
- 80357f6: 6060 str r0, [r4, #4]
- 80357f8: bd38 pop {r3, r4, r5, pc}
- 080357fa <snmp_error_response>:
- //snmp_coldstart_trap();
- }
- static void
- snmp_error_response(struct snmp_msg_pstat *msg_ps, u8_t error)
- {
- 80357fa: b570 push {r4, r5, r6, lr}
- 80357fc: 4604 mov r4, r0
- /* move names back from outvb to invb */
- int v;
- struct snmp_varbind *vbi = msg_ps->invb.head;
- struct snmp_varbind *vbo = msg_ps->outvb.head;
- for (v=0; v<msg_ps->vb_idx; v++) {
- 80357fe: 2200 movs r2, #0
- //snmp_coldstart_trap();
- }
- static void
- snmp_error_response(struct snmp_msg_pstat *msg_ps, u8_t error)
- {
- 8035800: 460e mov r6, r1
- /* move names back from outvb to invb */
- int v;
- struct snmp_varbind *vbi = msg_ps->invb.head;
- 8035802: f8d0 0100 ldr.w r0, [r0, #256] ; 0x100
- struct snmp_varbind *vbo = msg_ps->outvb.head;
- 8035806: f8d4 310c ldr.w r3, [r4, #268] ; 0x10c
- for (v=0; v<msg_ps->vb_idx; v++) {
- vbi->ident_len = vbo->ident_len;
- vbo->ident_len = 0;
- 803580a: 4611 mov r1, r2
- {
- /* move names back from outvb to invb */
- int v;
- struct snmp_varbind *vbi = msg_ps->invb.head;
- struct snmp_varbind *vbo = msg_ps->outvb.head;
- for (v=0; v<msg_ps->vb_idx; v++) {
- 803580c: e008 b.n 8035820 <snmp_error_response+0x26>
- vbi->ident_len = vbo->ident_len;
- 803580e: 7a1d ldrb r5, [r3, #8]
- 8035810: 7205 strb r5, [r0, #8]
- vbo->ident_len = 0;
- vbi->ident = vbo->ident;
- 8035812: 68dd ldr r5, [r3, #12]
- int v;
- struct snmp_varbind *vbi = msg_ps->invb.head;
- struct snmp_varbind *vbo = msg_ps->outvb.head;
- for (v=0; v<msg_ps->vb_idx; v++) {
- vbi->ident_len = vbo->ident_len;
- vbo->ident_len = 0;
- 8035814: 7219 strb r1, [r3, #8]
- vbi->ident = vbo->ident;
- 8035816: 60c5 str r5, [r0, #12]
- vbo->ident = NULL;
- 8035818: 60d9 str r1, [r3, #12]
- vbi = vbi->next;
- 803581a: 6800 ldr r0, [r0, #0]
- vbo = vbo->next;
- 803581c: 681b ldr r3, [r3, #0]
- {
- /* move names back from outvb to invb */
- int v;
- struct snmp_varbind *vbi = msg_ps->invb.head;
- struct snmp_varbind *vbo = msg_ps->outvb.head;
- for (v=0; v<msg_ps->vb_idx; v++) {
- 803581e: 3201 adds r2, #1
- 8035820: f894 50f8 ldrb.w r5, [r4, #248] ; 0xf8
- 8035824: 42aa cmp r2, r5
- 8035826: dbf2 blt.n 803580e <snmp_error_response+0x14>
- vbo->ident = NULL;
- vbi = vbi->next;
- vbo = vbo->next;
- }
- /* free outvb */
- snmp_varbind_list_free(&msg_ps->outvb);
- 8035828: f504 7586 add.w r5, r4, #268 ; 0x10c
- 803582c: 4628 mov r0, r5
- 803582e: f7ff ffd6 bl 80357de <snmp_varbind_list_free>
- /* we send invb back */
- msg_ps->outvb = msg_ps->invb;
- 8035832: f504 7380 add.w r3, r4, #256 ; 0x100
- 8035836: e893 0007 ldmia.w r3, {r0, r1, r2}
- msg_ps->invb.head = NULL;
- 803583a: 2300 movs r3, #0
- msg_ps->invb.tail = NULL;
- msg_ps->invb.count = 0;
- msg_ps->error_status = error;
- /* error index must be 0 for error too big */
- msg_ps->error_index = (error != SNMP_ES_TOOBIG) ? (1 + msg_ps->vb_idx) : 0;
- 803583c: 2e01 cmp r6, #1
- }
- /* free outvb */
- snmp_varbind_list_free(&msg_ps->outvb);
- /* we send invb back */
- msg_ps->outvb = msg_ps->invb;
- msg_ps->invb.head = NULL;
- 803583e: f8c4 3100 str.w r3, [r4, #256] ; 0x100
- msg_ps->invb.tail = NULL;
- 8035842: f8c4 3104 str.w r3, [r4, #260] ; 0x104
- msg_ps->invb.count = 0;
- 8035846: f884 3108 strb.w r3, [r4, #264] ; 0x108
- msg_ps->error_status = error;
- /* error index must be 0 for error too big */
- msg_ps->error_index = (error != SNMP_ES_TOOBIG) ? (1 + msg_ps->vb_idx) : 0;
- 803584a: bf18 it ne
- 803584c: f894 30f8 ldrbne.w r3, [r4, #248] ; 0xf8
- /* we send invb back */
- msg_ps->outvb = msg_ps->invb;
- msg_ps->invb.head = NULL;
- msg_ps->invb.tail = NULL;
- msg_ps->invb.count = 0;
- msg_ps->error_status = error;
- 8035850: 6126 str r6, [r4, #16]
- /* error index must be 0 for error too big */
- msg_ps->error_index = (error != SNMP_ES_TOOBIG) ? (1 + msg_ps->vb_idx) : 0;
- 8035852: bf18 it ne
- 8035854: 3301 addne r3, #1
- vbo = vbo->next;
- }
- /* free outvb */
- snmp_varbind_list_free(&msg_ps->outvb);
- /* we send invb back */
- msg_ps->outvb = msg_ps->invb;
- 8035856: e885 0007 stmia.w r5, {r0, r1, r2}
- msg_ps->invb.head = NULL;
- msg_ps->invb.tail = NULL;
- msg_ps->invb.count = 0;
- msg_ps->error_status = error;
- /* error index must be 0 for error too big */
- msg_ps->error_index = (error != SNMP_ES_TOOBIG) ? (1 + msg_ps->vb_idx) : 0;
- 803585a: 6163 str r3, [r4, #20]
- snmp_send_response(msg_ps);
- 803585c: 4620 mov r0, r4
- 803585e: f001 f879 bl 8036954 <snmp_send_response>
- snmp_varbind_list_free(&msg_ps->outvb);
- 8035862: 4628 mov r0, r5
- 8035864: f7ff ffbb bl 80357de <snmp_varbind_list_free>
- msg_ps->state = SNMP_MSG_EMPTY;
- 8035868: 2300 movs r3, #0
- 803586a: f884 305a strb.w r3, [r4, #90] ; 0x5a
- 803586e: bd70 pop {r4, r5, r6, pc}
- 08035870 <snmp_ok_response>:
- }
- static void
- snmp_ok_response(struct snmp_msg_pstat *msg_ps)
- {
- 8035870: b510 push {r4, lr}
- 8035872: 4604 mov r4, r0
- err_t err_ret;
- err_ret = snmp_send_response(msg_ps);
- 8035874: f001 f86e bl 8036954 <snmp_send_response>
- else
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event = %"S32_F"\n",msg_ps->error_status));
- }
- /* free varbinds (if available) */
- snmp_varbind_list_free(&msg_ps->invb);
- 8035878: f504 7080 add.w r0, r4, #256 ; 0x100
- 803587c: f7ff ffaf bl 80357de <snmp_varbind_list_free>
- snmp_varbind_list_free(&msg_ps->outvb);
- 8035880: f504 7086 add.w r0, r4, #268 ; 0x10c
- 8035884: f7ff ffab bl 80357de <snmp_varbind_list_free>
- msg_ps->state = SNMP_MSG_EMPTY;
- 8035888: 2300 movs r3, #0
- 803588a: f884 305a strb.w r3, [r4, #90] ; 0x5a
- 803588e: bd10 pop {r4, pc}
- 08035890 <snmp_varbind_tail_add>:
- }
- void
- snmp_varbind_tail_add(struct snmp_varbind_root *root, struct snmp_varbind *vb)
- {
- if (root->count == 0)
- 8035890: 7a03 ldrb r3, [r0, #8]
- 8035892: b90b cbnz r3, 8035898 <snmp_varbind_tail_add+0x8>
- {
- /* add first varbind to list */
- root->head = vb;
- 8035894: 6001 str r1, [r0, #0]
- 8035896: e002 b.n 803589e <snmp_varbind_tail_add+0xe>
- root->tail = vb;
- }
- else
- {
- /* add nth varbind to list tail */
- root->tail->next = vb;
- 8035898: 6843 ldr r3, [r0, #4]
- 803589a: 6019 str r1, [r3, #0]
- vb->prev = root->tail;
- 803589c: 604b str r3, [r1, #4]
- root->tail = vb;
- }
- root->count += 1;
- 803589e: 7a03 ldrb r3, [r0, #8]
- else
- {
- /* add nth varbind to list tail */
- root->tail->next = vb;
- vb->prev = root->tail;
- root->tail = vb;
- 80358a0: 6041 str r1, [r0, #4]
- }
- root->count += 1;
- 80358a2: 3301 adds r3, #1
- 80358a4: 7203 strb r3, [r0, #8]
- 80358a6: 4770 bx lr
- 080358a8 <snmp_msg_event>:
- *
- * @param request_id identifies requests from 0 to (SNMP_CONCURRENT_REQUESTS-1)
- */
- void
- snmp_msg_event(u8_t request_id)
- {
- 80358a8: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- struct snmp_msg_pstat *msg_ps;
- if (request_id < SNMP_CONCURRENT_REQUESTS)
- 80358ac: 4605 mov r5, r0
- *
- * @param request_id identifies requests from 0 to (SNMP_CONCURRENT_REQUESTS-1)
- */
- void
- snmp_msg_event(u8_t request_id)
- {
- 80358ae: b0a7 sub sp, #156 ; 0x9c
- struct snmp_msg_pstat *msg_ps;
- if (request_id < SNMP_CONCURRENT_REQUESTS)
- 80358b0: 2800 cmp r0, #0
- 80358b2: f040 8390 bne.w 8035fd6 <snmp_msg_event+0x72e>
- {
- msg_ps = &msg_input_list[request_id];
- if (msg_ps->rt == SNMP_ASN1_PDU_GET_NEXT_REQ)
- 80358b6: 4cb2 ldr r4, [pc, #712] ; (8035b80 <snmp_msg_event+0x2d8>)
- 80358b8: 7aa6 ldrb r6, [r4, #10]
- 80358ba: 2e01 cmp r6, #1
- 80358bc: f040 80d4 bne.w 8035a68 <snmp_msg_event+0x1c0>
- static void
- snmp_msg_getnext_event(u8_t request_id, struct snmp_msg_pstat *msg_ps)
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_getnext_event: msg_ps->state==%"U16_F"\n",(u16_t)msg_ps->state));
- if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_OBJDEF)
- 80358c0: f894 305a ldrb.w r3, [r4, #90] ; 0x5a
- 80358c4: 2b07 cmp r3, #7
- 80358c6: d125 bne.n 8035914 <snmp_msg_event+0x6c>
- /* get_object_def() answer*/
- en = msg_ps->ext_mib_node;
- /* translate answer into a known lifeform */
- en->get_object_def_a(request_id, 1, &msg_ps->ext_oid.id[msg_ps->ext_oid.len - 1], &msg_ps->ext_object_def);
- 80358c8: f894 2074 ldrb.w r2, [r4, #116] ; 0x74
- if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_OBJDEF)
- {
- struct mib_external_node *en;
- /* get_object_def() answer*/
- en = msg_ps->ext_mib_node;
- 80358cc: f8d4 805c ldr.w r8, [r4, #92] ; 0x5c
- /* translate answer into a known lifeform */
- en->get_object_def_a(request_id, 1, &msg_ps->ext_oid.id[msg_ps->ext_oid.len - 1], &msg_ps->ext_object_def);
- 80358d0: eb04 0282 add.w r2, r4, r2, lsl #2
- 80358d4: 4631 mov r1, r6
- 80358d6: 3274 adds r2, #116 ; 0x74
- 80358d8: f104 0368 add.w r3, r4, #104 ; 0x68
- 80358dc: f8d8 7038 ldr.w r7, [r8, #56] ; 0x38
- 80358e0: 47b8 blx r7
- if (msg_ps->ext_object_def.instance != MIB_OBJECT_NONE)
- 80358e2: f894 0068 ldrb.w r0, [r4, #104] ; 0x68
- 80358e6: b148 cbz r0, 80358fc <snmp_msg_event+0x54>
- {
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_VALUE;
- 80358e8: 2308 movs r3, #8
- 80358ea: f884 305a strb.w r3, [r4, #90] ; 0x5a
- en->get_value_q(request_id, &msg_ps->ext_object_def);
- 80358ee: f8d8 302c ldr.w r3, [r8, #44] ; 0x2c
- 80358f2: 4628 mov r0, r5
- 80358f4: f104 0168 add.w r1, r4, #104 ; 0x68
- 80358f8: 4798 blx r3
- 80358fa: e0a6 b.n 8035a4a <snmp_msg_event+0x1a2>
- }
- else
- {
- en->get_object_def_pc(request_id, 1, &msg_ps->ext_oid.id[msg_ps->ext_oid.len - 1]);
- 80358fc: f894 2074 ldrb.w r2, [r4, #116] ; 0x74
- 8035900: f8d8 3048 ldr.w r3, [r8, #72] ; 0x48
- 8035904: eb04 0282 add.w r2, r4, r2, lsl #2
- 8035908: 4631 mov r1, r6
- 803590a: 3274 adds r2, #116 ; 0x74
- 803590c: 4798 blx r3
- /* search failed, object id points to unknown object (nosuchname) */
- snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME);
- 803590e: 4620 mov r0, r4
- 8035910: 2102 movs r1, #2
- 8035912: e02a b.n 803596a <snmp_msg_event+0xc2>
- }
- }
- else if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_VALUE)
- 8035914: 2b08 cmp r3, #8
- 8035916: f040 8098 bne.w 8035a4a <snmp_msg_event+0x1a2>
- /* get_value() answer */
- en = msg_ps->ext_mib_node;
- LWIP_ASSERT("invalid length", msg_ps->ext_object_def.v_len <= 0xff);
- vb = snmp_varbind_alloc(&msg_ps->ext_oid,
- 803591a: f104 0074 add.w r0, r4, #116 ; 0x74
- 803591e: f894 106a ldrb.w r1, [r4, #106] ; 0x6a
- 8035922: f894 206c ldrb.w r2, [r4, #108] ; 0x6c
- {
- struct mib_external_node *en;
- struct snmp_varbind *vb;
- /* get_value() answer */
- en = msg_ps->ext_mib_node;
- 8035926: f8d4 805c ldr.w r8, [r4, #92] ; 0x5c
- LWIP_ASSERT("invalid length", msg_ps->ext_object_def.v_len <= 0xff);
- vb = snmp_varbind_alloc(&msg_ps->ext_oid,
- 803592a: f7ff ff05 bl 8035738 <snmp_varbind_alloc>
- msg_ps->ext_object_def.asn_type,
- (u8_t)msg_ps->ext_object_def.v_len);
- if (vb != NULL)
- 803592e: 4607 mov r7, r0
- 8035930: b1a0 cbz r0, 803595c <snmp_msg_event+0xb4>
- {
- en->get_value_a(request_id, &msg_ps->ext_object_def, vb->value_len, vb->value);
- 8035932: 697b ldr r3, [r7, #20]
- 8035934: f8d8 c03c ldr.w ip, [r8, #60] ; 0x3c
- 8035938: 7c7a ldrb r2, [r7, #17]
- 803593a: 4628 mov r0, r5
- 803593c: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035940: 47e0 blx ip
- snmp_varbind_tail_add(&msg_ps->outvb, vb);
- 8035942: f504 7086 add.w r0, r4, #268 ; 0x10c
- 8035946: 4639 mov r1, r7
- 8035948: f7ff ffa2 bl 8035890 <snmp_varbind_tail_add>
- msg_ps->state = SNMP_MSG_SEARCH_OBJ;
- msg_ps->vb_idx += 1;
- 803594c: f894 30f8 ldrb.w r3, [r4, #248] ; 0xf8
- (u8_t)msg_ps->ext_object_def.v_len);
- if (vb != NULL)
- {
- en->get_value_a(request_id, &msg_ps->ext_object_def, vb->value_len, vb->value);
- snmp_varbind_tail_add(&msg_ps->outvb, vb);
- msg_ps->state = SNMP_MSG_SEARCH_OBJ;
- 8035950: f884 605a strb.w r6, [r4, #90] ; 0x5a
- msg_ps->vb_idx += 1;
- 8035954: 3301 adds r3, #1
- 8035956: f884 30f8 strb.w r3, [r4, #248] ; 0xf8
- 803595a: e076 b.n 8035a4a <snmp_msg_event+0x1a2>
- }
- else
- {
- en->get_value_pc(request_id, &msg_ps->ext_object_def);
- 803595c: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035960: f8d8 304c ldr.w r3, [r8, #76] ; 0x4c
- 8035964: 4798 blx r3
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_getnext_event: couldn't allocate outvb space\n"));
- snmp_error_response(msg_ps,SNMP_ES_TOOBIG);
- 8035966: 4620 mov r0, r4
- 8035968: 4631 mov r1, r6
- 803596a: f7ff ff46 bl 80357fa <snmp_error_response>
- 803596e: e06c b.n 8035a4a <snmp_msg_event+0x1a2>
- (msg_ps->vb_idx < msg_ps->invb.count))
- {
- struct mib_node *mn;
- struct snmp_obj_id oid;
- if (msg_ps->vb_idx == 0)
- 8035970: b913 cbnz r3, 8035978 <snmp_msg_event+0xd0>
- {
- msg_ps->vb_ptr = msg_ps->invb.head;
- 8035972: f8d4 3100 ldr.w r3, [r4, #256] ; 0x100
- 8035976: e002 b.n 803597e <snmp_msg_event+0xd6>
- }
- else
- {
- msg_ps->vb_ptr = msg_ps->vb_ptr->next;
- 8035978: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 803597c: 681b ldr r3, [r3, #0]
- 803597e: f8c4 30fc str.w r3, [r4, #252] ; 0xfc
- }
- if (snmp_iso_prefix_expand(msg_ps->vb_ptr->ident_len, msg_ps->vb_ptr->ident, &oid))
- 8035982: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035986: aa05 add r2, sp, #20
- 8035988: 7a18 ldrb r0, [r3, #8]
- 803598a: 68d9 ldr r1, [r3, #12]
- 803598c: f7ff fe82 bl 8035694 <snmp_iso_prefix_expand>
- 8035990: 2800 cmp r0, #0
- 8035992: f000 82ff beq.w 8035f94 <snmp_msg_event+0x6ec>
- {
- if (msg_ps->vb_ptr->ident_len > 3)
- 8035996: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 803599a: 7a19 ldrb r1, [r3, #8]
- 803599c: 2903 cmp r1, #3
- 803599e: d905 bls.n 80359ac <snmp_msg_event+0x104>
- {
- /* can offset ident_len and ident */
- mn = snmp_expand_tree((struct mib_node*)&internet,
- 80359a0: 68da ldr r2, [r3, #12]
- 80359a2: 4878 ldr r0, [pc, #480] ; (8035b84 <snmp_msg_event+0x2dc>)
- 80359a4: 3904 subs r1, #4
- 80359a6: b2c9 uxtb r1, r1
- 80359a8: 3210 adds r2, #16
- 80359aa: e002 b.n 80359b2 <snmp_msg_event+0x10a>
- msg_ps->vb_ptr->ident + 4, &oid);
- }
- else
- {
- /* can't offset ident_len -4, ident + 4 */
- mn = snmp_expand_tree((struct mib_node*)&internet, 0, NULL, &oid);
- 80359ac: 2100 movs r1, #0
- 80359ae: 4875 ldr r0, [pc, #468] ; (8035b84 <snmp_msg_event+0x2dc>)
- 80359b0: 460a mov r2, r1
- 80359b2: ab05 add r3, sp, #20
- 80359b4: f7ff fc8e bl 80352d4 <snmp_expand_tree>
- 80359b8: 4605 mov r5, r0
- }
- else
- {
- mn = NULL;
- }
- if (mn != NULL)
- 80359ba: 2800 cmp r0, #0
- 80359bc: f000 82ea beq.w 8035f94 <snmp_msg_event+0x6ec>
- {
- if (mn->node_type == MIB_NODE_EX)
- 80359c0: 7c03 ldrb r3, [r0, #16]
- 80359c2: 2b05 cmp r3, #5
- 80359c4: d113 bne.n 80359ee <snmp_msg_event+0x146>
- {
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF;
- 80359c6: 2307 movs r3, #7
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- 80359c8: 65e0 str r0, [r4, #92] ; 0x5c
- msg_ps->ext_oid = oid;
- 80359ca: a905 add r1, sp, #20
- 80359cc: 2284 movs r2, #132 ; 0x84
- 80359ce: 486e ldr r0, [pc, #440] ; (8035b88 <snmp_msg_event+0x2e0>)
- if (mn->node_type == MIB_NODE_EX)
- {
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF;
- 80359d0: f884 305a strb.w r3, [r4, #90] ; 0x5a
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- msg_ps->ext_oid = oid;
- 80359d4: f7eb ffda bl 802198c <memcpy>
- en->get_object_def_q(en->addr_inf, request_id, 1, &oid.id[oid.len - 1]);
- 80359d8: f89d 3014 ldrb.w r3, [sp, #20]
- 80359dc: 6aae ldr r6, [r5, #40] ; 0x28
- 80359de: 6968 ldr r0, [r5, #20]
- 80359e0: ad05 add r5, sp, #20
- 80359e2: 2100 movs r1, #0
- 80359e4: 2201 movs r2, #1
- 80359e6: eb05 0383 add.w r3, r5, r3, lsl #2
- 80359ea: 47b0 blx r6
- 80359ec: e02e b.n 8035a4c <snmp_msg_event+0x1a4>
- {
- /* internal object */
- struct obj_def object_def;
- struct snmp_varbind *vb;
- msg_ps->state = SNMP_MSG_INTERNAL_GET_OBJDEF;
- 80359ee: 2302 movs r3, #2
- mn->get_object_def(1, &oid.id[oid.len - 1], &object_def);
- 80359f0: f89d 1014 ldrb.w r1, [sp, #20]
- {
- /* internal object */
- struct obj_def object_def;
- struct snmp_varbind *vb;
- msg_ps->state = SNMP_MSG_INTERNAL_GET_OBJDEF;
- 80359f4: f884 305a strb.w r3, [r4, #90] ; 0x5a
- mn->get_object_def(1, &oid.id[oid.len - 1], &object_def);
- 80359f8: af05 add r7, sp, #20
- 80359fa: 6803 ldr r3, [r0, #0]
- 80359fc: eb07 0181 add.w r1, r7, r1, lsl #2
- 8035a00: 2001 movs r0, #1
- 8035a02: aa02 add r2, sp, #8
- 8035a04: 4798 blx r3
- LWIP_ASSERT("invalid length", object_def.v_len <= 0xff);
- vb = snmp_varbind_alloc(&oid, object_def.asn_type, (u8_t)object_def.v_len);
- 8035a06: a805 add r0, sp, #20
- 8035a08: f89d 100a ldrb.w r1, [sp, #10]
- 8035a0c: f89d 200c ldrb.w r2, [sp, #12]
- 8035a10: f7ff fe92 bl 8035738 <snmp_varbind_alloc>
- if (vb != NULL)
- 8035a14: 4606 mov r6, r0
- 8035a16: b1a8 cbz r0, 8035a44 <snmp_msg_event+0x19c>
- {
- msg_ps->state = SNMP_MSG_INTERNAL_GET_VALUE;
- 8035a18: 2303 movs r3, #3
- 8035a1a: f884 305a strb.w r3, [r4, #90] ; 0x5a
- mn->get_value(&object_def, object_def.v_len, vb->value);
- 8035a1e: 686b ldr r3, [r5, #4]
- 8035a20: f8bd 100c ldrh.w r1, [sp, #12]
- 8035a24: 6972 ldr r2, [r6, #20]
- 8035a26: a802 add r0, sp, #8
- 8035a28: 4798 blx r3
- snmp_varbind_tail_add(&msg_ps->outvb, vb);
- 8035a2a: 4858 ldr r0, [pc, #352] ; (8035b8c <snmp_msg_event+0x2e4>)
- 8035a2c: 4631 mov r1, r6
- 8035a2e: f7ff ff2f bl 8035890 <snmp_varbind_tail_add>
- msg_ps->state = SNMP_MSG_SEARCH_OBJ;
- 8035a32: 2301 movs r3, #1
- 8035a34: f884 305a strb.w r3, [r4, #90] ; 0x5a
- msg_ps->vb_idx += 1;
- 8035a38: f894 30f8 ldrb.w r3, [r4, #248] ; 0xf8
- 8035a3c: 3301 adds r3, #1
- 8035a3e: f884 30f8 strb.w r3, [r4, #248] ; 0xf8
- 8035a42: e003 b.n 8035a4c <snmp_msg_event+0x1a4>
- }
- else
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_recv couldn't allocate outvb space\n"));
- snmp_error_response(msg_ps,SNMP_ES_TOOBIG);
- 8035a44: 484e ldr r0, [pc, #312] ; (8035b80 <snmp_msg_event+0x2d8>)
- 8035a46: 2101 movs r1, #1
- 8035a48: e2a6 b.n 8035f98 <snmp_msg_event+0x6f0>
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_getnext_event: couldn't allocate outvb space\n"));
- snmp_error_response(msg_ps,SNMP_ES_TOOBIG);
- }
- }
- while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- 8035a4a: 4c4d ldr r4, [pc, #308] ; (8035b80 <snmp_msg_event+0x2d8>)
- 8035a4c: f894 305a ldrb.w r3, [r4, #90] ; 0x5a
- 8035a50: 2b01 cmp r3, #1
- 8035a52: f040 82c0 bne.w 8035fd6 <snmp_msg_event+0x72e>
- (msg_ps->vb_idx < msg_ps->invb.count))
- 8035a56: f894 30f8 ldrb.w r3, [r4, #248] ; 0xf8
- 8035a5a: f894 2108 ldrb.w r2, [r4, #264] ; 0x108
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_getnext_event: couldn't allocate outvb space\n"));
- snmp_error_response(msg_ps,SNMP_ES_TOOBIG);
- }
- }
- while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- 8035a5e: 4293 cmp r3, r2
- 8035a60: d386 bcc.n 8035970 <snmp_msg_event+0xc8>
- 8035a62: e2a7 b.n 8035fb4 <snmp_msg_event+0x70c>
- }
- }
- if ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- (msg_ps->vb_idx == msg_ps->invb.count))
- {
- snmp_ok_response(msg_ps);
- 8035a64: 4846 ldr r0, [pc, #280] ; (8035b80 <snmp_msg_event+0x2d8>)
- 8035a66: e292 b.n 8035f8e <snmp_msg_event+0x6e6>
- msg_ps = &msg_input_list[request_id];
- if (msg_ps->rt == SNMP_ASN1_PDU_GET_NEXT_REQ)
- {
- snmp_msg_getnext_event(request_id, msg_ps);
- }
- else if (msg_ps->rt == SNMP_ASN1_PDU_GET_REQ)
- 8035a68: 2e00 cmp r6, #0
- 8035a6a: f040 8126 bne.w 8035cba <snmp_msg_event+0x412>
- static void
- snmp_msg_get_event(u8_t request_id, struct snmp_msg_pstat *msg_ps)
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_get_event: msg_ps->state==%"U16_F"\n",(u16_t)msg_ps->state));
- if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_OBJDEF)
- 8035a6e: f894 305a ldrb.w r3, [r4, #90] ; 0x5a
- 8035a72: 2b07 cmp r3, #7
- 8035a74: d122 bne.n 8035abc <snmp_msg_event+0x214>
- {
- struct mib_external_node *en;
- struct snmp_name_ptr np;
- /* get_object_def() answer*/
- en = msg_ps->ext_mib_node;
- 8035a76: 6de5 ldr r5, [r4, #92] ; 0x5c
- np = msg_ps->ext_name_ptr;
- 8035a78: f894 9060 ldrb.w r9, [r4, #96] ; 0x60
- 8035a7c: f8d4 8064 ldr.w r8, [r4, #100] ; 0x64
- /* translate answer into a known lifeform */
- en->get_object_def_a(request_id, np.ident_len, np.ident, &msg_ps->ext_object_def);
- 8035a80: 6baf ldr r7, [r5, #56] ; 0x38
- 8035a82: f104 0368 add.w r3, r4, #104 ; 0x68
- 8035a86: 4649 mov r1, r9
- 8035a88: 4642 mov r2, r8
- 8035a8a: 47b8 blx r7
- if ((msg_ps->ext_object_def.instance != MIB_OBJECT_NONE) &&
- 8035a8c: f894 3068 ldrb.w r3, [r4, #104] ; 0x68
- 8035a90: b163 cbz r3, 8035aac <snmp_msg_event+0x204>
- (msg_ps->ext_object_def.access & MIB_ACCESS_READ))
- 8035a92: f894 3069 ldrb.w r3, [r4, #105] ; 0x69
- en = msg_ps->ext_mib_node;
- np = msg_ps->ext_name_ptr;
- /* translate answer into a known lifeform */
- en->get_object_def_a(request_id, np.ident_len, np.ident, &msg_ps->ext_object_def);
- if ((msg_ps->ext_object_def.instance != MIB_OBJECT_NONE) &&
- 8035a96: 07da lsls r2, r3, #31
- 8035a98: d508 bpl.n 8035aac <snmp_msg_event+0x204>
- (msg_ps->ext_object_def.access & MIB_ACCESS_READ))
- {
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_VALUE;
- 8035a9a: 2308 movs r3, #8
- 8035a9c: f884 305a strb.w r3, [r4, #90] ; 0x5a
- en->get_value_q(request_id, &msg_ps->ext_object_def);
- 8035aa0: 6aeb ldr r3, [r5, #44] ; 0x2c
- 8035aa2: 4630 mov r0, r6
- 8035aa4: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035aa8: 4798 blx r3
- 8035aaa: e0f7 b.n 8035c9c <snmp_msg_event+0x3f4>
- }
- else
- {
- en->get_object_def_pc(request_id, np.ident_len, np.ident);
- 8035aac: 2000 movs r0, #0
- 8035aae: 4649 mov r1, r9
- 8035ab0: 6cab ldr r3, [r5, #72] ; 0x48
- 8035ab2: 4642 mov r2, r8
- 8035ab4: 4798 blx r3
- /* search failed, object id points to unknown object (nosuchname) */
- snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME);
- 8035ab6: 4832 ldr r0, [pc, #200] ; (8035b80 <snmp_msg_event+0x2d8>)
- 8035ab8: 2102 movs r1, #2
- 8035aba: e059 b.n 8035b70 <snmp_msg_event+0x2c8>
- }
- }
- else if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_VALUE)
- 8035abc: 2b08 cmp r3, #8
- 8035abe: f040 80ed bne.w 8035c9c <snmp_msg_event+0x3f4>
- /* get_value() answer */
- en = msg_ps->ext_mib_node;
- /* allocate output varbind */
- vb = (struct snmp_varbind *)memp_malloc(MEMP_SNMP_VARBIND);
- 8035ac2: 200c movs r0, #12
- {
- struct mib_external_node *en;
- struct snmp_varbind *vb;
- /* get_value() answer */
- en = msg_ps->ext_mib_node;
- 8035ac4: f8d4 805c ldr.w r8, [r4, #92] ; 0x5c
- /* allocate output varbind */
- vb = (struct snmp_varbind *)memp_malloc(MEMP_SNMP_VARBIND);
- 8035ac8: f7fa f880 bl 802fbcc <memp_malloc>
- if (vb != NULL)
- 8035acc: 4605 mov r5, r0
- 8035ace: 2800 cmp r0, #0
- 8035ad0: d047 beq.n 8035b62 <snmp_msg_event+0x2ba>
- {
- vb->next = NULL;
- 8035ad2: 6006 str r6, [r0, #0]
- vb->prev = NULL;
- 8035ad4: 6046 str r6, [r0, #4]
- /* move name from invb to outvb */
- vb->ident = msg_ps->vb_ptr->ident;
- 8035ad6: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035ada: 68da ldr r2, [r3, #12]
- vb->ident_len = msg_ps->vb_ptr->ident_len;
- 8035adc: 7a1b ldrb r3, [r3, #8]
- {
- vb->next = NULL;
- vb->prev = NULL;
- /* move name from invb to outvb */
- vb->ident = msg_ps->vb_ptr->ident;
- 8035ade: 60c2 str r2, [r0, #12]
- vb->ident_len = msg_ps->vb_ptr->ident_len;
- 8035ae0: 7203 strb r3, [r0, #8]
- /* ensure this memory is refereced once only */
- msg_ps->vb_ptr->ident = NULL;
- 8035ae2: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- msg_ps->vb_ptr->ident_len = 0;
- 8035ae6: 721e strb r6, [r3, #8]
- /* move name from invb to outvb */
- vb->ident = msg_ps->vb_ptr->ident;
- vb->ident_len = msg_ps->vb_ptr->ident_len;
- /* ensure this memory is refereced once only */
- msg_ps->vb_ptr->ident = NULL;
- 8035ae8: 60de str r6, [r3, #12]
- msg_ps->vb_ptr->ident_len = 0;
- vb->value_type = msg_ps->ext_object_def.asn_type;
- 8035aea: f894 306a ldrb.w r3, [r4, #106] ; 0x6a
- 8035aee: 7403 strb r3, [r0, #16]
- LWIP_ASSERT("invalid length", msg_ps->ext_object_def.v_len <= 0xff);
- vb->value_len = (u8_t)msg_ps->ext_object_def.v_len;
- 8035af0: f894 706c ldrb.w r7, [r4, #108] ; 0x6c
- 8035af4: 7447 strb r7, [r0, #17]
- if (vb->value_len > 0)
- 8035af6: b1ef cbz r7, 8035b34 <snmp_msg_event+0x28c>
- {
- LWIP_ASSERT("SNMP_MAX_OCTET_STRING_LEN is configured too low", vb->value_len <= SNMP_MAX_VALUE_SIZE);
- vb->value = memp_malloc(MEMP_SNMP_VALUE);
- 8035af8: 200d movs r0, #13
- 8035afa: f7fa f867 bl 802fbcc <memp_malloc>
- 8035afe: 4603 mov r3, r0
- 8035b00: 6168 str r0, [r5, #20]
- if (vb->value != NULL)
- 8035b02: b138 cbz r0, 8035b14 <snmp_msg_event+0x26c>
- {
- en->get_value_a(request_id, &msg_ps->ext_object_def, vb->value_len, vb->value);
- 8035b04: f8d8 703c ldr.w r7, [r8, #60] ; 0x3c
- 8035b08: 7c6a ldrb r2, [r5, #17]
- 8035b0a: 4630 mov r0, r6
- 8035b0c: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035b10: 47b8 blx r7
- 8035b12: e018 b.n 8035b46 <snmp_msg_event+0x29e>
- msg_ps->state = SNMP_MSG_SEARCH_OBJ;
- msg_ps->vb_idx += 1;
- }
- else
- {
- en->get_value_pc(request_id, &msg_ps->ext_object_def);
- 8035b14: f8d8 304c ldr.w r3, [r8, #76] ; 0x4c
- 8035b18: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035b1c: 4798 blx r3
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: no variable space\n"));
- msg_ps->vb_ptr->ident = vb->ident;
- 8035b1e: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035b22: 68ea ldr r2, [r5, #12]
- 8035b24: 60da str r2, [r3, #12]
- msg_ps->vb_ptr->ident_len = vb->ident_len;
- 8035b26: 7a2a ldrb r2, [r5, #8]
- memp_free(MEMP_SNMP_VARBIND, vb);
- 8035b28: 200c movs r0, #12
- else
- {
- en->get_value_pc(request_id, &msg_ps->ext_object_def);
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: no variable space\n"));
- msg_ps->vb_ptr->ident = vb->ident;
- msg_ps->vb_ptr->ident_len = vb->ident_len;
- 8035b2a: 721a strb r2, [r3, #8]
- memp_free(MEMP_SNMP_VARBIND, vb);
- 8035b2c: 4629 mov r1, r5
- 8035b2e: f7fa f863 bl 802fbf8 <memp_free>
- 8035b32: e01b b.n 8035b6c <snmp_msg_event+0x2c4>
- }
- }
- else
- {
- /* vb->value_len == 0, empty value (e.g. empty string) */
- en->get_value_a(request_id, &msg_ps->ext_object_def, 0, NULL);
- 8035b34: f8d8 603c ldr.w r6, [r8, #60] ; 0x3c
- 8035b38: 4638 mov r0, r7
- 8035b3a: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035b3e: 463a mov r2, r7
- 8035b40: 463b mov r3, r7
- 8035b42: 47b0 blx r6
- vb->value = NULL;
- 8035b44: 616f str r7, [r5, #20]
- snmp_varbind_tail_add(&msg_ps->outvb, vb);
- 8035b46: f504 7086 add.w r0, r4, #268 ; 0x10c
- 8035b4a: 4629 mov r1, r5
- 8035b4c: f7ff fea0 bl 8035890 <snmp_varbind_tail_add>
- /* search again (if vb_idx < msg_ps->invb.count) */
- msg_ps->state = SNMP_MSG_SEARCH_OBJ;
- 8035b50: 2301 movs r3, #1
- 8035b52: f884 305a strb.w r3, [r4, #90] ; 0x5a
- msg_ps->vb_idx += 1;
- 8035b56: f894 30f8 ldrb.w r3, [r4, #248] ; 0xf8
- 8035b5a: 3301 adds r3, #1
- 8035b5c: f884 30f8 strb.w r3, [r4, #248] ; 0xf8
- 8035b60: e09c b.n 8035c9c <snmp_msg_event+0x3f4>
- }
- }
- else
- {
- en->get_value_pc(request_id, &msg_ps->ext_object_def);
- 8035b62: f8d8 304c ldr.w r3, [r8, #76] ; 0x4c
- 8035b66: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035b6a: 4798 blx r3
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: no outvb space\n"));
- snmp_error_response(msg_ps,SNMP_ES_TOOBIG);
- 8035b6c: 4620 mov r0, r4
- 8035b6e: 2101 movs r1, #1
- 8035b70: f7ff fe43 bl 80357fa <snmp_error_response>
- 8035b74: e092 b.n 8035c9c <snmp_msg_event+0x3f4>
- (msg_ps->vb_idx < msg_ps->invb.count))
- {
- struct mib_node *mn;
- struct snmp_name_ptr np;
- if (msg_ps->vb_idx == 0)
- 8035b76: b95b cbnz r3, 8035b90 <snmp_msg_event+0x2e8>
- {
- msg_ps->vb_ptr = msg_ps->invb.head;
- 8035b78: f8d4 3100 ldr.w r3, [r4, #256] ; 0x100
- 8035b7c: e00b b.n 8035b96 <snmp_msg_event+0x2ee>
- 8035b7e: bf00 nop
- 8035b80: 2000f6f0 .word 0x2000f6f0
- 8035b84: 08045834 .word 0x08045834
- 8035b88: 2000f764 .word 0x2000f764
- 8035b8c: 2000f7fc .word 0x2000f7fc
- }
- else
- {
- msg_ps->vb_ptr = msg_ps->vb_ptr->next;
- 8035b90: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035b94: 681b ldr r3, [r3, #0]
- 8035b96: f8c4 30fc str.w r3, [r4, #252] ; 0xfc
- }
- /** test object identifier for .iso.org.dod.internet prefix */
- if (snmp_iso_prefix_tst(msg_ps->vb_ptr->ident_len, msg_ps->vb_ptr->ident))
- 8035b9a: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035b9e: 7a18 ldrb r0, [r3, #8]
- 8035ba0: 68d9 ldr r1, [r3, #12]
- 8035ba2: f7ff fd65 bl 8035670 <snmp_iso_prefix_tst>
- 8035ba6: 2800 cmp r0, #0
- 8035ba8: d073 beq.n 8035c92 <snmp_msg_event+0x3ea>
- {
- mn = snmp_search_tree((struct mib_node*)&internet, msg_ps->vb_ptr->ident_len - 4,
- 8035baa: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035bae: 48a6 ldr r0, [pc, #664] ; (8035e48 <snmp_msg_event+0x5a0>)
- 8035bb0: 7a19 ldrb r1, [r3, #8]
- 8035bb2: 68da ldr r2, [r3, #12]
- 8035bb4: 3904 subs r1, #4
- 8035bb6: b2c9 uxtb r1, r1
- 8035bb8: 3210 adds r2, #16
- 8035bba: 466b mov r3, sp
- 8035bbc: f7ff fb0a bl 80351d4 <snmp_search_tree>
- msg_ps->vb_ptr->ident + 4, &np);
- if (mn != NULL)
- 8035bc0: 4606 mov r6, r0
- 8035bc2: 2800 cmp r0, #0
- 8035bc4: d065 beq.n 8035c92 <snmp_msg_event+0x3ea>
- {
- if (mn->node_type == MIB_NODE_EX)
- 8035bc6: 7c03 ldrb r3, [r0, #16]
- 8035bc8: 2b05 cmp r3, #5
- 8035bca: d110 bne.n 8035bee <snmp_msg_event+0x346>
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF;
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- 8035bcc: 65e0 str r0, [r4, #92] ; 0x5c
- if (mn->node_type == MIB_NODE_EX)
- {
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF;
- 8035bce: 2307 movs r3, #7
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- msg_ps->ext_name_ptr = np;
- 8035bd0: e898 0003 ldmia.w r8, {r0, r1}
- if (mn->node_type == MIB_NODE_EX)
- {
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF;
- 8035bd4: f884 305a strb.w r3, [r4, #90] ; 0x5a
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- msg_ps->ext_name_ptr = np;
- 8035bd8: 4b9c ldr r3, [pc, #624] ; (8035e4c <snmp_msg_event+0x5a4>)
- en->get_object_def_q(en->addr_inf, request_id, np.ident_len, np.ident);
- 8035bda: f89d 2000 ldrb.w r2, [sp]
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF;
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- msg_ps->ext_name_ptr = np;
- 8035bde: e883 0003 stmia.w r3, {r0, r1}
- en->get_object_def_q(en->addr_inf, request_id, np.ident_len, np.ident);
- 8035be2: 2100 movs r1, #0
- 8035be4: 6ab5 ldr r5, [r6, #40] ; 0x28
- 8035be6: 6970 ldr r0, [r6, #20]
- 8035be8: 9b01 ldr r3, [sp, #4]
- 8035bea: 47a8 blx r5
- 8035bec: e058 b.n 8035ca0 <snmp_msg_event+0x3f8>
- else
- {
- /* internal object */
- struct obj_def object_def;
- msg_ps->state = SNMP_MSG_INTERNAL_GET_OBJDEF;
- 8035bee: 2302 movs r3, #2
- 8035bf0: f884 305a strb.w r3, [r4, #90] ; 0x5a
- mn->get_object_def(np.ident_len, np.ident, &object_def);
- 8035bf4: 6803 ldr r3, [r0, #0]
- 8035bf6: 9901 ldr r1, [sp, #4]
- 8035bf8: f89d 0000 ldrb.w r0, [sp]
- 8035bfc: aa02 add r2, sp, #8
- 8035bfe: 4798 blx r3
- if ((object_def.instance != MIB_OBJECT_NONE) &&
- 8035c00: f89d 3008 ldrb.w r3, [sp, #8]
- 8035c04: 2b00 cmp r3, #0
- 8035c06: d044 beq.n 8035c92 <snmp_msg_event+0x3ea>
- (object_def.access & MIB_ACCESS_READ))
- 8035c08: f89d 3009 ldrb.w r3, [sp, #9]
- /* internal object */
- struct obj_def object_def;
- msg_ps->state = SNMP_MSG_INTERNAL_GET_OBJDEF;
- mn->get_object_def(np.ident_len, np.ident, &object_def);
- if ((object_def.instance != MIB_OBJECT_NONE) &&
- 8035c0c: 07db lsls r3, r3, #31
- 8035c0e: f100 81c6 bmi.w 8035f9e <snmp_msg_event+0x6f6>
- 8035c12: e03e b.n 8035c92 <snmp_msg_event+0x3ea>
- msg_ps->state = SNMP_MSG_INTERNAL_GET_VALUE;
- /* allocate output varbind */
- vb = (struct snmp_varbind *)memp_malloc(MEMP_SNMP_VARBIND);
- if (vb != NULL)
- {
- vb->next = NULL;
- 8035c14: 2200 movs r2, #0
- 8035c16: 602a str r2, [r5, #0]
- vb->prev = NULL;
- 8035c18: 606a str r2, [r5, #4]
- /* move name from invb to outvb */
- vb->ident = msg_ps->vb_ptr->ident;
- 8035c1a: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035c1e: 68d9 ldr r1, [r3, #12]
- vb->ident_len = msg_ps->vb_ptr->ident_len;
- 8035c20: 7a1b ldrb r3, [r3, #8]
- {
- vb->next = NULL;
- vb->prev = NULL;
- /* move name from invb to outvb */
- vb->ident = msg_ps->vb_ptr->ident;
- 8035c22: 60e9 str r1, [r5, #12]
- vb->ident_len = msg_ps->vb_ptr->ident_len;
- 8035c24: 722b strb r3, [r5, #8]
- /* ensure this memory is refereced once only */
- msg_ps->vb_ptr->ident = NULL;
- 8035c26: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- msg_ps->vb_ptr->ident_len = 0;
- 8035c2a: 721a strb r2, [r3, #8]
- /* move name from invb to outvb */
- vb->ident = msg_ps->vb_ptr->ident;
- vb->ident_len = msg_ps->vb_ptr->ident_len;
- /* ensure this memory is refereced once only */
- msg_ps->vb_ptr->ident = NULL;
- 8035c2c: 60da str r2, [r3, #12]
- msg_ps->vb_ptr->ident_len = 0;
- vb->value_type = object_def.asn_type;
- 8035c2e: f89d 300a ldrb.w r3, [sp, #10]
- 8035c32: 742b strb r3, [r5, #16]
- LWIP_ASSERT("invalid length", object_def.v_len <= 0xff);
- vb->value_len = (u8_t)object_def.v_len;
- 8035c34: f89d 300c ldrb.w r3, [sp, #12]
- 8035c38: 746b strb r3, [r5, #17]
- if (vb->value_len > 0)
- 8035c3a: b1bb cbz r3, 8035c6c <snmp_msg_event+0x3c4>
- {
- LWIP_ASSERT("SNMP_MAX_OCTET_STRING_LEN is configured too low",
- vb->value_len <= SNMP_MAX_VALUE_SIZE);
- vb->value = memp_malloc(MEMP_SNMP_VALUE);
- 8035c3c: 200d movs r0, #13
- 8035c3e: f7f9 ffc5 bl 802fbcc <memp_malloc>
- 8035c42: 4602 mov r2, r0
- 8035c44: 6168 str r0, [r5, #20]
- if (vb->value != NULL)
- 8035c46: b120 cbz r0, 8035c52 <snmp_msg_event+0x3aa>
- {
- mn->get_value(&object_def, vb->value_len, vb->value);
- 8035c48: 6877 ldr r7, [r6, #4]
- 8035c4a: 7c69 ldrb r1, [r5, #17]
- 8035c4c: a802 add r0, sp, #8
- 8035c4e: 47b8 blx r7
- 8035c50: e00d b.n 8035c6e <snmp_msg_event+0x3c6>
- msg_ps->vb_idx += 1;
- }
- else
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: couldn't allocate variable space\n"));
- msg_ps->vb_ptr->ident = vb->ident;
- 8035c52: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035c56: 68e9 ldr r1, [r5, #12]
- 8035c58: 60d9 str r1, [r3, #12]
- msg_ps->vb_ptr->ident_len = vb->ident_len;
- 8035c5a: 7a29 ldrb r1, [r5, #8]
- vb->ident = NULL;
- 8035c5c: 60e8 str r0, [r5, #12]
- }
- else
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: couldn't allocate variable space\n"));
- msg_ps->vb_ptr->ident = vb->ident;
- msg_ps->vb_ptr->ident_len = vb->ident_len;
- 8035c5e: 7219 strb r1, [r3, #8]
- vb->ident = NULL;
- vb->ident_len = 0;
- 8035c60: 7228 strb r0, [r5, #8]
- memp_free(MEMP_SNMP_VARBIND, vb);
- 8035c62: 4629 mov r1, r5
- 8035c64: 200c movs r0, #12
- 8035c66: f7f9 ffc7 bl 802fbf8 <memp_free>
- 8035c6a: e00d b.n 8035c88 <snmp_msg_event+0x3e0>
- }
- }
- else
- {
- /* vb->value_len == 0, empty value (e.g. empty string) */
- vb->value = NULL;
- 8035c6c: 616b str r3, [r5, #20]
- snmp_varbind_tail_add(&msg_ps->outvb, vb);
- 8035c6e: 4878 ldr r0, [pc, #480] ; (8035e50 <snmp_msg_event+0x5a8>)
- 8035c70: 4629 mov r1, r5
- 8035c72: f7ff fe0d bl 8035890 <snmp_varbind_tail_add>
- msg_ps->state = SNMP_MSG_SEARCH_OBJ;
- 8035c76: 2301 movs r3, #1
- 8035c78: f884 305a strb.w r3, [r4, #90] ; 0x5a
- msg_ps->vb_idx += 1;
- 8035c7c: f894 30f8 ldrb.w r3, [r4, #248] ; 0xf8
- 8035c80: 3301 adds r3, #1
- 8035c82: f884 30f8 strb.w r3, [r4, #248] ; 0xf8
- 8035c86: e003 b.n 8035c90 <snmp_msg_event+0x3e8>
- }
- }
- else
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: couldn't allocate outvb space\n"));
- snmp_error_response(msg_ps,SNMP_ES_TOOBIG);
- 8035c88: 4872 ldr r0, [pc, #456] ; (8035e54 <snmp_msg_event+0x5ac>)
- 8035c8a: 2101 movs r1, #1
- 8035c8c: f7ff fdb5 bl 80357fa <snmp_error_response>
- }
- else
- {
- mn = NULL;
- }
- if (mn == NULL)
- 8035c90: b936 cbnz r6, 8035ca0 <snmp_msg_event+0x3f8>
- {
- /* mn == NULL, noSuchName */
- snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME);
- 8035c92: 4870 ldr r0, [pc, #448] ; (8035e54 <snmp_msg_event+0x5ac>)
- 8035c94: 2102 movs r1, #2
- 8035c96: f7ff fdb0 bl 80357fa <snmp_error_response>
- 8035c9a: e001 b.n 8035ca0 <snmp_msg_event+0x3f8>
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: no outvb space\n"));
- snmp_error_response(msg_ps,SNMP_ES_TOOBIG);
- }
- }
- while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- 8035c9c: 4c6d ldr r4, [pc, #436] ; (8035e54 <snmp_msg_event+0x5ac>)
- msg_ps->vb_ptr = msg_ps->vb_ptr->next;
- }
- /** test object identifier for .iso.org.dod.internet prefix */
- if (snmp_iso_prefix_tst(msg_ps->vb_ptr->ident_len, msg_ps->vb_ptr->ident))
- {
- mn = snmp_search_tree((struct mib_node*)&internet, msg_ps->vb_ptr->ident_len - 4,
- 8035c9e: 46e8 mov r8, sp
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: no outvb space\n"));
- snmp_error_response(msg_ps,SNMP_ES_TOOBIG);
- }
- }
- while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- 8035ca0: f894 305a ldrb.w r3, [r4, #90] ; 0x5a
- 8035ca4: 2b01 cmp r3, #1
- 8035ca6: f040 8196 bne.w 8035fd6 <snmp_msg_event+0x72e>
- (msg_ps->vb_idx < msg_ps->invb.count))
- 8035caa: f894 30f8 ldrb.w r3, [r4, #248] ; 0xf8
- 8035cae: f894 2108 ldrb.w r2, [r4, #264] ; 0x108
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event: no outvb space\n"));
- snmp_error_response(msg_ps,SNMP_ES_TOOBIG);
- }
- }
- while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- 8035cb2: 4293 cmp r3, r2
- 8035cb4: f4ff af5f bcc.w 8035b76 <snmp_msg_event+0x2ce>
- 8035cb8: e17c b.n 8035fb4 <snmp_msg_event+0x70c>
- }
- else if (msg_ps->rt == SNMP_ASN1_PDU_GET_REQ)
- {
- snmp_msg_get_event(request_id, msg_ps);
- }
- else if(msg_ps->rt == SNMP_ASN1_PDU_SET_REQ)
- 8035cba: 2e03 cmp r6, #3
- 8035cbc: f040 818b bne.w 8035fd6 <snmp_msg_event+0x72e>
- static void
- snmp_msg_set_event(u8_t request_id, struct snmp_msg_pstat *msg_ps)
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_set_event: msg_ps->state==%"U16_F"\n",(u16_t)msg_ps->state));
- if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_OBJDEF)
- 8035cc0: f894 305a ldrb.w r3, [r4, #90] ; 0x5a
- 8035cc4: 2b07 cmp r3, #7
- 8035cc6: d11b bne.n 8035d00 <snmp_msg_event+0x458>
- {
- struct mib_external_node *en;
- struct snmp_name_ptr np;
- /* get_object_def() answer*/
- en = msg_ps->ext_mib_node;
- 8035cc8: 6de6 ldr r6, [r4, #92] ; 0x5c
- np = msg_ps->ext_name_ptr;
- 8035cca: f894 9060 ldrb.w r9, [r4, #96] ; 0x60
- 8035cce: f8d4 8064 ldr.w r8, [r4, #100] ; 0x64
- /* translate answer into a known lifeform */
- en->get_object_def_a(request_id, np.ident_len, np.ident, &msg_ps->ext_object_def);
- 8035cd2: 6bb7 ldr r7, [r6, #56] ; 0x38
- 8035cd4: 4649 mov r1, r9
- 8035cd6: 4642 mov r2, r8
- 8035cd8: f104 0368 add.w r3, r4, #104 ; 0x68
- 8035cdc: 47b8 blx r7
- if (msg_ps->ext_object_def.instance != MIB_OBJECT_NONE)
- 8035cde: f894 0068 ldrb.w r0, [r4, #104] ; 0x68
- 8035ce2: b140 cbz r0, 8035cf6 <snmp_msg_event+0x44e>
- {
- msg_ps->state = SNMP_MSG_EXTERNAL_SET_TEST;
- 8035ce4: 2309 movs r3, #9
- 8035ce6: f884 305a strb.w r3, [r4, #90] ; 0x5a
- en->set_test_q(request_id, &msg_ps->ext_object_def);
- 8035cea: 6b33 ldr r3, [r6, #48] ; 0x30
- 8035cec: 4628 mov r0, r5
- 8035cee: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035cf2: 4798 blx r3
- 8035cf4: e0d5 b.n 8035ea2 <snmp_msg_event+0x5fa>
- }
- else
- {
- en->get_object_def_pc(request_id, np.ident_len, np.ident);
- 8035cf6: 6cb3 ldr r3, [r6, #72] ; 0x48
- 8035cf8: 4649 mov r1, r9
- 8035cfa: 4642 mov r2, r8
- 8035cfc: 4798 blx r3
- 8035cfe: e023 b.n 8035d48 <snmp_msg_event+0x4a0>
- /* search failed, object id points to unknown object (nosuchname) */
- snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME);
- }
- }
- else if (msg_ps->state == SNMP_MSG_EXTERNAL_SET_TEST)
- 8035d00: 2b09 cmp r3, #9
- 8035d02: d124 bne.n 8035d4e <snmp_msg_event+0x4a6>
- struct mib_external_node *en;
- /* set_test() answer*/
- en = msg_ps->ext_mib_node;
- if (msg_ps->ext_object_def.access & MIB_ACCESS_WRITE)
- 8035d04: f894 3069 ldrb.w r3, [r4, #105] ; 0x69
- else if (msg_ps->state == SNMP_MSG_EXTERNAL_SET_TEST)
- {
- struct mib_external_node *en;
- /* set_test() answer*/
- en = msg_ps->ext_mib_node;
- 8035d08: 6de5 ldr r5, [r4, #92] ; 0x5c
- if (msg_ps->ext_object_def.access & MIB_ACCESS_WRITE)
- 8035d0a: f003 0302 and.w r3, r3, #2
- 8035d0e: b2db uxtb r3, r3
- 8035d10: b1b3 cbz r3, 8035d40 <snmp_msg_event+0x498>
- {
- if ((msg_ps->ext_object_def.asn_type == msg_ps->vb_ptr->value_type) &&
- 8035d12: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035d16: f894 106a ldrb.w r1, [r4, #106] ; 0x6a
- 8035d1a: 7c1a ldrb r2, [r3, #16]
- 8035d1c: 4291 cmp r1, r2
- 8035d1e: d108 bne.n 8035d32 <snmp_msg_event+0x48a>
- (en->set_test_a(request_id,&msg_ps->ext_object_def,
- 8035d20: 7c5a ldrb r2, [r3, #17]
- 8035d22: 6c2e ldr r6, [r5, #64] ; 0x40
- 8035d24: 695b ldr r3, [r3, #20]
- 8035d26: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035d2a: 47b0 blx r6
- /* set_test() answer*/
- en = msg_ps->ext_mib_node;
- if (msg_ps->ext_object_def.access & MIB_ACCESS_WRITE)
- {
- if ((msg_ps->ext_object_def.asn_type == msg_ps->vb_ptr->value_type) &&
- 8035d2c: b108 cbz r0, 8035d32 <snmp_msg_event+0x48a>
- (en->set_test_a(request_id,&msg_ps->ext_object_def,
- msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value) != 0))
- {
- msg_ps->state = SNMP_MSG_SEARCH_OBJ;
- 8035d2e: 2301 movs r3, #1
- 8035d30: e040 b.n 8035db4 <snmp_msg_event+0x50c>
- msg_ps->vb_idx += 1;
- }
- else
- {
- en->set_test_pc(request_id,&msg_ps->ext_object_def);
- 8035d32: 2000 movs r0, #0
- 8035d34: 4948 ldr r1, [pc, #288] ; (8035e58 <snmp_msg_event+0x5b0>)
- 8035d36: 6d2b ldr r3, [r5, #80] ; 0x50
- 8035d38: 4798 blx r3
- /* bad value */
- snmp_error_response(msg_ps,SNMP_ES_BADVALUE);
- 8035d3a: 4846 ldr r0, [pc, #280] ; (8035e54 <snmp_msg_event+0x5ac>)
- 8035d3c: 2103 movs r1, #3
- 8035d3e: e029 b.n 8035d94 <snmp_msg_event+0x4ec>
- }
- }
- else
- {
- en->set_test_pc(request_id,&msg_ps->ext_object_def);
- 8035d40: 6d2b ldr r3, [r5, #80] ; 0x50
- 8035d42: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035d46: 4798 blx r3
- /* object not available for set */
- snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME);
- 8035d48: 4620 mov r0, r4
- 8035d4a: 2102 movs r1, #2
- 8035d4c: e022 b.n 8035d94 <snmp_msg_event+0x4ec>
- }
- }
- else if (msg_ps->state == SNMP_MSG_EXTERNAL_GET_OBJDEF_S)
- 8035d4e: 2b0a cmp r3, #10
- 8035d50: d123 bne.n 8035d9a <snmp_msg_event+0x4f2>
- {
- struct mib_external_node *en;
- struct snmp_name_ptr np;
- /* get_object_def() answer*/
- en = msg_ps->ext_mib_node;
- 8035d52: 6de6 ldr r6, [r4, #92] ; 0x5c
- np = msg_ps->ext_name_ptr;
- 8035d54: f894 9060 ldrb.w r9, [r4, #96] ; 0x60
- 8035d58: f8d4 8064 ldr.w r8, [r4, #100] ; 0x64
- /* translate answer into a known lifeform */
- en->get_object_def_a(request_id, np.ident_len, np.ident, &msg_ps->ext_object_def);
- 8035d5c: 6bb7 ldr r7, [r6, #56] ; 0x38
- 8035d5e: 4649 mov r1, r9
- 8035d60: 4642 mov r2, r8
- 8035d62: f104 0368 add.w r3, r4, #104 ; 0x68
- 8035d66: 47b8 blx r7
- if (msg_ps->ext_object_def.instance != MIB_OBJECT_NONE)
- 8035d68: f894 0068 ldrb.w r0, [r4, #104] ; 0x68
- 8035d6c: b160 cbz r0, 8035d88 <snmp_msg_event+0x4e0>
- {
- msg_ps->state = SNMP_MSG_EXTERNAL_SET_VALUE;
- 8035d6e: 230b movs r3, #11
- 8035d70: f884 305a strb.w r3, [r4, #90] ; 0x5a
- en->set_value_q(request_id, &msg_ps->ext_object_def,
- msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value);
- 8035d74: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- /* translate answer into a known lifeform */
- en->get_object_def_a(request_id, np.ident_len, np.ident, &msg_ps->ext_object_def);
- if (msg_ps->ext_object_def.instance != MIB_OBJECT_NONE)
- {
- msg_ps->state = SNMP_MSG_EXTERNAL_SET_VALUE;
- en->set_value_q(request_id, &msg_ps->ext_object_def,
- 8035d78: 6b76 ldr r6, [r6, #52] ; 0x34
- 8035d7a: 7c5a ldrb r2, [r3, #17]
- 8035d7c: 695b ldr r3, [r3, #20]
- 8035d7e: 4628 mov r0, r5
- 8035d80: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035d84: 47b0 blx r6
- 8035d86: e08c b.n 8035ea2 <snmp_msg_event+0x5fa>
- msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value);
- }
- else
- {
- en->get_object_def_pc(request_id, np.ident_len, np.ident);
- 8035d88: 4649 mov r1, r9
- 8035d8a: 6cb3 ldr r3, [r6, #72] ; 0x48
- 8035d8c: 4642 mov r2, r8
- 8035d8e: 4798 blx r3
- /* set_value failed, object has disappeared for some odd reason?? */
- snmp_error_response(msg_ps,SNMP_ES_GENERROR);
- 8035d90: 4620 mov r0, r4
- 8035d92: 2105 movs r1, #5
- 8035d94: f7ff fd31 bl 80357fa <snmp_error_response>
- 8035d98: e083 b.n 8035ea2 <snmp_msg_event+0x5fa>
- }
- }
- else if (msg_ps->state == SNMP_MSG_EXTERNAL_SET_VALUE)
- 8035d9a: 2b0b cmp r3, #11
- 8035d9c: f040 8081 bne.w 8035ea2 <snmp_msg_event+0x5fa>
- struct mib_external_node *en;
- /** set_value_a() */
- en = msg_ps->ext_mib_node;
- en->set_value_a(request_id, &msg_ps->ext_object_def,
- msg_ps->vb_ptr->value_len, msg_ps->vb_ptr->value);
- 8035da0: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- {
- struct mib_external_node *en;
- /** set_value_a() */
- en = msg_ps->ext_mib_node;
- en->set_value_a(request_id, &msg_ps->ext_object_def,
- 8035da4: 6de2 ldr r2, [r4, #92] ; 0x5c
- 8035da6: f104 0168 add.w r1, r4, #104 ; 0x68
- 8035daa: 6c55 ldr r5, [r2, #68] ; 0x44
- 8035dac: 7c5a ldrb r2, [r3, #17]
- 8035dae: 695b ldr r3, [r3, #20]
- 8035db0: 47a8 blx r5
- msg_ps->vb_ptr->value_len, msg_ps->vb_ptr->value);
- /** @todo use set_value_pc() if toobig */
- msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE;
- 8035db2: 2306 movs r3, #6
- 8035db4: f884 305a strb.w r3, [r4, #90] ; 0x5a
- msg_ps->vb_idx += 1;
- 8035db8: f894 30f8 ldrb.w r3, [r4, #248] ; 0xf8
- 8035dbc: 3301 adds r3, #1
- 8035dbe: f884 30f8 strb.w r3, [r4, #248] ; 0xf8
- 8035dc2: e06e b.n 8035ea2 <snmp_msg_event+0x5fa>
- (msg_ps->vb_idx < msg_ps->invb.count))
- {
- struct mib_node *mn;
- struct snmp_name_ptr np;
- if (msg_ps->vb_idx == 0)
- 8035dc4: b912 cbnz r2, 8035dcc <snmp_msg_event+0x524>
- {
- msg_ps->vb_ptr = msg_ps->invb.head;
- 8035dc6: f8d4 3100 ldr.w r3, [r4, #256] ; 0x100
- 8035dca: e002 b.n 8035dd2 <snmp_msg_event+0x52a>
- }
- else
- {
- msg_ps->vb_ptr = msg_ps->vb_ptr->next;
- 8035dcc: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035dd0: 681b ldr r3, [r3, #0]
- 8035dd2: f8c4 30fc str.w r3, [r4, #252] ; 0xfc
- }
- /** test object identifier for .iso.org.dod.internet prefix */
- if (snmp_iso_prefix_tst(msg_ps->vb_ptr->ident_len, msg_ps->vb_ptr->ident))
- 8035dd6: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035dda: 7a18 ldrb r0, [r3, #8]
- 8035ddc: 68d9 ldr r1, [r3, #12]
- 8035dde: f7ff fc47 bl 8035670 <snmp_iso_prefix_tst>
- 8035de2: 2800 cmp r0, #0
- 8035de4: d058 beq.n 8035e98 <snmp_msg_event+0x5f0>
- {
- mn = snmp_search_tree((struct mib_node*)&internet, msg_ps->vb_ptr->ident_len - 4,
- 8035de6: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035dea: 4817 ldr r0, [pc, #92] ; (8035e48 <snmp_msg_event+0x5a0>)
- 8035dec: 7a19 ldrb r1, [r3, #8]
- 8035dee: 68da ldr r2, [r3, #12]
- 8035df0: 3904 subs r1, #4
- 8035df2: b2c9 uxtb r1, r1
- 8035df4: 3210 adds r2, #16
- 8035df6: 466b mov r3, sp
- 8035df8: f7ff f9ec bl 80351d4 <snmp_search_tree>
- msg_ps->vb_ptr->ident + 4, &np);
- if (mn != NULL)
- 8035dfc: 4605 mov r5, r0
- 8035dfe: 2800 cmp r0, #0
- 8035e00: d04a beq.n 8035e98 <snmp_msg_event+0x5f0>
- {
- if (mn->node_type == MIB_NODE_EX)
- 8035e02: 7c03 ldrb r3, [r0, #16]
- 8035e04: 2b05 cmp r3, #5
- 8035e06: d110 bne.n 8035e2a <snmp_msg_event+0x582>
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF;
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- 8035e08: 65e0 str r0, [r4, #92] ; 0x5c
- if (mn->node_type == MIB_NODE_EX)
- {
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF;
- 8035e0a: 2307 movs r3, #7
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- msg_ps->ext_name_ptr = np;
- 8035e0c: e896 0003 ldmia.w r6, {r0, r1}
- if (mn->node_type == MIB_NODE_EX)
- {
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF;
- 8035e10: f884 305a strb.w r3, [r4, #90] ; 0x5a
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- msg_ps->ext_name_ptr = np;
- 8035e14: 4b0d ldr r3, [pc, #52] ; (8035e4c <snmp_msg_event+0x5a4>)
- en->get_object_def_q(en->addr_inf, request_id, np.ident_len, np.ident);
- 8035e16: f89d 2000 ldrb.w r2, [sp]
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF;
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- msg_ps->ext_name_ptr = np;
- 8035e1a: e883 0003 stmia.w r3, {r0, r1}
- en->get_object_def_q(en->addr_inf, request_id, np.ident_len, np.ident);
- 8035e1e: 2100 movs r1, #0
- 8035e20: 6aaf ldr r7, [r5, #40] ; 0x28
- 8035e22: 6968 ldr r0, [r5, #20]
- 8035e24: 9b01 ldr r3, [sp, #4]
- 8035e26: 47b8 blx r7
- 8035e28: e03d b.n 8035ea6 <snmp_msg_event+0x5fe>
- else
- {
- /* internal object */
- struct obj_def object_def;
- msg_ps->state = SNMP_MSG_INTERNAL_GET_OBJDEF;
- 8035e2a: 2702 movs r7, #2
- 8035e2c: f884 705a strb.w r7, [r4, #90] ; 0x5a
- mn->get_object_def(np.ident_len, np.ident, &object_def);
- 8035e30: 6803 ldr r3, [r0, #0]
- 8035e32: 9901 ldr r1, [sp, #4]
- 8035e34: f89d 0000 ldrb.w r0, [sp]
- 8035e38: aa02 add r2, sp, #8
- 8035e3a: 4798 blx r3
- if (object_def.instance != MIB_OBJECT_NONE)
- 8035e3c: f89d 3008 ldrb.w r3, [sp, #8]
- 8035e40: 2b00 cmp r3, #0
- 8035e42: f040 80b9 bne.w 8035fb8 <snmp_msg_event+0x710>
- 8035e46: e027 b.n 8035e98 <snmp_msg_event+0x5f0>
- 8035e48: 08045834 .word 0x08045834
- 8035e4c: 2000f750 .word 0x2000f750
- 8035e50: 2000f7fc .word 0x2000f7fc
- 8035e54: 2000f6f0 .word 0x2000f6f0
- 8035e58: 2000f758 .word 0x2000f758
- {
- msg_ps->state = SNMP_MSG_INTERNAL_SET_TEST;
- if (object_def.access & MIB_ACCESS_WRITE)
- {
- if ((object_def.asn_type == msg_ps->vb_ptr->value_type) &&
- 8035e5c: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035e60: f89d 100a ldrb.w r1, [sp, #10]
- 8035e64: 7c1a ldrb r2, [r3, #16]
- 8035e66: 4291 cmp r1, r2
- 8035e68: d10e bne.n 8035e88 <snmp_msg_event+0x5e0>
- (mn->set_test(&object_def,msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value) != 0))
- 8035e6a: 68af ldr r7, [r5, #8]
- 8035e6c: 7c59 ldrb r1, [r3, #17]
- 8035e6e: 695a ldr r2, [r3, #20]
- 8035e70: a802 add r0, sp, #8
- 8035e72: 47b8 blx r7
- {
- msg_ps->state = SNMP_MSG_INTERNAL_SET_TEST;
- if (object_def.access & MIB_ACCESS_WRITE)
- {
- if ((object_def.asn_type == msg_ps->vb_ptr->value_type) &&
- 8035e74: b140 cbz r0, 8035e88 <snmp_msg_event+0x5e0>
- (mn->set_test(&object_def,msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value) != 0))
- {
- msg_ps->state = SNMP_MSG_SEARCH_OBJ;
- 8035e76: 2301 movs r3, #1
- 8035e78: f884 305a strb.w r3, [r4, #90] ; 0x5a
- msg_ps->vb_idx += 1;
- 8035e7c: f894 30f8 ldrb.w r3, [r4, #248] ; 0xf8
- 8035e80: 3301 adds r3, #1
- 8035e82: f884 30f8 strb.w r3, [r4, #248] ; 0xf8
- 8035e86: e006 b.n 8035e96 <snmp_msg_event+0x5ee>
- }
- else
- {
- /* bad value */
- snmp_error_response(msg_ps,SNMP_ES_BADVALUE);
- 8035e88: 4854 ldr r0, [pc, #336] ; (8035fdc <snmp_msg_event+0x734>)
- 8035e8a: 2103 movs r1, #3
- 8035e8c: e001 b.n 8035e92 <snmp_msg_event+0x5ea>
- }
- }
- else
- {
- /* object not available for set */
- snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME);
- 8035e8e: 4853 ldr r0, [pc, #332] ; (8035fdc <snmp_msg_event+0x734>)
- 8035e90: 4639 mov r1, r7
- 8035e92: f7ff fcb2 bl 80357fa <snmp_error_response>
- }
- else
- {
- mn = NULL;
- }
- if (mn == NULL)
- 8035e96: b935 cbnz r5, 8035ea6 <snmp_msg_event+0x5fe>
- {
- /* mn == NULL, noSuchName */
- snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME);
- 8035e98: 4850 ldr r0, [pc, #320] ; (8035fdc <snmp_msg_event+0x734>)
- 8035e9a: 2102 movs r1, #2
- 8035e9c: f7ff fcad bl 80357fa <snmp_error_response>
- 8035ea0: e001 b.n 8035ea6 <snmp_msg_event+0x5fe>
- msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE;
- msg_ps->vb_idx += 1;
- }
- /* test all values before setting */
- while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- 8035ea2: 4c4e ldr r4, [pc, #312] ; (8035fdc <snmp_msg_event+0x734>)
- msg_ps->vb_ptr = msg_ps->vb_ptr->next;
- }
- /** test object identifier for .iso.org.dod.internet prefix */
- if (snmp_iso_prefix_tst(msg_ps->vb_ptr->ident_len, msg_ps->vb_ptr->ident))
- {
- mn = snmp_search_tree((struct mib_node*)&internet, msg_ps->vb_ptr->ident_len - 4,
- 8035ea4: 466e mov r6, sp
- msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE;
- msg_ps->vb_idx += 1;
- }
- /* test all values before setting */
- while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- 8035ea6: f894 205a ldrb.w r2, [r4, #90] ; 0x5a
- 8035eaa: 4b4c ldr r3, [pc, #304] ; (8035fdc <snmp_msg_event+0x734>)
- 8035eac: 2a01 cmp r2, #1
- 8035eae: d151 bne.n 8035f54 <snmp_msg_event+0x6ac>
- (msg_ps->vb_idx < msg_ps->invb.count))
- 8035eb0: f894 20f8 ldrb.w r2, [r4, #248] ; 0xf8
- 8035eb4: f894 1108 ldrb.w r1, [r4, #264] ; 0x108
- msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE;
- msg_ps->vb_idx += 1;
- }
- /* test all values before setting */
- while ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- 8035eb8: 428a cmp r2, r1
- 8035eba: d383 bcc.n 8035dc4 <snmp_msg_event+0x51c>
- 8035ebc: e088 b.n 8035fd0 <snmp_msg_event+0x728>
- }
- if ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- (msg_ps->vb_idx == msg_ps->invb.count))
- {
- msg_ps->vb_idx = 0;
- 8035ebe: 2200 movs r2, #0
- 8035ec0: f883 20f8 strb.w r2, [r3, #248] ; 0xf8
- msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE;
- 8035ec4: 2206 movs r2, #6
- 8035ec6: f883 205a strb.w r2, [r3, #90] ; 0x5a
- 8035eca: e043 b.n 8035f54 <snmp_msg_event+0x6ac>
- (msg_ps->vb_idx < msg_ps->invb.count))
- {
- struct mib_node *mn;
- struct snmp_name_ptr np;
- if (msg_ps->vb_idx == 0)
- 8035ecc: b913 cbnz r3, 8035ed4 <snmp_msg_event+0x62c>
- {
- msg_ps->vb_ptr = msg_ps->invb.head;
- 8035ece: f8d4 3100 ldr.w r3, [r4, #256] ; 0x100
- 8035ed2: e002 b.n 8035eda <snmp_msg_event+0x632>
- }
- else
- {
- msg_ps->vb_ptr = msg_ps->vb_ptr->next;
- 8035ed4: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035ed8: 681b ldr r3, [r3, #0]
- 8035eda: f8c4 30fc str.w r3, [r4, #252] ; 0xfc
- }
- /* skip iso prefix test, was done previously while settesting() */
- mn = snmp_search_tree((struct mib_node*)&internet, msg_ps->vb_ptr->ident_len - 4,
- 8035ede: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035ee2: 483f ldr r0, [pc, #252] ; (8035fe0 <snmp_msg_event+0x738>)
- 8035ee4: 7a19 ldrb r1, [r3, #8]
- 8035ee6: 68da ldr r2, [r3, #12]
- 8035ee8: 3904 subs r1, #4
- 8035eea: b2c9 uxtb r1, r1
- 8035eec: 3210 adds r2, #16
- 8035eee: 466b mov r3, sp
- 8035ef0: f7ff f970 bl 80351d4 <snmp_search_tree>
- msg_ps->vb_ptr->ident + 4, &np);
- /* check if object is still available
- (e.g. external hot-plug thingy present?) */
- if (mn != NULL)
- 8035ef4: 4605 mov r5, r0
- 8035ef6: 2800 cmp r0, #0
- 8035ef8: d02e beq.n 8035f58 <snmp_msg_event+0x6b0>
- {
- if (mn->node_type == MIB_NODE_EX)
- 8035efa: 7c03 ldrb r3, [r0, #16]
- 8035efc: 2b05 cmp r3, #5
- 8035efe: d110 bne.n 8035f22 <snmp_msg_event+0x67a>
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF_S;
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- 8035f00: 65e0 str r0, [r4, #92] ; 0x5c
- if (mn->node_type == MIB_NODE_EX)
- {
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF_S;
- 8035f02: 230a movs r3, #10
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- msg_ps->ext_name_ptr = np;
- 8035f04: e896 0003 ldmia.w r6, {r0, r1}
- if (mn->node_type == MIB_NODE_EX)
- {
- /* external object */
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF_S;
- 8035f08: f884 305a strb.w r3, [r4, #90] ; 0x5a
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- msg_ps->ext_name_ptr = np;
- 8035f0c: 4b35 ldr r3, [pc, #212] ; (8035fe4 <snmp_msg_event+0x73c>)
- en->get_object_def_q(en->addr_inf, request_id, np.ident_len, np.ident);
- 8035f0e: f89d 2000 ldrb.w r2, [sp]
- struct mib_external_node *en = (struct mib_external_node*)mn;
- msg_ps->state = SNMP_MSG_EXTERNAL_GET_OBJDEF_S;
- /* save en && args in msg_ps!! */
- msg_ps->ext_mib_node = en;
- msg_ps->ext_name_ptr = np;
- 8035f12: e883 0003 stmia.w r3, {r0, r1}
- en->get_object_def_q(en->addr_inf, request_id, np.ident_len, np.ident);
- 8035f16: 2100 movs r1, #0
- 8035f18: 6aaf ldr r7, [r5, #40] ; 0x28
- 8035f1a: 6968 ldr r0, [r5, #20]
- 8035f1c: 9b01 ldr r3, [sp, #4]
- 8035f1e: 47b8 blx r7
- 8035f20: e01a b.n 8035f58 <snmp_msg_event+0x6b0>
- else
- {
- /* internal object */
- struct obj_def object_def;
- msg_ps->state = SNMP_MSG_INTERNAL_GET_OBJDEF_S;
- 8035f22: 2305 movs r3, #5
- 8035f24: f884 305a strb.w r3, [r4, #90] ; 0x5a
- mn->get_object_def(np.ident_len, np.ident, &object_def);
- 8035f28: 6803 ldr r3, [r0, #0]
- 8035f2a: 9901 ldr r1, [sp, #4]
- 8035f2c: f89d 0000 ldrb.w r0, [sp]
- 8035f30: aa02 add r2, sp, #8
- 8035f32: 4798 blx r3
- msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE;
- 8035f34: 2306 movs r3, #6
- 8035f36: f884 305a strb.w r3, [r4, #90] ; 0x5a
- mn->set_value(&object_def,msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value);
- 8035f3a: f8d4 30fc ldr.w r3, [r4, #252] ; 0xfc
- 8035f3e: 68ed ldr r5, [r5, #12]
- 8035f40: 7c59 ldrb r1, [r3, #17]
- 8035f42: 695a ldr r2, [r3, #20]
- 8035f44: a802 add r0, sp, #8
- 8035f46: 47a8 blx r5
- msg_ps->vb_idx += 1;
- 8035f48: f894 30f8 ldrb.w r3, [r4, #248] ; 0xf8
- 8035f4c: 3301 adds r3, #1
- 8035f4e: f884 30f8 strb.w r3, [r4, #248] ; 0xf8
- 8035f52: e001 b.n 8035f58 <snmp_msg_event+0x6b0>
- msg_ps->vb_idx = 0;
- msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE;
- }
- /* set all values "atomically" (be as "atomic" as possible) */
- while ((msg_ps->state == SNMP_MSG_INTERNAL_SET_VALUE) &&
- 8035f54: 4c21 ldr r4, [pc, #132] ; (8035fdc <snmp_msg_event+0x734>)
- else
- {
- msg_ps->vb_ptr = msg_ps->vb_ptr->next;
- }
- /* skip iso prefix test, was done previously while settesting() */
- mn = snmp_search_tree((struct mib_node*)&internet, msg_ps->vb_ptr->ident_len - 4,
- 8035f56: 466e mov r6, sp
- msg_ps->vb_idx = 0;
- msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE;
- }
- /* set all values "atomically" (be as "atomic" as possible) */
- while ((msg_ps->state == SNMP_MSG_INTERNAL_SET_VALUE) &&
- 8035f58: f894 305a ldrb.w r3, [r4, #90] ; 0x5a
- 8035f5c: 4d1f ldr r5, [pc, #124] ; (8035fdc <snmp_msg_event+0x734>)
- 8035f5e: 2b06 cmp r3, #6
- 8035f60: d139 bne.n 8035fd6 <snmp_msg_event+0x72e>
- (msg_ps->vb_idx < msg_ps->invb.count))
- 8035f62: f894 30f8 ldrb.w r3, [r4, #248] ; 0xf8
- 8035f66: f894 2108 ldrb.w r2, [r4, #264] ; 0x108
- msg_ps->vb_idx = 0;
- msg_ps->state = SNMP_MSG_INTERNAL_SET_VALUE;
- }
- /* set all values "atomically" (be as "atomic" as possible) */
- while ((msg_ps->state == SNMP_MSG_INTERNAL_SET_VALUE) &&
- 8035f6a: 4293 cmp r3, r2
- 8035f6c: d3ae bcc.n 8035ecc <snmp_msg_event+0x624>
- 8035f6e: e031 b.n 8035fd4 <snmp_msg_event+0x72c>
- (msg_ps->vb_idx == msg_ps->invb.count))
- {
- /* simply echo the input if we can set it
- @todo do we need to return the actual value?
- e.g. if value is silently modified or behaves sticky? */
- msg_ps->outvb = msg_ps->invb;
- 8035f70: f505 7280 add.w r2, r5, #256 ; 0x100
- 8035f74: ca07 ldmia r2, {r0, r1, r2}
- 8035f76: f505 7386 add.w r3, r5, #268 ; 0x10c
- 8035f7a: e883 0007 stmia.w r3, {r0, r1, r2}
- msg_ps->invb.head = NULL;
- 8035f7e: 2300 movs r3, #0
- 8035f80: f8c5 3100 str.w r3, [r5, #256] ; 0x100
- msg_ps->invb.tail = NULL;
- 8035f84: f8c5 3104 str.w r3, [r5, #260] ; 0x104
- msg_ps->invb.count = 0;
- 8035f88: f885 3108 strb.w r3, [r5, #264] ; 0x108
- snmp_ok_response(msg_ps);
- 8035f8c: 4628 mov r0, r5
- 8035f8e: f7ff fc6f bl 8035870 <snmp_ok_response>
- 8035f92: e020 b.n 8035fd6 <snmp_msg_event+0x72e>
- }
- }
- if (mn == NULL)
- {
- /* mn == NULL, noSuchName */
- snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME);
- 8035f94: 4811 ldr r0, [pc, #68] ; (8035fdc <snmp_msg_event+0x734>)
- 8035f96: 2102 movs r1, #2
- 8035f98: f7ff fc2f bl 80357fa <snmp_error_response>
- 8035f9c: e556 b.n 8035a4c <snmp_msg_event+0x1a4>
- }
- if (mn != NULL)
- {
- struct snmp_varbind *vb;
- msg_ps->state = SNMP_MSG_INTERNAL_GET_VALUE;
- 8035f9e: 2303 movs r3, #3
- /* allocate output varbind */
- vb = (struct snmp_varbind *)memp_malloc(MEMP_SNMP_VARBIND);
- 8035fa0: 200c movs r0, #12
- }
- if (mn != NULL)
- {
- struct snmp_varbind *vb;
- msg_ps->state = SNMP_MSG_INTERNAL_GET_VALUE;
- 8035fa2: f884 305a strb.w r3, [r4, #90] ; 0x5a
- /* allocate output varbind */
- vb = (struct snmp_varbind *)memp_malloc(MEMP_SNMP_VARBIND);
- 8035fa6: f7f9 fe11 bl 802fbcc <memp_malloc>
- if (vb != NULL)
- 8035faa: 4605 mov r5, r0
- 8035fac: 2800 cmp r0, #0
- 8035fae: f47f ae31 bne.w 8035c14 <snmp_msg_event+0x36c>
- 8035fb2: e669 b.n 8035c88 <snmp_msg_event+0x3e0>
- {
- /* mn == NULL, noSuchName */
- snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME);
- }
- }
- if ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- 8035fb4: d10f bne.n 8035fd6 <snmp_msg_event+0x72e>
- 8035fb6: e555 b.n 8035a64 <snmp_msg_event+0x1bc>
- /* search failed, object id points to unknown object (nosuchname) */
- mn = NULL;
- }
- if (mn != NULL)
- {
- msg_ps->state = SNMP_MSG_INTERNAL_SET_TEST;
- 8035fb8: 2304 movs r3, #4
- 8035fba: f884 305a strb.w r3, [r4, #90] ; 0x5a
- if (object_def.access & MIB_ACCESS_WRITE)
- 8035fbe: f89d 3009 ldrb.w r3, [sp, #9]
- 8035fc2: f003 0302 and.w r3, r3, #2
- 8035fc6: b2db uxtb r3, r3
- 8035fc8: 2b00 cmp r3, #0
- 8035fca: f47f af47 bne.w 8035e5c <snmp_msg_event+0x5b4>
- 8035fce: e75e b.n 8035e8e <snmp_msg_event+0x5e6>
- /* mn == NULL, noSuchName */
- snmp_error_response(msg_ps,SNMP_ES_NOSUCHNAME);
- }
- }
- if ((msg_ps->state == SNMP_MSG_SEARCH_OBJ) &&
- 8035fd0: d1c0 bne.n 8035f54 <snmp_msg_event+0x6ac>
- 8035fd2: e774 b.n 8035ebe <snmp_msg_event+0x616>
- mn->set_value(&object_def,msg_ps->vb_ptr->value_len,msg_ps->vb_ptr->value);
- msg_ps->vb_idx += 1;
- }
- }
- }
- if ((msg_ps->state == SNMP_MSG_INTERNAL_SET_VALUE) &&
- 8035fd4: d0cc beq.n 8035f70 <snmp_msg_event+0x6c8>
- else if(msg_ps->rt == SNMP_ASN1_PDU_SET_REQ)
- {
- snmp_msg_set_event(request_id, msg_ps);
- }
- }
- }
- 8035fd6: b027 add sp, #156 ; 0x9c
- 8035fd8: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
- 8035fdc: 2000f6f0 .word 0x2000f6f0
- 8035fe0: 08045834 .word 0x08045834
- 8035fe4: 2000f750 .word 0x2000f750
- 08035fe8 <snmp_pdu_dec_varbindlist>:
- return ERR_OK;
- }
- static err_t
- snmp_pdu_dec_varbindlist(struct pbuf *p, u16_t ofs, u16_t *ofs_ret, struct snmp_msg_pstat *m_stat)
- {
- 8035fe8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8035fec: b0c7 sub sp, #284 ; 0x11c
- u16_t len, vb_len;
- u8_t len_octets;
- u8_t type;
- /* variable binding list */
- snmp_asn1_dec_type(p, ofs, &type);
- 8035fee: f10d 070b add.w r7, sp, #11
- return ERR_OK;
- }
- static err_t
- snmp_pdu_dec_varbindlist(struct pbuf *p, u16_t ofs, u16_t *ofs_ret, struct snmp_msg_pstat *m_stat)
- {
- 8035ff2: 468a mov sl, r1
- 8035ff4: 4691 mov r9, r2
- u16_t len, vb_len;
- u8_t len_octets;
- u8_t type;
- /* variable binding list */
- snmp_asn1_dec_type(p, ofs, &type);
- 8035ff6: 463a mov r2, r7
- return ERR_OK;
- }
- static err_t
- snmp_pdu_dec_varbindlist(struct pbuf *p, u16_t ofs, u16_t *ofs_ret, struct snmp_msg_pstat *m_stat)
- {
- 8035ff8: 4604 mov r4, r0
- 8035ffa: 461d mov r5, r3
- u8_t len_octets;
- u8_t type;
- /* variable binding list */
- snmp_asn1_dec_type(p, ofs, &type);
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &vb_len);
- 8035ffc: f10d 060e add.w r6, sp, #14
- u16_t len, vb_len;
- u8_t len_octets;
- u8_t type;
- /* variable binding list */
- snmp_asn1_dec_type(p, ofs, &type);
- 8036000: f7fd f920 bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &vb_len);
- 8036004: f10a 0101 add.w r1, sl, #1
- 8036008: 4620 mov r0, r4
- 803600a: b289 uxth r1, r1
- 803600c: f10d 020a add.w r2, sp, #10
- 8036010: 4633 mov r3, r6
- 8036012: f7fd f92c bl 803326e <snmp_asn1_dec_length>
- if ((derr != ERR_OK) ||
- 8036016: b910 cbnz r0, 803601e <snmp_pdu_dec_varbindlist+0x36>
- 8036018: 783b ldrb r3, [r7, #0]
- 803601a: 2b30 cmp r3, #48 ; 0x30
- 803601c: d002 beq.n 8036024 <snmp_pdu_dec_varbindlist+0x3c>
- (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)))
- {
- snmp_inc_snmpinasnparseerrs();
- 803601e: f7fe ff21 bl 8034e64 <snmp_inc_snmpinasnparseerrs>
- 8036022: e02b b.n 803607c <snmp_pdu_dec_varbindlist+0x94>
- return ERR_ARG;
- }
- ofs += (1 + len_octets);
- 8036024: f89d 800a ldrb.w r8, [sp, #10]
- /* start with empty list */
- m_stat->invb.count = 0;
- 8036028: f885 0108 strb.w r0, [r5, #264] ; 0x108
- (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)))
- {
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- ofs += (1 + len_octets);
- 803602c: f108 0801 add.w r8, r8, #1
- 8036030: 44d0 add r8, sl
- 8036032: fa1f f888 uxth.w r8, r8
- /* start with empty list */
- m_stat->invb.count = 0;
- m_stat->invb.head = NULL;
- 8036036: f8c5 0100 str.w r0, [r5, #256] ; 0x100
- m_stat->invb.tail = NULL;
- 803603a: f8c5 0104 str.w r0, [r5, #260] ; 0x104
- while (vb_len > 0)
- 803603e: e118 b.n 8036272 <snmp_pdu_dec_varbindlist+0x28a>
- {
- struct snmp_obj_id oid, oid_value;
- struct snmp_varbind *vb;
- snmp_asn1_dec_type(p, ofs, &type);
- 8036040: 4641 mov r1, r8
- 8036042: 463a mov r2, r7
- 8036044: 4620 mov r0, r4
- 8036046: f7fd f8fd bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- 803604a: f108 0101 add.w r1, r8, #1
- 803604e: 4620 mov r0, r4
- 8036050: b289 uxth r1, r1
- 8036052: f10d 020a add.w r2, sp, #10
- 8036056: ab03 add r3, sp, #12
- 8036058: f7fd f909 bl 803326e <snmp_asn1_dec_length>
- if ((derr != ERR_OK) ||
- 803605c: b940 cbnz r0, 8036070 <snmp_pdu_dec_varbindlist+0x88>
- 803605e: 783b ldrb r3, [r7, #0]
- 8036060: 2b30 cmp r3, #48 ; 0x30
- 8036062: d105 bne.n 8036070 <snmp_pdu_dec_varbindlist+0x88>
- (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)) ||
- (len == 0) || (len > vb_len))
- 8036064: f8bd 200c ldrh.w r2, [sp, #12]
- struct snmp_varbind *vb;
- snmp_asn1_dec_type(p, ofs, &type);
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- if ((derr != ERR_OK) ||
- (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)) ||
- 8036068: b112 cbz r2, 8036070 <snmp_pdu_dec_varbindlist+0x88>
- (len == 0) || (len > vb_len))
- 803606a: 8833 ldrh r3, [r6, #0]
- 803606c: 429a cmp r2, r3
- 803606e: d907 bls.n 8036080 <snmp_pdu_dec_varbindlist+0x98>
- {
- snmp_inc_snmpinasnparseerrs();
- 8036070: f7fe fef8 bl 8034e64 <snmp_inc_snmpinasnparseerrs>
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- 8036074: f505 7080 add.w r0, r5, #256 ; 0x100
- 8036078: f7ff fbb1 bl 80357de <snmp_varbind_list_free>
- 803607c: 20f2 movs r0, #242 ; 0xf2
- 803607e: e109 b.n 8036294 <snmp_pdu_dec_varbindlist+0x2ac>
- return ERR_ARG;
- }
- ofs += (1 + len_octets);
- 8036080: f89d 200a ldrb.w r2, [sp, #10]
- 8036084: 4490 add r8, r2
- 8036086: fa1f f888 uxth.w r8, r8
- 803608a: f108 0a01 add.w sl, r8, #1
- vb_len -= (1 + len_octets);
- 803608e: 43d2 mvns r2, r2
- snmp_inc_snmpinasnparseerrs();
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- return ERR_ARG;
- }
- ofs += (1 + len_octets);
- 8036090: fa1f fa8a uxth.w sl, sl
- vb_len -= (1 + len_octets);
- 8036094: 189b adds r3, r3, r2
- snmp_asn1_dec_type(p, ofs, &type);
- 8036096: 4651 mov r1, sl
- 8036098: 463a mov r2, r7
- 803609a: 4620 mov r0, r4
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- return ERR_ARG;
- }
- ofs += (1 + len_octets);
- vb_len -= (1 + len_octets);
- 803609c: 8033 strh r3, [r6, #0]
- snmp_asn1_dec_type(p, ofs, &type);
- 803609e: f7fd f8d1 bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- 80360a2: f108 0102 add.w r1, r8, #2
- 80360a6: 4620 mov r0, r4
- 80360a8: b289 uxth r1, r1
- 80360aa: f10d 020a add.w r2, sp, #10
- 80360ae: ab03 add r3, sp, #12
- 80360b0: f7fd f8dd bl 803326e <snmp_asn1_dec_length>
- if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID)))
- 80360b4: 2800 cmp r0, #0
- 80360b6: d1db bne.n 8036070 <snmp_pdu_dec_varbindlist+0x88>
- 80360b8: 783b ldrb r3, [r7, #0]
- 80360ba: 2b06 cmp r3, #6
- 80360bc: d1d8 bne.n 8036070 <snmp_pdu_dec_varbindlist+0x88>
- snmp_inc_snmpinasnparseerrs();
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- return ERR_ARG;
- }
- derr = snmp_asn1_dec_oid(p, ofs + 1 + len_octets, len, &oid);
- 80360be: f89d 100a ldrb.w r1, [sp, #10]
- 80360c2: f8bd 200c ldrh.w r2, [sp, #12]
- 80360c6: 3101 adds r1, #1
- 80360c8: 4451 add r1, sl
- 80360ca: 4620 mov r0, r4
- 80360cc: b289 uxth r1, r1
- 80360ce: ab04 add r3, sp, #16
- 80360d0: f7fd f9fc bl 80334cc <snmp_asn1_dec_oid>
- if (derr != ERR_OK)
- 80360d4: 2800 cmp r0, #0
- 80360d6: d1cb bne.n 8036070 <snmp_pdu_dec_varbindlist+0x88>
- snmp_inc_snmpinasnparseerrs();
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- return ERR_ARG;
- }
- ofs += (1 + len_octets + len);
- 80360d8: f89d 300a ldrb.w r3, [sp, #10]
- 80360dc: f8bd 200c ldrh.w r2, [sp, #12]
- 80360e0: 1899 adds r1, r3, r2
- 80360e2: 448a add sl, r1
- 80360e4: fa1f fa8a uxth.w sl, sl
- vb_len -= (1 + len_octets + len);
- 80360e8: 8831 ldrh r1, [r6, #0]
- snmp_inc_snmpinasnparseerrs();
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- return ERR_ARG;
- }
- ofs += (1 + len_octets + len);
- 80360ea: f10a 0801 add.w r8, sl, #1
- vb_len -= (1 + len_octets + len);
- 80360ee: 1a8a subs r2, r1, r2
- snmp_inc_snmpinasnparseerrs();
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- return ERR_ARG;
- }
- ofs += (1 + len_octets + len);
- 80360f0: fa1f f888 uxth.w r8, r8
- vb_len -= (1 + len_octets + len);
- 80360f4: 43db mvns r3, r3
- 80360f6: 18d3 adds r3, r2, r3
- snmp_asn1_dec_type(p, ofs, &type);
- 80360f8: 4641 mov r1, r8
- 80360fa: 463a mov r2, r7
- 80360fc: 4620 mov r0, r4
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- return ERR_ARG;
- }
- ofs += (1 + len_octets + len);
- vb_len -= (1 + len_octets + len);
- 80360fe: 8033 strh r3, [r6, #0]
- snmp_asn1_dec_type(p, ofs, &type);
- 8036100: f7fd f8a0 bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- 8036104: f10a 0102 add.w r1, sl, #2
- 8036108: 4620 mov r0, r4
- 803610a: b289 uxth r1, r1
- 803610c: f10d 020a add.w r2, sp, #10
- 8036110: ab03 add r3, sp, #12
- 8036112: f7fd f8ac bl 803326e <snmp_asn1_dec_length>
- if (derr != ERR_OK)
- 8036116: 2800 cmp r0, #0
- 8036118: d1aa bne.n 8036070 <snmp_pdu_dec_varbindlist+0x88>
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- return ERR_ARG;
- }
- switch (type)
- 803611a: 7839 ldrb r1, [r7, #0]
- 803611c: 2906 cmp r1, #6
- 803611e: d047 beq.n 80361b0 <snmp_pdu_dec_varbindlist+0x1c8>
- 8036120: d805 bhi.n 803612e <snmp_pdu_dec_varbindlist+0x146>
- 8036122: 2904 cmp r1, #4
- 8036124: d036 beq.n 8036194 <snmp_pdu_dec_varbindlist+0x1ac>
- 8036126: d839 bhi.n 803619c <snmp_pdu_dec_varbindlist+0x1b4>
- 8036128: 2902 cmp r1, #2
- 803612a: d1a1 bne.n 8036070 <snmp_pdu_dec_varbindlist+0x88>
- 803612c: e009 b.n 8036142 <snmp_pdu_dec_varbindlist+0x15a>
- 803612e: 2943 cmp r1, #67 ; 0x43
- 8036130: d804 bhi.n 803613c <snmp_pdu_dec_varbindlist+0x154>
- 8036132: 2941 cmp r1, #65 ; 0x41
- 8036134: d219 bcs.n 803616a <snmp_pdu_dec_varbindlist+0x182>
- 8036136: 2940 cmp r1, #64 ; 0x40
- 8036138: d19a bne.n 8036070 <snmp_pdu_dec_varbindlist+0x88>
- 803613a: e069 b.n 8036210 <snmp_pdu_dec_varbindlist+0x228>
- 803613c: 2944 cmp r1, #68 ; 0x44
- 803613e: d197 bne.n 8036070 <snmp_pdu_dec_varbindlist+0x88>
- 8036140: e028 b.n 8036194 <snmp_pdu_dec_varbindlist+0x1ac>
- {
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG):
- vb = snmp_varbind_alloc(&oid, type, sizeof(s32_t));
- 8036142: a804 add r0, sp, #16
- 8036144: 2204 movs r2, #4
- 8036146: f7ff faf7 bl 8035738 <snmp_varbind_alloc>
- if (vb != NULL)
- 803614a: 4683 mov fp, r0
- 803614c: 2800 cmp r0, #0
- 803614e: d08f beq.n 8036070 <snmp_pdu_dec_varbindlist+0x88>
- {
- s32_t *vptr = (s32_t*)vb->value;
- derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, vptr);
- 8036150: f89d 100a ldrb.w r1, [sp, #10]
- 8036154: f8bd 200c ldrh.w r2, [sp, #12]
- 8036158: f8db 3014 ldr.w r3, [fp, #20]
- 803615c: 3101 adds r1, #1
- 803615e: 4441 add r1, r8
- 8036160: 4620 mov r0, r4
- 8036162: b289 uxth r1, r1
- 8036164: f7fd f959 bl 803341a <snmp_asn1_dec_s32t>
- 8036168: e06b b.n 8036242 <snmp_pdu_dec_varbindlist+0x25a>
- }
- break;
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS):
- vb = snmp_varbind_alloc(&oid, type, sizeof(u32_t));
- 803616a: a804 add r0, sp, #16
- 803616c: 2204 movs r2, #4
- 803616e: f7ff fae3 bl 8035738 <snmp_varbind_alloc>
- if (vb != NULL)
- 8036172: 4683 mov fp, r0
- 8036174: 2800 cmp r0, #0
- 8036176: f43f af7b beq.w 8036070 <snmp_pdu_dec_varbindlist+0x88>
- {
- u32_t *vptr = (u32_t*)vb->value;
- derr = snmp_asn1_dec_u32t(p, ofs + 1 + len_octets, len, vptr);
- 803617a: f89d 100a ldrb.w r1, [sp, #10]
- 803617e: f8bd 200c ldrh.w r2, [sp, #12]
- 8036182: f8db 3014 ldr.w r3, [fp, #20]
- 8036186: 3101 adds r1, #1
- 8036188: 4441 add r1, r8
- 803618a: 4620 mov r0, r4
- 803618c: b289 uxth r1, r1
- 803618e: f7fd f8f0 bl 8033372 <snmp_asn1_dec_u32t>
- 8036192: e056 b.n 8036242 <snmp_pdu_dec_varbindlist+0x25a>
- }
- break;
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_OPAQUE):
- LWIP_ASSERT("invalid length", len <= 0xff);
- vb = snmp_varbind_alloc(&oid, type, (u8_t)len);
- 8036194: a804 add r0, sp, #16
- 8036196: f89d 200c ldrb.w r2, [sp, #12]
- 803619a: e03f b.n 803621c <snmp_pdu_dec_varbindlist+0x234>
- {
- derr = ERR_ARG;
- }
- break;
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_NUL):
- vb = snmp_varbind_alloc(&oid, type, 0);
- 803619c: 2105 movs r1, #5
- 803619e: a804 add r0, sp, #16
- 80361a0: 2200 movs r2, #0
- 80361a2: f7ff fac9 bl 8035738 <snmp_varbind_alloc>
- if (vb != NULL)
- 80361a6: 4601 mov r1, r0
- 80361a8: 2800 cmp r0, #0
- 80361aa: f43f af61 beq.w 8036070 <snmp_pdu_dec_varbindlist+0x88>
- 80361ae: e02a b.n 8036206 <snmp_pdu_dec_varbindlist+0x21e>
- {
- derr = ERR_ARG;
- }
- break;
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID):
- derr = snmp_asn1_dec_oid(p, ofs + 1 + len_octets, len, &oid_value);
- 80361b0: f89d 100a ldrb.w r1, [sp, #10]
- 80361b4: f8bd 200c ldrh.w r2, [sp, #12]
- 80361b8: 3101 adds r1, #1
- 80361ba: 4441 add r1, r8
- 80361bc: 4620 mov r0, r4
- 80361be: b289 uxth r1, r1
- 80361c0: ab25 add r3, sp, #148 ; 0x94
- 80361c2: f7fd f983 bl 80334cc <snmp_asn1_dec_oid>
- if (derr == ERR_OK)
- 80361c6: 2800 cmp r0, #0
- 80361c8: f47f af52 bne.w 8036070 <snmp_pdu_dec_varbindlist+0x88>
- {
- vb = snmp_varbind_alloc(&oid, type, oid_value.len * sizeof(s32_t));
- 80361cc: f89d 2094 ldrb.w r2, [sp, #148] ; 0x94
- 80361d0: 7839 ldrb r1, [r7, #0]
- 80361d2: 0092 lsls r2, r2, #2
- 80361d4: a804 add r0, sp, #16
- 80361d6: f002 02fc and.w r2, r2, #252 ; 0xfc
- 80361da: f7ff faad bl 8035738 <snmp_varbind_alloc>
- if (vb != NULL)
- 80361de: 4601 mov r1, r0
- 80361e0: 2800 cmp r0, #0
- 80361e2: f43f af45 beq.w 8036070 <snmp_pdu_dec_varbindlist+0x88>
- {
- u8_t i = oid_value.len;
- 80361e6: f89d 3094 ldrb.w r3, [sp, #148] ; 0x94
- s32_t *vptr = (s32_t*)vb->value;
- 80361ea: 6940 ldr r0, [r0, #20]
- while(i > 0)
- 80361ec: e009 b.n 8036202 <snmp_pdu_dec_varbindlist+0x21a>
- {
- i--;
- 80361ee: 3b01 subs r3, #1
- 80361f0: b2db uxtb r3, r3
- vptr[i] = oid_value.id[i];
- 80361f2: f50d 7e8c add.w lr, sp, #280 ; 0x118
- 80361f6: eb0e 0283 add.w r2, lr, r3, lsl #2
- 80361fa: f852 2c80 ldr.w r2, [r2, #-128]
- 80361fe: f840 2023 str.w r2, [r0, r3, lsl #2]
- if (vb != NULL)
- {
- u8_t i = oid_value.len;
- s32_t *vptr = (s32_t*)vb->value;
- while(i > 0)
- 8036202: 2b00 cmp r3, #0
- 8036204: d1f3 bne.n 80361ee <snmp_pdu_dec_varbindlist+0x206>
- {
- i--;
- vptr[i] = oid_value.id[i];
- }
- snmp_varbind_tail_add(&m_stat->invb, vb);
- 8036206: f505 7080 add.w r0, r5, #256 ; 0x100
- 803620a: f7ff fb41 bl 8035890 <snmp_varbind_tail_add>
- 803620e: e022 b.n 8036256 <snmp_pdu_dec_varbindlist+0x26e>
- derr = ERR_ARG;
- }
- }
- break;
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR):
- if (len == 4)
- 8036210: f8bd 200c ldrh.w r2, [sp, #12]
- 8036214: 2a04 cmp r2, #4
- 8036216: f47f af2b bne.w 8036070 <snmp_pdu_dec_varbindlist+0x88>
- {
- /* must be exactly 4 octets! */
- vb = snmp_varbind_alloc(&oid, type, 4);
- 803621a: a804 add r0, sp, #16
- 803621c: f7ff fa8c bl 8035738 <snmp_varbind_alloc>
- if (vb != NULL)
- 8036220: 4683 mov fp, r0
- 8036222: 2800 cmp r0, #0
- 8036224: f43f af24 beq.w 8036070 <snmp_pdu_dec_varbindlist+0x88>
- {
- derr = snmp_asn1_dec_raw(p, ofs + 1 + len_octets, len, vb->value_len, (u8_t*)vb->value);
- 8036228: f89d 100a ldrb.w r1, [sp, #10]
- 803622c: 7c43 ldrb r3, [r0, #17]
- 803622e: 6940 ldr r0, [r0, #20]
- 8036230: f8bd 200c ldrh.w r2, [sp, #12]
- 8036234: 9000 str r0, [sp, #0]
- 8036236: 3101 adds r1, #1
- 8036238: 4441 add r1, r8
- 803623a: 4620 mov r0, r4
- 803623c: b289 uxth r1, r1
- 803623e: f7fd f9e1 bl 8033604 <snmp_asn1_dec_raw>
- 8036242: 4682 mov sl, r0
- snmp_varbind_tail_add(&m_stat->invb, vb);
- 8036244: 4659 mov r1, fp
- 8036246: f505 7080 add.w r0, r5, #256 ; 0x100
- 803624a: f7ff fb21 bl 8035890 <snmp_varbind_tail_add>
- break;
- default:
- derr = ERR_ARG;
- break;
- }
- if (derr != ERR_OK)
- 803624e: f1ba 0f00 cmp.w sl, #0
- 8036252: f47f af0d bne.w 8036070 <snmp_pdu_dec_varbindlist+0x88>
- snmp_inc_snmpinasnparseerrs();
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- return ERR_ARG;
- }
- ofs += (1 + len_octets + len);
- 8036256: f8bd 200c ldrh.w r2, [sp, #12]
- 803625a: f89d 300a ldrb.w r3, [sp, #10]
- 803625e: 1c51 adds r1, r2, #1
- 8036260: 1859 adds r1, r3, r1
- 8036262: 4488 add r8, r1
- vb_len -= (1 + len_octets + len);
- 8036264: 8831 ldrh r1, [r6, #0]
- 8036266: 43db mvns r3, r3
- 8036268: 1a8a subs r2, r1, r2
- 803626a: 18d3 adds r3, r2, r3
- snmp_inc_snmpinasnparseerrs();
- /* free varbinds (if available) */
- snmp_varbind_list_free(&m_stat->invb);
- return ERR_ARG;
- }
- ofs += (1 + len_octets + len);
- 803626c: fa1f f888 uxth.w r8, r8
- vb_len -= (1 + len_octets + len);
- 8036270: 8033 strh r3, [r6, #0]
- /* start with empty list */
- m_stat->invb.count = 0;
- m_stat->invb.head = NULL;
- m_stat->invb.tail = NULL;
- while (vb_len > 0)
- 8036272: 8833 ldrh r3, [r6, #0]
- 8036274: 2b00 cmp r3, #0
- 8036276: f47f aee3 bne.w 8036040 <snmp_pdu_dec_varbindlist+0x58>
- }
- ofs += (1 + len_octets + len);
- vb_len -= (1 + len_octets + len);
- }
- if (m_stat->rt == SNMP_ASN1_PDU_SET_REQ)
- 803627a: 7aab ldrb r3, [r5, #10]
- 803627c: f895 0108 ldrb.w r0, [r5, #264] ; 0x108
- 8036280: 2b03 cmp r3, #3
- 8036282: d102 bne.n 803628a <snmp_pdu_dec_varbindlist+0x2a2>
- {
- snmp_add_snmpintotalsetvars(m_stat->invb.count);
- 8036284: f7fe fe26 bl 8034ed4 <snmp_add_snmpintotalsetvars>
- 8036288: e001 b.n 803628e <snmp_pdu_dec_varbindlist+0x2a6>
- }
- else
- {
- snmp_add_snmpintotalreqvars(m_stat->invb.count);
- 803628a: f7fe fe1b bl 8034ec4 <snmp_add_snmpintotalreqvars>
- }
- *ofs_ret = ofs;
- 803628e: f8a9 8000 strh.w r8, [r9]
- return ERR_OK;
- 8036292: 2000 movs r0, #0
- }
- 8036294: b240 sxtb r0, r0
- 8036296: b047 add sp, #284 ; 0x11c
- 8036298: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 0803629c <snmp_recv>:
- /* lwIP UDP receive callback function */
- static void
- snmp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- {
- 803629c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- LWIP_UNUSED_ARG(arg);
- /* traverse input message process list, look for SNMP_MSG_EMPTY */
- msg_ps = &msg_input_list[0];
- req_idx = 0;
- while ((req_idx < SNMP_CONCURRENT_REQUESTS) && (msg_ps->state != SNMP_MSG_EMPTY))
- 80362a0: 4da3 ldr r5, [pc, #652] ; (8036530 <snmp_recv+0x294>)
- snmp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- {
- volatile struct snmp_msg_pstat *msg_ps;
- u8_t req_idx;
- err_t err_ret;
- u16_t payload_len = p->tot_len;
- 80362a2: 8917 ldrh r7, [r2, #8]
- LWIP_UNUSED_ARG(arg);
- /* traverse input message process list, look for SNMP_MSG_EMPTY */
- msg_ps = &msg_input_list[0];
- req_idx = 0;
- while ((req_idx < SNMP_CONCURRENT_REQUESTS) && (msg_ps->state != SNMP_MSG_EMPTY))
- 80362a4: f895 605a ldrb.w r6, [r5, #90] ; 0x5a
- /* lwIP UDP receive callback function */
- static void
- snmp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- {
- 80362a8: b087 sub sp, #28
- 80362aa: 4699 mov r9, r3
- volatile struct snmp_msg_pstat *msg_ps;
- u8_t req_idx;
- err_t err_ret;
- u16_t payload_len = p->tot_len;
- u16_t payload_ofs = 0;
- u16_t varbind_ofs = 0;
- 80362ac: 2300 movs r3, #0
- /* lwIP UDP receive callback function */
- static void
- snmp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
- {
- 80362ae: 4688 mov r8, r1
- 80362b0: 4614 mov r4, r2
- volatile struct snmp_msg_pstat *msg_ps;
- u8_t req_idx;
- err_t err_ret;
- u16_t payload_len = p->tot_len;
- u16_t payload_ofs = 0;
- u16_t varbind_ofs = 0;
- 80362b2: f8ad 3010 strh.w r3, [sp, #16]
- LWIP_UNUSED_ARG(arg);
- /* traverse input message process list, look for SNMP_MSG_EMPTY */
- msg_ps = &msg_input_list[0];
- req_idx = 0;
- while ((req_idx < SNMP_CONCURRENT_REQUESTS) && (msg_ps->state != SNMP_MSG_EMPTY))
- 80362b6: 2e00 cmp r6, #0
- 80362b8: f000 81aa beq.w 8036610 <snmp_recv+0x374>
- msg_ps++;
- }
- if (req_idx == SNMP_CONCURRENT_REQUESTS)
- {
- /* exceeding number of concurrent requests */
- pbuf_free(p);
- 80362bc: 4620 mov r0, r4
- 80362be: f7f9 fda5 bl 802fe0c <pbuf_free>
- 80362c2: e1d6 b.n 8036672 <snmp_recv+0x3d6>
- ofs_base = ofs;
- snmp_asn1_dec_type(p, ofs, &type);
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- if ((derr != ERR_OK) ||
- (pdu_len != (1 + len_octets + len)) ||
- 80362c4: f89d 600e ldrb.w r6, [sp, #14]
- 80362c8: f8bd 3012 ldrh.w r3, [sp, #18]
- 80362cc: 1c75 adds r5, r6, #1
- 80362ce: 18eb adds r3, r5, r3
- s32_t version;
- ofs_base = ofs;
- snmp_asn1_dec_type(p, ofs, &type);
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- if ((derr != ERR_OK) ||
- 80362d0: 429f cmp r7, r3
- 80362d2: f040 80c4 bne.w 803645e <snmp_recv+0x1c2>
- (pdu_len != (1 + len_octets + len)) ||
- 80362d6: f89d 300f ldrb.w r3, [sp, #15]
- 80362da: 2b30 cmp r3, #48 ; 0x30
- 80362dc: d000 beq.n 80362e0 <snmp_recv+0x44>
- 80362de: e0be b.n 803645e <snmp_recv+0x1c2>
- (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)))
- {
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- ofs += (1 + len_octets);
- 80362e0: b2ad uxth r5, r5
- snmp_asn1_dec_type(p, ofs, &type);
- 80362e2: 4629 mov r1, r5
- 80362e4: f10d 020f add.w r2, sp, #15
- 80362e8: 4620 mov r0, r4
- 80362ea: f7fc ffab bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- 80362ee: 4620 mov r0, r4
- 80362f0: 1cb1 adds r1, r6, #2
- 80362f2: f10d 020e add.w r2, sp, #14
- 80362f6: f10d 0312 add.w r3, sp, #18
- 80362fa: f7fc ffb8 bl 803326e <snmp_asn1_dec_length>
- if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)))
- 80362fe: 2800 cmp r0, #0
- 8036300: f040 80ad bne.w 803645e <snmp_recv+0x1c2>
- 8036304: f89d 300f ldrb.w r3, [sp, #15]
- 8036308: 2b02 cmp r3, #2
- 803630a: f040 80a8 bne.w 803645e <snmp_recv+0x1c2>
- {
- /* can't decode or no integer (version) */
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, &version);
- 803630e: f89d 100e ldrb.w r1, [sp, #14]
- 8036312: f8bd 2012 ldrh.w r2, [sp, #18]
- 8036316: 3101 adds r1, #1
- 8036318: 4620 mov r0, r4
- 803631a: 1869 adds r1, r5, r1
- 803631c: ab05 add r3, sp, #20
- 803631e: f7fd f87c bl 803341a <snmp_asn1_dec_s32t>
- if (derr != ERR_OK)
- 8036322: 2800 cmp r0, #0
- 8036324: f040 809b bne.w 803645e <snmp_recv+0x1c2>
- {
- /* can't decode */
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- if (version != 0)
- 8036328: 9b05 ldr r3, [sp, #20]
- 803632a: b113 cbz r3, 8036332 <snmp_recv+0x96>
- {
- /* not version 1 */
- snmp_inc_snmpinbadversions();
- 803632c: f7fe fd8a bl 8034e44 <snmp_inc_snmpinbadversions>
- 8036330: e7c4 b.n 80362bc <snmp_recv+0x20>
- return ERR_ARG;
- }
- ofs += (1 + len_octets + len);
- 8036332: f89d 200e ldrb.w r2, [sp, #14]
- 8036336: f8bd 3012 ldrh.w r3, [sp, #18]
- 803633a: 18d3 adds r3, r2, r3
- 803633c: 18ed adds r5, r5, r3
- 803633e: b2ad uxth r5, r5
- 8036340: 1c6e adds r6, r5, #1
- 8036342: b2b6 uxth r6, r6
- snmp_asn1_dec_type(p, ofs, &type);
- 8036344: 4631 mov r1, r6
- 8036346: f10d 020f add.w r2, sp, #15
- 803634a: 4620 mov r0, r4
- 803634c: f7fc ff7a bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- 8036350: 1ca9 adds r1, r5, #2
- 8036352: 4620 mov r0, r4
- 8036354: b289 uxth r1, r1
- 8036356: f10d 020e add.w r2, sp, #14
- 803635a: f10d 0312 add.w r3, sp, #18
- 803635e: f7fc ff86 bl 803326e <snmp_asn1_dec_length>
- if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR)))
- 8036362: 2800 cmp r0, #0
- 8036364: d17b bne.n 803645e <snmp_recv+0x1c2>
- 8036366: f89d 300f ldrb.w r3, [sp, #15]
- 803636a: 2b04 cmp r3, #4
- 803636c: d177 bne.n 803645e <snmp_recv+0x1c2>
- {
- /* can't decode or no octet string (community) */
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- derr = snmp_asn1_dec_raw(p, ofs + 1 + len_octets, len, SNMP_COMMUNITY_STR_LEN, m_stat->community);
- 803636e: f89d 100e ldrb.w r1, [sp, #14]
- 8036372: 4d70 ldr r5, [pc, #448] ; (8036534 <snmp_recv+0x298>)
- 8036374: f8bd 2012 ldrh.w r2, [sp, #18]
- 8036378: 9500 str r5, [sp, #0]
- 803637a: 3101 adds r1, #1
- 803637c: 1871 adds r1, r6, r1
- 803637e: 4620 mov r0, r4
- 8036380: b289 uxth r1, r1
- 8036382: 2340 movs r3, #64 ; 0x40
- 8036384: f7fd f93e bl 8033604 <snmp_asn1_dec_raw>
- if (derr != ERR_OK)
- 8036388: 2800 cmp r0, #0
- 803638a: d168 bne.n 803645e <snmp_recv+0x1c2>
- {
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- /* add zero terminator */
- len = ((len < (SNMP_COMMUNITY_STR_LEN))?(len):(SNMP_COMMUNITY_STR_LEN));
- 803638c: f8bd 3012 ldrh.w r3, [sp, #18]
- m_stat->community[len] = 0;
- 8036390: f1a5 0218 sub.w r2, r5, #24
- {
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- /* add zero terminator */
- len = ((len < (SNMP_COMMUNITY_STR_LEN))?(len):(SNMP_COMMUNITY_STR_LEN));
- 8036394: 2b40 cmp r3, #64 ; 0x40
- 8036396: bf28 it cs
- 8036398: 2340 movcs r3, #64 ; 0x40
- m_stat->community[len] = 0;
- 803639a: 18d1 adds r1, r2, r3
- snmp_inc_snmpinbadcommunitynames();
- snmp_authfail_trap();
- return ERR_ARG;
- }*/
-
- ofs += (1 + len_octets + len);
- 803639c: f89d 200e ldrb.w r2, [sp, #14]
- {
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- /* add zero terminator */
- len = ((len < (SNMP_COMMUNITY_STR_LEN))?(len):(SNMP_COMMUNITY_STR_LEN));
- 80363a0: f8ad 3012 strh.w r3, [sp, #18]
- m_stat->community[len] = 0;
- m_stat->com_strlen = (u8_t)len;
- 80363a4: f885 3041 strb.w r3, [r5, #65] ; 0x41
- snmp_inc_snmpinbadcommunitynames();
- snmp_authfail_trap();
- return ERR_ARG;
- }*/
-
- ofs += (1 + len_octets + len);
- 80363a8: 189b adds r3, r3, r2
- 80363aa: 18f6 adds r6, r6, r3
- 80363ac: b2b6 uxth r6, r6
- 80363ae: f106 0801 add.w r8, r6, #1
- 80363b2: fa1f f888 uxth.w r8, r8
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- /* add zero terminator */
- len = ((len < (SNMP_COMMUNITY_STR_LEN))?(len):(SNMP_COMMUNITY_STR_LEN));
- m_stat->community[len] = 0;
- 80363b6: 7608 strb r0, [r1, #24]
- snmp_authfail_trap();
- return ERR_ARG;
- }*/
-
- ofs += (1 + len_octets + len);
- snmp_asn1_dec_type(p, ofs, &type);
- 80363b8: f10d 020f add.w r2, sp, #15
- 80363bc: 4641 mov r1, r8
- 80363be: 4620 mov r0, r4
- 80363c0: f7fc ff40 bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- 80363c4: 1cb1 adds r1, r6, #2
- 80363c6: 4620 mov r0, r4
- 80363c8: b289 uxth r1, r1
- 80363ca: f10d 020e add.w r2, sp, #14
- 80363ce: f10d 0312 add.w r3, sp, #18
- 80363d2: f7fc ff4c bl 803326e <snmp_asn1_dec_length>
- if (derr != ERR_OK)
- 80363d6: 2800 cmp r0, #0
- 80363d8: d141 bne.n 803645e <snmp_recv+0x1c2>
- return ERR_ARG;
- }
-
- /* FIX for write/read communuty */
- /* GetRequest PDU */
- if (type == (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_REQ))
- 80363da: f89d 300f ldrb.w r3, [sp, #15]
- 80363de: 2ba0 cmp r3, #160 ; 0xa0
- 80363e0: d10f bne.n 8036402 <snmp_recv+0x166>
- {
- if (strncmp(sSettings.sSnmp.readCommunity, (const char*)m_stat->community, strlen(sSettings.sSnmp.readCommunity)) != 0
- 80363e2: 4855 ldr r0, [pc, #340] ; (8036538 <snmp_recv+0x29c>)
- 80363e4: f7eb fd64 bl 8021eb0 <strlen>
- 80363e8: 4629 mov r1, r5
- 80363ea: 4602 mov r2, r0
- 80363ec: 4852 ldr r0, [pc, #328] ; (8036538 <snmp_recv+0x29c>)
- 80363ee: f7eb fdc1 bl 8021f74 <strncmp>
- 80363f2: b120 cbz r0, 80363fe <snmp_recv+0x162>
- || (strlen(sSettings.sSnmp.readCommunity) != strlen((const char*)m_stat->community)) )
- {
- snmp_inc_snmpinbadcommunitynames();
- 80363f4: f7fe fd2e bl 8034e54 <snmp_inc_snmpinbadcommunitynames>
- snmp_authfail_trap();
- 80363f8: f000 fd84 bl 8036f04 <snmp_authfail_trap>
- 80363fc: e75e b.n 80362bc <snmp_recv+0x20>
- /* FIX for write/read communuty */
- /* GetRequest PDU */
- if (type == (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_REQ))
- {
- if (strncmp(sSettings.sSnmp.readCommunity, (const char*)m_stat->community, strlen(sSettings.sSnmp.readCommunity)) != 0
- || (strlen(sSettings.sSnmp.readCommunity) != strlen((const char*)m_stat->community)) )
- 80363fe: 484e ldr r0, [pc, #312] ; (8036538 <snmp_recv+0x29c>)
- 8036400: e00c b.n 803641c <snmp_recv+0x180>
- snmp_authfail_trap();
- return ERR_ARG;
- }
- }
- /* SetRequest PDU */
- else if (type == (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_SET_REQ))
- 8036402: 2ba3 cmp r3, #163 ; 0xa3
- 8036404: d112 bne.n 803642c <snmp_recv+0x190>
- {
- if (strncmp(sSettings.sSnmp.writeCommunity, (const char*)m_stat->community, strlen(sSettings.sSnmp.writeCommunity)) != 0
- 8036406: 484d ldr r0, [pc, #308] ; (803653c <snmp_recv+0x2a0>)
- 8036408: f7eb fd52 bl 8021eb0 <strlen>
- 803640c: 4629 mov r1, r5
- 803640e: 4602 mov r2, r0
- 8036410: 484a ldr r0, [pc, #296] ; (803653c <snmp_recv+0x2a0>)
- 8036412: f7eb fdaf bl 8021f74 <strncmp>
- 8036416: 2800 cmp r0, #0
- 8036418: d1ec bne.n 80363f4 <snmp_recv+0x158>
- || (strlen(sSettings.sSnmp.writeCommunity) != strlen((const char*)m_stat->community)) )
- 803641a: 4848 ldr r0, [pc, #288] ; (803653c <snmp_recv+0x2a0>)
- 803641c: f7eb fd48 bl 8021eb0 <strlen>
- 8036420: 4606 mov r6, r0
- 8036422: 4628 mov r0, r5
- 8036424: f7eb fd44 bl 8021eb0 <strlen>
- 8036428: 4286 cmp r6, r0
- 803642a: d1e3 bne.n 80363f4 <snmp_recv+0x158>
- snmp_authfail_trap();
- return ERR_ARG;
- }
- }
-
- switch(type)
- 803642c: f89d 300f ldrb.w r3, [sp, #15]
- 8036430: 3ba0 subs r3, #160 ; 0xa0
- 8036432: 2b04 cmp r3, #4
- 8036434: d813 bhi.n 803645e <snmp_recv+0x1c2>
- 8036436: e8df f003 tbb [pc, r3]
- 803643a: 0603 .short 0x0603
- 803643c: 0c09 .short 0x0c09
- 803643e: 0f .byte 0x0f
- 803643f: 00 .byte 0x00
- {
- case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_REQ):
- // GetRequest PDU
- snmp_inc_snmpingetrequests();
- 8036440: f7fe fd50 bl 8034ee4 <snmp_inc_snmpingetrequests>
- 8036444: e100 b.n 8036648 <snmp_recv+0x3ac>
- derr = ERR_OK;
- break;
- case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_NEXT_REQ):
- // GetNextRequest PDU
- snmp_inc_snmpingetnexts();
- 8036446: f7fe fd55 bl 8034ef4 <snmp_inc_snmpingetnexts>
- 803644a: e0fd b.n 8036648 <snmp_recv+0x3ac>
- derr = ERR_OK;
- break;
- case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_RESP):
- // GetResponse PDU
- snmp_inc_snmpingetresponses();
- 803644c: f7fe fd62 bl 8034f14 <snmp_inc_snmpingetresponses>
- 8036450: e734 b.n 80362bc <snmp_recv+0x20>
- derr = ERR_ARG;
- break;
- case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_SET_REQ):
- // SetRequest PDU
- snmp_inc_snmpinsetrequests();
- 8036452: f7fe fd57 bl 8034f04 <snmp_inc_snmpinsetrequests>
- 8036456: e0f7 b.n 8036648 <snmp_recv+0x3ac>
- derr = ERR_OK;
- break;
- case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_TRAP):
- // Trap PDU
- snmp_inc_snmpintraps();
- 8036458: f7fe fd64 bl 8034f24 <snmp_inc_snmpintraps>
- 803645c: e72e b.n 80362bc <snmp_recv+0x20>
- derr = ERR_ARG;
- break;
- default:
- snmp_inc_snmpinasnparseerrs();
- 803645e: f7fe fd01 bl 8034e64 <snmp_inc_snmpinasnparseerrs>
- 8036462: e72b b.n 80362bc <snmp_recv+0x20>
- {
- /* decoded PDU length does not equal actual payload length */
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- snmp_asn1_dec_type(p, ofs, &type);
- 8036464: 4631 mov r1, r6
- 8036466: f10d 020f add.w r2, sp, #15
- 803646a: 4620 mov r0, r4
- 803646c: f7fc feea bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- 8036470: f108 0102 add.w r1, r8, #2
- 8036474: 4620 mov r0, r4
- 8036476: b289 uxth r1, r1
- 8036478: f10d 020e add.w r2, sp, #14
- 803647c: f10d 0312 add.w r3, sp, #18
- 8036480: f7fc fef5 bl 803326e <snmp_asn1_dec_length>
- if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)))
- 8036484: 2800 cmp r0, #0
- 8036486: d1ea bne.n 803645e <snmp_recv+0x1c2>
- 8036488: f89d 300f ldrb.w r3, [sp, #15]
- 803648c: 2b02 cmp r3, #2
- 803648e: d1e6 bne.n 803645e <snmp_recv+0x1c2>
- {
- /* can't decode or no integer (request ID) */
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, &m_stat->rid);
- 8036490: f89d 100e ldrb.w r1, [sp, #14]
- 8036494: f8bd 2012 ldrh.w r2, [sp, #18]
- 8036498: 3101 adds r1, #1
- 803649a: 1871 adds r1, r6, r1
- 803649c: 4620 mov r0, r4
- 803649e: b289 uxth r1, r1
- 80364a0: f105 030c add.w r3, r5, #12
- 80364a4: f7fc ffb9 bl 803341a <snmp_asn1_dec_s32t>
- if (derr != ERR_OK)
- 80364a8: 2800 cmp r0, #0
- 80364aa: d1d8 bne.n 803645e <snmp_recv+0x1c2>
- {
- /* can't decode */
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- ofs += (1 + len_octets + len);
- 80364ac: f89d 200e ldrb.w r2, [sp, #14]
- 80364b0: f8bd 3012 ldrh.w r3, [sp, #18]
- 80364b4: 18d3 adds r3, r2, r3
- 80364b6: 18f6 adds r6, r6, r3
- 80364b8: b2b6 uxth r6, r6
- 80364ba: 1c77 adds r7, r6, #1
- 80364bc: b2bf uxth r7, r7
- snmp_asn1_dec_type(p, ofs, &type);
- 80364be: 4639 mov r1, r7
- 80364c0: f10d 020f add.w r2, sp, #15
- 80364c4: 4620 mov r0, r4
- 80364c6: f7fc febd bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- 80364ca: 1cb1 adds r1, r6, #2
- 80364cc: 4620 mov r0, r4
- 80364ce: b289 uxth r1, r1
- 80364d0: f10d 020e add.w r2, sp, #14
- 80364d4: f10d 0312 add.w r3, sp, #18
- 80364d8: f7fc fec9 bl 803326e <snmp_asn1_dec_length>
- if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)))
- 80364dc: 2800 cmp r0, #0
- 80364de: d1be bne.n 803645e <snmp_recv+0x1c2>
- 80364e0: f89d 300f ldrb.w r3, [sp, #15]
- 80364e4: 2b02 cmp r3, #2
- 80364e6: d1ba bne.n 803645e <snmp_recv+0x1c2>
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- /* must be noError (0) for incoming requests.
- log errors for mib-2 completeness and for debug purposes */
- derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, &m_stat->error_status);
- 80364e8: f89d 100e ldrb.w r1, [sp, #14]
- 80364ec: f8bd 2012 ldrh.w r2, [sp, #18]
- 80364f0: 3101 adds r1, #1
- 80364f2: 1879 adds r1, r7, r1
- 80364f4: 4620 mov r0, r4
- 80364f6: b289 uxth r1, r1
- 80364f8: f105 0310 add.w r3, r5, #16
- 80364fc: f7fc ff8d bl 803341a <snmp_asn1_dec_s32t>
- if (derr != ERR_OK)
- 8036500: 2800 cmp r0, #0
- 8036502: d1ac bne.n 803645e <snmp_recv+0x1c2>
- {
- /* can't decode */
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- switch (m_stat->error_status)
- 8036504: 692b ldr r3, [r5, #16]
- 8036506: 3b01 subs r3, #1
- 8036508: 2b04 cmp r3, #4
- 803650a: d81b bhi.n 8036544 <snmp_recv+0x2a8>
- 803650c: e8df f003 tbb [pc, r3]
- 8036510: 0c090603 .word 0x0c090603
- 8036514: 18 .byte 0x18
- 8036515: 00 .byte 0x00
- {
- case SNMP_ES_TOOBIG:
- snmp_inc_snmpintoobigs();
- 8036516: f7fe fcad bl 8034e74 <snmp_inc_snmpintoobigs>
- 803651a: e013 b.n 8036544 <snmp_recv+0x2a8>
- break;
- case SNMP_ES_NOSUCHNAME:
- snmp_inc_snmpinnosuchnames();
- 803651c: f7fe fcb2 bl 8034e84 <snmp_inc_snmpinnosuchnames>
- 8036520: e010 b.n 8036544 <snmp_recv+0x2a8>
- break;
- case SNMP_ES_BADVALUE:
- snmp_inc_snmpinbadvalues();
- 8036522: f7fe fcb7 bl 8034e94 <snmp_inc_snmpinbadvalues>
- 8036526: e00d b.n 8036544 <snmp_recv+0x2a8>
- break;
- case SNMP_ES_READONLY:
- snmp_inc_snmpinreadonlys();
- 8036528: f7fe fcbc bl 8034ea4 <snmp_inc_snmpinreadonlys>
- 803652c: e00a b.n 8036544 <snmp_recv+0x2a8>
- 803652e: bf00 nop
- 8036530: 2000f6f0 .word 0x2000f6f0
- 8036534: 2000f708 .word 0x2000f708
- 8036538: 2000d195 .word 0x2000d195
- 803653c: 2000d1a9 .word 0x2000d1a9
- break;
- case SNMP_ES_GENERROR:
- snmp_inc_snmpingenerrs();
- 8036540: f7fe fcb8 bl 8034eb4 <snmp_inc_snmpingenerrs>
- break;
- }
- ofs += (1 + len_octets + len);
- 8036544: f89d 200e ldrb.w r2, [sp, #14]
- 8036548: f8bd 3012 ldrh.w r3, [sp, #18]
- 803654c: 18d3 adds r3, r2, r3
- 803654e: 18ff adds r7, r7, r3
- 8036550: b2bf uxth r7, r7
- 8036552: 1c7d adds r5, r7, #1
- 8036554: b2ad uxth r5, r5
- snmp_asn1_dec_type(p, ofs, &type);
- 8036556: 4629 mov r1, r5
- 8036558: f10d 020f add.w r2, sp, #15
- 803655c: 4620 mov r0, r4
- 803655e: f7fc fe71 bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- 8036562: 1cb9 adds r1, r7, #2
- 8036564: 4620 mov r0, r4
- 8036566: b289 uxth r1, r1
- 8036568: f10d 020e add.w r2, sp, #14
- 803656c: f10d 0312 add.w r3, sp, #18
- 8036570: f7fc fe7d bl 803326e <snmp_asn1_dec_length>
- if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG)))
- 8036574: 2800 cmp r0, #0
- 8036576: f47f af72 bne.w 803645e <snmp_recv+0x1c2>
- 803657a: f89d 300f ldrb.w r3, [sp, #15]
- 803657e: 2b02 cmp r3, #2
- 8036580: f47f af6d bne.w 803645e <snmp_recv+0x1c2>
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- /* must be 0 for incoming requests.
- decode anyway to catch bad integers (and dirty tricks) */
- derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, &m_stat->error_index);
- 8036584: f89d 100e ldrb.w r1, [sp, #14]
- 8036588: f8bd 2012 ldrh.w r2, [sp, #18]
- 803658c: 4b3a ldr r3, [pc, #232] ; (8036678 <snmp_recv+0x3dc>)
- 803658e: 3101 adds r1, #1
- 8036590: 1869 adds r1, r5, r1
- 8036592: 4620 mov r0, r4
- 8036594: b289 uxth r1, r1
- 8036596: f7fc ff40 bl 803341a <snmp_asn1_dec_s32t>
- if (derr != ERR_OK)
- 803659a: 2800 cmp r0, #0
- 803659c: f47f af5f bne.w 803645e <snmp_recv+0x1c2>
- {
- /* can't decode */
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- ofs += (1 + len_octets + len);
- 80365a0: f8bd 3012 ldrh.w r3, [sp, #18]
- 80365a4: f89d 200e ldrb.w r2, [sp, #14]
- 80365a8: 3301 adds r3, #1
- 80365aa: 189b adds r3, r3, r2
- 80365ac: 18ed adds r5, r5, r3
- /* check total length, version, community, pdu type */
- err_ret = snmp_pdu_header_check(p, payload_ofs, payload_len, &varbind_ofs, msg_ps);
- /* Only accept requests and requests without error (be robust) */
- /* Reject response and trap headers or error requests as input! */
- if ((err_ret != ERR_OK) ||
- ((msg_ps->rt != SNMP_ASN1_PDU_GET_REQ) &&
- 80365ae: 4b33 ldr r3, [pc, #204] ; (803667c <snmp_recv+0x3e0>)
- /* can't decode */
- snmp_inc_snmpinasnparseerrs();
- return ERR_ARG;
- }
- ofs += (1 + len_octets + len);
- *ofs_ret = ofs;
- 80365b0: f8ad 5010 strh.w r5, [sp, #16]
- /* check total length, version, community, pdu type */
- err_ret = snmp_pdu_header_check(p, payload_ofs, payload_len, &varbind_ofs, msg_ps);
- /* Only accept requests and requests without error (be robust) */
- /* Reject response and trap headers or error requests as input! */
- if ((err_ret != ERR_OK) ||
- ((msg_ps->rt != SNMP_ASN1_PDU_GET_REQ) &&
- 80365b4: 7a9a ldrb r2, [r3, #10]
- /* check total length, version, community, pdu type */
- err_ret = snmp_pdu_header_check(p, payload_ofs, payload_len, &varbind_ofs, msg_ps);
- /* Only accept requests and requests without error (be robust) */
- /* Reject response and trap headers or error requests as input! */
- if ((err_ret != ERR_OK) ||
- 80365b6: b132 cbz r2, 80365c6 <snmp_recv+0x32a>
- ((msg_ps->rt != SNMP_ASN1_PDU_GET_REQ) &&
- (msg_ps->rt != SNMP_ASN1_PDU_GET_NEXT_REQ) &&
- 80365b8: 7a9a ldrb r2, [r3, #10]
- /* check total length, version, community, pdu type */
- err_ret = snmp_pdu_header_check(p, payload_ofs, payload_len, &varbind_ofs, msg_ps);
- /* Only accept requests and requests without error (be robust) */
- /* Reject response and trap headers or error requests as input! */
- if ((err_ret != ERR_OK) ||
- ((msg_ps->rt != SNMP_ASN1_PDU_GET_REQ) &&
- 80365ba: 2a01 cmp r2, #1
- 80365bc: d003 beq.n 80365c6 <snmp_recv+0x32a>
- (msg_ps->rt != SNMP_ASN1_PDU_GET_NEXT_REQ) &&
- (msg_ps->rt != SNMP_ASN1_PDU_SET_REQ)) ||
- 80365be: 7a9a ldrb r2, [r3, #10]
- err_ret = snmp_pdu_header_check(p, payload_ofs, payload_len, &varbind_ofs, msg_ps);
- /* Only accept requests and requests without error (be robust) */
- /* Reject response and trap headers or error requests as input! */
- if ((err_ret != ERR_OK) ||
- ((msg_ps->rt != SNMP_ASN1_PDU_GET_REQ) &&
- (msg_ps->rt != SNMP_ASN1_PDU_GET_NEXT_REQ) &&
- 80365c0: 2a03 cmp r2, #3
- 80365c2: f47f ae7b bne.w 80362bc <snmp_recv+0x20>
- (msg_ps->rt != SNMP_ASN1_PDU_SET_REQ)) ||
- ((msg_ps->error_status != SNMP_ES_NOERROR) ||
- 80365c6: 691b ldr r3, [r3, #16]
- 80365c8: 4d2c ldr r5, [pc, #176] ; (803667c <snmp_recv+0x3e0>)
- /* Only accept requests and requests without error (be robust) */
- /* Reject response and trap headers or error requests as input! */
- if ((err_ret != ERR_OK) ||
- ((msg_ps->rt != SNMP_ASN1_PDU_GET_REQ) &&
- (msg_ps->rt != SNMP_ASN1_PDU_GET_NEXT_REQ) &&
- (msg_ps->rt != SNMP_ASN1_PDU_SET_REQ)) ||
- 80365ca: 2b00 cmp r3, #0
- 80365cc: f47f ae76 bne.w 80362bc <snmp_recv+0x20>
- ((msg_ps->error_status != SNMP_ES_NOERROR) ||
- (msg_ps->error_index != 0)) )
- 80365d0: 696b ldr r3, [r5, #20]
- /* Reject response and trap headers or error requests as input! */
- if ((err_ret != ERR_OK) ||
- ((msg_ps->rt != SNMP_ASN1_PDU_GET_REQ) &&
- (msg_ps->rt != SNMP_ASN1_PDU_GET_NEXT_REQ) &&
- (msg_ps->rt != SNMP_ASN1_PDU_SET_REQ)) ||
- ((msg_ps->error_status != SNMP_ES_NOERROR) ||
- 80365d2: 2b00 cmp r3, #0
- 80365d4: f47f ae72 bne.w 80362bc <snmp_recv+0x20>
- }
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_recv ok, community %s\n", msg_ps->community));
- /* Builds a list of variable bindings. Copy the varbinds from the pbuf
- chain to glue them when these are divided over two or more pbuf's. */
- err_ret = snmp_pdu_dec_varbindlist(p, varbind_ofs, &varbind_ofs, msg_ps);
- 80365d8: aa06 add r2, sp, #24
- 80365da: 4620 mov r0, r4
- 80365dc: f832 1d08 ldrh.w r1, [r2, #-8]!
- 80365e0: 462b mov r3, r5
- 80365e2: f7ff fd01 bl 8035fe8 <snmp_pdu_dec_varbindlist>
- 80365e6: 4606 mov r6, r0
- /* we've decoded the incoming message, release input msg now */
- pbuf_free(p);
- 80365e8: 4620 mov r0, r4
- 80365ea: f7f9 fc0f bl 802fe0c <pbuf_free>
- if ((err_ret != ERR_OK) || (msg_ps->invb.count == 0))
- 80365ee: 2e00 cmp r6, #0
- 80365f0: d13f bne.n 8036672 <snmp_recv+0x3d6>
- 80365f2: f895 3108 ldrb.w r3, [r5, #264] ; 0x108
- 80365f6: 2b00 cmp r3, #0
- 80365f8: d03b beq.n 8036672 <snmp_recv+0x3d6>
- }
- msg_ps->error_status = SNMP_ES_NOERROR;
- msg_ps->error_index = 0;
- /* find object for each variable binding */
- msg_ps->state = SNMP_MSG_SEARCH_OBJ;
- 80365fa: 2301 movs r3, #1
- (errors are only returned for a specific varbind failure) */
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_pdu_dec_varbindlist() failed\n"));
- return;
- }
- msg_ps->error_status = SNMP_ES_NOERROR;
- 80365fc: 612e str r6, [r5, #16]
- msg_ps->vb_idx = 0;
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_recv varbind cnt=%"U16_F"\n",(u16_t)msg_ps->invb.count));
- /* handle input event and as much objects as possible in one go */
- snmp_msg_event(req_idx);
- 80365fe: 4630 mov r0, r6
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_pdu_dec_varbindlist() failed\n"));
- return;
- }
- msg_ps->error_status = SNMP_ES_NOERROR;
- msg_ps->error_index = 0;
- 8036600: 616e str r6, [r5, #20]
- /* find object for each variable binding */
- msg_ps->state = SNMP_MSG_SEARCH_OBJ;
- 8036602: f885 305a strb.w r3, [r5, #90] ; 0x5a
- /* first variable binding from list to inspect */
- msg_ps->vb_idx = 0;
- 8036606: f885 60f8 strb.w r6, [r5, #248] ; 0xf8
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_recv varbind cnt=%"U16_F"\n",(u16_t)msg_ps->invb.count));
- /* handle input event and as much objects as possible in one go */
- snmp_msg_event(req_idx);
- 803660a: f7ff f94d bl 80358a8 <snmp_msg_event>
- 803660e: e030 b.n 8036672 <snmp_recv+0x3d6>
- pbuf_free(p);
- return;
- }
- /* accepting request */
- snmp_inc_snmpinpkts();
- 8036610: f7fe fc08 bl 8034e24 <snmp_inc_snmpinpkts>
- /* record used 'protocol control block' */
- msg_ps->pcb = pcb;
- /* source address (network order) */
- msg_ps->sip = *addr;
- 8036614: f8d9 3000 ldr.w r3, [r9]
- }
- /* accepting request */
- snmp_inc_snmpinpkts();
- /* record used 'protocol control block' */
- msg_ps->pcb = pcb;
- 8036618: f8c5 8000 str.w r8, [r5]
- /* source address (network order) */
- msg_ps->sip = *addr;
- 803661c: 606b str r3, [r5, #4]
- /* source port (host order (lwIP oddity)) */
- msg_ps->sp = port;
- 803661e: f8bd 3038 ldrh.w r3, [sp, #56] ; 0x38
- u8_t len_octets;
- u8_t type;
- s32_t version;
- ofs_base = ofs;
- snmp_asn1_dec_type(p, ofs, &type);
- 8036622: 4631 mov r1, r6
- /* record used 'protocol control block' */
- msg_ps->pcb = pcb;
- /* source address (network order) */
- msg_ps->sip = *addr;
- /* source port (host order (lwIP oddity)) */
- msg_ps->sp = port;
- 8036624: 812b strh r3, [r5, #8]
- u8_t len_octets;
- u8_t type;
- s32_t version;
- ofs_base = ofs;
- snmp_asn1_dec_type(p, ofs, &type);
- 8036626: f10d 020f add.w r2, sp, #15
- 803662a: 4620 mov r0, r4
- 803662c: f7fc fe0a bl 8033244 <snmp_asn1_dec_type>
- derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len);
- 8036630: 4620 mov r0, r4
- 8036632: 2101 movs r1, #1
- 8036634: f10d 020e add.w r2, sp, #14
- 8036638: f10d 0312 add.w r3, sp, #18
- 803663c: f7fc fe17 bl 803326e <snmp_asn1_dec_length>
- if ((derr != ERR_OK) ||
- 8036640: 2800 cmp r0, #0
- 8036642: f43f ae3f beq.w 80362c4 <snmp_recv+0x28>
- 8036646: e70a b.n 803645e <snmp_recv+0x1c2>
- if (derr != ERR_OK)
- {
- /* unsupported input PDU for this agent (no parse error) */
- return ERR_ARG;
- }
- m_stat->rt = type & 0x1F;
- 8036648: f89d 300f ldrb.w r3, [sp, #15]
- 803664c: 4d0b ldr r5, [pc, #44] ; (803667c <snmp_recv+0x3e0>)
- 803664e: f003 031f and.w r3, r3, #31
- 8036652: 72ab strb r3, [r5, #10]
- ofs += (1 + len_octets);
- 8036654: f89d 300e ldrb.w r3, [sp, #14]
- 8036658: 4498 add r8, r3
- 803665a: fa1f f888 uxth.w r8, r8
- 803665e: f108 0601 add.w r6, r8, #1
- 8036662: b2b6 uxth r6, r6
- if (len != (pdu_len - (ofs - ofs_base)))
- 8036664: f8bd 3012 ldrh.w r3, [sp, #18]
- 8036668: 1bbf subs r7, r7, r6
- 803666a: 42bb cmp r3, r7
- 803666c: f43f aefa beq.w 8036464 <snmp_recv+0x1c8>
- 8036670: e6f5 b.n 803645e <snmp_recv+0x1c2>
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_recv varbind cnt=%"U16_F"\n",(u16_t)msg_ps->invb.count));
- /* handle input event and as much objects as possible in one go */
- snmp_msg_event(req_idx);
- }
- 8036672: b007 add sp, #28
- 8036674: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
- 8036678: 2000f704 .word 0x2000f704
- 803667c: 2000f6f0 .word 0x2000f6f0
- 08036680 <snmp_varbind_list_sum>:
- * @param root points to the root of the variable binding list
- * @return the required lenght for encoding the variable bindings
- */
- static u16_t
- snmp_varbind_list_sum(struct snmp_varbind_root *root)
- {
- 8036680: b5f8 push {r3, r4, r5, r6, r7, lr}
- struct snmp_varbind *vb;
- u32_t *uint_ptr;
- s32_t *sint_ptr;
- u16_t tot_len;
- tot_len = 0;
- 8036682: 2500 movs r5, #0
- * @param root points to the root of the variable binding list
- * @return the required lenght for encoding the variable bindings
- */
- static u16_t
- snmp_varbind_list_sum(struct snmp_varbind_root *root)
- {
- 8036684: 4606 mov r6, r0
- u32_t *uint_ptr;
- s32_t *sint_ptr;
- u16_t tot_len;
- tot_len = 0;
- vb = root->tail;
- 8036686: 6844 ldr r4, [r0, #4]
- sint_ptr = (s32_t*)vb->value;
- snmp_asn1_enc_oid_cnt(vb->value_len / sizeof(s32_t), sint_ptr, &vb->vlen);
- break;
- default:
- /* unsupported type */
- vb->vlen = 0;
- 8036688: 462f mov r7, r5
- s32_t *sint_ptr;
- u16_t tot_len;
- tot_len = 0;
- vb = root->tail;
- while ( vb != NULL )
- 803668a: e051 b.n 8036730 <snmp_varbind_list_sum+0xb0>
- {
- /* encoded value lenght depends on type */
- switch (vb->value_type)
- 803668c: 7c23 ldrb r3, [r4, #16]
- 803668e: 2b06 cmp r3, #6
- 8036690: d020 beq.n 80366d4 <snmp_varbind_list_sum+0x54>
- 8036692: d805 bhi.n 80366a0 <snmp_varbind_list_sum+0x20>
- 8036694: 2b02 cmp r3, #2
- 8036696: d00c beq.n 80366b2 <snmp_varbind_list_sum+0x32>
- 8036698: d324 bcc.n 80366e4 <snmp_varbind_list_sum+0x64>
- 803669a: 2b04 cmp r3, #4
- 803669c: d322 bcc.n 80366e4 <snmp_varbind_list_sum+0x64>
- 803669e: e016 b.n 80366ce <snmp_varbind_list_sum+0x4e>
- 80366a0: 2b43 cmp r3, #67 ; 0x43
- 80366a2: d803 bhi.n 80366ac <snmp_varbind_list_sum+0x2c>
- 80366a4: 2b41 cmp r3, #65 ; 0x41
- 80366a6: d20b bcs.n 80366c0 <snmp_varbind_list_sum+0x40>
- 80366a8: 2b40 cmp r3, #64 ; 0x40
- 80366aa: e000 b.n 80366ae <snmp_varbind_list_sum+0x2e>
- 80366ac: 2b44 cmp r3, #68 ; 0x44
- 80366ae: d119 bne.n 80366e4 <snmp_varbind_list_sum+0x64>
- 80366b0: e00d b.n 80366ce <snmp_varbind_list_sum+0x4e>
- {
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG):
- sint_ptr = (s32_t*)vb->value;
- snmp_asn1_enc_s32t_cnt(*sint_ptr, &vb->vlen);
- 80366b2: 6963 ldr r3, [r4, #20]
- 80366b4: f104 0120 add.w r1, r4, #32
- 80366b8: 6818 ldr r0, [r3, #0]
- 80366ba: f7fc fffa bl 80336b2 <snmp_asn1_enc_s32t_cnt>
- break;
- 80366be: e012 b.n 80366e6 <snmp_varbind_list_sum+0x66>
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS):
- uint_ptr = (u32_t*)vb->value;
- snmp_asn1_enc_u32t_cnt(*uint_ptr, &vb->vlen);
- 80366c0: 6963 ldr r3, [r4, #20]
- 80366c2: f104 0120 add.w r1, r4, #32
- 80366c6: 6818 ldr r0, [r3, #0]
- 80366c8: f7fc ffde bl 8033688 <snmp_asn1_enc_u32t_cnt>
- break;
- 80366cc: e00b b.n 80366e6 <snmp_varbind_list_sum+0x66>
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR):
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_NUL):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_OPAQUE):
- vb->vlen = vb->value_len;
- 80366ce: 7c63 ldrb r3, [r4, #17]
- 80366d0: 8423 strh r3, [r4, #32]
- break;
- 80366d2: e008 b.n 80366e6 <snmp_varbind_list_sum+0x66>
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID):
- sint_ptr = (s32_t*)vb->value;
- snmp_asn1_enc_oid_cnt(vb->value_len / sizeof(s32_t), sint_ptr, &vb->vlen);
- 80366d4: 7c60 ldrb r0, [r4, #17]
- 80366d6: 6961 ldr r1, [r4, #20]
- 80366d8: 0880 lsrs r0, r0, #2
- 80366da: f104 0220 add.w r2, r4, #32
- 80366de: f7fc fffd bl 80336dc <snmp_asn1_enc_oid_cnt>
- break;
- 80366e2: e000 b.n 80366e6 <snmp_varbind_list_sum+0x66>
- default:
- /* unsupported type */
- vb->vlen = 0;
- 80366e4: 8427 strh r7, [r4, #32]
- break;
- };
- /* encoding length of value length field */
- snmp_asn1_enc_length_cnt(vb->vlen, &vb->vlenlen);
- 80366e6: 8c20 ldrh r0, [r4, #32]
- 80366e8: f104 011a add.w r1, r4, #26
- 80366ec: f7fc ffc1 bl 8033672 <snmp_asn1_enc_length_cnt>
- snmp_asn1_enc_oid_cnt(vb->ident_len, vb->ident, &vb->olen);
- 80366f0: f104 021e add.w r2, r4, #30
- 80366f4: 7a20 ldrb r0, [r4, #8]
- 80366f6: 68e1 ldr r1, [r4, #12]
- 80366f8: f7fc fff0 bl 80336dc <snmp_asn1_enc_oid_cnt>
- snmp_asn1_enc_length_cnt(vb->olen, &vb->olenlen);
- 80366fc: 8be0 ldrh r0, [r4, #30]
- 80366fe: f104 0119 add.w r1, r4, #25
- 8036702: f7fc ffb6 bl 8033672 <snmp_asn1_enc_length_cnt>
- vb->seqlen = 1 + vb->vlenlen + vb->vlen;
- 8036706: 8be3 ldrh r3, [r4, #30]
- 8036708: 8c20 ldrh r0, [r4, #32]
- 803670a: 18c0 adds r0, r0, r3
- 803670c: 7ea3 ldrb r3, [r4, #26]
- vb->seqlen += 1 + vb->olenlen + vb->olen;
- 803670e: 3002 adds r0, #2
- 8036710: 18c0 adds r0, r0, r3
- 8036712: 7e63 ldrb r3, [r4, #25]
- 8036714: 18c0 adds r0, r0, r3
- 8036716: b280 uxth r0, r0
- 8036718: 83a0 strh r0, [r4, #28]
- snmp_asn1_enc_length_cnt(vb->seqlen, &vb->seqlenlen);
- 803671a: f104 0118 add.w r1, r4, #24
- 803671e: f7fc ffa8 bl 8033672 <snmp_asn1_enc_length_cnt>
- /* varbind seq */
- tot_len += 1 + vb->seqlenlen + vb->seqlen;
- 8036722: 8ba3 ldrh r3, [r4, #28]
- 8036724: 7e22 ldrb r2, [r4, #24]
- vb = vb->prev;
- 8036726: 6864 ldr r4, [r4, #4]
- vb->seqlen = 1 + vb->vlenlen + vb->vlen;
- vb->seqlen += 1 + vb->olenlen + vb->olen;
- snmp_asn1_enc_length_cnt(vb->seqlen, &vb->seqlenlen);
- /* varbind seq */
- tot_len += 1 + vb->seqlenlen + vb->seqlen;
- 8036728: 3301 adds r3, #1
- 803672a: 189b adds r3, r3, r2
- 803672c: 18ed adds r5, r5, r3
- 803672e: b2ad uxth r5, r5
- s32_t *sint_ptr;
- u16_t tot_len;
- tot_len = 0;
- vb = root->tail;
- while ( vb != NULL )
- 8036730: 2c00 cmp r4, #0
- 8036732: d1ab bne.n 803668c <snmp_varbind_list_sum+0xc>
- vb = vb->prev;
- }
- /* varbind-list seq */
- root->seqlen = tot_len;
- snmp_asn1_enc_length_cnt(root->seqlen, &root->seqlenlen);
- 8036734: 4628 mov r0, r5
- vb = vb->prev;
- }
- /* varbind-list seq */
- root->seqlen = tot_len;
- 8036736: 8175 strh r5, [r6, #10]
- snmp_asn1_enc_length_cnt(root->seqlen, &root->seqlenlen);
- 8036738: f106 0109 add.w r1, r6, #9
- 803673c: f7fc ff99 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + root->seqlenlen;
- 8036740: 7a73 ldrb r3, [r6, #9]
- 8036742: 3301 adds r3, #1
- 8036744: 18e8 adds r0, r5, r3
- return tot_len;
- }
- 8036746: b280 uxth r0, r0
- 8036748: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 803674a: 0000 movs r0, r0
- 0803674c <snmp_resp_header_sum>:
- * @param rhl points to returned header lengths
- * @return the required lenght for encoding the response header
- */
- static u16_t
- snmp_resp_header_sum(struct snmp_msg_pstat *m_stat, u16_t vb_len)
- {
- 803674c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- 8036750: 4604 mov r4, r0
- u16_t tot_len;
- struct snmp_resp_header_lengths *rhl;
- rhl = &m_stat->rhl;
- tot_len = vb_len;
- snmp_asn1_enc_s32t_cnt(m_stat->error_index, &rhl->erridxlen);
- 8036752: f500 758c add.w r5, r0, #280 ; 0x118
- * @param rhl points to returned header lengths
- * @return the required lenght for encoding the response header
- */
- static u16_t
- snmp_resp_header_sum(struct snmp_msg_pstat *m_stat, u16_t vb_len)
- {
- 8036756: 460f mov r7, r1
- u16_t tot_len;
- struct snmp_resp_header_lengths *rhl;
- rhl = &m_stat->rhl;
- tot_len = vb_len;
- snmp_asn1_enc_s32t_cnt(m_stat->error_index, &rhl->erridxlen);
- 8036758: 6940 ldr r0, [r0, #20]
- 803675a: f504 7190 add.w r1, r4, #288 ; 0x120
- 803675e: f7fc ffa8 bl 80336b2 <snmp_asn1_enc_s32t_cnt>
- snmp_asn1_enc_length_cnt(rhl->erridxlen, &rhl->erridxlenlen);
- 8036762: f8b4 0120 ldrh.w r0, [r4, #288] ; 0x120
- 8036766: 4629 mov r1, r5
- 8036768: f7fc ff83 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + rhl->erridxlenlen + rhl->erridxlen;
- snmp_asn1_enc_s32t_cnt(m_stat->error_status, &rhl->errstatlen);
- 803676c: 6920 ldr r0, [r4, #16]
- rhl = &m_stat->rhl;
- tot_len = vb_len;
- snmp_asn1_enc_s32t_cnt(m_stat->error_index, &rhl->erridxlen);
- snmp_asn1_enc_length_cnt(rhl->erridxlen, &rhl->erridxlenlen);
- tot_len += 1 + rhl->erridxlenlen + rhl->erridxlen;
- 803676e: f894 8118 ldrb.w r8, [r4, #280] ; 0x118
- 8036772: f8b4 a120 ldrh.w sl, [r4, #288] ; 0x120
- snmp_asn1_enc_s32t_cnt(m_stat->error_status, &rhl->errstatlen);
- 8036776: f504 7191 add.w r1, r4, #290 ; 0x122
- 803677a: f7fc ff9a bl 80336b2 <snmp_asn1_enc_s32t_cnt>
- snmp_asn1_enc_length_cnt(rhl->errstatlen, &rhl->errstatlenlen);
- 803677e: 1c69 adds r1, r5, #1
- 8036780: f8b4 0122 ldrh.w r0, [r4, #290] ; 0x122
- 8036784: f7fc ff75 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + rhl->errstatlenlen + rhl->errstatlen;
- 8036788: f8b4 9122 ldrh.w r9, [r4, #290] ; 0x122
- snmp_asn1_enc_s32t_cnt(m_stat->rid, &rhl->ridlen);
- 803678c: 68e0 ldr r0, [r4, #12]
- snmp_asn1_enc_length_cnt(rhl->erridxlen, &rhl->erridxlenlen);
- tot_len += 1 + rhl->erridxlenlen + rhl->erridxlen;
- snmp_asn1_enc_s32t_cnt(m_stat->error_status, &rhl->errstatlen);
- snmp_asn1_enc_length_cnt(rhl->errstatlen, &rhl->errstatlenlen);
- tot_len += 1 + rhl->errstatlenlen + rhl->errstatlen;
- 803678e: f894 6119 ldrb.w r6, [r4, #281] ; 0x119
- snmp_asn1_enc_s32t_cnt(m_stat->rid, &rhl->ridlen);
- 8036792: f504 7192 add.w r1, r4, #292 ; 0x124
- 8036796: f7fc ff8c bl 80336b2 <snmp_asn1_enc_s32t_cnt>
- snmp_asn1_enc_length_cnt(rhl->ridlen, &rhl->ridlenlen);
- 803679a: f8b4 0124 ldrh.w r0, [r4, #292] ; 0x124
- 803679e: f504 718d add.w r1, r4, #282 ; 0x11a
- 80367a2: f7fc ff66 bl 8033672 <snmp_asn1_enc_length_cnt>
- rhl = &m_stat->rhl;
- tot_len = vb_len;
- snmp_asn1_enc_s32t_cnt(m_stat->error_index, &rhl->erridxlen);
- snmp_asn1_enc_length_cnt(rhl->erridxlen, &rhl->erridxlenlen);
- tot_len += 1 + rhl->erridxlenlen + rhl->erridxlen;
- 80367a6: 44d1 add r9, sl
- snmp_asn1_enc_s32t_cnt(m_stat->error_status, &rhl->errstatlen);
- snmp_asn1_enc_length_cnt(rhl->errstatlen, &rhl->errstatlenlen);
- tot_len += 1 + rhl->errstatlenlen + rhl->errstatlen;
- 80367a8: f8b4 3124 ldrh.w r3, [r4, #292] ; 0x124
- 80367ac: f109 0903 add.w r9, r9, #3
- 80367b0: 4499 add r9, r3
- 80367b2: fa18 f889 uxtah r8, r8, r9
- snmp_asn1_enc_s32t_cnt(m_stat->rid, &rhl->ridlen);
- snmp_asn1_enc_length_cnt(rhl->ridlen, &rhl->ridlenlen);
- tot_len += 1 + rhl->ridlenlen + rhl->ridlen;
- 80367b6: f894 311a ldrb.w r3, [r4, #282] ; 0x11a
- 80367ba: 4446 add r6, r8
- 80367bc: 18f6 adds r6, r6, r3
- 80367be: fa17 f686 uxtah r6, r7, r6
- 80367c2: b2b6 uxth r6, r6
- rhl->pdulen = tot_len;
- snmp_asn1_enc_length_cnt(rhl->pdulen, &rhl->pdulenlen);
- 80367c4: 1ce9 adds r1, r5, #3
- 80367c6: 4630 mov r0, r6
- snmp_asn1_enc_s32t_cnt(m_stat->rid, &rhl->ridlen);
- snmp_asn1_enc_length_cnt(rhl->ridlen, &rhl->ridlenlen);
- tot_len += 1 + rhl->ridlenlen + rhl->ridlen;
- rhl->pdulen = tot_len;
- 80367c8: f8a4 6126 strh.w r6, [r4, #294] ; 0x126
- snmp_asn1_enc_length_cnt(rhl->pdulen, &rhl->pdulenlen);
- 80367cc: f7fc ff51 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + rhl->pdulenlen;
- rhl->comlen = m_stat->com_strlen;
- 80367d0: f894 0059 ldrb.w r0, [r4, #89] ; 0x59
- snmp_asn1_enc_length_cnt(rhl->ridlen, &rhl->ridlenlen);
- tot_len += 1 + rhl->ridlenlen + rhl->ridlen;
- rhl->pdulen = tot_len;
- snmp_asn1_enc_length_cnt(rhl->pdulen, &rhl->pdulenlen);
- tot_len += 1 + rhl->pdulenlen;
- 80367d4: f894 811b ldrb.w r8, [r4, #283] ; 0x11b
- rhl->comlen = m_stat->com_strlen;
- 80367d8: f8a4 0128 strh.w r0, [r4, #296] ; 0x128
- snmp_asn1_enc_length_cnt(rhl->comlen, &rhl->comlenlen);
- 80367dc: f504 718e add.w r1, r4, #284 ; 0x11c
- 80367e0: f7fc ff47 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + rhl->comlenlen + rhl->comlen;
- snmp_asn1_enc_s32t_cnt(snmp_version, &rhl->verlen);
- 80367e4: 4b14 ldr r3, [pc, #80] ; (8036838 <snmp_resp_header_sum+0xec>)
- snmp_asn1_enc_length_cnt(rhl->pdulen, &rhl->pdulenlen);
- tot_len += 1 + rhl->pdulenlen;
- rhl->comlen = m_stat->com_strlen;
- snmp_asn1_enc_length_cnt(rhl->comlen, &rhl->comlenlen);
- tot_len += 1 + rhl->comlenlen + rhl->comlen;
- 80367e6: f894 711c ldrb.w r7, [r4, #284] ; 0x11c
- snmp_asn1_enc_s32t_cnt(snmp_version, &rhl->verlen);
- 80367ea: 6818 ldr r0, [r3, #0]
- snmp_asn1_enc_length_cnt(rhl->pdulen, &rhl->pdulenlen);
- tot_len += 1 + rhl->pdulenlen;
- rhl->comlen = m_stat->com_strlen;
- snmp_asn1_enc_length_cnt(rhl->comlen, &rhl->comlenlen);
- tot_len += 1 + rhl->comlenlen + rhl->comlen;
- 80367ec: f8b4 9128 ldrh.w r9, [r4, #296] ; 0x128
- snmp_asn1_enc_s32t_cnt(snmp_version, &rhl->verlen);
- 80367f0: f504 7195 add.w r1, r4, #298 ; 0x12a
- 80367f4: f7fc ff5d bl 80336b2 <snmp_asn1_enc_s32t_cnt>
- snmp_asn1_enc_length_cnt(rhl->verlen, &rhl->verlenlen);
- 80367f8: 1d69 adds r1, r5, #5
- 80367fa: f8b4 012a ldrh.w r0, [r4, #298] ; 0x12a
- 80367fe: f7fc ff38 bl 8033672 <snmp_asn1_enc_length_cnt>
- snmp_asn1_enc_length_cnt(rhl->pdulen, &rhl->pdulenlen);
- tot_len += 1 + rhl->pdulenlen;
- rhl->comlen = m_stat->com_strlen;
- snmp_asn1_enc_length_cnt(rhl->comlen, &rhl->comlenlen);
- tot_len += 1 + rhl->comlenlen + rhl->comlen;
- 8036802: f8b4 512a ldrh.w r5, [r4, #298] ; 0x12a
- snmp_asn1_enc_s32t_cnt(snmp_version, &rhl->verlen);
- snmp_asn1_enc_length_cnt(rhl->verlen, &rhl->verlenlen);
- tot_len += 1 + rhl->verlen + rhl->verlenlen;
- 8036806: f894 311d ldrb.w r3, [r4, #285] ; 0x11d
- snmp_asn1_enc_length_cnt(rhl->pdulen, &rhl->pdulenlen);
- tot_len += 1 + rhl->pdulenlen;
- rhl->comlen = m_stat->com_strlen;
- snmp_asn1_enc_length_cnt(rhl->comlen, &rhl->comlenlen);
- tot_len += 1 + rhl->comlenlen + rhl->comlen;
- 803680a: 444d add r5, r9
- 803680c: 3503 adds r5, #3
- 803680e: 4445 add r5, r8
- snmp_asn1_enc_s32t_cnt(snmp_version, &rhl->verlen);
- snmp_asn1_enc_length_cnt(rhl->verlen, &rhl->verlenlen);
- tot_len += 1 + rhl->verlen + rhl->verlenlen;
- 8036810: 197d adds r5, r7, r5
- 8036812: 18ed adds r5, r5, r3
- 8036814: fa16 f585 uxtah r5, r6, r5
- 8036818: b2ad uxth r5, r5
- rhl->seqlen = tot_len;
- snmp_asn1_enc_length_cnt(rhl->seqlen, &rhl->seqlenlen);
- 803681a: 4628 mov r0, r5
- snmp_asn1_enc_s32t_cnt(snmp_version, &rhl->verlen);
- snmp_asn1_enc_length_cnt(rhl->verlen, &rhl->verlenlen);
- tot_len += 1 + rhl->verlen + rhl->verlenlen;
- rhl->seqlen = tot_len;
- 803681c: f8a4 512c strh.w r5, [r4, #300] ; 0x12c
- snmp_asn1_enc_length_cnt(rhl->seqlen, &rhl->seqlenlen);
- 8036820: f504 718f add.w r1, r4, #286 ; 0x11e
- 8036824: f7fc ff25 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + rhl->seqlenlen;
- 8036828: f894 311e ldrb.w r3, [r4, #286] ; 0x11e
- 803682c: 3301 adds r3, #1
- 803682e: 18e8 adds r0, r5, r3
- return tot_len;
- }
- 8036830: b280 uxth r0, r0
- 8036832: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
- 8036836: bf00 nop
- 8036838: 0804592c .word 0x0804592c
- 0803683c <snmp_varbind_list_enc>:
- /**
- * Encodes varbind list from head to tail.
- */
- static u16_t
- snmp_varbind_list_enc(struct snmp_varbind_root *root, struct pbuf *p, u16_t ofs)
- {
- 803683c: b570 push {r4, r5, r6, lr}
- 803683e: 4616 mov r6, r2
- 8036840: 4604 mov r4, r0
- s32_t *sint_ptr;
- u32_t *uint_ptr;
- u8_t *raw_ptr;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- ofs += 1;
- 8036842: 3601 adds r6, #1
- /**
- * Encodes varbind list from head to tail.
- */
- static u16_t
- snmp_varbind_list_enc(struct snmp_varbind_root *root, struct pbuf *p, u16_t ofs)
- {
- 8036844: 460d mov r5, r1
- struct snmp_varbind *vb;
- s32_t *sint_ptr;
- u32_t *uint_ptr;
- u8_t *raw_ptr;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- 8036846: 4608 mov r0, r1
- ofs += 1;
- 8036848: b2b6 uxth r6, r6
- struct snmp_varbind *vb;
- s32_t *sint_ptr;
- u32_t *uint_ptr;
- u8_t *raw_ptr;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- 803684a: 4611 mov r1, r2
- 803684c: 2230 movs r2, #48 ; 0x30
- 803684e: f7fc ff5d bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, root->seqlen);
- 8036852: 4628 mov r0, r5
- 8036854: 4631 mov r1, r6
- 8036856: 8962 ldrh r2, [r4, #10]
- 8036858: f7fc ff6c bl 8033734 <snmp_asn1_enc_length>
- ofs += root->seqlenlen;
- 803685c: 7a63 ldrb r3, [r4, #9]
- 803685e: e064 b.n 803692a <snmp_varbind_list_enc+0xee>
- vb = root->head;
- while ( vb != NULL )
- {
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- 8036860: 4631 mov r1, r6
- ofs += 1;
- 8036862: 3601 adds r6, #1
- ofs += root->seqlenlen;
- vb = root->head;
- while ( vb != NULL )
- {
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- 8036864: 2230 movs r2, #48 ; 0x30
- ofs += 1;
- 8036866: b2b6 uxth r6, r6
- ofs += root->seqlenlen;
- vb = root->head;
- while ( vb != NULL )
- {
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- 8036868: 4628 mov r0, r5
- 803686a: f7fc ff4f bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, vb->seqlen);
- 803686e: 4631 mov r1, r6
- 8036870: 8ba2 ldrh r2, [r4, #28]
- 8036872: 4628 mov r0, r5
- 8036874: f7fc ff5e bl 8033734 <snmp_asn1_enc_length>
- ofs += vb->seqlenlen;
- 8036878: 7e23 ldrb r3, [r4, #24]
- 803687a: 18f6 adds r6, r6, r3
- 803687c: b2b6 uxth r6, r6
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
- 803687e: 4631 mov r1, r6
- ofs += 1;
- 8036880: 3601 adds r6, #1
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, vb->seqlen);
- ofs += vb->seqlenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
- 8036882: 2206 movs r2, #6
- ofs += 1;
- 8036884: b2b6 uxth r6, r6
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, vb->seqlen);
- ofs += vb->seqlenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
- 8036886: 4628 mov r0, r5
- 8036888: f7fc ff40 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, vb->olen);
- 803688c: 4631 mov r1, r6
- 803688e: 8be2 ldrh r2, [r4, #30]
- 8036890: 4628 mov r0, r5
- 8036892: f7fc ff4f bl 8033734 <snmp_asn1_enc_length>
- ofs += vb->olenlen;
- 8036896: 7e63 ldrb r3, [r4, #25]
- snmp_asn1_enc_oid(p, ofs, vb->ident_len, &vb->ident[0]);
- 8036898: 7a22 ldrb r2, [r4, #8]
- ofs += vb->seqlenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, vb->olen);
- ofs += vb->olenlen;
- 803689a: 18f6 adds r6, r6, r3
- 803689c: b2b6 uxth r6, r6
- snmp_asn1_enc_oid(p, ofs, vb->ident_len, &vb->ident[0]);
- 803689e: 4631 mov r1, r6
- 80368a0: 68e3 ldr r3, [r4, #12]
- 80368a2: 4628 mov r0, r5
- 80368a4: f7fc fffb bl 803389e <snmp_asn1_enc_oid>
- ofs += vb->olen;
- 80368a8: 8be3 ldrh r3, [r4, #30]
- snmp_asn1_enc_type(p, ofs, vb->value_type);
- 80368aa: 7c22 ldrb r2, [r4, #16]
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, vb->olen);
- ofs += vb->olenlen;
- snmp_asn1_enc_oid(p, ofs, vb->ident_len, &vb->ident[0]);
- ofs += vb->olen;
- 80368ac: 18f6 adds r6, r6, r3
- 80368ae: b2b6 uxth r6, r6
- snmp_asn1_enc_type(p, ofs, vb->value_type);
- 80368b0: 4631 mov r1, r6
- ofs += 1;
- 80368b2: 3601 adds r6, #1
- 80368b4: b2b6 uxth r6, r6
- snmp_asn1_enc_length(p, ofs, vb->olen);
- ofs += vb->olenlen;
- snmp_asn1_enc_oid(p, ofs, vb->ident_len, &vb->ident[0]);
- ofs += vb->olen;
- snmp_asn1_enc_type(p, ofs, vb->value_type);
- 80368b6: 4628 mov r0, r5
- 80368b8: f7fc ff28 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, vb->vlen);
- 80368bc: 4631 mov r1, r6
- 80368be: 4628 mov r0, r5
- 80368c0: 8c22 ldrh r2, [r4, #32]
- 80368c2: f7fc ff37 bl 8033734 <snmp_asn1_enc_length>
- ofs += vb->vlenlen;
- 80368c6: 7ea3 ldrb r3, [r4, #26]
- 80368c8: 18f6 adds r6, r6, r3
- switch (vb->value_type)
- 80368ca: 7c23 ldrb r3, [r4, #16]
- 80368cc: 2b40 cmp r3, #64 ; 0x40
- ofs += vb->olen;
- snmp_asn1_enc_type(p, ofs, vb->value_type);
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, vb->vlen);
- ofs += vb->vlenlen;
- 80368ce: b2b6 uxth r6, r6
- switch (vb->value_type)
- 80368d0: d01c beq.n 803690c <snmp_varbind_list_enc+0xd0>
- 80368d2: d806 bhi.n 80368e2 <snmp_varbind_list_enc+0xa6>
- 80368d4: 2b04 cmp r3, #4
- 80368d6: d019 beq.n 803690c <snmp_varbind_list_enc+0xd0>
- 80368d8: 2b06 cmp r3, #6
- 80368da: d01e beq.n 803691a <snmp_varbind_list_enc+0xde>
- 80368dc: 2b02 cmp r3, #2
- 80368de: d123 bne.n 8036928 <snmp_varbind_list_enc+0xec>
- 80368e0: e004 b.n 80368ec <snmp_varbind_list_enc+0xb0>
- 80368e2: 2b43 cmp r3, #67 ; 0x43
- 80368e4: d90a bls.n 80368fc <snmp_varbind_list_enc+0xc0>
- 80368e6: 2b44 cmp r3, #68 ; 0x44
- 80368e8: d11e bne.n 8036928 <snmp_varbind_list_enc+0xec>
- 80368ea: e00f b.n 803690c <snmp_varbind_list_enc+0xd0>
- {
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG):
- sint_ptr = (s32_t*)vb->value;
- snmp_asn1_enc_s32t(p, ofs, vb->vlen, *sint_ptr);
- 80368ec: 6963 ldr r3, [r4, #20]
- 80368ee: 8c22 ldrh r2, [r4, #32]
- 80368f0: 681b ldr r3, [r3, #0]
- 80368f2: 4628 mov r0, r5
- 80368f4: 4631 mov r1, r6
- 80368f6: f7fc ffa5 bl 8033844 <snmp_asn1_enc_s32t>
- break;
- 80368fa: e015 b.n 8036928 <snmp_varbind_list_enc+0xec>
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS):
- uint_ptr = (u32_t*)vb->value;
- snmp_asn1_enc_u32t(p, ofs, vb->vlen, *uint_ptr);
- 80368fc: 6963 ldr r3, [r4, #20]
- 80368fe: 8c22 ldrh r2, [r4, #32]
- 8036900: 681b ldr r3, [r3, #0]
- 8036902: 4628 mov r0, r5
- 8036904: 4631 mov r1, r6
- 8036906: f7fc ff5d bl 80337c4 <snmp_asn1_enc_u32t>
- break;
- 803690a: e00d b.n 8036928 <snmp_varbind_list_enc+0xec>
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR):
- case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_OPAQUE):
- raw_ptr = (u8_t*)vb->value;
- snmp_asn1_enc_raw(p, ofs, vb->vlen, raw_ptr);
- 803690c: 4628 mov r0, r5
- 803690e: 4631 mov r1, r6
- 8036910: 8c22 ldrh r2, [r4, #32]
- 8036912: 6963 ldr r3, [r4, #20]
- 8036914: f7fd f836 bl 8033984 <snmp_asn1_enc_raw>
- break;
- 8036918: e006 b.n 8036928 <snmp_varbind_list_enc+0xec>
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_NUL):
- break;
- case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID):
- sint_ptr = (s32_t*)vb->value;
- snmp_asn1_enc_oid(p, ofs, vb->value_len / sizeof(s32_t), sint_ptr);
- 803691a: 7c62 ldrb r2, [r4, #17]
- 803691c: 6963 ldr r3, [r4, #20]
- 803691e: 4628 mov r0, r5
- 8036920: 4631 mov r1, r6
- 8036922: 0892 lsrs r2, r2, #2
- 8036924: f7fc ffbb bl 803389e <snmp_asn1_enc_oid>
- break;
- default:
- /* unsupported type */
- break;
- };
- ofs += vb->vlen;
- 8036928: 8c23 ldrh r3, [r4, #32]
- vb = vb->next;
- 803692a: 6824 ldr r4, [r4, #0]
- break;
- default:
- /* unsupported type */
- break;
- };
- ofs += vb->vlen;
- 803692c: 18f6 adds r6, r6, r3
- 803692e: b2b6 uxth r6, r6
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, root->seqlen);
- ofs += root->seqlenlen;
- vb = root->head;
- while ( vb != NULL )
- 8036930: 2c00 cmp r4, #0
- 8036932: d195 bne.n 8036860 <snmp_varbind_list_enc+0x24>
- };
- ofs += vb->vlen;
- vb = vb->next;
- }
- return ofs;
- }
- 8036934: 4630 mov r0, r6
- 8036936: bd70 pop {r4, r5, r6, pc}
- 08036938 <snmp_trap_dst_enable>:
- * @param enable switch if 0 destination is disabled >0 enabled.
- */
- void
- snmp_trap_dst_enable(u8_t dst_idx, u8_t enable)
- {
- if (dst_idx < SNMP_TRAP_DESTINATIONS)
- 8036938: b908 cbnz r0, 803693e <snmp_trap_dst_enable+0x6>
- {
- trap_dst[dst_idx].enable = enable;
- 803693a: 4b01 ldr r3, [pc, #4] ; (8036940 <snmp_trap_dst_enable+0x8>)
- 803693c: 7119 strb r1, [r3, #4]
- 803693e: 4770 bx lr
- 8036940: 2000f820 .word 0x2000f820
- 08036944 <snmp_trap_dst_ip_set>:
- * @param dst IPv4 address in host order.
- */
- void
- snmp_trap_dst_ip_set(u8_t dst_idx, ip_addr_t *dst)
- {
- if (dst_idx < SNMP_TRAP_DESTINATIONS)
- 8036944: b918 cbnz r0, 803694e <snmp_trap_dst_ip_set+0xa>
- {
- ip_addr_set(&trap_dst[dst_idx].dip, dst);
- 8036946: b101 cbz r1, 803694a <snmp_trap_dst_ip_set+0x6>
- 8036948: 6809 ldr r1, [r1, #0]
- 803694a: 4b01 ldr r3, [pc, #4] ; (8036950 <snmp_trap_dst_ip_set+0xc>)
- 803694c: 6019 str r1, [r3, #0]
- 803694e: 4770 bx lr
- 8036950: 2000f820 .word 0x2000f820
- 08036954 <snmp_send_response>:
- * @note the caller is responsible for filling in outvb in the m_stat
- * and provide error-status and index (except for tooBig errors) ...
- */
- err_t
- snmp_send_response(struct snmp_msg_pstat *m_stat)
- {
- 8036954: b5f0 push {r4, r5, r6, r7, lr}
- 8036956: 4604 mov r4, r0
- 8036958: b085 sub sp, #20
- struct snmp_varbind_root emptyvb = {NULL, NULL, 0, 0, 0};
- 803695a: 220c movs r2, #12
- 803695c: 2100 movs r1, #0
- 803695e: a801 add r0, sp, #4
- struct pbuf *p;
- u16_t tot_len;
- err_t err;
- /* pass 0, calculate length fields */
- tot_len = snmp_varbind_list_sum(&m_stat->outvb);
- 8036960: f504 7686 add.w r6, r4, #268 ; 0x10c
- * and provide error-status and index (except for tooBig errors) ...
- */
- err_t
- snmp_send_response(struct snmp_msg_pstat *m_stat)
- {
- struct snmp_varbind_root emptyvb = {NULL, NULL, 0, 0, 0};
- 8036964: f7eb f8cc bl 8021b00 <memset>
- struct pbuf *p;
- u16_t tot_len;
- err_t err;
- /* pass 0, calculate length fields */
- tot_len = snmp_varbind_list_sum(&m_stat->outvb);
- 8036968: 4630 mov r0, r6
- 803696a: f7ff fe89 bl 8036680 <snmp_varbind_list_sum>
- 803696e: 4601 mov r1, r0
- tot_len = snmp_resp_header_sum(m_stat, tot_len);
- 8036970: 4620 mov r0, r4
- 8036972: f7ff feeb bl 803674c <snmp_resp_header_sum>
- /* try allocating pbuf(s) for complete response */
- p = pbuf_alloc(PBUF_TRANSPORT, tot_len, PBUF_POOL);
- 8036976: 2203 movs r2, #3
- u16_t tot_len;
- err_t err;
- /* pass 0, calculate length fields */
- tot_len = snmp_varbind_list_sum(&m_stat->outvb);
- tot_len = snmp_resp_header_sum(m_stat, tot_len);
- 8036978: 4601 mov r1, r0
- /* try allocating pbuf(s) for complete response */
- p = pbuf_alloc(PBUF_TRANSPORT, tot_len, PBUF_POOL);
- 803697a: 2000 movs r0, #0
- 803697c: f7f9 fa93 bl 802fea6 <pbuf_alloc>
- if (p == NULL)
- 8036980: 4605 mov r5, r0
- 8036982: b990 cbnz r0, 80369aa <snmp_send_response+0x56>
- {
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_snd_response() tooBig\n"));
- /* can't construct reply, return error-status tooBig */
- m_stat->error_status = SNMP_ES_TOOBIG;
- 8036984: 2301 movs r3, #1
- 8036986: 6123 str r3, [r4, #16]
- m_stat->error_index = 0;
- 8036988: 6160 str r0, [r4, #20]
- /* pass 0, recalculate lengths, for empty varbind-list */
- tot_len = snmp_varbind_list_sum(&emptyvb);
- 803698a: a801 add r0, sp, #4
- 803698c: f7ff fe78 bl 8036680 <snmp_varbind_list_sum>
- 8036990: 4601 mov r1, r0
- tot_len = snmp_resp_header_sum(m_stat, tot_len);
- 8036992: 4620 mov r0, r4
- 8036994: f7ff feda bl 803674c <snmp_resp_header_sum>
- /* retry allocation once for header and empty varbind-list */
- p = pbuf_alloc(PBUF_TRANSPORT, tot_len, PBUF_POOL);
- 8036998: 2203 movs r2, #3
- /* can't construct reply, return error-status tooBig */
- m_stat->error_status = SNMP_ES_TOOBIG;
- m_stat->error_index = 0;
- /* pass 0, recalculate lengths, for empty varbind-list */
- tot_len = snmp_varbind_list_sum(&emptyvb);
- tot_len = snmp_resp_header_sum(m_stat, tot_len);
- 803699a: 4601 mov r1, r0
- /* retry allocation once for header and empty varbind-list */
- p = pbuf_alloc(PBUF_TRANSPORT, tot_len, PBUF_POOL);
- 803699c: 4628 mov r0, r5
- 803699e: f7f9 fa82 bl 802fea6 <pbuf_alloc>
- }
- if (p != NULL)
- 80369a2: 4605 mov r5, r0
- 80369a4: 2800 cmp r0, #0
- 80369a6: f000 80dc beq.w 8036b62 <snmp_send_response+0x20e>
- snmp_resp_header_enc(struct snmp_msg_pstat *m_stat, struct pbuf *p)
- {
- u16_t ofs;
- ofs = 0;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- 80369aa: 2100 movs r1, #0
- 80369ac: 2230 movs r2, #48 ; 0x30
- 80369ae: 4628 mov r0, r5
- 80369b0: f7fc feac bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.seqlen);
- 80369b4: 2101 movs r1, #1
- 80369b6: f8b4 212c ldrh.w r2, [r4, #300] ; 0x12c
- 80369ba: 4628 mov r0, r5
- 80369bc: f7fc feba bl 8033734 <snmp_asn1_enc_length>
- ofs += m_stat->rhl.seqlenlen;
- 80369c0: f894 711e ldrb.w r7, [r4, #286] ; 0x11e
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 80369c4: 2202 movs r2, #2
- 80369c6: 1c79 adds r1, r7, #1
- 80369c8: 4628 mov r0, r5
- ofs += 1;
- 80369ca: 3702 adds r7, #2
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.seqlen);
- ofs += m_stat->rhl.seqlenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 80369cc: f7fc fe9e bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.verlen);
- 80369d0: 4639 mov r1, r7
- 80369d2: f8b4 212a ldrh.w r2, [r4, #298] ; 0x12a
- 80369d6: 4628 mov r0, r5
- 80369d8: f7fc feac bl 8033734 <snmp_asn1_enc_length>
- ofs += m_stat->rhl.verlenlen;
- 80369dc: f894 311d ldrb.w r3, [r4, #285] ; 0x11d
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.verlen, snmp_version);
- 80369e0: f8b4 212a ldrh.w r2, [r4, #298] ; 0x12a
- ofs += m_stat->rhl.seqlenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.verlen);
- ofs += m_stat->rhl.verlenlen;
- 80369e4: 18ff adds r7, r7, r3
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.verlen, snmp_version);
- 80369e6: 4b61 ldr r3, [pc, #388] ; (8036b6c <snmp_send_response+0x218>)
- 80369e8: 4639 mov r1, r7
- 80369ea: 681b ldr r3, [r3, #0]
- 80369ec: 4628 mov r0, r5
- 80369ee: f7fc ff29 bl 8033844 <snmp_asn1_enc_s32t>
- ofs += m_stat->rhl.verlen;
- 80369f2: f8b4 312a ldrh.w r3, [r4, #298] ; 0x12a
- 80369f6: 18ff adds r7, r7, r3
- 80369f8: b2bf uxth r7, r7
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR));
- 80369fa: 4639 mov r1, r7
- ofs += 1;
- 80369fc: 3701 adds r7, #1
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.verlen);
- ofs += m_stat->rhl.verlenlen;
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.verlen, snmp_version);
- ofs += m_stat->rhl.verlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR));
- 80369fe: 2204 movs r2, #4
- ofs += 1;
- 8036a00: b2bf uxth r7, r7
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.verlen);
- ofs += m_stat->rhl.verlenlen;
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.verlen, snmp_version);
- ofs += m_stat->rhl.verlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR));
- 8036a02: 4628 mov r0, r5
- 8036a04: f7fc fe82 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.comlen);
- 8036a08: 4639 mov r1, r7
- 8036a0a: f8b4 2128 ldrh.w r2, [r4, #296] ; 0x128
- 8036a0e: 4628 mov r0, r5
- 8036a10: f7fc fe90 bl 8033734 <snmp_asn1_enc_length>
- ofs += m_stat->rhl.comlenlen;
- 8036a14: f894 311c ldrb.w r3, [r4, #284] ; 0x11c
- snmp_asn1_enc_raw(p, ofs, m_stat->rhl.comlen, m_stat->community);
- 8036a18: f8b4 2128 ldrh.w r2, [r4, #296] ; 0x128
- ofs += m_stat->rhl.verlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.comlen);
- ofs += m_stat->rhl.comlenlen;
- 8036a1c: 18ff adds r7, r7, r3
- 8036a1e: b2bf uxth r7, r7
- snmp_asn1_enc_raw(p, ofs, m_stat->rhl.comlen, m_stat->community);
- 8036a20: 4639 mov r1, r7
- 8036a22: f104 0318 add.w r3, r4, #24
- 8036a26: 4628 mov r0, r5
- 8036a28: f7fc ffac bl 8033984 <snmp_asn1_enc_raw>
- ofs += m_stat->rhl.comlen;
- 8036a2c: f8b4 3128 ldrh.w r3, [r4, #296] ; 0x128
- 8036a30: 18ff adds r7, r7, r3
- 8036a32: b2bf uxth r7, r7
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_RESP));
- 8036a34: 4639 mov r1, r7
- ofs += 1;
- 8036a36: 3701 adds r7, #1
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.comlen);
- ofs += m_stat->rhl.comlenlen;
- snmp_asn1_enc_raw(p, ofs, m_stat->rhl.comlen, m_stat->community);
- ofs += m_stat->rhl.comlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_RESP));
- 8036a38: 22a2 movs r2, #162 ; 0xa2
- ofs += 1;
- 8036a3a: b2bf uxth r7, r7
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.comlen);
- ofs += m_stat->rhl.comlenlen;
- snmp_asn1_enc_raw(p, ofs, m_stat->rhl.comlen, m_stat->community);
- ofs += m_stat->rhl.comlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_RESP));
- 8036a3c: 4628 mov r0, r5
- 8036a3e: f7fc fe65 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.pdulen);
- 8036a42: 4639 mov r1, r7
- 8036a44: f8b4 2126 ldrh.w r2, [r4, #294] ; 0x126
- 8036a48: 4628 mov r0, r5
- 8036a4a: f7fc fe73 bl 8033734 <snmp_asn1_enc_length>
- ofs += m_stat->rhl.pdulenlen;
- 8036a4e: f894 311b ldrb.w r3, [r4, #283] ; 0x11b
- 8036a52: 18ff adds r7, r7, r3
- 8036a54: b2bf uxth r7, r7
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036a56: 4639 mov r1, r7
- ofs += 1;
- 8036a58: 3701 adds r7, #1
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_RESP));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.pdulen);
- ofs += m_stat->rhl.pdulenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036a5a: 2202 movs r2, #2
- ofs += 1;
- 8036a5c: b2bf uxth r7, r7
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_RESP));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.pdulen);
- ofs += m_stat->rhl.pdulenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036a5e: 4628 mov r0, r5
- 8036a60: f7fc fe54 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.ridlen);
- 8036a64: 4639 mov r1, r7
- 8036a66: f8b4 2124 ldrh.w r2, [r4, #292] ; 0x124
- 8036a6a: 4628 mov r0, r5
- 8036a6c: f7fc fe62 bl 8033734 <snmp_asn1_enc_length>
- ofs += m_stat->rhl.ridlenlen;
- 8036a70: f894 311a ldrb.w r3, [r4, #282] ; 0x11a
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.ridlen, m_stat->rid);
- 8036a74: f8b4 2124 ldrh.w r2, [r4, #292] ; 0x124
- ofs += m_stat->rhl.pdulenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.ridlen);
- ofs += m_stat->rhl.ridlenlen;
- 8036a78: 18ff adds r7, r7, r3
- 8036a7a: b2bf uxth r7, r7
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.ridlen, m_stat->rid);
- 8036a7c: 4639 mov r1, r7
- 8036a7e: 68e3 ldr r3, [r4, #12]
- 8036a80: 4628 mov r0, r5
- 8036a82: f7fc fedf bl 8033844 <snmp_asn1_enc_s32t>
- ofs += m_stat->rhl.ridlen;
- 8036a86: f8b4 3124 ldrh.w r3, [r4, #292] ; 0x124
- 8036a8a: 18ff adds r7, r7, r3
- 8036a8c: b2bf uxth r7, r7
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036a8e: 4639 mov r1, r7
- ofs += 1;
- 8036a90: 3701 adds r7, #1
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.ridlen);
- ofs += m_stat->rhl.ridlenlen;
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.ridlen, m_stat->rid);
- ofs += m_stat->rhl.ridlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036a92: 2202 movs r2, #2
- ofs += 1;
- 8036a94: b2bf uxth r7, r7
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.ridlen);
- ofs += m_stat->rhl.ridlenlen;
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.ridlen, m_stat->rid);
- ofs += m_stat->rhl.ridlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036a96: 4628 mov r0, r5
- 8036a98: f7fc fe38 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.errstatlen);
- 8036a9c: 4639 mov r1, r7
- 8036a9e: f8b4 2122 ldrh.w r2, [r4, #290] ; 0x122
- 8036aa2: 4628 mov r0, r5
- 8036aa4: f7fc fe46 bl 8033734 <snmp_asn1_enc_length>
- ofs += m_stat->rhl.errstatlenlen;
- 8036aa8: f894 3119 ldrb.w r3, [r4, #281] ; 0x119
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.errstatlen, m_stat->error_status);
- 8036aac: f8b4 2122 ldrh.w r2, [r4, #290] ; 0x122
- ofs += m_stat->rhl.ridlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.errstatlen);
- ofs += m_stat->rhl.errstatlenlen;
- 8036ab0: 18ff adds r7, r7, r3
- 8036ab2: b2bf uxth r7, r7
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.errstatlen, m_stat->error_status);
- 8036ab4: 4639 mov r1, r7
- 8036ab6: 6923 ldr r3, [r4, #16]
- 8036ab8: 4628 mov r0, r5
- 8036aba: f7fc fec3 bl 8033844 <snmp_asn1_enc_s32t>
- ofs += m_stat->rhl.errstatlen;
- 8036abe: f8b4 3122 ldrh.w r3, [r4, #290] ; 0x122
- 8036ac2: 18ff adds r7, r7, r3
- 8036ac4: b2bf uxth r7, r7
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036ac6: 4639 mov r1, r7
- ofs += 1;
- 8036ac8: 3701 adds r7, #1
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.errstatlen);
- ofs += m_stat->rhl.errstatlenlen;
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.errstatlen, m_stat->error_status);
- ofs += m_stat->rhl.errstatlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036aca: 2202 movs r2, #2
- ofs += 1;
- 8036acc: b2bf uxth r7, r7
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.errstatlen);
- ofs += m_stat->rhl.errstatlenlen;
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.errstatlen, m_stat->error_status);
- ofs += m_stat->rhl.errstatlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036ace: 4628 mov r0, r5
- 8036ad0: f7fc fe1c bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.erridxlen);
- 8036ad4: 4639 mov r1, r7
- 8036ad6: f8b4 2120 ldrh.w r2, [r4, #288] ; 0x120
- 8036ada: 4628 mov r0, r5
- 8036adc: f7fc fe2a bl 8033734 <snmp_asn1_enc_length>
- ofs += m_stat->rhl.erridxlenlen;
- 8036ae0: f894 3118 ldrb.w r3, [r4, #280] ; 0x118
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.erridxlen, m_stat->error_index);
- 8036ae4: f8b4 2120 ldrh.w r2, [r4, #288] ; 0x120
- ofs += m_stat->rhl.errstatlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_stat->rhl.erridxlen);
- ofs += m_stat->rhl.erridxlenlen;
- 8036ae8: 18ff adds r7, r7, r3
- 8036aea: b2bf uxth r7, r7
- snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.erridxlen, m_stat->error_index);
- 8036aec: 4639 mov r1, r7
- 8036aee: 6963 ldr r3, [r4, #20]
- 8036af0: 4628 mov r0, r5
- 8036af2: f7fc fea7 bl 8033844 <snmp_asn1_enc_s32t>
- ofs += m_stat->rhl.erridxlen;
- 8036af6: f8b4 3120 ldrh.w r3, [r4, #288] ; 0x120
- 8036afa: 18fa adds r2, r7, r3
- LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_snd_response() p != NULL\n"));
- /* pass 1, size error, encode packet ino the pbuf(s) */
- ofs = snmp_resp_header_enc(m_stat, p);
- snmp_varbind_list_enc(&m_stat->outvb, p, ofs);
- 8036afc: 4630 mov r0, r6
- 8036afe: 4629 mov r1, r5
- 8036b00: b292 uxth r2, r2
- 8036b02: f7ff fe9b bl 803683c <snmp_varbind_list_enc>
- switch (m_stat->error_status)
- 8036b06: 6923 ldr r3, [r4, #16]
- 8036b08: 3b01 subs r3, #1
- 8036b0a: 2b04 cmp r3, #4
- 8036b0c: d80f bhi.n 8036b2e <snmp_send_response+0x1da>
- 8036b0e: e8df f003 tbb [pc, r3]
- 8036b12: 0603 .short 0x0603
- 8036b14: 0e09 .short 0x0e09
- 8036b16: 0c .byte 0x0c
- 8036b17: 00 .byte 0x00
- {
- case SNMP_ES_TOOBIG:
- snmp_inc_snmpouttoobigs();
- 8036b18: f7fe fa0c bl 8034f34 <snmp_inc_snmpouttoobigs>
- break;
- 8036b1c: e007 b.n 8036b2e <snmp_send_response+0x1da>
- case SNMP_ES_NOSUCHNAME:
- snmp_inc_snmpoutnosuchnames();
- 8036b1e: f7fe fa11 bl 8034f44 <snmp_inc_snmpoutnosuchnames>
- break;
- 8036b22: e004 b.n 8036b2e <snmp_send_response+0x1da>
- case SNMP_ES_BADVALUE:
- snmp_inc_snmpoutbadvalues();
- 8036b24: f7fe fa16 bl 8034f54 <snmp_inc_snmpoutbadvalues>
- break;
- 8036b28: e001 b.n 8036b2e <snmp_send_response+0x1da>
- case SNMP_ES_GENERROR:
- snmp_inc_snmpoutgenerrs();
- 8036b2a: f7fe fa1b bl 8034f64 <snmp_inc_snmpoutgenerrs>
- break;
- }
- snmp_inc_snmpoutgetresponses();
- 8036b2e: f7fe fa21 bl 8034f74 <snmp_inc_snmpoutgetresponses>
- snmp_inc_snmpoutpkts();
- 8036b32: f7fe f97f bl 8034e34 <snmp_inc_snmpoutpkts>
- /** @todo do we need separate rx and tx pcbs for threaded case? */
- /** connect to the originating source */
- udp_connect(m_stat->pcb, &m_stat->sip, m_stat->sp);
- 8036b36: 8922 ldrh r2, [r4, #8]
- 8036b38: 6820 ldr r0, [r4, #0]
- 8036b3a: 1d21 adds r1, r4, #4
- 8036b3c: f7fb ffa2 bl 8032a84 <udp_connect>
- err = udp_send(m_stat->pcb, p);
- 8036b40: 4629 mov r1, r5
- 8036b42: 6820 ldr r0, [r4, #0]
- 8036b44: f7fb ff99 bl 8032a7a <udp_send>
- /** @todo release some memory, retry and return tooBig? tooMuchHassle? */
- err = ERR_MEM;
- }
- else
- {
- err = ERR_OK;
- 8036b48: f1b0 3fff cmp.w r0, #4294967295
- 8036b4c: bf0c ite eq
- 8036b4e: f04f 36ff moveq.w r6, #4294967295
- 8036b52: 2600 movne r6, #0
- }
- /** disassociate remote address and port with this pcb */
- udp_disconnect(m_stat->pcb);
- 8036b54: 6820 ldr r0, [r4, #0]
- 8036b56: f7fb ffbb bl 8032ad0 <udp_disconnect>
- pbuf_free(p);
- 8036b5a: 4628 mov r0, r5
- 8036b5c: f7f9 f956 bl 802fe0c <pbuf_free>
- 8036b60: e000 b.n 8036b64 <snmp_send_response+0x210>
- }
- else
- {
- /* first pbuf alloc try or retry alloc failed
- very low on memory, couldn't return tooBig */
- return ERR_MEM;
- 8036b62: 26ff movs r6, #255 ; 0xff
- }
- }
- 8036b64: b270 sxtb r0, r6
- 8036b66: b005 add sp, #20
- 8036b68: bdf0 pop {r4, r5, r6, r7, pc}
- 8036b6a: bf00 nop
- 8036b6c: 0804592c .word 0x0804592c
- 08036b70 <snmp_send_trap>:
- * and .iso.org.dod.internet.private.enterprises.yourenterprise
- * (sysObjectID) for specific traps.
- */
- err_t
- snmp_send_trap(s8_t generic_trap, struct snmp_obj_id *eoid, s32_t specific_trap)
- {
- 8036b70: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- struct pbuf *p;
- u16_t i,tot_len;
- for (i=0, td = &trap_dst[0]; i<SNMP_TRAP_DESTINATIONS; i++, td++)
- {
- if ((td->enable != 0) && !ip_addr_isany(&td->dip))
- 8036b74: 4b11 ldr r3, [pc, #68] ; (8036bbc <snmp_send_trap+0x4c>)
- * and .iso.org.dod.internet.private.enterprises.yourenterprise
- * (sysObjectID) for specific traps.
- */
- err_t
- snmp_send_trap(s8_t generic_trap, struct snmp_obj_id *eoid, s32_t specific_trap)
- {
- 8036b76: 4617 mov r7, r2
- struct pbuf *p;
- u16_t i,tot_len;
- for (i=0, td = &trap_dst[0]; i<SNMP_TRAP_DESTINATIONS; i++, td++)
- {
- if ((td->enable != 0) && !ip_addr_isany(&td->dip))
- 8036b78: 791a ldrb r2, [r3, #4]
- * and .iso.org.dod.internet.private.enterprises.yourenterprise
- * (sysObjectID) for specific traps.
- */
- err_t
- snmp_send_trap(s8_t generic_trap, struct snmp_obj_id *eoid, s32_t specific_trap)
- {
- 8036b7a: b085 sub sp, #20
- 8036b7c: 4605 mov r5, r0
- 8036b7e: 460e mov r6, r1
- struct pbuf *p;
- u16_t i,tot_len;
- for (i=0, td = &trap_dst[0]; i<SNMP_TRAP_DESTINATIONS; i++, td++)
- {
- if ((td->enable != 0) && !ip_addr_isany(&td->dip))
- 8036b80: 2a00 cmp r2, #0
- 8036b82: f000 81b8 beq.w 8036ef6 <snmp_send_trap+0x386>
- 8036b86: 6818 ldr r0, [r3, #0]
- 8036b88: 2800 cmp r0, #0
- 8036b8a: f000 81b4 beq.w 8036ef6 <snmp_send_trap+0x386>
- {
- /* network order trap destination */
- ip_addr_copy(trap_msg.dip, td->dip);
- 8036b8e: 4c0c ldr r4, [pc, #48] ; (8036bc0 <snmp_send_trap+0x50>)
- 8036b90: 6060 str r0, [r4, #4]
- /* lookup current source address for this dst */
- dst_if = ip_route(&td->dip);
- 8036b92: 4618 mov r0, r3
- 8036b94: f7fc f9e6 bl 8032f64 <ip_route>
- ip_addr_copy(dst_ip, dst_if->ip_addr);
- 8036b98: 6843 ldr r3, [r0, #4]
- /* @todo: what about IPv6? */
- trap_msg.sip_raw[0] = ip4_addr1(&dst_ip);
- trap_msg.sip_raw[1] = ip4_addr2(&dst_ip);
- trap_msg.sip_raw[2] = ip4_addr3(&dst_ip);
- trap_msg.sip_raw[3] = ip4_addr4(&dst_ip);
- trap_msg.gen_trap = generic_trap;
- 8036b9a: 6125 str r5, [r4, #16]
- /* lookup current source address for this dst */
- dst_if = ip_route(&td->dip);
- ip_addr_copy(dst_ip, dst_if->ip_addr);
- /* @todo: what about IPv6? */
- trap_msg.sip_raw[0] = ip4_addr1(&dst_ip);
- trap_msg.sip_raw[1] = ip4_addr2(&dst_ip);
- 8036b9c: f3c3 2207 ubfx r2, r3, #8, #8
- ip_addr_copy(trap_msg.dip, td->dip);
- /* lookup current source address for this dst */
- dst_if = ip_route(&td->dip);
- ip_addr_copy(dst_ip, dst_if->ip_addr);
- /* @todo: what about IPv6? */
- trap_msg.sip_raw[0] = ip4_addr1(&dst_ip);
- 8036ba0: 7323 strb r3, [r4, #12]
- trap_msg.sip_raw[1] = ip4_addr2(&dst_ip);
- 8036ba2: 7362 strb r2, [r4, #13]
- trap_msg.sip_raw[2] = ip4_addr3(&dst_ip);
- trap_msg.sip_raw[3] = ip4_addr4(&dst_ip);
- trap_msg.gen_trap = generic_trap;
- trap_msg.spc_trap = specific_trap;
- if (generic_trap == SNMP_GENTRAP_ENTERPRISESPC)
- 8036ba4: 2d06 cmp r5, #6
- dst_if = ip_route(&td->dip);
- ip_addr_copy(dst_ip, dst_if->ip_addr);
- /* @todo: what about IPv6? */
- trap_msg.sip_raw[0] = ip4_addr1(&dst_ip);
- trap_msg.sip_raw[1] = ip4_addr2(&dst_ip);
- trap_msg.sip_raw[2] = ip4_addr3(&dst_ip);
- 8036ba6: f3c3 4207 ubfx r2, r3, #16, #8
- trap_msg.sip_raw[3] = ip4_addr4(&dst_ip);
- 8036baa: f3c3 6307 ubfx r3, r3, #24, #8
- dst_if = ip_route(&td->dip);
- ip_addr_copy(dst_ip, dst_if->ip_addr);
- /* @todo: what about IPv6? */
- trap_msg.sip_raw[0] = ip4_addr1(&dst_ip);
- trap_msg.sip_raw[1] = ip4_addr2(&dst_ip);
- trap_msg.sip_raw[2] = ip4_addr3(&dst_ip);
- 8036bae: 73a2 strb r2, [r4, #14]
- trap_msg.sip_raw[3] = ip4_addr4(&dst_ip);
- 8036bb0: 73e3 strb r3, [r4, #15]
- trap_msg.gen_trap = generic_trap;
- trap_msg.spc_trap = specific_trap;
- 8036bb2: 6167 str r7, [r4, #20]
- if (generic_trap == SNMP_GENTRAP_ENTERPRISESPC)
- 8036bb4: d106 bne.n 8036bc4 <snmp_send_trap+0x54>
- {
- /* enterprise-Specific trap */
- trap_msg.enterprise = eoid;
- 8036bb6: 60a6 str r6, [r4, #8]
- 8036bb8: e008 b.n 8036bcc <snmp_send_trap+0x5c>
- 8036bba: bf00 nop
- 8036bbc: 2000f820 .word 0x2000f820
- 8036bc0: 2000f828 .word 0x2000f828
- }
- else
- {
- /* generic (MIB-II) trap */
- snmp_get_snmpgrpid_ptr(&trap_msg.enterprise);
- 8036bc4: f104 0008 add.w r0, r4, #8
- 8036bc8: f7fe f9e4 bl 8034f94 <snmp_get_snmpgrpid_ptr>
- }
- snmp_get_sysuptime(&trap_msg.ts);
- 8036bcc: 48bb ldr r0, [pc, #748] ; (8036ebc <snmp_send_trap+0x34c>)
- struct snmp_trap_header_lengths *thl;
- thl = &m_trap->thl;
- tot_len = vb_len;
- snmp_asn1_enc_u32t_cnt(m_trap->ts, &thl->tslen);
- 8036bce: 4cbc ldr r4, [pc, #752] ; (8036ec0 <snmp_send_trap+0x350>)
- else
- {
- /* generic (MIB-II) trap */
- snmp_get_snmpgrpid_ptr(&trap_msg.enterprise);
- }
- snmp_get_sysuptime(&trap_msg.ts);
- 8036bd0: f7fd fd42 bl 8034658 <snmp_get_sysuptime>
- /* pass 0, calculate length fields */
- tot_len = snmp_varbind_list_sum(&trap_msg.outvb);
- 8036bd4: 48bb ldr r0, [pc, #748] ; (8036ec4 <snmp_send_trap+0x354>)
- 8036bd6: f7ff fd53 bl 8036680 <snmp_varbind_list_sum>
- struct snmp_trap_header_lengths *thl;
- thl = &m_trap->thl;
- tot_len = vb_len;
- snmp_asn1_enc_u32t_cnt(m_trap->ts, &thl->tslen);
- 8036bda: f104 0132 add.w r1, r4, #50 ; 0x32
- snmp_get_snmpgrpid_ptr(&trap_msg.enterprise);
- }
- snmp_get_sysuptime(&trap_msg.ts);
- /* pass 0, calculate length fields */
- tot_len = snmp_varbind_list_sum(&trap_msg.outvb);
- 8036bde: 4606 mov r6, r0
- struct snmp_trap_header_lengths *thl;
- thl = &m_trap->thl;
- tot_len = vb_len;
- snmp_asn1_enc_u32t_cnt(m_trap->ts, &thl->tslen);
- 8036be0: 69a0 ldr r0, [r4, #24]
- 8036be2: f7fc fd51 bl 8033688 <snmp_asn1_enc_u32t_cnt>
- snmp_asn1_enc_length_cnt(thl->tslen, &thl->tslenlen);
- 8036be6: 8e60 ldrh r0, [r4, #50] ; 0x32
- 8036be8: f104 0128 add.w r1, r4, #40 ; 0x28
- 8036bec: f7fc fd41 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + thl->tslen + thl->tslenlen;
- 8036bf0: f8b4 c032 ldrh.w ip, [r4, #50] ; 0x32
- snmp_asn1_enc_s32t_cnt(m_trap->spc_trap, &thl->strplen);
- 8036bf4: 6960 ldr r0, [r4, #20]
- 8036bf6: f8cd c004 str.w ip, [sp, #4]
- 8036bfa: f104 0134 add.w r1, r4, #52 ; 0x34
- thl = &m_trap->thl;
- tot_len = vb_len;
- snmp_asn1_enc_u32t_cnt(m_trap->ts, &thl->tslen);
- snmp_asn1_enc_length_cnt(thl->tslen, &thl->tslenlen);
- tot_len += 1 + thl->tslen + thl->tslenlen;
- 8036bfe: f894 9028 ldrb.w r9, [r4, #40] ; 0x28
- snmp_asn1_enc_s32t_cnt(m_trap->spc_trap, &thl->strplen);
- 8036c02: f7fc fd56 bl 80336b2 <snmp_asn1_enc_s32t_cnt>
- snmp_asn1_enc_length_cnt(thl->strplen, &thl->strplenlen);
- 8036c06: 8ea0 ldrh r0, [r4, #52] ; 0x34
- 8036c08: f104 0129 add.w r1, r4, #41 ; 0x29
- 8036c0c: f7fc fd31 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + thl->strplen + thl->strplenlen;
- 8036c10: 8ea3 ldrh r3, [r4, #52] ; 0x34
- snmp_asn1_enc_s32t_cnt(m_trap->gen_trap, &thl->gtrplen);
- 8036c12: 6920 ldr r0, [r4, #16]
- 8036c14: 9302 str r3, [sp, #8]
- 8036c16: f104 0136 add.w r1, r4, #54 ; 0x36
- snmp_asn1_enc_length_cnt(thl->tslen, &thl->tslenlen);
- tot_len += 1 + thl->tslen + thl->tslenlen;
- snmp_asn1_enc_s32t_cnt(m_trap->spc_trap, &thl->strplen);
- snmp_asn1_enc_length_cnt(thl->strplen, &thl->strplenlen);
- tot_len += 1 + thl->strplen + thl->strplenlen;
- 8036c1a: f894 8029 ldrb.w r8, [r4, #41] ; 0x29
- snmp_asn1_enc_s32t_cnt(m_trap->gen_trap, &thl->gtrplen);
- snmp_asn1_enc_length_cnt(thl->gtrplen, &thl->gtrplenlen);
- tot_len += 1 + thl->gtrplen + thl->gtrplenlen;
- thl->aaddrlen = 4;
- 8036c1e: 2504 movs r5, #4
- snmp_asn1_enc_s32t_cnt(m_trap->spc_trap, &thl->strplen);
- snmp_asn1_enc_length_cnt(thl->strplen, &thl->strplenlen);
- tot_len += 1 + thl->strplen + thl->strplenlen;
- snmp_asn1_enc_s32t_cnt(m_trap->gen_trap, &thl->gtrplen);
- 8036c20: f7fc fd47 bl 80336b2 <snmp_asn1_enc_s32t_cnt>
- snmp_asn1_enc_length_cnt(thl->gtrplen, &thl->gtrplenlen);
- 8036c24: 8ee0 ldrh r0, [r4, #54] ; 0x36
- 8036c26: f104 012a add.w r1, r4, #42 ; 0x2a
- 8036c2a: f7fc fd22 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + thl->gtrplen + thl->gtrplenlen;
- thl->aaddrlen = 4;
- snmp_asn1_enc_length_cnt(thl->aaddrlen, &thl->aaddrlenlen);
- 8036c2e: 4628 mov r0, r5
- 8036c30: f104 012b add.w r1, r4, #43 ; 0x2b
- snmp_asn1_enc_length_cnt(thl->strplen, &thl->strplenlen);
- tot_len += 1 + thl->strplen + thl->strplenlen;
- snmp_asn1_enc_s32t_cnt(m_trap->gen_trap, &thl->gtrplen);
- snmp_asn1_enc_length_cnt(thl->gtrplen, &thl->gtrplenlen);
- tot_len += 1 + thl->gtrplen + thl->gtrplenlen;
- 8036c34: f8b4 b036 ldrh.w fp, [r4, #54] ; 0x36
- 8036c38: f894 702a ldrb.w r7, [r4, #42] ; 0x2a
- thl->aaddrlen = 4;
- 8036c3c: 8725 strh r5, [r4, #56] ; 0x38
- snmp_asn1_enc_length_cnt(thl->aaddrlen, &thl->aaddrlenlen);
- 8036c3e: f7fc fd18 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + thl->aaddrlen + thl->aaddrlenlen;
- 8036c42: f894 202b ldrb.w r2, [r4, #43] ; 0x2b
- snmp_asn1_enc_oid_cnt(m_trap->enterprise->len, &m_trap->enterprise->id[0], &thl->eidlen);
- 8036c46: 68a1 ldr r1, [r4, #8]
- snmp_asn1_enc_length_cnt(thl->gtrplen, &thl->gtrplenlen);
- tot_len += 1 + thl->gtrplen + thl->gtrplenlen;
- thl->aaddrlen = 4;
- snmp_asn1_enc_length_cnt(thl->aaddrlen, &thl->aaddrlenlen);
- tot_len += 1 + thl->aaddrlen + thl->aaddrlenlen;
- 8036c48: 9203 str r2, [sp, #12]
- snmp_asn1_enc_oid_cnt(m_trap->enterprise->len, &m_trap->enterprise->id[0], &thl->eidlen);
- 8036c4a: f811 0b04 ldrb.w r0, [r1], #4
- snmp_asn1_enc_length_cnt(thl->gtrplen, &thl->gtrplenlen);
- tot_len += 1 + thl->gtrplen + thl->gtrplenlen;
- thl->aaddrlen = 4;
- snmp_asn1_enc_length_cnt(thl->aaddrlen, &thl->aaddrlenlen);
- tot_len += 1 + thl->aaddrlen + thl->aaddrlenlen;
- 8036c4e: f8b4 a038 ldrh.w sl, [r4, #56] ; 0x38
- snmp_asn1_enc_oid_cnt(m_trap->enterprise->len, &m_trap->enterprise->id[0], &thl->eidlen);
- 8036c52: f104 023a add.w r2, r4, #58 ; 0x3a
- 8036c56: f7fc fd41 bl 80336dc <snmp_asn1_enc_oid_cnt>
- snmp_asn1_enc_length_cnt(thl->eidlen, &thl->eidlenlen);
- 8036c5a: 8f60 ldrh r0, [r4, #58] ; 0x3a
- 8036c5c: f104 012c add.w r1, r4, #44 ; 0x2c
- 8036c60: f7fc fd07 bl 8033672 <snmp_asn1_enc_length_cnt>
- snmp_asn1_enc_length_cnt(thl->tslen, &thl->tslenlen);
- tot_len += 1 + thl->tslen + thl->tslenlen;
- snmp_asn1_enc_s32t_cnt(m_trap->spc_trap, &thl->strplen);
- snmp_asn1_enc_length_cnt(thl->strplen, &thl->strplenlen);
- tot_len += 1 + thl->strplen + thl->strplenlen;
- 8036c64: f8dd c004 ldr.w ip, [sp, #4]
- 8036c68: 9b02 ldr r3, [sp, #8]
- snmp_asn1_enc_s32t_cnt(m_trap->gen_trap, &thl->gtrplen);
- snmp_asn1_enc_length_cnt(thl->gtrplen, &thl->gtrplenlen);
- tot_len += 1 + thl->gtrplen + thl->gtrplenlen;
- 8036c6a: 8f62 ldrh r2, [r4, #58] ; 0x3a
- snmp_asn1_enc_length_cnt(thl->tslen, &thl->tslenlen);
- tot_len += 1 + thl->tslen + thl->tslenlen;
- snmp_asn1_enc_s32t_cnt(m_trap->spc_trap, &thl->strplen);
- snmp_asn1_enc_length_cnt(thl->strplen, &thl->strplenlen);
- tot_len += 1 + thl->strplen + thl->strplenlen;
- 8036c6c: 4463 add r3, ip
- 8036c6e: 3305 adds r3, #5
- snmp_asn1_enc_s32t_cnt(m_trap->gen_trap, &thl->gtrplen);
- snmp_asn1_enc_length_cnt(thl->gtrplen, &thl->gtrplenlen);
- tot_len += 1 + thl->gtrplen + thl->gtrplenlen;
- 8036c70: 449b add fp, r3
- 8036c72: 44da add sl, fp
- 8036c74: fa12 fa8a uxtah sl, r2, sl
- thl->aaddrlen = 4;
- snmp_asn1_enc_length_cnt(thl->aaddrlen, &thl->aaddrlenlen);
- tot_len += 1 + thl->aaddrlen + thl->aaddrlenlen;
- 8036c78: 44d1 add r9, sl
- 8036c7a: 44c8 add r8, r9
- snmp_asn1_enc_oid_cnt(m_trap->enterprise->len, &m_trap->enterprise->id[0], &thl->eidlen);
- snmp_asn1_enc_length_cnt(thl->eidlen, &thl->eidlenlen);
- tot_len += 1 + thl->eidlen + thl->eidlenlen;
- 8036c7c: 9b03 ldr r3, [sp, #12]
- snmp_asn1_enc_length_cnt(thl->gtrplen, &thl->gtrplenlen);
- tot_len += 1 + thl->gtrplen + thl->gtrplenlen;
- thl->aaddrlen = 4;
- snmp_asn1_enc_length_cnt(thl->aaddrlen, &thl->aaddrlenlen);
- tot_len += 1 + thl->aaddrlen + thl->aaddrlenlen;
- 8036c7e: fa17 f788 uxtah r7, r7, r8
- snmp_asn1_enc_oid_cnt(m_trap->enterprise->len, &m_trap->enterprise->id[0], &thl->eidlen);
- snmp_asn1_enc_length_cnt(thl->eidlen, &thl->eidlenlen);
- tot_len += 1 + thl->eidlen + thl->eidlenlen;
- 8036c82: 19df adds r7, r3, r7
- 8036c84: f894 302c ldrb.w r3, [r4, #44] ; 0x2c
- 8036c88: 18ff adds r7, r7, r3
- 8036c8a: fa16 f687 uxtah r6, r6, r7
- 8036c8e: b2b6 uxth r6, r6
- thl->pdulen = tot_len;
- snmp_asn1_enc_length_cnt(thl->pdulen, &thl->pdulenlen);
- 8036c90: 4630 mov r0, r6
- 8036c92: f104 012d add.w r1, r4, #45 ; 0x2d
- tot_len += 1 + thl->pdulenlen;
- thl->comlen = sizeof(snmp_publiccommunity) - 1;
- 8036c96: 2706 movs r7, #6
- snmp_asn1_enc_oid_cnt(m_trap->enterprise->len, &m_trap->enterprise->id[0], &thl->eidlen);
- snmp_asn1_enc_length_cnt(thl->eidlen, &thl->eidlenlen);
- tot_len += 1 + thl->eidlen + thl->eidlenlen;
- thl->pdulen = tot_len;
- 8036c98: 87a6 strh r6, [r4, #60] ; 0x3c
- snmp_asn1_enc_length_cnt(thl->pdulen, &thl->pdulenlen);
- 8036c9a: f7fc fcea bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + thl->pdulenlen;
- thl->comlen = sizeof(snmp_publiccommunity) - 1;
- snmp_asn1_enc_length_cnt(thl->comlen, &thl->comlenlen);
- 8036c9e: 4638 mov r0, r7
- 8036ca0: f104 012e add.w r1, r4, #46 ; 0x2e
- snmp_asn1_enc_length_cnt(thl->eidlen, &thl->eidlenlen);
- tot_len += 1 + thl->eidlen + thl->eidlenlen;
- thl->pdulen = tot_len;
- snmp_asn1_enc_length_cnt(thl->pdulen, &thl->pdulenlen);
- tot_len += 1 + thl->pdulenlen;
- 8036ca4: f894 a02d ldrb.w sl, [r4, #45] ; 0x2d
- thl->comlen = sizeof(snmp_publiccommunity) - 1;
- 8036ca8: 87e7 strh r7, [r4, #62] ; 0x3e
- snmp_asn1_enc_length_cnt(thl->comlen, &thl->comlenlen);
- 8036caa: f7fc fce2 bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + thl->comlenlen + thl->comlen;
- snmp_asn1_enc_s32t_cnt(snmp_version, &thl->verlen);
- 8036cae: 4b86 ldr r3, [pc, #536] ; (8036ec8 <snmp_send_trap+0x358>)
- snmp_asn1_enc_length_cnt(thl->pdulen, &thl->pdulenlen);
- tot_len += 1 + thl->pdulenlen;
- thl->comlen = sizeof(snmp_publiccommunity) - 1;
- snmp_asn1_enc_length_cnt(thl->comlen, &thl->comlenlen);
- tot_len += 1 + thl->comlenlen + thl->comlen;
- 8036cb0: f894 902e ldrb.w r9, [r4, #46] ; 0x2e
- snmp_asn1_enc_s32t_cnt(snmp_version, &thl->verlen);
- 8036cb4: f8d3 8000 ldr.w r8, [r3]
- snmp_asn1_enc_length_cnt(thl->pdulen, &thl->pdulenlen);
- tot_len += 1 + thl->pdulenlen;
- thl->comlen = sizeof(snmp_publiccommunity) - 1;
- snmp_asn1_enc_length_cnt(thl->comlen, &thl->comlenlen);
- tot_len += 1 + thl->comlenlen + thl->comlen;
- 8036cb8: f8b4 b03e ldrh.w fp, [r4, #62] ; 0x3e
- snmp_asn1_enc_s32t_cnt(snmp_version, &thl->verlen);
- 8036cbc: 4640 mov r0, r8
- 8036cbe: f104 0140 add.w r1, r4, #64 ; 0x40
- 8036cc2: f7fc fcf6 bl 80336b2 <snmp_asn1_enc_s32t_cnt>
- snmp_asn1_enc_length_cnt(thl->verlen, &thl->verlenlen);
- 8036cc6: f8b4 0040 ldrh.w r0, [r4, #64] ; 0x40
- 8036cca: f104 012f add.w r1, r4, #47 ; 0x2f
- 8036cce: f7fc fcd0 bl 8033672 <snmp_asn1_enc_length_cnt>
- snmp_asn1_enc_length_cnt(thl->pdulen, &thl->pdulenlen);
- tot_len += 1 + thl->pdulenlen;
- thl->comlen = sizeof(snmp_publiccommunity) - 1;
- snmp_asn1_enc_length_cnt(thl->comlen, &thl->comlenlen);
- tot_len += 1 + thl->comlenlen + thl->comlen;
- 8036cd2: f8b4 3040 ldrh.w r3, [r4, #64] ; 0x40
- 8036cd6: 449b add fp, r3
- 8036cd8: f10b 0b03 add.w fp, fp, #3
- snmp_asn1_enc_s32t_cnt(snmp_version, &thl->verlen);
- snmp_asn1_enc_length_cnt(thl->verlen, &thl->verlenlen);
- tot_len += 1 + thl->verlen + thl->verlenlen;
- 8036cdc: f894 302f ldrb.w r3, [r4, #47] ; 0x2f
- snmp_asn1_enc_length_cnt(thl->pdulen, &thl->pdulenlen);
- tot_len += 1 + thl->pdulenlen;
- thl->comlen = sizeof(snmp_publiccommunity) - 1;
- snmp_asn1_enc_length_cnt(thl->comlen, &thl->comlenlen);
- tot_len += 1 + thl->comlenlen + thl->comlen;
- 8036ce0: 44da add sl, fp
- snmp_asn1_enc_s32t_cnt(snmp_version, &thl->verlen);
- snmp_asn1_enc_length_cnt(thl->verlen, &thl->verlenlen);
- tot_len += 1 + thl->verlen + thl->verlenlen;
- 8036ce2: 44d1 add r9, sl
- 8036ce4: 4499 add r9, r3
- 8036ce6: fa16 f689 uxtah r6, r6, r9
- 8036cea: b2b6 uxth r6, r6
- thl->seqlen = tot_len;
- snmp_asn1_enc_length_cnt(thl->seqlen, &thl->seqlenlen);
- 8036cec: 4630 mov r0, r6
- 8036cee: f104 0130 add.w r1, r4, #48 ; 0x30
- snmp_asn1_enc_s32t_cnt(snmp_version, &thl->verlen);
- snmp_asn1_enc_length_cnt(thl->verlen, &thl->verlenlen);
- tot_len += 1 + thl->verlen + thl->verlenlen;
- thl->seqlen = tot_len;
- 8036cf2: f8a4 6042 strh.w r6, [r4, #66] ; 0x42
- snmp_asn1_enc_length_cnt(thl->seqlen, &thl->seqlenlen);
- 8036cf6: f7fc fcbc bl 8033672 <snmp_asn1_enc_length_cnt>
- tot_len += 1 + thl->seqlenlen;
- 8036cfa: f894 3030 ldrb.w r3, [r4, #48] ; 0x30
- 8036cfe: 3301 adds r3, #1
- 8036d00: 18f1 adds r1, r6, r3
- /* pass 0, calculate length fields */
- tot_len = snmp_varbind_list_sum(&trap_msg.outvb);
- tot_len = snmp_trap_header_sum(&trap_msg, tot_len);
- /* allocate pbuf(s) */
- p = pbuf_alloc(PBUF_TRANSPORT, tot_len, PBUF_POOL);
- 8036d02: 2000 movs r0, #0
- 8036d04: b289 uxth r1, r1
- 8036d06: 2203 movs r2, #3
- 8036d08: f7f9 f8cd bl 802fea6 <pbuf_alloc>
- if (p != NULL)
- 8036d0c: 4606 mov r6, r0
- 8036d0e: 2800 cmp r0, #0
- 8036d10: f000 80f3 beq.w 8036efa <snmp_send_trap+0x38a>
- snmp_trap_header_enc(struct snmp_msg_trap *m_trap, struct pbuf *p)
- {
- u16_t ofs;
- ofs = 0;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- 8036d14: 2100 movs r1, #0
- 8036d16: 2230 movs r2, #48 ; 0x30
- 8036d18: f7fc fcf8 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.seqlen);
- 8036d1c: 2101 movs r1, #1
- 8036d1e: f8b4 2042 ldrh.w r2, [r4, #66] ; 0x42
- 8036d22: 4630 mov r0, r6
- 8036d24: f7fc fd06 bl 8033734 <snmp_asn1_enc_length>
- ofs += m_trap->thl.seqlenlen;
- 8036d28: f894 9030 ldrb.w r9, [r4, #48] ; 0x30
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036d2c: 2202 movs r2, #2
- 8036d2e: f109 0101 add.w r1, r9, #1
- 8036d32: 4630 mov r0, r6
- ofs += 1;
- 8036d34: f109 0902 add.w r9, r9, #2
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.seqlen);
- ofs += m_trap->thl.seqlenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036d38: f7fc fce8 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.verlen);
- 8036d3c: 4649 mov r1, r9
- 8036d3e: f8b4 2040 ldrh.w r2, [r4, #64] ; 0x40
- 8036d42: 4630 mov r0, r6
- 8036d44: f7fc fcf6 bl 8033734 <snmp_asn1_enc_length>
- ofs += m_trap->thl.verlenlen;
- 8036d48: f894 302f ldrb.w r3, [r4, #47] ; 0x2f
- snmp_asn1_enc_s32t(p, ofs, m_trap->thl.verlen, snmp_version);
- 8036d4c: f8b4 2040 ldrh.w r2, [r4, #64] ; 0x40
- ofs += m_trap->thl.seqlenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.verlen);
- ofs += m_trap->thl.verlenlen;
- 8036d50: 4499 add r9, r3
- snmp_asn1_enc_s32t(p, ofs, m_trap->thl.verlen, snmp_version);
- 8036d52: 4649 mov r1, r9
- 8036d54: 4643 mov r3, r8
- 8036d56: 4630 mov r0, r6
- 8036d58: f7fc fd74 bl 8033844 <snmp_asn1_enc_s32t>
- ofs += m_trap->thl.verlen;
- 8036d5c: f8b4 3040 ldrh.w r3, [r4, #64] ; 0x40
- 8036d60: 4499 add r9, r3
- 8036d62: fa1f f989 uxth.w r9, r9
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR));
- 8036d66: 462a mov r2, r5
- ofs += 1;
- 8036d68: f109 0501 add.w r5, r9, #1
- snmp_asn1_enc_length(p, ofs, m_trap->thl.verlen);
- ofs += m_trap->thl.verlenlen;
- snmp_asn1_enc_s32t(p, ofs, m_trap->thl.verlen, snmp_version);
- ofs += m_trap->thl.verlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR));
- 8036d6c: 4649 mov r1, r9
- ofs += 1;
- 8036d6e: b2ad uxth r5, r5
- snmp_asn1_enc_length(p, ofs, m_trap->thl.verlen);
- ofs += m_trap->thl.verlenlen;
- snmp_asn1_enc_s32t(p, ofs, m_trap->thl.verlen, snmp_version);
- ofs += m_trap->thl.verlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR));
- 8036d70: 4630 mov r0, r6
- 8036d72: f7fc fccb bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.comlen);
- 8036d76: 4629 mov r1, r5
- 8036d78: 8fe2 ldrh r2, [r4, #62] ; 0x3e
- 8036d7a: 4630 mov r0, r6
- 8036d7c: f7fc fcda bl 8033734 <snmp_asn1_enc_length>
- ofs += m_trap->thl.comlenlen;
- 8036d80: f894 302e ldrb.w r3, [r4, #46] ; 0x2e
- snmp_asn1_enc_raw(p, ofs, m_trap->thl.comlen, (u8_t *)&snmp_publiccommunity[0]);
- 8036d84: 8fe2 ldrh r2, [r4, #62] ; 0x3e
- ofs += m_trap->thl.verlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.comlen);
- ofs += m_trap->thl.comlenlen;
- 8036d86: 18ed adds r5, r5, r3
- 8036d88: b2ad uxth r5, r5
- snmp_asn1_enc_raw(p, ofs, m_trap->thl.comlen, (u8_t *)&snmp_publiccommunity[0]);
- 8036d8a: 4629 mov r1, r5
- 8036d8c: 4b4f ldr r3, [pc, #316] ; (8036ecc <snmp_send_trap+0x35c>)
- 8036d8e: 4630 mov r0, r6
- 8036d90: f7fc fdf8 bl 8033984 <snmp_asn1_enc_raw>
- ofs += m_trap->thl.comlen;
- 8036d94: 8fe3 ldrh r3, [r4, #62] ; 0x3e
- 8036d96: 18ed adds r5, r5, r3
- 8036d98: b2ad uxth r5, r5
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_TRAP));
- 8036d9a: 4629 mov r1, r5
- ofs += 1;
- 8036d9c: 3501 adds r5, #1
- snmp_asn1_enc_length(p, ofs, m_trap->thl.comlen);
- ofs += m_trap->thl.comlenlen;
- snmp_asn1_enc_raw(p, ofs, m_trap->thl.comlen, (u8_t *)&snmp_publiccommunity[0]);
- ofs += m_trap->thl.comlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_TRAP));
- 8036d9e: 22a4 movs r2, #164 ; 0xa4
- ofs += 1;
- 8036da0: b2ad uxth r5, r5
- snmp_asn1_enc_length(p, ofs, m_trap->thl.comlen);
- ofs += m_trap->thl.comlenlen;
- snmp_asn1_enc_raw(p, ofs, m_trap->thl.comlen, (u8_t *)&snmp_publiccommunity[0]);
- ofs += m_trap->thl.comlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_TRAP));
- 8036da2: 4630 mov r0, r6
- 8036da4: f7fc fcb2 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.pdulen);
- 8036da8: 4629 mov r1, r5
- 8036daa: 8fa2 ldrh r2, [r4, #60] ; 0x3c
- 8036dac: 4630 mov r0, r6
- 8036dae: f7fc fcc1 bl 8033734 <snmp_asn1_enc_length>
- ofs += m_trap->thl.pdulenlen;
- 8036db2: f894 302d ldrb.w r3, [r4, #45] ; 0x2d
- 8036db6: 18ed adds r5, r5, r3
- 8036db8: b2ad uxth r5, r5
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
- 8036dba: 4629 mov r1, r5
- ofs += 1;
- 8036dbc: 3501 adds r5, #1
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_TRAP));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.pdulen);
- ofs += m_trap->thl.pdulenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
- 8036dbe: 463a mov r2, r7
- ofs += 1;
- 8036dc0: b2ad uxth r5, r5
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_TRAP));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.pdulen);
- ofs += m_trap->thl.pdulenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
- 8036dc2: 4630 mov r0, r6
- 8036dc4: f7fc fca2 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.eidlen);
- 8036dc8: 4629 mov r1, r5
- 8036dca: 8f62 ldrh r2, [r4, #58] ; 0x3a
- 8036dcc: 4630 mov r0, r6
- 8036dce: f7fc fcb1 bl 8033734 <snmp_asn1_enc_length>
- ofs += m_trap->thl.eidlenlen;
- 8036dd2: f894 302c ldrb.w r3, [r4, #44] ; 0x2c
- 8036dd6: 18ed adds r5, r5, r3
- snmp_asn1_enc_oid(p, ofs, m_trap->enterprise->len, &m_trap->enterprise->id[0]);
- 8036dd8: 68a3 ldr r3, [r4, #8]
- ofs += m_trap->thl.pdulenlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.eidlen);
- ofs += m_trap->thl.eidlenlen;
- 8036dda: b2ad uxth r5, r5
- snmp_asn1_enc_oid(p, ofs, m_trap->enterprise->len, &m_trap->enterprise->id[0]);
- 8036ddc: 4629 mov r1, r5
- 8036dde: f813 2b04 ldrb.w r2, [r3], #4
- 8036de2: 4630 mov r0, r6
- 8036de4: f7fc fd5b bl 803389e <snmp_asn1_enc_oid>
- ofs += m_trap->thl.eidlen;
- 8036de8: 8f63 ldrh r3, [r4, #58] ; 0x3a
- 8036dea: 18ed adds r5, r5, r3
- 8036dec: b2ad uxth r5, r5
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR));
- 8036dee: 4629 mov r1, r5
- ofs += 1;
- 8036df0: 3501 adds r5, #1
- snmp_asn1_enc_length(p, ofs, m_trap->thl.eidlen);
- ofs += m_trap->thl.eidlenlen;
- snmp_asn1_enc_oid(p, ofs, m_trap->enterprise->len, &m_trap->enterprise->id[0]);
- ofs += m_trap->thl.eidlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR));
- 8036df2: 2240 movs r2, #64 ; 0x40
- ofs += 1;
- 8036df4: b2ad uxth r5, r5
- snmp_asn1_enc_length(p, ofs, m_trap->thl.eidlen);
- ofs += m_trap->thl.eidlenlen;
- snmp_asn1_enc_oid(p, ofs, m_trap->enterprise->len, &m_trap->enterprise->id[0]);
- ofs += m_trap->thl.eidlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR));
- 8036df6: 4630 mov r0, r6
- 8036df8: f7fc fc88 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.aaddrlen);
- 8036dfc: 4629 mov r1, r5
- 8036dfe: 8f22 ldrh r2, [r4, #56] ; 0x38
- 8036e00: 4630 mov r0, r6
- 8036e02: f7fc fc97 bl 8033734 <snmp_asn1_enc_length>
- ofs += m_trap->thl.aaddrlenlen;
- 8036e06: f894 302b ldrb.w r3, [r4, #43] ; 0x2b
- snmp_asn1_enc_raw(p, ofs, m_trap->thl.aaddrlen, &m_trap->sip_raw[0]);
- 8036e0a: 8f22 ldrh r2, [r4, #56] ; 0x38
- ofs += m_trap->thl.eidlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.aaddrlen);
- ofs += m_trap->thl.aaddrlenlen;
- 8036e0c: 18ed adds r5, r5, r3
- 8036e0e: b2ad uxth r5, r5
- snmp_asn1_enc_raw(p, ofs, m_trap->thl.aaddrlen, &m_trap->sip_raw[0]);
- 8036e10: 4629 mov r1, r5
- 8036e12: f104 030c add.w r3, r4, #12
- 8036e16: 4630 mov r0, r6
- 8036e18: f7fc fdb4 bl 8033984 <snmp_asn1_enc_raw>
- ofs += m_trap->thl.aaddrlen;
- 8036e1c: 8f23 ldrh r3, [r4, #56] ; 0x38
- 8036e1e: 18ed adds r5, r5, r3
- 8036e20: b2ad uxth r5, r5
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036e22: 4629 mov r1, r5
- ofs += 1;
- 8036e24: 3501 adds r5, #1
- snmp_asn1_enc_length(p, ofs, m_trap->thl.aaddrlen);
- ofs += m_trap->thl.aaddrlenlen;
- snmp_asn1_enc_raw(p, ofs, m_trap->thl.aaddrlen, &m_trap->sip_raw[0]);
- ofs += m_trap->thl.aaddrlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036e26: 2202 movs r2, #2
- ofs += 1;
- 8036e28: b2ad uxth r5, r5
- snmp_asn1_enc_length(p, ofs, m_trap->thl.aaddrlen);
- ofs += m_trap->thl.aaddrlenlen;
- snmp_asn1_enc_raw(p, ofs, m_trap->thl.aaddrlen, &m_trap->sip_raw[0]);
- ofs += m_trap->thl.aaddrlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036e2a: 4630 mov r0, r6
- 8036e2c: f7fc fc6e bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.gtrplen);
- 8036e30: 4629 mov r1, r5
- 8036e32: 8ee2 ldrh r2, [r4, #54] ; 0x36
- 8036e34: 4630 mov r0, r6
- 8036e36: f7fc fc7d bl 8033734 <snmp_asn1_enc_length>
- ofs += m_trap->thl.gtrplenlen;
- 8036e3a: f894 302a ldrb.w r3, [r4, #42] ; 0x2a
- snmp_asn1_enc_u32t(p, ofs, m_trap->thl.gtrplen, m_trap->gen_trap);
- 8036e3e: 8ee2 ldrh r2, [r4, #54] ; 0x36
- ofs += m_trap->thl.aaddrlen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.gtrplen);
- ofs += m_trap->thl.gtrplenlen;
- 8036e40: 18ed adds r5, r5, r3
- 8036e42: b2ad uxth r5, r5
- snmp_asn1_enc_u32t(p, ofs, m_trap->thl.gtrplen, m_trap->gen_trap);
- 8036e44: 4629 mov r1, r5
- 8036e46: 6923 ldr r3, [r4, #16]
- 8036e48: 4630 mov r0, r6
- 8036e4a: f7fc fcbb bl 80337c4 <snmp_asn1_enc_u32t>
- ofs += m_trap->thl.gtrplen;
- 8036e4e: 8ee3 ldrh r3, [r4, #54] ; 0x36
- 8036e50: 18ed adds r5, r5, r3
- 8036e52: b2ad uxth r5, r5
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036e54: 4629 mov r1, r5
- ofs += 1;
- 8036e56: 3501 adds r5, #1
- snmp_asn1_enc_length(p, ofs, m_trap->thl.gtrplen);
- ofs += m_trap->thl.gtrplenlen;
- snmp_asn1_enc_u32t(p, ofs, m_trap->thl.gtrplen, m_trap->gen_trap);
- ofs += m_trap->thl.gtrplen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036e58: 2202 movs r2, #2
- ofs += 1;
- 8036e5a: b2ad uxth r5, r5
- snmp_asn1_enc_length(p, ofs, m_trap->thl.gtrplen);
- ofs += m_trap->thl.gtrplenlen;
- snmp_asn1_enc_u32t(p, ofs, m_trap->thl.gtrplen, m_trap->gen_trap);
- ofs += m_trap->thl.gtrplen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- 8036e5c: 4630 mov r0, r6
- 8036e5e: f7fc fc55 bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.strplen);
- 8036e62: 4629 mov r1, r5
- 8036e64: 8ea2 ldrh r2, [r4, #52] ; 0x34
- 8036e66: 4630 mov r0, r6
- 8036e68: f7fc fc64 bl 8033734 <snmp_asn1_enc_length>
- ofs += m_trap->thl.strplenlen;
- 8036e6c: f894 3029 ldrb.w r3, [r4, #41] ; 0x29
- snmp_asn1_enc_u32t(p, ofs, m_trap->thl.strplen, m_trap->spc_trap);
- 8036e70: 8ea2 ldrh r2, [r4, #52] ; 0x34
- ofs += m_trap->thl.gtrplen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.strplen);
- ofs += m_trap->thl.strplenlen;
- 8036e72: 18ed adds r5, r5, r3
- 8036e74: b2ad uxth r5, r5
- snmp_asn1_enc_u32t(p, ofs, m_trap->thl.strplen, m_trap->spc_trap);
- 8036e76: 4629 mov r1, r5
- 8036e78: 6963 ldr r3, [r4, #20]
- 8036e7a: 4630 mov r0, r6
- 8036e7c: f7fc fca2 bl 80337c4 <snmp_asn1_enc_u32t>
- ofs += m_trap->thl.strplen;
- 8036e80: 8ea3 ldrh r3, [r4, #52] ; 0x34
- 8036e82: 18ed adds r5, r5, r3
- 8036e84: b2ad uxth r5, r5
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS));
- 8036e86: 4629 mov r1, r5
- ofs += 1;
- 8036e88: 3501 adds r5, #1
- snmp_asn1_enc_length(p, ofs, m_trap->thl.strplen);
- ofs += m_trap->thl.strplenlen;
- snmp_asn1_enc_u32t(p, ofs, m_trap->thl.strplen, m_trap->spc_trap);
- ofs += m_trap->thl.strplen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS));
- 8036e8a: 2243 movs r2, #67 ; 0x43
- ofs += 1;
- 8036e8c: b2ad uxth r5, r5
- snmp_asn1_enc_length(p, ofs, m_trap->thl.strplen);
- ofs += m_trap->thl.strplenlen;
- snmp_asn1_enc_u32t(p, ofs, m_trap->thl.strplen, m_trap->spc_trap);
- ofs += m_trap->thl.strplen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS));
- 8036e8e: 4630 mov r0, r6
- 8036e90: f7fc fc3c bl 803370c <snmp_asn1_enc_type>
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.tslen);
- 8036e94: 4629 mov r1, r5
- 8036e96: 8e62 ldrh r2, [r4, #50] ; 0x32
- 8036e98: 4630 mov r0, r6
- 8036e9a: f7fc fc4b bl 8033734 <snmp_asn1_enc_length>
- ofs += m_trap->thl.tslenlen;
- 8036e9e: f894 3028 ldrb.w r3, [r4, #40] ; 0x28
- snmp_asn1_enc_u32t(p, ofs, m_trap->thl.tslen, m_trap->ts);
- 8036ea2: 8e62 ldrh r2, [r4, #50] ; 0x32
- ofs += m_trap->thl.strplen;
- snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS));
- ofs += 1;
- snmp_asn1_enc_length(p, ofs, m_trap->thl.tslen);
- ofs += m_trap->thl.tslenlen;
- 8036ea4: 18ed adds r5, r5, r3
- 8036ea6: b2ad uxth r5, r5
- snmp_asn1_enc_u32t(p, ofs, m_trap->thl.tslen, m_trap->ts);
- 8036ea8: 4629 mov r1, r5
- 8036eaa: 69a3 ldr r3, [r4, #24]
- 8036eac: 4630 mov r0, r6
- 8036eae: f7fc fc89 bl 80337c4 <snmp_asn1_enc_u32t>
- ofs += m_trap->thl.tslen;
- 8036eb2: 8e63 ldrh r3, [r4, #50] ; 0x32
- 8036eb4: 18ea adds r2, r5, r3
- {
- u16_t ofs;
- /* pass 1, encode packet ino the pbuf(s) */
- ofs = snmp_trap_header_enc(&trap_msg, p);
- snmp_varbind_list_enc(&trap_msg.outvb, p, ofs);
- 8036eb6: 4631 mov r1, r6
- 8036eb8: e00a b.n 8036ed0 <snmp_send_trap+0x360>
- 8036eba: bf00 nop
- 8036ebc: 2000f840 .word 0x2000f840
- 8036ec0: 2000f828 .word 0x2000f828
- 8036ec4: 2000f844 .word 0x2000f844
- 8036ec8: 0804592c .word 0x0804592c
- 8036ecc: 08045930 .word 0x08045930
- 8036ed0: b292 uxth r2, r2
- 8036ed2: f104 001c add.w r0, r4, #28
- 8036ed6: f7ff fcb1 bl 803683c <snmp_varbind_list_enc>
- snmp_inc_snmpouttraps();
- 8036eda: f7fe f853 bl 8034f84 <snmp_inc_snmpouttraps>
- snmp_inc_snmpoutpkts();
- 8036ede: f7fd ffa9 bl 8034e34 <snmp_inc_snmpoutpkts>
- /** send to the TRAP destination */
- udp_sendto(trap_msg.pcb, p, &trap_msg.dip, SNMP_TRAP_PORT);
- 8036ee2: 4622 mov r2, r4
- 8036ee4: 4631 mov r1, r6
- 8036ee6: f852 0b04 ldr.w r0, [r2], #4
- 8036eea: 23a2 movs r3, #162 ; 0xa2
- 8036eec: f7fb fdb1 bl 8032a52 <udp_sendto>
- pbuf_free(p);
- 8036ef0: 4630 mov r0, r6
- 8036ef2: f7f8 ff8b bl 802fe0c <pbuf_free>
- {
- return ERR_MEM;
- }
- }
- }
- return ERR_OK;
- 8036ef6: 2000 movs r0, #0
- 8036ef8: e000 b.n 8036efc <snmp_send_trap+0x38c>
- pbuf_free(p);
- }
- else
- {
- return ERR_MEM;
- 8036efa: 20ff movs r0, #255 ; 0xff
- }
- }
- }
- return ERR_OK;
- }
- 8036efc: b240 sxtb r0, r0
- 8036efe: b005 add sp, #20
- 8036f00: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 08036f04 <snmp_authfail_trap>:
- snmp_send_trap(SNMP_GENTRAP_COLDSTART, NULL, 0);
- }
- void
- snmp_authfail_trap(void)
- {
- 8036f04: b507 push {r0, r1, r2, lr}
- u8_t enable;
- snmp_get_snmpenableauthentraps(&enable);
- 8036f06: f10d 0007 add.w r0, sp, #7
- 8036f0a: f7fe f849 bl 8034fa0 <snmp_get_snmpenableauthentraps>
- if (enable == 1)
- 8036f0e: f89d 3007 ldrb.w r3, [sp, #7]
- 8036f12: 2b01 cmp r3, #1
- 8036f14: d109 bne.n 8036f2a <snmp_authfail_trap+0x26>
- {
- trap_msg.outvb.head = NULL;
- 8036f16: 2100 movs r1, #0
- 8036f18: 4b04 ldr r3, [pc, #16] ; (8036f2c <snmp_authfail_trap+0x28>)
- trap_msg.outvb.tail = NULL;
- trap_msg.outvb.count = 0;
- snmp_send_trap(SNMP_GENTRAP_AUTHFAIL, NULL, 0);
- 8036f1a: 2004 movs r0, #4
- 8036f1c: 460a mov r2, r1
- {
- u8_t enable;
- snmp_get_snmpenableauthentraps(&enable);
- if (enable == 1)
- {
- trap_msg.outvb.head = NULL;
- 8036f1e: 61d9 str r1, [r3, #28]
- trap_msg.outvb.tail = NULL;
- 8036f20: 6219 str r1, [r3, #32]
- trap_msg.outvb.count = 0;
- 8036f22: f883 1024 strb.w r1, [r3, #36] ; 0x24
- snmp_send_trap(SNMP_GENTRAP_AUTHFAIL, NULL, 0);
- 8036f26: f7ff fe23 bl 8036b70 <snmp_send_trap>
- }
- }
- 8036f2a: bd0e pop {r1, r2, r3, pc}
- 8036f2c: 2000f828 .word 0x2000f828
- 08036f30 <etharp_send_ip>:
- * @params dst the destination MAC address to be copied into the ethernet header
- * @return ERR_OK if the packet was sent, any other err_t on failure
- */
- static err_t
- etharp_send_ip(struct netif *netif, struct pbuf *p, struct eth_addr *src, struct eth_addr *dst)
- {
- 8036f30: b5f8 push {r3, r4, r5, r6, r7, lr}
- struct eth_hdr *ethhdr = (struct eth_hdr *)p->payload;
- 8036f32: 684c ldr r4, [r1, #4]
- * @params dst the destination MAC address to be copied into the ethernet header
- * @return ERR_OK if the packet was sent, any other err_t on failure
- */
- static err_t
- etharp_send_ip(struct netif *netif, struct pbuf *p, struct eth_addr *src, struct eth_addr *dst)
- {
- 8036f34: 4606 mov r6, r0
- 8036f36: 460d mov r5, r1
- 8036f38: 4617 mov r7, r2
- struct eth_hdr *ethhdr = (struct eth_hdr *)p->payload;
- LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!",
- (netif->hwaddr_len == ETHARP_HWADDR_LEN));
- ETHADDR32_COPY(ðhdr->dest, dst);
- 8036f3a: 4619 mov r1, r3
- 8036f3c: 2206 movs r2, #6
- 8036f3e: 4620 mov r0, r4
- 8036f40: f7ea fd24 bl 802198c <memcpy>
- ETHADDR16_COPY(ðhdr->src, src);
- 8036f44: 4639 mov r1, r7
- 8036f46: 1da0 adds r0, r4, #6
- 8036f48: 2206 movs r2, #6
- 8036f4a: f7ea fd1f bl 802198c <memcpy>
- ethhdr->type = PP_HTONS(ETHTYPE_IP);
- 8036f4e: 2308 movs r3, #8
- 8036f50: 7323 strb r3, [r4, #12]
- 8036f52: 2300 movs r3, #0
- 8036f54: 7363 strb r3, [r4, #13]
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_send_ip: sending packet %p\n", (void *)p));
- /* send the packet */
- return netif->linkoutput(netif, p);
- 8036f56: 69b3 ldr r3, [r6, #24]
- 8036f58: 4630 mov r0, r6
- 8036f5a: 4629 mov r1, r5
- 8036f5c: 4798 blx r3
- }
- 8036f5e: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 08036f60 <etharp_free_entry>:
- #endif /* ARP_QUEUEING */
- /** Clean up ARP table entries */
- static void
- etharp_free_entry(int i)
- {
- 8036f60: b570 push {r4, r5, r6, lr}
- /* remove from SNMP ARP index tree */
- snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr);
- 8036f62: 4d0b ldr r5, [pc, #44] ; (8036f90 <etharp_free_entry+0x30>)
- 8036f64: 2414 movs r4, #20
- 8036f66: 4344 muls r4, r0
- 8036f68: 1929 adds r1, r5, r4
- #endif /* ARP_QUEUEING */
- /** Clean up ARP table entries */
- static void
- etharp_free_entry(int i)
- {
- 8036f6a: 4606 mov r6, r0
- /* remove from SNMP ARP index tree */
- snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr);
- 8036f6c: 3104 adds r1, #4
- 8036f6e: 6848 ldr r0, [r1, #4]
- 8036f70: f7fd fc4c bl 803480c <snmp_delete_arpidx_tree>
- /* and empty packet queue */
- if (arp_table[i].q != NULL) {
- 8036f74: 5928 ldr r0, [r5, r4]
- 8036f76: b118 cbz r0, 8036f80 <etharp_free_entry+0x20>
- /* remove all queued packets */
- LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_free_entry: freeing entry %"U16_F", packet queue %p.\n", (u16_t)i, (void *)(arp_table[i].q)));
- free_etharp_q(arp_table[i].q);
- 8036f78: f7f8 ff48 bl 802fe0c <pbuf_free>
- arp_table[i].q = NULL;
- 8036f7c: 2300 movs r3, #0
- 8036f7e: 512b str r3, [r5, r4]
- }
- /* recycle entry for re-use */
- arp_table[i].state = ETHARP_STATE_EMPTY;
- 8036f80: 2314 movs r3, #20
- 8036f82: fb03 5506 mla r5, r3, r6, r5
- 8036f86: 2300 movs r3, #0
- 8036f88: 74ab strb r3, [r5, #18]
- 8036f8a: 3510 adds r5, #16
- 8036f8c: bd70 pop {r4, r5, r6, pc}
- 8036f8e: bf00 nop
- 8036f90: 2000c700 .word 0x2000c700
- 08036f94 <etharp_find_entry>:
- * @return The ARP entry index that matched or is created, ERR_MEM if no
- * entry is found or could be recycled.
- */
- static s8_t
- etharp_find_entry(ip_addr_t *ipaddr, u8_t flags)
- {
- 8036f94: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr}
- s8_t empty = ARP_TABLE_SIZE;
- u8_t i = 0, age_pending = 0, age_stable = 0;
- /* oldest entry with packets on queue */
- s8_t old_queue = ARP_TABLE_SIZE;
- /* its age */
- u8_t age_queue = 0;
- 8036f98: 2500 movs r5, #0
- {
- s8_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE;
- s8_t empty = ARP_TABLE_SIZE;
- u8_t i = 0, age_pending = 0, age_stable = 0;
- /* oldest entry with packets on queue */
- s8_t old_queue = ARP_TABLE_SIZE;
- 8036f9a: 240a movs r4, #10
- 8036f9c: 4a35 ldr r2, [pc, #212] ; (8037074 <etharp_find_entry+0xe0>)
- * @return The ARP entry index that matched or is created, ERR_MEM if no
- * entry is found or could be recycled.
- */
- static s8_t
- etharp_find_entry(ip_addr_t *ipaddr, u8_t flags)
- {
- 8036f9e: 9101 str r1, [sp, #4]
- 8036fa0: 4606 mov r6, r0
- s8_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE;
- s8_t empty = ARP_TABLE_SIZE;
- u8_t i = 0, age_pending = 0, age_stable = 0;
- 8036fa2: 46a8 mov r8, r5
- 8036fa4: 46aa mov sl, r5
- * 4) remember the oldest pending entry with queued packets (if any)
- * 5) search for a matching IP entry, either pending or stable
- * until 5 matches, or all entries are searched for.
- */
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- 8036fa6: 462b mov r3, r5
- */
- static s8_t
- etharp_find_entry(ip_addr_t *ipaddr, u8_t flags)
- {
- s8_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE;
- s8_t empty = ARP_TABLE_SIZE;
- 8036fa8: 4627 mov r7, r4
- * entry is found or could be recycled.
- */
- static s8_t
- etharp_find_entry(ip_addr_t *ipaddr, u8_t flags)
- {
- s8_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE;
- 8036faa: 46a4 mov ip, r4
- 8036fac: 46a3 mov fp, r4
- */
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- u8_t state = arp_table[i].state;
- /* no empty entry found yet and now we do find one? */
- if ((empty == ARP_TABLE_SIZE) && (state == ETHARP_STATE_EMPTY)) {
- 8036fae: 2f0a cmp r7, #10
- * 5) search for a matching IP entry, either pending or stable
- * until 5 matches, or all entries are searched for.
- */
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- u8_t state = arp_table[i].state;
- 8036fb0: f892 9012 ldrb.w r9, [r2, #18]
- /* no empty entry found yet and now we do find one? */
- if ((empty == ARP_TABLE_SIZE) && (state == ETHARP_STATE_EMPTY)) {
- 8036fb4: d104 bne.n 8036fc0 <etharp_find_entry+0x2c>
- 8036fb6: f1b9 0f00 cmp.w r9, #0
- 8036fba: d104 bne.n 8036fc6 <etharp_find_entry+0x32>
- LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_find_entry: found empty entry %"U16_F"\n", (u16_t)i));
- /* remember first empty entry */
- empty = i;
- 8036fbc: b2df uxtb r7, r3
- 8036fbe: e023 b.n 8037008 <etharp_find_entry+0x74>
- } else if (state != ETHARP_STATE_EMPTY) {
- 8036fc0: f1b9 0f00 cmp.w r9, #0
- 8036fc4: d020 beq.n 8037008 <etharp_find_entry+0x74>
- LWIP_ASSERT("state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE",
- state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE);
- /* if given, does IP address match IP address in ARP entry? */
- if (ipaddr && ip_addr_cmp(ipaddr, &arp_table[i].ipaddr)) {
- 8036fc6: b12e cbz r6, 8036fd4 <etharp_find_entry+0x40>
- 8036fc8: 6830 ldr r0, [r6, #0]
- 8036fca: 6851 ldr r1, [r2, #4]
- 8036fcc: 4288 cmp r0, r1
- 8036fce: d101 bne.n 8036fd4 <etharp_find_entry+0x40>
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: found matching entry %"U16_F"\n", (u16_t)i));
- /* found exact IP address match, simply bail out */
- return i;
- 8036fd0: 4618 mov r0, r3
- 8036fd2: e04b b.n 803706c <etharp_find_entry+0xd8>
- }
- /* pending entry? */
- if (state == ETHARP_STATE_PENDING) {
- 8036fd4: f1b9 0f01 cmp.w r9, #1
- 8036fd8: d10e bne.n 8036ff8 <etharp_find_entry+0x64>
- /* pending with queued packets? */
- if (arp_table[i].q != NULL) {
- 8036fda: 6810 ldr r0, [r2, #0]
- if (arp_table[i].ctime >= age_queue) {
- 8036fdc: f892 9013 ldrb.w r9, [r2, #19]
- return i;
- }
- /* pending entry? */
- if (state == ETHARP_STATE_PENDING) {
- /* pending with queued packets? */
- if (arp_table[i].q != NULL) {
- 8036fe0: b120 cbz r0, 8036fec <etharp_find_entry+0x58>
- if (arp_table[i].ctime >= age_queue) {
- 8036fe2: 45a9 cmp r9, r5
- 8036fe4: d310 bcc.n 8037008 <etharp_find_entry+0x74>
- old_queue = i;
- 8036fe6: b2dc uxtb r4, r3
- 8036fe8: 464d mov r5, r9
- 8036fea: e00d b.n 8037008 <etharp_find_entry+0x74>
- age_queue = arp_table[i].ctime;
- }
- } else
- /* pending without queued packets? */
- {
- if (arp_table[i].ctime >= age_pending) {
- 8036fec: 45d1 cmp r9, sl
- 8036fee: d30b bcc.n 8037008 <etharp_find_entry+0x74>
- old_pending = i;
- 8036ff0: fa5f fb83 uxtb.w fp, r3
- 8036ff4: 46ca mov sl, r9
- 8036ff6: e007 b.n 8037008 <etharp_find_entry+0x74>
- age_pending = arp_table[i].ctime;
- }
- }
- /* stable entry? */
- } else if (state >= ETHARP_STATE_STABLE) {
- 8036ff8: d906 bls.n 8037008 <etharp_find_entry+0x74>
- /* don't record old_stable for static entries since they never expire */
- if (state < ETHARP_STATE_STATIC)
- #endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
- {
- /* remember entry with oldest stable entry in oldest, its age in maxtime */
- if (arp_table[i].ctime >= age_stable) {
- 8036ffa: f892 9013 ldrb.w r9, [r2, #19]
- 8036ffe: 45c1 cmp r9, r8
- old_stable = i;
- 8037000: bf24 itt cs
- 8037002: fa5f fc83 uxtbcs.w ip, r3
- 8037006: 46c8 movcs r8, r9
- * 4) remember the oldest pending entry with queued packets (if any)
- * 5) search for a matching IP entry, either pending or stable
- * until 5 matches, or all entries are searched for.
- */
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- 8037008: 3301 adds r3, #1
- 803700a: b2db uxtb r3, r3
- 803700c: 3214 adds r2, #20
- 803700e: 2b0a cmp r3, #10
- 8037010: d1cd bne.n 8036fae <etharp_find_entry+0x1a>
- }
- }
- /* { we have no match } => try to create a new entry */
-
- /* don't create new entry, only search? */
- if (((flags & ETHARP_FLAG_FIND_ONLY) != 0) ||
- 8037012: 9a01 ldr r2, [sp, #4]
- 8037014: f002 0302 and.w r3, r2, #2
- 8037018: b2db uxtb r3, r3
- 803701a: bb33 cbnz r3, 803706a <etharp_find_entry+0xd6>
- 803701c: 2f0a cmp r7, #10
- 803701e: d102 bne.n 8037026 <etharp_find_entry+0x92>
- /* or no empty entry found and not allowed to recycle? */
- ((empty == ARP_TABLE_SIZE) && ((flags & ETHARP_FLAG_TRY_HARD) == 0))) {
- 8037020: 07d3 lsls r3, r2, #31
- 8037022: d402 bmi.n 803702a <etharp_find_entry+0x96>
- 8037024: e021 b.n 803706a <etharp_find_entry+0xd6>
- * { ETHARP_FLAG_TRY_HARD is set at this point }
- */
- /* 1) empty entry available? */
- if (empty < ARP_TABLE_SIZE) {
- i = empty;
- 8037026: b2fc uxtb r4, r7
- 8037028: e011 b.n 803704e <etharp_find_entry+0xba>
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting empty entry %"U16_F"\n", (u16_t)i));
- } else {
- /* 2) found recyclable stable entry? */
- if (old_stable < ARP_TABLE_SIZE) {
- 803702a: f1bc 0f0a cmp.w ip, #10
- 803702e: d002 beq.n 8037036 <etharp_find_entry+0xa2>
- /* recycle oldest stable*/
- i = old_stable;
- 8037030: fa5f f48c uxtb.w r4, ip
- 8037034: e008 b.n 8037048 <etharp_find_entry+0xb4>
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest stable entry %"U16_F"\n", (u16_t)i));
- /* no queued packets should exist on stable entries */
- LWIP_ASSERT("arp_table[i].q == NULL", arp_table[i].q == NULL);
- /* 3) found recyclable pending entry without queued packets? */
- } else if (old_pending < ARP_TABLE_SIZE) {
- 8037036: f1bb 0f0a cmp.w fp, #10
- 803703a: d002 beq.n 8037042 <etharp_find_entry+0xae>
- /* recycle oldest pending */
- i = old_pending;
- 803703c: fa5f f48b uxtb.w r4, fp
- 8037040: e002 b.n 8037048 <etharp_find_entry+0xb4>
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest pending entry %"U16_F" (without queue)\n", (u16_t)i));
- /* 4) found recyclable pending entry with queued packets? */
- } else if (old_queue < ARP_TABLE_SIZE) {
- 8037042: 2c0a cmp r4, #10
- 8037044: d011 beq.n 803706a <etharp_find_entry+0xd6>
- /* recycle oldest pending (queued packets are free in etharp_free_entry) */
- i = old_queue;
- 8037046: b2e4 uxtb r4, r4
- return (s8_t)ERR_MEM;
- }
- /* { empty or recyclable entry found } */
- LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE);
- etharp_free_entry(i);
- 8037048: 4620 mov r0, r4
- 803704a: f7ff ff89 bl 8036f60 <etharp_free_entry>
- 803704e: 4b09 ldr r3, [pc, #36] ; (8037074 <etharp_find_entry+0xe0>)
- LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE);
- LWIP_ASSERT("arp_table[i].state == ETHARP_STATE_EMPTY",
- arp_table[i].state == ETHARP_STATE_EMPTY);
- /* IP address given? */
- if (ipaddr != NULL) {
- 8037050: b126 cbz r6, 803705c <etharp_find_entry+0xc8>
- /* set IP address */
- ip_addr_copy(arp_table[i].ipaddr, *ipaddr);
- 8037052: 2214 movs r2, #20
- 8037054: 6831 ldr r1, [r6, #0]
- 8037056: fb02 3204 mla r2, r2, r4, r3
- 803705a: 6051 str r1, [r2, #4]
- }
- arp_table[i].ctime = 0;
- 803705c: 2214 movs r2, #20
- 803705e: fb02 3304 mla r3, r2, r4, r3
- 8037062: 2200 movs r2, #0
- 8037064: 74da strb r2, [r3, #19]
- return (err_t)i;
- 8037066: 4620 mov r0, r4
- 8037068: e000 b.n 803706c <etharp_find_entry+0xd8>
- /* don't create new entry, only search? */
- if (((flags & ETHARP_FLAG_FIND_ONLY) != 0) ||
- /* or no empty entry found and not allowed to recycle? */
- ((empty == ARP_TABLE_SIZE) && ((flags & ETHARP_FLAG_TRY_HARD) == 0))) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: no empty entry found and not allowed to recycle\n"));
- return (s8_t)ERR_MEM;
- 803706a: 20ff movs r0, #255 ; 0xff
- /* set IP address */
- ip_addr_copy(arp_table[i].ipaddr, *ipaddr);
- }
- arp_table[i].ctime = 0;
- return (err_t)i;
- }
- 803706c: b240 sxtb r0, r0
- 803706e: e8bd 8ffe ldmia.w sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8037072: bf00 nop
- 8037074: 2000c700 .word 0x2000c700
- 08037078 <etharp_tmr>:
- * This function should be called every ETHARP_TMR_INTERVAL milliseconds (5 seconds),
- * in order to expire entries in the ARP table.
- */
- void
- etharp_tmr(void)
- {
- 8037078: b570 push {r4, r5, r6, lr}
- 803707a: 4c0d ldr r4, [pc, #52] ; (80370b0 <etharp_tmr+0x38>)
- 803707c: 2500 movs r5, #0
- etharp_free_entry(i);
- }
- else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING) {
- /* Reset state to stable, so that the next transmitted packet will
- re-send an ARP request. */
- arp_table[i].state = ETHARP_STATE_STABLE;
- 803707e: 2602 movs r6, #2
- LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n"));
- /* remove expired entries from the ARP table */
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- u8_t state = arp_table[i].state;
- if (state != ETHARP_STATE_EMPTY
- 8037080: 7ca3 ldrb r3, [r4, #18]
- 8037082: b183 cbz r3, 80370a6 <etharp_tmr+0x2e>
- #if ETHARP_SUPPORT_STATIC_ENTRIES
- && (state != ETHARP_STATE_STATIC)
- #endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
- ) {
- arp_table[i].ctime++;
- 8037084: 7ce2 ldrb r2, [r4, #19]
- 8037086: 3201 adds r2, #1
- 8037088: b2d2 uxtb r2, r2
- if ((arp_table[i].ctime >= ARP_MAXAGE) ||
- 803708a: 2aef cmp r2, #239 ; 0xef
- if (state != ETHARP_STATE_EMPTY
- #if ETHARP_SUPPORT_STATIC_ENTRIES
- && (state != ETHARP_STATE_STATIC)
- #endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
- ) {
- arp_table[i].ctime++;
- 803708c: 74e2 strb r2, [r4, #19]
- if ((arp_table[i].ctime >= ARP_MAXAGE) ||
- 803708e: d803 bhi.n 8037098 <etharp_tmr+0x20>
- 8037090: 2b01 cmp r3, #1
- 8037092: d105 bne.n 80370a0 <etharp_tmr+0x28>
- ((arp_table[i].state == ETHARP_STATE_PENDING) &&
- 8037094: 2a01 cmp r2, #1
- 8037096: d906 bls.n 80370a6 <etharp_tmr+0x2e>
- (arp_table[i].ctime >= ARP_MAXPENDING))) {
- /* pending or stable entry has become old! */
- LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired %s entry %"U16_F".\n",
- arp_table[i].state >= ETHARP_STATE_STABLE ? "stable" : "pending", (u16_t)i));
- /* clean up entries that have just been expired */
- etharp_free_entry(i);
- 8037098: 4628 mov r0, r5
- 803709a: f7ff ff61 bl 8036f60 <etharp_free_entry>
- 803709e: e002 b.n 80370a6 <etharp_tmr+0x2e>
- }
- else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING) {
- 80370a0: 2b03 cmp r3, #3
- /* Reset state to stable, so that the next transmitted packet will
- re-send an ARP request. */
- arp_table[i].state = ETHARP_STATE_STABLE;
- 80370a2: bf08 it eq
- 80370a4: 74a6 strbeq r6, [r4, #18]
- 80370a6: 3501 adds r5, #1
- 80370a8: 3414 adds r4, #20
- {
- u8_t i;
- LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n"));
- /* remove expired entries from the ARP table */
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- 80370aa: 2d0a cmp r5, #10
- 80370ac: d1e8 bne.n 8037080 <etharp_tmr+0x8>
- /* resend an ARP query here? */
- }
- #endif /* ARP_QUEUEING */
- }
- }
- }
- 80370ae: bd70 pop {r4, r5, r6, pc}
- 80370b0: 2000c700 .word 0x2000c700
- 080370b4 <etharp_cleanup_netif>:
- * Remove all ARP table entries of the specified netif.
- *
- * @param netif points to a network interface
- */
- void etharp_cleanup_netif(struct netif *netif)
- {
- 80370b4: b570 push {r4, r5, r6, lr}
- 80370b6: 4d08 ldr r5, [pc, #32] ; (80370d8 <etharp_cleanup_netif+0x24>)
- 80370b8: 4606 mov r6, r0
- 80370ba: 2400 movs r4, #0
- u8_t i;
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- u8_t state = arp_table[i].state;
- if ((state != ETHARP_STATE_EMPTY) && (arp_table[i].netif == netif)) {
- 80370bc: 7cab ldrb r3, [r5, #18]
- 80370be: b12b cbz r3, 80370cc <etharp_cleanup_netif+0x18>
- 80370c0: 68ab ldr r3, [r5, #8]
- 80370c2: 42b3 cmp r3, r6
- 80370c4: d102 bne.n 80370cc <etharp_cleanup_netif+0x18>
- etharp_free_entry(i);
- 80370c6: 4620 mov r0, r4
- 80370c8: f7ff ff4a bl 8036f60 <etharp_free_entry>
- 80370cc: 3401 adds r4, #1
- 80370ce: 3514 adds r5, #20
- */
- void etharp_cleanup_netif(struct netif *netif)
- {
- u8_t i;
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- 80370d0: 2c0a cmp r4, #10
- 80370d2: d1f3 bne.n 80370bc <etharp_cleanup_netif+0x8>
- u8_t state = arp_table[i].state;
- if ((state != ETHARP_STATE_EMPTY) && (arp_table[i].netif == netif)) {
- etharp_free_entry(i);
- }
- }
- }
- 80370d4: bd70 pop {r4, r5, r6, pc}
- 80370d6: bf00 nop
- 80370d8: 2000c700 .word 0x2000c700
- 080370dc <etharp_find_addr>:
- * @return table index if found, -1 otherwise
- */
- s8_t
- etharp_find_addr(struct netif *netif, ip_addr_t *ipaddr,
- struct eth_addr **eth_ret, ip_addr_t **ip_ret)
- {
- 80370dc: b5f8 push {r3, r4, r5, r6, r7, lr}
- LWIP_ASSERT("eth_ret != NULL && ip_ret != NULL",
- eth_ret != NULL && ip_ret != NULL);
- LWIP_UNUSED_ARG(netif);
- i = etharp_find_entry(ipaddr, ETHARP_FLAG_FIND_ONLY);
- 80370de: 4608 mov r0, r1
- 80370e0: 2102 movs r1, #2
- * @return table index if found, -1 otherwise
- */
- s8_t
- etharp_find_addr(struct netif *netif, ip_addr_t *ipaddr,
- struct eth_addr **eth_ret, ip_addr_t **ip_ret)
- {
- 80370e2: 4616 mov r6, r2
- 80370e4: 461f mov r7, r3
- LWIP_ASSERT("eth_ret != NULL && ip_ret != NULL",
- eth_ret != NULL && ip_ret != NULL);
- LWIP_UNUSED_ARG(netif);
- i = etharp_find_entry(ipaddr, ETHARP_FLAG_FIND_ONLY);
- 80370e6: f7ff ff55 bl 8036f94 <etharp_find_entry>
- if((i >= 0) && (arp_table[i].state >= ETHARP_STATE_STABLE)) {
- 80370ea: 2800 cmp r0, #0
- 80370ec: db0c blt.n 8037108 <etharp_find_addr+0x2c>
- 80370ee: 2414 movs r4, #20
- 80370f0: 4d07 ldr r5, [pc, #28] ; (8037110 <etharp_find_addr+0x34>)
- 80370f2: 4344 muls r4, r0
- 80370f4: 1929 adds r1, r5, r4
- 80370f6: 7c8b ldrb r3, [r1, #18]
- 80370f8: 2b01 cmp r3, #1
- 80370fa: d905 bls.n 8037108 <etharp_find_addr+0x2c>
- *eth_ret = &arp_table[i].ethaddr;
- 80370fc: 460c mov r4, r1
- 80370fe: 340c adds r4, #12
- *ip_ret = &arp_table[i].ipaddr;
- 8037100: 3104 adds r1, #4
- LWIP_UNUSED_ARG(netif);
- i = etharp_find_entry(ipaddr, ETHARP_FLAG_FIND_ONLY);
- if((i >= 0) && (arp_table[i].state >= ETHARP_STATE_STABLE)) {
- *eth_ret = &arp_table[i].ethaddr;
- 8037102: 6034 str r4, [r6, #0]
- *ip_ret = &arp_table[i].ipaddr;
- 8037104: 6039 str r1, [r7, #0]
- return i;
- 8037106: e000 b.n 803710a <etharp_find_addr+0x2e>
- }
- return -1;
- 8037108: 20ff movs r0, #255 ; 0xff
- }
- 803710a: b240 sxtb r0, r0
- 803710c: bdf8 pop {r3, r4, r5, r6, r7, pc}
- 803710e: bf00 nop
- 8037110: 2000c700 .word 0x2000c700
- 08037114 <etharp_request>:
- * ERR_MEM if the ARP packet couldn't be allocated
- * any other err_t on failure
- */
- err_t
- etharp_request(struct netif *netif, ip_addr_t *ipaddr)
- {
- 8037114: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
- #endif /* LWIP_AUTOIP */
- LWIP_ASSERT("netif != NULL", netif != NULL);
- /* allocate a pbuf for the outgoing ARP request packet */
- p = pbuf_alloc(PBUF_RAW, SIZEOF_ETHARP_PACKET, PBUF_RAM);
- 8037118: 2200 movs r2, #0
- * ERR_MEM if the ARP packet couldn't be allocated
- * any other err_t on failure
- */
- err_t
- etharp_request(struct netif *netif, ip_addr_t *ipaddr)
- {
- 803711a: 4606 mov r6, r0
- 803711c: 4688 mov r8, r1
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n"));
- return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast,
- (struct eth_addr *)netif->hwaddr, &netif->ip_addr, ðzero,
- 803711e: f100 0727 add.w r7, r0, #39 ; 0x27
- 8037122: f100 0904 add.w r9, r0, #4
- #endif /* LWIP_AUTOIP */
- LWIP_ASSERT("netif != NULL", netif != NULL);
- /* allocate a pbuf for the outgoing ARP request packet */
- p = pbuf_alloc(PBUF_RAW, SIZEOF_ETHARP_PACKET, PBUF_RAM);
- 8037126: 212a movs r1, #42 ; 0x2a
- 8037128: 2003 movs r0, #3
- 803712a: f7f8 febc bl 802fea6 <pbuf_alloc>
- /* could allocate a pbuf for an ARP request? */
- if (p == NULL) {
- 803712e: 4605 mov r5, r0
- 8037130: 2800 cmp r0, #0
- 8037132: d03c beq.n 80371ae <etharp_request+0x9a>
- return ERR_MEM;
- }
- LWIP_ASSERT("check that first pbuf can hold struct etharp_hdr",
- (p->len >= SIZEOF_ETHARP_PACKET));
- ethhdr = (struct eth_hdr *)p->payload;
- 8037134: 6844 ldr r4, [r0, #4]
- hdr = (struct etharp_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR);
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_raw: sending raw ARP packet.\n"));
- hdr->opcode = htons(opcode);
- 8037136: 2001 movs r0, #1
- 8037138: f7f7 fd2a bl 802eb90 <lwip_htons>
- * 'sender IP address' MUST be sent using link-layer broadcast instead of
- * link-layer unicast. (See RFC3927 Section 2.5, last paragraph) */
- ethdst_hwaddr = ip_addr_islinklocal(ipsrc_addr) ? (u8_t*)(ethbroadcast.addr) : ethdst_addr->addr;
- #endif /* LWIP_AUTOIP */
- /* Write the ARP MAC-Addresses */
- ETHADDR16_COPY(&hdr->shwaddr, hwsrc_addr);
- 803713c: 4639 mov r1, r7
- (p->len >= SIZEOF_ETHARP_PACKET));
- ethhdr = (struct eth_hdr *)p->payload;
- hdr = (struct etharp_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR);
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_raw: sending raw ARP packet.\n"));
- hdr->opcode = htons(opcode);
- 803713e: 82a0 strh r0, [r4, #20]
- * 'sender IP address' MUST be sent using link-layer broadcast instead of
- * link-layer unicast. (See RFC3927 Section 2.5, last paragraph) */
- ethdst_hwaddr = ip_addr_islinklocal(ipsrc_addr) ? (u8_t*)(ethbroadcast.addr) : ethdst_addr->addr;
- #endif /* LWIP_AUTOIP */
- /* Write the ARP MAC-Addresses */
- ETHADDR16_COPY(&hdr->shwaddr, hwsrc_addr);
- 8037140: 2206 movs r2, #6
- 8037142: f104 0016 add.w r0, r4, #22
- 8037146: f7ea fc21 bl 802198c <memcpy>
- ETHADDR16_COPY(&hdr->dhwaddr, hwdst_addr);
- 803714a: 2206 movs r2, #6
- 803714c: f104 0020 add.w r0, r4, #32
- 8037150: 4919 ldr r1, [pc, #100] ; (80371b8 <etharp_request+0xa4>)
- 8037152: f7ea fc1b bl 802198c <memcpy>
- /* Write the Ethernet MAC-Addresses */
- #if LWIP_AUTOIP
- ETHADDR16_COPY(ðhdr->dest, ethdst_hwaddr);
- #else /* LWIP_AUTOIP */
- ETHADDR16_COPY(ðhdr->dest, ethdst_addr);
- 8037156: 2206 movs r2, #6
- 8037158: 4620 mov r0, r4
- 803715a: 4918 ldr r1, [pc, #96] ; (80371bc <etharp_request+0xa8>)
- 803715c: f7ea fc16 bl 802198c <memcpy>
- #endif /* LWIP_AUTOIP */
- ETHADDR16_COPY(ðhdr->src, ethsrc_addr);
- 8037160: 1da0 adds r0, r4, #6
- 8037162: 4639 mov r1, r7
- 8037164: 2206 movs r2, #6
- 8037166: f7ea fc11 bl 802198c <memcpy>
- /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without
- * structure packing. */
- IPADDR2_COPY(&hdr->sipaddr, ipsrc_addr);
- 803716a: 4649 mov r1, r9
- 803716c: 2204 movs r2, #4
- 803716e: f104 001c add.w r0, r4, #28
- 8037172: f7ea fc0b bl 802198c <memcpy>
- IPADDR2_COPY(&hdr->dipaddr, ipdst_addr);
- 8037176: 4641 mov r1, r8
- 8037178: 2204 movs r2, #4
- 803717a: f104 0026 add.w r0, r4, #38 ; 0x26
- 803717e: f7ea fc05 bl 802198c <memcpy>
- hdr->hwtype = PP_HTONS(HWTYPE_ETHERNET);
- 8037182: 2300 movs r3, #0
- 8037184: 2201 movs r2, #1
- 8037186: 73a3 strb r3, [r4, #14]
- 8037188: 73e2 strb r2, [r4, #15]
- hdr->proto = PP_HTONS(ETHTYPE_IP);
- 803718a: 7463 strb r3, [r4, #17]
- 803718c: 2208 movs r2, #8
- /* set hwlen and protolen */
- hdr->hwlen = ETHARP_HWADDR_LEN;
- 803718e: 2306 movs r3, #6
- hdr->protolen = sizeof(ip_addr_t);
- 8037190: 2104 movs r1, #4
- * structure packing. */
- IPADDR2_COPY(&hdr->sipaddr, ipsrc_addr);
- IPADDR2_COPY(&hdr->dipaddr, ipdst_addr);
- hdr->hwtype = PP_HTONS(HWTYPE_ETHERNET);
- hdr->proto = PP_HTONS(ETHTYPE_IP);
- 8037192: 7422 strb r2, [r4, #16]
- /* set hwlen and protolen */
- hdr->hwlen = ETHARP_HWADDR_LEN;
- hdr->protolen = sizeof(ip_addr_t);
- 8037194: 74e1 strb r1, [r4, #19]
- ethhdr->type = PP_HTONS(ETHTYPE_ARP);
- 8037196: 7322 strb r2, [r4, #12]
- IPADDR2_COPY(&hdr->dipaddr, ipdst_addr);
- hdr->hwtype = PP_HTONS(HWTYPE_ETHERNET);
- hdr->proto = PP_HTONS(ETHTYPE_IP);
- /* set hwlen and protolen */
- hdr->hwlen = ETHARP_HWADDR_LEN;
- 8037198: 74a3 strb r3, [r4, #18]
- hdr->protolen = sizeof(ip_addr_t);
- ethhdr->type = PP_HTONS(ETHTYPE_ARP);
- 803719a: 7363 strb r3, [r4, #13]
- /* send ARP query */
- result = netif->linkoutput(netif, p);
- 803719c: 69b3 ldr r3, [r6, #24]
- 803719e: 4630 mov r0, r6
- 80371a0: 4629 mov r1, r5
- 80371a2: 4798 blx r3
- 80371a4: 4604 mov r4, r0
- ETHARP_STATS_INC(etharp.xmit);
- /* free ARP query packet */
- pbuf_free(p);
- 80371a6: 4628 mov r0, r5
- 80371a8: f7f8 fe30 bl 802fe0c <pbuf_free>
- 80371ac: e000 b.n 80371b0 <etharp_request+0x9c>
- /* could allocate a pbuf for an ARP request? */
- if (p == NULL) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS,
- ("etharp_raw: could not allocate pbuf for ARP request.\n"));
- ETHARP_STATS_INC(etharp.memerr);
- return ERR_MEM;
- 80371ae: 24ff movs r4, #255 ; 0xff
- {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n"));
- return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast,
- (struct eth_addr *)netif->hwaddr, &netif->ip_addr, ðzero,
- ipaddr, ARP_REQUEST);
- }
- 80371b0: b260 sxtb r0, r4
- 80371b2: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
- 80371b6: bf00 nop
- 80371b8: 0804593d .word 0x0804593d
- 80371bc: 08045937 .word 0x08045937
- 080371c0 <etharp_query>:
- * - ERR_ARG Non-unicast address given, those will not appear in ARP cache.
- *
- */
- err_t
- etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q)
- {
- 80371c0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 80371c4: 4607 mov r7, r0
- 80371c6: 460e mov r6, r1
- struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr;
- err_t result = ERR_MEM;
- s8_t i; /* ARP entry index */
- /* non-unicast address? */
- if (ip_addr_isbroadcast(ipaddr, netif) ||
- 80371c8: 6808 ldr r0, [r1, #0]
- 80371ca: 4639 mov r1, r7
- * - ERR_ARG Non-unicast address given, those will not appear in ARP cache.
- *
- */
- err_t
- etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q)
- {
- 80371cc: 4615 mov r5, r2
- struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr;
- err_t result = ERR_MEM;
- s8_t i; /* ARP entry index */
- /* non-unicast address? */
- if (ip_addr_isbroadcast(ipaddr, netif) ||
- 80371ce: f7fb fdd9 bl 8032d84 <ip4_addr_isbroadcast>
- 80371d2: 2800 cmp r0, #0
- 80371d4: d157 bne.n 8037286 <etharp_query+0xc6>
- ip_addr_ismulticast(ipaddr) ||
- 80371d6: 6833 ldr r3, [r6, #0]
- 80371d8: f003 02f0 and.w r2, r3, #240 ; 0xf0
- struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr;
- err_t result = ERR_MEM;
- s8_t i; /* ARP entry index */
- /* non-unicast address? */
- if (ip_addr_isbroadcast(ipaddr, netif) ||
- 80371dc: 2ae0 cmp r2, #224 ; 0xe0
- 80371de: d052 beq.n 8037286 <etharp_query+0xc6>
- ip_addr_ismulticast(ipaddr) ||
- ip_addr_isany(ipaddr)) {
- 80371e0: 2b00 cmp r3, #0
- 80371e2: d050 beq.n 8037286 <etharp_query+0xc6>
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: will not add non-unicast IP address to ARP cache\n"));
- return ERR_ARG;
- }
- /* find entry in ARP cache, ask to create entry if queueing packet */
- i = etharp_find_entry(ipaddr, ETHARP_FLAG_TRY_HARD);
- 80371e4: 2101 movs r1, #1
- 80371e6: 4630 mov r0, r6
- 80371e8: f7ff fed4 bl 8036f94 <etharp_find_entry>
- /* could not find or create entry? */
- if (i < 0) {
- 80371ec: 1e04 subs r4, r0, #0
- 80371ee: db4f blt.n 8037290 <etharp_query+0xd0>
- }
- return (err_t)i;
- }
- /* mark a fresh entry as pending (we just sent a request) */
- if (arp_table[i].state == ETHARP_STATE_EMPTY) {
- 80371f0: 4931 ldr r1, [pc, #196] ; (80372b8 <etharp_query+0xf8>)
- 80371f2: 2214 movs r2, #20
- 80371f4: fb02 1304 mla r3, r2, r4, r1
- 80371f8: 3310 adds r3, #16
- 80371fa: 7898 ldrb r0, [r3, #2]
- 80371fc: b908 cbnz r0, 8037202 <etharp_query+0x42>
- arp_table[i].state = ETHARP_STATE_PENDING;
- 80371fe: 2001 movs r0, #1
- 8037200: 7098 strb r0, [r3, #2]
- LWIP_ASSERT("arp_table[i].state == PENDING or STABLE",
- ((arp_table[i].state == ETHARP_STATE_PENDING) ||
- (arp_table[i].state >= ETHARP_STATE_STABLE)));
- /* do we have a pending entry? or an implicit query request? */
- if ((arp_table[i].state == ETHARP_STATE_PENDING) || (q == NULL)) {
- 8037202: fb02 1204 mla r2, r2, r4, r1
- 8037206: 7c93 ldrb r3, [r2, #18]
- 8037208: 2b01 cmp r3, #1
- 803720a: d000 beq.n 803720e <etharp_query+0x4e>
- 803720c: b935 cbnz r5, 803721c <etharp_query+0x5c>
- /* try to resolve it; send out ARP request */
- result = etharp_request(netif, ipaddr);
- 803720e: 4638 mov r0, r7
- 8037210: 4631 mov r1, r6
- 8037212: f7ff ff7f bl 8037114 <etharp_request>
- 8037216: 4602 mov r2, r0
- /* ARP request couldn't be sent */
- /* We don't re-send arp request in etharp_tmr, but we still queue packets,
- since this failure could be temporary, and the next packet calling
- etharp_query again could lead to sending the queued packets. */
- }
- if (q == NULL) {
- 8037218: b90d cbnz r5, 803721e <etharp_query+0x5e>
- 803721a: e036 b.n 803728a <etharp_query+0xca>
- */
- err_t
- etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q)
- {
- struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr;
- err_t result = ERR_MEM;
- 803721c: 22ff movs r2, #255 ; 0xff
- }
- /* packet given? */
- LWIP_ASSERT("q != NULL", q != NULL);
- /* stable entry? */
- if (arp_table[i].state >= ETHARP_STATE_STABLE) {
- 803721e: 2314 movs r3, #20
- 8037220: 4925 ldr r1, [pc, #148] ; (80372b8 <etharp_query+0xf8>)
- 8037222: 4363 muls r3, r4
- 8037224: 18c8 adds r0, r1, r3
- 8037226: 7c80 ldrb r0, [r0, #18]
- 8037228: 2801 cmp r0, #1
- 803722a: d90b bls.n 8037244 <etharp_query+0x84>
- /* we have a valid IP->Ethernet address mapping */
- ETHARP_SET_HINT(netif, i);
- 803722c: 4a23 ldr r2, [pc, #140] ; (80372bc <etharp_query+0xfc>)
- /* send the packet */
- result = etharp_send_ip(netif, q, srcaddr, &(arp_table[i].ethaddr));
- 803722e: 18cb adds r3, r1, r3
- /* packet given? */
- LWIP_ASSERT("q != NULL", q != NULL);
- /* stable entry? */
- if (arp_table[i].state >= ETHARP_STATE_STABLE) {
- /* we have a valid IP->Ethernet address mapping */
- ETHARP_SET_HINT(netif, i);
- 8037230: 7014 strb r4, [r2, #0]
- /* send the packet */
- result = etharp_send_ip(netif, q, srcaddr, &(arp_table[i].ethaddr));
- 8037232: 4638 mov r0, r7
- 8037234: 4629 mov r1, r5
- 8037236: f107 0227 add.w r2, r7, #39 ; 0x27
- 803723a: 330c adds r3, #12
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q));
- result = ERR_MEM;
- }
- }
- return result;
- }
- 803723c: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
- /* stable entry? */
- if (arp_table[i].state >= ETHARP_STATE_STABLE) {
- /* we have a valid IP->Ethernet address mapping */
- ETHARP_SET_HINT(netif, i);
- /* send the packet */
- result = etharp_send_ip(netif, q, srcaddr, &(arp_table[i].ethaddr));
- 8037240: f7ff be76 b.w 8036f30 <etharp_send_ip>
- /* pending entry? (either just created or already pending */
- } else if (arp_table[i].state == ETHARP_STATE_PENDING) {
- 8037244: d123 bne.n 803728e <etharp_query+0xce>
- 8037246: 462b mov r3, r5
- 8037248: e003 b.n 8037252 <etharp_query+0x92>
- * to copy the whole queue into a new PBUF_RAM (see bug #11400)
- * PBUF_ROMs can be left as they are, since ROM must not get changed. */
- p = q;
- while (p) {
- LWIP_ASSERT("no packet queues allowed!", (p->len != p->tot_len) || (p->next == 0));
- if(p->type != PBUF_ROM) {
- 803724a: 7b1a ldrb r2, [r3, #12]
- 803724c: 2a01 cmp r2, #1
- 803724e: d128 bne.n 80372a2 <etharp_query+0xe2>
- copy_needed = 1;
- break;
- }
- p = p->next;
- 8037250: 681b ldr r3, [r3, #0]
- int copy_needed = 0;
- /* IF q includes a PBUF_REF, PBUF_POOL or PBUF_RAM, we have no choice but
- * to copy the whole queue into a new PBUF_RAM (see bug #11400)
- * PBUF_ROMs can be left as they are, since ROM must not get changed. */
- p = q;
- while (p) {
- 8037252: 2b00 cmp r3, #0
- 8037254: d1f9 bne.n 803724a <etharp_query+0x8a>
- 8037256: e01e b.n 8037296 <etharp_query+0xd6>
- }
- if(copy_needed) {
- /* copy the whole packet into new pbufs */
- p = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM);
- if(p != NULL) {
- if (pbuf_copy(p, q) != ERR_OK) {
- 8037258: 4629 mov r1, r5
- 803725a: f7f8 fedb bl 8030014 <pbuf_copy>
- 803725e: b120 cbz r0, 803726a <etharp_query+0xaa>
- pbuf_free(p);
- 8037260: 4630 mov r0, r6
- 8037262: f7f8 fdd3 bl 802fe0c <pbuf_free>
- 8037266: e024 b.n 80372b2 <etharp_query+0xf2>
- /* referencing the old pbuf is enough */
- p = q;
- pbuf_ref(p);
- }
- /* packet could be taken over? */
- if (p != NULL) {
- 8037268: 462e mov r6, r5
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q));
- result = ERR_MEM;
- }
- #else /* ARP_QUEUEING */
- /* always queue one packet per ARP request only, freeing a previously queued packet */
- if (arp_table[i].q != NULL) {
- 803726a: 2314 movs r3, #20
- 803726c: 4a12 ldr r2, [pc, #72] ; (80372b8 <etharp_query+0xf8>)
- 803726e: fb03 f104 mul.w r1, r3, r4
- 8037272: 4615 mov r5, r2
- 8037274: 5850 ldr r0, [r2, r1]
- 8037276: 461f mov r7, r3
- 8037278: b108 cbz r0, 803727e <etharp_query+0xbe>
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: dropped previously queued packet %p for ARP entry %"S16_F"\n", (void *)q, (s16_t)i));
- pbuf_free(arp_table[i].q);
- 803727a: f7f8 fdc7 bl 802fe0c <pbuf_free>
- }
- arp_table[i].q = p;
- 803727e: 437c muls r4, r7
- 8037280: 512e str r6, [r5, r4]
- result = ERR_OK;
- 8037282: 2400 movs r4, #0
- 8037284: e004 b.n 8037290 <etharp_query+0xd0>
- /* non-unicast address? */
- if (ip_addr_isbroadcast(ipaddr, netif) ||
- ip_addr_ismulticast(ipaddr) ||
- ip_addr_isany(ipaddr)) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: will not add non-unicast IP address to ARP cache\n"));
- return ERR_ARG;
- 8037286: 24f2 movs r4, #242 ; 0xf2
- 8037288: e002 b.n 8037290 <etharp_query+0xd0>
- /* We don't re-send arp request in etharp_tmr, but we still queue packets,
- since this failure could be temporary, and the next packet calling
- etharp_query again could lead to sending the queued packets. */
- }
- if (q == NULL) {
- return result;
- 803728a: 4604 mov r4, r0
- 803728c: e000 b.n 8037290 <etharp_query+0xd0>
- /* we have a valid IP->Ethernet address mapping */
- ETHARP_SET_HINT(netif, i);
- /* send the packet */
- result = etharp_send_ip(netif, q, srcaddr, &(arp_table[i].ethaddr));
- /* pending entry? (either just created or already pending */
- } else if (arp_table[i].state == ETHARP_STATE_PENDING) {
- 803728e: 4614 mov r4, r2
- 8037290: b260 sxtb r0, r4
- 8037292: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- }
- }
- } else {
- /* referencing the old pbuf is enough */
- p = q;
- pbuf_ref(p);
- 8037296: 4628 mov r0, r5
- 8037298: f7f8 fe95 bl 802ffc6 <pbuf_ref>
- }
- /* packet could be taken over? */
- if (p != NULL) {
- 803729c: 2d00 cmp r5, #0
- 803729e: d1e3 bne.n 8037268 <etharp_query+0xa8>
- 80372a0: e007 b.n 80372b2 <etharp_query+0xf2>
- }
- p = p->next;
- }
- if(copy_needed) {
- /* copy the whole packet into new pbufs */
- p = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM);
- 80372a2: 2003 movs r0, #3
- 80372a4: 8919 ldrh r1, [r3, #8]
- 80372a6: 2200 movs r2, #0
- 80372a8: f7f8 fdfd bl 802fea6 <pbuf_alloc>
- if(p != NULL) {
- 80372ac: 4606 mov r6, r0
- 80372ae: 2800 cmp r0, #0
- 80372b0: d1d2 bne.n 8037258 <etharp_query+0x98>
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"S16_F"\n", (void *)q, (s16_t)i));
- #endif /* ARP_QUEUEING */
- } else {
- ETHARP_STATS_INC(etharp.memerr);
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q));
- result = ERR_MEM;
- 80372b2: 24ff movs r4, #255 ; 0xff
- 80372b4: e7ec b.n 8037290 <etharp_query+0xd0>
- 80372b6: bf00 nop
- 80372b8: 2000c700 .word 0x2000c700
- 80372bc: 2000c6fc .word 0x2000c6fc
- 080372c0 <etharp_output_to_arp_index>:
- /** Just a small helper function that sends a pbuf to an ethernet address
- * in the arp_table specified by the index 'arp_idx'.
- */
- static err_t
- etharp_output_to_arp_index(struct netif *netif, struct pbuf *q, u8_t arp_idx)
- {
- 80372c0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE",
- arp_table[arp_idx].state >= ETHARP_STATE_STABLE);
- /* if arp table entry is about to expire: re-request it,
- but only if its state is ETHARP_STATE_STABLE to prevent flooding the
- network with ARP requests if this address is used frequently. */
- if ((arp_table[arp_idx].state == ETHARP_STATE_STABLE) &&
- 80372c4: 4b10 ldr r3, [pc, #64] ; (8037308 <etharp_output_to_arp_index+0x48>)
- /** Just a small helper function that sends a pbuf to an ethernet address
- * in the arp_table specified by the index 'arp_idx'.
- */
- static err_t
- etharp_output_to_arp_index(struct netif *netif, struct pbuf *q, u8_t arp_idx)
- {
- 80372c6: 4615 mov r5, r2
- LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE",
- arp_table[arp_idx].state >= ETHARP_STATE_STABLE);
- /* if arp table entry is about to expire: re-request it,
- but only if its state is ETHARP_STATE_STABLE to prevent flooding the
- network with ARP requests if this address is used frequently. */
- if ((arp_table[arp_idx].state == ETHARP_STATE_STABLE) &&
- 80372c8: 2214 movs r2, #20
- /** Just a small helper function that sends a pbuf to an ethernet address
- * in the arp_table specified by the index 'arp_idx'.
- */
- static err_t
- etharp_output_to_arp_index(struct netif *netif, struct pbuf *q, u8_t arp_idx)
- {
- 80372ca: 460e mov r6, r1
- LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE",
- arp_table[arp_idx].state >= ETHARP_STATE_STABLE);
- /* if arp table entry is about to expire: re-request it,
- but only if its state is ETHARP_STATE_STABLE to prevent flooding the
- network with ARP requests if this address is used frequently. */
- if ((arp_table[arp_idx].state == ETHARP_STATE_STABLE) &&
- 80372cc: fb02 3105 mla r1, r2, r5, r3
- /** Just a small helper function that sends a pbuf to an ethernet address
- * in the arp_table specified by the index 'arp_idx'.
- */
- static err_t
- etharp_output_to_arp_index(struct netif *netif, struct pbuf *q, u8_t arp_idx)
- {
- 80372d0: 4607 mov r7, r0
- LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE",
- arp_table[arp_idx].state >= ETHARP_STATE_STABLE);
- /* if arp table entry is about to expire: re-request it,
- but only if its state is ETHARP_STATE_STABLE to prevent flooding the
- network with ARP requests if this address is used frequently. */
- if ((arp_table[arp_idx].state == ETHARP_STATE_STABLE) &&
- 80372d2: 7c8a ldrb r2, [r1, #18]
- 80372d4: 2a02 cmp r2, #2
- 80372d6: f101 0410 add.w r4, r1, #16
- 80372da: d108 bne.n 80372ee <etharp_output_to_arp_index+0x2e>
- 80372dc: 7cca ldrb r2, [r1, #19]
- 80372de: 2ae3 cmp r2, #227 ; 0xe3
- 80372e0: d905 bls.n 80372ee <etharp_output_to_arp_index+0x2e>
- (arp_table[arp_idx].ctime >= ARP_AGE_REREQUEST_USED)) {
- if (etharp_request(netif, &arp_table[arp_idx].ipaddr) == ERR_OK) {
- 80372e2: 3104 adds r1, #4
- 80372e4: f7ff ff16 bl 8037114 <etharp_request>
- 80372e8: b908 cbnz r0, 80372ee <etharp_output_to_arp_index+0x2e>
- arp_table[arp_idx].state = ETHARP_STATE_STABLE_REREQUESTING;
- 80372ea: 2303 movs r3, #3
- 80372ec: 70a3 strb r3, [r4, #2]
- }
- }
-
- return etharp_send_ip(netif, q, (struct eth_addr*)(netif->hwaddr),
- 80372ee: 4b06 ldr r3, [pc, #24] ; (8037308 <etharp_output_to_arp_index+0x48>)
- 80372f0: 2214 movs r2, #20
- 80372f2: fb02 3305 mla r3, r2, r5, r3
- 80372f6: 4638 mov r0, r7
- 80372f8: 4631 mov r1, r6
- 80372fa: f107 0227 add.w r2, r7, #39 ; 0x27
- 80372fe: 330c adds r3, #12
- &arp_table[arp_idx].ethaddr);
- }
- 8037300: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
- if (etharp_request(netif, &arp_table[arp_idx].ipaddr) == ERR_OK) {
- arp_table[arp_idx].state = ETHARP_STATE_STABLE_REREQUESTING;
- }
- }
-
- return etharp_send_ip(netif, q, (struct eth_addr*)(netif->hwaddr),
- 8037304: f7ff be14 b.w 8036f30 <etharp_send_ip>
- 8037308: 2000c700 .word 0x2000c700
- 0803730c <etharp_output>:
- * - ERR_RTE No route to destination (no gateway to external networks),
- * or the return type of either etharp_query() or etharp_send_ip().
- */
- err_t
- etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr)
- {
- 803730c: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
- 803730e: 4604 mov r4, r0
- 8037310: 460e mov r6, r1
- LWIP_ASSERT("netif != NULL", netif != NULL);
- LWIP_ASSERT("q != NULL", q != NULL);
- LWIP_ASSERT("ipaddr != NULL", ipaddr != NULL);
- /* make room for Ethernet header - should not fail */
- if (pbuf_header(q, sizeof(struct eth_hdr)) != 0) {
- 8037312: 4608 mov r0, r1
- 8037314: 210e movs r1, #14
- * - ERR_RTE No route to destination (no gateway to external networks),
- * or the return type of either etharp_query() or etharp_send_ip().
- */
- err_t
- etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr)
- {
- 8037316: 4615 mov r5, r2
- LWIP_ASSERT("netif != NULL", netif != NULL);
- LWIP_ASSERT("q != NULL", q != NULL);
- LWIP_ASSERT("ipaddr != NULL", ipaddr != NULL);
- /* make room for Ethernet header - should not fail */
- if (pbuf_header(q, sizeof(struct eth_hdr)) != 0) {
- 8037318: f7f8 fd4d bl 802fdb6 <pbuf_header>
- 803731c: 2800 cmp r0, #0
- 803731e: d163 bne.n 80373e8 <etharp_output+0xdc>
- /* Determine on destination hardware address. Broadcasts and multicasts
- * are special, other IP addresses are looked up in the ARP table. */
- /* broadcast destination IP address? */
- if (ip_addr_isbroadcast(ipaddr, netif)) {
- 8037320: 6828 ldr r0, [r5, #0]
- 8037322: 4621 mov r1, r4
- 8037324: f7fb fd2e bl 8032d84 <ip4_addr_isbroadcast>
- 8037328: 2800 cmp r0, #0
- 803732a: d155 bne.n 80373d8 <etharp_output+0xcc>
- /* broadcast on Ethernet also */
- dest = (struct eth_addr *)ðbroadcast;
- /* multicast destination IP address? */
- } else if (ip_addr_ismulticast(ipaddr)) {
- 803732c: 682b ldr r3, [r5, #0]
- 803732e: f003 02f0 and.w r2, r3, #240 ; 0xf0
- 8037332: 2ae0 cmp r2, #224 ; 0xe0
- 8037334: d114 bne.n 8037360 <etharp_output+0x54>
- /* Hash IP multicast address to MAC address.*/
- mcastaddr.addr[0] = LL_MULTICAST_ADDR_0;
- 8037336: 2301 movs r3, #1
- 8037338: f88d 3000 strb.w r3, [sp]
- mcastaddr.addr[1] = LL_MULTICAST_ADDR_1;
- mcastaddr.addr[2] = LL_MULTICAST_ADDR_2;
- 803733c: 235e movs r3, #94 ; 0x5e
- 803733e: f88d 3002 strb.w r3, [sp, #2]
- mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f;
- 8037342: 786b ldrb r3, [r5, #1]
- dest = (struct eth_addr *)ðbroadcast;
- /* multicast destination IP address? */
- } else if (ip_addr_ismulticast(ipaddr)) {
- /* Hash IP multicast address to MAC address.*/
- mcastaddr.addr[0] = LL_MULTICAST_ADDR_0;
- mcastaddr.addr[1] = LL_MULTICAST_ADDR_1;
- 8037344: f88d 0001 strb.w r0, [sp, #1]
- mcastaddr.addr[2] = LL_MULTICAST_ADDR_2;
- mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f;
- 8037348: f003 037f and.w r3, r3, #127 ; 0x7f
- 803734c: f88d 3003 strb.w r3, [sp, #3]
- mcastaddr.addr[4] = ip4_addr3(ipaddr);
- 8037350: 78ab ldrb r3, [r5, #2]
- 8037352: f88d 3004 strb.w r3, [sp, #4]
- mcastaddr.addr[5] = ip4_addr4(ipaddr);
- 8037356: 78eb ldrb r3, [r5, #3]
- 8037358: f88d 3005 strb.w r3, [sp, #5]
- /* destination Ethernet address is multicast */
- dest = &mcastaddr;
- 803735c: 466b mov r3, sp
- 803735e: e03c b.n 80373da <etharp_output+0xce>
- /* unicast destination IP address? */
- } else {
- s8_t i;
- /* outside local network? if so, this can neither be a global broadcast nor
- a subnet broadcast. */
- if (!ip_addr_netcmp(ipaddr, &(netif->ip_addr), &(netif->netmask)) &&
- 8037360: 6862 ldr r2, [r4, #4]
- 8037362: ea83 0102 eor.w r1, r3, r2
- 8037366: 68a2 ldr r2, [r4, #8]
- 8037368: 4211 tst r1, r2
- 803736a: d009 beq.n 8037380 <etharp_output+0x74>
- !ip_addr_islinklocal(ipaddr)) {
- 803736c: b29b uxth r3, r3
- /* unicast destination IP address? */
- } else {
- s8_t i;
- /* outside local network? if so, this can neither be a global broadcast nor
- a subnet broadcast. */
- if (!ip_addr_netcmp(ipaddr, &(netif->ip_addr), &(netif->netmask)) &&
- 803736e: f64f 62a9 movw r2, #65193 ; 0xfea9
- 8037372: 4293 cmp r3, r2
- 8037374: d004 beq.n 8037380 <etharp_output+0x74>
- router for forwarding". */
- if (!ip_addr_islinklocal(&iphdr->src))
- #endif /* LWIP_AUTOIP */
- {
- /* interface has default gateway? */
- if (!ip_addr_isany(&netif->gw)) {
- 8037376: 68e3 ldr r3, [r4, #12]
- 8037378: f104 010c add.w r1, r4, #12
- 803737c: b90b cbnz r3, 8037382 <etharp_output+0x76>
- 803737e: e035 b.n 80373ec <etharp_output+0xe0>
- /* unicast destination IP address? */
- } else {
- s8_t i;
- /* outside local network? if so, this can neither be a global broadcast nor
- a subnet broadcast. */
- if (!ip_addr_netcmp(ipaddr, &(netif->ip_addr), &(netif->netmask)) &&
- 8037380: 4629 mov r1, r5
- if (netif->addr_hint != NULL) {
- /* per-pcb cached entry was given */
- u8_t etharp_cached_entry = *(netif->addr_hint);
- if (etharp_cached_entry < ARP_TABLE_SIZE) {
- #endif /* LWIP_NETIF_HWADDRHINT */
- if ((arp_table[etharp_cached_entry].state >= ETHARP_STATE_STABLE) &&
- 8037382: 4b1c ldr r3, [pc, #112] ; (80373f4 <etharp_output+0xe8>)
- 8037384: 781a ldrb r2, [r3, #0]
- 8037386: 4b1c ldr r3, [pc, #112] ; (80373f8 <etharp_output+0xec>)
- 8037388: 2014 movs r0, #20
- 803738a: fb00 3302 mla r3, r0, r2, r3
- 803738e: 7c98 ldrb r0, [r3, #18]
- 8037390: 2801 cmp r0, #1
- 8037392: d904 bls.n 803739e <etharp_output+0x92>
- 8037394: 6808 ldr r0, [r1, #0]
- 8037396: 685b ldr r3, [r3, #4]
- 8037398: 4298 cmp r0, r3
- 803739a: d100 bne.n 803739e <etharp_output+0x92>
- 803739c: e00d b.n 80373ba <etharp_output+0xae>
- 803739e: 2300 movs r3, #0
- * @return
- * - ERR_RTE No route to destination (no gateway to external networks),
- * or the return type of either etharp_query() or etharp_send_ip().
- */
- err_t
- etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr)
- 80373a0: 4f15 ldr r7, [pc, #84] ; (80373f8 <etharp_output+0xec>)
- if (netif->addr_hint != NULL) {
- /* per-pcb cached entry was given */
- u8_t etharp_cached_entry = *(netif->addr_hint);
- if (etharp_cached_entry < ARP_TABLE_SIZE) {
- #endif /* LWIP_NETIF_HWADDRHINT */
- if ((arp_table[etharp_cached_entry].state >= ETHARP_STATE_STABLE) &&
- 80373a2: 461a mov r2, r3
- * @return
- * - ERR_RTE No route to destination (no gateway to external networks),
- * or the return type of either etharp_query() or etharp_send_ip().
- */
- err_t
- etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr)
- 80373a4: 18f8 adds r0, r7, r3
- #endif /* LWIP_NETIF_HWADDRHINT */
- /* find stable entry: do this here since this is a critical path for
- throughput and etharp_find_entry() is kind of slow */
- for (i = 0; i < ARP_TABLE_SIZE; i++) {
- if ((arp_table[i].state >= ETHARP_STATE_STABLE) &&
- 80373a6: 7c85 ldrb r5, [r0, #18]
- 80373a8: 2d01 cmp r5, #1
- 80373aa: d90b bls.n 80373c4 <etharp_output+0xb8>
- 80373ac: 680d ldr r5, [r1, #0]
- 80373ae: 6840 ldr r0, [r0, #4]
- 80373b0: 4285 cmp r5, r0
- 80373b2: d107 bne.n 80373c4 <etharp_output+0xb8>
- (ip_addr_cmp(dst_addr, &arp_table[i].ipaddr))) {
- /* found an existing, stable entry */
- ETHARP_SET_HINT(netif, i);
- 80373b4: 4b0f ldr r3, [pc, #60] ; (80373f4 <etharp_output+0xe8>)
- 80373b6: b2d2 uxtb r2, r2
- 80373b8: 701a strb r2, [r3, #0]
- return etharp_output_to_arp_index(netif, q, i);
- 80373ba: 4620 mov r0, r4
- 80373bc: 4631 mov r1, r6
- 80373be: f7ff ff7f bl 80372c0 <etharp_output_to_arp_index>
- 80373c2: e014 b.n 80373ee <etharp_output+0xe2>
- 80373c4: 3314 adds r3, #20
- }
- #endif /* LWIP_NETIF_HWADDRHINT */
- /* find stable entry: do this here since this is a critical path for
- throughput and etharp_find_entry() is kind of slow */
- for (i = 0; i < ARP_TABLE_SIZE; i++) {
- 80373c6: 3201 adds r2, #1
- 80373c8: 2bc8 cmp r3, #200 ; 0xc8
- 80373ca: b2d2 uxtb r2, r2
- 80373cc: d1ea bne.n 80373a4 <etharp_output+0x98>
- return etharp_output_to_arp_index(netif, q, i);
- }
- }
- /* no stable entry found, use the (slower) query function:
- queue on destination Ethernet address belonging to ipaddr */
- return etharp_query(netif, dst_addr, q);
- 80373ce: 4620 mov r0, r4
- 80373d0: 4632 mov r2, r6
- 80373d2: f7ff fef5 bl 80371c0 <etharp_query>
- 80373d6: e00a b.n 80373ee <etharp_output+0xe2>
- * are special, other IP addresses are looked up in the ARP table. */
- /* broadcast destination IP address? */
- if (ip_addr_isbroadcast(ipaddr, netif)) {
- /* broadcast on Ethernet also */
- dest = (struct eth_addr *)ðbroadcast;
- 80373d8: 4b08 ldr r3, [pc, #32] ; (80373fc <etharp_output+0xf0>)
- }
- /* continuation for multicast/broadcast destinations */
- /* obtain source Ethernet address of the given interface */
- /* send packet directly on the link */
- return etharp_send_ip(netif, q, (struct eth_addr*)(netif->hwaddr), dest);
- 80373da: 4620 mov r0, r4
- 80373dc: 4631 mov r1, r6
- 80373de: f104 0227 add.w r2, r4, #39 ; 0x27
- 80373e2: f7ff fda5 bl 8036f30 <etharp_send_ip>
- 80373e6: e002 b.n 80373ee <etharp_output+0xe2>
- if (pbuf_header(q, sizeof(struct eth_hdr)) != 0) {
- /* bail out */
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS,
- ("etharp_output: could not allocate room for header.\n"));
- LINK_STATS_INC(link.lenerr);
- return ERR_BUF;
- 80373e8: 20fe movs r0, #254 ; 0xfe
- 80373ea: e000 b.n 80373ee <etharp_output+0xe2>
- /* send to hardware address of default gateway IP address */
- dst_addr = &(netif->gw);
- /* no default gateway available */
- } else {
- /* no route to destination error (default gateway missing) */
- return ERR_RTE;
- 80373ec: 20fc movs r0, #252 ; 0xfc
- /* continuation for multicast/broadcast destinations */
- /* obtain source Ethernet address of the given interface */
- /* send packet directly on the link */
- return etharp_send_ip(netif, q, (struct eth_addr*)(netif->hwaddr), dest);
- }
- 80373ee: b240 sxtb r0, r0
- 80373f0: bdfe pop {r1, r2, r3, r4, r5, r6, r7, pc}
- 80373f2: bf00 nop
- 80373f4: 2000c6fc .word 0x2000c6fc
- 80373f8: 2000c700 .word 0x2000c700
- 80373fc: 08045937 .word 0x08045937
- 08037400 <ethernet_input>:
- * @param p the recevied packet, p->payload pointing to the ethernet header
- * @param netif the network interface on which the packet was received
- */
- err_t
- ethernet_input(struct pbuf *p, struct netif *netif)
- {
- 8037400: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- u16_t type;
- #if LWIP_ARP || ETHARP_SUPPORT_VLAN
- s16_t ip_hdr_offset = SIZEOF_ETH_HDR;
- #endif /* LWIP_ARP || ETHARP_SUPPORT_VLAN */
- if (p->len <= SIZEOF_ETH_HDR) {
- 8037404: 8943 ldrh r3, [r0, #10]
- 8037406: 2b0e cmp r3, #14
- * @param p the recevied packet, p->payload pointing to the ethernet header
- * @param netif the network interface on which the packet was received
- */
- err_t
- ethernet_input(struct pbuf *p, struct netif *netif)
- {
- 8037408: b087 sub sp, #28
- 803740a: 4604 mov r4, r0
- 803740c: 460d mov r5, r1
- u16_t type;
- #if LWIP_ARP || ETHARP_SUPPORT_VLAN
- s16_t ip_hdr_offset = SIZEOF_ETH_HDR;
- #endif /* LWIP_ARP || ETHARP_SUPPORT_VLAN */
- if (p->len <= SIZEOF_ETH_HDR) {
- 803740e: f240 80ed bls.w 80375ec <ethernet_input+0x1ec>
- ETHARP_STATS_INC(etharp.drop);
- goto free_and_return;
- }
- /* points to packet payload, which starts with an Ethernet header */
- ethhdr = (struct eth_hdr *)p->payload;
- 8037412: 6840 ldr r0, [r0, #4]
- #if LWIP_ARP_FILTER_NETIF
- netif = LWIP_ARP_FILTER_NETIF_FN(p, netif, htons(type));
- #endif /* LWIP_ARP_FILTER_NETIF*/
- if (ethhdr->dest.addr[0] & 1) {
- 8037414: 7803 ldrb r3, [r0, #0]
- (unsigned)ethhdr->dest.addr[3], (unsigned)ethhdr->dest.addr[4], (unsigned)ethhdr->dest.addr[5],
- (unsigned)ethhdr->src.addr[0], (unsigned)ethhdr->src.addr[1], (unsigned)ethhdr->src.addr[2],
- (unsigned)ethhdr->src.addr[3], (unsigned)ethhdr->src.addr[4], (unsigned)ethhdr->src.addr[5],
- (unsigned)htons(ethhdr->type)));
- type = ethhdr->type;
- 8037416: 8986 ldrh r6, [r0, #12]
- #if LWIP_ARP_FILTER_NETIF
- netif = LWIP_ARP_FILTER_NETIF_FN(p, netif, htons(type));
- #endif /* LWIP_ARP_FILTER_NETIF*/
- if (ethhdr->dest.addr[0] & 1) {
- 8037418: 07da lsls r2, r3, #31
- 803741a: d513 bpl.n 8037444 <ethernet_input+0x44>
- /* this might be a multicast or broadcast packet */
- if (ethhdr->dest.addr[0] == LL_MULTICAST_ADDR_0) {
- 803741c: 2b01 cmp r3, #1
- 803741e: d108 bne.n 8037432 <ethernet_input+0x32>
- if ((ethhdr->dest.addr[1] == LL_MULTICAST_ADDR_1) &&
- 8037420: 7843 ldrb r3, [r0, #1]
- 8037422: b97b cbnz r3, 8037444 <ethernet_input+0x44>
- 8037424: 7883 ldrb r3, [r0, #2]
- 8037426: 2b5e cmp r3, #94 ; 0x5e
- 8037428: d10c bne.n 8037444 <ethernet_input+0x44>
- (ethhdr->dest.addr[2] == LL_MULTICAST_ADDR_2)) {
- /* mark the pbuf as link-layer multicast */
- p->flags |= PBUF_FLAG_LLMCAST;
- 803742a: 7b63 ldrb r3, [r4, #13]
- 803742c: f043 0310 orr.w r3, r3, #16
- 8037430: e007 b.n 8037442 <ethernet_input+0x42>
- }
- } else if (eth_addr_cmp(ðhdr->dest, ðbroadcast)) {
- 8037432: 4972 ldr r1, [pc, #456] ; (80375fc <ethernet_input+0x1fc>)
- 8037434: 2206 movs r2, #6
- 8037436: f7ea fa77 bl 8021928 <memcmp>
- 803743a: b918 cbnz r0, 8037444 <ethernet_input+0x44>
- /* mark the pbuf as link-layer broadcast */
- p->flags |= PBUF_FLAG_LLBCAST;
- 803743c: 7b63 ldrb r3, [r4, #13]
- 803743e: f043 0308 orr.w r3, r3, #8
- 8037442: 7363 strb r3, [r4, #13]
- }
- }
- switch (type) {
- 8037444: 2e08 cmp r6, #8
- 8037446: d004 beq.n 8037452 <ethernet_input+0x52>
- 8037448: f5b6 6fc1 cmp.w r6, #1544 ; 0x608
- 803744c: f040 80ce bne.w 80375ec <ethernet_input+0x1ec>
- 8037450: e014 b.n 803747c <ethernet_input+0x7c>
- #if LWIP_ARP
- /* IP packet? */
- case PP_HTONS(ETHTYPE_IP):
- if (!(netif->flags & NETIF_FLAG_ETHARP)) {
- 8037452: f895 302d ldrb.w r3, [r5, #45] ; 0x2d
- 8037456: f003 0320 and.w r3, r3, #32
- 803745a: b2db uxtb r3, r3
- 803745c: 2b00 cmp r3, #0
- 803745e: f000 80c5 beq.w 80375ec <ethernet_input+0x1ec>
- #if ETHARP_TRUST_IP_MAC
- /* update ARP table */
- etharp_ip_input(netif, p);
- #endif /* ETHARP_TRUST_IP_MAC */
- /* skip Ethernet header */
- if(pbuf_header(p, -ip_hdr_offset)) {
- 8037462: 4620 mov r0, r4
- 8037464: f06f 010d mvn.w r1, #13
- 8037468: f7f8 fca5 bl 802fdb6 <pbuf_header>
- 803746c: 2800 cmp r0, #0
- 803746e: f040 80bd bne.w 80375ec <ethernet_input+0x1ec>
- LWIP_ASSERT("Can't move over header in packet", 0);
- goto free_and_return;
- } else {
- /* pass to IP layer */
- ip_input(p, netif);
- 8037472: 4620 mov r0, r4
- 8037474: 4629 mov r1, r5
- 8037476: f7fb fd99 bl 8032fac <ip_input>
- }
- break;
- 803747a: e0ba b.n 80375f2 <ethernet_input+0x1f2>
-
- case PP_HTONS(ETHTYPE_ARP):
- if (!(netif->flags & NETIF_FLAG_ETHARP)) {
- 803747c: f895 302d ldrb.w r3, [r5, #45] ; 0x2d
- 8037480: f003 0320 and.w r3, r3, #32
- 8037484: b2db uxtb r3, r3
- 8037486: 2b00 cmp r3, #0
- 8037488: f000 80b0 beq.w 80375ec <ethernet_input+0x1ec>
- LWIP_ERROR("netif != NULL", (netif != NULL), return;);
- /* drop short ARP packets: we have to check for p->len instead of p->tot_len here
- since a struct etharp_hdr is pointed to p->payload, so it musn't be chained! */
- if (p->len < SIZEOF_ETHARP_PACKET) {
- 803748c: 8963 ldrh r3, [r4, #10]
- 803748e: 2b29 cmp r3, #41 ; 0x29
- 8037490: d800 bhi.n 8037494 <ethernet_input+0x94>
- 8037492: e0ab b.n 80375ec <ethernet_input+0x1ec>
- ETHARP_STATS_INC(etharp.drop);
- pbuf_free(p);
- return;
- }
- ethhdr = (struct eth_hdr *)p->payload;
- 8037494: 6866 ldr r6, [r4, #4]
- hdr = (struct etharp_hdr *)(((u8_t*)ethhdr) + SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR);
- }
- #endif /* ETHARP_SUPPORT_VLAN */
- /* RFC 826 "Packet Reception": */
- if ((hdr->hwtype != PP_HTONS(HWTYPE_ETHERNET)) ||
- 8037496: 89f3 ldrh r3, [r6, #14]
- 8037498: f5b3 7f80 cmp.w r3, #256 ; 0x100
- 803749c: f040 80a6 bne.w 80375ec <ethernet_input+0x1ec>
- 80374a0: 7cb3 ldrb r3, [r6, #18]
- 80374a2: 2b06 cmp r3, #6
- 80374a4: f040 80a2 bne.w 80375ec <ethernet_input+0x1ec>
- (hdr->hwlen != ETHARP_HWADDR_LEN) ||
- 80374a8: 7cf7 ldrb r7, [r6, #19]
- 80374aa: 2f04 cmp r7, #4
- 80374ac: f040 809e bne.w 80375ec <ethernet_input+0x1ec>
- (hdr->protolen != sizeof(ip_addr_t)) ||
- 80374b0: 8a33 ldrh r3, [r6, #16]
- 80374b2: 2b08 cmp r3, #8
- 80374b4: f040 809a bne.w 80375ec <ethernet_input+0x1ec>
- autoip_arp_reply(netif, hdr);
- #endif /* LWIP_AUTOIP */
- /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without
- * structure packing (not using structure copy which breaks strict-aliasing rules). */
- IPADDR2_COPY(&sipaddr, &hdr->sipaddr);
- 80374b8: f106 0a1c add.w sl, r6, #28
- 80374bc: 4651 mov r1, sl
- 80374be: 463a mov r2, r7
- 80374c0: a804 add r0, sp, #16
- 80374c2: f7ea fa63 bl 802198c <memcpy>
- IPADDR2_COPY(&dipaddr, &hdr->dipaddr);
- 80374c6: f106 0226 add.w r2, r6, #38 ; 0x26
- 80374ca: 9203 str r2, [sp, #12]
- 80374cc: 4611 mov r1, r2
- 80374ce: a805 add r0, sp, #20
- 80374d0: 463a mov r2, r7
- 80374d2: f7ea fa5b bl 802198c <memcpy>
- /* this interface is not configured? */
- if (ip_addr_isany(&netif->ip_addr)) {
- 80374d6: 686b ldr r3, [r5, #4]
- 80374d8: b12b cbz r3, 80374e6 <ethernet_input+0xe6>
- for_us = 0;
- } else {
- /* ARP packet directed to us? */
- for_us = (u8_t)ip_addr_cmp(&dipaddr, &(netif->ip_addr));
- 80374da: 9a05 ldr r2, [sp, #20]
- 80374dc: 1ad1 subs r1, r2, r3
- 80374de: 424a negs r2, r1
- 80374e0: 414a adcs r2, r1
- 80374e2: 9201 str r2, [sp, #4]
- 80374e4: e000 b.n 80374e8 <ethernet_input+0xe8>
- IPADDR2_COPY(&sipaddr, &hdr->sipaddr);
- IPADDR2_COPY(&dipaddr, &hdr->dipaddr);
- /* this interface is not configured? */
- if (ip_addr_isany(&netif->ip_addr)) {
- for_us = 0;
- 80374e6: 9301 str r3, [sp, #4]
- /* ARP message directed to us?
- -> add IP address in ARP cache; assume requester wants to talk to us,
- can result in directly sending the queued packets for this host.
- ARP message not directed to us?
- -> update the source IP address in the cache, if present */
- etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr),
- 80374e8: 9b01 ldr r3, [sp, #4]
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n",
- ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr),
- ethaddr->addr[0], ethaddr->addr[1], ethaddr->addr[2],
- ethaddr->addr[3], ethaddr->addr[4], ethaddr->addr[5]));
- /* non-unicast address? */
- if (ip_addr_isany(ipaddr) ||
- 80374ea: 9804 ldr r0, [sp, #16]
- /* ARP message directed to us?
- -> add IP address in ARP cache; assume requester wants to talk to us,
- can result in directly sending the queued packets for this host.
- ARP message not directed to us?
- -> update the source IP address in the cache, if present */
- etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr),
- 80374ec: f106 0716 add.w r7, r6, #22
- 80374f0: 2b00 cmp r3, #0
- 80374f2: bf0c ite eq
- 80374f4: f04f 0802 moveq.w r8, #2
- 80374f8: f04f 0801 movne.w r8, #1
- case PP_HTONS(ETHTYPE_ARP):
- if (!(netif->flags & NETIF_FLAG_ETHARP)) {
- goto free_and_return;
- }
- /* pass p to ARP module */
- etharp_arp_input(netif, (struct eth_addr*)(netif->hwaddr), p);
- 80374fc: f105 0927 add.w r9, r5, #39 ; 0x27
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n",
- ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr),
- ethaddr->addr[0], ethaddr->addr[1], ethaddr->addr[2],
- ethaddr->addr[3], ethaddr->addr[4], ethaddr->addr[5]));
- /* non-unicast address? */
- if (ip_addr_isany(ipaddr) ||
- 8037500: 2800 cmp r0, #0
- 8037502: d03d beq.n 8037580 <ethernet_input+0x180>
- ip_addr_isbroadcast(ipaddr, netif) ||
- 8037504: 4629 mov r1, r5
- 8037506: f7fb fc3d bl 8032d84 <ip4_addr_isbroadcast>
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n",
- ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr),
- ethaddr->addr[0], ethaddr->addr[1], ethaddr->addr[2],
- ethaddr->addr[3], ethaddr->addr[4], ethaddr->addr[5]));
- /* non-unicast address? */
- if (ip_addr_isany(ipaddr) ||
- 803750a: 9002 str r0, [sp, #8]
- 803750c: 2800 cmp r0, #0
- 803750e: d137 bne.n 8037580 <ethernet_input+0x180>
- ip_addr_isbroadcast(ipaddr, netif) ||
- ip_addr_ismulticast(ipaddr)) {
- 8037510: 9a04 ldr r2, [sp, #16]
- 8037512: f002 02f0 and.w r2, r2, #240 ; 0xf0
- ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr),
- ethaddr->addr[0], ethaddr->addr[1], ethaddr->addr[2],
- ethaddr->addr[3], ethaddr->addr[4], ethaddr->addr[5]));
- /* non-unicast address? */
- if (ip_addr_isany(ipaddr) ||
- ip_addr_isbroadcast(ipaddr, netif) ||
- 8037516: 2ae0 cmp r2, #224 ; 0xe0
- 8037518: d032 beq.n 8037580 <ethernet_input+0x180>
- ip_addr_ismulticast(ipaddr)) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: will not add non-unicast IP address to ARP cache\n"));
- return ERR_ARG;
- }
- /* find or create ARP entry */
- i = etharp_find_entry(ipaddr, flags);
- 803751a: a804 add r0, sp, #16
- 803751c: 4641 mov r1, r8
- 803751e: f7ff fd39 bl 8036f94 <etharp_find_entry>
- /* bail out if no entry could be found */
- if (i < 0) {
- 8037522: 2800 cmp r0, #0
- 8037524: db2c blt.n 8037580 <ethernet_input+0x180>
- arp_table[i].state = ETHARP_STATE_STATIC;
- } else
- #endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
- {
- /* mark it stable */
- arp_table[i].state = ETHARP_STATE_STABLE;
- 8037526: 4b36 ldr r3, [pc, #216] ; (8037600 <ethernet_input+0x200>)
- 8037528: f04f 0814 mov.w r8, #20
- 803752c: fb08 f800 mul.w r8, r8, r0
- 8037530: eb03 0108 add.w r1, r3, r8
- 8037534: 2202 movs r2, #2
- 8037536: 748a strb r2, [r1, #18]
- }
- /* record network interface */
- arp_table[i].netif = netif;
- 8037538: 608d str r5, [r1, #8]
- arp_table[i].state = ETHARP_STATE_STATIC;
- } else
- #endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
- {
- /* mark it stable */
- arp_table[i].state = ETHARP_STATE_STABLE;
- 803753a: f101 0b10 add.w fp, r1, #16
- }
- /* record network interface */
- arp_table[i].netif = netif;
- /* insert in SNMP ARP index tree */
- snmp_insert_arpidx_tree(netif, &arp_table[i].ipaddr);
- 803753e: 4628 mov r0, r5
- 8037540: 3104 adds r1, #4
- 8037542: 9300 str r3, [sp, #0]
- 8037544: f7fd f900 bl 8034748 <snmp_insert_arpidx_tree>
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: updating stable entry %"S16_F"\n", (s16_t)i));
- /* update address */
- ETHADDR32_COPY(&arp_table[i].ethaddr, ethaddr);
- 8037548: 9b00 ldr r3, [sp, #0]
- 803754a: eb03 0008 add.w r0, r3, r8
- 803754e: 2206 movs r2, #6
- 8037550: 300c adds r0, #12
- 8037552: 4639 mov r1, r7
- 8037554: f7ea fa1a bl 802198c <memcpy>
- /* reset time stamp */
- arp_table[i].ctime = 0;
- 8037558: 9a02 ldr r2, [sp, #8]
- 803755a: f88b 2003 strb.w r2, [fp, #3]
- /* get the packet pointer */
- p = q->p;
- /* now queue entry can be freed */
- memp_free(MEMP_ARP_QUEUE, q);
- #else /* ARP_QUEUEING */
- if (arp_table[i].q != NULL) {
- 803755e: 9b00 ldr r3, [sp, #0]
- 8037560: f853 b008 ldr.w fp, [r3, r8]
- 8037564: f1bb 0f00 cmp.w fp, #0
- 8037568: d00a beq.n 8037580 <ethernet_input+0x180>
- struct pbuf *p = arp_table[i].q;
- arp_table[i].q = NULL;
- 803756a: f843 2008 str.w r2, [r3, r8]
- #endif /* ARP_QUEUEING */
- /* send the queued IP packet */
- etharp_send_ip(netif, p, (struct eth_addr*)(netif->hwaddr), ethaddr);
- 803756e: 4628 mov r0, r5
- 8037570: 4659 mov r1, fp
- 8037572: 464a mov r2, r9
- 8037574: 463b mov r3, r7
- 8037576: f7ff fcdb bl 8036f30 <etharp_send_ip>
- /* free the queued IP packet */
- pbuf_free(p);
- 803757a: 4658 mov r0, fp
- 803757c: f7f8 fc46 bl 802fe0c <pbuf_free>
- -> update the source IP address in the cache, if present */
- etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr),
- for_us ? ETHARP_FLAG_TRY_HARD : ETHARP_FLAG_FIND_ONLY);
- /* now act on the message itself */
- switch (hdr->opcode) {
- 8037580: 8ab3 ldrh r3, [r6, #20]
- 8037582: f5b3 7f80 cmp.w r3, #256 ; 0x100
- 8037586: d003 beq.n 8037590 <ethernet_input+0x190>
- 8037588: f5b3 7f00 cmp.w r3, #512 ; 0x200
- 803758c: d12e bne.n 80375ec <ethernet_input+0x1ec>
- 803758e: e029 b.n 80375e4 <ethernet_input+0x1e4>
- * reply. In any case, we time-stamp any existing ARP entry,
- * and possiby send out an IP packet that was queued on it. */
- LWIP_DEBUGF (ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: incoming ARP request\n"));
- /* ARP request for our address? */
- if (for_us) {
- 8037590: 9b01 ldr r3, [sp, #4]
- 8037592: b35b cbz r3, 80375ec <ethernet_input+0x1ec>
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: replying to ARP request for our IP address\n"));
- /* Re-use pbuf to send ARP reply.
- Since we are re-using an existing pbuf, we can't call etharp_raw since
- that would allocate a new pbuf. */
- hdr->opcode = htons(ARP_REPLY);
- 8037594: 2002 movs r0, #2
- 8037596: f7f7 fafb bl 802eb90 <lwip_htons>
- 803759a: 82b0 strh r0, [r6, #20]
- IPADDR2_COPY(&hdr->dipaddr, &hdr->sipaddr);
- 803759c: 4651 mov r1, sl
- 803759e: 2204 movs r2, #4
- 80375a0: 9803 ldr r0, [sp, #12]
- 80375a2: f7ea f9f3 bl 802198c <memcpy>
- IPADDR2_COPY(&hdr->sipaddr, &netif->ip_addr);
- 80375a6: 1d29 adds r1, r5, #4
- 80375a8: 2204 movs r2, #4
- 80375aa: 4650 mov r0, sl
- 80375ac: f7ea f9ee bl 802198c <memcpy>
- * 'sender IP address' MUST be sent using link-layer broadcast instead of
- * link-layer unicast. (See RFC3927 Section 2.5, last paragraph) */
- ethdst_hwaddr = ip_addr_islinklocal(&netif->ip_addr) ? (u8_t*)(ethbroadcast.addr) : hdr->shwaddr.addr;
- #endif /* LWIP_AUTOIP */
- ETHADDR16_COPY(&hdr->dhwaddr, &hdr->shwaddr);
- 80375b0: 4639 mov r1, r7
- 80375b2: 2206 movs r2, #6
- 80375b4: f106 0020 add.w r0, r6, #32
- 80375b8: f7ea f9e8 bl 802198c <memcpy>
- #if LWIP_AUTOIP
- ETHADDR16_COPY(ðhdr->dest, ethdst_hwaddr);
- #else /* LWIP_AUTOIP */
- ETHADDR16_COPY(ðhdr->dest, &hdr->shwaddr);
- 80375bc: 4639 mov r1, r7
- 80375be: 2206 movs r2, #6
- 80375c0: 4630 mov r0, r6
- 80375c2: f7ea f9e3 bl 802198c <memcpy>
- #endif /* LWIP_AUTOIP */
- ETHADDR16_COPY(&hdr->shwaddr, ethaddr);
- 80375c6: 4649 mov r1, r9
- 80375c8: 2206 movs r2, #6
- 80375ca: 4638 mov r0, r7
- 80375cc: f7ea f9de bl 802198c <memcpy>
- ETHADDR16_COPY(ðhdr->src, ethaddr);
- 80375d0: 4649 mov r1, r9
- 80375d2: 1db0 adds r0, r6, #6
- 80375d4: 2206 movs r2, #6
- 80375d6: f7ea f9d9 bl 802198c <memcpy>
- /* hwtype, hwaddr_len, proto, protolen and the type in the ethernet header
- are already correct, we tested that before */
- /* return ARP reply */
- netif->linkoutput(netif, p);
- 80375da: 69ab ldr r3, [r5, #24]
- 80375dc: 4628 mov r0, r5
- 80375de: 4621 mov r1, r4
- 80375e0: 4798 blx r3
- 80375e2: e003 b.n 80375ec <ethernet_input+0x1ec>
- #if (LWIP_DHCP && DHCP_DOES_ARP_CHECK)
- /* DHCP wants to know about ARP replies from any host with an
- * IP address also offered to us by the DHCP server. We do not
- * want to take a duplicate IP address on a single network.
- * @todo How should we handle redundant (fail-over) interfaces? */
- dhcp_arp_reply(netif, &sipaddr);
- 80375e4: 4628 mov r0, r5
- 80375e6: a904 add r1, sp, #16
- 80375e8: f7f7 ffa8 bl 802f53c <dhcp_arp_reply>
- /* This means the pbuf is freed or consumed,
- so the caller doesn't have to free it again */
- return ERR_OK;
- free_and_return:
- pbuf_free(p);
- 80375ec: 4620 mov r0, r4
- 80375ee: f7f8 fc0d bl 802fe0c <pbuf_free>
- return ERR_OK;
- }
- 80375f2: 2000 movs r0, #0
- 80375f4: b007 add sp, #28
- 80375f6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 80375fa: bf00 nop
- 80375fc: 08045937 .word 0x08045937
- 8037600: 2000c700 .word 0x2000c700
- 08037604 <arp_timer>:
- return ERR_OK;
- }
- static void arp_timer(void *arg)
- {
- 8037604: b508 push {r3, lr}
- etharp_tmr();
- 8037606: f7ff fd37 bl 8037078 <etharp_tmr>
- sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL);
- 803760a: 4904 ldr r1, [pc, #16] ; (803761c <arp_timer+0x18>)
- 803760c: f241 3088 movw r0, #5000 ; 0x1388
- 8037610: 2200 movs r2, #0
- }
- 8037612: e8bd 4008 ldmia.w sp!, {r3, lr}
- static void arp_timer(void *arg)
- {
- etharp_tmr();
- sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL);
- 8037616: f7fa bfa1 b.w 803255c <sys_timeout>
- 803761a: bf00 nop
- 803761c: 08037605 .word 0x08037605
- 08037620 <ethernetif_input>:
- }
- }
- */
- void ethernetif_input(void * pvParameters)
- {
- 8037620: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- struct pbuf *p;
- for( ;; )
- {
- if(xSemaphoreTake(s_xSemaphore, emacBLOCK_TIME_WAITING_FOR_INPUT)==pdTRUE)
- 8037624: f8df 80c4 ldr.w r8, [pc, #196] ; 80376ec <ethernetif_input+0xcc>
- }
- }
- */
- void ethernetif_input(void * pvParameters)
- {
- 8037628: b085 sub sp, #20
- struct pbuf *p;
- for( ;; )
- {
- if(xSemaphoreTake(s_xSemaphore, emacBLOCK_TIME_WAITING_FOR_INPUT)==pdTRUE)
- 803762a: 2100 movs r1, #0
- 803762c: 2264 movs r2, #100 ; 0x64
- 803762e: f8d8 0000 ldr.w r0, [r8]
- 8037632: 460b mov r3, r1
- 8037634: f7f3 f8d7 bl 802a7e6 <xQueueGenericReceive>
- 8037638: 2801 cmp r0, #1
- 803763a: d1f6 bne.n 803762a <ethernetif_input+0xa>
- }
- }
-
- /* Release descriptors to DMA */
- /* Check if received frame with multiple DMA buffer segments */
- if (DMA_RX_FRAME_infos->Seg_Count > 1)
- 803763c: f8df a0b0 ldr.w sl, [pc, #176] ; 80376f0 <ethernetif_input+0xd0>
- /* Clear Segment_Count */
- DMA_RX_FRAME_infos->Seg_Count =0;
-
-
- /* When Rx Buffer unavailable flag is set: clear it and resume reception */
- if ((ETH->DMASR & ETH_DMASR_RBUS) != (u32)RESET)
- 8037640: f8df 90b0 ldr.w r9, [pc, #176] ; 80376f4 <ethernetif_input+0xd4>
- __IO ETH_DMADESCTypeDef *DMARxNextDesc;
-
- p = NULL;
-
- /* Get received frame */
- frame = ETH_Get_Received_Frame_interrupt();
- 8037644: a801 add r0, sp, #4
- 8037646: f001 fc9f bl 8038f88 <ETH_Get_Received_Frame_interrupt>
- 803764a: 9e03 ldr r6, [sp, #12]
-
- /* check that frame has no error */
- if ((frame.descriptor->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET)
- 803764c: 6837 ldr r7, [r6, #0]
- 803764e: f417 4700 ands.w r7, r7, #32768 ; 0x8000
- 8037652: d001 beq.n 8037658 <ethernetif_input+0x38>
- uint32_t l=0,i =0;
- FrameTypeDef frame;
- u8 *buffer;
- __IO ETH_DMADESCTypeDef *DMARxNextDesc;
-
- p = NULL;
- 8037654: 2400 movs r4, #0
- 8037656: e016 b.n 8037686 <ethernetif_input+0x66>
- /* Obtain the size of the packet and put it into the "len" variable. */
- len = frame.length;
- buffer = (u8 *)frame.buffer;
- /* We allocate a pbuf chain of pbufs from the pool. */
- p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
- 8037658: 2003 movs r0, #3
- 803765a: f8bd 1004 ldrh.w r1, [sp, #4]
- if ((frame.descriptor->Status & ETH_DMARxDesc_ES) == (uint32_t)RESET)
- {
-
- /* Obtain the size of the packet and put it into the "len" variable. */
- len = frame.length;
- buffer = (u8 *)frame.buffer;
- 803765e: f8dd b008 ldr.w fp, [sp, #8]
- /* We allocate a pbuf chain of pbufs from the pool. */
- p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
- 8037662: 4602 mov r2, r0
- 8037664: f7f8 fc1f bl 802fea6 <pbuf_alloc>
-
- /* Copy received frame from ethernet driver buffer to stack buffer */
- if (p != NULL)
- 8037668: 4604 mov r4, r0
- 803766a: 2800 cmp r0, #0
- 803766c: d0f2 beq.n 8037654 <ethernetif_input+0x34>
- 803766e: 4605 mov r5, r0
- {
- for (q = p; q != NULL; q = q->next)
- {
- memcpy((u8_t*)q->payload, (u8_t*)&buffer[l], q->len);
- 8037670: 6868 ldr r0, [r5, #4]
- 8037672: 896a ldrh r2, [r5, #10]
- 8037674: eb0b 0107 add.w r1, fp, r7
- 8037678: f7ea f988 bl 802198c <memcpy>
- l = l + q->len;
- 803767c: 896b ldrh r3, [r5, #10]
- p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
-
- /* Copy received frame from ethernet driver buffer to stack buffer */
- if (p != NULL)
- {
- for (q = p; q != NULL; q = q->next)
- 803767e: 682d ldr r5, [r5, #0]
- {
- memcpy((u8_t*)q->payload, (u8_t*)&buffer[l], q->len);
- l = l + q->len;
- 8037680: 18ff adds r7, r7, r3
- p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
-
- /* Copy received frame from ethernet driver buffer to stack buffer */
- if (p != NULL)
- {
- for (q = p; q != NULL; q = q->next)
- 8037682: 2d00 cmp r5, #0
- 8037684: d1f4 bne.n 8037670 <ethernetif_input+0x50>
- }
- }
-
- /* Release descriptors to DMA */
- /* Check if received frame with multiple DMA buffer segments */
- if (DMA_RX_FRAME_infos->Seg_Count > 1)
- 8037686: f8da 3000 ldr.w r3, [sl]
- 803768a: 689a ldr r2, [r3, #8]
- 803768c: 2a01 cmp r2, #1
- {
- DMARxNextDesc = DMA_RX_FRAME_infos->FS_Rx_Desc;
- 803768e: bf88 it hi
- 8037690: 681e ldrhi r6, [r3, #0]
- }
-
- /* Set Own bit in Rx descriptors: gives the buffers back to DMA */
- for (i=0; i<DMA_RX_FRAME_infos->Seg_Count; i++)
- {
- DMARxNextDesc->Status = ETH_DMARxDesc_OWN;
- 8037692: f04f 4000 mov.w r0, #2147483648 ; 0x80000000
- uint32_t l=0,i =0;
- FrameTypeDef frame;
- u8 *buffer;
- __IO ETH_DMADESCTypeDef *DMARxNextDesc;
-
- p = NULL;
- 8037696: 2200 movs r2, #0
- 8037698: e002 b.n 80376a0 <ethernetif_input+0x80>
- }
-
- /* Set Own bit in Rx descriptors: gives the buffers back to DMA */
- for (i=0; i<DMA_RX_FRAME_infos->Seg_Count; i++)
- {
- DMARxNextDesc->Status = ETH_DMARxDesc_OWN;
- 803769a: 6030 str r0, [r6, #0]
- DMARxNextDesc = (ETH_DMADESCTypeDef *)(DMARxNextDesc->Buffer2NextDescAddr);
- 803769c: 68f6 ldr r6, [r6, #12]
- {
- DMARxNextDesc = frame.descriptor;
- }
-
- /* Set Own bit in Rx descriptors: gives the buffers back to DMA */
- for (i=0; i<DMA_RX_FRAME_infos->Seg_Count; i++)
- 803769e: 3201 adds r2, #1
- 80376a0: 6899 ldr r1, [r3, #8]
- 80376a2: 428a cmp r2, r1
- 80376a4: d3f9 bcc.n 803769a <ethernetif_input+0x7a>
- DMARxNextDesc->Status = ETH_DMARxDesc_OWN;
- DMARxNextDesc = (ETH_DMADESCTypeDef *)(DMARxNextDesc->Buffer2NextDescAddr);
- }
-
- /* Clear Segment_Count */
- DMA_RX_FRAME_infos->Seg_Count =0;
- 80376a6: 2200 movs r2, #0
- 80376a8: 609a str r2, [r3, #8]
-
-
- /* When Rx Buffer unavailable flag is set: clear it and resume reception */
- if ((ETH->DMASR & ETH_DMASR_RBUS) != (u32)RESET)
- 80376aa: f8d9 3000 ldr.w r3, [r9]
- 80376ae: 061b lsls r3, r3, #24
- 80376b0: d504 bpl.n 80376bc <ethernetif_input+0x9c>
- {
- /* Clear RBUS ETHERNET DMA flag */
- ETH->DMASR = ETH_DMASR_RBUS;
- 80376b2: 2380 movs r3, #128 ; 0x80
- 80376b4: f8c9 3000 str.w r3, [r9]
-
- /* Resume DMA reception */
- ETH->DMARPDR = 0;
- 80376b8: 4b0a ldr r3, [pc, #40] ; (80376e4 <ethernetif_input+0xc4>)
- 80376ba: 601a str r2, [r3, #0]
- {
- if(xSemaphoreTake(s_xSemaphore, emacBLOCK_TIME_WAITING_FOR_INPUT)==pdTRUE)
- {
- GET_NEXT_FRAGMENT:
- p = low_level_input( s_pxNetIf );
- if (p != NULL)
- 80376bc: 2c00 cmp r4, #0
- 80376be: d0b4 beq.n 803762a <ethernetif_input+0xa>
- {
- if (ERR_OK != s_pxNetIf->input( p, s_pxNetIf))
- 80376c0: 4b09 ldr r3, [pc, #36] ; (80376e8 <ethernetif_input+0xc8>)
- 80376c2: 6819 ldr r1, [r3, #0]
- 80376c4: 4620 mov r0, r4
- 80376c6: 690b ldr r3, [r1, #16]
- 80376c8: 4798 blx r3
- 80376ca: 4601 mov r1, r0
- 80376cc: b118 cbz r0, 80376d6 <ethernetif_input+0xb6>
- {
- pbuf_free(p);
- 80376ce: 4620 mov r0, r4
- 80376d0: f7f8 fb9c bl 802fe0c <pbuf_free>
- 80376d4: e7a9 b.n 803762a <ethernetif_input+0xa>
- p=NULL;
- }
- else
- {
- xSemaphoreTake(s_xSemaphore, 0);
- 80376d6: f8d8 0000 ldr.w r0, [r8]
- 80376da: 460a mov r2, r1
- 80376dc: 460b mov r3, r1
- 80376de: f7f3 f882 bl 802a7e6 <xQueueGenericReceive>
- goto GET_NEXT_FRAGMENT;
- 80376e2: e7af b.n 8037644 <ethernetif_input+0x24>
- 80376e4: 40029008 .word 0x40029008
- 80376e8: 2000c7c8 .word 0x2000c7c8
- 80376ec: 2000c7cc .word 0x2000c7cc
- 80376f0: 20011ae0 .word 0x20011ae0
- 80376f4: 40029014 .word 0x40029014
- 080376f8 <low_level_output>:
- * to become availale since the stack doesn't retry to send a packet
- * dropped because of memory failure (except for the TCP timers).
- */
- static err_t low_level_output(struct netif *netif, struct pbuf *p)
- {
- 80376f8: b570 push {r4, r5, r6, lr}
- static SemaphoreHandle_t xTxSemaphore = NULL;
- struct pbuf *q;
- uint32_t l = 0;
- u8 *buffer ;
-
- if (xTxSemaphore == NULL)
- 80376fa: 4e19 ldr r6, [pc, #100] ; (8037760 <low_level_output+0x68>)
- 80376fc: 6835 ldr r5, [r6, #0]
- * to become availale since the stack doesn't retry to send a packet
- * dropped because of memory failure (except for the TCP timers).
- */
- static err_t low_level_output(struct netif *netif, struct pbuf *p)
- {
- 80376fe: 460c mov r4, r1
- static SemaphoreHandle_t xTxSemaphore = NULL;
- struct pbuf *q;
- uint32_t l = 0;
- u8 *buffer ;
-
- if (xTxSemaphore == NULL)
- 8037700: b95d cbnz r5, 803771a <low_level_output+0x22>
- {
- vSemaphoreCreateBinary (xTxSemaphore);
- 8037702: 2001 movs r0, #1
- 8037704: 4629 mov r1, r5
- 8037706: 2203 movs r2, #3
- 8037708: f7f2 fef0 bl 802a4ec <xQueueGenericCreate>
- 803770c: 6030 str r0, [r6, #0]
- 803770e: b120 cbz r0, 803771a <low_level_output+0x22>
- 8037710: 4629 mov r1, r5
- 8037712: 462a mov r2, r5
- 8037714: 462b mov r3, r5
- 8037716: f7f2 ff26 bl 802a566 <xQueueGenericSend>
- }
-
- if (xSemaphoreTake(xTxSemaphore, netifGUARD_BLOCK_TIME))
- 803771a: 4b11 ldr r3, [pc, #68] ; (8037760 <low_level_output+0x68>)
- 803771c: 2100 movs r1, #0
- 803771e: 6818 ldr r0, [r3, #0]
- 8037720: 22fa movs r2, #250 ; 0xfa
- 8037722: 460b mov r3, r1
- 8037724: f7f3 f85f bl 802a7e6 <xQueueGenericReceive>
- 8037728: b1c0 cbz r0, 803775c <low_level_output+0x64>
- {
- buffer = (u8 *)(DMATxDescToSet->Buffer1Addr);
- 803772a: 4b0e ldr r3, [pc, #56] ; (8037764 <low_level_output+0x6c>)
- 803772c: 681b ldr r3, [r3, #0]
- static err_t low_level_output(struct netif *netif, struct pbuf *p)
- {
- static SemaphoreHandle_t xTxSemaphore = NULL;
- struct pbuf *q;
- uint32_t l = 0;
- 803772e: 2500 movs r5, #0
- vSemaphoreCreateBinary (xTxSemaphore);
- }
-
- if (xSemaphoreTake(xTxSemaphore, netifGUARD_BLOCK_TIME))
- {
- buffer = (u8 *)(DMATxDescToSet->Buffer1Addr);
- 8037730: 689e ldr r6, [r3, #8]
- 8037732: e007 b.n 8037744 <low_level_output+0x4c>
- for(q = p; q != NULL; q = q->next)
- {
- memcpy((u8_t*)&buffer[l], q->payload, q->len);
- 8037734: 1970 adds r0, r6, r5
- 8037736: 6861 ldr r1, [r4, #4]
- 8037738: 8962 ldrh r2, [r4, #10]
- 803773a: f7ea f927 bl 802198c <memcpy>
- l = l + q->len;
- 803773e: 8963 ldrh r3, [r4, #10]
- }
-
- if (xSemaphoreTake(xTxSemaphore, netifGUARD_BLOCK_TIME))
- {
- buffer = (u8 *)(DMATxDescToSet->Buffer1Addr);
- for(q = p; q != NULL; q = q->next)
- 8037740: 6824 ldr r4, [r4, #0]
- {
- memcpy((u8_t*)&buffer[l], q->payload, q->len);
- l = l + q->len;
- 8037742: 18ed adds r5, r5, r3
- }
-
- if (xSemaphoreTake(xTxSemaphore, netifGUARD_BLOCK_TIME))
- {
- buffer = (u8 *)(DMATxDescToSet->Buffer1Addr);
- for(q = p; q != NULL; q = q->next)
- 8037744: 2c00 cmp r4, #0
- 8037746: d1f5 bne.n 8037734 <low_level_output+0x3c>
- {
- memcpy((u8_t*)&buffer[l], q->payload, q->len);
- l = l + q->len;
- }
- ETH_Prepare_Transmit_Descriptors(l);
- 8037748: b2a8 uxth r0, r5
- 803774a: f001 fc6d bl 8039028 <ETH_Prepare_Transmit_Descriptors>
- xSemaphoreGive(xTxSemaphore);
- 803774e: 4b04 ldr r3, [pc, #16] ; (8037760 <low_level_output+0x68>)
- 8037750: 4621 mov r1, r4
- 8037752: 6818 ldr r0, [r3, #0]
- 8037754: 4622 mov r2, r4
- 8037756: 4623 mov r3, r4
- 8037758: f7f2 ff05 bl 802a566 <xQueueGenericSend>
- }
- return ERR_OK;
- }
- 803775c: 2000 movs r0, #0
- 803775e: bd70 pop {r4, r5, r6, pc}
- 8037760: 2000c7d0 .word 0x2000c7d0
- 8037764: 2000fc74 .word 0x2000fc74
- 08037768 <ethernetif_init>:
- #if LWIP_NETIF_HOSTNAME
- /* Initialize interface hostname */
- netif->hostname = "lwip";
- #endif /* LWIP_NETIF_HOSTNAME */
- netif->name[0] = IFNAME0;
- 8037768: 2373 movs r3, #115 ; 0x73
- * @return ERR_OK if the loopif is initialized
- * ERR_MEM if private data couldn't be allocated
- * any other err_t on error
- */
- err_t ethernetif_init(struct netif *netif)
- {
- 803776a: b530 push {r4, r5, lr}
- #if LWIP_NETIF_HOSTNAME
- /* Initialize interface hostname */
- netif->hostname = "lwip";
- #endif /* LWIP_NETIF_HOSTNAME */
- netif->name[0] = IFNAME0;
- 803776c: f880 302e strb.w r3, [r0, #46] ; 0x2e
- netif->name[1] = IFNAME1;
- 8037770: 2374 movs r3, #116 ; 0x74
- 8037772: f880 302f strb.w r3, [r0, #47] ; 0x2f
- netif->output = etharp_output;
- 8037776: 4b37 ldr r3, [pc, #220] ; (8037854 <ethernetif_init+0xec>)
- netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP;
-
- s_pxNetIf =netif;
-
- /* create binary semaphore used for informing ethernetif of frame reception */
- if (s_xSemaphore == NULL)
- 8037778: 4d37 ldr r5, [pc, #220] ; (8037858 <ethernetif_init+0xf0>)
- #endif /* LWIP_NETIF_HOSTNAME */
- netif->name[0] = IFNAME0;
- netif->name[1] = IFNAME1;
- netif->output = etharp_output;
- 803777a: 6143 str r3, [r0, #20]
- netif->linkoutput = low_level_output;
- 803777c: 4b37 ldr r3, [pc, #220] ; (803785c <ethernetif_init+0xf4>)
- * @return ERR_OK if the loopif is initialized
- * ERR_MEM if private data couldn't be allocated
- * any other err_t on error
- */
- err_t ethernetif_init(struct netif *netif)
- {
- 803777e: b087 sub sp, #28
- netif->name[0] = IFNAME0;
- netif->name[1] = IFNAME1;
- netif->output = etharp_output;
- netif->linkoutput = low_level_output;
- 8037780: 6183 str r3, [r0, #24]
- {
- uint8_t mac[6];
- uint32_t i;
-
- /* set netif MAC hardware address length */
- netif->hwaddr_len = ETHARP_HWADDR_LEN;
- 8037782: 2306 movs r3, #6
- * @return ERR_OK if the loopif is initialized
- * ERR_MEM if private data couldn't be allocated
- * any other err_t on error
- */
- err_t ethernetif_init(struct netif *netif)
- {
- 8037784: 4604 mov r4, r0
- {
- uint8_t mac[6];
- uint32_t i;
-
- /* set netif MAC hardware address length */
- netif->hwaddr_len = ETHARP_HWADDR_LEN;
- 8037786: f880 3026 strb.w r3, [r0, #38] ; 0x26
-
- /* set netif MAC hardware address */
-
- SETTINGS_GetMac(mac);
- 803778a: a804 add r0, sp, #16
- 803778c: f7f1 f926 bl 80289dc <SETTINGS_GetMac>
- netif->hwaddr[0] = mac[0];
- 8037790: f89d 3010 ldrb.w r3, [sp, #16]
- netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP;
-
- s_pxNetIf =netif;
-
- /* create binary semaphore used for informing ethernetif of frame reception */
- if (s_xSemaphore == NULL)
- 8037794: 6829 ldr r1, [r5, #0]
-
- /* set netif MAC hardware address */
-
- SETTINGS_GetMac(mac);
- netif->hwaddr[0] = mac[0];
- 8037796: f884 3027 strb.w r3, [r4, #39] ; 0x27
- netif->hwaddr[1] = mac[1];
- 803779a: f89d 3011 ldrb.w r3, [sp, #17]
- 803779e: f884 3028 strb.w r3, [r4, #40] ; 0x28
- netif->hwaddr[2] = mac[2];
- 80377a2: f89d 3012 ldrb.w r3, [sp, #18]
- 80377a6: f884 3029 strb.w r3, [r4, #41] ; 0x29
- netif->hwaddr[3] = mac[3];
- 80377aa: f89d 3013 ldrb.w r3, [sp, #19]
- 80377ae: f884 302a strb.w r3, [r4, #42] ; 0x2a
- netif->hwaddr[4] = mac[4];
- 80377b2: f89d 3014 ldrb.w r3, [sp, #20]
- 80377b6: f884 302b strb.w r3, [r4, #43] ; 0x2b
- netif->hwaddr[5] = mac[5];
- 80377ba: f89d 3015 ldrb.w r3, [sp, #21]
- 80377be: f884 302c strb.w r3, [r4, #44] ; 0x2c
- /* set netif maximum transfer unit */
- netif->mtu = 1500;
- 80377c2: f240 53dc movw r3, #1500 ; 0x5dc
- 80377c6: 84a3 strh r3, [r4, #36] ; 0x24
- /* Accept broadcast address and ARP traffic */
- netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP;
- 80377c8: 2322 movs r3, #34 ; 0x22
- 80377ca: f884 302d strb.w r3, [r4, #45] ; 0x2d
-
- s_pxNetIf =netif;
- 80377ce: 4b24 ldr r3, [pc, #144] ; (8037860 <ethernetif_init+0xf8>)
- 80377d0: 601c str r4, [r3, #0]
-
- /* create binary semaphore used for informing ethernetif of frame reception */
- if (s_xSemaphore == NULL)
- 80377d2: b919 cbnz r1, 80377dc <ethernetif_init+0x74>
- {
- s_xSemaphore= xSemaphoreCreateCounting(20,0);
- 80377d4: 2014 movs r0, #20
- 80377d6: f7f2 feb0 bl 802a53a <xQueueCreateCountingSemaphore>
- 80377da: 6028 str r0, [r5, #0]
- }
- /* initialize MAC address in ethernet MAC */
- ETH_MACAddressConfig(ETH_MAC_Address0, netif->hwaddr);
- 80377dc: f104 0127 add.w r1, r4, #39 ; 0x27
- 80377e0: 2000 movs r0, #0
- 80377e2: f001 fbb9 bl 8038f58 <ETH_MACAddressConfig>
-
- /* Initialize Tx Descriptors list: Chain Mode */
- ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB);
- 80377e6: 481f ldr r0, [pc, #124] ; (8037864 <ethernetif_init+0xfc>)
- 80377e8: 491f ldr r1, [pc, #124] ; (8037868 <ethernetif_init+0x100>)
-
- /* Enable Ethernet Rx interrrupt */
- {
- for(i=0; i<ETH_RXBUFNB; i++)
- {
- ETH_DMARxDescReceiveITConfig(&DMARxDscrTab[i], ENABLE);
- 80377ea: 4d20 ldr r5, [pc, #128] ; (803786c <ethernetif_init+0x104>)
- /* initialize MAC address in ethernet MAC */
- ETH_MACAddressConfig(ETH_MAC_Address0, netif->hwaddr);
-
- /* Initialize Tx Descriptors list: Chain Mode */
- ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB);
- 80377ec: 2205 movs r2, #5
- 80377ee: f001 fca1 bl 8039134 <ETH_DMATxDescChainInit>
- /* Initialize Rx Descriptors list: Chain Mode */
- ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);
- 80377f2: 481e ldr r0, [pc, #120] ; (803786c <ethernetif_init+0x104>)
- 80377f4: 491e ldr r1, [pc, #120] ; (8037870 <ethernetif_init+0x108>)
- 80377f6: 2205 movs r2, #5
- 80377f8: f001 fc70 bl 80390dc <ETH_DMARxDescChainInit>
-
- /* Enable Ethernet Rx interrrupt */
- {
- for(i=0; i<ETH_RXBUFNB; i++)
- 80377fc: 2400 movs r4, #0
- {
- ETH_DMARxDescReceiveITConfig(&DMARxDscrTab[i], ENABLE);
- 80377fe: eb05 1044 add.w r0, r5, r4, lsl #5
- 8037802: 2101 movs r1, #1
- /* Initialize Rx Descriptors list: Chain Mode */
- ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);
-
- /* Enable Ethernet Rx interrrupt */
- {
- for(i=0; i<ETH_RXBUFNB; i++)
- 8037804: 3401 adds r4, #1
- {
- ETH_DMARxDescReceiveITConfig(&DMARxDscrTab[i], ENABLE);
- 8037806: f001 fcbb bl 8039180 <ETH_DMARxDescReceiveITConfig>
- /* Initialize Rx Descriptors list: Chain Mode */
- ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);
-
- /* Enable Ethernet Rx interrrupt */
- {
- for(i=0; i<ETH_RXBUFNB; i++)
- 803780a: 2c05 cmp r4, #5
- 803780c: d1f7 bne.n 80377fe <ethernetif_init+0x96>
- #ifdef CHECKSUM_BY_HARDWARE
- /* Enable the checksum insertion for the Tx frames */
- {
- for(i=0; i<ETH_TXBUFNB; i++)
- {
- ETH_DMATxDescChecksumInsertionConfig(&DMATxDscrTab[i], ETH_DMATxDesc_ChecksumTCPUDPICMPFull);
- 803780e: 4d15 ldr r5, [pc, #84] ; (8037864 <ethernetif_init+0xfc>)
- /* Initialize Rx Descriptors list: Chain Mode */
- ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);
-
- /* Enable Ethernet Rx interrrupt */
- {
- for(i=0; i<ETH_RXBUFNB; i++)
- 8037810: 2400 movs r4, #0
- #ifdef CHECKSUM_BY_HARDWARE
- /* Enable the checksum insertion for the Tx frames */
- {
- for(i=0; i<ETH_TXBUFNB; i++)
- {
- ETH_DMATxDescChecksumInsertionConfig(&DMATxDscrTab[i], ETH_DMATxDesc_ChecksumTCPUDPICMPFull);
- 8037812: eb05 1044 add.w r0, r5, r4, lsl #5
- 8037816: f44f 0140 mov.w r1, #12582912 ; 0xc00000
- }
- #ifdef CHECKSUM_BY_HARDWARE
- /* Enable the checksum insertion for the Tx frames */
- {
- for(i=0; i<ETH_TXBUFNB; i++)
- 803781a: 3401 adds r4, #1
- {
- ETH_DMATxDescChecksumInsertionConfig(&DMATxDscrTab[i], ETH_DMATxDesc_ChecksumTCPUDPICMPFull);
- 803781c: f001 fcac bl 8039178 <ETH_DMATxDescChecksumInsertionConfig>
- }
- #ifdef CHECKSUM_BY_HARDWARE
- /* Enable the checksum insertion for the Tx frames */
- {
- for(i=0; i<ETH_TXBUFNB; i++)
- 8037820: 2c05 cmp r4, #5
- 8037822: d1f6 bne.n 8037812 <ethernetif_init+0xaa>
- }
- }
- #endif
-
- /* create the task that handles the ETH_MAC */
- xTaskCreate(ethernetif_input, "Eth_if", netifINTERFACE_TASK_STACK_SIZE, NULL,
- 8037824: 2400 movs r4, #0
- 8037826: 2304 movs r3, #4
- 8037828: 2296 movs r2, #150 ; 0x96
- 803782a: e88d 0018 stmia.w sp, {r3, r4}
- 803782e: 4911 ldr r1, [pc, #68] ; (8037874 <ethernetif_init+0x10c>)
- 8037830: 9402 str r4, [sp, #8]
- 8037832: 4623 mov r3, r4
- 8037834: 9403 str r4, [sp, #12]
- 8037836: 4810 ldr r0, [pc, #64] ; (8037878 <ethernetif_init+0x110>)
- 8037838: f7f3 f92e bl 802aa98 <xTaskGenericCreate>
- netifINTERFACE_TASK_PRIORITY,NULL);
-
- /* Enable MAC and DMA transmission and reception */
- ETH_Start();
- 803783c: f001 fcf6 bl 803922c <ETH_Start>
- /* initialize the hardware */
- low_level_init(netif);
-
- etharp_init();
- sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL);
- 8037840: f241 3088 movw r0, #5000 ; 0x1388
- 8037844: 490d ldr r1, [pc, #52] ; (803787c <ethernetif_init+0x114>)
- 8037846: 4622 mov r2, r4
- 8037848: f7fa fe88 bl 803255c <sys_timeout>
- return ERR_OK;
- }
- 803784c: 4620 mov r0, r4
- 803784e: b007 add sp, #28
- 8037850: bd30 pop {r4, r5, pc}
- 8037852: bf00 nop
- 8037854: 0803730d .word 0x0803730d
- 8037858: 2000c7cc .word 0x2000c7cc
- 803785c: 080376f9 .word 0x080376f9
- 8037860: 2000c7c8 .word 0x2000c7c8
- 8037864: 2000fc78 .word 0x2000fc78
- 8037868: 20011b84 .word 0x20011b84
- 803786c: 20011ae4 .word 0x20011ae4
- 8037870: 2000fd18 .word 0x2000fd18
- 8037874: 08045943 .word 0x08045943
- 8037878: 08037621 .word 0x08037621
- 803787c: 08037605 .word 0x08037605
- 08037880 <sys_mbox_new>:
- * int size -- Size of elements in the mailbox
- * Outputs:
- * sys_mbox_t -- Handle to new mailbox
- *---------------------------------------------------------------------------*/
- err_t sys_mbox_new( sys_mbox_t *pxMailBox, int iSize )
- {
- 8037880: b510 push {r4, lr}
- err_t xReturn = ERR_MEM;
- *pxMailBox = xQueueCreate( iSize, sizeof( void * ) );
- 8037882: 2200 movs r2, #0
- * int size -- Size of elements in the mailbox
- * Outputs:
- * sys_mbox_t -- Handle to new mailbox
- *---------------------------------------------------------------------------*/
- err_t sys_mbox_new( sys_mbox_t *pxMailBox, int iSize )
- {
- 8037884: 4604 mov r4, r0
- err_t xReturn = ERR_MEM;
- *pxMailBox = xQueueCreate( iSize, sizeof( void * ) );
- 8037886: 4608 mov r0, r1
- 8037888: 2104 movs r1, #4
- 803788a: f7f2 fe2f bl 802a4ec <xQueueGenericCreate>
- 803788e: 6020 str r0, [r4, #0]
- xReturn = ERR_OK;
- SYS_STATS_INC_USED( mbox );
- }
- return xReturn;
- }
- 8037890: 2800 cmp r0, #0
- 8037892: bf14 ite ne
- 8037894: 2000 movne r0, #0
- 8037896: f06f 0000 mvneq.w r0, #0
- 803789a: bd10 pop {r4, pc}
- 0803789c <sys_mbox_free>:
- * sys_mbox_t mbox -- Handle of mailbox
- * Outputs:
- * sys_mbox_t -- Handle to new mailbox
- *---------------------------------------------------------------------------*/
- void sys_mbox_free( sys_mbox_t *pxMailBox )
- {
- 803789c: b510 push {r4, lr}
- 803789e: 4604 mov r4, r0
- unsigned long ulMessagesWaiting;
- ulMessagesWaiting = uxQueueMessagesWaiting( *pxMailBox );
- 80378a0: 6800 ldr r0, [r0, #0]
- 80378a2: f7f3 f87c bl 802a99e <uxQueueMessagesWaiting>
- configASSERT( ( ulMessagesWaiting == 0 ) );
- 80378a6: b110 cbz r0, 80378ae <sys_mbox_free+0x12>
- 80378a8: f7f3 ff9e bl 802b7e8 <ulPortSetInterruptMask>
- 80378ac: e7fe b.n 80378ac <sys_mbox_free+0x10>
- SYS_STATS_DEC( mbox.used );
- }
- #endif /* SYS_STATS */
- vQueueDelete( *pxMailBox );
- 80378ae: 6820 ldr r0, [r4, #0]
- }
- 80378b0: e8bd 4010 ldmia.w sp!, {r4, lr}
- SYS_STATS_DEC( mbox.used );
- }
- #endif /* SYS_STATS */
- vQueueDelete( *pxMailBox );
- 80378b4: f7f3 b88f b.w 802a9d6 <vQueueDelete>
- 080378b8 <sys_mbox_post>:
- * Inputs:
- * sys_mbox_t mbox -- Handle of mailbox
- * void *data -- Pointer to data to post
- *---------------------------------------------------------------------------*/
- void sys_mbox_post( sys_mbox_t *pxMailBox, void *pxMessageToPost )
- {
- 80378b8: b537 push {r0, r1, r2, r4, r5, lr}
- 80378ba: ac02 add r4, sp, #8
- 80378bc: 4605 mov r5, r0
- 80378be: f844 1d04 str.w r1, [r4, #-4]!
- while( xQueueSendToBack( *pxMailBox, &pxMessageToPost, portMAX_DELAY ) != pdTRUE );
- 80378c2: 2300 movs r3, #0
- 80378c4: 6828 ldr r0, [r5, #0]
- 80378c6: 4621 mov r1, r4
- 80378c8: f04f 32ff mov.w r2, #4294967295
- 80378cc: f7f2 fe4b bl 802a566 <xQueueGenericSend>
- 80378d0: 2801 cmp r0, #1
- 80378d2: d1f6 bne.n 80378c2 <sys_mbox_post+0xa>
- }
- 80378d4: bd3e pop {r1, r2, r3, r4, r5, pc}
- 80378d6: 0000 movs r0, r0
- 080378d8 <sys_mbox_trypost>:
- * Outputs:
- * err_t -- ERR_OK if message posted, else ERR_MEM
- * if not.
- *---------------------------------------------------------------------------*/
- err_t sys_mbox_trypost( sys_mbox_t *pxMailBox, void *pxMessageToPost )
- {
- 80378d8: b51f push {r0, r1, r2, r3, r4, lr}
- err_t xReturn;
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- if( xInsideISR != pdFALSE )
- 80378da: 4a0b ldr r2, [pc, #44] ; (8037908 <sys_mbox_trypost+0x30>)
- * Outputs:
- * err_t -- ERR_OK if message posted, else ERR_MEM
- * if not.
- *---------------------------------------------------------------------------*/
- err_t sys_mbox_trypost( sys_mbox_t *pxMailBox, void *pxMessageToPost )
- {
- 80378dc: 9101 str r1, [sp, #4]
- err_t xReturn;
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- if( xInsideISR != pdFALSE )
- 80378de: 6812 ldr r2, [r2, #0]
- {
- xReturn = xQueueSendFromISR( *pxMailBox, &pxMessageToPost, &xHigherPriorityTaskWoken );
- 80378e0: 6800 ldr r0, [r0, #0]
- * if not.
- *---------------------------------------------------------------------------*/
- err_t sys_mbox_trypost( sys_mbox_t *pxMailBox, void *pxMessageToPost )
- {
- err_t xReturn;
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- 80378e2: 2300 movs r3, #0
- 80378e4: 9303 str r3, [sp, #12]
- if( xInsideISR != pdFALSE )
- {
- xReturn = xQueueSendFromISR( *pxMailBox, &pxMessageToPost, &xHigherPriorityTaskWoken );
- 80378e6: a901 add r1, sp, #4
- err_t sys_mbox_trypost( sys_mbox_t *pxMailBox, void *pxMessageToPost )
- {
- err_t xReturn;
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- if( xInsideISR != pdFALSE )
- 80378e8: b11a cbz r2, 80378f2 <sys_mbox_trypost+0x1a>
- {
- xReturn = xQueueSendFromISR( *pxMailBox, &pxMessageToPost, &xHigherPriorityTaskWoken );
- 80378ea: aa03 add r2, sp, #12
- 80378ec: f7f2 feff bl 802a6ee <xQueueGenericSendFromISR>
- 80378f0: e002 b.n 80378f8 <sys_mbox_trypost+0x20>
- }
- else
- {
- xReturn = xQueueSend( *pxMailBox, &pxMessageToPost, ( TickType_t ) 0 );
- 80378f2: 4613 mov r3, r2
- 80378f4: f7f2 fe37 bl 802a566 <xQueueGenericSend>
- 80378f8: b2c0 uxtb r0, r0
- xReturn = ERR_MEM;
- SYS_STATS_INC( mbox.err );
- }
- return xReturn;
- }
- 80378fa: 3801 subs r0, #1
- 80378fc: bf18 it ne
- 80378fe: f06f 0000 mvnne.w r0, #0
- 8037902: b005 add sp, #20
- 8037904: bd00 pop {pc}
- 8037906: bf00 nop
- 8037908: 2000c7d4 .word 0x2000c7d4
- 0803790c <sys_arch_mbox_fetch>:
- * Outputs:
- * u32_t -- SYS_ARCH_TIMEOUT if timeout, else number
- * of milliseconds until received.
- *---------------------------------------------------------------------------*/
- u32_t sys_arch_mbox_fetch( sys_mbox_t *pxMailBox, void **ppvBuffer, u32_t ulTimeOut )
- {
- 803790c: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr}
- 8037910: 4607 mov r7, r0
- 8037912: 460c mov r4, r1
- 8037914: 4690 mov r8, r2
- void *pvDummy;
- TickType_t xStartTime, xEndTime, xElapsed;
- unsigned long ulReturn;
- xStartTime = xTaskGetTickCount();
- 8037916: f7f3 fa27 bl 802ad68 <xTaskGetTickCount>
- 803791a: 4605 mov r5, r0
- if( NULL == ppvBuffer )
- 803791c: b904 cbnz r4, 8037920 <sys_arch_mbox_fetch+0x14>
- {
- ppvBuffer = &pvDummy;
- 803791e: ac01 add r4, sp, #4
- }
- if( ulTimeOut != 0UL )
- 8037920: f1b8 0f00 cmp.w r8, #0
- 8037924: d015 beq.n 8037952 <sys_arch_mbox_fetch+0x46>
- {
- configASSERT( xInsideISR == ( portBASE_TYPE ) 0 );
- 8037926: 4b13 ldr r3, [pc, #76] ; (8037974 <sys_arch_mbox_fetch+0x68>)
- 8037928: 681e ldr r6, [r3, #0]
- 803792a: b116 cbz r6, 8037932 <sys_arch_mbox_fetch+0x26>
- 803792c: f7f3 ff5c bl 802b7e8 <ulPortSetInterruptMask>
- 8037930: e7fe b.n 8037930 <sys_arch_mbox_fetch+0x24>
- if( pdTRUE == xQueueReceive( *pxMailBox, &( *ppvBuffer ), ulTimeOut/ portTICK_PERIOD_MS ) )
- 8037932: 6838 ldr r0, [r7, #0]
- 8037934: 4621 mov r1, r4
- 8037936: 4642 mov r2, r8
- 8037938: 4633 mov r3, r6
- 803793a: f7f2 ff54 bl 802a7e6 <xQueueGenericReceive>
- 803793e: 2801 cmp r0, #1
- 8037940: d103 bne.n 803794a <sys_arch_mbox_fetch+0x3e>
- {
- xEndTime = xTaskGetTickCount();
- 8037942: f7f3 fa11 bl 802ad68 <xTaskGetTickCount>
- xElapsed = ( xEndTime - xStartTime ) * portTICK_PERIOD_MS;
- 8037946: 1b40 subs r0, r0, r5
- 8037948: e011 b.n 803796e <sys_arch_mbox_fetch+0x62>
- ulReturn = xElapsed;
- }
- else
- {
- /* Timed out. */
- *ppvBuffer = NULL;
- 803794a: 6026 str r6, [r4, #0]
- ulReturn = SYS_ARCH_TIMEOUT;
- 803794c: f04f 30ff mov.w r0, #4294967295
- 8037950: e00d b.n 803796e <sys_arch_mbox_fetch+0x62>
- }
- }
- else
- {
- while( pdTRUE != xQueueReceive( *pxMailBox, &( *ppvBuffer ), portMAX_DELAY ) );
- 8037952: 2300 movs r3, #0
- 8037954: 6838 ldr r0, [r7, #0]
- 8037956: 4621 mov r1, r4
- 8037958: f04f 32ff mov.w r2, #4294967295
- 803795c: f7f2 ff43 bl 802a7e6 <xQueueGenericReceive>
- 8037960: 2801 cmp r0, #1
- 8037962: d1f6 bne.n 8037952 <sys_arch_mbox_fetch+0x46>
- xEndTime = xTaskGetTickCount();
- 8037964: f7f3 fa00 bl 802ad68 <xTaskGetTickCount>
- xElapsed = ( xEndTime - xStartTime ) * portTICK_PERIOD_MS;
- if( xElapsed == 0UL )
- 8037968: 1b40 subs r0, r0, r5
- 803796a: bf08 it eq
- 803796c: 2001 moveq r0, #1
- ulReturn = xElapsed;
- }
- return ulReturn;
- }
- 803796e: e8bd 81fc ldmia.w sp!, {r2, r3, r4, r5, r6, r7, r8, pc}
- 8037972: bf00 nop
- 8037974: 2000c7d4 .word 0x2000c7d4
- 08037978 <sys_arch_mbox_tryfetch>:
- * Outputs:
- * u32_t -- SYS_MBOX_EMPTY if no messages. Otherwise,
- * return ERR_OK.
- *---------------------------------------------------------------------------*/
- u32_t sys_arch_mbox_tryfetch( sys_mbox_t *pxMailBox, void **ppvBuffer )
- {
- 8037978: b507 push {r0, r1, r2, lr}
- void *pvDummy;
- unsigned long ulReturn;
- long lResult;
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- 803797a: 2300 movs r3, #0
- 803797c: 9301 str r3, [sp, #4]
- if( ppvBuffer== NULL )
- 803797e: b901 cbnz r1, 8037982 <sys_arch_mbox_tryfetch+0xa>
- {
- ppvBuffer = &pvDummy;
- 8037980: 4669 mov r1, sp
- }
- if( xInsideISR != pdFALSE )
- 8037982: 4b08 ldr r3, [pc, #32] ; (80379a4 <sys_arch_mbox_tryfetch+0x2c>)
- {
- lResult = xQueueReceiveFromISR( *pxMailBox, &( *ppvBuffer ), &xHigherPriorityTaskWoken );
- 8037984: 6800 ldr r0, [r0, #0]
- if( ppvBuffer== NULL )
- {
- ppvBuffer = &pvDummy;
- }
- if( xInsideISR != pdFALSE )
- 8037986: 681a ldr r2, [r3, #0]
- 8037988: b11a cbz r2, 8037992 <sys_arch_mbox_tryfetch+0x1a>
- {
- lResult = xQueueReceiveFromISR( *pxMailBox, &( *ppvBuffer ), &xHigherPriorityTaskWoken );
- 803798a: aa01 add r2, sp, #4
- 803798c: f7f2 ffce bl 802a92c <xQueueReceiveFromISR>
- 8037990: e002 b.n 8037998 <sys_arch_mbox_tryfetch+0x20>
- }
- else
- {
- lResult = xQueueReceive( *pxMailBox, &( *ppvBuffer ), 0UL );
- 8037992: 4613 mov r3, r2
- 8037994: f7f2 ff27 bl 802a7e6 <xQueueGenericReceive>
- {
- ulReturn = SYS_MBOX_EMPTY;
- }
- return ulReturn;
- }
- 8037998: 2801 cmp r0, #1
- 803799a: bf14 ite ne
- 803799c: f04f 30ff movne.w r0, #4294967295
- 80379a0: 2000 moveq r0, #0
- 80379a2: bd0e pop {r1, r2, r3, pc}
- 80379a4: 2000c7d4 .word 0x2000c7d4
- 080379a8 <sys_sem_new>:
- * u8_t ucCount -- Initial ucCount of semaphore (1 or 0)
- * Outputs:
- * sys_sem_t -- Created semaphore or 0 if could not create.
- *---------------------------------------------------------------------------*/
- err_t sys_sem_new( sys_sem_t *pxSemaphore, u8_t ucCount )
- {
- 80379a8: b538 push {r3, r4, r5, lr}
- err_t xReturn = ERR_MEM;
- vSemaphoreCreateBinary( ( *pxSemaphore ) );
- 80379aa: 2203 movs r2, #3
- * u8_t ucCount -- Initial ucCount of semaphore (1 or 0)
- * Outputs:
- * sys_sem_t -- Created semaphore or 0 if could not create.
- *---------------------------------------------------------------------------*/
- err_t sys_sem_new( sys_sem_t *pxSemaphore, u8_t ucCount )
- {
- 80379ac: 4605 mov r5, r0
- 80379ae: 460c mov r4, r1
- err_t xReturn = ERR_MEM;
- vSemaphoreCreateBinary( ( *pxSemaphore ) );
- 80379b0: 2001 movs r0, #1
- 80379b2: 2100 movs r1, #0
- 80379b4: f7f2 fd9a bl 802a4ec <xQueueGenericCreate>
- 80379b8: 6028 str r0, [r5, #0]
- 80379ba: b120 cbz r0, 80379c6 <sys_sem_new+0x1e>
- 80379bc: 2100 movs r1, #0
- 80379be: 460a mov r2, r1
- 80379c0: 460b mov r3, r1
- 80379c2: f7f2 fdd0 bl 802a566 <xQueueGenericSend>
- if( *pxSemaphore != NULL )
- 80379c6: 6828 ldr r0, [r5, #0]
- 80379c8: b130 cbz r0, 80379d8 <sys_sem_new+0x30>
- {
- if( ucCount == 0U )
- 80379ca: b93c cbnz r4, 80379dc <sys_sem_new+0x34>
- {
- xSemaphoreTake( *pxSemaphore, 1UL );
- 80379cc: 4621 mov r1, r4
- 80379ce: 2201 movs r2, #1
- 80379d0: 4623 mov r3, r4
- 80379d2: f7f2 ff08 bl 802a7e6 <xQueueGenericReceive>
- 80379d6: e001 b.n 80379dc <sys_sem_new+0x34>
- * Outputs:
- * sys_sem_t -- Created semaphore or 0 if could not create.
- *---------------------------------------------------------------------------*/
- err_t sys_sem_new( sys_sem_t *pxSemaphore, u8_t ucCount )
- {
- err_t xReturn = ERR_MEM;
- 80379d8: 20ff movs r0, #255 ; 0xff
- 80379da: e000 b.n 80379de <sys_sem_new+0x36>
- if( ucCount == 0U )
- {
- xSemaphoreTake( *pxSemaphore, 1UL );
- }
- xReturn = ERR_OK;
- 80379dc: 2000 movs r0, #0
- {
- SYS_STATS_INC( sem.err );
- }
- return xReturn;
- }
- 80379de: b240 sxtb r0, r0
- 80379e0: bd38 pop {r3, r4, r5, pc}
- 080379e2 <sys_arch_sem_wait>:
- * u32_t timeout -- Number of milliseconds until timeout
- * Outputs:
- * u32_t -- Time elapsed or SYS_ARCH_TIMEOUT.
- *---------------------------------------------------------------------------*/
- u32_t sys_arch_sem_wait( sys_sem_t *pxSemaphore, u32_t ulTimeout )
- {
- 80379e2: b570 push {r4, r5, r6, lr}
- 80379e4: 4605 mov r5, r0
- 80379e6: 460e mov r6, r1
- TickType_t xStartTime, xEndTime, xElapsed;
- unsigned long ulReturn;
- xStartTime = xTaskGetTickCount();
- 80379e8: f7f3 f9be bl 802ad68 <xTaskGetTickCount>
- 80379ec: 4604 mov r4, r0
- if( ulTimeout != 0UL )
- 80379ee: b15e cbz r6, 8037a08 <sys_arch_sem_wait+0x26>
- {
- if( xSemaphoreTake( *pxSemaphore, ulTimeout / portTICK_PERIOD_MS ) == pdTRUE )
- 80379f0: 2100 movs r1, #0
- 80379f2: 6828 ldr r0, [r5, #0]
- 80379f4: 4632 mov r2, r6
- 80379f6: 460b mov r3, r1
- 80379f8: f7f2 fef5 bl 802a7e6 <xQueueGenericReceive>
- 80379fc: 2801 cmp r0, #1
- 80379fe: d112 bne.n 8037a26 <sys_arch_sem_wait+0x44>
- {
- xEndTime = xTaskGetTickCount();
- 8037a00: f7f3 f9b2 bl 802ad68 <xTaskGetTickCount>
- xElapsed = (xEndTime - xStartTime) * portTICK_PERIOD_MS;
- 8037a04: 1b00 subs r0, r0, r4
- 8037a06: bd70 pop {r4, r5, r6, pc}
- ulReturn = SYS_ARCH_TIMEOUT;
- }
- }
- else
- {
- while( xSemaphoreTake( *pxSemaphore, portMAX_DELAY ) != pdTRUE );
- 8037a08: 2100 movs r1, #0
- 8037a0a: 6828 ldr r0, [r5, #0]
- 8037a0c: f04f 32ff mov.w r2, #4294967295
- 8037a10: 460b mov r3, r1
- 8037a12: f7f2 fee8 bl 802a7e6 <xQueueGenericReceive>
- 8037a16: 2801 cmp r0, #1
- 8037a18: d1f6 bne.n 8037a08 <sys_arch_sem_wait+0x26>
- xEndTime = xTaskGetTickCount();
- 8037a1a: f7f3 f9a5 bl 802ad68 <xTaskGetTickCount>
- xElapsed = ( xEndTime - xStartTime ) * portTICK_PERIOD_MS;
- if( xElapsed == 0UL )
- 8037a1e: 1b00 subs r0, r0, r4
- 8037a20: bf08 it eq
- 8037a22: 2001 moveq r0, #1
- 8037a24: bd70 pop {r4, r5, r6, pc}
- xElapsed = (xEndTime - xStartTime) * portTICK_PERIOD_MS;
- ulReturn = xElapsed;
- }
- else
- {
- ulReturn = SYS_ARCH_TIMEOUT;
- 8037a26: f04f 30ff mov.w r0, #4294967295
- ulReturn = xElapsed;
- }
- return ulReturn;
- }
- 8037a2a: bd70 pop {r4, r5, r6, pc}
- 08037a2c <sys_mutex_new>:
- /** Create a new mutex
- * @param mutex pointer to the mutex to create
- * @return a new mutex */
- err_t sys_mutex_new( sys_mutex_t *pxMutex )
- {
- 8037a2c: b510 push {r4, lr}
- 8037a2e: 4604 mov r4, r0
- err_t xReturn = ERR_MEM;
- *pxMutex = xSemaphoreCreateMutex();
- 8037a30: 2001 movs r0, #1
- 8037a32: f7f2 fe32 bl 802a69a <xQueueCreateMutex>
- 8037a36: 6020 str r0, [r4, #0]
- {
- SYS_STATS_INC( mutex.err );
- }
- return xReturn;
- }
- 8037a38: 2800 cmp r0, #0
- 8037a3a: bf14 ite ne
- 8037a3c: 2000 movne r0, #0
- 8037a3e: f06f 0000 mvneq.w r0, #0
- 8037a42: bd10 pop {r4, pc}
- 08037a44 <sys_mutex_lock>:
- /** Lock a mutex
- * @param mutex the mutex to lock */
- void sys_mutex_lock( sys_mutex_t *pxMutex )
- {
- 8037a44: b510 push {r4, lr}
- 8037a46: 4604 mov r4, r0
- while( xSemaphoreTake( *pxMutex, portMAX_DELAY ) != pdPASS );
- 8037a48: 2100 movs r1, #0
- 8037a4a: 6820 ldr r0, [r4, #0]
- 8037a4c: f04f 32ff mov.w r2, #4294967295
- 8037a50: 460b mov r3, r1
- 8037a52: f7f2 fec8 bl 802a7e6 <xQueueGenericReceive>
- 8037a56: 2801 cmp r0, #1
- 8037a58: d1f6 bne.n 8037a48 <sys_mutex_lock+0x4>
- }
- 8037a5a: bd10 pop {r4, pc}
- 08037a5c <sys_mutex_unlock>:
- /** Unlock a mutex
- * @param mutex the mutex to unlock */
- void sys_mutex_unlock(sys_mutex_t *pxMutex )
- {
- xSemaphoreGive( *pxMutex );
- 8037a5c: 2100 movs r1, #0
- 8037a5e: 6800 ldr r0, [r0, #0]
- 8037a60: 460a mov r2, r1
- 8037a62: 460b mov r3, r1
- 8037a64: f7f2 bd7f b.w 802a566 <xQueueGenericSend>
- 08037a68 <sys_sem_signal>:
- * Signals (releases) a semaphore
- * Inputs:
- * sys_sem_t sem -- Semaphore to signal
- *---------------------------------------------------------------------------*/
- void sys_sem_signal( sys_sem_t *pxSemaphore )
- {
- 8037a68: b507 push {r0, r1, r2, lr}
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- 8037a6a: 2300 movs r3, #0
- 8037a6c: 9301 str r3, [sp, #4]
- if( xInsideISR != pdFALSE )
- 8037a6e: 4b06 ldr r3, [pc, #24] ; (8037a88 <sys_sem_signal+0x20>)
- {
- xSemaphoreGiveFromISR( *pxSemaphore, &xHigherPriorityTaskWoken );
- 8037a70: 6800 ldr r0, [r0, #0]
- *---------------------------------------------------------------------------*/
- void sys_sem_signal( sys_sem_t *pxSemaphore )
- {
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- if( xInsideISR != pdFALSE )
- 8037a72: 6819 ldr r1, [r3, #0]
- 8037a74: b119 cbz r1, 8037a7e <sys_sem_signal+0x16>
- {
- xSemaphoreGiveFromISR( *pxSemaphore, &xHigherPriorityTaskWoken );
- 8037a76: a901 add r1, sp, #4
- 8037a78: f7f2 fe83 bl 802a782 <xQueueGiveFromISR>
- 8037a7c: e003 b.n 8037a86 <sys_sem_signal+0x1e>
- }
- else
- {
- xSemaphoreGive( *pxSemaphore );
- 8037a7e: 460a mov r2, r1
- 8037a80: 460b mov r3, r1
- 8037a82: f7f2 fd70 bl 802a566 <xQueueGenericSend>
- }
- }
- 8037a86: bd0e pop {r1, r2, r3, pc}
- 8037a88: 2000c7d4 .word 0x2000c7d4
- 08037a8c <sys_sem_free>:
- * sys_sem_t sem -- Semaphore to free
- *---------------------------------------------------------------------------*/
- void sys_sem_free( sys_sem_t *pxSemaphore )
- {
- SYS_STATS_DEC(sem.used);
- vQueueDelete( *pxSemaphore );
- 8037a8c: 6800 ldr r0, [r0, #0]
- 8037a8e: f7f2 bfa2 b.w 802a9d6 <vQueueDelete>
- 08037a92 <sys_init>:
- *---------------------------------------------------------------------------*
- * Description:
- * Initialize sys arch
- *---------------------------------------------------------------------------*/
- void sys_init(void)
- {
- 8037a92: 4770 bx lr
- 08037a94 <sys_now>:
- }
- u32_t sys_now(void)
- {
- return xTaskGetTickCount();
- 8037a94: f7f3 b968 b.w 802ad68 <xTaskGetTickCount>
- 08037a98 <sys_thread_new>:
- * int prio -- Thread priority
- * Outputs:
- * sys_thread_t -- Pointer to per-thread timeouts.
- *---------------------------------------------------------------------------*/
- sys_thread_t sys_thread_new( const char *pcName, void( *pxThread )( void *pvParameters ), void *pvArg, int iStackSize, int iPriority )
- {
- 8037a98: b570 push {r4, r5, r6, lr}
- 8037a9a: b086 sub sp, #24
- 8037a9c: 4606 mov r6, r0
- TaskHandle_t xCreatedTask;
- portBASE_TYPE xResult;
- sys_thread_t xReturn;
- xResult = xTaskCreate( pxThread, pcName, iStackSize, pvArg, iPriority, &xCreatedTask );
- 8037a9e: 9c0a ldr r4, [sp, #40] ; 0x28
- * int prio -- Thread priority
- * Outputs:
- * sys_thread_t -- Pointer to per-thread timeouts.
- *---------------------------------------------------------------------------*/
- sys_thread_t sys_thread_new( const char *pcName, void( *pxThread )( void *pvParameters ), void *pvArg, int iStackSize, int iPriority )
- {
- 8037aa0: 4615 mov r5, r2
- TaskHandle_t xCreatedTask;
- portBASE_TYPE xResult;
- sys_thread_t xReturn;
- xResult = xTaskCreate( pxThread, pcName, iStackSize, pvArg, iPriority, &xCreatedTask );
- 8037aa2: 9400 str r4, [sp, #0]
- 8037aa4: aa05 add r2, sp, #20
- 8037aa6: 2400 movs r4, #0
- 8037aa8: 9201 str r2, [sp, #4]
- 8037aaa: 9402 str r4, [sp, #8]
- 8037aac: b29a uxth r2, r3
- 8037aae: 9403 str r4, [sp, #12]
- 8037ab0: 4608 mov r0, r1
- 8037ab2: 462b mov r3, r5
- 8037ab4: 4631 mov r1, r6
- 8037ab6: f7f2 ffef bl 802aa98 <xTaskGenericCreate>
- if( xResult == pdPASS )
- 8037aba: 2801 cmp r0, #1
- {
- xReturn = xCreatedTask;
- 8037abc: bf0c ite eq
- 8037abe: 9805 ldreq r0, [sp, #20]
- }
- else
- {
- xReturn = NULL;
- 8037ac0: 4620 movne r0, r4
- }
- return xReturn;
- }
- 8037ac2: b006 add sp, #24
- 8037ac4: bd70 pop {r4, r5, r6, pc}
- 8037ac6: 0000 movs r0, r0
- 08037ac8 <sys_arch_protect>:
- * operating system.
- * Outputs:
- * sys_prot_t -- Previous protection level (not used here)
- *---------------------------------------------------------------------------*/
- sys_prot_t sys_arch_protect( void )
- {
- 8037ac8: b508 push {r3, lr}
- if( xInsideISR == pdFALSE )
- 8037aca: 4b03 ldr r3, [pc, #12] ; (8037ad8 <sys_arch_protect+0x10>)
- 8037acc: 681b ldr r3, [r3, #0]
- 8037ace: b90b cbnz r3, 8037ad4 <sys_arch_protect+0xc>
- {
- taskENTER_CRITICAL();
- 8037ad0: f7f3 fe92 bl 802b7f8 <vPortEnterCritical>
- }
- return ( sys_prot_t ) 1;
- }
- 8037ad4: 2001 movs r0, #1
- 8037ad6: bd08 pop {r3, pc}
- 8037ad8: 2000c7d4 .word 0x2000c7d4
- 08037adc <sys_arch_unprotect>:
- * sys_prot_t -- Previous protection level (not used here)
- *---------------------------------------------------------------------------*/
- void sys_arch_unprotect( sys_prot_t xValue )
- {
- (void) xValue;
- if( xInsideISR == pdFALSE )
- 8037adc: 4b02 ldr r3, [pc, #8] ; (8037ae8 <sys_arch_unprotect+0xc>)
- 8037ade: 681b ldr r3, [r3, #0]
- 8037ae0: b90b cbnz r3, 8037ae6 <sys_arch_unprotect+0xa>
- {
- taskEXIT_CRITICAL();
- 8037ae2: f7f3 beb5 b.w 802b850 <vPortExitCritical>
- 8037ae6: 4770 bx lr
- 8037ae8: 2000c7d4 .word 0x2000c7d4
- 08037aec <vTaskWebReinit>:
- * Если флаг не устанавливается в положенное время, то сбрасывается
- * флаг sSettings.sFlags.netsettingsChanged, сохраняется вся структура
- * настроек в памяти и контроллер перезагружается.
- */
- void vTaskWebReinit(void * pvParameters)
- {
- 8037aec: b538 push {r3, r4, r5, lr}
- static uint16_t timeCounter = 0;
-
- for (;;)
- {
- /* Контроль времени работы задачи */
- if (timeCounter++ > TIME_COUNTER_10_MIN)
- 8037aee: 4c1b ldr r4, [pc, #108] ; (8037b5c <vTaskWebReinit+0x70>)
- if (fConfirmWebParams)
- {
- fConfirmWebParams = false;
-
- /* Сохраняем временные сетевые настройки в постоянные */
- sSettings.sWebParams.dhcpEnable = sSettings.sWebTempParams.dhcpEnable;
- 8037af0: 4d1b ldr r5, [pc, #108] ; (8037b60 <vTaskWebReinit+0x74>)
- static uint16_t timeCounter = 0;
-
- for (;;)
- {
- /* Контроль времени работы задачи */
- if (timeCounter++ > TIME_COUNTER_10_MIN)
- 8037af2: 8823 ldrh r3, [r4, #0]
- 8037af4: 1c5a adds r2, r3, #1
- 8037af6: f5b3 7f16 cmp.w r3, #600 ; 0x258
- 8037afa: 8022 strh r2, [r4, #0]
- 8037afc: d90a bls.n 8037b14 <vTaskWebReinit+0x28>
- {
- SetWebReinitFlag(false);
- 8037afe: 2000 movs r0, #0
- 8037b00: f7f0 fb16 bl 8028130 <SetWebReinitFlag>
- HTTP_SaveSettings();
- 8037b04: f7f6 f95a bl 802ddbc <HTTP_SaveSettings>
- vTaskDelay(1010);
- 8037b08: f240 30f2 movw r0, #1010 ; 0x3f2
- 8037b0c: f7f3 fa5e bl 802afcc <vTaskDelay>
- Reboot();
- 8037b10: f7f1 faf8 bl 8029104 <Reboot>
- }
-
- if (fConfirmWebParams)
- 8037b14: 4b13 ldr r3, [pc, #76] ; (8037b64 <vTaskWebReinit+0x78>)
- 8037b16: 781a ldrb r2, [r3, #0]
- 8037b18: b1d2 cbz r2, 8037b50 <vTaskWebReinit+0x64>
- {
- fConfirmWebParams = false;
- 8037b1a: 2200 movs r2, #0
-
- /* Сохраняем временные сетевые настройки в постоянные */
- sSettings.sWebParams.dhcpEnable = sSettings.sWebTempParams.dhcpEnable;
- strcpy(sSettings.sWebParams.ip, sSettings.sWebTempParams.ip);
- 8037b1c: 4812 ldr r0, [pc, #72] ; (8037b68 <vTaskWebReinit+0x7c>)
- Reboot();
- }
-
- if (fConfirmWebParams)
- {
- fConfirmWebParams = false;
- 8037b1e: 701a strb r2, [r3, #0]
-
- /* Сохраняем временные сетевые настройки в постоянные */
- sSettings.sWebParams.dhcpEnable = sSettings.sWebTempParams.dhcpEnable;
- 8037b20: f895 3063 ldrb.w r3, [r5, #99] ; 0x63
- strcpy(sSettings.sWebParams.ip, sSettings.sWebTempParams.ip);
- 8037b24: f100 0131 add.w r1, r0, #49 ; 0x31
- if (fConfirmWebParams)
- {
- fConfirmWebParams = false;
-
- /* Сохраняем временные сетевые настройки в постоянные */
- sSettings.sWebParams.dhcpEnable = sSettings.sWebTempParams.dhcpEnable;
- 8037b28: f885 3032 strb.w r3, [r5, #50] ; 0x32
- strcpy(sSettings.sWebParams.ip, sSettings.sWebTempParams.ip);
- 8037b2c: f7ea f962 bl 8021df4 <strcpy>
- strcpy(sSettings.sWebParams.gate, sSettings.sWebTempParams.gate);
- 8037b30: 480e ldr r0, [pc, #56] ; (8037b6c <vTaskWebReinit+0x80>)
- 8037b32: f100 0131 add.w r1, r0, #49 ; 0x31
- 8037b36: f7ea f95d bl 8021df4 <strcpy>
- strcpy(sSettings.sWebParams.mask, sSettings.sWebTempParams.mask);
- 8037b3a: 480d ldr r0, [pc, #52] ; (8037b70 <vTaskWebReinit+0x84>)
- 8037b3c: f100 0131 add.w r1, r0, #49 ; 0x31
- 8037b40: f7ea f958 bl 8021df4 <strcpy>
-
- HTTP_SaveSettings();
- 8037b44: f7f6 f93a bl 802ddbc <HTTP_SaveSettings>
-
- vTaskDelete(xHandleWebReinit);
- 8037b48: 4b0a ldr r3, [pc, #40] ; (8037b74 <vTaskWebReinit+0x88>)
- 8037b4a: 6818 ldr r0, [r3, #0]
- 8037b4c: f7f3 f87c bl 802ac48 <vTaskDelete>
- }
-
- vTaskDelay(1000);
- 8037b50: f44f 707a mov.w r0, #1000 ; 0x3e8
- 8037b54: f7f3 fa3a bl 802afcc <vTaskDelay>
- }
- 8037b58: e7cb b.n 8037af2 <vTaskWebReinit+0x6>
- 8037b5a: bf00 nop
- 8037b5c: 2000c7e4 .word 0x2000c7e4
- 8037b60: 2000cfc4 .word 0x2000cfc4
- 8037b64: 20000b18 .word 0x20000b18
- 8037b68: 2000cfc6 .word 0x2000cfc6
- 8037b6c: 2000cfd6 .word 0x2000cfd6
- 8037b70: 2000cfe6 .word 0x2000cfe6
- 8037b74: 2000c7dc .word 0x2000c7dc
- 08037b78 <LwIP_DHCP_task>:
- * @brief LwIP_DHCP_Process_Handle
- * @param None
- * @retval None
- */
- void LwIP_DHCP_task(void * pvParameters)
- {
- 8037b78: b530 push {r4, r5, lr}
- DHCP_state = DHCP_TIMEOUT;
- /* Stop DHCP */
- dhcp_stop(&xnetif);
-
- if (sSettings.sFlags.netsettingsChanged == true)
- 8037b7a: 4d48 ldr r5, [pc, #288] ; (8037c9c <LwIP_DHCP_task+0x124>)
- * @brief LwIP_DHCP_Process_Handle
- * @param None
- * @retval None
- */
- void LwIP_DHCP_task(void * pvParameters)
- {
- 8037b7c: b085 sub sp, #20
- struct ip_addr ipaddr;
- struct ip_addr netmask;
- struct ip_addr gw;
- uint8_t DHCP_state;
- DHCP_state = DHCP_START;
- 8037b7e: 2400 movs r4, #0
- for (;;)
- {
- switch (DHCP_state)
- 8037b80: b11c cbz r4, 8037b8a <LwIP_DHCP_task+0x12>
- 8037b82: 2c01 cmp r4, #1
- 8037b84: f040 8085 bne.w 8037c92 <LwIP_DHCP_task+0x11a>
- 8037b88: e004 b.n 8037b94 <LwIP_DHCP_task+0x1c>
- {
- case DHCP_START:
- {
- dhcp_start(&xnetif);
- 8037b8a: 4845 ldr r0, [pc, #276] ; (8037ca0 <LwIP_DHCP_task+0x128>)
- 8037b8c: f7f7 fe42 bl 802f814 <dhcp_start>
- DHCP_state = DHCP_WAIT_ADDRESS;
- 8037b90: 2401 movs r4, #1
- //PRINT_USART("\n\rLooking for DHCP server please wait...\n\r");
- }
- break;
- 8037b92: e07e b.n 8037c92 <LwIP_DHCP_task+0x11a>
- case DHCP_WAIT_ADDRESS:
- {
- /* Read the new IP address */
- ipaddr = xnetif.ip_addr;
- 8037b94: 4842 ldr r0, [pc, #264] ; (8037ca0 <LwIP_DHCP_task+0x128>)
- netmask = xnetif.netmask;
- 8037b96: 6882 ldr r2, [r0, #8]
- break;
- case DHCP_WAIT_ADDRESS:
- {
- /* Read the new IP address */
- ipaddr = xnetif.ip_addr;
- 8037b98: 6843 ldr r3, [r0, #4]
- netmask = xnetif.netmask;
- 8037b9a: 9202 str r2, [sp, #8]
- gw = xnetif.gw;
- 8037b9c: 68c2 ldr r2, [r0, #12]
- break;
- case DHCP_WAIT_ADDRESS:
- {
- /* Read the new IP address */
- ipaddr = xnetif.ip_addr;
- 8037b9e: 9301 str r3, [sp, #4]
- netmask = xnetif.netmask;
- gw = xnetif.gw;
- 8037ba0: 9203 str r2, [sp, #12]
-
- if (ipaddr.addr != 0)
- 8037ba2: 2b00 cmp r3, #0
- 8037ba4: d045 beq.n 8037c32 <LwIP_DHCP_task+0xba>
- {
- DHCP_state = DHCP_ADDRESS_ASSIGNED;
- dhcp_stop(&xnetif);
- 8037ba6: f7f7 fe1d bl 802f7e4 <dhcp_stop>
-
- /* Сохранение полученных сетевый параметров */
- /* Если настройки изменили, то сохраняем во временные настройки */
- if (sSettings.sFlags.netsettingsChanged == true)
- 8037baa: f895 3120 ldrb.w r3, [r5, #288] ; 0x120
- {
- sprintf(sSettings.sWebTempParams.ip, "%s", ipaddr_ntoa(&ipaddr));
- 8037bae: a801 add r0, sp, #4
- DHCP_state = DHCP_ADDRESS_ASSIGNED;
- dhcp_stop(&xnetif);
-
- /* Сохранение полученных сетевый параметров */
- /* Если настройки изменили, то сохраняем во временные настройки */
- if (sSettings.sFlags.netsettingsChanged == true)
- 8037bb0: b103 cbz r3, 8037bb4 <LwIP_DHCP_task+0x3c>
- 8037bb2: e01b b.n 8037bec <LwIP_DHCP_task+0x74>
- sprintf(sSettings.sWebTempParams.mask, "%s", ipaddr_ntoa(&netmask));
- sprintf(sSettings.sWebTempParams.gate, "%s", ipaddr_ntoa(&gw));
- }
- else
- {
- sprintf(sSettings.sWebParams.ip, "%s", ipaddr_ntoa(&ipaddr));
- 8037bb4: f7fb f9d0 bl 8032f58 <ipaddr_ntoa>
- 8037bb8: 493a ldr r1, [pc, #232] ; (8037ca4 <LwIP_DHCP_task+0x12c>)
- 8037bba: 4602 mov r2, r0
- 8037bbc: 483a ldr r0, [pc, #232] ; (8037ca8 <LwIP_DHCP_task+0x130>)
- 8037bbe: f7ef fe29 bl 8027814 <tfp_sprintf>
- sprintf(sSettings.sWebParams.mask, "%s", ipaddr_ntoa(&netmask));
- 8037bc2: a802 add r0, sp, #8
- 8037bc4: f7fb f9c8 bl 8032f58 <ipaddr_ntoa>
- 8037bc8: 4936 ldr r1, [pc, #216] ; (8037ca4 <LwIP_DHCP_task+0x12c>)
- 8037bca: 4602 mov r2, r0
- 8037bcc: 4837 ldr r0, [pc, #220] ; (8037cac <LwIP_DHCP_task+0x134>)
- 8037bce: f7ef fe21 bl 8027814 <tfp_sprintf>
- sprintf(sSettings.sWebParams.gate, "%s", ipaddr_ntoa(&gw));
- 8037bd2: a803 add r0, sp, #12
- 8037bd4: f7fb f9c0 bl 8032f58 <ipaddr_ntoa>
- 8037bd8: 4932 ldr r1, [pc, #200] ; (8037ca4 <LwIP_DHCP_task+0x12c>)
- 8037bda: 4602 mov r2, r0
- 8037bdc: 4834 ldr r0, [pc, #208] ; (8037cb0 <LwIP_DHCP_task+0x138>)
- 8037bde: f7ef fe19 bl 8027814 <tfp_sprintf>
-
- /* Обновляем временные настройки */
- sSettings.sWebTempParams.dhcpEnable = sSettings.sWebParams.dhcpEnable;
- 8037be2: f895 3032 ldrb.w r3, [r5, #50] ; 0x32
- sprintf(sSettings.sWebTempParams.ip, "%s", ipaddr_ntoa(&ipaddr));
- 8037be6: a801 add r0, sp, #4
- sprintf(sSettings.sWebParams.ip, "%s", ipaddr_ntoa(&ipaddr));
- sprintf(sSettings.sWebParams.mask, "%s", ipaddr_ntoa(&netmask));
- sprintf(sSettings.sWebParams.gate, "%s", ipaddr_ntoa(&gw));
-
- /* Обновляем временные настройки */
- sSettings.sWebTempParams.dhcpEnable = sSettings.sWebParams.dhcpEnable;
- 8037be8: f885 3063 strb.w r3, [r5, #99] ; 0x63
- sprintf(sSettings.sWebTempParams.ip, "%s", ipaddr_ntoa(&ipaddr));
- 8037bec: f7fb f9b4 bl 8032f58 <ipaddr_ntoa>
- 8037bf0: 492c ldr r1, [pc, #176] ; (8037ca4 <LwIP_DHCP_task+0x12c>)
- 8037bf2: 4602 mov r2, r0
- 8037bf4: 482f ldr r0, [pc, #188] ; (8037cb4 <LwIP_DHCP_task+0x13c>)
- 8037bf6: f7ef fe0d bl 8027814 <tfp_sprintf>
- sprintf(sSettings.sWebTempParams.mask, "%s", ipaddr_ntoa(&netmask));
- 8037bfa: a802 add r0, sp, #8
- 8037bfc: f7fb f9ac bl 8032f58 <ipaddr_ntoa>
- 8037c00: 4928 ldr r1, [pc, #160] ; (8037ca4 <LwIP_DHCP_task+0x12c>)
- 8037c02: 4602 mov r2, r0
- 8037c04: 482c ldr r0, [pc, #176] ; (8037cb8 <LwIP_DHCP_task+0x140>)
- 8037c06: f7ef fe05 bl 8027814 <tfp_sprintf>
- sprintf(sSettings.sWebTempParams.gate, "%s", ipaddr_ntoa(&gw));
- 8037c0a: a803 add r0, sp, #12
- 8037c0c: f7fb f9a4 bl 8032f58 <ipaddr_ntoa>
- 8037c10: 4924 ldr r1, [pc, #144] ; (8037ca4 <LwIP_DHCP_task+0x12c>)
- 8037c12: 4602 mov r2, r0
- 8037c14: 4829 ldr r0, [pc, #164] ; (8037cbc <LwIP_DHCP_task+0x144>)
- 8037c16: f7ef fdfd bl 8027814 <tfp_sprintf>
-
- PRINT_USART("Gateway: ");
- PRINT_USART(ipaddr_ntoa(&gw));
- PRINT_USART("\n\r");
-
- vTaskDelay(50);
- 8037c1a: 2032 movs r0, #50 ; 0x32
- 8037c1c: f7f3 f9d6 bl 802afcc <vTaskDelay>
- /* Установлен динамический IP, можно отправить трап о перезагрузке устройства */
- SNMP_SendUserTrap(DEVICE_REBOOTED);
- 8037c20: 2004 movs r0, #4
- 8037c22: f000 fa8b bl 803813c <SNMP_SendUserTrap>
-
- vTaskDelete(xHandleDHCP);
- 8037c26: 4b26 ldr r3, [pc, #152] ; (8037cc0 <LwIP_DHCP_task+0x148>)
- 8037c28: 6818 ldr r0, [r3, #0]
- 8037c2a: f7f3 f80d bl 802ac48 <vTaskDelete>
- netmask = xnetif.netmask;
- gw = xnetif.gw;
-
- if (ipaddr.addr != 0)
- {
- DHCP_state = DHCP_ADDRESS_ASSIGNED;
- 8037c2e: 2402 movs r4, #2
- 8037c30: e02f b.n 8037c92 <LwIP_DHCP_task+0x11a>
- vTaskDelete(xHandleDHCP);
- }
- else
- {
- /* DHCP timeout */
- if (xnetif.dhcp->tries > MAX_DHCP_TRIES)
- 8037c32: 6a03 ldr r3, [r0, #32]
- 8037c34: 7b5b ldrb r3, [r3, #13]
- 8037c36: 2b03 cmp r3, #3
- 8037c38: d92b bls.n 8037c92 <LwIP_DHCP_task+0x11a>
- {
- DHCP_state = DHCP_TIMEOUT;
- /* Stop DHCP */
- dhcp_stop(&xnetif);
- 8037c3a: f7f7 fdd3 bl 802f7e4 <dhcp_stop>
-
- if (sSettings.sFlags.netsettingsChanged == true)
- 8037c3e: f895 3120 ldrb.w r3, [r5, #288] ; 0x120
- 8037c42: b14b cbz r3, 8037c58 <LwIP_DHCP_task+0xe0>
- {
- ipaddr.addr = ipaddr_addr(sSettings.sWebTempParams.ip);
- 8037c44: 481b ldr r0, [pc, #108] ; (8037cb4 <LwIP_DHCP_task+0x13c>)
- 8037c46: f7fb f934 bl 8032eb2 <ipaddr_addr>
- 8037c4a: 9001 str r0, [sp, #4]
- netmask.addr = ipaddr_addr(sSettings.sWebTempParams.mask);
- 8037c4c: 481a ldr r0, [pc, #104] ; (8037cb8 <LwIP_DHCP_task+0x140>)
- 8037c4e: f7fb f930 bl 8032eb2 <ipaddr_addr>
- 8037c52: 9002 str r0, [sp, #8]
- gw.addr = ipaddr_addr(sSettings.sWebTempParams.gate);
- 8037c54: 4819 ldr r0, [pc, #100] ; (8037cbc <LwIP_DHCP_task+0x144>)
- 8037c56: e008 b.n 8037c6a <LwIP_DHCP_task+0xf2>
- }
- else
- {
- ipaddr.addr = ipaddr_addr(sSettings.sWebParams.ip);
- 8037c58: 4813 ldr r0, [pc, #76] ; (8037ca8 <LwIP_DHCP_task+0x130>)
- 8037c5a: f7fb f92a bl 8032eb2 <ipaddr_addr>
- 8037c5e: 9001 str r0, [sp, #4]
- netmask.addr = ipaddr_addr(sSettings.sWebParams.mask);
- 8037c60: 4812 ldr r0, [pc, #72] ; (8037cac <LwIP_DHCP_task+0x134>)
- 8037c62: f7fb f926 bl 8032eb2 <ipaddr_addr>
- 8037c66: 9002 str r0, [sp, #8]
- gw.addr = ipaddr_addr(sSettings.sWebParams.gate);
- 8037c68: 4811 ldr r0, [pc, #68] ; (8037cb0 <LwIP_DHCP_task+0x138>)
- 8037c6a: f7fb f922 bl 8032eb2 <ipaddr_addr>
- }
-
- /* Static address used */
- netif_set_addr(&xnetif, &ipaddr , &netmask, &gw);
- 8037c6e: a901 add r1, sp, #4
- 8037c70: aa02 add r2, sp, #8
- 8037c72: ab03 add r3, sp, #12
- }
- else
- {
- ipaddr.addr = ipaddr_addr(sSettings.sWebParams.ip);
- netmask.addr = ipaddr_addr(sSettings.sWebParams.mask);
- gw.addr = ipaddr_addr(sSettings.sWebParams.gate);
- 8037c74: 9003 str r0, [sp, #12]
- }
-
- /* Static address used */
- netif_set_addr(&xnetif, &ipaddr , &netmask, &gw);
- 8037c76: 480a ldr r0, [pc, #40] ; (8037ca0 <LwIP_DHCP_task+0x128>)
- 8037c78: f7f8 f824 bl 802fcc4 <netif_set_addr>
- PRINT_USART("DHCP timeout\n\r");
- PRINT_USART("\n\rStatic IP address\n\r");
- PRINT_USART(ipaddr_ntoa(&ipaddr));
- PRINT_USART("\n\r");
- vTaskDelay(50);
- 8037c7c: 2032 movs r0, #50 ; 0x32
- 8037c7e: f7f3 f9a5 bl 802afcc <vTaskDelay>
- /* Установлен статический IP, можно отправить трап о перезагрузке устройства */
- SNMP_SendUserTrap(DEVICE_REBOOTED);
- 8037c82: 2004 movs r0, #4
- 8037c84: f000 fa5a bl 803813c <SNMP_SendUserTrap>
-
- vTaskDelete(xHandleDHCP);
- 8037c88: 4b0d ldr r3, [pc, #52] ; (8037cc0 <LwIP_DHCP_task+0x148>)
- 8037c8a: 6818 ldr r0, [r3, #0]
- 8037c8c: f7f2 ffdc bl 802ac48 <vTaskDelete>
- else
- {
- /* DHCP timeout */
- if (xnetif.dhcp->tries > MAX_DHCP_TRIES)
- {
- DHCP_state = DHCP_TIMEOUT;
- 8037c90: 2403 movs r4, #3
- break;
- default: break;
- }
- vTaskDelay(250);
- 8037c92: 20fa movs r0, #250 ; 0xfa
- 8037c94: f7f3 f99a bl 802afcc <vTaskDelay>
- }
- 8037c98: e772 b.n 8037b80 <LwIP_DHCP_task+0x8>
- 8037c9a: bf00 nop
- 8037c9c: 2000cfc4 .word 0x2000cfc4
- 8037ca0: 2000f86c .word 0x2000f86c
- 8037ca4: 080399bb .word 0x080399bb
- 8037ca8: 2000cfc6 .word 0x2000cfc6
- 8037cac: 2000cfe6 .word 0x2000cfe6
- 8037cb0: 2000cfd6 .word 0x2000cfd6
- 8037cb4: 2000cff7 .word 0x2000cff7
- 8037cb8: 2000d017 .word 0x2000d017
- 8037cbc: 2000d007 .word 0x2000d007
- 8037cc0: 2000c7e0 .word 0x2000c7e0
- 08037cc4 <LwIP_Init>:
- TaskHandle_t xHandleWebReinit = NULL;
- bool dhcp = false;
- void LwIP_Init(void)
- {
- 8037cc4: b530 push {r4, r5, lr}
- struct ip_addr ipaddr;
- struct ip_addr netmask;
- struct ip_addr gw;
- char str[20];
- tcpip_init( NULL, NULL );
- 8037cc6: 2000 movs r0, #0
- /* Если настройки изменили, то используем временные параметры */
- if (sSettings.sFlags.netsettingsChanged == true)
- 8037cc8: 4c50 ldr r4, [pc, #320] ; (8037e0c <LwIP_Init+0x148>)
- TaskHandle_t xHandleWebReinit = NULL;
- bool dhcp = false;
- void LwIP_Init(void)
- {
- 8037cca: b08d sub sp, #52 ; 0x34
- struct ip_addr ipaddr;
- struct ip_addr netmask;
- struct ip_addr gw;
- char str[20];
- tcpip_init( NULL, NULL );
- 8037ccc: 4601 mov r1, r0
- 8037cce: f7f6 ff3d bl 802eb4c <tcpip_init>
- /* Если настройки изменили, то используем временные параметры */
- if (sSettings.sFlags.netsettingsChanged == true)
- 8037cd2: f894 3120 ldrb.w r3, [r4, #288] ; 0x120
- 8037cd6: 2b00 cmp r3, #0
- 8037cd8: d032 beq.n 8037d40 <LwIP_Init+0x7c>
- {
- if (sSettings.sWebTempParams.dhcpEnable)
- 8037cda: f894 5063 ldrb.w r5, [r4, #99] ; 0x63
- 8037cde: b12d cbz r5, 8037cec <LwIP_Init+0x28>
- {
- ipaddr.addr = 0;
- 8037ce0: 2300 movs r3, #0
- 8037ce2: 9304 str r3, [sp, #16]
- netmask.addr = 0;
- 8037ce4: 9305 str r3, [sp, #20]
- gw.addr = 0;
- 8037ce6: 9306 str r3, [sp, #24]
-
- netif_add(&xnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
- 8037ce8: 9300 str r3, [sp, #0]
- 8037cea: e015 b.n 8037d18 <LwIP_Init+0x54>
- netif_set_default(&xnetif);
- netif_set_up(&xnetif);
- }
- else
- {
- ipaddr.addr = ipaddr_addr(sSettings.sWebTempParams.ip);
- 8037cec: f104 0033 add.w r0, r4, #51 ; 0x33
- 8037cf0: f7fb f8df bl 8032eb2 <ipaddr_addr>
- 8037cf4: 9004 str r0, [sp, #16]
- netmask.addr = ipaddr_addr(sSettings.sWebTempParams.mask);
- 8037cf6: f104 0053 add.w r0, r4, #83 ; 0x53
- 8037cfa: f7fb f8da bl 8032eb2 <ipaddr_addr>
- 8037cfe: 9005 str r0, [sp, #20]
- gw.addr = ipaddr_addr(sSettings.sWebTempParams.gate);
- 8037d00: f104 0043 add.w r0, r4, #67 ; 0x43
- 8037d04: f7fb f8d5 bl 8032eb2 <ipaddr_addr>
-
- sprintf(str, " %s\n\r", sSettings.sWebTempParams.ip);
- 8037d08: 4941 ldr r1, [pc, #260] ; (8037e10 <LwIP_Init+0x14c>)
- }
- else
- {
- ipaddr.addr = ipaddr_addr(sSettings.sWebTempParams.ip);
- netmask.addr = ipaddr_addr(sSettings.sWebTempParams.mask);
- gw.addr = ipaddr_addr(sSettings.sWebTempParams.gate);
- 8037d0a: 9006 str r0, [sp, #24]
-
- sprintf(str, " %s\n\r", sSettings.sWebTempParams.ip);
- 8037d0c: f104 0233 add.w r2, r4, #51 ; 0x33
- 8037d10: a807 add r0, sp, #28
- 8037d12: f7ef fd7f bl 8027814 <tfp_sprintf>
- PRINT_USART("\n\rStatic IP address \n\r");
- PRINT_USART(str);
- netif_add(&xnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
- 8037d16: 9500 str r5, [sp, #0]
- 8037d18: 4b3e ldr r3, [pc, #248] ; (8037e14 <LwIP_Init+0x150>)
- 8037d1a: 483f ldr r0, [pc, #252] ; (8037e18 <LwIP_Init+0x154>)
- 8037d1c: 9301 str r3, [sp, #4]
- 8037d1e: 4b3f ldr r3, [pc, #252] ; (8037e1c <LwIP_Init+0x158>)
- 8037d20: a904 add r1, sp, #16
- 8037d22: aa05 add r2, sp, #20
- 8037d24: 9302 str r3, [sp, #8]
- 8037d26: ab06 add r3, sp, #24
- 8037d28: f7f7 ffda bl 802fce0 <netif_add>
- netif_set_default(&xnetif);
- 8037d2c: 483a ldr r0, [pc, #232] ; (8037e18 <LwIP_Init+0x154>)
- 8037d2e: f7f7 ffff bl 802fd30 <netif_set_default>
- netif_set_up(&xnetif);
- 8037d32: 4839 ldr r0, [pc, #228] ; (8037e18 <LwIP_Init+0x154>)
- 8037d34: f7f8 f80c bl 802fd50 <netif_set_up>
- }
-
- if (sSettings.sWebTempParams.dhcpEnable) {
- 8037d38: 4b34 ldr r3, [pc, #208] ; (8037e0c <LwIP_Init+0x148>)
- 8037d3a: f893 3063 ldrb.w r3, [r3, #99] ; 0x63
- 8037d3e: e043 b.n 8037dc8 <LwIP_Init+0x104>
- }
- }
- /* Настройки не менялись, используем обычне настройки из флеш памяти */
- else
- {
- if (sSettings.sWebParams.dhcpEnable)
- 8037d40: f894 5032 ldrb.w r5, [r4, #50] ; 0x32
- 8037d44: b125 cbz r5, 8037d50 <LwIP_Init+0x8c>
- {
- ipaddr.addr = 0;
- 8037d46: 9304 str r3, [sp, #16]
- netmask.addr = 0;
- 8037d48: 9305 str r3, [sp, #20]
- gw.addr = 0;
- 8037d4a: 9306 str r3, [sp, #24]
-
- netif_add(&xnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
- 8037d4c: 9300 str r3, [sp, #0]
- 8037d4e: e028 b.n 8037da2 <LwIP_Init+0xde>
- netif_set_default(&xnetif);
- netif_set_up(&xnetif);
- }
- else
- {
- ipaddr.addr = ipaddr_addr(sSettings.sWebParams.ip);
- 8037d50: 1ca0 adds r0, r4, #2
- 8037d52: f7fb f8ae bl 8032eb2 <ipaddr_addr>
- 8037d56: 9004 str r0, [sp, #16]
- netmask.addr = ipaddr_addr(sSettings.sWebParams.mask);
- 8037d58: f104 0022 add.w r0, r4, #34 ; 0x22
- 8037d5c: f7fb f8a9 bl 8032eb2 <ipaddr_addr>
- 8037d60: 9005 str r0, [sp, #20]
- gw.addr = ipaddr_addr(sSettings.sWebParams.gate);
- 8037d62: f104 0012 add.w r0, r4, #18
- 8037d66: f7fb f8a4 bl 8032eb2 <ipaddr_addr>
-
- /* Обновляем временные настройки */
- sSettings.sWebTempParams.dhcpEnable = sSettings.sWebParams.dhcpEnable;
- 8037d6a: f894 3032 ldrb.w r3, [r4, #50] ; 0x32
- }
- else
- {
- ipaddr.addr = ipaddr_addr(sSettings.sWebParams.ip);
- netmask.addr = ipaddr_addr(sSettings.sWebParams.mask);
- gw.addr = ipaddr_addr(sSettings.sWebParams.gate);
- 8037d6e: 9006 str r0, [sp, #24]
-
- /* Обновляем временные настройки */
- sSettings.sWebTempParams.dhcpEnable = sSettings.sWebParams.dhcpEnable;
- strcpy(sSettings.sWebTempParams.ip, sSettings.sWebParams.ip);
- 8037d70: 1ca1 adds r1, r4, #2
- 8037d72: f104 0033 add.w r0, r4, #51 ; 0x33
- ipaddr.addr = ipaddr_addr(sSettings.sWebParams.ip);
- netmask.addr = ipaddr_addr(sSettings.sWebParams.mask);
- gw.addr = ipaddr_addr(sSettings.sWebParams.gate);
-
- /* Обновляем временные настройки */
- sSettings.sWebTempParams.dhcpEnable = sSettings.sWebParams.dhcpEnable;
- 8037d76: f884 3063 strb.w r3, [r4, #99] ; 0x63
- strcpy(sSettings.sWebTempParams.ip, sSettings.sWebParams.ip);
- 8037d7a: f7ea f83b bl 8021df4 <strcpy>
- strcpy(sSettings.sWebTempParams.mask, sSettings.sWebParams.mask);
- 8037d7e: f104 0122 add.w r1, r4, #34 ; 0x22
- 8037d82: f104 0053 add.w r0, r4, #83 ; 0x53
- 8037d86: f7ea f835 bl 8021df4 <strcpy>
- strcpy(sSettings.sWebTempParams.gate, sSettings.sWebParams.gate);
- 8037d8a: f104 0112 add.w r1, r4, #18
- 8037d8e: f104 0043 add.w r0, r4, #67 ; 0x43
- 8037d92: f7ea f82f bl 8021df4 <strcpy>
-
- sprintf(str, " %s\n\r", sSettings.sWebParams.ip);
- 8037d96: a807 add r0, sp, #28
- 8037d98: 491d ldr r1, [pc, #116] ; (8037e10 <LwIP_Init+0x14c>)
- 8037d9a: 1ca2 adds r2, r4, #2
- 8037d9c: f7ef fd3a bl 8027814 <tfp_sprintf>
- PRINT_USART("\n\rStatic IP address \n\r");
- PRINT_USART(str);
- netif_add(&xnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
- 8037da0: 9500 str r5, [sp, #0]
- 8037da2: 4b1c ldr r3, [pc, #112] ; (8037e14 <LwIP_Init+0x150>)
- 8037da4: 481c ldr r0, [pc, #112] ; (8037e18 <LwIP_Init+0x154>)
- 8037da6: 9301 str r3, [sp, #4]
- 8037da8: 4b1c ldr r3, [pc, #112] ; (8037e1c <LwIP_Init+0x158>)
- 8037daa: a904 add r1, sp, #16
- 8037dac: aa05 add r2, sp, #20
- 8037dae: 9302 str r3, [sp, #8]
- 8037db0: ab06 add r3, sp, #24
- 8037db2: f7f7 ff95 bl 802fce0 <netif_add>
- netif_set_default(&xnetif);
- 8037db6: 4818 ldr r0, [pc, #96] ; (8037e18 <LwIP_Init+0x154>)
- 8037db8: f7f7 ffba bl 802fd30 <netif_set_default>
- netif_set_up(&xnetif);
- 8037dbc: 4816 ldr r0, [pc, #88] ; (8037e18 <LwIP_Init+0x154>)
- 8037dbe: f7f7 ffc7 bl 802fd50 <netif_set_up>
- }
-
- if (sSettings.sWebParams.dhcpEnable) {
- 8037dc2: 4b12 ldr r3, [pc, #72] ; (8037e0c <LwIP_Init+0x148>)
- 8037dc4: f893 3032 ldrb.w r3, [r3, #50] ; 0x32
- 8037dc8: b17b cbz r3, 8037dea <LwIP_Init+0x126>
- xTaskCreate(LwIP_DHCP_task, "DHCPClient", configMINIMAL_STACK_SIZE * 2, NULL,
- 8037dca: 2302 movs r3, #2
- 8037dcc: 9300 str r3, [sp, #0]
- 8037dce: 4b14 ldr r3, [pc, #80] ; (8037e20 <LwIP_Init+0x15c>)
- 8037dd0: 4814 ldr r0, [pc, #80] ; (8037e24 <LwIP_Init+0x160>)
- 8037dd2: 9301 str r3, [sp, #4]
- 8037dd4: 2300 movs r3, #0
- 8037dd6: 9302 str r3, [sp, #8]
- 8037dd8: 9303 str r3, [sp, #12]
- 8037dda: f44f 7280 mov.w r2, #256 ; 0x100
- 8037dde: 4912 ldr r1, [pc, #72] ; (8037e28 <LwIP_Init+0x164>)
- 8037de0: f7f2 fe5a bl 802aa98 <xTaskGenericCreate>
- tskIDLE_PRIORITY + 2, &xHandleDHCP);
- dhcp = true;
- 8037de4: 4b11 ldr r3, [pc, #68] ; (8037e2c <LwIP_Init+0x168>)
- 8037de6: 2201 movs r2, #1
- 8037de8: 701a strb r2, [r3, #0]
- }
- }
-
- /* Если настройки изменились, запускаем задачу по отсчету времени реакции пользователя*/
- if (sSettings.sFlags.netsettingsChanged == true)
- 8037dea: 4b08 ldr r3, [pc, #32] ; (8037e0c <LwIP_Init+0x148>)
- 8037dec: f893 3120 ldrb.w r3, [r3, #288] ; 0x120
- 8037df0: b153 cbz r3, 8037e08 <LwIP_Init+0x144>
- xTaskCreate(vTaskWebReinit, "webReinit", configMINIMAL_STACK_SIZE, NULL,
- 8037df2: 4a0f ldr r2, [pc, #60] ; (8037e30 <LwIP_Init+0x16c>)
- 8037df4: 480f ldr r0, [pc, #60] ; (8037e34 <LwIP_Init+0x170>)
- 8037df6: 9201 str r2, [sp, #4]
- 8037df8: 2300 movs r3, #0
- 8037dfa: 9300 str r3, [sp, #0]
- 8037dfc: 9302 str r3, [sp, #8]
- 8037dfe: 9303 str r3, [sp, #12]
- 8037e00: 490d ldr r1, [pc, #52] ; (8037e38 <LwIP_Init+0x174>)
- 8037e02: 2280 movs r2, #128 ; 0x80
- 8037e04: f7f2 fe48 bl 802aa98 <xTaskGenericCreate>
- tskIDLE_PRIORITY, &xHandleWebReinit);
- }
- 8037e08: b00d add sp, #52 ; 0x34
- 8037e0a: bd30 pop {r4, r5, pc}
- 8037e0c: 2000cfc4 .word 0x2000cfc4
- 8037e10: 0804594a .word 0x0804594a
- 8037e14: 08037769 .word 0x08037769
- 8037e18: 2000f86c .word 0x2000f86c
- 8037e1c: 0802ead9 .word 0x0802ead9
- 8037e20: 2000c7e0 .word 0x2000c7e0
- 8037e24: 08037b79 .word 0x08037b79
- 8037e28: 08045950 .word 0x08045950
- 8037e2c: 2000c7d8 .word 0x2000c7d8
- 8037e30: 2000c7dc .word 0x2000c7dc
- 8037e34: 08037aed .word 0x08037aed
- 8037e38: 0804595b .word 0x0804595b
- 08037e3c <SaveWEBparam>:
- vTaskDelay(1000);
- }
- }
- void SaveWEBparam(void)
- {
- 8037e3c: b510 push {r4, lr}
- sSettings.sWebParams.dhcpEnable = sSettings.sWebTempParams.dhcpEnable;
- 8037e3e: 4c0c ldr r4, [pc, #48] ; (8037e70 <SaveWEBparam+0x34>)
- 8037e40: f894 3063 ldrb.w r3, [r4, #99] ; 0x63
- strcpy(sSettings.sWebParams.ip, sSettings.sWebTempParams.ip);
- 8037e44: f104 0133 add.w r1, r4, #51 ; 0x33
- 8037e48: 1ca0 adds r0, r4, #2
- }
- }
- void SaveWEBparam(void)
- {
- sSettings.sWebParams.dhcpEnable = sSettings.sWebTempParams.dhcpEnable;
- 8037e4a: f884 3032 strb.w r3, [r4, #50] ; 0x32
- strcpy(sSettings.sWebParams.ip, sSettings.sWebTempParams.ip);
- 8037e4e: f7e9 ffd1 bl 8021df4 <strcpy>
- strcpy(sSettings.sWebParams.gate, sSettings.sWebTempParams.gate);
- 8037e52: f104 0143 add.w r1, r4, #67 ; 0x43
- 8037e56: f104 0012 add.w r0, r4, #18
- 8037e5a: f7e9 ffcb bl 8021df4 <strcpy>
- strcpy(sSettings.sWebParams.mask, sSettings.sWebTempParams.mask);
- 8037e5e: f104 0022 add.w r0, r4, #34 ; 0x22
- 8037e62: f104 0153 add.w r1, r4, #83 ; 0x53
- }
- 8037e66: e8bd 4010 ldmia.w sp!, {r4, lr}
- void SaveWEBparam(void)
- {
- sSettings.sWebParams.dhcpEnable = sSettings.sWebTempParams.dhcpEnable;
- strcpy(sSettings.sWebParams.ip, sSettings.sWebTempParams.ip);
- strcpy(sSettings.sWebParams.gate, sSettings.sWebTempParams.gate);
- strcpy(sSettings.sWebParams.mask, sSettings.sWebTempParams.mask);
- 8037e6a: f7e9 bfc3 b.w 8021df4 <strcpy>
- 8037e6e: bf00 nop
- 8037e70: 2000cfc4 .word 0x2000cfc4
- 08037e74 <GetStateWebReinit>:
- /**
- * @brief Возвращает true если сетевые параметры изменились
- */
- bool GetStateWebReinit(void)
- {
- 8037e74: b510 push {r4, lr}
- /* Статус dhcp изменился? */
- if (sSettings.sWebParams.dhcpEnable != sSettings.sWebTempParams.dhcpEnable)
- 8037e76: 4c12 ldr r4, [pc, #72] ; (8037ec0 <GetStateWebReinit+0x4c>)
- 8037e78: f894 2032 ldrb.w r2, [r4, #50] ; 0x32
- 8037e7c: f894 3063 ldrb.w r3, [r4, #99] ; 0x63
- 8037e80: 429a cmp r2, r3
- 8037e82: d004 beq.n 8037e8e <GetStateWebReinit+0x1a>
- {
- /* Включили dhcp */
- if (sSettings.sWebTempParams.dhcpEnable == 1)
- {
- /* Устанавилваем флаг */
- SetWebReinitFlag(true);
- 8037e84: 2001 movs r0, #1
- 8037e86: f7f0 f953 bl 8028130 <SetWebReinitFlag>
- return true;
- 8037e8a: 2001 movs r0, #1
- 8037e8c: bd10 pop {r4, pc}
- return true;
- }
- }
-
- /* Изменился IP? */
- if (strstr(sSettings.sWebParams.ip, sSettings.sWebTempParams.ip) == 0)
- 8037e8e: 1ca0 adds r0, r4, #2
- 8037e90: f104 0133 add.w r1, r4, #51 ; 0x33
- 8037e94: f7ea fa8c bl 80223b0 <strstr>
- 8037e98: 2800 cmp r0, #0
- 8037e9a: d0f3 beq.n 8037e84 <GetStateWebReinit+0x10>
- SetWebReinitFlag(true);
- return true;
- }
-
- /* Изменился шлюз? */
- if (strstr(sSettings.sWebParams.gate, sSettings.sWebTempParams.gate) == 0)
- 8037e9c: f104 0012 add.w r0, r4, #18
- 8037ea0: f104 0143 add.w r1, r4, #67 ; 0x43
- 8037ea4: f7ea fa84 bl 80223b0 <strstr>
- 8037ea8: 2800 cmp r0, #0
- 8037eaa: d0eb beq.n 8037e84 <GetStateWebReinit+0x10>
- SetWebReinitFlag(true);
- return true;
- }
-
- /* Изменилась маска? */
- if (strstr(sSettings.sWebParams.mask, sSettings.sWebTempParams.mask) == 0)
- 8037eac: f104 0022 add.w r0, r4, #34 ; 0x22
- 8037eb0: f104 0153 add.w r1, r4, #83 ; 0x53
- 8037eb4: f7ea fa7c bl 80223b0 <strstr>
- 8037eb8: 2800 cmp r0, #0
- 8037eba: d0e3 beq.n 8037e84 <GetStateWebReinit+0x10>
- /* Устанавилваем флаг */
- SetWebReinitFlag(true);
- return true;
- }
-
- return false;
- 8037ebc: 2000 movs r0, #0
- }
- 8037ebe: bd10 pop {r4, pc}
- 8037ec0: 2000cfc4 .word 0x2000cfc4
- 08037ec4 <signals_set_value>:
- \param len - длина переменной в байтах
- \param value - указатель на значение переменной
- \return нет
- ------------------------------------------------------------------------------*/
- static void signals_set_value (struct obj_def *od, u16_t len, void *value)
- {
- 8037ec4: b530 push {r4, r5, lr}
- 8037ec6: 4605 mov r5, r0
- 8037ec8: b087 sub sp, #28
- 8037eca: 4614 mov r4, r2
- u8_t id;
- uint32_t val;
- char *val_string;
- char str[20];
- memset(str, 0, 20);
- 8037ecc: a801 add r0, sp, #4
- 8037ece: 2100 movs r1, #0
- 8037ed0: 2214 movs r2, #20
- 8037ed2: f7e9 fe15 bl 8021b00 <memset>
-
- id = od->id_inst_ptr[0];
- 8037ed6: 68ab ldr r3, [r5, #8]
-
- switch (id)
- 8037ed8: 781b ldrb r3, [r3, #0]
- 8037eda: 3b02 subs r3, #2
- 8037edc: 2b04 cmp r3, #4
- 8037ede: d83f bhi.n 8037f60 <signals_set_value+0x9c>
- 8037ee0: e8df f003 tbb [pc, r3]
- 8037ee4: 103e0903 .word 0x103e0903
- 8037ee8: 26 .byte 0x26
- 8037ee9: 00 .byte 0x00
- {
- case 2: /* RestoreSignal */
- val = *((s32_t*)value);
- if (val == 1) {
- 8037eea: 6823 ldr r3, [r4, #0]
- 8037eec: 2b01 cmp r3, #1
- 8037eee: d137 bne.n 8037f60 <signals_set_value+0x9c>
- HTTP_ResetSettings();
- 8037ef0: f7f5 ff50 bl 802dd94 <HTTP_ResetSettings>
- 8037ef4: e034 b.n 8037f60 <signals_set_value+0x9c>
- }
- break;
- case 3: /* RebootSignal */
- val = *((s32_t*)value);
- if (val == 1)
- 8037ef6: 6823 ldr r3, [r4, #0]
- 8037ef8: 2b01 cmp r3, #1
- 8037efa: d131 bne.n 8037f60 <signals_set_value+0x9c>
- HTTP_StartResetTask(false);
- 8037efc: 2000 movs r0, #0
- 8037efe: f7f5 ff93 bl 802de28 <HTTP_StartResetTask>
- 8037f02: e02d b.n 8037f60 <signals_set_value+0x9c>
- break;
- case 5: /* DO1 */
- if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET){
- 8037f04: 4b17 ldr r3, [pc, #92] ; (8037f64 <signals_set_value+0xa0>)
- 8037f06: f893 3374 ldrb.w r3, [r3, #884] ; 0x374
- 8037f0a: 2b03 cmp r3, #3
- 8037f0c: d128 bne.n 8037f60 <signals_set_value+0x9c>
- val_string = (char*)value;
- SetROStr(val_string, 0);
- 8037f0e: 2100 movs r1, #0
- 8037f10: 4620 mov r0, r4
- 8037f12: f7f0 fb03 bl 802851c <SetROStr>
- if(val_string[0] == 0x31)
- 8037f16: 7823 ldrb r3, [r4, #0]
- 8037f18: 2b31 cmp r3, #49 ; 0x31
- strcat(str, "Замкнуто");
- 8037f1a: bf0c ite eq
- 8037f1c: 4912 ldreq r1, [pc, #72] ; (8037f68 <signals_set_value+0xa4>)
- else
- strcat(str, "Разомкнуто");
- 8037f1e: 4913 ldrne r1, [pc, #76] ; (8037f6c <signals_set_value+0xa8>)
- case 5: /* DO1 */
- if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET){
- val_string = (char*)value;
- SetROStr(val_string, 0);
- if(val_string[0] == 0x31)
- strcat(str, "Замкнуто");
- 8037f20: a801 add r0, sp, #4
- else
- strcat(str, "Разомкнуто");
- 8037f22: f7e9 fe53 bl 8021bcc <strcat>
- SNMP_SendUserTrap(DO0_TOGGLED);
- 8037f26: 2007 movs r0, #7
- 8037f28: f000 f908 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_DO0_STATE, str);
- 8037f2c: 2009 movs r0, #9
- 8037f2e: e014 b.n 8037f5a <signals_set_value+0x96>
- }
- break;
- case 6: /* DO2 */
- if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET){
- 8037f30: 4b0c ldr r3, [pc, #48] ; (8037f64 <signals_set_value+0xa0>)
- 8037f32: f893 3375 ldrb.w r3, [r3, #885] ; 0x375
- 8037f36: 2b03 cmp r3, #3
- 8037f38: d112 bne.n 8037f60 <signals_set_value+0x9c>
- val_string = (char*)value;
- SetROStr(val_string, 1);
- 8037f3a: 2101 movs r1, #1
- 8037f3c: 4620 mov r0, r4
- 8037f3e: f7f0 faed bl 802851c <SetROStr>
- if(val_string[0] == 0x31)
- 8037f42: 7823 ldrb r3, [r4, #0]
- 8037f44: 2b31 cmp r3, #49 ; 0x31
- strcat(str, "Замкнуто");
- 8037f46: bf0c ite eq
- 8037f48: 4907 ldreq r1, [pc, #28] ; (8037f68 <signals_set_value+0xa4>)
- else
- strcat(str, "Разомкнуто");
- 8037f4a: 4908 ldrne r1, [pc, #32] ; (8037f6c <signals_set_value+0xa8>)
- case 6: /* DO2 */
- if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET){
- val_string = (char*)value;
- SetROStr(val_string, 1);
- if(val_string[0] == 0x31)
- strcat(str, "Замкнуто");
- 8037f4c: a801 add r0, sp, #4
- else
- strcat(str, "Разомкнуто");
- 8037f4e: f7e9 fe3d bl 8021bcc <strcat>
- SNMP_SendUserTrap(DO1_TOGGLED);
- 8037f52: 2008 movs r0, #8
- 8037f54: f000 f8f2 bl 803813c <SNMP_SendUserTrap>
- log_event_data(LOG_DO1_STATE, str);
- 8037f58: 200a movs r0, #10
- 8037f5a: a901 add r1, sp, #4
- 8037f5c: f7f1 fd7e bl 8029a5c <log_event_data>
- break;
- default :
- break;
- };
-
- }
- 8037f60: b007 add sp, #28
- 8037f62: bd30 pop {r4, r5, pc}
- 8037f64: 2000cfc4 .word 0x2000cfc4
- 8037f68: 08039b37 .word 0x08039b37
- 8037f6c: 08039b48 .word 0x08039b48
- 08037f70 <signals_get_value>:
- \param len - длина переменной в байтах
- \param value - указатель на значение переменной
- \return нет
- ------------------------------------------------------------------------------*/
- static void signals_get_value (struct obj_def *od, u16_t len, void *value)
- {
- 8037f70: 4613 mov r3, r2
- u8_t id;
-
- id = od->id_inst_ptr[0];
- 8037f72: 6882 ldr r2, [r0, #8]
-
- switch (id)
- 8037f74: 7812 ldrb r2, [r2, #0]
- 8037f76: 3a01 subs r2, #1
- \param len - длина переменной в байтах
- \param value - указатель на значение переменной
- \return нет
- ------------------------------------------------------------------------------*/
- static void signals_get_value (struct obj_def *od, u16_t len, void *value)
- {
- 8037f78: b510 push {r4, lr}
- 8037f7a: 460c mov r4, r1
- u8_t id;
-
- id = od->id_inst_ptr[0];
-
- switch (id)
- 8037f7c: 2a11 cmp r2, #17
- 8037f7e: d814 bhi.n 8037faa <signals_get_value+0x3a>
- 8037f80: e8df f002 tbb [pc, r2]
- 8037f84: 0c09090c .word 0x0c09090c
- 8037f88: 09090c0c .word 0x09090c0c
- 8037f8c: 0c0c0c0c .word 0x0c0c0c0c
- 8037f90: 0c0c0c0c .word 0x0c0c0c0c
- 8037f94: 0c0c .short 0x0c0c
- break;
- case 7: /* BatTest */
- *((s32_t*)value) = 0;
- break;
- case 8: /* Shutdown UPS */
- *((s32_t*)value) = 0;
- 8037f96: 2200 movs r2, #0
- 8037f98: 601a str r2, [r3, #0]
- break;
- 8037f9a: bd10 pop {r4, pc}
- break;
- case 17: /* ConnectMonitor */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 18: /* Alarms */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- 8037f9c: 4903 ldr r1, [pc, #12] ; (8037fac <signals_get_value+0x3c>)
- 8037f9e: 4618 mov r0, r3
- 8037fa0: 4622 mov r2, r4
- break;
- default :
- break;
- };
- }
- 8037fa2: e8bd 4010 ldmia.w sp!, {r4, lr}
- break;
- case 17: /* ConnectMonitor */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- break;
- case 18: /* Alarms */
- ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
- 8037fa6: f7fc ba31 b.w 803440c <ocstrncpy>
- 8037faa: bd10 pop {r4, pc}
- 8037fac: 2000f9b8 .word 0x2000f9b8
- 08037fb0 <signals_get_object_def>:
- u8_t id;
-
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 8037fb0: 2801 cmp r0, #1
- \param ident - points to objectname.0 (object id trailer)
- \param od - points to object definition. указатель на описание переменной
- \return нет
- ------------------------------------------------------------------------------*/
- static void signals_get_object_def (u8_t ident_len, s32_t *ident, struct obj_def *od)
- {
- 8037fb2: b538 push {r3, r4, r5, lr}
- 8037fb4: 4614 mov r4, r2
- u8_t id;
-
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- if (ident_len == 2)
- 8037fb6: f040 8081 bne.w 80380bc <signals_get_object_def+0x10c>
- {
- od->id_inst_len = ident_len;
- 8037fba: 2302 movs r3, #2
- 8037fbc: 7193 strb r3, [r2, #6]
- {
- u8_t id;
-
- /* return to object name, adding index depth (1) */
- ident_len += 1;
- ident -= 1;
- 8037fbe: 1f0a subs r2, r1, #4
- if (ident_len == 2)
- {
- od->id_inst_len = ident_len;
- od->id_inst_ptr = ident;
- 8037fc0: 60a2 str r2, [r4, #8]
- id = ident[0];
-
- switch (id)
- 8037fc2: f811 2c04 ldrb.w r2, [r1, #-4]
- 8037fc6: 3a01 subs r2, #1
- 8037fc8: 2a11 cmp r2, #17
- 8037fca: d877 bhi.n 80380bc <signals_get_object_def+0x10c>
- 8037fcc: e8df f002 tbb [pc, r2]
- 8037fd0: 0f242409 .word 0x0f242409
- 8037fd4: 2a241a15 .word 0x2a241a15
- 8037fd8: 453f3932 .word 0x453f3932
- 8037fdc: 5d57514b .word 0x5d57514b
- 8037fe0: 6963 .short 0x6963
- {
- case 1: /* FWVersion */
- GetVersionStr(paramStr, ¶mLength);
- 8037fe2: 4d38 ldr r5, [pc, #224] ; (80380c4 <signals_get_object_def+0x114>)
- 8037fe4: 4838 ldr r0, [pc, #224] ; (80380c8 <signals_get_object_def+0x118>)
- 8037fe6: 4629 mov r1, r5
- 8037fe8: f7ef fe6e bl 8027cc8 <GetVersionStr>
- 8037fec: e05e b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_WRITE_ONLY;
- od->asn_type = SNMP_ASN1_INTEG;
- od->v_len = sizeof(s32_t);
- break;
- case 4: /* UPSModel*/
- GetUPSModelStr(paramStr, ¶mLength);
- 8037fee: 4d35 ldr r5, [pc, #212] ; (80380c4 <signals_get_object_def+0x114>)
- 8037ff0: 4835 ldr r0, [pc, #212] ; (80380c8 <signals_get_object_def+0x118>)
- 8037ff2: 4629 mov r1, r5
- 8037ff4: f7ef fed4 bl 8027da0 <GetUPSModelStr>
- 8037ff8: e058 b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 5: /* DO1*/
- GetDOUTStatusStr(paramStr, ¶mLength, 0);
- 8037ffa: 4d32 ldr r5, [pc, #200] ; (80380c4 <signals_get_object_def+0x114>)
- 8037ffc: 4832 ldr r0, [pc, #200] ; (80380c8 <signals_get_object_def+0x118>)
- 8037ffe: 4629 mov r1, r5
- 8038000: 2200 movs r2, #0
- 8038002: e003 b.n 803800c <signals_get_object_def+0x5c>
- od->access = MIB_OBJECT_READ_WRITE;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 6: /* DO2*/
- GetDOUTStatusStr(paramStr, ¶mLength, 1);
- 8038004: 4d2f ldr r5, [pc, #188] ; (80380c4 <signals_get_object_def+0x114>)
- 8038006: 4830 ldr r0, [pc, #192] ; (80380c8 <signals_get_object_def+0x118>)
- 8038008: 4629 mov r1, r5
- 803800a: 2201 movs r2, #1
- 803800c: f7ef fdda bl 8027bc4 <GetDOUTStatusStr>
- od->instance = MIB_OBJECT_SCALAR;
- 8038010: 2301 movs r3, #1
- 8038012: 7023 strb r3, [r4, #0]
- od->access = MIB_OBJECT_READ_WRITE;
- 8038014: 2303 movs r3, #3
- 8038016: e04b b.n 80380b0 <signals_get_object_def+0x100>
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 7: /* BatTest*/
- od->instance = MIB_OBJECT_SCALAR;
- 8038018: 2201 movs r2, #1
- od->access = MIB_OBJECT_WRITE_ONLY;
- 803801a: 7063 strb r3, [r4, #1]
- od->asn_type = SNMP_ASN1_INTEG;
- 803801c: 70a3 strb r3, [r4, #2]
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 7: /* BatTest*/
- od->instance = MIB_OBJECT_SCALAR;
- 803801e: 7022 strb r2, [r4, #0]
- od->access = MIB_OBJECT_WRITE_ONLY;
- od->asn_type = SNMP_ASN1_INTEG;
- od->v_len = sizeof(s32_t);
- 8038020: 2304 movs r3, #4
- 8038022: e049 b.n 80380b8 <signals_get_object_def+0x108>
- break;
- case 8: /* Shutdown UPS*/
- od->instance = MIB_OBJECT_SCALAR;
- od->access = MIB_OBJECT_WRITE_ONLY;
- 8038024: 7063 strb r3, [r4, #1]
- od->asn_type = SNMP_ASN1_OC_STR;
- 8038026: 2304 movs r3, #4
- od->asn_type = SNMP_ASN1_INTEG;
- od->v_len = sizeof(s32_t);
- break;
- case 8: /* Shutdown UPS*/
- od->instance = MIB_OBJECT_SCALAR;
- 8038028: 2201 movs r2, #1
- od->access = MIB_OBJECT_WRITE_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- 803802a: 70a3 strb r3, [r4, #2]
- od->v_len = paramLength;
- 803802c: 4b25 ldr r3, [pc, #148] ; (80380c4 <signals_get_object_def+0x114>)
- od->asn_type = SNMP_ASN1_INTEG;
- od->v_len = sizeof(s32_t);
- break;
- case 8: /* Shutdown UPS*/
- od->instance = MIB_OBJECT_SCALAR;
- 803802e: 7022 strb r2, [r4, #0]
- od->access = MIB_OBJECT_WRITE_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- 8038030: 781b ldrb r3, [r3, #0]
- 8038032: e041 b.n 80380b8 <signals_get_object_def+0x108>
- break;
- case 9: /* DIO*/
- GetDINStatusStr(paramStr, ¶mLength, 0);
- 8038034: 4d23 ldr r5, [pc, #140] ; (80380c4 <signals_get_object_def+0x114>)
- 8038036: 4824 ldr r0, [pc, #144] ; (80380c8 <signals_get_object_def+0x118>)
- 8038038: 4629 mov r1, r5
- 803803a: 2200 movs r2, #0
- 803803c: f7ef fd88 bl 8027b50 <GetDINStatusStr>
- 8038040: e034 b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 10: /* IntTemp */
- GetInternalTempStr(paramStr, ¶mLength);
- 8038042: 4d20 ldr r5, [pc, #128] ; (80380c4 <signals_get_object_def+0x114>)
- 8038044: 4820 ldr r0, [pc, #128] ; (80380c8 <signals_get_object_def+0x118>)
- 8038046: 4629 mov r1, r5
- 8038048: f7ef fc7e bl 8027948 <GetInternalTempStr>
- 803804c: e02e b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 11: /* InFreq */
- GetInputFreqStr(paramStr, ¶mLength);
- 803804e: 4d1d ldr r5, [pc, #116] ; (80380c4 <signals_get_object_def+0x114>)
- 8038050: 481d ldr r0, [pc, #116] ; (80380c8 <signals_get_object_def+0x118>)
- 8038052: 4629 mov r1, r5
- 8038054: f7ef fbea bl 802782c <GetInputFreqStr>
- 8038058: e028 b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 12: /* InVoltVAC */
- GetInputVoltageStr(paramStr, ¶mLength);
- 803805a: 4d1a ldr r5, [pc, #104] ; (80380c4 <signals_get_object_def+0x114>)
- 803805c: 481a ldr r0, [pc, #104] ; (80380c8 <signals_get_object_def+0x118>)
- 803805e: 4629 mov r1, r5
- 8038060: f7ef fc10 bl 8027884 <GetInputVoltageStr>
- 8038064: e022 b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 13: /* OutVoltVAC */
- GetOutputVoltageStr(paramStr, ¶mLength);
- 8038066: 4d17 ldr r5, [pc, #92] ; (80380c4 <signals_get_object_def+0x114>)
- 8038068: 4817 ldr r0, [pc, #92] ; (80380c8 <signals_get_object_def+0x118>)
- 803806a: 4629 mov r1, r5
- 803806c: f7ef fc20 bl 80278b0 <GetOutputVoltageStr>
- 8038070: e01c b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 14: /* Power */
- GetPowerStr(paramStr, ¶mLength);
- 8038072: 4d14 ldr r5, [pc, #80] ; (80380c4 <signals_get_object_def+0x114>)
- 8038074: 4814 ldr r0, [pc, #80] ; (80380c8 <signals_get_object_def+0x118>)
- 8038076: 4629 mov r1, r5
- 8038078: f7ef fc30 bl 80278dc <GetPowerStr>
- 803807c: e016 b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 15: /* BatCap */
- GetBatCapacityStr(paramStr, ¶mLength);
- 803807e: 4d11 ldr r5, [pc, #68] ; (80380c4 <signals_get_object_def+0x114>)
- 8038080: 4811 ldr r0, [pc, #68] ; (80380c8 <signals_get_object_def+0x118>)
- 8038082: 4629 mov r1, r5
- 8038084: f7ef fc3c bl 8027900 <GetBatCapacityStr>
- 8038088: e010 b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 16: /* BatTime */
- GetRuntimeStr(paramStr, ¶mLength);
- 803808a: 4d0e ldr r5, [pc, #56] ; (80380c4 <signals_get_object_def+0x114>)
- 803808c: 480e ldr r0, [pc, #56] ; (80380c8 <signals_get_object_def+0x118>)
- 803808e: 4629 mov r1, r5
- 8038090: f7ef fc48 bl 8027924 <GetRuntimeStr>
- 8038094: e00a b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 17: /* ConnectMonitor */
- GetConnectMonitorStr(paramStr, ¶mLength);
- 8038096: 4d0b ldr r5, [pc, #44] ; (80380c4 <signals_get_object_def+0x114>)
- 8038098: 480b ldr r0, [pc, #44] ; (80380c8 <signals_get_object_def+0x118>)
- 803809a: 4629 mov r1, r5
- 803809c: f7ef fc7c bl 8027998 <GetConnectMonitorStr>
- 80380a0: e004 b.n 80380ac <signals_get_object_def+0xfc>
- od->access = MIB_OBJECT_READ_ONLY;
- od->asn_type = SNMP_ASN1_OC_STR;
- od->v_len = paramLength;
- break;
- case 18: /* Alarms */
- GetAlarmStr(paramStr, ¶mLength);
- 80380a2: 4d08 ldr r5, [pc, #32] ; (80380c4 <signals_get_object_def+0x114>)
- 80380a4: 4808 ldr r0, [pc, #32] ; (80380c8 <signals_get_object_def+0x118>)
- 80380a6: 4629 mov r1, r5
- 80380a8: f7ef fc8e bl 80279c8 <GetAlarmStr>
- od->instance = MIB_OBJECT_SCALAR;
- 80380ac: 2301 movs r3, #1
- 80380ae: 7023 strb r3, [r4, #0]
- od->access = MIB_OBJECT_READ_ONLY;
- 80380b0: 7063 strb r3, [r4, #1]
- od->asn_type = SNMP_ASN1_OC_STR;
- 80380b2: 2304 movs r3, #4
- 80380b4: 70a3 strb r3, [r4, #2]
- od->v_len = paramLength;
- 80380b6: 782b ldrb r3, [r5, #0]
- 80380b8: 80a3 strh r3, [r4, #4]
- break;
- 80380ba: bd38 pop {r3, r4, r5, pc}
- };
- }
- else
- {
- LWIP_DEBUGF(SNMP_MIB_DEBUG,("planar_get_object_def: no scalar\n"));
- od->instance = MIB_OBJECT_NONE;
- 80380bc: 2300 movs r3, #0
- 80380be: 7023 strb r3, [r4, #0]
- 80380c0: bd38 pop {r3, r4, r5, pc}
- 80380c2: bf00 nop
- 80380c4: 2000c7e6 .word 0x2000c7e6
- 80380c8: 2000f9b8 .word 0x2000f9b8
- 080380cc <signals_set_test>:
- \param value - указатель на значение переменной
- \return 0 - некорректное значение
- 1 - корректное значение
- ------------------------------------------------------------------------------*/
- static u8_t signals_set_test (struct obj_def *od, u16_t len, void *value)
- {
- 80380cc: b508 push {r3, lr}
- u8_t id, set_ok;
- char *val_string;
- LWIP_UNUSED_ARG(value);
- set_ok = 0;
- id = od->id_inst_ptr[0];
- 80380ce: 6883 ldr r3, [r0, #8]
-
- switch (id)
- 80380d0: 781b ldrb r3, [r3, #0]
- 80380d2: 3b02 subs r3, #2
- 80380d4: 2b04 cmp r3, #4
- 80380d6: d81f bhi.n 8038118 <signals_set_test+0x4c>
- 80380d8: e8df f003 tbb [pc, r3]
- 80380dc: 051e0303 .word 0x051e0303
- 80380e0: 14 .byte 0x14
- 80380e1: 00 .byte 0x00
- {
- u8_t id, set_ok;
- char *val_string;
- LWIP_UNUSED_ARG(value);
- set_ok = 0;
- 80380e2: 2904 cmp r1, #4
- 80380e4: e00a b.n 80380fc <signals_set_test+0x30>
- {
- set_ok = 1;
- }
- break;
- case 5: /* DO1 */
- if ( len >= 1 )
- 80380e6: b901 cbnz r1, 80380ea <signals_set_test+0x1e>
- 80380e8: e016 b.n 8038118 <signals_set_test+0x4c>
- {
- val_string = (char*)value;
- if(atoi(val_string) <= 1){
- 80380ea: 4610 mov r0, r2
- 80380ec: f7e9 fbe8 bl 80218c0 <atoi>
- 80380f0: 2801 cmp r0, #1
- 80380f2: dc11 bgt.n 8038118 <signals_set_test+0x4c>
- if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET)
- 80380f4: 4b09 ldr r3, [pc, #36] ; (803811c <signals_set_test+0x50>)
- 80380f6: f893 0374 ldrb.w r0, [r3, #884] ; 0x374
- {
- u8_t id, set_ok;
- char *val_string;
- LWIP_UNUSED_ARG(value);
- set_ok = 0;
- 80380fa: 2803 cmp r0, #3
- 80380fc: bf14 ite ne
- 80380fe: 2000 movne r0, #0
- 8038100: 2001 moveq r0, #1
- 8038102: bd08 pop {r3, pc}
- set_ok = 1;
- }
- }
- break;
- case 6: /* DO2 */
- if ( len >= 1 )
- 8038104: b141 cbz r1, 8038118 <signals_set_test+0x4c>
- {
- val_string = (char*)value;
- if(atoi(val_string) <= 1){
- 8038106: 4610 mov r0, r2
- 8038108: f7e9 fbda bl 80218c0 <atoi>
- 803810c: 2801 cmp r0, #1
- 803810e: dc03 bgt.n 8038118 <signals_set_test+0x4c>
- if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET)
- 8038110: 4b02 ldr r3, [pc, #8] ; (803811c <signals_set_test+0x50>)
- 8038112: f893 0375 ldrb.w r0, [r3, #885] ; 0x375
- 8038116: e7f0 b.n 80380fa <signals_set_test+0x2e>
- {
- u8_t id, set_ok;
- char *val_string;
- LWIP_UNUSED_ARG(value);
- set_ok = 0;
- 8038118: 2000 movs r0, #0
- break;
- };
-
- return set_ok;
- }
- 803811a: bd08 pop {r3, pc}
- 803811c: 2000cfc4 .word 0x2000cfc4
- 08038120 <SNMP_SysUpTimeTask>:
- /**
- * @brief Системный тик SNMP. Таск должен вызываться с частотой 100Гц.
- * @retval
- */
- void SNMP_SysUpTimeTask(void *arg)
- {
- 8038120: b513 push {r0, r1, r4, lr}
- TickType_t xLastWakeTime;
- const TickType_t xFrequency = 10;
-
- xLastWakeTime = xTaskGetTickCount();
- 8038122: f7f2 fe21 bl 802ad68 <xTaskGetTickCount>
- 8038126: ac02 add r4, sp, #8
- 8038128: f844 0d04 str.w r0, [r4, #-4]!
-
- while(1)
- {
- vTaskDelayUntil( &xLastWakeTime, xFrequency );
- 803812c: 4620 mov r0, r4
- 803812e: 210a movs r1, #10
- 8038130: f7f2 ff7e bl 802b030 <vTaskDelayUntil>
- snmp_inc_sysuptime();
- 8038134: f7fc fa88 bl 8034648 <snmp_inc_sysuptime>
- 8038138: e7f8 b.n 803812c <SNMP_SysUpTimeTask+0xc>
- 803813a: 0000 movs r0, r0
- 0803813c <SNMP_SendUserTrap>:
- * FIFO буфера.
- * Если в настройках трапа отправка отключена, то трап игнорируется.
- * @retval
- */
- void SNMP_SendUserTrap(uint8_t trapName)
- {
- 803813c: b51f push {r0, r1, r2, r3, r4, lr}
- uint16_t availableSpace;
- uint8_t dummyTrap;
-
- if (traps[trapName].trapEnable)
- 803813e: 4b0d ldr r3, [pc, #52] ; (8038174 <SNMP_SendUserTrap+0x38>)
- * FIFO буфера.
- * Если в настройках трапа отправка отключена, то трап игнорируется.
- * @retval
- */
- void SNMP_SendUserTrap(uint8_t trapName)
- {
- 8038140: f88d 0007 strb.w r0, [sp, #7]
- uint16_t availableSpace;
- uint8_t dummyTrap;
-
- if (traps[trapName].trapEnable)
- 8038144: eb03 00c0 add.w r0, r3, r0, lsl #3
- 8038148: 78c3 ldrb r3, [r0, #3]
- 803814a: b193 cbz r3, 8038172 <SNMP_SendUserTrap+0x36>
- {
- availableSpace = uxQueueSpacesAvailable(SNMP_TrapQueue);
- 803814c: 4c0a ldr r4, [pc, #40] ; (8038178 <SNMP_SendUserTrap+0x3c>)
- 803814e: 6820 ldr r0, [r4, #0]
- 8038150: f7f2 fc32 bl 802a9b8 <uxQueueSpacesAvailable>
-
- if (availableSpace == 0)
- 8038154: b282 uxth r2, r0
- 8038156: b92a cbnz r2, 8038164 <SNMP_SendUserTrap+0x28>
- xQueueReceive(SNMP_TrapQueue, &dummyTrap, 0);
- 8038158: 6820 ldr r0, [r4, #0]
- 803815a: f10d 010f add.w r1, sp, #15
- 803815e: 4613 mov r3, r2
- 8038160: f7f2 fb41 bl 802a7e6 <xQueueGenericReceive>
-
- xQueueSend(SNMP_TrapQueue, &trapName, 0);
- 8038164: 2200 movs r2, #0
- 8038166: 6820 ldr r0, [r4, #0]
- 8038168: f10d 0107 add.w r1, sp, #7
- 803816c: 4613 mov r3, r2
- 803816e: f7f2 f9fa bl 802a566 <xQueueGenericSend>
- }
- }
- 8038172: bd1f pop {r0, r1, r2, r3, r4, pc}
- 8038174: 2000fabc .word 0x2000fabc
- 8038178: 2000fab8 .word 0x2000fab8
- 0803817c <SNMP_SetObjDescr>:
- * @brief Установить SNMP Descriptor
- * @retval
- */
- // TODO
- void SNMP_SetObjDescr(void)
- {
- 803817c: b538 push {r3, r4, r5, lr}
- static uint8_t len;
-
- strcpy(sSettings.sSnmp.sysDescr, sSettings.sSnmp.sysName);
- 803817e: 4c19 ldr r4, [pc, #100] ; (80381e4 <SNMP_SetObjDescr+0x68>)
- strcat(sSettings.sSnmp.sysDescr, " ");
- 8038180: 4d19 ldr r5, [pc, #100] ; (80381e8 <SNMP_SetObjDescr+0x6c>)
- // TODO
- void SNMP_SetObjDescr(void)
- {
- static uint8_t len;
-
- strcpy(sSettings.sSnmp.sysDescr, sSettings.sSnmp.sysName);
- 8038182: f104 01fa add.w r1, r4, #250 ; 0xfa
- 8038186: 4620 mov r0, r4
- 8038188: f7e9 fe34 bl 8021df4 <strcpy>
- strcat(sSettings.sSnmp.sysDescr, " ");
- 803818c: 4629 mov r1, r5
- 803818e: 4620 mov r0, r4
- 8038190: f7e9 fd1c bl 8021bcc <strcat>
- strcat(sSettings.sSnmp.sysDescr, VERSION);
- 8038194: 4620 mov r0, r4
- 8038196: 4915 ldr r1, [pc, #84] ; (80381ec <SNMP_SetObjDescr+0x70>)
- 8038198: f7e9 fd18 bl 8021bcc <strcat>
- strcat(sSettings.sSnmp.sysDescr, " ");
- 803819c: 4629 mov r1, r5
- 803819e: 4620 mov r0, r4
- 80381a0: f7e9 fd14 bl 8021bcc <strcat>
- strcat(sSettings.sSnmp.sysDescr, sSettings.sSnmp.sysContact);
- 80381a4: f104 01c8 add.w r1, r4, #200 ; 0xc8
- 80381a8: 4620 mov r0, r4
- 80381aa: f7e9 fd0f bl 8021bcc <strcat>
- strcat(sSettings.sSnmp.sysDescr, " ");
- 80381ae: 4629 mov r1, r5
- 80381b0: 4620 mov r0, r4
- 80381b2: f7e9 fd0b bl 8021bcc <strcat>
- strcat(sSettings.sSnmp.sysDescr, sSettings.sInfo.serialNumber);
- 80381b6: f1a4 0193 sub.w r1, r4, #147 ; 0x93
- 80381ba: 4620 mov r0, r4
- 80381bc: f7e9 fd06 bl 8021bcc <strcat>
- strcat(sSettings.sSnmp.sysDescr, " ");
- 80381c0: 4629 mov r1, r5
- 80381c2: 4620 mov r0, r4
- 80381c4: f7e9 fd02 bl 8021bcc <strcat>
- strcat(sSettings.sSnmp.sysDescr, UPS.model);
- 80381c8: 4909 ldr r1, [pc, #36] ; (80381f0 <SNMP_SetObjDescr+0x74>)
- 80381ca: 4620 mov r0, r4
- 80381cc: f7e9 fcfe bl 8021bcc <strcat>
-
- len = strlen(sSettings.sSnmp.sysDescr);
- 80381d0: 4620 mov r0, r4
- 80381d2: f7e9 fe6d bl 8021eb0 <strlen>
- 80381d6: 4907 ldr r1, [pc, #28] ; (80381f4 <SNMP_SetObjDescr+0x78>)
- 80381d8: 7008 strb r0, [r1, #0]
- snmp_set_sysdesr((u8_t*)sSettings.sSnmp.sysDescr, &len);
- 80381da: 4620 mov r0, r4
- }
- 80381dc: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
- strcat(sSettings.sSnmp.sysDescr, sSettings.sInfo.serialNumber);
- strcat(sSettings.sSnmp.sysDescr, " ");
- strcat(sSettings.sSnmp.sysDescr, UPS.model);
-
- len = strlen(sSettings.sSnmp.sysDescr);
- snmp_set_sysdesr((u8_t*)sSettings.sSnmp.sysDescr, &len);
- 80381e0: f7fc ba1e b.w 8034620 <snmp_set_sysdesr>
- 80381e4: 2000d0f5 .word 0x2000d0f5
- 80381e8: 08039ade .word 0x08039ade
- 80381ec: 080399d9 .word 0x080399d9
- 80381f0: 2000cbbd .word 0x2000cbbd
- 80381f4: 2000c7f0 .word 0x2000c7f0
- 080381f8 <SNMP_SetReadCommunity>:
- /**
- * @brief Установить SNMP Community для чтения
- */
- void SNMP_SetReadCommunity(char *comm)
- {
- 80381f8: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.readCommunity, comm);
- 80381fa: 4801 ldr r0, [pc, #4] ; (8038200 <SNMP_SetReadCommunity+0x8>)
- 80381fc: f7e9 bdfa b.w 8021df4 <strcpy>
- 8038200: 2000d195 .word 0x2000d195
- 08038204 <SNMP_SetWriteCommunity>:
- /**
- * @brief Установить SNMP Community для записи
- */
- void SNMP_SetWriteCommunity(char *comm)
- {
- 8038204: 4601 mov r1, r0
- strcpy(sSettings.sSnmp.writeCommunity, comm);
- 8038206: 4801 ldr r0, [pc, #4] ; (803820c <SNMP_SetWriteCommunity+0x8>)
- 8038208: f7e9 bdf4 b.w 8021df4 <strcpy>
- 803820c: 2000d1a9 .word 0x2000d1a9
- 08038210 <SNMP_SetSysContact>:
- /**
- * @brief Установить SNMP SysContact
- * @retval
- */
- void SNMP_SetSysContact(char *con)
- {
- 8038210: b510 push {r4, lr}
- 8038212: 4604 mov r4, r0
- static uint8_t len;
-
- len = strlen(con);
- 8038214: f7e9 fe4c bl 8021eb0 <strlen>
- 8038218: 4903 ldr r1, [pc, #12] ; (8038228 <SNMP_SetSysContact+0x18>)
- 803821a: 7008 strb r0, [r1, #0]
- snmp_set_syscontact((u8_t*)con, &len);
- 803821c: 4620 mov r0, r4
- }
- 803821e: e8bd 4010 ldmia.w sp!, {r4, lr}
- void SNMP_SetSysContact(char *con)
- {
- static uint8_t len;
-
- len = strlen(con);
- snmp_set_syscontact((u8_t*)con, &len);
- 8038222: f7fc ba61 b.w 80346e8 <snmp_set_syscontact>
- 8038226: bf00 nop
- 8038228: 2000c7e7 .word 0x2000c7e7
- 0803822c <SNMP_SetSysName>:
- /**
- * @brief Установить SNMP SysName
- * @retval
- */
- void SNMP_SetSysName(char *name)
- {
- 803822c: b510 push {r4, lr}
- 803822e: 4604 mov r4, r0
- static uint8_t len;
-
- len = strlen(name);
- 8038230: f7e9 fe3e bl 8021eb0 <strlen>
- 8038234: 4903 ldr r1, [pc, #12] ; (8038244 <SNMP_SetSysName+0x18>)
- 8038236: 7008 strb r0, [r1, #0]
- snmp_set_sysname((u8_t*)name, &len);
- 8038238: 4620 mov r0, r4
- }
- 803823a: e8bd 4010 ldmia.w sp!, {r4, lr}
- void SNMP_SetSysName(char *name)
- {
- static uint8_t len;
-
- len = strlen(name);
- snmp_set_sysname((u8_t*)name, &len);
- 803823e: f7fc ba5d b.w 80346fc <snmp_set_sysname>
- 8038242: bf00 nop
- 8038244: 2000c7e9 .word 0x2000c7e9
- 08038248 <SNMP_SetSysLocation>:
- /**
- * @brief Установить SNMP SysLocation
- * @retval
- */
- void SNMP_SetSysLocation(char *loc)
- {
- 8038248: b510 push {r4, lr}
- 803824a: 4604 mov r4, r0
- static uint8_t len;
-
- len = strlen(loc);
- 803824c: f7e9 fe30 bl 8021eb0 <strlen>
- 8038250: 4903 ldr r1, [pc, #12] ; (8038260 <SNMP_SetSysLocation+0x18>)
- 8038252: 7008 strb r0, [r1, #0]
- snmp_set_syslocation((u8_t*)loc, &len);
- 8038254: 4620 mov r0, r4
- }
- 8038256: e8bd 4010 ldmia.w sp!, {r4, lr}
- void SNMP_SetSysLocation(char *loc)
- {
- static uint8_t len;
-
- len = strlen(loc);
- snmp_set_syslocation((u8_t*)loc, &len);
- 803825a: f7fc ba59 b.w 8034710 <snmp_set_syslocation>
- 803825e: bf00 nop
- 8038260: 2000c7e8 .word 0x2000c7e8
- 08038264 <SNMP_SetManagerIP>:
- /**
- * @brief Установить SNMP SysManagerIP
- * @retval
- */
- void SNMP_SetManagerIP(char *ip)
- {
- 8038264: b510 push {r4, lr}
- static ip_addr_t trap_addr;
-
- ipaddr_aton(ip, &trap_addr);
- 8038266: 4c05 ldr r4, [pc, #20] ; (803827c <SNMP_SetManagerIP+0x18>)
- 8038268: 4621 mov r1, r4
- 803826a: f7fa fda4 bl 8032db6 <ipaddr_aton>
- snmp_trap_dst_ip_set(0, &trap_addr);
- 803826e: 2000 movs r0, #0
- 8038270: 4621 mov r1, r4
- }
- 8038272: e8bd 4010 ldmia.w sp!, {r4, lr}
- void SNMP_SetManagerIP(char *ip)
- {
- static ip_addr_t trap_addr;
-
- ipaddr_aton(ip, &trap_addr);
- snmp_trap_dst_ip_set(0, &trap_addr);
- 8038276: f7fe bb65 b.w 8036944 <snmp_trap_dst_ip_set>
- 803827a: bf00 nop
- 803827c: 2000c7ec .word 0x2000c7ec
- 08038280 <snmp_trap_tread>:
- /**
- * @brief Тестовый таск для проверки отправки трапов
- * @retval
- */
- void snmp_trap_tread(void *arg)
- {
- 8038280: b537 push {r0, r1, r2, r4, r5, lr}
- uint8_t trapName;
-
- while(1)
- {
- if (xQueueReceive(SNMP_TrapQueue, &trapName, 0) == pdTRUE)
- 8038282: 4d1c ldr r5, [pc, #112] ; (80382f4 <snmp_trap_tread+0x74>)
- {
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
- SNMP_SendVarbindTrap(&traps[trapName]);
- 8038284: 4c1c ldr r4, [pc, #112] ; (80382f8 <snmp_trap_tread+0x78>)
- {
- uint8_t trapName;
-
- while(1)
- {
- if (xQueueReceive(SNMP_TrapQueue, &trapName, 0) == pdTRUE)
- 8038286: 2200 movs r2, #0
- 8038288: 6828 ldr r0, [r5, #0]
- 803828a: f10d 0107 add.w r1, sp, #7
- 803828e: 4613 mov r3, r2
- 8038290: f7f2 faa9 bl 802a7e6 <xQueueGenericReceive>
- 8038294: 2801 cmp r0, #1
- 8038296: d1f6 bne.n 8038286 <snmp_trap_tread+0x6>
- {
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
- 8038298: 4818 ldr r0, [pc, #96] ; (80382fc <snmp_trap_tread+0x7c>)
- 803829a: f7ff ffe3 bl 8038264 <SNMP_SetManagerIP>
- SNMP_SendVarbindTrap(&traps[trapName]);
- 803829e: f89d 0007 ldrb.w r0, [sp, #7]
- 80382a2: eb04 00c0 add.w r0, r4, r0, lsl #3
- 80382a6: f000 fa43 bl 8038730 <SNMP_SendVarbindTrap>
-
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
- 80382aa: 4815 ldr r0, [pc, #84] ; (8038300 <snmp_trap_tread+0x80>)
- 80382ac: f7ff ffda bl 8038264 <SNMP_SetManagerIP>
- SNMP_SendVarbindTrap(&traps[trapName]);
- 80382b0: f89d 0007 ldrb.w r0, [sp, #7]
- 80382b4: eb04 00c0 add.w r0, r4, r0, lsl #3
- 80382b8: f000 fa3a bl 8038730 <SNMP_SendVarbindTrap>
-
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
- 80382bc: 4811 ldr r0, [pc, #68] ; (8038304 <snmp_trap_tread+0x84>)
- 80382be: f7ff ffd1 bl 8038264 <SNMP_SetManagerIP>
- SNMP_SendVarbindTrap(&traps[trapName]);
- 80382c2: f89d 0007 ldrb.w r0, [sp, #7]
- 80382c6: eb04 00c0 add.w r0, r4, r0, lsl #3
- 80382ca: f000 fa31 bl 8038730 <SNMP_SendVarbindTrap>
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP4);
- 80382ce: 480e ldr r0, [pc, #56] ; (8038308 <snmp_trap_tread+0x88>)
- 80382d0: f7ff ffc8 bl 8038264 <SNMP_SetManagerIP>
- SNMP_SendVarbindTrap(&traps[trapName]);
- 80382d4: f89d 0007 ldrb.w r0, [sp, #7]
- 80382d8: eb04 00c0 add.w r0, r4, r0, lsl #3
- 80382dc: f000 fa28 bl 8038730 <SNMP_SendVarbindTrap>
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
- 80382e0: 480a ldr r0, [pc, #40] ; (803830c <snmp_trap_tread+0x8c>)
- 80382e2: f7ff ffbf bl 8038264 <SNMP_SetManagerIP>
- SNMP_SendVarbindTrap(&traps[trapName]);
- 80382e6: f89d 0007 ldrb.w r0, [sp, #7]
- 80382ea: eb04 00c0 add.w r0, r4, r0, lsl #3
- 80382ee: f000 fa1f bl 8038730 <SNMP_SendVarbindTrap>
- 80382f2: e7c8 b.n 8038286 <snmp_trap_tread+0x6>
- 80382f4: 2000fab8 .word 0x2000fab8
- 80382f8: 2000fabc .word 0x2000fabc
- 80382fc: 2000d271 .word 0x2000d271
- 8038300: 2000d285 .word 0x2000d285
- 8038304: 2000d299 .word 0x2000d299
- 8038308: 2000d2ad .word 0x2000d2ad
- 803830c: 2000d2c1 .word 0x2000d2c1
- 08038310 <SNMP_SetObjID>:
- */
- void SNMP_SetObjID(void)
- {
- static struct snmp_obj_id my_object_id = {9, {1, 3, 6, 1, 4, 1, 41752, 911, 3}};
-
- snmp_set_sysobjid(&my_object_id);
- 8038310: 4801 ldr r0, [pc, #4] ; (8038318 <SNMP_SetObjID+0x8>)
- 8038312: f7fc b98f b.w 8034634 <snmp_set_sysobjid>
- 8038316: bf00 nop
- 8038318: 20000a30 .word 0x20000a30
- 0803831c <SNMP_SetTrapOnOff>:
- /**
- * @brief Вкл/выкл трапы
- * @retval
- */
- void SNMP_SetTrapOnOff(uint8_t state)
- {
- 803831c: 4601 mov r1, r0
- snmp_trap_dst_enable(0, (u8_t)state);
- 803831e: 2000 movs r0, #0
- 8038320: f7fe bb0a b.w 8036938 <snmp_trap_dst_enable>
- 08038324 <SNMP_AgentInit>:
- /**
- * @brief Инициализация SNMP агента
- * @retval
- */
- void SNMP_AgentInit(void)
- {
- 8038324: b510 push {r4, lr}
- SNMP_SetObjDescr();
- SNMP_SetReadCommunity(sSettings.sSnmp.readCommunity);
- 8038326: 4c16 ldr r4, [pc, #88] ; (8038380 <SNMP_AgentInit+0x5c>)
- * @brief Инициализация SNMP агента
- * @retval
- */
- void SNMP_AgentInit(void)
- {
- SNMP_SetObjDescr();
- 8038328: f7ff ff28 bl 803817c <SNMP_SetObjDescr>
- SNMP_SetReadCommunity(sSettings.sSnmp.readCommunity);
- 803832c: 4620 mov r0, r4
- 803832e: f7ff ff63 bl 80381f8 <SNMP_SetReadCommunity>
- SNMP_SetWriteCommunity(sSettings.sSnmp.writeCommunity);
- 8038332: f104 0014 add.w r0, r4, #20
- 8038336: f7ff ff65 bl 8038204 <SNMP_SetWriteCommunity>
- SNMP_SetSysContact(sSettings.sSnmp.sysContact);
- 803833a: f104 0028 add.w r0, r4, #40 ; 0x28
- 803833e: f7ff ff67 bl 8038210 <SNMP_SetSysContact>
- SNMP_SetSysName(sSettings.sSnmp.sysName);
- 8038342: f104 005a add.w r0, r4, #90 ; 0x5a
- 8038346: f7ff ff71 bl 803822c <SNMP_SetSysName>
- SNMP_SetSysLocation(sSettings.sSnmp.sysLocation);
- 803834a: f104 006e add.w r0, r4, #110 ; 0x6e
- 803834e: f7ff ff7b bl 8038248 <SNMP_SetSysLocation>
- SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
- 8038352: f104 00dc add.w r0, r4, #220 ; 0xdc
- 8038356: f7ff ff85 bl 8038264 <SNMP_SetManagerIP>
- SNMP_SetObjID();
- 803835a: f7ff ffd9 bl 8038310 <SNMP_SetObjID>
- SNMP_SetTrapOnOff(1);
- 803835e: 2001 movs r0, #1
- 8038360: f7ff ffdc bl 803831c <SNMP_SetTrapOnOff>
-
- SNMP_InitTrapsBase();
- 8038364: f000 f928 bl 80385b8 <SNMP_InitTrapsBase>
-
- snmp_init();
- 8038368: f7fd f9c2 bl 80356f0 <snmp_init>
- udp_init();
- 803836c: f7fa f9fa bl 8032764 <udp_init>
-
- SNMP_TrapQueue = xQueueCreate(SNMP_TRAP_QUEUE_SIZE, sizeof(uint8_t));
- 8038370: 2064 movs r0, #100 ; 0x64
- 8038372: 2101 movs r1, #1
- 8038374: 2200 movs r2, #0
- 8038376: f7f2 f8b9 bl 802a4ec <xQueueGenericCreate>
- 803837a: 4b02 ldr r3, [pc, #8] ; (8038384 <SNMP_AgentInit+0x60>)
- 803837c: 6018 str r0, [r3, #0]
- 803837e: bd10 pop {r4, pc}
- 8038380: 2000d195 .word 0x2000d195
- 8038384: 2000fab8 .word 0x2000fab8
- 08038388 <SNMP_Init>:
- * @retval
- */
- void SNMP_Init(void)
- {
- //SETTINGS_SetSnmpDef();
- SNMP_AgentInit();
- 8038388: f7ff bfcc b.w 8038324 <SNMP_AgentInit>
- 803838c: 0000 movs r0, r0
- 803838e: 0000 movs r0, r0
- 08038390 <recv>:
- SNTP_Enable(sSettings.sSNTP.sntpEnable);
- }
- static void recv(void *arg, struct udp_pcb *upcb, struct pbuf *p,
- struct ip_addr *addr, u16_t port)
- {
- 8038390: b570 push {r4, r5, r6, lr}
- 8038392: 4616 mov r6, r2
- time_t t;
- int utcSec = 0;
- TM_RTC_t data;
-
- if (p->len == sizeof(struct sntp_packet))
- 8038394: 8952 ldrh r2, [r2, #10]
- 8038396: 2a30 cmp r2, #48 ; 0x30
- SNTP_Enable(sSettings.sSNTP.sntpEnable);
- }
- static void recv(void *arg, struct udp_pcb *upcb, struct pbuf *p,
- struct ip_addr *addr, u16_t port)
- {
- 8038398: b094 sub sp, #80 ; 0x50
- time_t t;
- int utcSec = 0;
- TM_RTC_t data;
-
- if (p->len == sizeof(struct sntp_packet))
- 803839a: d149 bne.n 8038430 <recv+0xa0>
- {
- int i;
- struct sntp_packet aligned;
- //myassert(p->len == p->tot_len); /* don't accept chained pbuf */
- memcpy(&aligned, p->payload, sizeof(aligned));
- 803839c: a808 add r0, sp, #32
- 803839e: 6871 ldr r1, [r6, #4]
- 80383a0: f7e9 faf4 bl 802198c <memcpy>
- i = (aligned.status >> 3) & 7;
- 80383a4: f89d 3020 ldrb.w r3, [sp, #32]
-
- if ((i < 1) || (i > 4)) /* SNTP version 1..4 */
- 80383a8: f3c3 02c2 ubfx r2, r3, #3, #3
- 80383ac: 3a01 subs r2, #1
- 80383ae: 2a03 cmp r2, #3
- 80383b0: d83e bhi.n 8038430 <recv+0xa0>
- goto out;
- i = aligned.status & 7;
- if ((i != 4) && (i != 5)) /* mode 4 or 5: server or broadcast */
- 80383b2: f003 0307 and.w r3, r3, #7
- 80383b6: 3b04 subs r3, #4
- 80383b8: 2b01 cmp r3, #1
- 80383ba: d839 bhi.n 8038430 <recv+0xa0>
- goto out;
- if (aligned.xmt == 0)
- 80383bc: e9dd 4512 ldrd r4, r5, [sp, #72] ; 0x48
- 80383c0: ea54 0305 orrs.w r3, r4, r5
- 80383c4: d034 beq.n 8038430 <recv+0xa0>
- goto out;
-
- utcSec = (int)(3600.0*sSettings.sSNTP.timeZone);
- 80383c6: 4b20 ldr r3, [pc, #128] ; (8038448 <recv+0xb8>)
- 80383c8: f8d3 0370 ldr.w r0, [r3, #880] ; 0x370
- 80383cc: f7e8 f8a4 bl 8020518 <__aeabi_f2d>
- 80383d0: a31b add r3, pc, #108 ; (adr r3, 8038440 <recv+0xb0>)
- 80383d2: e9d3 2300 ldrd r2, r3, [r3]
- 80383d6: f7e8 f8f3 bl 80205c0 <__aeabi_dmul>
- 80383da: f7e8 fb8b bl 8020af4 <__aeabi_d2iz>
- 80383de: 4605 mov r5, r0
- t = (ntohl(aligned.xmt) - 2208988800 + utcSec );
- 80383e0: 4620 mov r0, r4
- 80383e2: f7f6 fbe1 bl 802eba8 <lwip_ntohl>
- 80383e6: 4b19 ldr r3, [pc, #100] ; (803844c <recv+0xbc>)
- 80383e8: 18eb adds r3, r5, r3
-
- TM_RTC_SetDataTimeUnix((uint32_t)t);
- 80383ea: 1818 adds r0, r3, r0
- 80383ec: f7ee f968 bl 80266c0 <TM_RTC_SetDataTimeUnix>
-
- /* Сохраним время последней синхронизации */
- TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
- 80383f0: a804 add r0, sp, #16
- 80383f2: 2100 movs r1, #0
- 80383f4: f7ee f848 bl 8026488 <TM_RTC_GetDateTime>
-
- memset(sSettings.sSNTP.data, 0, sizeof(sSettings.sSNTP.data));
- 80383f8: 2100 movs r1, #0
- 80383fa: 221e movs r2, #30
- 80383fc: 4814 ldr r0, [pc, #80] ; (8038450 <recv+0xc0>)
- 80383fe: f7e9 fb7f bl 8021b00 <memset>
-
- sprintf(sSettings.sSNTP.data, "%02d.%02d.%02d %02d:%02d:%02d",
- 8038402: f89d 1019 ldrb.w r1, [sp, #25]
- 8038406: f89d 2017 ldrb.w r2, [sp, #23]
- 803840a: 9100 str r1, [sp, #0]
- 803840c: f89d 1015 ldrb.w r1, [sp, #21]
- 8038410: f89d 3018 ldrb.w r3, [sp, #24]
- 8038414: 9101 str r1, [sp, #4]
- 8038416: f89d 1014 ldrb.w r1, [sp, #20]
- 803841a: 480d ldr r0, [pc, #52] ; (8038450 <recv+0xc0>)
- 803841c: 9102 str r1, [sp, #8]
- 803841e: f89d 1010 ldrb.w r1, [sp, #16]
- 8038422: 9103 str r1, [sp, #12]
- 8038424: 490b ldr r1, [pc, #44] ; (8038454 <recv+0xc4>)
- 8038426: f7ef f9f5 bl 8027814 <tfp_sprintf>
- data.date, data.month, data.year,
- data.hours, data.minutes, data.seconds);
-
- timeout = VALID_TIMEOUT;
- 803842a: 4a0b ldr r2, [pc, #44] ; (8038458 <recv+0xc8>)
- 803842c: 4b0b ldr r3, [pc, #44] ; (803845c <recv+0xcc>)
- 803842e: 601a str r2, [r3, #0]
-
- }
- out:
- pbuf_free(p);
- 8038430: 4630 mov r0, r6
- 8038432: f7f7 fceb bl 802fe0c <pbuf_free>
- }
- 8038436: b014 add sp, #80 ; 0x50
- 8038438: bd70 pop {r4, r5, r6, pc}
- 803843a: bf00 nop
- 803843c: f3af 8000 nop.w
- 8038440: 00000000 .word 0x00000000
- 8038444: 40ac2000 .word 0x40ac2000
- 8038448: 2000cfc4 .word 0x2000cfc4
- 803844c: 7c558180 .word 0x7c558180
- 8038450: 2000d315 .word 0x2000d315
- 8038454: 08045ae4 .word 0x08045ae4
- 8038458: 01b77400 .word 0x01b77400
- 803845c: 2000c7fc .word 0x2000c7fc
- 08038460 <SNTP_Enable>:
- void SNTP_Enable(bool enable)
- {
- 8038460: b538 push {r3, r4, r5, lr}
- if (enable)
- 8038462: 4605 mov r5, r0
- 8038464: 4c0f ldr r4, [pc, #60] ; (80384a4 <SNTP_Enable+0x44>)
- 8038466: b1b8 cbz r0, 8038498 <SNTP_Enable+0x38>
- {
- if (upcb == 0)
- 8038468: 6825 ldr r5, [r4, #0]
- 803846a: b9d5 cbnz r5, 80384a2 <SNTP_Enable+0x42>
- {
- err_t ret;
- upcb = udp_new();
- 803846c: f7fa fb58 bl 8032b20 <udp_new>
- 8038470: 6020 str r0, [r4, #0]
- if (upcb != 0)
- 8038472: b1b0 cbz r0, 80384a2 <SNTP_Enable+0x42>
- {
- ret = udp_bind(upcb, IP_ADDR_ANY, port);
- 8038474: 227b movs r2, #123 ; 0x7b
- 8038476: 490c ldr r1, [pc, #48] ; (80384a8 <SNTP_Enable+0x48>)
- 8038478: f7fa fa3a bl 80328f0 <udp_bind>
- if (ret != ERR_OK)
- 803847c: 4602 mov r2, r0
- {
- udp_remove(upcb);
- 803847e: 6820 ldr r0, [r4, #0]
- upcb = udp_new();
- if (upcb != 0)
- {
- ret = udp_bind(upcb, IP_ADDR_ANY, port);
- if (ret != ERR_OK)
- 8038480: b11a cbz r2, 803848a <SNTP_Enable+0x2a>
- {
- udp_remove(upcb);
- 8038482: f7fa fb31 bl 8032ae8 <udp_remove>
- upcb = 0;
- 8038486: 6025 str r5, [r4, #0]
- 8038488: e002 b.n 8038490 <SNTP_Enable+0x30>
- }
- else
- {
- udp_recv(upcb, recv, 0);
- 803848a: 4908 ldr r1, [pc, #32] ; (80384ac <SNTP_Enable+0x4c>)
- 803848c: f7fa fb28 bl 8032ae0 <udp_recv>
- }
- timeout = 0;
- 8038490: 4b07 ldr r3, [pc, #28] ; (80384b0 <SNTP_Enable+0x50>)
- 8038492: 2200 movs r2, #0
- 8038494: 601a str r2, [r3, #0]
- 8038496: bd38 pop {r3, r4, r5, pc}
- }
- }
- }
- else if (upcb != 0)
- 8038498: 6820 ldr r0, [r4, #0]
- 803849a: b110 cbz r0, 80384a2 <SNTP_Enable+0x42>
- {
- udp_remove(upcb);
- 803849c: f7fa fb24 bl 8032ae8 <udp_remove>
- upcb = 0;
- 80384a0: 6025 str r5, [r4, #0]
- 80384a2: bd38 pop {r3, r4, r5, pc}
- 80384a4: 2000c7f8 .word 0x2000c7f8
- 80384a8: 08045008 .word 0x08045008
- 80384ac: 08038391 .word 0x08038391
- 80384b0: 2000c7fc .word 0x2000c7fc
- 080384b4 <SNTP_SetServerAddr>:
- {
- return upcb != 0;
- }
- void SNTP_SetServerAddr(char *addr)
- {
- 80384b4: b508 push {r3, lr}
- server.addr = ipaddr_addr(addr);
- 80384b6: f7fa fcfc bl 8032eb2 <ipaddr_addr>
- 80384ba: 4b01 ldr r3, [pc, #4] ; (80384c0 <SNTP_SetServerAddr+0xc>)
- 80384bc: 6018 str r0, [r3, #0]
- 80384be: bd08 pop {r3, pc}
- 80384c0: 2000c7f4 .word 0x2000c7f4
- 080384c4 <SNTP_Init>:
- /**
- * @brief Инициализация SNTP.
- * @retval
- */
- void SNTP_Init(void)
- {
- 80384c4: b508 push {r3, lr}
-
-
- SNTP_SetServerAddr(sSettings.sSNTP.ip);
- 80384c6: 4805 ldr r0, [pc, #20] ; (80384dc <SNTP_Init+0x18>)
- 80384c8: f7ff fff4 bl 80384b4 <SNTP_SetServerAddr>
- SNTP_Enable(sSettings.sSNTP.sntpEnable);
- 80384cc: 4b04 ldr r3, [pc, #16] ; (80384e0 <SNTP_Init+0x1c>)
- 80384ce: f893 0340 ldrb.w r0, [r3, #832] ; 0x340
- }
- 80384d2: e8bd 4008 ldmia.w sp!, {r3, lr}
- void SNTP_Init(void)
- {
-
-
- SNTP_SetServerAddr(sSettings.sSNTP.ip);
- SNTP_Enable(sSettings.sSNTP.sntpEnable);
- 80384d6: f7ff bfc3 b.w 8038460 <SNTP_Enable>
- 80384da: bf00 nop
- 80384dc: 2000d305 .word 0x2000d305
- 80384e0: 2000cfc4 .word 0x2000cfc4
- 080384e4 <SNTP_Poll>:
- pbuf_free(psend);
- }
- }
- void SNTP_Poll(void)
- {
- 80384e4: b530 push {r4, r5, lr}
- if (upcb)
- 80384e6: 4d15 ldr r5, [pc, #84] ; (803853c <SNTP_Poll+0x58>)
- 80384e8: 682b ldr r3, [r5, #0]
- pbuf_free(psend);
- }
- }
- void SNTP_Poll(void)
- {
- 80384ea: b08d sub sp, #52 ; 0x34
- if (upcb)
- 80384ec: b31b cbz r3, 8038536 <SNTP_Poll+0x52>
- static void send_request(void)
- {
- struct sntp_packet packet;
- struct pbuf* psend;
- memset(&packet, 0, sizeof(packet));
- 80384ee: 2100 movs r1, #0
- 80384f0: 2230 movs r2, #48 ; 0x30
- 80384f2: 4668 mov r0, sp
- 80384f4: f7e9 fb04 bl 8021b00 <memset>
- packet.status = (3 << 3) /* SNTP vesion 3 */ | (3 << 0); /* Mode: client */
- 80384f8: 231b movs r3, #27
- psend = pbuf_alloc(PBUF_RAW, sizeof(packet), PBUF_REF);
- 80384fa: 2003 movs r0, #3
- 80384fc: 2130 movs r1, #48 ; 0x30
- 80384fe: 2202 movs r2, #2
- static void send_request(void)
- {
- struct sntp_packet packet;
- struct pbuf* psend;
- memset(&packet, 0, sizeof(packet));
- packet.status = (3 << 3) /* SNTP vesion 3 */ | (3 << 0); /* Mode: client */
- 8038500: f88d 3000 strb.w r3, [sp]
- psend = pbuf_alloc(PBUF_RAW, sizeof(packet), PBUF_REF);
- 8038504: f7f7 fccf bl 802fea6 <pbuf_alloc>
-
- if (psend != 0)
- 8038508: 4604 mov r4, r0
- 803850a: b1a0 cbz r0, 8038536 <SNTP_Poll+0x52>
- {
- psend->payload = &packet;
- 803850c: ab00 add r3, sp, #0
- 803850e: 6043 str r3, [r0, #4]
- timeout = (udp_sendto(upcb, psend, &server, port) == ERR_OK) ? SENT_TIMEOUT : SENDFAIL_TIMEOUT;
- 8038510: 4621 mov r1, r4
- 8038512: 4a0b ldr r2, [pc, #44] ; (8038540 <SNTP_Poll+0x5c>)
- 8038514: 6828 ldr r0, [r5, #0]
- 8038516: 237b movs r3, #123 ; 0x7b
- 8038518: f7fa fa9b bl 8032a52 <udp_sendto>
- 803851c: f64e 2360 movw r3, #60000 ; 0xea60
- 8038520: f241 3288 movw r2, #5000 ; 0x1388
- 8038524: 4907 ldr r1, [pc, #28] ; (8038544 <SNTP_Poll+0x60>)
- 8038526: 2800 cmp r0, #0
- 8038528: bf14 ite ne
- 803852a: 4610 movne r0, r2
- 803852c: 4618 moveq r0, r3
- 803852e: 6008 str r0, [r1, #0]
- pbuf_free(psend);
- 8038530: 4620 mov r0, r4
- 8038532: f7f7 fc6b bl 802fe0c <pbuf_free>
- void SNTP_Poll(void)
- {
- if (upcb)
- send_request();
- }
- 8038536: b00d add sp, #52 ; 0x34
- 8038538: bd30 pop {r4, r5, pc}
- 803853a: bf00 nop
- 803853c: 2000c7f8 .word 0x2000c7f8
- 8038540: 2000c7f4 .word 0x2000c7f4
- 8038544: 2000c7fc .word 0x2000c7fc
- 08038548 <vTaskPeriodicSynchro>:
- * @brief Периодическая синхронизация времени.
- * Выполняется раз в сутки с 0 часов.
- * @retval
- */
- void vTaskPeriodicSynchro(void *arg)
- {
- 8038548: b530 push {r4, r5, lr}
- static uint8_t fSinhro = 0;
-
- for (;;)
- {
- vTaskDelay(10000);
- if (sSettings.sSNTP.sntpEnable)
- 803854a: 4d0f ldr r5, [pc, #60] ; (8038588 <vTaskPeriodicSynchro+0x40>)
- fSinhro = 1;
- //printf("Periodic time sinhro\n\r");
- }
-
- if (data.hours > 1)
- fSinhro = 0;
- 803854c: 4c0f ldr r4, [pc, #60] ; (803858c <vTaskPeriodicSynchro+0x44>)
- * @brief Периодическая синхронизация времени.
- * Выполняется раз в сутки с 0 часов.
- * @retval
- */
- void vTaskPeriodicSynchro(void *arg)
- {
- 803854e: b085 sub sp, #20
-
- static uint8_t fSinhro = 0;
-
- for (;;)
- {
- vTaskDelay(10000);
- 8038550: f242 7010 movw r0, #10000 ; 0x2710
- 8038554: f7f2 fd3a bl 802afcc <vTaskDelay>
- if (sSettings.sSNTP.sntpEnable)
- 8038558: f895 3340 ldrb.w r3, [r5, #832] ; 0x340
- 803855c: 2b00 cmp r3, #0
- 803855e: d0f7 beq.n 8038550 <vTaskPeriodicSynchro+0x8>
- {
- TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
- 8038560: 4668 mov r0, sp
- 8038562: 2100 movs r1, #0
- 8038564: f7ed ff90 bl 8026488 <TM_RTC_GetDateTime>
-
- /* Если пришло время синхронизации */
- if ((data.hours == 0) && (fSinhro == 0))
- 8038568: f89d 3005 ldrb.w r3, [sp, #5]
- 803856c: b92b cbnz r3, 803857a <vTaskPeriodicSynchro+0x32>
- 803856e: 7823 ldrb r3, [r4, #0]
- 8038570: b91b cbnz r3, 803857a <vTaskPeriodicSynchro+0x32>
- {
- SNTP_Poll();
- 8038572: f7ff ffb7 bl 80384e4 <SNTP_Poll>
- fSinhro = 1;
- 8038576: 2301 movs r3, #1
- 8038578: 7023 strb r3, [r4, #0]
- //printf("Periodic time sinhro\n\r");
- }
-
- if (data.hours > 1)
- 803857a: f89d 3005 ldrb.w r3, [sp, #5]
- 803857e: 2b01 cmp r3, #1
- 8038580: d9e6 bls.n 8038550 <vTaskPeriodicSynchro+0x8>
- fSinhro = 0;
- 8038582: 2300 movs r3, #0
- 8038584: 7023 strb r3, [r4, #0]
- 8038586: e7e3 b.n 8038550 <vTaskPeriodicSynchro+0x8>
- 8038588: 2000cfc4 .word 0x2000cfc4
- 803858c: 2000c7f1 .word 0x2000c7f1
- 08038590 <vTaskOnceSynchro>:
- /**
- * @brief Синхронизация времени единоразово при включении контроллера
- * @retval
- */
- void vTaskOnceSynchro(void *arg)
- {
- 8038590: b538 push {r3, r4, r5, lr}
- for (;;)
- {
- if (sSettings.sSNTP.sntpEnable)
- 8038592: 4d07 ldr r5, [pc, #28] ; (80385b0 <vTaskOnceSynchro+0x20>)
- 8038594: 4c07 ldr r4, [pc, #28] ; (80385b4 <vTaskOnceSynchro+0x24>)
- 8038596: f895 3340 ldrb.w r3, [r5, #832] ; 0x340
- 803859a: b12b cbz r3, 80385a8 <vTaskOnceSynchro+0x18>
- {
- vTaskDelay(7000);
- 803859c: f641 3058 movw r0, #7000 ; 0x1b58
- 80385a0: f7f2 fd14 bl 802afcc <vTaskDelay>
- SNTP_Poll();
- 80385a4: f7ff ff9e bl 80384e4 <SNTP_Poll>
- //printf("Once time sinhro\n\r");
- vTaskDelete(xHandleSntpOnceSinhro);
- }
- else
- vTaskDelete(xHandleSntpOnceSinhro);
- 80385a8: 6820 ldr r0, [r4, #0]
- 80385aa: f7f2 fb4d bl 802ac48 <vTaskDelete>
- 80385ae: e7f2 b.n 8038596 <vTaskOnceSynchro+0x6>
- 80385b0: 2000cfc4 .word 0x2000cfc4
- 80385b4: 20000b0c .word 0x20000b0c
- 080385b8 <SNMP_InitTrapsBase>:
- * @retval
- */
- void SNMP_InitTrapsBase(void)
- {
- /* 1. FWVersionUpdate */ // +
- traps[FW_VERSION_UPDATE].trapId = FW_VERSION_UPDATE;
- 80385b8: 4b53 ldr r3, [pc, #332] ; (8038708 <SNMP_InitTrapsBase+0x150>)
- traps[FW_VERSION_UPDATE].varbindId = 1;
- traps[FW_VERSION_UPDATE].trapEnable = true;
- traps[FW_VERSION_UPDATE].handle = GetVersionStr; /* FWVersion */
- 80385ba: 4954 ldr r1, [pc, #336] ; (803870c <SNMP_InitTrapsBase+0x154>)
-
- /* 2. FWVersionUpdated */ // +
- traps[FW_VERSION_UPDATED].trapId = FW_VERSION_UPDATED;
- 80385bc: 2002 movs r0, #2
- /**
- * @brief Инициализация базы трапов
- * @retval
- */
- void SNMP_InitTrapsBase(void)
- {
- 80385be: b570 push {r4, r5, r6, lr}
- traps[FW_VERSION_UPDATE].varbindId = 1;
- traps[FW_VERSION_UPDATE].trapEnable = true;
- traps[FW_VERSION_UPDATE].handle = GetVersionStr; /* FWVersion */
-
- /* 2. FWVersionUpdated */ // +
- traps[FW_VERSION_UPDATED].trapId = FW_VERSION_UPDATED;
- 80385c0: 7458 strb r0, [r3, #17]
- traps[FW_VERSION_UPDATED].varbindId = 1;
- traps[FW_VERSION_UPDATED].trapEnable = true;
- traps[FW_VERSION_UPDATED].handle = GetVersionStr; /* FWVersion */
-
- /* 3. DeviceRestored */ // +
- traps[DEVICE_RESTORED].trapId = DEVICE_RESTORED;
- 80385c2: 2003 movs r0, #3
- 80385c4: 7658 strb r0, [r3, #25]
- traps[DEVICE_RESTORED].varbindId = 1;
- traps[DEVICE_RESTORED].trapEnable = true;
- traps[DEVICE_RESTORED].handle = GetVersionStr;//GetRestore; /* RestoreSignal */
-
- /* 4. DeviceRebooted */ // +
- traps[DEVICE_REBOOTED].trapId = DEVICE_REBOOTED;
- 80385c6: 2004 movs r0, #4
- traps[DEVICE_REBOOTED].varbindId = 1;
- traps[DEVICE_REBOOTED].trapEnable = true;
- traps[DEVICE_REBOOTED].handle = GetVersionStr;//GetReboot; /* RebootSignal */
-
- /* 5. DI0Norm */ // +
- traps[DI0_NORM].trapId = DI0_NORM;
- 80385c8: 2405 movs r4, #5
- traps[DEVICE_RESTORED].varbindId = 1;
- traps[DEVICE_RESTORED].trapEnable = true;
- traps[DEVICE_RESTORED].handle = GetVersionStr;//GetRestore; /* RestoreSignal */
-
- /* 4. DeviceRebooted */ // +
- traps[DEVICE_REBOOTED].trapId = DEVICE_REBOOTED;
- 80385ca: f883 0021 strb.w r0, [r3, #33] ; 0x21
- traps[DI0_NORM].varbindId = 9;
- traps[DI0_NORM].trapEnable = true;
- traps[DI0_NORM].handle = GetDIN0StatusStr; /* State DIN */
- /* 6. DI0Alarm */ // +
- traps[DI0_ALARM].trapId = DI0_ALARM;
- 80385ce: 2006 movs r0, #6
-
- /* 5. DI0Norm */ // +
- traps[DI0_NORM].trapId = DI0_NORM;
- traps[DI0_NORM].varbindId = 9;
- traps[DI0_NORM].trapEnable = true;
- traps[DI0_NORM].handle = GetDIN0StatusStr; /* State DIN */
- 80385d0: 4d4f ldr r5, [pc, #316] ; (8038710 <SNMP_InitTrapsBase+0x158>)
- traps[DEVICE_REBOOTED].varbindId = 1;
- traps[DEVICE_REBOOTED].trapEnable = true;
- traps[DEVICE_REBOOTED].handle = GetVersionStr;//GetReboot; /* RebootSignal */
-
- /* 5. DI0Norm */ // +
- traps[DI0_NORM].trapId = DI0_NORM;
- 80385d2: f883 4029 strb.w r4, [r3, #41] ; 0x29
- traps[DI0_NORM].varbindId = 9;
- traps[DI0_NORM].trapEnable = true;
- traps[DI0_NORM].handle = GetDIN0StatusStr; /* State DIN */
- /* 6. DI0Alarm */ // +
- traps[DI0_ALARM].trapId = DI0_ALARM;
- 80385d6: f883 0031 strb.w r0, [r3, #49] ; 0x31
- traps[DI0_ALARM].trapEnable = true;
- traps[DI0_ALARM].handle = GetDIN0StatusStr; /* State DIN */
- /* 7. DO0Toggle */ // +
- traps[DO0_TOGGLED].trapId = DO0_TOGGLED;
- traps[DO0_TOGGLED].varbindId = 5;
- 80385da: f883 403a strb.w r4, [r3, #58] ; 0x3a
- traps[DO0_TOGGLED].trapEnable = true;
- traps[DO0_TOGGLED].handle = GetDOUT0StatusStr; /* State DO0 */
- /* 8. DO1Toggle */ // +
- traps[DO1_TOGGLED].trapId = DO1_TOGGLED;
- traps[DO1_TOGGLED].varbindId = 6;
- 80385de: f883 0042 strb.w r0, [r3, #66] ; 0x42
- /* 7. DO0Toggle */ // +
- traps[DO0_TOGGLED].trapId = DO0_TOGGLED;
- traps[DO0_TOGGLED].varbindId = 5;
- traps[DO0_TOGGLED].trapEnable = true;
- traps[DO0_TOGGLED].handle = GetDOUT0StatusStr; /* State DO0 */
- 80385e2: 4c4c ldr r4, [pc, #304] ; (8038714 <SNMP_InitTrapsBase+0x15c>)
- /* 8. DO1Toggle */ // +
- traps[DO1_TOGGLED].trapId = DO1_TOGGLED;
- traps[DO1_TOGGLED].varbindId = 6;
- traps[DO1_TOGGLED].trapEnable = true;
- traps[DO1_TOGGLED].handle = GetDOUT1StatusStr; /* State DO1 */
- 80385e4: 484c ldr r0, [pc, #304] ; (8038718 <SNMP_InitTrapsBase+0x160>)
- {
- /* 1. FWVersionUpdate */ // +
- traps[FW_VERSION_UPDATE].trapId = FW_VERSION_UPDATE;
- traps[FW_VERSION_UPDATE].varbindId = 1;
- traps[FW_VERSION_UPDATE].trapEnable = true;
- traps[FW_VERSION_UPDATE].handle = GetVersionStr; /* FWVersion */
- 80385e6: 60d9 str r1, [r3, #12]
- * @retval
- */
- void SNMP_InitTrapsBase(void)
- {
- /* 1. FWVersionUpdate */ // +
- traps[FW_VERSION_UPDATE].trapId = FW_VERSION_UPDATE;
- 80385e8: 2201 movs r2, #1
-
- /* 2. FWVersionUpdated */ // +
- traps[FW_VERSION_UPDATED].trapId = FW_VERSION_UPDATED;
- traps[FW_VERSION_UPDATED].varbindId = 1;
- traps[FW_VERSION_UPDATED].trapEnable = true;
- traps[FW_VERSION_UPDATED].handle = GetVersionStr; /* FWVersion */
- 80385ea: 6159 str r1, [r3, #20]
-
- /* 3. DeviceRestored */ // +
- traps[DEVICE_RESTORED].trapId = DEVICE_RESTORED;
- traps[DEVICE_RESTORED].varbindId = 1;
- traps[DEVICE_RESTORED].trapEnable = true;
- traps[DEVICE_RESTORED].handle = GetVersionStr;//GetRestore; /* RestoreSignal */
- 80385ec: 61d9 str r1, [r3, #28]
-
- /* 4. DeviceRebooted */ // +
- traps[DEVICE_REBOOTED].trapId = DEVICE_REBOOTED;
- traps[DEVICE_REBOOTED].varbindId = 1;
- traps[DEVICE_REBOOTED].trapEnable = true;
- traps[DEVICE_REBOOTED].handle = GetVersionStr;//GetReboot; /* RebootSignal */
- 80385ee: 6259 str r1, [r3, #36] ; 0x24
-
- /* 5. DI0Norm */ // +
- traps[DI0_NORM].trapId = DI0_NORM;
- traps[DI0_NORM].varbindId = 9;
- traps[DI0_NORM].trapEnable = true;
- traps[DI0_NORM].handle = GetDIN0StatusStr; /* State DIN */
- 80385f0: 62dd str r5, [r3, #44] ; 0x2c
- traps[DEVICE_REBOOTED].trapEnable = true;
- traps[DEVICE_REBOOTED].handle = GetVersionStr;//GetReboot; /* RebootSignal */
-
- /* 5. DI0Norm */ // +
- traps[DI0_NORM].trapId = DI0_NORM;
- traps[DI0_NORM].varbindId = 9;
- 80385f2: 2109 movs r1, #9
- /* 6. DI0Alarm */ // +
- traps[DI0_ALARM].trapId = DI0_ALARM;
- traps[DI0_ALARM].varbindId = 9;
- traps[DI0_ALARM].trapEnable = true;
- traps[DI0_ALARM].handle = GetDIN0StatusStr; /* State DIN */
- 80385f4: 635d str r5, [r3, #52] ; 0x34
- /* 7. DO0Toggle */ // +
- traps[DO0_TOGGLED].trapId = DO0_TOGGLED;
- traps[DO0_TOGGLED].varbindId = 5;
- traps[DO0_TOGGLED].trapEnable = true;
- traps[DO0_TOGGLED].handle = GetDOUT0StatusStr; /* State DO0 */
- 80385f6: 63dc str r4, [r3, #60] ; 0x3c
- traps[DI0_ALARM].varbindId = 9;
- traps[DI0_ALARM].trapEnable = true;
- traps[DI0_ALARM].handle = GetDIN0StatusStr; /* State DIN */
- /* 7. DO0Toggle */ // +
- traps[DO0_TOGGLED].trapId = DO0_TOGGLED;
- 80385f8: 2507 movs r5, #7
- traps[DO0_TOGGLED].varbindId = 5;
- traps[DO0_TOGGLED].trapEnable = true;
- traps[DO0_TOGGLED].handle = GetDOUT0StatusStr; /* State DO0 */
- /* 8. DO1Toggle */ // +
- traps[DO1_TOGGLED].trapId = DO1_TOGGLED;
- 80385fa: 2408 movs r4, #8
- traps[DO1_TOGGLED].varbindId = 6;
- traps[DO1_TOGGLED].trapEnable = true;
- traps[DO1_TOGGLED].handle = GetDOUT1StatusStr; /* State DO1 */
- 80385fc: 6458 str r0, [r3, #68] ; 0x44
- /* 9. BatteryTemperatureNorm */ // +
- traps[BATTERY_TEMPERATURE_NORM].trapId = BATTERY_TEMPERATURE_NORM;
- traps[BATTERY_TEMPERATURE_NORM].varbindId = 10;
- traps[BATTERY_TEMPERATURE_NORM].trapEnable = true;
- traps[BATTERY_TEMPERATURE_NORM].handle = GetInternalTempStr; /* BatteryTemperature */
- 80385fe: 4847 ldr r0, [pc, #284] ; (803871c <SNMP_InitTrapsBase+0x164>)
- traps[DEVICE_REBOOTED].trapEnable = true;
- traps[DEVICE_REBOOTED].handle = GetVersionStr;//GetReboot; /* RebootSignal */
-
- /* 5. DI0Norm */ // +
- traps[DI0_NORM].trapId = DI0_NORM;
- traps[DI0_NORM].varbindId = 9;
- 8038600: f883 102a strb.w r1, [r3, #42] ; 0x2a
- traps[DI0_NORM].trapEnable = true;
- traps[DI0_NORM].handle = GetDIN0StatusStr; /* State DIN */
- /* 6. DI0Alarm */ // +
- traps[DI0_ALARM].trapId = DI0_ALARM;
- traps[DI0_ALARM].varbindId = 9;
- 8038604: f883 1032 strb.w r1, [r3, #50] ; 0x32
- traps[DI0_ALARM].trapEnable = true;
- traps[DI0_ALARM].handle = GetDIN0StatusStr; /* State DIN */
- /* 7. DO0Toggle */ // +
- traps[DO0_TOGGLED].trapId = DO0_TOGGLED;
- 8038608: f883 5039 strb.w r5, [r3, #57] ; 0x39
- traps[DO0_TOGGLED].varbindId = 5;
- traps[DO0_TOGGLED].trapEnable = true;
- traps[DO0_TOGGLED].handle = GetDOUT0StatusStr; /* State DO0 */
- /* 8. DO1Toggle */ // +
- traps[DO1_TOGGLED].trapId = DO1_TOGGLED;
- 803860c: f883 4041 strb.w r4, [r3, #65] ; 0x41
- * @retval
- */
- void SNMP_InitTrapsBase(void)
- {
- /* 1. FWVersionUpdate */ // +
- traps[FW_VERSION_UPDATE].trapId = FW_VERSION_UPDATE;
- 8038610: 725a strb r2, [r3, #9]
- traps[FW_VERSION_UPDATE].varbindId = 1;
- 8038612: 729a strb r2, [r3, #10]
- traps[FW_VERSION_UPDATE].trapEnable = true;
- 8038614: 72da strb r2, [r3, #11]
- traps[FW_VERSION_UPDATE].handle = GetVersionStr; /* FWVersion */
-
- /* 2. FWVersionUpdated */ // +
- traps[FW_VERSION_UPDATED].trapId = FW_VERSION_UPDATED;
- traps[FW_VERSION_UPDATED].varbindId = 1;
- 8038616: 749a strb r2, [r3, #18]
- traps[FW_VERSION_UPDATED].trapEnable = true;
- 8038618: 74da strb r2, [r3, #19]
- traps[FW_VERSION_UPDATED].handle = GetVersionStr; /* FWVersion */
-
- /* 3. DeviceRestored */ // +
- traps[DEVICE_RESTORED].trapId = DEVICE_RESTORED;
- traps[DEVICE_RESTORED].varbindId = 1;
- 803861a: 769a strb r2, [r3, #26]
- traps[DEVICE_RESTORED].trapEnable = true;
- 803861c: 76da strb r2, [r3, #27]
- traps[DEVICE_RESTORED].handle = GetVersionStr;//GetRestore; /* RestoreSignal */
-
- /* 4. DeviceRebooted */ // +
- traps[DEVICE_REBOOTED].trapId = DEVICE_REBOOTED;
- traps[DEVICE_REBOOTED].varbindId = 1;
- 803861e: f883 2022 strb.w r2, [r3, #34] ; 0x22
- traps[DEVICE_REBOOTED].trapEnable = true;
- 8038622: f883 2023 strb.w r2, [r3, #35] ; 0x23
- traps[DEVICE_REBOOTED].handle = GetVersionStr;//GetReboot; /* RebootSignal */
-
- /* 5. DI0Norm */ // +
- traps[DI0_NORM].trapId = DI0_NORM;
- traps[DI0_NORM].varbindId = 9;
- traps[DI0_NORM].trapEnable = true;
- 8038626: f883 202b strb.w r2, [r3, #43] ; 0x2b
- traps[DI0_NORM].handle = GetDIN0StatusStr; /* State DIN */
- /* 6. DI0Alarm */ // +
- traps[DI0_ALARM].trapId = DI0_ALARM;
- traps[DI0_ALARM].varbindId = 9;
- traps[DI0_ALARM].trapEnable = true;
- 803862a: f883 2033 strb.w r2, [r3, #51] ; 0x33
- traps[DI0_ALARM].handle = GetDIN0StatusStr; /* State DIN */
- /* 7. DO0Toggle */ // +
- traps[DO0_TOGGLED].trapId = DO0_TOGGLED;
- traps[DO0_TOGGLED].varbindId = 5;
- traps[DO0_TOGGLED].trapEnable = true;
- 803862e: f883 203b strb.w r2, [r3, #59] ; 0x3b
- traps[DO0_TOGGLED].handle = GetDOUT0StatusStr; /* State DO0 */
- /* 8. DO1Toggle */ // +
- traps[DO1_TOGGLED].trapId = DO1_TOGGLED;
- traps[DO1_TOGGLED].varbindId = 6;
- traps[DO1_TOGGLED].trapEnable = true;
- 8038632: f883 2043 strb.w r2, [r3, #67] ; 0x43
- traps[DO1_TOGGLED].handle = GetDOUT1StatusStr; /* State DO1 */
- /* 9. BatteryTemperatureNorm */ // +
- traps[BATTERY_TEMPERATURE_NORM].trapId = BATTERY_TEMPERATURE_NORM;
- 8038636: f883 1049 strb.w r1, [r3, #73] ; 0x49
- traps[BATTERY_TEMPERATURE_NORM].varbindId = 10;
- 803863a: 210a movs r1, #10
- 803863c: f883 104a strb.w r1, [r3, #74] ; 0x4a
- traps[BATTERY_TEMPERATURE_NORM].trapEnable = true;
- traps[BATTERY_TEMPERATURE_NORM].handle = GetInternalTempStr; /* BatteryTemperature */
- 8038640: 64d8 str r0, [r3, #76] ; 0x4c
-
- /* 10. BatteryTemperatureAlarm */ // +
- traps[BATTERY_TEMPERATURE_ALARM].trapId = BATTERY_TEMPERATURE_ALARM;
- 8038642: f883 1051 strb.w r1, [r3, #81] ; 0x51
- traps[BATTERY_TEMPERATURE_ALARM].varbindId = 10;
- 8038646: f883 1052 strb.w r1, [r3, #82] ; 0x52
- traps[BATTERY_TEMPERATURE_ALARM].trapEnable = true;
- traps[BATTERY_TEMPERATURE_ALARM].handle = GetInternalTempStr; /* BatteryTemperature */
- 803864a: 6558 str r0, [r3, #84] ; 0x54
-
- /* 11. LineAlarm */ // +
- traps[LINE_ALARM].trapId = LINE_ALARM;
- 803864c: 210b movs r1, #11
- traps[LINE_ALARM].varbindId = 12;
- traps[LINE_ALARM].trapEnable = true;
- traps[LINE_ALARM].handle = GetInputVoltageStr; /* LineAlarm */
- 803864e: 4834 ldr r0, [pc, #208] ; (8038720 <SNMP_InitTrapsBase+0x168>)
- traps[BATTERY_TEMPERATURE_ALARM].varbindId = 10;
- traps[BATTERY_TEMPERATURE_ALARM].trapEnable = true;
- traps[BATTERY_TEMPERATURE_ALARM].handle = GetInternalTempStr; /* BatteryTemperature */
-
- /* 11. LineAlarm */ // +
- traps[LINE_ALARM].trapId = LINE_ALARM;
- 8038650: f883 1059 strb.w r1, [r3, #89] ; 0x59
- traps[LINE_ALARM].varbindId = 12;
- 8038654: 210c movs r1, #12
- traps[LOW_BAT_ALARM].varbindId = 15;
- traps[LOW_BAT_ALARM].trapEnable = true;
- traps[LOW_BAT_ALARM].handle = GetBatCapacityStr; /* LowBatAlarm */
-
- /* 14. LowBatNorm */ // +
- traps[LOW_BAT_NORM].trapId = LOW_BAT_NORM;
- 8038656: 240e movs r4, #14
-
- /* 15. PowerAlarm */ // +
- traps[POWER_ALARM].trapId = POWER_ALARM;
- traps[POWER_ALARM].varbindId = 14;
- traps[POWER_ALARM].trapEnable = true;
- traps[POWER_ALARM].handle = GetPowerStr; /* PowerAlarm */
- 8038658: 4d32 ldr r5, [pc, #200] ; (8038724 <SNMP_InitTrapsBase+0x16c>)
- traps[BATTERY_TEMPERATURE_ALARM].trapEnable = true;
- traps[BATTERY_TEMPERATURE_ALARM].handle = GetInternalTempStr; /* BatteryTemperature */
-
- /* 11. LineAlarm */ // +
- traps[LINE_ALARM].trapId = LINE_ALARM;
- traps[LINE_ALARM].varbindId = 12;
- 803865a: f883 105a strb.w r1, [r3, #90] ; 0x5a
- traps[LINE_ALARM].trapEnable = true;
- traps[LINE_ALARM].handle = GetInputVoltageStr; /* LineAlarm */
- 803865e: 65d8 str r0, [r3, #92] ; 0x5c
-
- /* 12. LineNorm */ // +
- traps[LINE_NORM].trapId = LINE_NORM;
- 8038660: f883 1061 strb.w r1, [r3, #97] ; 0x61
- traps[LINE_NORM].varbindId = 12;
- 8038664: f883 1062 strb.w r1, [r3, #98] ; 0x62
- traps[LINE_NORM].trapEnable = true;
- traps[LINE_NORM].handle = GetInputVoltageStr; /* LineNorm */
- 8038668: 6658 str r0, [r3, #100] ; 0x64
-
- /* 13. LowBatAlarm */ // +
- traps[LOW_BAT_ALARM].trapId = LOW_BAT_ALARM;
- 803866a: 210d movs r1, #13
- traps[LOW_BAT_ALARM].varbindId = 15;
- traps[LOW_BAT_ALARM].trapEnable = true;
- traps[LOW_BAT_ALARM].handle = GetBatCapacityStr; /* LowBatAlarm */
- 803866c: 482e ldr r0, [pc, #184] ; (8038728 <SNMP_InitTrapsBase+0x170>)
- traps[LINE_NORM].varbindId = 12;
- traps[LINE_NORM].trapEnable = true;
- traps[LINE_NORM].handle = GetInputVoltageStr; /* LineNorm */
-
- /* 13. LowBatAlarm */ // +
- traps[LOW_BAT_ALARM].trapId = LOW_BAT_ALARM;
- 803866e: f883 1069 strb.w r1, [r3, #105] ; 0x69
- traps[LOW_BAT_ALARM].varbindId = 15;
- traps[LOW_BAT_ALARM].trapEnable = true;
- traps[LOW_BAT_ALARM].handle = GetBatCapacityStr; /* LowBatAlarm */
-
- /* 14. LowBatNorm */ // +
- traps[LOW_BAT_NORM].trapId = LOW_BAT_NORM;
- 8038672: f883 4071 strb.w r4, [r3, #113] ; 0x71
- traps[LINE_NORM].trapEnable = true;
- traps[LINE_NORM].handle = GetInputVoltageStr; /* LineNorm */
-
- /* 13. LowBatAlarm */ // +
- traps[LOW_BAT_ALARM].trapId = LOW_BAT_ALARM;
- traps[LOW_BAT_ALARM].varbindId = 15;
- 8038676: 210f movs r1, #15
- traps[LOW_BAT_NORM].trapEnable = true;
- traps[LOW_BAT_NORM].handle = GetBatCapacityStr; /* LowBatNorm */
-
- /* 15. PowerAlarm */ // +
- traps[POWER_ALARM].trapId = POWER_ALARM;
- traps[POWER_ALARM].varbindId = 14;
- 8038678: f883 407a strb.w r4, [r3, #122] ; 0x7a
- traps[POWER_ALARM].trapEnable = true;
- traps[POWER_ALARM].handle = GetPowerStr; /* PowerAlarm */
-
- /* 16. PowerNorm */ // +
- traps[POWER_NORM].trapId = POWER_NORM;
- 803867c: 2610 movs r6, #16
- traps[POWER_NORM].varbindId = 14;
- 803867e: f883 4082 strb.w r4, [r3, #130] ; 0x82
- traps[POWER_NORM].trapEnable = true;
- traps[POWER_NORM].handle = GetPowerStr; /* PowerNorm */
-
- /* 17. ConnectMonitorAlarm */ //
- traps[CONNECT_MONITOR_ALARM].trapId = CONNECT_MONITOR_ALARM;
- 8038682: 2411 movs r4, #17
-
- /* 15. PowerAlarm */ // +
- traps[POWER_ALARM].trapId = POWER_ALARM;
- traps[POWER_ALARM].varbindId = 14;
- traps[POWER_ALARM].trapEnable = true;
- traps[POWER_ALARM].handle = GetPowerStr; /* PowerAlarm */
- 8038684: 67dd str r5, [r3, #124] ; 0x7c
-
- /* 16. PowerNorm */ // +
- traps[POWER_NORM].trapId = POWER_NORM;
- 8038686: f883 6081 strb.w r6, [r3, #129] ; 0x81
- traps[POWER_NORM].varbindId = 14;
- traps[POWER_NORM].trapEnable = true;
- traps[POWER_NORM].handle = GetPowerStr; /* PowerNorm */
- 803868a: f8c3 5084 str.w r5, [r3, #132] ; 0x84
-
- /* 17. ConnectMonitorAlarm */ //
- traps[CONNECT_MONITOR_ALARM].trapId = CONNECT_MONITOR_ALARM;
- 803868e: f883 4089 strb.w r4, [r3, #137] ; 0x89
- traps[CONNECT_MONITOR_ALARM].varbindId = 17;
- 8038692: f883 408a strb.w r4, [r3, #138] ; 0x8a
- traps[CONNECT_MONITOR_ALARM].trapEnable = true;
- traps[CONNECT_MONITOR_ALARM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
- 8038696: 4d25 ldr r5, [pc, #148] ; (803872c <SNMP_InitTrapsBase+0x174>)
- traps[DO1_TOGGLED].handle = GetDOUT1StatusStr; /* State DO1 */
- /* 9. BatteryTemperatureNorm */ // +
- traps[BATTERY_TEMPERATURE_NORM].trapId = BATTERY_TEMPERATURE_NORM;
- traps[BATTERY_TEMPERATURE_NORM].varbindId = 10;
- traps[BATTERY_TEMPERATURE_NORM].trapEnable = true;
- 8038698: f883 204b strb.w r2, [r3, #75] ; 0x4b
- traps[BATTERY_TEMPERATURE_NORM].handle = GetInternalTempStr; /* BatteryTemperature */
-
- /* 10. BatteryTemperatureAlarm */ // +
- traps[BATTERY_TEMPERATURE_ALARM].trapId = BATTERY_TEMPERATURE_ALARM;
- traps[BATTERY_TEMPERATURE_ALARM].varbindId = 10;
- traps[BATTERY_TEMPERATURE_ALARM].trapEnable = true;
- 803869c: f883 2053 strb.w r2, [r3, #83] ; 0x53
- traps[BATTERY_TEMPERATURE_ALARM].handle = GetInternalTempStr; /* BatteryTemperature */
-
- /* 11. LineAlarm */ // +
- traps[LINE_ALARM].trapId = LINE_ALARM;
- traps[LINE_ALARM].varbindId = 12;
- traps[LINE_ALARM].trapEnable = true;
- 80386a0: f883 205b strb.w r2, [r3, #91] ; 0x5b
- traps[LINE_ALARM].handle = GetInputVoltageStr; /* LineAlarm */
-
- /* 12. LineNorm */ // +
- traps[LINE_NORM].trapId = LINE_NORM;
- traps[LINE_NORM].varbindId = 12;
- traps[LINE_NORM].trapEnable = true;
- 80386a4: f883 2063 strb.w r2, [r3, #99] ; 0x63
- traps[LINE_NORM].handle = GetInputVoltageStr; /* LineNorm */
-
- /* 13. LowBatAlarm */ // +
- traps[LOW_BAT_ALARM].trapId = LOW_BAT_ALARM;
- traps[LOW_BAT_ALARM].varbindId = 15;
- 80386a8: f883 106a strb.w r1, [r3, #106] ; 0x6a
- traps[LOW_BAT_ALARM].trapEnable = true;
- 80386ac: f883 206b strb.w r2, [r3, #107] ; 0x6b
- traps[LOW_BAT_ALARM].handle = GetBatCapacityStr; /* LowBatAlarm */
- 80386b0: 66d8 str r0, [r3, #108] ; 0x6c
-
- /* 14. LowBatNorm */ // +
- traps[LOW_BAT_NORM].trapId = LOW_BAT_NORM;
- traps[LOW_BAT_NORM].varbindId = 15;
- 80386b2: f883 1072 strb.w r1, [r3, #114] ; 0x72
- traps[LOW_BAT_NORM].trapEnable = true;
- 80386b6: f883 2073 strb.w r2, [r3, #115] ; 0x73
- traps[LOW_BAT_NORM].handle = GetBatCapacityStr; /* LowBatNorm */
- 80386ba: 6758 str r0, [r3, #116] ; 0x74
-
- /* 15. PowerAlarm */ // +
- traps[POWER_ALARM].trapId = POWER_ALARM;
- 80386bc: f883 1079 strb.w r1, [r3, #121] ; 0x79
- traps[POWER_ALARM].varbindId = 14;
- traps[POWER_ALARM].trapEnable = true;
- 80386c0: f883 207b strb.w r2, [r3, #123] ; 0x7b
- traps[POWER_ALARM].handle = GetPowerStr; /* PowerAlarm */
-
- /* 16. PowerNorm */ // +
- traps[POWER_NORM].trapId = POWER_NORM;
- traps[POWER_NORM].varbindId = 14;
- traps[POWER_NORM].trapEnable = true;
- 80386c4: f883 2083 strb.w r2, [r3, #131] ; 0x83
- traps[POWER_NORM].handle = GetPowerStr; /* PowerNorm */
-
- /* 17. ConnectMonitorAlarm */ //
- traps[CONNECT_MONITOR_ALARM].trapId = CONNECT_MONITOR_ALARM;
- traps[CONNECT_MONITOR_ALARM].varbindId = 17;
- traps[CONNECT_MONITOR_ALARM].trapEnable = true;
- 80386c8: f883 208b strb.w r2, [r3, #139] ; 0x8b
- traps[CONNECT_MONITOR_ALARM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
-
- /* 18. ConnectMonitorNorm */ //
- traps[CONNECT_MONITOR_NORM].trapId = CONNECT_MONITOR_NORM;
- traps[CONNECT_MONITOR_NORM].varbindId = 17;
- 80386cc: f883 4092 strb.w r4, [r3, #146] ; 0x92
- traps[CONNECT_MONITOR_NORM].trapEnable = true;
- traps[CONNECT_MONITOR_NORM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
- /* 19. BatteryConnectAlarm */ // +
- traps[BATTERY_CONNECT_ALARM].trapId = BATTERY_CONNECT_ALARM;
- 80386d0: 2413 movs r4, #19
- traps[CONNECT_MONITOR_ALARM].varbindId = 17;
- traps[CONNECT_MONITOR_ALARM].trapEnable = true;
- traps[CONNECT_MONITOR_ALARM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
-
- /* 18. ConnectMonitorNorm */ //
- traps[CONNECT_MONITOR_NORM].trapId = CONNECT_MONITOR_NORM;
- 80386d2: 2612 movs r6, #18
- traps[CONNECT_MONITOR_NORM].varbindId = 17;
- traps[CONNECT_MONITOR_NORM].trapEnable = true;
- traps[CONNECT_MONITOR_NORM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
- /* 19. BatteryConnectAlarm */ // +
- traps[BATTERY_CONNECT_ALARM].trapId = BATTERY_CONNECT_ALARM;
- 80386d4: f883 4099 strb.w r4, [r3, #153] ; 0x99
- traps[BATTERY_CONNECT_ALARM].varbindId = 15;
- traps[BATTERY_CONNECT_ALARM].trapEnable = true;
- traps[BATTERY_CONNECT_ALARM].handle = GetBatCapacityStr; /* LowBatAlarm */
- /* 20. BatteryConnectNorm */ // +
- traps[BATTERY_CONNECT_NORM].trapId = BATTERY_CONNECT_NORM;
- 80386d8: 2414 movs r4, #20
-
- /* 17. ConnectMonitorAlarm */ //
- traps[CONNECT_MONITOR_ALARM].trapId = CONNECT_MONITOR_ALARM;
- traps[CONNECT_MONITOR_ALARM].varbindId = 17;
- traps[CONNECT_MONITOR_ALARM].trapEnable = true;
- traps[CONNECT_MONITOR_ALARM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
- 80386da: f8c3 508c str.w r5, [r3, #140] ; 0x8c
-
- /* 18. ConnectMonitorNorm */ //
- traps[CONNECT_MONITOR_NORM].trapId = CONNECT_MONITOR_NORM;
- 80386de: f883 6091 strb.w r6, [r3, #145] ; 0x91
- traps[CONNECT_MONITOR_NORM].varbindId = 17;
- traps[CONNECT_MONITOR_NORM].trapEnable = true;
- 80386e2: f883 2093 strb.w r2, [r3, #147] ; 0x93
- traps[CONNECT_MONITOR_NORM].handle = GetConnectMonitorStr;//GetConnectMonitorStr; /* ConnectMonitor */
- 80386e6: f8c3 5094 str.w r5, [r3, #148] ; 0x94
- /* 19. BatteryConnectAlarm */ // +
- traps[BATTERY_CONNECT_ALARM].trapId = BATTERY_CONNECT_ALARM;
- traps[BATTERY_CONNECT_ALARM].varbindId = 15;
- 80386ea: f883 109a strb.w r1, [r3, #154] ; 0x9a
- traps[BATTERY_CONNECT_ALARM].trapEnable = true;
- 80386ee: f883 209b strb.w r2, [r3, #155] ; 0x9b
- traps[BATTERY_CONNECT_ALARM].handle = GetBatCapacityStr; /* LowBatAlarm */
- 80386f2: f8c3 009c str.w r0, [r3, #156] ; 0x9c
- /* 20. BatteryConnectNorm */ // +
- traps[BATTERY_CONNECT_NORM].trapId = BATTERY_CONNECT_NORM;
- 80386f6: f883 40a1 strb.w r4, [r3, #161] ; 0xa1
- traps[BATTERY_CONNECT_NORM].varbindId = 15;
- 80386fa: f883 10a2 strb.w r1, [r3, #162] ; 0xa2
- traps[BATTERY_CONNECT_NORM].trapEnable = true;
- 80386fe: f883 20a3 strb.w r2, [r3, #163] ; 0xa3
- traps[BATTERY_CONNECT_NORM].handle = GetBatCapacityStr; /* LowBatNorm */
- 8038702: f8c3 00a4 str.w r0, [r3, #164] ; 0xa4
- 8038706: bd70 pop {r4, r5, r6, pc}
- 8038708: 2000fabc .word 0x2000fabc
- 803870c: 08027cc9 .word 0x08027cc9
- 8038710: 08027b79 .word 0x08027b79
- 8038714: 08027bed .word 0x08027bed
- 8038718: 08027c11 .word 0x08027c11
- 803871c: 08027949 .word 0x08027949
- 8038720: 08027885 .word 0x08027885
- 8038724: 080278dd .word 0x080278dd
- 8038728: 08027901 .word 0x08027901
- 803872c: 08027999 .word 0x08027999
- 08038730 <SNMP_SendVarbindTrap>:
- /**
- * @brief Отправка трапа с переменной, зарегистрированного в базе.
- * @retval
- */
- bool SNMP_SendVarbindTrap(TRAP_t *trap)
- {
- 8038730: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- char msg[255];
- uint8_t len = 0;
- 8038734: 2500 movs r5, #0
- /**
- * @brief Отправка трапа с переменной, зарегистрированного в базе.
- * @retval
- */
- bool SNMP_SendVarbindTrap(TRAP_t *trap)
- {
- 8038736: f5ad 7d07 sub.w sp, sp, #540 ; 0x21c
- 803873a: 4681 mov r9, r0
- char msg[255];
- uint8_t len = 0;
- struct snmp_varbind *vb;
- struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 2, 1}};
- 803873c: 4629 mov r1, r5
- 803873e: 2284 movs r2, #132 ; 0x84
- 8038740: a804 add r0, sp, #16
- * @retval
- */
- bool SNMP_SendVarbindTrap(TRAP_t *trap)
- {
- char msg[255];
- uint8_t len = 0;
- 8038742: f88d 500f strb.w r5, [sp, #15]
- struct snmp_varbind *vb;
- struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 2, 1}};
- 8038746: f7e9 f9db bl 8021b00 <memset>
- 803874a: 2202 movs r2, #2
- 803874c: 2401 movs r4, #1
- 803874e: 2603 movs r6, #3
- 8038750: 230b movs r3, #11
- 8038752: f04f 0804 mov.w r8, #4
- 8038756: 2706 movs r7, #6
- 8038758: f24a 3b18 movw fp, #41752 ; 0xa318
- 803875c: f240 3a8f movw sl, #911 ; 0x38f
- 8038760: 920e str r2, [sp, #56] ; 0x38
- struct snmp_obj_id varObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 1, 1}};
- 8038762: 4629 mov r1, r5
- 8038764: 2284 movs r2, #132 ; 0x84
- 8038766: a825 add r0, sp, #148 ; 0x94
- bool SNMP_SendVarbindTrap(TRAP_t *trap)
- {
- char msg[255];
- uint8_t len = 0;
- struct snmp_varbind *vb;
- struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 2, 1}};
- 8038768: f88d 3010 strb.w r3, [sp, #16]
- 803876c: 9606 str r6, [sp, #24]
- 803876e: 960d str r6, [sp, #52] ; 0x34
- struct snmp_obj_id varObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 1, 1}};
- 8038770: 9301 str r3, [sp, #4]
- bool SNMP_SendVarbindTrap(TRAP_t *trap)
- {
- char msg[255];
- uint8_t len = 0;
- struct snmp_varbind *vb;
- struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 2, 1}};
- 8038772: 9405 str r4, [sp, #20]
- 8038774: 9707 str r7, [sp, #28]
- 8038776: 9408 str r4, [sp, #32]
- 8038778: f8cd 8024 str.w r8, [sp, #36] ; 0x24
- 803877c: 940a str r4, [sp, #40] ; 0x28
- 803877e: f8cd b02c str.w fp, [sp, #44] ; 0x2c
- 8038782: f8cd a030 str.w sl, [sp, #48] ; 0x30
- struct snmp_obj_id varObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 1, 1}};
- 8038786: f7e9 f9bb bl 8021b00 <memset>
- 803878a: 9b01 ldr r3, [sp, #4]
- 803878c: 9627 str r6, [sp, #156] ; 0x9c
- 803878e: f88d 3094 strb.w r3, [sp, #148] ; 0x94
-
- trapObjId.id[trapObjId.len - 1] = trap->trapId;
- 8038792: f899 3001 ldrb.w r3, [r9, #1]
- {
- char msg[255];
- uint8_t len = 0;
- struct snmp_varbind *vb;
- struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 2, 1}};
- struct snmp_obj_id varObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 1, 1}};
- 8038796: 962e str r6, [sp, #184] ; 0xb8
-
- trapObjId.id[trapObjId.len - 1] = trap->trapId;
- 8038798: 930f str r3, [sp, #60] ; 0x3c
- varObjId.id[varObjId.len - 1] = trap->varbindId;
- 803879a: f899 3002 ldrb.w r3, [r9, #2]
- {
- char msg[255];
- uint8_t len = 0;
- struct snmp_varbind *vb;
- struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 2, 1}};
- struct snmp_obj_id varObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 1, 1}};
- 803879e: 9426 str r4, [sp, #152] ; 0x98
-
- trapObjId.id[trapObjId.len - 1] = trap->trapId;
- varObjId.id[varObjId.len - 1] = trap->varbindId;
- 80387a0: 9330 str r3, [sp, #192] ; 0xc0
-
- trap->handle(msg, &len);
- 80387a2: a846 add r0, sp, #280 ; 0x118
- 80387a4: f8d9 3004 ldr.w r3, [r9, #4]
- {
- char msg[255];
- uint8_t len = 0;
- struct snmp_varbind *vb;
- struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 2, 1}};
- struct snmp_obj_id varObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 1, 1}};
- 80387a8: 9728 str r7, [sp, #160] ; 0xa0
-
- trapObjId.id[trapObjId.len - 1] = trap->trapId;
- varObjId.id[varObjId.len - 1] = trap->varbindId;
-
- trap->handle(msg, &len);
- 80387aa: f10d 010f add.w r1, sp, #15
- {
- char msg[255];
- uint8_t len = 0;
- struct snmp_varbind *vb;
- struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 2, 1}};
- struct snmp_obj_id varObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 911, 3, 1, 1}};
- 80387ae: 9429 str r4, [sp, #164] ; 0xa4
- 80387b0: f8cd 80a8 str.w r8, [sp, #168] ; 0xa8
- 80387b4: 942b str r4, [sp, #172] ; 0xac
- 80387b6: f8cd b0b0 str.w fp, [sp, #176] ; 0xb0
- 80387ba: f8cd a0b4 str.w sl, [sp, #180] ; 0xb4
- 80387be: 942f str r4, [sp, #188] ; 0xbc
-
- trapObjId.id[trapObjId.len - 1] = trap->trapId;
- varObjId.id[varObjId.len - 1] = trap->varbindId;
-
- trap->handle(msg, &len);
- 80387c0: 4798 blx r3
- vb = snmp_varbind_alloc(&varObjId, SNMP_ASN1_OC_STR, len);
- 80387c2: a825 add r0, sp, #148 ; 0x94
- 80387c4: 4641 mov r1, r8
- 80387c6: f89d 200f ldrb.w r2, [sp, #15]
- 80387ca: f7fc ffb5 bl 8035738 <snmp_varbind_alloc>
-
- if(vb != NULL ) {
- 80387ce: 4606 mov r6, r0
- 80387d0: b198 cbz r0, 80387fa <SNMP_SendVarbindTrap+0xca>
- memcpy(vb->value, msg, len);
- 80387d2: f89d 200f ldrb.w r2, [sp, #15]
- 80387d6: 6940 ldr r0, [r0, #20]
- 80387d8: a946 add r1, sp, #280 ; 0x118
- 80387da: f7e9 f8d7 bl 802198c <memcpy>
-
- snmp_varbind_tail_add(&trap_msg.outvb, vb);
- 80387de: 4809 ldr r0, [pc, #36] ; (8038804 <SNMP_SendVarbindTrap+0xd4>)
- 80387e0: 4631 mov r1, r6
- 80387e2: f7fd f855 bl 8035890 <snmp_varbind_tail_add>
-
- snmp_send_trap(SNMP_GENTRAP_ENTERPRISESPC, &trapObjId, 0);
- 80387e6: a904 add r1, sp, #16
- 80387e8: 462a mov r2, r5
- 80387ea: 4638 mov r0, r7
- 80387ec: f7fe f9c0 bl 8036b70 <snmp_send_trap>
-
- snmp_varbind_list_free(&trap_msg.outvb);
- 80387f0: 4804 ldr r0, [pc, #16] ; (8038804 <SNMP_SendVarbindTrap+0xd4>)
- 80387f2: f7fc fff4 bl 80357de <snmp_varbind_list_free>
-
- return true;
- 80387f6: 4620 mov r0, r4
- 80387f8: e7ff b.n 80387fa <SNMP_SendVarbindTrap+0xca>
- }
- else {
- return false;
- }
- }
- 80387fa: f50d 7d07 add.w sp, sp, #540 ; 0x21c
- 80387fe: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
- 8038802: bf00 nop
- 8038804: 2000f844 .word 0x2000f844
- 08038808 <udp_message>:
- char dataBuf1[DATA_BUF_LEN1];
- static uint8_t udp_type_message = 0; //0 - идентификационное сообщение; 1 - сообщение с настройками сети
- void udp_message(char *buf)
- {
- 8038808: b570 push {r4, r5, r6, lr}
- uint8_t len2 = 0;
- 803880a: 2600 movs r6, #0
- char dataBuf1[DATA_BUF_LEN1];
- static uint8_t udp_type_message = 0; //0 - идентификационное сообщение; 1 - сообщение с настройками сети
- void udp_message(char *buf)
- {
- 803880c: b09a sub sp, #104 ; 0x68
- 803880e: 4604 mov r4, r0
- uint8_t len2 = 0;
- char str[97];
- memset(str, 0, 97);
- 8038810: 2261 movs r2, #97 ; 0x61
- 8038812: 4631 mov r1, r6
- 8038814: a801 add r0, sp, #4
- GetModelStr(str, &len2);
- strncat(buf, str, len2);
- strcat(buf, ";");
- 8038816: 4d2b ldr r5, [pc, #172] ; (80388c4 <udp_message+0xbc>)
- static uint8_t udp_type_message = 0; //0 - идентификационное сообщение; 1 - сообщение с настройками сети
- void udp_message(char *buf)
- {
- uint8_t len2 = 0;
- 8038818: f88d 6003 strb.w r6, [sp, #3]
- char str[97];
- memset(str, 0, 97);
- 803881c: f7e9 f970 bl 8021b00 <memset>
- GetModelStr(str, &len2);
- 8038820: a801 add r0, sp, #4
- 8038822: f10d 0103 add.w r1, sp, #3
- 8038826: f7ef fa2b bl 8027c80 <GetModelStr>
- strncat(buf, str, len2);
- 803882a: f89d 2003 ldrb.w r2, [sp, #3]
- 803882e: a901 add r1, sp, #4
- 8038830: 4620 mov r0, r4
- 8038832: f7e9 fb6d bl 8021f10 <strncat>
- strcat(buf, ";");
- 8038836: 4629 mov r1, r5
- 8038838: 4620 mov r0, r4
- 803883a: f7e9 f9c7 bl 8021bcc <strcat>
- GetSerialNumberStr(str, &len2);
- 803883e: a801 add r0, sp, #4
- 8038840: f10d 0103 add.w r1, sp, #3
- 8038844: f7ef fa64 bl 8027d10 <GetSerialNumberStr>
- strncat(buf, str, len2);
- 8038848: f89d 2003 ldrb.w r2, [sp, #3]
- 803884c: a901 add r1, sp, #4
- 803884e: 4620 mov r0, r4
- 8038850: f7e9 fb5e bl 8021f10 <strncat>
- strcat(buf, ";");
- 8038854: 4629 mov r1, r5
- 8038856: 4620 mov r0, r4
- 8038858: f7e9 f9b8 bl 8021bcc <strcat>
- GetMacStr(str, &len2);
- 803885c: a801 add r0, sp, #4
- 803885e: f10d 0103 add.w r1, sp, #3
- 8038862: f7ef fa43 bl 8027cec <GetMacStr>
- strncat(buf, str, len2);
- 8038866: f89d 2003 ldrb.w r2, [sp, #3]
- 803886a: a901 add r1, sp, #4
- 803886c: 4620 mov r0, r4
- 803886e: f7e9 fb4f bl 8021f10 <strncat>
- strcat(buf, ";");
- 8038872: 4629 mov r1, r5
- 8038874: 4620 mov r0, r4
- 8038876: f7e9 f9a9 bl 8021bcc <strcat>
- GetVersionStr(str, &len2);
- 803887a: a801 add r0, sp, #4
- 803887c: f10d 0103 add.w r1, sp, #3
- 8038880: f7ef fa22 bl 8027cc8 <GetVersionStr>
- strncat(buf, str, len2);
- 8038884: f89d 2003 ldrb.w r2, [sp, #3]
- 8038888: a901 add r1, sp, #4
- 803888a: 4620 mov r0, r4
- 803888c: f7e9 fb40 bl 8021f10 <strncat>
- strcat(buf, ";;;");
- 8038890: 4620 mov r0, r4
- 8038892: 490d ldr r1, [pc, #52] ; (80388c8 <udp_message+0xc0>)
- 8038894: f7e9 f99a bl 8021bcc <strcat>
- memset(str, 0, 97);
- 8038898: 2261 movs r2, #97 ; 0x61
- 803889a: 4631 mov r1, r6
- 803889c: a801 add r0, sp, #4
- 803889e: f7e9 f92f bl 8021b00 <memset>
- GetSTM32IDStr(str, &len2);
- 80388a2: a801 add r0, sp, #4
- 80388a4: f10d 0103 add.w r1, sp, #3
- 80388a8: f7ee f93c bl 8026b24 <GetSTM32IDStr>
- strncat(buf, str, len2);
- 80388ac: a901 add r1, sp, #4
- 80388ae: 4620 mov r0, r4
- 80388b0: f89d 2003 ldrb.w r2, [sp, #3]
- 80388b4: f7e9 fb2c bl 8021f10 <strncat>
- strcat(buf, ";;;T2OK;;");
- 80388b8: 4620 mov r0, r4
- 80388ba: 4904 ldr r1, [pc, #16] ; (80388cc <udp_message+0xc4>)
- 80388bc: f7e9 f986 bl 8021bcc <strcat>
- }
- 80388c0: b01a add sp, #104 ; 0x68
- 80388c2: bd70 pop {r4, r5, r6, pc}
- 80388c4: 08045b19 .word 0x08045b19
- 80388c8: 08045b17 .word 0x08045b17
- 80388cc: 08045b1b .word 0x08045b1b
- 080388d0 <udp_message_netSettings>:
- void udp_message_netSettings(char *buf)
- {
- 80388d0: b510 push {r4, lr}
- 80388d2: b09a sub sp, #104 ; 0x68
- 80388d4: 4604 mov r4, r0
- char str[100];
- uint8_t len;
- /* S/N */
- GetSerialNumberStr(str, &len);
- 80388d6: f10d 0103 add.w r1, sp, #3
- 80388da: a801 add r0, sp, #4
- 80388dc: f7ef fa18 bl 8027d10 <GetSerialNumberStr>
- strcat(buf, "{\"serno\":\"");
- 80388e0: 4620 mov r0, r4
- 80388e2: 4926 ldr r1, [pc, #152] ; (803897c <udp_message_netSettings+0xac>)
- 80388e4: f7e9 f972 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 80388e8: f89d 2003 ldrb.w r2, [sp, #3]
- 80388ec: a901 add r1, sp, #4
- 80388ee: 4620 mov r0, r4
- 80388f0: f7e9 fb0e bl 8021f10 <strncat>
- /* WEB */
- GetDhcpStateUDP(str, &len);
- 80388f4: a801 add r0, sp, #4
- 80388f6: f10d 0103 add.w r1, sp, #3
- 80388fa: f7ef fb01 bl 8027f00 <GetDhcpStateUDP>
- strcat(buf, "\",\"dhcp\":\"");
- 80388fe: 4620 mov r0, r4
- 8038900: 491f ldr r1, [pc, #124] ; (8038980 <udp_message_netSettings+0xb0>)
- 8038902: f7e9 f963 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 8038906: f89d 2003 ldrb.w r2, [sp, #3]
- 803890a: a901 add r1, sp, #4
- 803890c: 4620 mov r0, r4
- 803890e: f7e9 faff bl 8021f10 <strncat>
- GetIpStr(str, &len);
- 8038912: a801 add r0, sp, #4
- 8038914: f10d 0103 add.w r1, sp, #3
- 8038918: f7ef fa9c bl 8027e54 <GetIpStr>
- strcat(buf, "\",\"ipaddress\":\"");
- 803891c: 4620 mov r0, r4
- 803891e: 4919 ldr r1, [pc, #100] ; (8038984 <udp_message_netSettings+0xb4>)
- 8038920: f7e9 f954 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 8038924: f89d 2003 ldrb.w r2, [sp, #3]
- 8038928: a901 add r1, sp, #4
- 803892a: 4620 mov r0, r4
- 803892c: f7e9 faf0 bl 8021f10 <strncat>
- GetGatewayStr(str, &len);
- 8038930: a801 add r0, sp, #4
- 8038932: f10d 0103 add.w r1, sp, #3
- 8038936: f7ef faa3 bl 8027e80 <GetGatewayStr>
- strcat(buf, "\",\"gateway\":\"");
- 803893a: 4620 mov r0, r4
- 803893c: 4912 ldr r1, [pc, #72] ; (8038988 <udp_message_netSettings+0xb8>)
- 803893e: f7e9 f945 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 8038942: f89d 2003 ldrb.w r2, [sp, #3]
- 8038946: a901 add r1, sp, #4
- 8038948: 4620 mov r0, r4
- 803894a: f7e9 fae1 bl 8021f10 <strncat>
- GetMaskStr(str, &len);
- 803894e: a801 add r0, sp, #4
- 8038950: f10d 0103 add.w r1, sp, #3
- 8038954: f7ef faaa bl 8027eac <GetMaskStr>
- strcat(buf, "\",\"mask\":\"");
- 8038958: 4620 mov r0, r4
- 803895a: 490c ldr r1, [pc, #48] ; (803898c <udp_message_netSettings+0xbc>)
- 803895c: f7e9 f936 bl 8021bcc <strcat>
- strncat(buf, str, len);
- 8038960: a901 add r1, sp, #4
- 8038962: f89d 2003 ldrb.w r2, [sp, #3]
- 8038966: 4620 mov r0, r4
- 8038968: f7e9 fad2 bl 8021f10 <strncat>
- strncat(buf, "\"}", 2);
- 803896c: 4620 mov r0, r4
- 803896e: 4908 ldr r1, [pc, #32] ; (8038990 <udp_message_netSettings+0xc0>)
- 8038970: 2202 movs r2, #2
- 8038972: f7e9 facd bl 8021f10 <strncat>
- }
- 8038976: b01a add sp, #104 ; 0x68
- 8038978: bd10 pop {r4, pc}
- 803897a: bf00 nop
- 803897c: 08045b25 .word 0x08045b25
- 8038980: 08045b30 .word 0x08045b30
- 8038984: 08045b3b .word 0x08045b3b
- 8038988: 08045b4b .word 0x08045b4b
- 803898c: 08044de6 .word 0x08044de6
- 8038990: 08044d4f .word 0x08044d4f
- 08038994 <GetUDPParamValue>:
- uint8_t GetUDPParamValue(char *inStr, char *paramName, char *paramValue, uint8_t *paramLen)
- {
- 8038994: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- 8038998: 4690 mov r8, r2
- 803899a: 461f mov r7, r3
- char *beginValue = 0;
- char *endValue = 0;
- int len = 0;
- char *strPtr = 0;
- strPtr = strstr(inStr, paramName);
- 803899c: f7e9 fd08 bl 80223b0 <strstr>
- if (strPtr != 0)
- 80389a0: 4605 mov r5, r0
- 80389a2: b310 cbz r0, 80389ea <GetUDPParamValue+0x56>
- {
- beginValue = strpbrk(strPtr,":");
- 80389a4: 4912 ldr r1, [pc, #72] ; (80389f0 <GetUDPParamValue+0x5c>)
- 80389a6: f7e9 fb6d bl 8022084 <strpbrk>
- endValue = strpbrk(strPtr,",");
- 80389aa: 4912 ldr r1, [pc, #72] ; (80389f4 <GetUDPParamValue+0x60>)
- strPtr = strstr(inStr, paramName);
- if (strPtr != 0)
- {
- beginValue = strpbrk(strPtr,":");
- 80389ac: 4606 mov r6, r0
- endValue = strpbrk(strPtr,",");
- 80389ae: 4628 mov r0, r5
- 80389b0: f7e9 fb68 bl 8022084 <strpbrk>
- if (endValue == 0)
- 80389b4: 4604 mov r4, r0
- 80389b6: b950 cbnz r0, 80389ce <GetUDPParamValue+0x3a>
- {
- endValue = strpbrk(strPtr,"}");
- 80389b8: 4628 mov r0, r5
- 80389ba: 490f ldr r1, [pc, #60] ; (80389f8 <GetUDPParamValue+0x64>)
- 80389bc: f7e9 fb62 bl 8022084 <strpbrk>
- if (endValue == 0)
- 80389c0: 4604 mov r4, r0
- 80389c2: b920 cbnz r0, 80389ce <GetUDPParamValue+0x3a>
- endValue = strpbrk(strPtr," ");
- 80389c4: 4628 mov r0, r5
- 80389c6: 490d ldr r1, [pc, #52] ; (80389fc <GetUDPParamValue+0x68>)
- 80389c8: f7e9 fb5c bl 8022084 <strpbrk>
- 80389cc: 4604 mov r4, r0
- }
- len = endValue - beginValue - 3;
- 80389ce: 1ba5 subs r5, r4, r6
- 80389d0: 3d03 subs r5, #3
- strncpy(paramValue, beginValue + 2, len);
- 80389d2: 4640 mov r0, r8
- 80389d4: 1cb1 adds r1, r6, #2
- 80389d6: 462a mov r2, r5
- 80389d8: f7e9 fb22 bl 8022020 <strncpy>
- *endValue = '0';
- 80389dc: 2330 movs r3, #48 ; 0x30
- 80389de: 7023 strb r3, [r4, #0]
- *beginValue = '0';
- *paramLen = len;
- return 1;
- 80389e0: 2001 movs r0, #1
- endValue = strpbrk(strPtr," ");
- }
- len = endValue - beginValue - 3;
- strncpy(paramValue, beginValue + 2, len);
- *endValue = '0';
- *beginValue = '0';
- 80389e2: 7033 strb r3, [r6, #0]
- *paramLen = len;
- 80389e4: 703d strb r5, [r7, #0]
- return 1;
- 80389e6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- }
- else
- {
- *paramLen = 0;
- 80389ea: 7038 strb r0, [r7, #0]
- return 0;
- }
- }
- 80389ec: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
- 80389f0: 08044e49 .word 0x08044e49
- 80389f4: 08039b85 .word 0x08039b85
- 80389f8: 08044d50 .word 0x08044d50
- 80389fc: 08039ade .word 0x08039ade
- 08038a00 <udp_recieve_parser>:
- void udp_recieve_parser(char *buf, u16_t rcvlen)
- {
- 8038a00: b530 push {r4, r5, lr}
- uint8_t valueLen = 0;
- 8038a02: 2500 movs r5, #0
- return 0;
- }
- }
- void udp_recieve_parser(char *buf, u16_t rcvlen)
- {
- 8038a04: b0b5 sub sp, #212 ; 0xd4
- 8038a06: 4604 mov r4, r0
- uint8_t len2 = 0;
- const uint8_t len = 100;
- char value[100];
- char str[100];
- memset(str, 0, 100);
- 8038a08: 4629 mov r1, r5
- 8038a0a: 2264 movs r2, #100 ; 0x64
- 8038a0c: a81b add r0, sp, #108 ; 0x6c
- }
- }
- void udp_recieve_parser(char *buf, u16_t rcvlen)
- {
- uint8_t valueLen = 0;
- 8038a0e: f88d 5006 strb.w r5, [sp, #6]
- uint8_t len2 = 0;
- 8038a12: f88d 5007 strb.w r5, [sp, #7]
- const uint8_t len = 100;
- char value[100];
- char str[100];
- memset(str, 0, 100);
- 8038a16: f7e9 f873 bl 8021b00 <memset>
- // ClearParamString(buf);
- memset(value, 0, len);
- 8038a1a: 4629 mov r1, r5
- 8038a1c: 2264 movs r2, #100 ; 0x64
- 8038a1e: a802 add r0, sp, #8
- 8038a20: f7e9 f86e bl 8021b00 <memset>
- memset(str, 0, len);
- 8038a24: 4629 mov r1, r5
- 8038a26: 2264 movs r2, #100 ; 0x64
- 8038a28: a81b add r0, sp, #108 ; 0x6c
- 8038a2a: f7e9 f869 bl 8021b00 <memset>
- DBG buf[rcvlen]='\0';
- DBG printf("Rcvd (%d bytes): \t%s\r\n", rcvlen, buf);
- GetUDPParamValue(buf, "\"serno\"", value, &valueLen);
- 8038a2e: f10d 0306 add.w r3, sp, #6
- 8038a32: 4620 mov r0, r4
- 8038a34: 493f ldr r1, [pc, #252] ; (8038b34 <udp_recieve_parser+0x134>)
- 8038a36: aa02 add r2, sp, #8
- 8038a38: f7ff ffac bl 8038994 <GetUDPParamValue>
- if(valueLen != 0)
- 8038a3c: f89d 3006 ldrb.w r3, [sp, #6]
- 8038a40: 2b00 cmp r3, #0
- 8038a42: d074 beq.n 8038b2e <udp_recieve_parser+0x12e>
- GetSerialNumberStr(str, &len2);
- 8038a44: a81b add r0, sp, #108 ; 0x6c
- 8038a46: f10d 0107 add.w r1, sp, #7
- 8038a4a: f7ef f961 bl 8027d10 <GetSerialNumberStr>
- else
- return;
- if(strncmp(value, str, len2) == 0)
- 8038a4e: a802 add r0, sp, #8
- 8038a50: a91b add r1, sp, #108 ; 0x6c
- 8038a52: f89d 2007 ldrb.w r2, [sp, #7]
- 8038a56: f7e9 fa8d bl 8021f74 <strncmp>
- 8038a5a: 4605 mov r5, r0
- 8038a5c: 2800 cmp r0, #0
- 8038a5e: d166 bne.n 8038b2e <udp_recieve_parser+0x12e>
- {
- memset(str, 0, len);
- 8038a60: 4629 mov r1, r5
- 8038a62: 2264 movs r2, #100 ; 0x64
- 8038a64: a81b add r0, sp, #108 ; 0x6c
- 8038a66: f7e9 f84b bl 8021b00 <memset>
- GetUDPParamValue(buf, "\"dhcp\"", str, &valueLen);
- 8038a6a: f10d 0306 add.w r3, sp, #6
- 8038a6e: 4932 ldr r1, [pc, #200] ; (8038b38 <udp_recieve_parser+0x138>)
- 8038a70: aa1b add r2, sp, #108 ; 0x6c
- 8038a72: 4620 mov r0, r4
- 8038a74: f7ff ff8e bl 8038994 <GetUDPParamValue>
- // memset(str, 0, len);
- memset(value, 0, len);
- 8038a78: 4629 mov r1, r5
- 8038a7a: 2264 movs r2, #100 ; 0x64
- 8038a7c: a802 add r0, sp, #8
- 8038a7e: f7e9 f83f bl 8021b00 <memset>
- GetUDPParamValue(buf, "\"ipaddress\"", value, &valueLen);
- 8038a82: f10d 0306 add.w r3, sp, #6
- 8038a86: 4620 mov r0, r4
- 8038a88: 492c ldr r1, [pc, #176] ; (8038b3c <udp_recieve_parser+0x13c>)
- 8038a8a: aa02 add r2, sp, #8
- 8038a8c: f7ff ff82 bl 8038994 <GetUDPParamValue>
- if(valueLen != 0)
- 8038a90: f89d 3006 ldrb.w r3, [sp, #6]
- 8038a94: b163 cbz r3, 8038ab0 <udp_recieve_parser+0xb0>
- {
- SetUDPDhcpStateStr(str);
- 8038a96: a81b add r0, sp, #108 ; 0x6c
- 8038a98: f7ef fb7a bl 8028190 <SetUDPDhcpStateStr>
- SetIPStr(value);
- 8038a9c: a802 add r0, sp, #8
- 8038a9e: f7ef fb53 bl 8028148 <SetIPStr>
- else{
- udp_type_message = 1;
- return;
- }
- if (strncmp(str, "True", 4) != 0) // Если dhcp off устанавливаем параметры
- 8038aa2: a81b add r0, sp, #108 ; 0x6c
- 8038aa4: 4926 ldr r1, [pc, #152] ; (8038b40 <udp_recieve_parser+0x140>)
- 8038aa6: 2204 movs r2, #4
- 8038aa8: f7e9 fa64 bl 8021f74 <strncmp>
- 8038aac: b920 cbnz r0, 8038ab8 <udp_recieve_parser+0xb8>
- 8038aae: e02d b.n 8038b0c <udp_recieve_parser+0x10c>
- {
- SetUDPDhcpStateStr(str);
- SetIPStr(value);
- }
- else{
- udp_type_message = 1;
- 8038ab0: 4b24 ldr r3, [pc, #144] ; (8038b44 <udp_recieve_parser+0x144>)
- 8038ab2: 2201 movs r2, #1
- 8038ab4: 701a strb r2, [r3, #0]
- 8038ab6: e03a b.n 8038b2e <udp_recieve_parser+0x12e>
- return;
- }
- if (strncmp(str, "True", 4) != 0) // Если dhcp off устанавливаем параметры
- {
- memset(value, 0, len);
- 8038ab8: 4629 mov r1, r5
- 8038aba: 2264 movs r2, #100 ; 0x64
- 8038abc: a802 add r0, sp, #8
- 8038abe: f7e9 f81f bl 8021b00 <memset>
- GetUDPParamValue(buf, "\"gateway\"", value, &valueLen);
- 8038ac2: f10d 0306 add.w r3, sp, #6
- 8038ac6: 4620 mov r0, r4
- 8038ac8: 491f ldr r1, [pc, #124] ; (8038b48 <udp_recieve_parser+0x148>)
- 8038aca: aa02 add r2, sp, #8
- 8038acc: f7ff ff62 bl 8038994 <GetUDPParamValue>
- if(valueLen != 0)
- 8038ad0: f89d 3006 ldrb.w r3, [sp, #6]
- 8038ad4: b113 cbz r3, 8038adc <udp_recieve_parser+0xdc>
- SetGatewayStr(value);
- 8038ad6: a802 add r0, sp, #8
- 8038ad8: f7ef fb3c bl 8028154 <SetGatewayStr>
- memset(value, 0, len);
- 8038adc: 2100 movs r1, #0
- 8038ade: 2264 movs r2, #100 ; 0x64
- 8038ae0: a802 add r0, sp, #8
- 8038ae2: f7e9 f80d bl 8021b00 <memset>
- GetUDPParamValue(buf, "\"mask\"", value, &valueLen);
- 8038ae6: f10d 0306 add.w r3, sp, #6
- 8038aea: 4620 mov r0, r4
- 8038aec: 4917 ldr r1, [pc, #92] ; (8038b4c <udp_recieve_parser+0x14c>)
- 8038aee: aa02 add r2, sp, #8
- 8038af0: f7ff ff50 bl 8038994 <GetUDPParamValue>
- if(valueLen != 0)
- 8038af4: f89d 3006 ldrb.w r3, [sp, #6]
- 8038af8: b113 cbz r3, 8038b00 <udp_recieve_parser+0x100>
- SetMaskStr(value);
- 8038afa: a802 add r0, sp, #8
- 8038afc: f7ef fb30 bl 8028160 <SetMaskStr>
- memset(value, 0, len);
- 8038b00: a802 add r0, sp, #8
- 8038b02: 2100 movs r1, #0
- 8038b04: 2264 movs r2, #100 ; 0x64
- 8038b06: f7e8 fffb bl 8021b00 <memset>
- 8038b0a: e002 b.n 8038b12 <udp_recieve_parser+0x112>
- }
- else
- SetUDPDhcpStateStr(str);
- 8038b0c: a81b add r0, sp, #108 ; 0x6c
- 8038b0e: f7ef fb3f bl 8028190 <SetUDPDhcpStateStr>
- // Если параметры WEB изменились выставляем флаг, сохраняем настройки и перезагружаемся
- if (GetStateWebReinit() == true)
- 8038b12: f7ff f9af bl 8037e74 <GetStateWebReinit>
- 8038b16: b150 cbz r0, 8038b2e <udp_recieve_parser+0x12e>
- {
- // _message_add_to_log("Изменение сетевых настр", "Инфо", "ND");
- SetWebReinitFlag(false);
- 8038b18: 2000 movs r0, #0
- 8038b1a: f7ef fb09 bl 8028130 <SetWebReinitFlag>
- SetConfirmWebParamsFlag();
- 8038b1e: f7ef fb0d bl 802813c <SetConfirmWebParamsFlag>
- SaveWEBparam();
- 8038b22: f7ff f98b bl 8037e3c <SaveWEBparam>
- HTTP_SaveSettings();
- 8038b26: f7f5 f949 bl 802ddbc <HTTP_SaveSettings>
- Reboot();
- 8038b2a: f7f0 faeb bl 8029104 <Reboot>
- }
- }
- }
- 8038b2e: b035 add sp, #212 ; 0xd4
- 8038b30: bd30 pop {r4, r5, pc}
- 8038b32: bf00 nop
- 8038b34: 08045b59 .word 0x08045b59
- 8038b38: 08045b61 .word 0x08045b61
- 8038b3c: 08045b68 .word 0x08045b68
- 8038b40: 08040e43 .word 0x08040e43
- 8038b44: 2000c800 .word 0x2000c800
- 8038b48: 08045b74 .word 0x08045b74
- 8038b4c: 08045b7e .word 0x08045b7e
- 08038b50 <http_server_serve>:
- bool http_server_serve(struct netconn *conn)
- {
- 8038b50: b51f push {r0, r1, r2, r3, r4, lr}
- err_t res;
- char* buf;
- u16_t buflen;
- bool flag = false;
- netconn_set_recvtimeout(conn, RCV_TIMEOUT);
- 8038b52: f44f 737a mov.w r3, #1000 ; 0x3e8
- 8038b56: 6183 str r3, [r0, #24]
- res = netconn_recv(conn, &inbuf);
- 8038b58: a902 add r1, sp, #8
- 8038b5a: f7f5 fa6d bl 802e038 <netconn_recv>
- // DBG printf("recv failed %d\n", res);
- if (res == ERR_OK)
- 8038b5e: b978 cbnz r0, 8038b80 <http_server_serve+0x30>
- {
- netbuf_data(inbuf, (void**)&buf, &buflen);
- 8038b60: f10d 0206 add.w r2, sp, #6
- 8038b64: a903 add r1, sp, #12
- 8038b66: 9802 ldr r0, [sp, #8]
- 8038b68: f7f5 ff61 bl 802ea2e <netbuf_data>
- udp_recieve_parser(buf, buflen);
- 8038b6c: 9803 ldr r0, [sp, #12]
- 8038b6e: f8bd 1006 ldrh.w r1, [sp, #6]
- 8038b72: f7ff ff45 bl 8038a00 <udp_recieve_parser>
- flag = true;
- netbuf_delete(inbuf);
- 8038b76: 9802 ldr r0, [sp, #8]
- 8038b78: f7f5 ff33 bl 802e9e2 <netbuf_delete>
- if (res == ERR_OK)
- {
- netbuf_data(inbuf, (void**)&buf, &buflen);
- udp_recieve_parser(buf, buflen);
- flag = true;
- 8038b7c: 2001 movs r0, #1
- 8038b7e: e000 b.n 8038b82 <http_server_serve+0x32>
- {
- struct netbuf *inbuf;
- err_t res;
- char* buf;
- u16_t buflen;
- bool flag = false;
- 8038b80: 2000 movs r0, #0
- /* TODO remove if tested */
- /* Delete the buffer (netconn_recv gives us ownership,
- so we have to make sure to deallocate the buffer) */
- //netbuf_delete(inbuf);
- return flag;
- }
- 8038b82: b005 add sp, #20
- 8038b84: bd00 pop {pc}
- 8038b86: 0000 movs r0, r0
- 08038b88 <udp_netsettings_task>:
- void udp_netsettings_task(void *arg)
- {
- 8038b88: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
- err_t err;
- TickType_t timestamp = 0;
- uint32_t len;
- vTaskDelay(5000);
- 8038b8c: f241 3088 movw r0, #5000 ; 0x1388
- 8038b90: f7f2 fa1c bl 802afcc <vTaskDelay>
- udp_conn = netconn_new( NETCONN_UDP );
- 8038b94: 2100 movs r1, #0
- 8038b96: 2020 movs r0, #32
- 8038b98: 460a mov r2, r1
- 8038b9a: f7f5 f9bf bl 802df1c <netconn_new_with_proto_and_callback>
- if (udp_conn != NULL)
- 8038b9e: 4604 mov r4, r0
- 8038ba0: 2800 cmp r0, #0
- 8038ba2: d04a beq.n 8038c3a <udp_netsettings_task+0xb2>
- {
- err = netconn_bind(udp_conn, IP_ADDR_ANY, UDP_PORT);
- 8038ba4: 4927 ldr r1, [pc, #156] ; (8038c44 <udp_netsettings_task+0xbc>)
- 8038ba6: f64b 7299 movw r2, #49049 ; 0xbf99
- 8038baa: f7f5 f9ed bl 802df88 <netconn_bind>
- if (err == ERR_OK)
- 8038bae: 2800 cmp r0, #0
- 8038bb0: d140 bne.n 8038c34 <udp_netsettings_task+0xac>
- for( ;; )
- {
- netconn_connect(udp_conn, IP_ADDR_BROADCAST, UDP_PORT);
- memset(dataBuf1, 0, DATA_BUF_LEN1);
- switch(udp_type_message)
- 8038bb2: 4f25 ldr r7, [pc, #148] ; (8038c48 <udp_netsettings_task+0xc0>)
- if (udp_conn != NULL)
- {
- err = netconn_bind(udp_conn, IP_ADDR_ANY, UDP_PORT);
- if (err == ERR_OK)
- 8038bb4: 4606 mov r6, r0
- {
- for( ;; )
- {
- netconn_connect(udp_conn, IP_ADDR_BROADCAST, UDP_PORT);
- 8038bb6: 4925 ldr r1, [pc, #148] ; (8038c4c <udp_netsettings_task+0xc4>)
- 8038bb8: f64b 7299 movw r2, #49049 ; 0xbf99
- 8038bbc: 4620 mov r0, r4
- 8038bbe: f7f5 fa01 bl 802dfc4 <netconn_connect>
- memset(dataBuf1, 0, DATA_BUF_LEN1);
- 8038bc2: 4823 ldr r0, [pc, #140] ; (8038c50 <udp_netsettings_task+0xc8>)
- 8038bc4: 2100 movs r1, #0
- 8038bc6: 22ff movs r2, #255 ; 0xff
- 8038bc8: f7e8 ff9a bl 8021b00 <memset>
- switch(udp_type_message)
- 8038bcc: 783b ldrb r3, [r7, #0]
- 8038bce: b113 cbz r3, 8038bd6 <udp_netsettings_task+0x4e>
- 8038bd0: 2b01 cmp r3, #1
- 8038bd2: d112 bne.n 8038bfa <udp_netsettings_task+0x72>
- 8038bd4: e00c b.n 8038bf0 <udp_netsettings_task+0x68>
- {
- case 0:
- if (timestamp + SEND_TIMEOUT < xTaskGetTickCount()) {
- 8038bd6: f7f2 f8c7 bl 802ad68 <xTaskGetTickCount>
- 8038bda: f506 63fa add.w r3, r6, #2000 ; 0x7d0
- 8038bde: 4283 cmp r3, r0
- 8038be0: d20b bcs.n 8038bfa <udp_netsettings_task+0x72>
- udp_message(dataBuf1);
- 8038be2: 481b ldr r0, [pc, #108] ; (8038c50 <udp_netsettings_task+0xc8>)
- 8038be4: f7ff fe10 bl 8038808 <udp_message>
- timestamp = xTaskGetTickCount();
- 8038be8: f7f2 f8be bl 802ad68 <xTaskGetTickCount>
- 8038bec: 4606 mov r6, r0
- 8038bee: e004 b.n 8038bfa <udp_netsettings_task+0x72>
- }
- break;
- case 1:
- udp_message_netSettings(dataBuf1);
- 8038bf0: 4817 ldr r0, [pc, #92] ; (8038c50 <udp_netsettings_task+0xc8>)
- 8038bf2: f7ff fe6d bl 80388d0 <udp_message_netSettings>
- udp_type_message = 0;
- 8038bf6: 2300 movs r3, #0
- 8038bf8: 703b strb r3, [r7, #0]
- break;
- default:
- break;
- }
- len = strlen(dataBuf1);
- 8038bfa: 4815 ldr r0, [pc, #84] ; (8038c50 <udp_netsettings_task+0xc8>)
- 8038bfc: f7e9 f958 bl 8021eb0 <strlen>
- if (len > 0) {
- 8038c00: 4605 mov r5, r0
- 8038c02: b180 cbz r0, 8038c26 <udp_netsettings_task+0x9e>
- buf_snd = netbuf_new();
- 8038c04: f7f5 fee2 bl 802e9cc <netbuf_new>
- data_snd = netbuf_alloc(buf_snd,len);
- 8038c08: b2a9 uxth r1, r5
- }
- len = strlen(dataBuf1);
- if (len > 0) {
- buf_snd = netbuf_new();
- 8038c0a: 4680 mov r8, r0
- data_snd = netbuf_alloc(buf_snd,len);
- 8038c0c: f7f5 fefa bl 802ea04 <netbuf_alloc>
- memcpy(data_snd, dataBuf1, len);
- 8038c10: 490f ldr r1, [pc, #60] ; (8038c50 <udp_netsettings_task+0xc8>)
- 8038c12: 462a mov r2, r5
- 8038c14: f7e8 feba bl 802198c <memcpy>
- netconn_send(udp_conn, buf_snd);
- 8038c18: 4620 mov r0, r4
- 8038c1a: 4641 mov r1, r8
- 8038c1c: f7f5 fa46 bl 802e0ac <netconn_send>
- netbuf_delete(buf_snd);
- 8038c20: 4640 mov r0, r8
- 8038c22: f7f5 fede bl 802e9e2 <netbuf_delete>
- DBG printf("\r\nSent (%u bytes): \t%s\r\n", (unsigned int)len, dataBuf1);
- }
- netconn_disconnect(udp_conn);
- 8038c26: 4620 mov r0, r4
- 8038c28: f7f5 f9ea bl 802e000 <netconn_disconnect>
- /* TODO remove if tested */
- //if(http_server_serve(udp_conn))
- //vTaskDelay(1000);
- http_server_serve(udp_conn);
- 8038c2c: 4620 mov r0, r4
- 8038c2e: f7ff ff8f bl 8038b50 <http_server_serve>
- }
- 8038c32: e7c0 b.n 8038bb6 <udp_netsettings_task+0x2e>
- }
- else
- {
- netconn_delete(udp_conn);
- 8038c34: 4620 mov r0, r4
- 8038c36: f7f5 f995 bl 802df64 <netconn_delete>
- else
- DBG printf("udp_netsettings_task: can't create new UDP netconn\r\n");
- for( ;; )
- {
- vTaskDelay(10000);
- 8038c3a: f242 7010 movw r0, #10000 ; 0x2710
- 8038c3e: f7f2 f9c5 bl 802afcc <vTaskDelay>
- 8038c42: e7fa b.n 8038c3a <udp_netsettings_task+0xb2>
- 8038c44: 08045008 .word 0x08045008
- 8038c48: 2000c800 .word 0x2000c800
- 8038c4c: 08045004 .word 0x08045004
- 8038c50: 2000fb64 .word 0x2000fb64
- 08038c54 <UDP_netsetting_init>:
- }
- }
- void UDP_netsetting_init() {
- 8038c54: b51f push {r0, r1, r2, r3, r4, lr}
- xTaskCreate(udp_netsettings_task, ( char * ) "udp_netsettings_task", 4*configMINIMAL_STACK_SIZE , NULL, tskIDLE_PRIORITY, NULL);
- 8038c56: 2300 movs r3, #0
- 8038c58: 9300 str r3, [sp, #0]
- 8038c5a: 9301 str r3, [sp, #4]
- 8038c5c: 9302 str r3, [sp, #8]
- 8038c5e: 9303 str r3, [sp, #12]
- 8038c60: 4903 ldr r1, [pc, #12] ; (8038c70 <UDP_netsetting_init+0x1c>)
- 8038c62: 4804 ldr r0, [pc, #16] ; (8038c74 <UDP_netsetting_init+0x20>)
- 8038c64: f44f 7200 mov.w r2, #512 ; 0x200
- 8038c68: f7f1 ff16 bl 802aa98 <xTaskGenericCreate>
- }
- 8038c6c: b005 add sp, #20
- 8038c6e: bd00 pop {pc}
- 8038c70: 08045b85 .word 0x08045b85
- 8038c74: 08038b89 .word 0x08038b89
- 08038c78 <ETH_BSP_Config>:
- * @brief ETH_BSP_Config
- * @param None
- * @retval None
- */
- void ETH_BSP_Config(void)
- {
- 8038c78: b570 push {r4, r5, r6, lr}
- {
- volatile uint32_t i;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIOs clocks */
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB
- 8038c7a: 2007 movs r0, #7
- * @brief ETH_BSP_Config
- * @param None
- * @retval None
- */
- void ETH_BSP_Config(void)
- {
- 8038c7c: b0b4 sub sp, #208 ; 0xd0
- {
- volatile uint32_t i;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIOs clocks */
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB
- 8038c7e: 2101 movs r1, #1
- 8038c80: f7ec fd64 bl 802574c <RCC_AHB1PeriphClockCmd>
- | RCC_AHB1Periph_GPIOC, ENABLE);
- /* Enable SYSCFG clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
- 8038c84: 2101 movs r1, #1
- 8038c86: f44f 4080 mov.w r0, #16384 ; 0x4000
- 8038c8a: f7ec fd83 bl 8025794 <RCC_APB2PeriphClockCmd>
-
- /* MII/RMII Media interface selection --------------------------------------*/
- SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII);
- 8038c8e: 2001 movs r0, #1
- 8038c90: f7ec ff74 bl 8025b7c <SYSCFG_ETH_MediaInterfaceConfig>
- ETH_RST_PIN -------> PE2 - замена на PE13
-
- */
- /* Configure PA1,PA2 and PA7 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;
- 8038c94: 2386 movs r3, #134 ; 0x86
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- 8038c96: 2400 movs r4, #0
- */
- /* Configure PA1,PA2 and PA7 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- 8038c98: 2502 movs r5, #2
- ETH_RST_PIN -------> PE2 - замена на PE13
-
- */
- /* Configure PA1,PA2 and PA7 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;
- 8038c9a: 9303 str r3, [sp, #12]
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- 8038c9c: 4864 ldr r0, [pc, #400] ; (8038e30 <ETH_BSP_Config+0x1b8>)
- */
- /* Configure PA1,PA2 and PA7 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- 8038c9e: f88d 5010 strb.w r5, [sp, #16]
-
- */
- /* Configure PA1,PA2 and PA7 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- 8038ca2: 2303 movs r3, #3
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- 8038ca4: a903 add r1, sp, #12
-
- */
- /* Configure PA1,PA2 and PA7 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- 8038ca6: f88d 3011 strb.w r3, [sp, #17]
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- 8038caa: f88d 4012 strb.w r4, [sp, #18]
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
- 8038cae: f88d 4013 strb.w r4, [sp, #19]
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- 8038cb2: f7ec fc6b bl 802558c <GPIO_Init>
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH);
- 8038cb6: 2101 movs r1, #1
- 8038cb8: 220b movs r2, #11
- 8038cba: 485d ldr r0, [pc, #372] ; (8038e30 <ETH_BSP_Config+0x1b8>)
- 8038cbc: f7ec fcaf bl 802561e <GPIO_PinAFConfig>
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH);
- 8038cc0: 220b movs r2, #11
- 8038cc2: 485b ldr r0, [pc, #364] ; (8038e30 <ETH_BSP_Config+0x1b8>)
- 8038cc4: 4629 mov r1, r5
- 8038cc6: f7ec fcaa bl 802561e <GPIO_PinAFConfig>
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);
- 8038cca: 220b movs r2, #11
- 8038ccc: 2107 movs r1, #7
- 8038cce: 4858 ldr r0, [pc, #352] ; (8038e30 <ETH_BSP_Config+0x1b8>)
- 8038cd0: f7ec fca5 bl 802561e <GPIO_PinAFConfig>
- /* Configure PB10,PB11,PB12 and PB13 */
- GPIO_InitStructure.GPIO_Pin = /* GPIO_Pin_10 | */ GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
- 8038cd4: f44f 5360 mov.w r3, #14336 ; 0x3800
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- 8038cd8: 4856 ldr r0, [pc, #344] ; (8038e34 <ETH_BSP_Config+0x1bc>)
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);
- /* Configure PB10,PB11,PB12 and PB13 */
- GPIO_InitStructure.GPIO_Pin = /* GPIO_Pin_10 | */ GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
- 8038cda: 9303 str r3, [sp, #12]
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- 8038cdc: a903 add r1, sp, #12
- 8038cde: f7ec fc55 bl 802558c <GPIO_Init>
- //GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_ETH);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_ETH);
- 8038ce2: 210b movs r1, #11
- 8038ce4: 460a mov r2, r1
- 8038ce6: 4853 ldr r0, [pc, #332] ; (8038e34 <ETH_BSP_Config+0x1bc>)
- 8038ce8: f7ec fc99 bl 802561e <GPIO_PinAFConfig>
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_ETH);
- 8038cec: 210c movs r1, #12
- 8038cee: 220b movs r2, #11
- 8038cf0: 4850 ldr r0, [pc, #320] ; (8038e34 <ETH_BSP_Config+0x1bc>)
- 8038cf2: f7ec fc94 bl 802561e <GPIO_PinAFConfig>
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_ETH);
- 8038cf6: 220b movs r2, #11
- 8038cf8: 210d movs r1, #13
- 8038cfa: 484e ldr r0, [pc, #312] ; (8038e34 <ETH_BSP_Config+0x1bc>)
- 8038cfc: f7ec fc8f bl 802561e <GPIO_PinAFConfig>
- /* Configure PC1, PC4 and PC5 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
- 8038d00: 2332 movs r3, #50 ; 0x32
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- 8038d02: 484d ldr r0, [pc, #308] ; (8038e38 <ETH_BSP_Config+0x1c0>)
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_ETH);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_ETH);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_ETH);
- /* Configure PC1, PC4 and PC5 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
- 8038d04: 9303 str r3, [sp, #12]
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- 8038d06: a903 add r1, sp, #12
- 8038d08: f7ec fc40 bl 802558c <GPIO_Init>
- GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH);
- 8038d0c: 484a ldr r0, [pc, #296] ; (8038e38 <ETH_BSP_Config+0x1c0>)
- 8038d0e: 2101 movs r1, #1
- 8038d10: 220b movs r2, #11
- 8038d12: f7ec fc84 bl 802561e <GPIO_PinAFConfig>
- GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH);
- 8038d16: 4848 ldr r0, [pc, #288] ; (8038e38 <ETH_BSP_Config+0x1c0>)
- 8038d18: 2104 movs r1, #4
- 8038d1a: 220b movs r2, #11
- 8038d1c: f7ec fc7f bl 802561e <GPIO_PinAFConfig>
- GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH);
- 8038d20: 220b movs r2, #11
- 8038d22: 4845 ldr r0, [pc, #276] ; (8038e38 <ETH_BSP_Config+0x1c0>)
- 8038d24: 2105 movs r1, #5
- 8038d26: f7ec fc7a bl 802561e <GPIO_PinAFConfig>
- /* Configure the PHY RST pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- 8038d2a: f44f 5600 mov.w r6, #8192 ; 0x2000
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- 8038d2e: 2301 movs r3, #1
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- 8038d30: 4842 ldr r0, [pc, #264] ; (8038e3c <ETH_BSP_Config+0x1c4>)
- GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH);
- GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH);
- /* Configure the PHY RST pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- 8038d32: f88d 3010 strb.w r3, [sp, #16]
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- 8038d36: a903 add r1, sp, #12
- /* Configure the PHY RST pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- 8038d38: f88d 3013 strb.w r3, [sp, #19]
- GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH);
- GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH);
- GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH);
- /* Configure the PHY RST pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- 8038d3c: 9603 str r6, [sp, #12]
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- 8038d3e: f88d 4012 strb.w r4, [sp, #18]
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- 8038d42: f88d 5011 strb.w r5, [sp, #17]
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- 8038d46: f7ec fc21 bl 802558c <GPIO_Init>
- GPIO_ResetBits(GPIOE, GPIO_Pin_13);
- 8038d4a: 483c ldr r0, [pc, #240] ; (8038e3c <ETH_BSP_Config+0x1c4>)
- 8038d4c: 4631 mov r1, r6
- 8038d4e: f7ec fc64 bl 802561a <GPIO_ResetBits>
- for (i = 0; i < 20000; i++);
- 8038d52: 9401 str r4, [sp, #4]
- 8038d54: f644 631f movw r3, #19999 ; 0x4e1f
- 8038d58: e002 b.n 8038d60 <ETH_BSP_Config+0xe8>
- 8038d5a: 9a01 ldr r2, [sp, #4]
- 8038d5c: 3201 adds r2, #1
- 8038d5e: 9201 str r2, [sp, #4]
- 8038d60: 9a01 ldr r2, [sp, #4]
- 8038d62: 429a cmp r2, r3
- 8038d64: d9f9 bls.n 8038d5a <ETH_BSP_Config+0xe2>
- GPIO_SetBits(GPIOE, GPIO_Pin_13);
- 8038d66: 4835 ldr r0, [pc, #212] ; (8038e3c <ETH_BSP_Config+0x1c4>)
- 8038d68: f44f 5100 mov.w r1, #8192 ; 0x2000
- 8038d6c: f7ec fc53 bl 8025616 <GPIO_SetBits>
- for (i = 0; i < 20000; i++);
- 8038d70: 2300 movs r3, #0
- 8038d72: 9301 str r3, [sp, #4]
- 8038d74: f644 631f movw r3, #19999 ; 0x4e1f
- 8038d78: e002 b.n 8038d80 <ETH_BSP_Config+0x108>
- 8038d7a: 9a01 ldr r2, [sp, #4]
- 8038d7c: 3201 adds r2, #1
- 8038d7e: 9201 str r2, [sp, #4]
- 8038d80: 9a01 ldr r2, [sp, #4]
- 8038d82: 429a cmp r2, r3
- 8038d84: d9f9 bls.n 8038d7a <ETH_BSP_Config+0x102>
- static void ETH_MACDMA_Config(void)
- {
- ETH_InitTypeDef ETH_InitStructure;
- /* Enable ETHERNET clock */
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx |
- 8038d86: f04f 6060 mov.w r0, #234881024 ; 0xe000000
- 8038d8a: 2101 movs r1, #1
- 8038d8c: f7ec fcde bl 802574c <RCC_AHB1PeriphClockCmd>
- RCC_AHB1Periph_ETH_MAC_Rx, ENABLE);
- /* Reset ETHERNET on AHB Bus */
- ETH_DeInit();
- 8038d90: f000 f868 bl 8038e64 <ETH_DeInit>
- /* Software reset */
- ETH_SoftwareReset();
- 8038d94: f000 f9fe bl 8039194 <ETH_SoftwareReset>
- /* Wait for software reset */
- while (ETH_GetSoftwareResetStatus() == SET);
- 8038d98: f000 fa04 bl 80391a4 <ETH_GetSoftwareResetStatus>
- 8038d9c: 2801 cmp r0, #1
- 8038d9e: d0fb beq.n 8038d98 <ETH_BSP_Config+0x120>
- /* ETHERNET Configuration --------------------------------------------------*/
- /* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */
- ETH_StructInit(Ð_InitStructure);
- 8038da0: a805 add r0, sp, #20
- 8038da2: f000 f86c bl 8038e7e <ETH_StructInit>
- //ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;
- // ETH_InitStructure.ETH_Speed = ETH_Speed_10M;
- // ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
- ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;
- ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable;
- 8038da6: f44f 7300 mov.w r3, #512 ; 0x200
- 8038daa: 930f str r3, [sp, #60] ; 0x3c
-
- /* When we use the Checksum offload feature, we need to enable the Store and Forward mode:
- the store and forward guarantee that a whole frame is stored in the FIFO, so the MAC can insert/verify the checksum,
- if the checksum is OK the DMA can handle the frame otherwise the frame is dropped */
- ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable;
- ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
- 8038dac: f04f 7300 mov.w r3, #33554432 ; 0x2000000
- 8038db0: 9326 str r3, [sp, #152] ; 0x98
- ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
-
- ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
- ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
- ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
- ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
- 8038db2: 932e str r3, [sp, #184] ; 0xb8
- ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
- 8038db4: f44f 3380 mov.w r3, #65536 ; 0x10000
- 8038db8: 932f str r3, [sp, #188] ; 0xbc
- ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
- 8038dba: f44f 0380 mov.w r3, #4194304 ; 0x400000
- /* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */
- ETH_StructInit(Ð_InitStructure);
- /* Fill ETH_InitStructure parametrs */
- /*------------------------ MAC -----------------------------------*/
- ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
- 8038dbe: 2501 movs r5, #1
- /* When we use the Checksum offload feature, we need to enable the Store and Forward mode:
- the store and forward guarantee that a whole frame is stored in the FIFO, so the MAC can insert/verify the checksum,
- if the checksum is OK the DMA can handle the frame otherwise the frame is dropped */
- ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable;
- ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
- ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
- 8038dc0: f44f 1200 mov.w r2, #2097152 ; 0x200000
- ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
- ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
- ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
- ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
- ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
- ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
- 8038dc4: 9330 str r3, [sp, #192] ; 0xc0
- ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
- 8038dc6: f44f 5300 mov.w r3, #8192 ; 0x2000
- ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
- //ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;
- // ETH_InitStructure.ETH_Speed = ETH_Speed_10M;
- // ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
- ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;
- 8038dca: 2400 movs r4, #0
- /* When we use the Checksum offload feature, we need to enable the Store and Forward mode:
- the store and forward guarantee that a whole frame is stored in the FIFO, so the MAC can insert/verify the checksum,
- if the checksum is OK the DMA can handle the frame otherwise the frame is dropped */
- ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable;
- ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
- ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
- 8038dcc: 9228 str r2, [sp, #160] ; 0xa0
- ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
- ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
- ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
- ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
- ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
- ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
- 8038dce: 9331 str r3, [sp, #196] ; 0xc4
- ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
- ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
-
- ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
- ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
- ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
- 8038dd0: 2204 movs r2, #4
- ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
- ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
- ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
- ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
- ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;
- 8038dd2: f44f 4380 mov.w r3, #16384 ; 0x4000
- /* Configure Ethernet */
- EthInitStatus = ETH_Init(Ð_InitStructure, LAN8720_PHY_ADDRESS);
- 8038dd6: 4629 mov r1, r5
- 8038dd8: a805 add r0, sp, #20
- ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
- ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
-
- ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
- ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
- ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
- 8038dda: 922d str r2, [sp, #180] ; 0xb4
- ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
- ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
- ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
- ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
- ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;
- 8038ddc: 9333 str r3, [sp, #204] ; 0xcc
- /* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */
- ETH_StructInit(Ð_InitStructure);
- /* Fill ETH_InitStructure parametrs */
- /*------------------------ MAC -----------------------------------*/
- ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
- 8038dde: 9505 str r5, [sp, #20]
- //ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;
- // ETH_InitStructure.ETH_Speed = ETH_Speed_10M;
- // ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
- ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;
- 8038de0: 940c str r4, [sp, #48] ; 0x30
- ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable;
- ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;
- 8038de2: 9410 str r4, [sp, #64] ; 0x40
- ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Disable;
- 8038de4: 9413 str r4, [sp, #76] ; 0x4c
- ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;
- 8038de6: 9416 str r4, [sp, #88] ; 0x58
- ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
- 8038de8: 9418 str r4, [sp, #96] ; 0x60
- ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;
- 8038dea: 9419 str r4, [sp, #100] ; 0x64
- ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
- 8038dec: 941a str r4, [sp, #104] ; 0x68
- /*------------------------ DMA -----------------------------------*/
-
- /* When we use the Checksum offload feature, we need to enable the Store and Forward mode:
- the store and forward guarantee that a whole frame is stored in the FIFO, so the MAC can insert/verify the checksum,
- if the checksum is OK the DMA can handle the frame otherwise the frame is dropped */
- ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable;
- 8038dee: 9425 str r4, [sp, #148] ; 0x94
- ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
- ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
-
- ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
- 8038df0: 942a str r4, [sp, #168] ; 0xa8
- ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
- 8038df2: 942b str r4, [sp, #172] ; 0xac
- ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
- ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
- ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;
- /* Configure Ethernet */
- EthInitStatus = ETH_Init(Ð_InitStructure, LAN8720_PHY_ADDRESS);
- 8038df4: f000 fa80 bl 80392f8 <ETH_Init>
- 8038df8: 4e11 ldr r6, [pc, #68] ; (8038e40 <ETH_BSP_Config+0x1c8>)
- /* Enable the Ethernet Rx Interrupt */
- ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE);
- 8038dfa: 4629 mov r1, r5
- ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
- ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
- ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;
- /* Configure Ethernet */
- EthInitStatus = ETH_Init(Ð_InitStructure, LAN8720_PHY_ADDRESS);
- 8038dfc: 6030 str r0, [r6, #0]
- /* Enable the Ethernet Rx Interrupt */
- ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE);
- 8038dfe: 4811 ldr r0, [pc, #68] ; (8038e44 <ETH_BSP_Config+0x1cc>)
- 8038e00: f000 f9e2 bl 80391c8 <ETH_DMAITConfig>
- void ETH_NVIC_Config(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- /* 2 bit for pre-emption priority, 2 bits for subpriority */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
- 8038e04: f44f 7040 mov.w r0, #768 ; 0x300
- 8038e08: f7ec fa40 bl 802528c <NVIC_PriorityGroupConfig>
-
- /* Enable the Ethernet global Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
- 8038e0c: 233d movs r3, #61 ; 0x3d
- 8038e0e: f88d 3008 strb.w r3, [sp, #8]
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- 8038e12: a802 add r0, sp, #8
- /* 2 bit for pre-emption priority, 2 bits for subpriority */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
-
- /* Enable the Ethernet global Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
- 8038e14: 2305 movs r3, #5
- 8038e16: f88d 3009 strb.w r3, [sp, #9]
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- 8038e1a: f88d 400a strb.w r4, [sp, #10]
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- 8038e1e: f88d 500b strb.w r5, [sp, #11]
- NVIC_Init(&NVIC_InitStructure);
- 8038e22: f7ec fa3d bl 80252a0 <NVIC_Init>
- ETH_MACDMA_Config();
- /* Config NVIC for Ethernet */
- ETH_NVIC_Config();
- if (EthInitStatus == 0) {
- 8038e26: 6833 ldr r3, [r6, #0]
- 8038e28: b903 cbnz r3, 8038e2c <ETH_BSP_Config+0x1b4>
- 8038e2a: e7fe b.n 8038e2a <ETH_BSP_Config+0x1b2>
- // LCD_DisplayStringLine(Line5, (uint8_t*)" Ethernet Init ");
- // LCD_DisplayStringLine(Line6, (uint8_t*)" failed ");
- // STM_EVAL_LEDOn(LED5);
- while(1);
- }
- }
- 8038e2c: b034 add sp, #208 ; 0xd0
- 8038e2e: bd70 pop {r4, r5, r6, pc}
- 8038e30: 40020000 .word 0x40020000
- 8038e34: 40020400 .word 0x40020400
- 8038e38: 40020800 .word 0x40020800
- 8038e3c: 40021000 .word 0x40021000
- 8038e40: 2000c804 .word 0x2000c804
- 8038e44: 00010040 .word 0x00010040
- 08038e48 <ETH_Delay>:
- * @brief Inserts a delay time.
- * @param nCount: specifies the delay time length.
- * @retval None
- */
- static void ETH_Delay(__IO uint32_t nCount)
- {
- 8038e48: b084 sub sp, #16
- __IO uint32_t index = 0;
- 8038e4a: 2300 movs r3, #0
- * @brief Inserts a delay time.
- * @param nCount: specifies the delay time length.
- * @retval None
- */
- static void ETH_Delay(__IO uint32_t nCount)
- {
- 8038e4c: 9001 str r0, [sp, #4]
- __IO uint32_t index = 0;
- 8038e4e: 9303 str r3, [sp, #12]
- for(index = nCount; index != 0; index--)
- 8038e50: 9b01 ldr r3, [sp, #4]
- 8038e52: e001 b.n 8038e58 <ETH_Delay+0x10>
- 8038e54: 9b03 ldr r3, [sp, #12]
- 8038e56: 3b01 subs r3, #1
- 8038e58: 9303 str r3, [sp, #12]
- 8038e5a: 9b03 ldr r3, [sp, #12]
- 8038e5c: 2b00 cmp r3, #0
- 8038e5e: d1f9 bne.n 8038e54 <ETH_Delay+0xc>
- {
- }
- }
- 8038e60: b004 add sp, #16
- 8038e62: 4770 bx lr
- 08038e64 <ETH_DeInit>:
- * @brief Deinitializes the ETHERNET peripheral registers to their default reset values.
- * @param None
- * @retval None
- */
- void ETH_DeInit(void)
- {
- 8038e64: b508 push {r3, lr}
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, ENABLE);
- 8038e66: 2101 movs r1, #1
- 8038e68: f04f 7000 mov.w r0, #33554432 ; 0x2000000
- 8038e6c: f7ec fc9e bl 80257ac <RCC_AHB1PeriphResetCmd>
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, DISABLE);
- 8038e70: f04f 7000 mov.w r0, #33554432 ; 0x2000000
- 8038e74: 2100 movs r1, #0
- }
- 8038e76: e8bd 4008 ldmia.w sp!, {r3, lr}
- * @retval None
- */
- void ETH_DeInit(void)
- {
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, ENABLE);
- RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, DISABLE);
- 8038e7a: f7ec bc97 b.w 80257ac <RCC_AHB1PeriphResetCmd>
- 08038e7e <ETH_StructInit>:
- /* Ethernet interframe gap set to 96 bits */
- ETH_InitStruct->ETH_InterFrameGap = ETH_InterFrameGap_96Bit;
- /* Carrier Sense Enabled in Half-Duplex mode */
- ETH_InitStruct->ETH_CarrierSense = ETH_CarrierSense_Enable;
- /* PHY speed configured to 100Mbit/s */
- ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
- 8038e7e: f44f 4280 mov.w r2, #16384 ; 0x4000
- 8038e82: 6142 str r2, [r0, #20]
- /* Receive own Frames in Half-Duplex mode enabled */
- ETH_InitStruct->ETH_ReceiveOwn = ETH_ReceiveOwn_Enable;
- /* MAC MII loopback disabled */
- ETH_InitStruct->ETH_LoopbackMode = ETH_LoopbackMode_Disable;
- /* Full-Duplex mode selected */
- ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
- 8038e84: f44f 6200 mov.w r2, #2048 ; 0x800
- 8038e88: 6202 str r2, [r0, #32]
- /* Receive all frames disabled */
- ETH_InitStruct->ETH_ReceiveAll = ETH_ReceiveAll_Disable;
- /* Source address filtering (on the optional MAC addresses) disabled */
- ETH_InitStruct->ETH_SourceAddrFilter = ETH_SourceAddrFilter_Disable;
- /* Do not forward control frames that do not pass the address filtering */
- ETH_InitStruct->ETH_PassControlFrames = ETH_PassControlFrames_BlockAll;
- 8038e8a: 2240 movs r2, #64 ; 0x40
- 8038e8c: 6402 str r2, [r0, #64] ; 0x40
- /* Disable reception of Broadcast frames */
- ETH_InitStruct->ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Disable;
- 8038e8e: 2220 movs r2, #32
- 8038e90: 6442 str r2, [r0, #68] ; 0x44
- /* Initialize hash table high and low regs */
- ETH_InitStruct->ETH_HashTableHigh = 0x0;
- ETH_InitStruct->ETH_HashTableLow = 0x0;
- /* Flow control config (flow control disabled)*/
- ETH_InitStruct->ETH_PauseTime = 0x0;
- ETH_InitStruct->ETH_ZeroQuantaPause = ETH_ZeroQuantaPause_Disable;
- 8038e92: 2280 movs r2, #128 ; 0x80
- {
- /* ETH_InitStruct members default value */
- /*------------------------ MAC Configuration ---------------------------*/
-
- /* PHY Auto-negotiation enabled */
- ETH_InitStruct->ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
- 8038e94: 2301 movs r3, #1
- /* Initialize hash table high and low regs */
- ETH_InitStruct->ETH_HashTableHigh = 0x0;
- ETH_InitStruct->ETH_HashTableLow = 0x0;
- /* Flow control config (flow control disabled)*/
- ETH_InitStruct->ETH_PauseTime = 0x0;
- ETH_InitStruct->ETH_ZeroQuantaPause = ETH_ZeroQuantaPause_Disable;
- 8038e96: 6642 str r2, [r0, #100] ; 0x64
- ETH_InitStruct->ETH_VLANTagIdentifier = 0x0;
-
- /*---------------------- DMA Configuration -------------------------------*/
- /* Drops frames with with TCP/IP checksum errors */
- ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Disable;
- 8038e98: f04f 6280 mov.w r2, #67108864 ; 0x4000000
- {
- /* ETH_InitStruct members default value */
- /*------------------------ MAC Configuration ---------------------------*/
-
- /* PHY Auto-negotiation enabled */
- ETH_InitStruct->ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
- 8038e9c: 6003 str r3, [r0, #0]
- ETH_InitStruct->ETH_VLANTagIdentifier = 0x0;
-
- /*---------------------- DMA Configuration -------------------------------*/
- /* Drops frames with with TCP/IP checksum errors */
- ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Disable;
- 8038e9e: f8c0 2080 str.w r2, [r0, #128] ; 0x80
- /*------------------------ MAC Configuration ---------------------------*/
-
- /* PHY Auto-negotiation enabled */
- ETH_InitStruct->ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
- /* MAC watchdog enabled: cuts-off long frame */
- ETH_InitStruct->ETH_Watchdog = ETH_Watchdog_Enable;
- 8038ea2: 2300 movs r3, #0
- /*---------------------- DMA Configuration -------------------------------*/
- /* Drops frames with with TCP/IP checksum errors */
- ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Disable;
- /* Store and forward mode enabled for receive */
- ETH_InitStruct->ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
- 8038ea4: f04f 7200 mov.w r2, #33554432 ; 0x2000000
- /*------------------------ MAC Configuration ---------------------------*/
-
- /* PHY Auto-negotiation enabled */
- ETH_InitStruct->ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
- /* MAC watchdog enabled: cuts-off long frame */
- ETH_InitStruct->ETH_Watchdog = ETH_Watchdog_Enable;
- 8038ea8: 6043 str r3, [r0, #4]
- /* MAC Jabber enabled in Half-duplex mode */
- ETH_InitStruct->ETH_Jabber = ETH_Jabber_Enable;
- 8038eaa: 6083 str r3, [r0, #8]
- /* Ethernet interframe gap set to 96 bits */
- ETH_InitStruct->ETH_InterFrameGap = ETH_InterFrameGap_96Bit;
- 8038eac: 60c3 str r3, [r0, #12]
- /* Carrier Sense Enabled in Half-Duplex mode */
- ETH_InitStruct->ETH_CarrierSense = ETH_CarrierSense_Enable;
- 8038eae: 6103 str r3, [r0, #16]
- /* PHY speed configured to 100Mbit/s */
- ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
- /* Receive own Frames in Half-Duplex mode enabled */
- ETH_InitStruct->ETH_ReceiveOwn = ETH_ReceiveOwn_Enable;
- 8038eb0: 6183 str r3, [r0, #24]
- /* MAC MII loopback disabled */
- ETH_InitStruct->ETH_LoopbackMode = ETH_LoopbackMode_Disable;
- 8038eb2: 61c3 str r3, [r0, #28]
- /* Full-Duplex mode selected */
- ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
- /* IPv4 and TCP/UDP/ICMP frame Checksum Offload disabled */
- ETH_InitStruct->ETH_ChecksumOffload = ETH_ChecksumOffload_Disable;
- 8038eb4: 6243 str r3, [r0, #36] ; 0x24
- /* Retry Transmission enabled for half-duplex mode */
- ETH_InitStruct->ETH_RetryTransmission = ETH_RetryTransmission_Enable;
- 8038eb6: 6283 str r3, [r0, #40] ; 0x28
- /* Automatic PAD/CRC strip disabled*/
- ETH_InitStruct->ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;
- 8038eb8: 62c3 str r3, [r0, #44] ; 0x2c
- /* half-duplex mode retransmission Backoff time_limit = 10 slot times*/
- ETH_InitStruct->ETH_BackOffLimit = ETH_BackOffLimit_10;
- 8038eba: 6303 str r3, [r0, #48] ; 0x30
- /* half-duplex mode Deferral check disabled */
- ETH_InitStruct->ETH_DeferralCheck = ETH_DeferralCheck_Disable;
- 8038ebc: 6343 str r3, [r0, #52] ; 0x34
- /* Receive all frames disabled */
- ETH_InitStruct->ETH_ReceiveAll = ETH_ReceiveAll_Disable;
- 8038ebe: 6383 str r3, [r0, #56] ; 0x38
- /* Source address filtering (on the optional MAC addresses) disabled */
- ETH_InitStruct->ETH_SourceAddrFilter = ETH_SourceAddrFilter_Disable;
- 8038ec0: 63c3 str r3, [r0, #60] ; 0x3c
- /* Do not forward control frames that do not pass the address filtering */
- ETH_InitStruct->ETH_PassControlFrames = ETH_PassControlFrames_BlockAll;
- /* Disable reception of Broadcast frames */
- ETH_InitStruct->ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Disable;
- /* Normal Destination address filtering (not reverse addressing) */
- ETH_InitStruct->ETH_DestinationAddrFilter = ETH_DestinationAddrFilter_Normal;
- 8038ec2: 6483 str r3, [r0, #72] ; 0x48
- /* Promiscuous address filtering mode disabled */
- ETH_InitStruct->ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
- 8038ec4: 64c3 str r3, [r0, #76] ; 0x4c
- /* Perfect address filtering for multicast addresses */
- ETH_InitStruct->ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;
- 8038ec6: 6503 str r3, [r0, #80] ; 0x50
- /* Perfect address filtering for unicast addresses */
- ETH_InitStruct->ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
- 8038ec8: 6543 str r3, [r0, #84] ; 0x54
- /* Initialize hash table high and low regs */
- ETH_InitStruct->ETH_HashTableHigh = 0x0;
- 8038eca: 6583 str r3, [r0, #88] ; 0x58
- ETH_InitStruct->ETH_HashTableLow = 0x0;
- 8038ecc: 65c3 str r3, [r0, #92] ; 0x5c
- /* Flow control config (flow control disabled)*/
- ETH_InitStruct->ETH_PauseTime = 0x0;
- 8038ece: 6603 str r3, [r0, #96] ; 0x60
- ETH_InitStruct->ETH_ZeroQuantaPause = ETH_ZeroQuantaPause_Disable;
- ETH_InitStruct->ETH_PauseLowThreshold = ETH_PauseLowThreshold_Minus4;
- 8038ed0: 6683 str r3, [r0, #104] ; 0x68
- ETH_InitStruct->ETH_UnicastPauseFrameDetect = ETH_UnicastPauseFrameDetect_Disable;
- 8038ed2: 66c3 str r3, [r0, #108] ; 0x6c
- ETH_InitStruct->ETH_ReceiveFlowControl = ETH_ReceiveFlowControl_Disable;
- 8038ed4: 6703 str r3, [r0, #112] ; 0x70
- ETH_InitStruct->ETH_TransmitFlowControl = ETH_TransmitFlowControl_Disable;
- 8038ed6: 6743 str r3, [r0, #116] ; 0x74
- /* VLANtag config (VLAN field not checked) */
- ETH_InitStruct->ETH_VLANTagComparison = ETH_VLANTagComparison_16Bit;
- 8038ed8: 6783 str r3, [r0, #120] ; 0x78
- ETH_InitStruct->ETH_VLANTagIdentifier = 0x0;
- 8038eda: 67c3 str r3, [r0, #124] ; 0x7c
- /*---------------------- DMA Configuration -------------------------------*/
- /* Drops frames with with TCP/IP checksum errors */
- ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Disable;
- /* Store and forward mode enabled for receive */
- ETH_InitStruct->ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
- 8038edc: f8c0 2084 str.w r2, [r0, #132] ; 0x84
- ETH_InitStruct->ETH_ReceiveThresholdControl = ETH_ReceiveThresholdControl_64Bytes;
- /* Disable Operate on second frame (transmit a second frame to FIFO without
- waiting status of previous frame*/
- ETH_InitStruct->ETH_SecondFrameOperate = ETH_SecondFrameOperate_Disable;
- /* DMA works on 32-bit aligned start source and destinations addresses */
- ETH_InitStruct->ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
- 8038ee0: f8c0 20a4 str.w r2, [r0, #164] ; 0xa4
- /* Enabled Fixed Burst Mode (mix of INC4, INC8, INC16 and SINGLE DMA transactions */
- ETH_InitStruct->ETH_FixedBurst = ETH_FixedBurst_Enable;
- 8038ee4: f44f 3280 mov.w r2, #65536 ; 0x10000
- 8038ee8: f8c0 20a8 str.w r2, [r0, #168] ; 0xa8
- /* DMA transfer max burst length = 32 beats = 32 x 32bits */
- ETH_InitStruct->ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
- 8038eec: f44f 0280 mov.w r2, #4194304 ; 0x400000
- /* Store and forward mode enabled for receive */
- ETH_InitStruct->ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
- /* Flush received frame that created FIFO overflow */
- ETH_InitStruct->ETH_FlushReceivedFrame = ETH_FlushReceivedFrame_Enable;
- /* Store and forward mode enabled for transmit */
- ETH_InitStruct->ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
- 8038ef0: f44f 1100 mov.w r1, #2097152 ; 0x200000
- /* DMA works on 32-bit aligned start source and destinations addresses */
- ETH_InitStruct->ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
- /* Enabled Fixed Burst Mode (mix of INC4, INC8, INC16 and SINGLE DMA transactions */
- ETH_InitStruct->ETH_FixedBurst = ETH_FixedBurst_Enable;
- /* DMA transfer max burst length = 32 beats = 32 x 32bits */
- ETH_InitStruct->ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
- 8038ef4: f8c0 20ac str.w r2, [r0, #172] ; 0xac
- ETH_InitStruct->ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
- 8038ef8: f44f 5200 mov.w r2, #8192 ; 0x2000
- /* Drops frames with with TCP/IP checksum errors */
- ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Disable;
- /* Store and forward mode enabled for receive */
- ETH_InitStruct->ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
- /* Flush received frame that created FIFO overflow */
- ETH_InitStruct->ETH_FlushReceivedFrame = ETH_FlushReceivedFrame_Enable;
- 8038efc: f8c0 3088 str.w r3, [r0, #136] ; 0x88
- /* Store and forward mode enabled for transmit */
- ETH_InitStruct->ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
- 8038f00: f8c0 108c str.w r1, [r0, #140] ; 0x8c
- /* Threshold TXFIFO level set to 64 bytes (used when threshold mode is enabled) */
- ETH_InitStruct->ETH_TransmitThresholdControl = ETH_TransmitThresholdControl_64Bytes;
- 8038f04: f8c0 3090 str.w r3, [r0, #144] ; 0x90
- /* Disable forwarding frames with errors (short frames, CRC,...)*/
- ETH_InitStruct->ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
- 8038f08: f8c0 3094 str.w r3, [r0, #148] ; 0x94
- /* Disable undersized good frames */
- ETH_InitStruct->ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
- 8038f0c: f8c0 3098 str.w r3, [r0, #152] ; 0x98
- /* Threshold RXFIFO level set to 64 bytes (used when Cut-through mode is enabled) */
- ETH_InitStruct->ETH_ReceiveThresholdControl = ETH_ReceiveThresholdControl_64Bytes;
- 8038f10: f8c0 309c str.w r3, [r0, #156] ; 0x9c
- /* Disable Operate on second frame (transmit a second frame to FIFO without
- waiting status of previous frame*/
- ETH_InitStruct->ETH_SecondFrameOperate = ETH_SecondFrameOperate_Disable;
- 8038f14: f8c0 30a0 str.w r3, [r0, #160] ; 0xa0
- ETH_InitStruct->ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
- /* Enabled Fixed Burst Mode (mix of INC4, INC8, INC16 and SINGLE DMA transactions */
- ETH_InitStruct->ETH_FixedBurst = ETH_FixedBurst_Enable;
- /* DMA transfer max burst length = 32 beats = 32 x 32bits */
- ETH_InitStruct->ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
- ETH_InitStruct->ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
- 8038f18: f8c0 20b0 str.w r2, [r0, #176] ; 0xb0
- /* DMA Ring mode skip length = 0 */
- ETH_InitStruct->ETH_DescriptorSkipLength = 0x0;
- 8038f1c: f8c0 30b4 str.w r3, [r0, #180] ; 0xb4
- /* Equal priority (round-robin) between transmit and receive DMA engines */
- ETH_InitStruct->ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_1_1;
- 8038f20: f8c0 30b8 str.w r3, [r0, #184] ; 0xb8
- 8038f24: 4770 bx lr
- 8038f26: 0000 movs r0, r0
- 08038f28 <ETH_MACTransmissionCmd>:
- * @param NewState: new state of the MAC transmission.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void ETH_MACTransmissionCmd(FunctionalState NewState)
- {
- 8038f28: 4b04 ldr r3, [pc, #16] ; (8038f3c <ETH_MACTransmissionCmd+0x14>)
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- {
- /* Enable the MAC transmission */
- ETH->MACCR |= ETH_MACCR_TE;
- 8038f2a: 681a ldr r2, [r3, #0]
- void ETH_MACTransmissionCmd(FunctionalState NewState)
- {
- /* Check the parameters */
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- 8038f2c: b110 cbz r0, 8038f34 <ETH_MACTransmissionCmd+0xc>
- {
- /* Enable the MAC transmission */
- ETH->MACCR |= ETH_MACCR_TE;
- 8038f2e: f042 0208 orr.w r2, r2, #8
- 8038f32: e001 b.n 8038f38 <ETH_MACTransmissionCmd+0x10>
- }
- else
- {
- /* Disable the MAC transmission */
- ETH->MACCR &= ~ETH_MACCR_TE;
- 8038f34: f022 0208 bic.w r2, r2, #8
- 8038f38: 601a str r2, [r3, #0]
- 8038f3a: 4770 bx lr
- 8038f3c: 40028000 .word 0x40028000
- 08038f40 <ETH_MACReceptionCmd>:
- * @param NewState: new state of the MAC reception.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void ETH_MACReceptionCmd(FunctionalState NewState)
- {
- 8038f40: 4b04 ldr r3, [pc, #16] ; (8038f54 <ETH_MACReceptionCmd+0x14>)
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- {
- /* Enable the MAC reception */
- ETH->MACCR |= ETH_MACCR_RE;
- 8038f42: 681a ldr r2, [r3, #0]
- void ETH_MACReceptionCmd(FunctionalState NewState)
- {
- /* Check the parameters */
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- 8038f44: b110 cbz r0, 8038f4c <ETH_MACReceptionCmd+0xc>
- {
- /* Enable the MAC reception */
- ETH->MACCR |= ETH_MACCR_RE;
- 8038f46: f042 0204 orr.w r2, r2, #4
- 8038f4a: e001 b.n 8038f50 <ETH_MACReceptionCmd+0x10>
- }
- else
- {
- /* Disable the MAC reception */
- ETH->MACCR &= ~ETH_MACCR_RE;
- 8038f4c: f022 0204 bic.w r2, r2, #4
- 8038f50: 601a str r2, [r3, #0]
- 8038f52: 4770 bx lr
- 8038f54: 40028000 .word 0x40028000
- 08038f58 <ETH_MACAddressConfig>:
- uint32_t tmpreg;
- /* Check the parameters */
- assert_param(IS_ETH_MAC_ADDRESS0123(MacAddr));
-
- /* Calculate the selected MAC address high register */
- tmpreg = ((uint32_t)Addr[5] << 8) | (uint32_t)Addr[4];
- 8038f58: 790b ldrb r3, [r1, #4]
- 8038f5a: 794a ldrb r2, [r1, #5]
- 8038f5c: ea43 2202 orr.w r2, r3, r2, lsl #8
- /* Load the selected MAC address high register */
- (*(__IO uint32_t *) (ETH_MAC_ADDR_HBASE + MacAddr)) = tmpreg;
- 8038f60: 4b07 ldr r3, [pc, #28] ; (8038f80 <ETH_MACAddressConfig+0x28>)
- 8038f62: 50c2 str r2, [r0, r3]
- /* Calculate the selected MAC address low register */
- tmpreg = ((uint32_t)Addr[3] << 24) | ((uint32_t)Addr[2] << 16) | ((uint32_t)Addr[1] << 8) | Addr[0];
- 8038f64: 788a ldrb r2, [r1, #2]
- 8038f66: 78cb ldrb r3, [r1, #3]
- 8038f68: 0412 lsls r2, r2, #16
- 8038f6a: ea42 6203 orr.w r2, r2, r3, lsl #24
- 8038f6e: 780b ldrb r3, [r1, #0]
- 8038f70: 431a orrs r2, r3
- 8038f72: 784b ldrb r3, [r1, #1]
- 8038f74: ea42 2203 orr.w r2, r2, r3, lsl #8
-
- /* Load the selected MAC address low register */
- (*(__IO uint32_t *) (ETH_MAC_ADDR_LBASE + MacAddr)) = tmpreg;
- 8038f78: 4b02 ldr r3, [pc, #8] ; (8038f84 <ETH_MACAddressConfig+0x2c>)
- 8038f7a: 50c2 str r2, [r0, r3]
- 8038f7c: 4770 bx lr
- 8038f7e: bf00 nop
- 8038f80: 40028040 .word 0x40028040
- 8038f84: 40028044 .word 0x40028044
- 08038f88 <ETH_Get_Received_Frame_interrupt>:
- * the receive frame (should be used with interrupt mode only)
- * @param None
- * @retval Structure of type FrameTypeDef
- */
- FrameTypeDef ETH_Get_Received_Frame_interrupt(void)
- {
- 8038f88: b537 push {r0, r1, r2, r4, r5, lr}
- FrameTypeDef frame={0,0,0};
- __IO uint32_t descriptor_scan_counter = 0;
- 8038f8a: 2300 movs r3, #0
- 8038f8c: 9301 str r3, [sp, #4]
-
- /* check if first segment in frame */
- if(((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET)&&
- ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) == (uint32_t)RESET))
- {
- DMA_RX_FRAME_infos->FS_Rx_Desc = DMARxDescToGet;
- 8038f8e: 4b24 ldr r3, [pc, #144] ; (8039020 <ETH_Get_Received_Frame_interrupt+0x98>)
- 8038f90: 681a ldr r2, [r3, #0]
- 8038f92: 4b24 ldr r3, [pc, #144] ; (8039024 <ETH_Get_Received_Frame_interrupt+0x9c>)
- DMA_RX_FRAME_infos->Seg_Count = 1;
- 8038f94: 2401 movs r4, #1
- 8038f96: 681b ldr r3, [r3, #0]
- {
- FrameTypeDef frame={0,0,0};
- __IO uint32_t descriptor_scan_counter = 0;
-
- /* scan descriptors owned by CPU */
- while (((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) == (uint32_t)RESET)&&
- 8038f98: e033 b.n 8039002 <ETH_Get_Received_Frame_interrupt+0x7a>
- (descriptor_scan_counter<ETH_RXBUFNB))
- {
-
- /* Just by security */
- descriptor_scan_counter++;
- 8038f9a: 9901 ldr r1, [sp, #4]
- 8038f9c: 3101 adds r1, #1
- 8038f9e: 9101 str r1, [sp, #4]
-
- /* check if first segment in frame */
- if(((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET)&&
- 8038fa0: 6819 ldr r1, [r3, #0]
- 8038fa2: 0589 lsls r1, r1, #22
- 8038fa4: d505 bpl.n 8038fb2 <ETH_Get_Received_Frame_interrupt+0x2a>
- ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) == (uint32_t)RESET))
- 8038fa6: 6819 ldr r1, [r3, #0]
-
- /* Just by security */
- descriptor_scan_counter++;
-
- /* check if first segment in frame */
- if(((DMARxDescToGet->Status & ETH_DMARxDesc_FS) != (uint32_t)RESET)&&
- 8038fa8: 05c9 lsls r1, r1, #23
- 8038faa: d402 bmi.n 8038fb2 <ETH_Get_Received_Frame_interrupt+0x2a>
- ((DMARxDescToGet->Status & ETH_DMARxDesc_LS) == (uint32_t)RESET))
- {
- DMA_RX_FRAME_infos->FS_Rx_Desc = DMARxDescToGet;
- 8038fac: 6013 str r3, [r2, #0]
- DMA_RX_FRAME_infos->Seg_Count = 1;
- 8038fae: 6094 str r4, [r2, #8]
- 8038fb0: e009 b.n 8038fc6 <ETH_Get_Received_Frame_interrupt+0x3e>
- DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
- }
-
- /* check if intermediate segment */
- else if (((DMARxDescToGet->Status & ETH_DMARxDesc_LS) == (uint32_t)RESET)&&
- 8038fb2: 6819 ldr r1, [r3, #0]
- 8038fb4: 05c9 lsls r1, r1, #23
- 8038fb6: d408 bmi.n 8038fca <ETH_Get_Received_Frame_interrupt+0x42>
- ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) == (uint32_t)RESET))
- 8038fb8: 6819 ldr r1, [r3, #0]
- DMA_RX_FRAME_infos->Seg_Count = 1;
- DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
- }
-
- /* check if intermediate segment */
- else if (((DMARxDescToGet->Status & ETH_DMARxDesc_LS) == (uint32_t)RESET)&&
- 8038fba: 0589 lsls r1, r1, #22
- 8038fbc: d500 bpl.n 8038fc0 <ETH_Get_Received_Frame_interrupt+0x38>
- 8038fbe: e004 b.n 8038fca <ETH_Get_Received_Frame_interrupt+0x42>
- ((DMARxDescToGet->Status & ETH_DMARxDesc_FS) == (uint32_t)RESET))
- {
- (DMA_RX_FRAME_infos->Seg_Count) ++;
- 8038fc0: 6891 ldr r1, [r2, #8]
- 8038fc2: 3101 adds r1, #1
- 8038fc4: 6091 str r1, [r2, #8]
- DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
- 8038fc6: 68db ldr r3, [r3, #12]
- 8038fc8: e01b b.n 8039002 <ETH_Get_Received_Frame_interrupt+0x7a>
- 8038fca: 4a16 ldr r2, [pc, #88] ; (8039024 <ETH_Get_Received_Frame_interrupt+0x9c>)
- 8038fcc: 6013 str r3, [r2, #0]
- /* should be last segment */
- else
- {
- /* last segment */
- DMA_RX_FRAME_infos->LS_Rx_Desc = DMARxDescToGet;
- 8038fce: 4a14 ldr r2, [pc, #80] ; (8039020 <ETH_Get_Received_Frame_interrupt+0x98>)
- 8038fd0: 6812 ldr r2, [r2, #0]
- 8038fd2: 6053 str r3, [r2, #4]
-
- (DMA_RX_FRAME_infos->Seg_Count)++;
- 8038fd4: 6891 ldr r1, [r2, #8]
- 8038fd6: 3101 adds r1, #1
- 8038fd8: 6091 str r1, [r2, #8]
-
- /* first segment is last segment */
- if ((DMA_RX_FRAME_infos->Seg_Count)==1)
- 8038fda: 6891 ldr r1, [r2, #8]
- 8038fdc: 2901 cmp r1, #1
- DMA_RX_FRAME_infos->FS_Rx_Desc = DMARxDescToGet;
- 8038fde: bf08 it eq
- 8038fe0: 6013 streq r3, [r2, #0]
-
- /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */
- frame.length = ((DMARxDescToGet->Status & ETH_DMARxDesc_FL) >> ETH_DMARxDesc_FrameLengthShift) - 4;
- 8038fe2: 6819 ldr r1, [r3, #0]
-
- /* Get the address of the buffer start address */
- /* Check if more than one segment in the frame */
- if (DMA_RX_FRAME_infos->Seg_Count >1)
- 8038fe4: 6894 ldr r4, [r2, #8]
- /* first segment is last segment */
- if ((DMA_RX_FRAME_infos->Seg_Count)==1)
- DMA_RX_FRAME_infos->FS_Rx_Desc = DMARxDescToGet;
-
- /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */
- frame.length = ((DMARxDescToGet->Status & ETH_DMARxDesc_FL) >> ETH_DMARxDesc_FrameLengthShift) - 4;
- 8038fe6: f3c1 410d ubfx r1, r1, #16, #14
- 8038fea: 3904 subs r1, #4
-
- /* Get the address of the buffer start address */
- /* Check if more than one segment in the frame */
- if (DMA_RX_FRAME_infos->Seg_Count >1)
- 8038fec: 2c01 cmp r4, #1
- {
- frame.buffer =(DMA_RX_FRAME_infos->FS_Rx_Desc)->Buffer1Addr;
- 8038fee: bf8a itet hi
- 8038ff0: 6812 ldrhi r2, [r2, #0]
- }
- else
- {
- frame.buffer = DMARxDescToGet->Buffer1Addr;
- 8038ff2: 689a ldrls r2, [r3, #8]
-
- /* Get the address of the buffer start address */
- /* Check if more than one segment in the frame */
- if (DMA_RX_FRAME_infos->Seg_Count >1)
- {
- frame.buffer =(DMA_RX_FRAME_infos->FS_Rx_Desc)->Buffer1Addr;
- 8038ff4: 6892 ldrhi r2, [r2, #8]
- }
-
- frame.descriptor = DMARxDescToGet;
-
- /* Update the ETHERNET DMA global Rx descriptor with next Rx descriptor */
- DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
- 8038ff6: 4c0b ldr r4, [pc, #44] ; (8039024 <ETH_Get_Received_Frame_interrupt+0x9c>)
- 8038ff8: 68dd ldr r5, [r3, #12]
-
- /* Return Frame */
- return (frame);
- 8038ffa: e880 0006 stmia.w r0, {r1, r2}
- }
-
- frame.descriptor = DMARxDescToGet;
-
- /* Update the ETHERNET DMA global Rx descriptor with next Rx descriptor */
- DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
- 8038ffe: 6025 str r5, [r4, #0]
- 8039000: e007 b.n 8039012 <ETH_Get_Received_Frame_interrupt+0x8a>
- {
- FrameTypeDef frame={0,0,0};
- __IO uint32_t descriptor_scan_counter = 0;
-
- /* scan descriptors owned by CPU */
- while (((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) == (uint32_t)RESET)&&
- 8039002: 6819 ldr r1, [r3, #0]
- 8039004: 2900 cmp r1, #0
- 8039006: da06 bge.n 8039016 <ETH_Get_Received_Frame_interrupt+0x8e>
- 8039008: 4a06 ldr r2, [pc, #24] ; (8039024 <ETH_Get_Received_Frame_interrupt+0x9c>)
- 803900a: 6013 str r3, [r2, #0]
-
- /* Return Frame */
- return (frame);
- }
- }
- return (frame);
- 803900c: 2300 movs r3, #0
- 803900e: 6003 str r3, [r0, #0]
- 8039010: 6043 str r3, [r0, #4]
- 8039012: 6083 str r3, [r0, #8]
- 8039014: e003 b.n 803901e <ETH_Get_Received_Frame_interrupt+0x96>
- FrameTypeDef frame={0,0,0};
- __IO uint32_t descriptor_scan_counter = 0;
-
- /* scan descriptors owned by CPU */
- while (((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) == (uint32_t)RESET)&&
- (descriptor_scan_counter<ETH_RXBUFNB))
- 8039016: 9901 ldr r1, [sp, #4]
- {
- FrameTypeDef frame={0,0,0};
- __IO uint32_t descriptor_scan_counter = 0;
-
- /* scan descriptors owned by CPU */
- while (((DMARxDescToGet->Status & ETH_DMARxDesc_OWN) == (uint32_t)RESET)&&
- 8039018: 2904 cmp r1, #4
- 803901a: d9be bls.n 8038f9a <ETH_Get_Received_Frame_interrupt+0x12>
- 803901c: e7f4 b.n 8039008 <ETH_Get_Received_Frame_interrupt+0x80>
- /* Return Frame */
- return (frame);
- }
- }
- return (frame);
- }
- 803901e: bd3e pop {r1, r2, r3, r4, r5, pc}
- 8039020: 20011ae0 .word 0x20011ae0
- 8039024: 2000fc70 .word 0x2000fc70
- 08039028 <ETH_Prepare_Transmit_Descriptors>:
- {
- uint32_t buf_count =0, size=0,i=0;
- __IO ETH_DMADESCTypeDef *DMATxNextDesc;
-
- /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */
- if((DMATxDescToSet->Status & ETH_DMATxDesc_OWN) != (u32)RESET)
- 8039028: 4b29 ldr r3, [pc, #164] ; (80390d0 <ETH_Prepare_Transmit_Descriptors+0xa8>)
- 803902a: 681b ldr r3, [r3, #0]
- 803902c: 681a ldr r2, [r3, #0]
- 803902e: 2a00 cmp r2, #0
- * @brief Prepares DMA Tx descriptors to transmit an ethernet frame
- * @param FrameLength : length of the frame to send
- * @retval error status
- */
- uint32_t ETH_Prepare_Transmit_Descriptors(u16 FrameLength)
- {
- 8039030: b5f0 push {r4, r5, r6, r7, lr}
- uint32_t buf_count =0, size=0,i=0;
- __IO ETH_DMADESCTypeDef *DMATxNextDesc;
-
- /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */
- if((DMATxDescToSet->Status & ETH_DMATxDesc_OWN) != (u32)RESET)
- 8039032: db48 blt.n 80390c6 <ETH_Prepare_Transmit_Descriptors+0x9e>
- return ETH_ERROR;
- }
-
- DMATxNextDesc = DMATxDescToSet;
-
- if (FrameLength > ETH_TX_BUF_SIZE)
- 8039034: f240 52f4 movw r2, #1524 ; 0x5f4
- 8039038: 4290 cmp r0, r2
- 803903a: d917 bls.n 803906c <ETH_Prepare_Transmit_Descriptors+0x44>
- {
- buf_count = FrameLength/ETH_TX_BUF_SIZE;
- 803903c: fbb0 f4f2 udiv r4, r0, r2
- if (FrameLength%ETH_TX_BUF_SIZE) buf_count++;
- 8039040: fb02 0214 mls r2, r2, r4, r0
- 8039044: b292 uxth r2, r2
-
- DMATxNextDesc = DMATxDescToSet;
-
- if (FrameLength > ETH_TX_BUF_SIZE)
- {
- buf_count = FrameLength/ETH_TX_BUF_SIZE;
- 8039046: b2a1 uxth r1, r4
- if (FrameLength%ETH_TX_BUF_SIZE) buf_count++;
- 8039048: b10a cbz r2, 803904e <ETH_Prepare_Transmit_Descriptors+0x26>
- 803904a: 3101 adds r1, #1
- 803904c: e001 b.n 8039052 <ETH_Prepare_Transmit_Descriptors+0x2a>
- }
- else buf_count =1;
-
- if (buf_count ==1)
- 803904e: 2901 cmp r1, #1
- 8039050: d00c beq.n 803906c <ETH_Prepare_Transmit_Descriptors+0x44>
-
- if (i== (buf_count-1))
- {
- /* Setting the last segment bit */
- DMATxNextDesc->Status |= ETH_DMATxDesc_LS;
- size = FrameLength - (buf_count-1)*ETH_TX_BUF_SIZE;
- 8039052: 4d20 ldr r5, [pc, #128] ; (80390d4 <ETH_Prepare_Transmit_Descriptors+0xac>)
- 8039054: f200 50f4 addw r0, r0, #1524 ; 0x5f4
- 8039058: fb05 0501 mla r5, r5, r1, r0
- DMATxNextDesc->ControlBufferSize = (size & ETH_DMATxDesc_TBS1);
- 803905c: 04ed lsls r5, r5, #19
- 803905e: 0ced lsrs r5, r5, #19
- 8039060: 461a mov r2, r3
- 8039062: 2000 movs r0, #0
- /* Setting the first segment bit */
- DMATxDescToSet->Status |= ETH_DMATxDesc_FS;
- }
-
- /* Program size */
- DMATxNextDesc->ControlBufferSize = (ETH_TX_BUF_SIZE & ETH_DMATxDesc_TBS1);
- 8039064: f240 56f4 movw r6, #1524 ; 0x5f4
-
- if (i== (buf_count-1))
- 8039068: 1e4f subs r7, r1, #1
- 803906a: e00c b.n 8039086 <ETH_Prepare_Transmit_Descriptors+0x5e>
- else buf_count =1;
-
- if (buf_count ==1)
- {
- /*set LAST and FIRST segment */
- DMATxDescToSet->Status |=ETH_DMATxDesc_FS|ETH_DMATxDesc_LS;
- 803906c: 681a ldr r2, [r3, #0]
- /* Set frame size */
- DMATxDescToSet->ControlBufferSize = (FrameLength& ETH_DMATxDesc_TBS1);
- 803906e: 04c0 lsls r0, r0, #19
- else buf_count =1;
-
- if (buf_count ==1)
- {
- /*set LAST and FIRST segment */
- DMATxDescToSet->Status |=ETH_DMATxDesc_FS|ETH_DMATxDesc_LS;
- 8039070: f042 5240 orr.w r2, r2, #805306368 ; 0x30000000
- /* Set frame size */
- DMATxDescToSet->ControlBufferSize = (FrameLength& ETH_DMATxDesc_TBS1);
- 8039074: 0cc0 lsrs r0, r0, #19
- else buf_count =1;
-
- if (buf_count ==1)
- {
- /*set LAST and FIRST segment */
- DMATxDescToSet->Status |=ETH_DMATxDesc_FS|ETH_DMATxDesc_LS;
- 8039076: 601a str r2, [r3, #0]
- /* Set frame size */
- DMATxDescToSet->ControlBufferSize = (FrameLength& ETH_DMATxDesc_TBS1);
- 8039078: 6058 str r0, [r3, #4]
- /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */
- DMATxDescToSet->Status |= ETH_DMATxDesc_OWN;
- 803907a: 681a ldr r2, [r3, #0]
- 803907c: f042 4200 orr.w r2, r2, #2147483648 ; 0x80000000
- 8039080: 601a str r2, [r3, #0]
- DMATxDescToSet= (ETH_DMADESCTypeDef *)(DMATxDescToSet->Buffer2NextDescAddr);
- 8039082: 68da ldr r2, [r3, #12]
- 8039084: e014 b.n 80390b0 <ETH_Prepare_Transmit_Descriptors+0x88>
- }
- else
- {
- for (i=0; i< buf_count; i++)
- {
- if (i==0)
- 8039086: b918 cbnz r0, 8039090 <ETH_Prepare_Transmit_Descriptors+0x68>
- {
- /* Setting the first segment bit */
- DMATxDescToSet->Status |= ETH_DMATxDesc_FS;
- 8039088: 681c ldr r4, [r3, #0]
- 803908a: f044 5480 orr.w r4, r4, #268435456 ; 0x10000000
- 803908e: 601c str r4, [r3, #0]
- }
-
- /* Program size */
- DMATxNextDesc->ControlBufferSize = (ETH_TX_BUF_SIZE & ETH_DMATxDesc_TBS1);
-
- if (i== (buf_count-1))
- 8039090: 42b8 cmp r0, r7
- /* Setting the first segment bit */
- DMATxDescToSet->Status |= ETH_DMATxDesc_FS;
- }
-
- /* Program size */
- DMATxNextDesc->ControlBufferSize = (ETH_TX_BUF_SIZE & ETH_DMATxDesc_TBS1);
- 8039092: 6056 str r6, [r2, #4]
-
- if (i== (buf_count-1))
- 8039094: d104 bne.n 80390a0 <ETH_Prepare_Transmit_Descriptors+0x78>
- {
- /* Setting the last segment bit */
- DMATxNextDesc->Status |= ETH_DMATxDesc_LS;
- 8039096: 6814 ldr r4, [r2, #0]
- 8039098: f044 5400 orr.w r4, r4, #536870912 ; 0x20000000
- 803909c: 6014 str r4, [r2, #0]
- size = FrameLength - (buf_count-1)*ETH_TX_BUF_SIZE;
- DMATxNextDesc->ControlBufferSize = (size & ETH_DMATxDesc_TBS1);
- 803909e: 6055 str r5, [r2, #4]
- }
-
- /*give back descriptor to DMA */
- DMATxNextDesc->Status |= ETH_DMATxDesc_OWN;
- 80390a0: 6814 ldr r4, [r2, #0]
- DMATxDescToSet->Status |= ETH_DMATxDesc_OWN;
- DMATxDescToSet= (ETH_DMADESCTypeDef *)(DMATxDescToSet->Buffer2NextDescAddr);
- }
- else
- {
- for (i=0; i< buf_count; i++)
- 80390a2: 3001 adds r0, #1
- size = FrameLength - (buf_count-1)*ETH_TX_BUF_SIZE;
- DMATxNextDesc->ControlBufferSize = (size & ETH_DMATxDesc_TBS1);
- }
-
- /*give back descriptor to DMA */
- DMATxNextDesc->Status |= ETH_DMATxDesc_OWN;
- 80390a4: f044 4400 orr.w r4, r4, #2147483648 ; 0x80000000
- 80390a8: 6014 str r4, [r2, #0]
- DMATxDescToSet->Status |= ETH_DMATxDesc_OWN;
- DMATxDescToSet= (ETH_DMADESCTypeDef *)(DMATxDescToSet->Buffer2NextDescAddr);
- }
- else
- {
- for (i=0; i< buf_count; i++)
- 80390aa: 4288 cmp r0, r1
- }
-
- /*give back descriptor to DMA */
- DMATxNextDesc->Status |= ETH_DMATxDesc_OWN;
-
- DMATxNextDesc = (ETH_DMADESCTypeDef *)(DMATxNextDesc->Buffer2NextDescAddr);
- 80390ac: 68d2 ldr r2, [r2, #12]
- DMATxDescToSet->Status |= ETH_DMATxDesc_OWN;
- DMATxDescToSet= (ETH_DMADESCTypeDef *)(DMATxDescToSet->Buffer2NextDescAddr);
- }
- else
- {
- for (i=0; i< buf_count; i++)
- 80390ae: d3ea bcc.n 8039086 <ETH_Prepare_Transmit_Descriptors+0x5e>
- DMATxNextDesc->Status |= ETH_DMATxDesc_OWN;
-
- DMATxNextDesc = (ETH_DMADESCTypeDef *)(DMATxNextDesc->Buffer2NextDescAddr);
- /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */
- }
- DMATxDescToSet = DMATxNextDesc ;
- 80390b0: 4b07 ldr r3, [pc, #28] ; (80390d0 <ETH_Prepare_Transmit_Descriptors+0xa8>)
- 80390b2: 601a str r2, [r3, #0]
- }
-
- /* When Tx Buffer unavailable flag is set: clear it and resume transmission */
- if ((ETH->DMASR & ETH_DMASR_TBUS) != (u32)RESET)
- 80390b4: 4b08 ldr r3, [pc, #32] ; (80390d8 <ETH_Prepare_Transmit_Descriptors+0xb0>)
- 80390b6: 695a ldr r2, [r3, #20]
- 80390b8: 0750 lsls r0, r2, #29
- 80390ba: d506 bpl.n 80390ca <ETH_Prepare_Transmit_Descriptors+0xa2>
- {
- /* Clear TBUS ETHERNET DMA flag */
- ETH->DMASR = ETH_DMASR_TBUS;
- 80390bc: 2204 movs r2, #4
- 80390be: 615a str r2, [r3, #20]
- /* Resume DMA transmission*/
- ETH->DMATPDR = 0;
- 80390c0: 2200 movs r2, #0
- 80390c2: 605a str r2, [r3, #4]
- 80390c4: e001 b.n 80390ca <ETH_Prepare_Transmit_Descriptors+0xa2>
-
- /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */
- if((DMATxDescToSet->Status & ETH_DMATxDesc_OWN) != (u32)RESET)
- {
- /* Return ERROR: OWN bit set */
- return ETH_ERROR;
- 80390c6: 2000 movs r0, #0
- 80390c8: bdf0 pop {r4, r5, r6, r7, pc}
- /* Resume DMA transmission*/
- ETH->DMATPDR = 0;
- }
-
- /* Return SUCCESS */
- return ETH_SUCCESS;
- 80390ca: 2001 movs r0, #1
- }
- 80390cc: bdf0 pop {r4, r5, r6, r7, pc}
- 80390ce: bf00 nop
- 80390d0: 2000fc74 .word 0x2000fc74
- 80390d4: fffffa0c .word 0xfffffa0c
- 80390d8: 40029000 .word 0x40029000
- 080390dc <ETH_DMARxDescChainInit>:
- {
- uint32_t i = 0;
- ETH_DMADESCTypeDef *DMARxDesc;
-
- /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */
- DMARxDescToGet = DMARxDescTab;
- 80390dc: 4b11 ldr r3, [pc, #68] ; (8039124 <ETH_DMARxDescChainInit+0x48>)
- * @param RxBuff: Pointer on the first RxBuffer list
- * @param RxBuffCount: Number of the used Rx desc in the list
- * @retval None
- */
- void ETH_DMARxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount)
- {
- 80390de: b5f0 push {r4, r5, r6, r7, lr}
- uint32_t i = 0;
- ETH_DMADESCTypeDef *DMARxDesc;
-
- /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */
- DMARxDescToGet = DMARxDescTab;
- 80390e0: 6018 str r0, [r3, #0]
- /* Fill each DMARxDesc descriptor with the right values */
- for(i=0; i < RxBuffCount; i++)
- 80390e2: 2400 movs r4, #0
- * @param DMARxDescTab: Pointer on the first Rx desc list
- * @param RxBuff: Pointer on the first RxBuffer list
- * @param RxBuffCount: Number of the used Rx desc in the list
- * @retval None
- */
- void ETH_DMARxDescChainInit(ETH_DMADESCTypeDef *DMARxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount)
- 80390e4: f100 0320 add.w r3, r0, #32
- for(i=0; i < RxBuffCount; i++)
- {
- /* Get the pointer on the ith member of the Rx Desc list */
- DMARxDesc = DMARxDescTab+i;
- /* Set Own bit of the Rx descriptor Status */
- DMARxDesc->Status = ETH_DMARxDesc_OWN;
- 80390e8: f04f 4500 mov.w r5, #2147483648 ; 0x80000000
- /* Set Buffer1 size and Second Address Chained bit */
- DMARxDesc->ControlBufferSize = ETH_DMARxDesc_RCH | (uint32_t)ETH_RX_BUF_SIZE;
- 80390ec: f244 56f4 movw r6, #17908 ; 0x45f4
- /* Set Buffer1 address pointer */
- DMARxDesc->Buffer1Addr = (uint32_t)(&RxBuff[i*ETH_RX_BUF_SIZE]);
-
- /* Initialize the next descriptor with the Next Descriptor Polling Enable */
- if(i < (RxBuffCount-1))
- 80390f0: 1e57 subs r7, r2, #1
- ETH_DMADESCTypeDef *DMARxDesc;
-
- /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */
- DMARxDescToGet = DMARxDescTab;
- /* Fill each DMARxDesc descriptor with the right values */
- for(i=0; i < RxBuffCount; i++)
- 80390f2: e00f b.n 8039114 <ETH_DMARxDescChainInit+0x38>
-
- /* Initialize the next descriptor with the Next Descriptor Polling Enable */
- if(i < (RxBuffCount-1))
- {
- /* Set next descriptor address register with next descriptor base address */
- DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab+i+1);
- 80390f4: 42bc cmp r4, r7
- 80390f6: bf2c ite cs
- 80390f8: 4684 movcs ip, r0
- 80390fa: 469c movcc ip, r3
- DMARxDesc->Status = ETH_DMARxDesc_OWN;
- /* Set Buffer1 size and Second Address Chained bit */
- DMARxDesc->ControlBufferSize = ETH_DMARxDesc_RCH | (uint32_t)ETH_RX_BUF_SIZE;
- /* Set Buffer1 address pointer */
- DMARxDesc->Buffer1Addr = (uint32_t)(&RxBuff[i*ETH_RX_BUF_SIZE]);
- 80390fc: f843 1c18 str.w r1, [r3, #-24]
- for(i=0; i < RxBuffCount; i++)
- {
- /* Get the pointer on the ith member of the Rx Desc list */
- DMARxDesc = DMARxDescTab+i;
- /* Set Own bit of the Rx descriptor Status */
- DMARxDesc->Status = ETH_DMARxDesc_OWN;
- 8039100: f843 5c20 str.w r5, [r3, #-32]
- /* Set Buffer1 size and Second Address Chained bit */
- DMARxDesc->ControlBufferSize = ETH_DMARxDesc_RCH | (uint32_t)ETH_RX_BUF_SIZE;
- 8039104: f843 6c1c str.w r6, [r3, #-28]
-
- /* Initialize the next descriptor with the Next Descriptor Polling Enable */
- if(i < (RxBuffCount-1))
- {
- /* Set next descriptor address register with next descriptor base address */
- DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab+i+1);
- 8039108: f843 cc14 str.w ip, [r3, #-20]
- ETH_DMADESCTypeDef *DMARxDesc;
-
- /* Set the DMARxDescToGet pointer with the first one of the DMARxDescTab list */
- DMARxDescToGet = DMARxDescTab;
- /* Fill each DMARxDesc descriptor with the right values */
- for(i=0; i < RxBuffCount; i++)
- 803910c: 3401 adds r4, #1
- 803910e: 3320 adds r3, #32
- 8039110: f201 51f4 addw r1, r1, #1524 ; 0x5f4
- 8039114: 4294 cmp r4, r2
- 8039116: d1ed bne.n 80390f4 <ETH_DMARxDescChainInit+0x18>
- DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab);
- }
- }
-
- /* Set Receive Descriptor List Address Register */
- ETH->DMARDLAR = (uint32_t) DMARxDescTab;
- 8039118: 4b03 ldr r3, [pc, #12] ; (8039128 <ETH_DMARxDescChainInit+0x4c>)
-
- DMA_RX_FRAME_infos = &RX_Frame_Descriptor;
- 803911a: 4a04 ldr r2, [pc, #16] ; (803912c <ETH_DMARxDescChainInit+0x50>)
- DMARxDesc->Buffer2NextDescAddr = (uint32_t)(DMARxDescTab);
- }
- }
-
- /* Set Receive Descriptor List Address Register */
- ETH->DMARDLAR = (uint32_t) DMARxDescTab;
- 803911c: 60d8 str r0, [r3, #12]
-
- DMA_RX_FRAME_infos = &RX_Frame_Descriptor;
- 803911e: 4b04 ldr r3, [pc, #16] ; (8039130 <ETH_DMARxDescChainInit+0x54>)
- 8039120: 601a str r2, [r3, #0]
- 8039122: bdf0 pop {r4, r5, r6, r7, pc}
- 8039124: 2000fc70 .word 0x2000fc70
- 8039128: 40029000 .word 0x40029000
- 803912c: 2000fc64 .word 0x2000fc64
- 8039130: 20011ae0 .word 0x20011ae0
- 08039134 <ETH_DMATxDescChainInit>:
- {
- uint32_t i = 0;
- ETH_DMADESCTypeDef *DMATxDesc;
-
- /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */
- DMATxDescToSet = DMATxDescTab;
- 8039134: 4b0e ldr r3, [pc, #56] ; (8039170 <ETH_DMATxDescChainInit+0x3c>)
- * @param TxBuff: Pointer on the first TxBuffer list
- * @param TxBuffCount: Number of the used Tx desc in the list
- * @retval None
- */
- void ETH_DMATxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, uint8_t* TxBuff, uint32_t TxBuffCount)
- {
- 8039136: b5f0 push {r4, r5, r6, r7, lr}
- uint32_t i = 0;
- ETH_DMADESCTypeDef *DMATxDesc;
-
- /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */
- DMATxDescToSet = DMATxDescTab;
- 8039138: 6018 str r0, [r3, #0]
- /* Fill each DMATxDesc descriptor with the right values */
- for(i=0; i < TxBuffCount; i++)
- 803913a: 2400 movs r4, #0
- * @param DMATxDescTab: Pointer on the first Tx desc list
- * @param TxBuff: Pointer on the first TxBuffer list
- * @param TxBuffCount: Number of the used Tx desc in the list
- * @retval None
- */
- void ETH_DMATxDescChainInit(ETH_DMADESCTypeDef *DMATxDescTab, uint8_t* TxBuff, uint32_t TxBuffCount)
- 803913c: f100 0320 add.w r3, r0, #32
- for(i=0; i < TxBuffCount; i++)
- {
- /* Get the pointer on the ith member of the Tx Desc list */
- DMATxDesc = DMATxDescTab + i;
- /* Set Second Address Chained bit */
- DMATxDesc->Status = ETH_DMATxDesc_TCH;
- 8039140: f44f 1580 mov.w r5, #1048576 ; 0x100000
-
- /* Set Buffer1 address pointer */
- DMATxDesc->Buffer1Addr = (uint32_t)(&TxBuff[i*ETH_TX_BUF_SIZE]);
-
- /* Initialize the next descriptor with the Next Descriptor Polling Enable */
- if(i < (TxBuffCount-1))
- 8039144: 1e56 subs r6, r2, #1
- ETH_DMADESCTypeDef *DMATxDesc;
-
- /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */
- DMATxDescToSet = DMATxDescTab;
- /* Fill each DMATxDesc descriptor with the right values */
- for(i=0; i < TxBuffCount; i++)
- 8039146: e00d b.n 8039164 <ETH_DMATxDescChainInit+0x30>
-
- /* Initialize the next descriptor with the Next Descriptor Polling Enable */
- if(i < (TxBuffCount-1))
- {
- /* Set next descriptor address register with next descriptor base address */
- DMATxDesc->Buffer2NextDescAddr = (uint32_t)(DMATxDescTab+i+1);
- 8039148: 42b4 cmp r4, r6
- 803914a: bf2c ite cs
- 803914c: 4607 movcs r7, r0
- 803914e: 461f movcc r7, r3
- DMATxDesc = DMATxDescTab + i;
- /* Set Second Address Chained bit */
- DMATxDesc->Status = ETH_DMATxDesc_TCH;
-
- /* Set Buffer1 address pointer */
- DMATxDesc->Buffer1Addr = (uint32_t)(&TxBuff[i*ETH_TX_BUF_SIZE]);
- 8039150: f843 1c18 str.w r1, [r3, #-24]
- for(i=0; i < TxBuffCount; i++)
- {
- /* Get the pointer on the ith member of the Tx Desc list */
- DMATxDesc = DMATxDescTab + i;
- /* Set Second Address Chained bit */
- DMATxDesc->Status = ETH_DMATxDesc_TCH;
- 8039154: f843 5c20 str.w r5, [r3, #-32]
-
- /* Initialize the next descriptor with the Next Descriptor Polling Enable */
- if(i < (TxBuffCount-1))
- {
- /* Set next descriptor address register with next descriptor base address */
- DMATxDesc->Buffer2NextDescAddr = (uint32_t)(DMATxDescTab+i+1);
- 8039158: f843 7c14 str.w r7, [r3, #-20]
- ETH_DMADESCTypeDef *DMATxDesc;
-
- /* Set the DMATxDescToSet pointer with the first one of the DMATxDescTab list */
- DMATxDescToSet = DMATxDescTab;
- /* Fill each DMATxDesc descriptor with the right values */
- for(i=0; i < TxBuffCount; i++)
- 803915c: 3401 adds r4, #1
- 803915e: 3320 adds r3, #32
- 8039160: f201 51f4 addw r1, r1, #1524 ; 0x5f4
- 8039164: 4294 cmp r4, r2
- 8039166: d1ef bne.n 8039148 <ETH_DMATxDescChainInit+0x14>
- DMATxDesc->Buffer2NextDescAddr = (uint32_t) DMATxDescTab;
- }
- }
-
- /* Set Transmit Desciptor List Address Register */
- ETH->DMATDLAR = (uint32_t) DMATxDescTab;
- 8039168: 4b02 ldr r3, [pc, #8] ; (8039174 <ETH_DMATxDescChainInit+0x40>)
- 803916a: 6118 str r0, [r3, #16]
- 803916c: bdf0 pop {r4, r5, r6, r7, pc}
- 803916e: bf00 nop
- 8039170: 2000fc74 .word 0x2000fc74
- 8039174: 40029000 .word 0x40029000
- 08039178 <ETH_DMATxDescChecksumInsertionConfig>:
- {
- /* Check the parameters */
- assert_param(IS_ETH_DMA_TXDESC_CHECKSUM(DMATxDesc_Checksum));
-
- /* Set the selected DMA Tx desc checksum insertion control */
- DMATxDesc->Status |= DMATxDesc_Checksum;
- 8039178: 6803 ldr r3, [r0, #0]
- 803917a: 4319 orrs r1, r3
- 803917c: 6001 str r1, [r0, #0]
- 803917e: 4770 bx lr
- 08039180 <ETH_DMARxDescReceiveITConfig>:
- * @param NewState: new state of the specified DMA Rx Desc interrupt.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void ETH_DMARxDescReceiveITConfig(ETH_DMADESCTypeDef *DMARxDesc, FunctionalState NewState)
- {
- 8039180: 6843 ldr r3, [r0, #4]
- /* Check the parameters */
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- 8039182: b111 cbz r1, 803918a <ETH_DMARxDescReceiveITConfig+0xa>
- {
- /* Enable the DMA Rx Desc receive interrupt */
- DMARxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARxDesc_DIC);
- 8039184: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000
- 8039188: e001 b.n 803918e <ETH_DMARxDescReceiveITConfig+0xe>
- }
- else
- {
- /* Disable the DMA Rx Desc receive interrupt */
- DMARxDesc->ControlBufferSize |= ETH_DMARxDesc_DIC;
- 803918a: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000
- 803918e: 6043 str r3, [r0, #4]
- 8039190: 4770 bx lr
- 8039192: 0000 movs r0, r0
- 08039194 <ETH_SoftwareReset>:
- */
- void ETH_SoftwareReset(void)
- {
- /* Set the SWR bit: resets all MAC subsystem internal registers and logic */
- /* After reset all the registers holds their respective reset values */
- ETH->DMABMR |= ETH_DMABMR_SR;
- 8039194: 4b02 ldr r3, [pc, #8] ; (80391a0 <ETH_SoftwareReset+0xc>)
- 8039196: 681a ldr r2, [r3, #0]
- 8039198: f042 0201 orr.w r2, r2, #1
- 803919c: 601a str r2, [r3, #0]
- 803919e: 4770 bx lr
- 80391a0: 40029000 .word 0x40029000
- 080391a4 <ETH_GetSoftwareResetStatus>:
- * @retval The new state of DMA Bus Mode register SR bit (SET or RESET).
- */
- FlagStatus ETH_GetSoftwareResetStatus(void)
- {
- FlagStatus bitstatus = RESET;
- if((ETH->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET)
- 80391a4: 4b02 ldr r3, [pc, #8] ; (80391b0 <ETH_GetSoftwareResetStatus+0xc>)
- 80391a6: 6818 ldr r0, [r3, #0]
- else
- {
- bitstatus = RESET;
- }
- return bitstatus;
- }
- 80391a8: f000 0001 and.w r0, r0, #1
- 80391ac: 4770 bx lr
- 80391ae: bf00 nop
- 80391b0: 40029000 .word 0x40029000
- 080391b4 <ETH_GetDMAFlagStatus>:
- FlagStatus ETH_GetDMAFlagStatus(uint32_t ETH_DMA_FLAG)
- {
- FlagStatus bitstatus = RESET;
- /* Check the parameters */
- assert_param(IS_ETH_DMA_GET_IT(ETH_DMA_FLAG));
- if ((ETH->DMASR & ETH_DMA_FLAG) != (uint32_t)RESET)
- 80391b4: 4b03 ldr r3, [pc, #12] ; (80391c4 <ETH_GetDMAFlagStatus+0x10>)
- 80391b6: 695b ldr r3, [r3, #20]
- 80391b8: 4218 tst r0, r3
- else
- {
- bitstatus = RESET;
- }
- return bitstatus;
- }
- 80391ba: bf0c ite eq
- 80391bc: 2000 moveq r0, #0
- 80391be: 2001 movne r0, #1
- 80391c0: 4770 bx lr
- 80391c2: bf00 nop
- 80391c4: 40029000 .word 0x40029000
- 080391c8 <ETH_DMAITConfig>:
- * @param NewState: new state of the specified ETHERNET DMA interrupts.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void ETH_DMAITConfig(uint32_t ETH_DMA_IT, FunctionalState NewState)
- {
- 80391c8: 4b04 ldr r3, [pc, #16] ; (80391dc <ETH_DMAITConfig+0x14>)
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- {
- /* Enable the selected ETHERNET DMA interrupts */
- ETH->DMAIER |= ETH_DMA_IT;
- 80391ca: 69da ldr r2, [r3, #28]
- {
- /* Check the parameters */
- assert_param(IS_ETH_DMA_IT(ETH_DMA_IT));
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- 80391cc: b109 cbz r1, 80391d2 <ETH_DMAITConfig+0xa>
- {
- /* Enable the selected ETHERNET DMA interrupts */
- ETH->DMAIER |= ETH_DMA_IT;
- 80391ce: 4310 orrs r0, r2
- 80391d0: e001 b.n 80391d6 <ETH_DMAITConfig+0xe>
- }
- else
- {
- /* Disable the selected ETHERNET DMA interrupts */
- ETH->DMAIER &=(~(uint32_t)ETH_DMA_IT);
- 80391d2: ea22 0000 bic.w r0, r2, r0
- 80391d6: 61d8 str r0, [r3, #28]
- 80391d8: 4770 bx lr
- 80391da: bf00 nop
- 80391dc: 40029000 .word 0x40029000
- 080391e0 <ETH_DMAClearITPendingBit>:
- {
- /* Check the parameters */
- assert_param(IS_ETH_DMA_IT(ETH_DMA_IT));
-
- /* Clear the selected ETHERNET DMA IT */
- ETH->DMASR = (uint32_t) ETH_DMA_IT;
- 80391e0: 4b01 ldr r3, [pc, #4] ; (80391e8 <ETH_DMAClearITPendingBit+0x8>)
- 80391e2: 6158 str r0, [r3, #20]
- 80391e4: 4770 bx lr
- 80391e6: bf00 nop
- 80391e8: 40029000 .word 0x40029000
- 080391ec <ETH_FlushTransmitFIFO>:
- * @retval None
- */
- void ETH_FlushTransmitFIFO(void)
- {
- /* Set the Flush Transmit FIFO bit */
- ETH->DMAOMR |= ETH_DMAOMR_FTF;
- 80391ec: 4b02 ldr r3, [pc, #8] ; (80391f8 <ETH_FlushTransmitFIFO+0xc>)
- 80391ee: 699a ldr r2, [r3, #24]
- 80391f0: f442 1280 orr.w r2, r2, #1048576 ; 0x100000
- 80391f4: 619a str r2, [r3, #24]
- 80391f6: 4770 bx lr
- 80391f8: 40029000 .word 0x40029000
- 080391fc <ETH_DMATransmissionCmd>:
- * @param NewState: new state of the DMA transmission.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void ETH_DMATransmissionCmd(FunctionalState NewState)
- {
- 80391fc: 4b04 ldr r3, [pc, #16] ; (8039210 <ETH_DMATransmissionCmd+0x14>)
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- {
- /* Enable the DMA transmission */
- ETH->DMAOMR |= ETH_DMAOMR_ST;
- 80391fe: 699a ldr r2, [r3, #24]
- void ETH_DMATransmissionCmd(FunctionalState NewState)
- {
- /* Check the parameters */
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- 8039200: b110 cbz r0, 8039208 <ETH_DMATransmissionCmd+0xc>
- {
- /* Enable the DMA transmission */
- ETH->DMAOMR |= ETH_DMAOMR_ST;
- 8039202: f442 5200 orr.w r2, r2, #8192 ; 0x2000
- 8039206: e001 b.n 803920c <ETH_DMATransmissionCmd+0x10>
- }
- else
- {
- /* Disable the DMA transmission */
- ETH->DMAOMR &= ~ETH_DMAOMR_ST;
- 8039208: f422 5200 bic.w r2, r2, #8192 ; 0x2000
- 803920c: 619a str r2, [r3, #24]
- 803920e: 4770 bx lr
- 8039210: 40029000 .word 0x40029000
- 08039214 <ETH_DMAReceptionCmd>:
- * @param NewState: new state of the DMA reception.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void ETH_DMAReceptionCmd(FunctionalState NewState)
- {
- 8039214: 4b04 ldr r3, [pc, #16] ; (8039228 <ETH_DMAReceptionCmd+0x14>)
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- {
- /* Enable the DMA reception */
- ETH->DMAOMR |= ETH_DMAOMR_SR;
- 8039216: 699a ldr r2, [r3, #24]
- void ETH_DMAReceptionCmd(FunctionalState NewState)
- {
- /* Check the parameters */
- assert_param(IS_FUNCTIONAL_STATE(NewState));
-
- if (NewState != DISABLE)
- 8039218: b110 cbz r0, 8039220 <ETH_DMAReceptionCmd+0xc>
- {
- /* Enable the DMA reception */
- ETH->DMAOMR |= ETH_DMAOMR_SR;
- 803921a: f042 0202 orr.w r2, r2, #2
- 803921e: e001 b.n 8039224 <ETH_DMAReceptionCmd+0x10>
- }
- else
- {
- /* Disable the DMA reception */
- ETH->DMAOMR &= ~ETH_DMAOMR_SR;
- 8039220: f022 0202 bic.w r2, r2, #2
- 8039224: 619a str r2, [r3, #24]
- 8039226: 4770 bx lr
- 8039228: 40029000 .word 0x40029000
- 0803922c <ETH_Start>:
- * @brief Enables ENET MAC and DMA reception/transmission
- * @param None
- * @retval None
- */
- void ETH_Start(void)
- {
- 803922c: b508 push {r3, lr}
- /* Enable transmit state machine of the MAC for transmission on the MII */
- ETH_MACTransmissionCmd(ENABLE);
- 803922e: 2001 movs r0, #1
- 8039230: f7ff fe7a bl 8038f28 <ETH_MACTransmissionCmd>
- /* Flush Transmit FIFO */
- ETH_FlushTransmitFIFO();
- 8039234: f7ff ffda bl 80391ec <ETH_FlushTransmitFIFO>
- /* Enable receive state machine of the MAC for reception from the MII */
- ETH_MACReceptionCmd(ENABLE);
- 8039238: 2001 movs r0, #1
- 803923a: f7ff fe81 bl 8038f40 <ETH_MACReceptionCmd>
-
- /* Start DMA transmission */
- ETH_DMATransmissionCmd(ENABLE);
- 803923e: 2001 movs r0, #1
- 8039240: f7ff ffdc bl 80391fc <ETH_DMATransmissionCmd>
- /* Start DMA reception */
- ETH_DMAReceptionCmd(ENABLE);
- 8039244: 2001 movs r0, #1
- }
- 8039246: e8bd 4008 ldmia.w sp!, {r3, lr}
- ETH_MACReceptionCmd(ENABLE);
-
- /* Start DMA transmission */
- ETH_DMATransmissionCmd(ENABLE);
- /* Start DMA reception */
- ETH_DMAReceptionCmd(ENABLE);
- 803924a: f7ff bfe3 b.w 8039214 <ETH_DMAReceptionCmd>
- 803924e: 0000 movs r0, r0
- 08039250 <ETH_ReadPHYRegister>:
- * @arg More PHY register could be read depending on the used PHY
- * @retval ETH_ERROR: in case of timeout
- * MAC MIIDR register value: Data read from the selected PHY register (correct read )
- */
- uint16_t ETH_ReadPHYRegister(uint16_t PHYAddress, uint16_t PHYReg)
- {
- 8039250: b082 sub sp, #8
- uint32_t tmpreg = 0;
- __IO uint32_t timeout = 0;
- 8039252: 2300 movs r3, #0
- 8039254: 9301 str r3, [sp, #4]
- /* Check the parameters */
- assert_param(IS_ETH_PHY_ADDRESS(PHYAddress));
- assert_param(IS_ETH_PHY_REG(PHYReg));
-
- /* Get the ETHERNET MACMIIAR value */
- tmpreg = ETH->MACMIIAR;
- 8039256: 4b11 ldr r3, [pc, #68] ; (803929c <ETH_ReadPHYRegister+0x4c>)
- 8039258: 691a ldr r2, [r3, #16]
- /* Keep only the CSR Clock Range CR[2:0] bits value */
- tmpreg &= ~MACMIIAR_CR_MASK;
- /* Prepare the MII address register value */
- tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */
- 803925a: 06c0 lsls r0, r0, #27
- assert_param(IS_ETH_PHY_REG(PHYReg));
-
- /* Get the ETHERNET MACMIIAR value */
- tmpreg = ETH->MACMIIAR;
- /* Keep only the CSR Clock Range CR[2:0] bits value */
- tmpreg &= ~MACMIIAR_CR_MASK;
- 803925c: f002 021c and.w r2, r2, #28
- /* Prepare the MII address register value */
- tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */
- tmpreg |=(((uint32_t)PHYReg<<6) & ETH_MACMIIAR_MR); /* Set the PHY register address */
- 8039260: 0189 lsls r1, r1, #6
- /* Get the ETHERNET MACMIIAR value */
- tmpreg = ETH->MACMIIAR;
- /* Keep only the CSR Clock Range CR[2:0] bits value */
- tmpreg &= ~MACMIIAR_CR_MASK;
- /* Prepare the MII address register value */
- tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */
- 8039262: ea42 4210 orr.w r2, r2, r0, lsr #16
- tmpreg |=(((uint32_t)PHYReg<<6) & ETH_MACMIIAR_MR); /* Set the PHY register address */
- 8039266: f401 61f8 and.w r1, r1, #1984 ; 0x7c0
- tmpreg &= ~ETH_MACMIIAR_MW; /* Set the read mode */
- 803926a: 430a orrs r2, r1
- tmpreg |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */
- 803926c: f042 0201 orr.w r2, r2, #1
- /* Write the result value into the MII Address register */
- ETH->MACMIIAR = tmpreg;
- 8039270: 611a str r2, [r3, #16]
- /* Check for the Busy flag */
- do
- {
- timeout++;
- tmpreg = ETH->MACMIIAR;
- } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_READ_TO));
- 8039272: 4a0b ldr r2, [pc, #44] ; (80392a0 <ETH_ReadPHYRegister+0x50>)
- /* Write the result value into the MII Address register */
- ETH->MACMIIAR = tmpreg;
- /* Check for the Busy flag */
- do
- {
- timeout++;
- 8039274: 9901 ldr r1, [sp, #4]
- 8039276: 3101 adds r1, #1
- 8039278: 9101 str r1, [sp, #4]
- tmpreg = ETH->MACMIIAR;
- 803927a: 6919 ldr r1, [r3, #16]
- } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_READ_TO));
- 803927c: 07c9 lsls r1, r1, #31
- 803927e: d502 bpl.n 8039286 <ETH_ReadPHYRegister+0x36>
- 8039280: 9901 ldr r1, [sp, #4]
- 8039282: 4291 cmp r1, r2
- 8039284: d9f6 bls.n 8039274 <ETH_ReadPHYRegister+0x24>
- /* Return ERROR in case of timeout */
- if(timeout == PHY_READ_TO)
- 8039286: 4b07 ldr r3, [pc, #28] ; (80392a4 <ETH_ReadPHYRegister+0x54>)
- 8039288: 9a01 ldr r2, [sp, #4]
- 803928a: 429a cmp r2, r3
- {
- return (uint16_t)ETH_ERROR;
- }
-
- /* Return data register value */
- return (uint16_t)(ETH->MACMIIDR);
- 803928c: bf1d ittte ne
- 803928e: 4b03 ldrne r3, [pc, #12] ; (803929c <ETH_ReadPHYRegister+0x4c>)
- 8039290: 6958 ldrne r0, [r3, #20]
- 8039292: b280 uxthne r0, r0
- tmpreg = ETH->MACMIIAR;
- } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_READ_TO));
- /* Return ERROR in case of timeout */
- if(timeout == PHY_READ_TO)
- {
- return (uint16_t)ETH_ERROR;
- 8039294: 2000 moveq r0, #0
- }
-
- /* Return data register value */
- return (uint16_t)(ETH->MACMIIDR);
- }
- 8039296: b002 add sp, #8
- 8039298: 4770 bx lr
- 803929a: bf00 nop
- 803929c: 40028000 .word 0x40028000
- 80392a0: 0004fffe .word 0x0004fffe
- 80392a4: 0004ffff .word 0x0004ffff
- 080392a8 <ETH_WritePHYRegister>:
- * @param PHYValue: the value to write
- * @retval ETH_ERROR: in case of timeout
- * ETH_SUCCESS: for correct write
- */
- uint32_t ETH_WritePHYRegister(uint16_t PHYAddress, uint16_t PHYReg, uint16_t PHYValue)
- {
- 80392a8: b513 push {r0, r1, r4, lr}
- uint32_t tmpreg = 0;
- __IO uint32_t timeout = 0;
- 80392aa: 2300 movs r3, #0
- 80392ac: 9301 str r3, [sp, #4]
- /* Check the parameters */
- assert_param(IS_ETH_PHY_ADDRESS(PHYAddress));
- assert_param(IS_ETH_PHY_REG(PHYReg));
-
- /* Get the ETHERNET MACMIIAR value */
- tmpreg = ETH->MACMIIAR;
- 80392ae: 4b0f ldr r3, [pc, #60] ; (80392ec <ETH_WritePHYRegister+0x44>)
- 80392b0: 691c ldr r4, [r3, #16]
- tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */
- tmpreg |=(((uint32_t)PHYReg<<6) & ETH_MACMIIAR_MR); /* Set the PHY register address */
- tmpreg |= ETH_MACMIIAR_MW; /* Set the write mode */
- tmpreg |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */
- /* Give the value to the MII data register */
- ETH->MACMIIDR = PHYValue;
- 80392b2: 615a str r2, [r3, #20]
- assert_param(IS_ETH_PHY_REG(PHYReg));
-
- /* Get the ETHERNET MACMIIAR value */
- tmpreg = ETH->MACMIIAR;
- /* Keep only the CSR Clock Range CR[2:0] bits value */
- tmpreg &= ~MACMIIAR_CR_MASK;
- 80392b4: f004 041c and.w r4, r4, #28
- /* Prepare the MII register address value */
- tmpreg |=(((uint32_t)PHYAddress<<11) & ETH_MACMIIAR_PA); /* Set the PHY device address */
- 80392b8: f044 0403 orr.w r4, r4, #3
- 80392bc: 06c0 lsls r0, r0, #27
- tmpreg |=(((uint32_t)PHYReg<<6) & ETH_MACMIIAR_MR); /* Set the PHY register address */
- 80392be: 0189 lsls r1, r1, #6
- 80392c0: ea44 4410 orr.w r4, r4, r0, lsr #16
- 80392c4: f401 61f8 and.w r1, r1, #1984 ; 0x7c0
- tmpreg |= ETH_MACMIIAR_MW; /* Set the write mode */
- tmpreg |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */
- 80392c8: 430c orrs r4, r1
- /* Check for the Busy flag */
- do
- {
- timeout++;
- tmpreg = ETH->MACMIIAR;
- } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_WRITE_TO));
- 80392ca: 4a09 ldr r2, [pc, #36] ; (80392f0 <ETH_WritePHYRegister+0x48>)
- tmpreg |= ETH_MACMIIAR_MW; /* Set the write mode */
- tmpreg |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */
- /* Give the value to the MII data register */
- ETH->MACMIIDR = PHYValue;
- /* Write the result value into the MII Address register */
- ETH->MACMIIAR = tmpreg;
- 80392cc: 611c str r4, [r3, #16]
- /* Check for the Busy flag */
- do
- {
- timeout++;
- 80392ce: 9901 ldr r1, [sp, #4]
- 80392d0: 3101 adds r1, #1
- 80392d2: 9101 str r1, [sp, #4]
- tmpreg = ETH->MACMIIAR;
- 80392d4: 6919 ldr r1, [r3, #16]
- } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_WRITE_TO));
- 80392d6: 07c8 lsls r0, r1, #31
- 80392d8: d502 bpl.n 80392e0 <ETH_WritePHYRegister+0x38>
- 80392da: 9901 ldr r1, [sp, #4]
- 80392dc: 4291 cmp r1, r2
- 80392de: d9f6 bls.n 80392ce <ETH_WritePHYRegister+0x26>
- /* Return ERROR in case of timeout */
- if(timeout == PHY_WRITE_TO)
- 80392e0: 9801 ldr r0, [sp, #4]
- return ETH_ERROR;
- }
-
- /* Return SUCCESS */
- return ETH_SUCCESS;
- }
- 80392e2: 4b04 ldr r3, [pc, #16] ; (80392f4 <ETH_WritePHYRegister+0x4c>)
- 80392e4: 1ac0 subs r0, r0, r3
- 80392e6: bf18 it ne
- 80392e8: 2001 movne r0, #1
- 80392ea: bd1c pop {r2, r3, r4, pc}
- 80392ec: 40028000 .word 0x40028000
- 80392f0: 0004fffe .word 0x0004fffe
- 80392f4: 0004ffff .word 0x0004ffff
- 080392f8 <ETH_Init>:
- * @param PHYAddress: external PHY address
- * @retval ETH_ERROR: Ethernet initialization failed
- * ETH_SUCCESS: Ethernet successfully initialized
- */
- uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, uint16_t PHYAddress)
- {
- 80392f8: b5f0 push {r4, r5, r6, r7, lr}
- 80392fa: b087 sub sp, #28
- uint32_t RegValue = 0, tmpreg = 0;
- __IO uint32_t i = 0;
- 80392fc: 2300 movs r3, #0
- assert_param(IS_ETH_DMA_DESC_SKIP_LENGTH(ETH_InitStruct->ETH_DescriptorSkipLength));
- assert_param(IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(ETH_InitStruct->ETH_DMAArbitration));
- /*-------------------------------- MAC Config ------------------------------*/
- /*---------------------- ETHERNET MACMIIAR Configuration -------------------*/
- /* Get the ETHERNET MACMIIAR value */
- tmpreg = ETH->MACMIIAR;
- 80392fe: 4f90 ldr r7, [pc, #576] ; (8039540 <ETH_Init+0x248>)
- * ETH_SUCCESS: Ethernet successfully initialized
- */
- uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, uint16_t PHYAddress)
- {
- uint32_t RegValue = 0, tmpreg = 0;
- __IO uint32_t i = 0;
- 8039300: 9300 str r3, [sp, #0]
- * @param PHYAddress: external PHY address
- * @retval ETH_ERROR: Ethernet initialization failed
- * ETH_SUCCESS: Ethernet successfully initialized
- */
- uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, uint16_t PHYAddress)
- {
- 8039302: 4604 mov r4, r0
- uint32_t RegValue = 0, tmpreg = 0;
- __IO uint32_t i = 0;
- RCC_ClocksTypeDef rcc_clocks;
- uint32_t hclk = 60000000;
- __IO uint32_t timeout = 0;
- 8039304: 9301 str r3, [sp, #4]
- /* Get the ETHERNET MACMIIAR value */
- tmpreg = ETH->MACMIIAR;
- /* Clear CSR Clock Range CR[2:0] bits */
- tmpreg &= MACMIIAR_CR_MASK;
- /* Get hclk frequency value */
- RCC_GetClocksFreq(&rcc_clocks);
- 8039306: a802 add r0, sp, #8
- * @param PHYAddress: external PHY address
- * @retval ETH_ERROR: Ethernet initialization failed
- * ETH_SUCCESS: Ethernet successfully initialized
- */
- uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, uint16_t PHYAddress)
- {
- 8039308: 460e mov r6, r1
- assert_param(IS_ETH_DMA_DESC_SKIP_LENGTH(ETH_InitStruct->ETH_DescriptorSkipLength));
- assert_param(IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(ETH_InitStruct->ETH_DMAArbitration));
- /*-------------------------------- MAC Config ------------------------------*/
- /*---------------------- ETHERNET MACMIIAR Configuration -------------------*/
- /* Get the ETHERNET MACMIIAR value */
- tmpreg = ETH->MACMIIAR;
- 803930a: 693d ldr r5, [r7, #16]
- /* Clear CSR Clock Range CR[2:0] bits */
- tmpreg &= MACMIIAR_CR_MASK;
- /* Get hclk frequency value */
- RCC_GetClocksFreq(&rcc_clocks);
- 803930c: f7ec f9ba bl 8025684 <RCC_GetClocksFreq>
- hclk = rcc_clocks.HCLK_Frequency;
- 8039310: 9b03 ldr r3, [sp, #12]
-
- /* Set CR bits depending on hclk value */
- if((hclk >= 20000000)&&(hclk < 35000000))
- 8039312: 4a8c ldr r2, [pc, #560] ; (8039544 <ETH_Init+0x24c>)
- 8039314: 498c ldr r1, [pc, #560] ; (8039548 <ETH_Init+0x250>)
- 8039316: 189a adds r2, r3, r2
- 8039318: 428a cmp r2, r1
- /*-------------------------------- MAC Config ------------------------------*/
- /*---------------------- ETHERNET MACMIIAR Configuration -------------------*/
- /* Get the ETHERNET MACMIIAR value */
- tmpreg = ETH->MACMIIAR;
- /* Clear CSR Clock Range CR[2:0] bits */
- tmpreg &= MACMIIAR_CR_MASK;
- 803931a: f025 051c bic.w r5, r5, #28
- /* Get hclk frequency value */
- RCC_GetClocksFreq(&rcc_clocks);
- hclk = rcc_clocks.HCLK_Frequency;
-
- /* Set CR bits depending on hclk value */
- if((hclk >= 20000000)&&(hclk < 35000000))
- 803931e: d802 bhi.n 8039326 <ETH_Init+0x2e>
- {
- /* CSR Clock Range between 20-35 MHz */
- tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16;
- 8039320: f045 0508 orr.w r5, r5, #8
- 8039324: e015 b.n 8039352 <ETH_Init+0x5a>
- }
- else if((hclk >= 35000000)&&(hclk < 60000000))
- 8039326: 4a89 ldr r2, [pc, #548] ; (803954c <ETH_Init+0x254>)
- 8039328: 4989 ldr r1, [pc, #548] ; (8039550 <ETH_Init+0x258>)
- 803932a: 189a adds r2, r3, r2
- 803932c: 428a cmp r2, r1
- 803932e: d802 bhi.n 8039336 <ETH_Init+0x3e>
- {
- /* CSR Clock Range between 35-60 MHz */
- tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26;
- 8039330: f045 050c orr.w r5, r5, #12
- 8039334: e00d b.n 8039352 <ETH_Init+0x5a>
- }
- else if((hclk >= 60000000)&&(hclk < 100000000))
- 8039336: 4a87 ldr r2, [pc, #540] ; (8039554 <ETH_Init+0x25c>)
- 8039338: 4987 ldr r1, [pc, #540] ; (8039558 <ETH_Init+0x260>)
- 803933a: 189a adds r2, r3, r2
- 803933c: 428a cmp r2, r1
- 803933e: d908 bls.n 8039352 <ETH_Init+0x5a>
- {
- /* CSR Clock Range between 60-100 MHz */
- tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42;
- }
- else if((hclk >= 100000000)&&(hclk < 150000000))
- 8039340: 4a86 ldr r2, [pc, #536] ; (803955c <ETH_Init+0x264>)
- 8039342: 189a adds r2, r3, r2
- 8039344: 4b86 ldr r3, [pc, #536] ; (8039560 <ETH_Init+0x268>)
- 8039346: 429a cmp r2, r3
- {
- /* CSR Clock Range between 100-150 MHz */
- tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62;
- 8039348: bf94 ite ls
- 803934a: f045 0504 orrls.w r5, r5, #4
- }
- else /* ((hclk >= 150000000)&&(hclk <= 168000000)) */
- {
- /* CSR Clock Range between 150-168 MHz */
- tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102;
- 803934e: f045 0510 orrhi.w r5, r5, #16
- }
-
- /* Write to ETHERNET MAC MIIAR: Configure the ETHERNET CSR Clock Range */
- ETH->MACMIIAR = (uint32_t)tmpreg;
- 8039352: 613d str r5, [r7, #16]
- /*-------------------- PHY initialization and configuration ----------------*/
- /* Put the PHY in reset mode */
- if(!(ETH_WritePHYRegister(PHYAddress, PHY_BCR, PHY_Reset)))
- 8039354: 4630 mov r0, r6
- 8039356: 2100 movs r1, #0
- 8039358: f44f 4200 mov.w r2, #32768 ; 0x8000
- 803935c: f7ff ffa4 bl 80392a8 <ETH_WritePHYRegister>
- 8039360: b908 cbnz r0, 8039366 <ETH_Init+0x6e>
- {
- /* Return ERROR in case of write timeout */
- return ETH_ERROR;
- 8039362: 2000 movs r0, #0
- 8039364: e0e9 b.n 803953a <ETH_Init+0x242>
- }
-
- /* Delay to assure PHY reset */
- _eth_delay_(PHY_RESET_DELAY);
- 8039366: 487f ldr r0, [pc, #508] ; (8039564 <ETH_Init+0x26c>)
- 8039368: f7ff fd6e bl 8038e48 <ETH_Delay>
-
- if(ETH_InitStruct->ETH_AutoNegotiation != ETH_AutoNegotiation_Disable)
- 803936c: 6821 ldr r1, [r4, #0]
- 803936e: 2900 cmp r1, #0
- 8039370: d050 beq.n 8039414 <ETH_Init+0x11c>
- {
- /* We wait for linked status... */
- do
- {
- timeout++;
- } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
- 8039372: 4d7d ldr r5, [pc, #500] ; (8039568 <ETH_Init+0x270>)
- if(ETH_InitStruct->ETH_AutoNegotiation != ETH_AutoNegotiation_Disable)
- {
- /* We wait for linked status... */
- do
- {
- timeout++;
- 8039374: 9b01 ldr r3, [sp, #4]
- } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
- 8039376: 4630 mov r0, r6
- if(ETH_InitStruct->ETH_AutoNegotiation != ETH_AutoNegotiation_Disable)
- {
- /* We wait for linked status... */
- do
- {
- timeout++;
- 8039378: 3301 adds r3, #1
- } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
- 803937a: 2101 movs r1, #1
- if(ETH_InitStruct->ETH_AutoNegotiation != ETH_AutoNegotiation_Disable)
- {
- /* We wait for linked status... */
- do
- {
- timeout++;
- 803937c: 9301 str r3, [sp, #4]
- } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
- 803937e: f7ff ff67 bl 8039250 <ETH_ReadPHYRegister>
- 8039382: f000 0004 and.w r0, r0, #4
- 8039386: b280 uxth r0, r0
- 8039388: b910 cbnz r0, 8039390 <ETH_Init+0x98>
- 803938a: 9b01 ldr r3, [sp, #4]
- 803938c: 42ab cmp r3, r5
- 803938e: d9f1 bls.n 8039374 <ETH_Init+0x7c>
- /* Return ERROR in case of timeout */
- if(timeout == PHY_READ_TO)
- 8039390: 9a01 ldr r2, [sp, #4]
- 8039392: 4b76 ldr r3, [pc, #472] ; (803956c <ETH_Init+0x274>)
- 8039394: 429a cmp r2, r3
- 8039396: d0e4 beq.n 8039362 <ETH_Init+0x6a>
- {
- return ETH_ERROR;
- }
- /* Reset Timeout counter */
- timeout = 0;
- 8039398: 2100 movs r1, #0
- /* Enable Auto-Negotiation */
- if(!(ETH_WritePHYRegister(PHYAddress, PHY_BCR, PHY_AutoNegotiation)))
- 803939a: 4630 mov r0, r6
- 803939c: f44f 5280 mov.w r2, #4096 ; 0x1000
- {
- return ETH_ERROR;
- }
- /* Reset Timeout counter */
- timeout = 0;
- 80393a0: 9101 str r1, [sp, #4]
- /* Enable Auto-Negotiation */
- if(!(ETH_WritePHYRegister(PHYAddress, PHY_BCR, PHY_AutoNegotiation)))
- 80393a2: f7ff ff81 bl 80392a8 <ETH_WritePHYRegister>
- 80393a6: 2800 cmp r0, #0
- 80393a8: d0db beq.n 8039362 <ETH_Init+0x6a>
- /* Wait until the auto-negotiation will be completed */
- do
- {
- timeout++;
- } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_AutoNego_Complete) && (timeout < (uint32_t)PHY_READ_TO));
- 80393aa: 4d6f ldr r5, [pc, #444] ; (8039568 <ETH_Init+0x270>)
- }
- /* Wait until the auto-negotiation will be completed */
- do
- {
- timeout++;
- 80393ac: 9b01 ldr r3, [sp, #4]
- } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_AutoNego_Complete) && (timeout < (uint32_t)PHY_READ_TO));
- 80393ae: 4630 mov r0, r6
- }
- /* Wait until the auto-negotiation will be completed */
- do
- {
- timeout++;
- 80393b0: 3301 adds r3, #1
- } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_AutoNego_Complete) && (timeout < (uint32_t)PHY_READ_TO));
- 80393b2: 2101 movs r1, #1
- }
- /* Wait until the auto-negotiation will be completed */
- do
- {
- timeout++;
- 80393b4: 9301 str r3, [sp, #4]
- } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_AutoNego_Complete) && (timeout < (uint32_t)PHY_READ_TO));
- 80393b6: f7ff ff4b bl 8039250 <ETH_ReadPHYRegister>
- 80393ba: f000 0020 and.w r0, r0, #32
- 80393be: b280 uxth r0, r0
- 80393c0: b910 cbnz r0, 80393c8 <ETH_Init+0xd0>
- 80393c2: 9b01 ldr r3, [sp, #4]
- 80393c4: 42ab cmp r3, r5
- 80393c6: d9f1 bls.n 80393ac <ETH_Init+0xb4>
- /* Return ERROR in case of timeout */
- if(timeout == PHY_READ_TO)
- 80393c8: 9a01 ldr r2, [sp, #4]
- 80393ca: 4b68 ldr r3, [pc, #416] ; (803956c <ETH_Init+0x274>)
- 80393cc: 429a cmp r2, r3
- 80393ce: d0c8 beq.n 8039362 <ETH_Init+0x6a>
- {
- return ETH_ERROR;
- }
- /* Reset Timeout counter */
- timeout = 0;
- 80393d0: 2500 movs r5, #0
-
- /* Read the result of the auto-negotiation */
- RegValue = ETH_ReadPHYRegister(PHYAddress, PHY_SR);
- 80393d2: 211f movs r1, #31
- 80393d4: 4630 mov r0, r6
- {
- return ETH_ERROR;
- }
- /* Reset Timeout counter */
- timeout = 0;
- 80393d6: 9501 str r5, [sp, #4]
-
- /* Read the result of the auto-negotiation */
- RegValue = ETH_ReadPHYRegister(PHYAddress, PHY_SR);
- 80393d8: f7ff ff3a bl 8039250 <ETH_ReadPHYRegister>
- switch (RegValue & PHY_DUPLEX_SPEED_STATUS_MASK)
- 80393dc: f000 001c and.w r0, r0, #28
- 80393e0: 2808 cmp r0, #8
- 80393e2: d00b beq.n 80393fc <ETH_Init+0x104>
- 80393e4: d802 bhi.n 80393ec <ETH_Init+0xf4>
- 80393e6: 2804 cmp r0, #4
- 80393e8: d123 bne.n 8039432 <ETH_Init+0x13a>
- 80393ea: e010 b.n 803940e <ETH_Init+0x116>
- 80393ec: 280e cmp r0, #14
- 80393ee: d00a beq.n 8039406 <ETH_Init+0x10e>
- 80393f0: 2812 cmp r0, #18
- 80393f2: d11e bne.n 8039432 <ETH_Init+0x13a>
- {
- case PHY_100BTX_FULL:
- ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
- 80393f4: f44f 6300 mov.w r3, #2048 ; 0x800
- 80393f8: 6223 str r3, [r4, #32]
- 80393fa: e000 b.n 80393fe <ETH_Init+0x106>
- ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
- break;
- case PHY_100BTX_HALF:
- ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex;
- 80393fc: 6225 str r5, [r4, #32]
- ETH_InitStruct->ETH_Speed = ETH_Speed_100M;
- 80393fe: f44f 4380 mov.w r3, #16384 ; 0x4000
- 8039402: 6163 str r3, [r4, #20]
- break;
- 8039404: e015 b.n 8039432 <ETH_Init+0x13a>
- case PHY_10M_FULL:
- ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;
- 8039406: f44f 6300 mov.w r3, #2048 ; 0x800
- 803940a: 6223 str r3, [r4, #32]
- 803940c: e000 b.n 8039410 <ETH_Init+0x118>
- ETH_InitStruct->ETH_Speed = ETH_Speed_10M;
- break;
- case PHY_10M_HALF:
- ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex;
- 803940e: 6225 str r5, [r4, #32]
- ETH_InitStruct->ETH_Speed = ETH_Speed_10M;
- 8039410: 6165 str r5, [r4, #20]
- break;
- 8039412: e00e b.n 8039432 <ETH_Init+0x13a>
- break;
- }
- }
- else
- {
- if(!ETH_WritePHYRegister(PHYAddress, PHY_BCR, ((uint16_t)(ETH_InitStruct->ETH_Mode >> 3) |
- 8039414: 6a22 ldr r2, [r4, #32]
- (uint16_t)(ETH_InitStruct->ETH_Speed >> 1))))
- 8039416: 6963 ldr r3, [r4, #20]
- break;
- }
- }
- else
- {
- if(!ETH_WritePHYRegister(PHYAddress, PHY_BCR, ((uint16_t)(ETH_InitStruct->ETH_Mode >> 3) |
- 8039418: 08d2 lsrs r2, r2, #3
- 803941a: ea42 0253 orr.w r2, r2, r3, lsr #1
- 803941e: 4630 mov r0, r6
- 8039420: b292 uxth r2, r2
- 8039422: f7ff ff41 bl 80392a8 <ETH_WritePHYRegister>
- 8039426: 2800 cmp r0, #0
- 8039428: d09b beq.n 8039362 <ETH_Init+0x6a>
- {
- /* Return ERROR in case of write timeout */
- return ETH_ERROR;
- }
- /* Delay to assure PHY configuration */
- _eth_delay_(PHY_CONFIG_DELAY);
- 803942a: f06f 407f mvn.w r0, #4278190080 ; 0xff000000
- 803942e: f7ff fd0b bl 8038e48 <ETH_Delay>
-
- }
- /*------------------------ ETHERNET MACCR Configuration --------------------*/
- /* Get the ETHERNET MACCR value */
- tmpreg = ETH->MACCR;
- 8039432: 4b43 ldr r3, [pc, #268] ; (8039540 <ETH_Init+0x248>)
- /* Clear WD, PCE, PS, TE and RE bits */
- tmpreg &= MACCR_CLEAR_MASK;
- 8039434: 4a4e ldr r2, [pc, #312] ; (8039570 <ETH_Init+0x278>)
- _eth_delay_(PHY_CONFIG_DELAY);
-
- }
- /*------------------------ ETHERNET MACCR Configuration --------------------*/
- /* Get the ETHERNET MACCR value */
- tmpreg = ETH->MACCR;
- 8039436: 6819 ldr r1, [r3, #0]
- /* Set the IPCO bit according to ETH_ChecksumOffload value */
- /* Set the DR bit according to ETH_RetryTransmission value */
- /* Set the ACS bit according to ETH_AutomaticPadCRCStrip value */
- /* Set the BL bit according to ETH_BackOffLimit value */
- /* Set the DC bit according to ETH_DeferralCheck value */
- tmpreg |= (uint32_t)(ETH_InitStruct->ETH_Watchdog |
- 8039438: 68a0 ldr r0, [r4, #8]
- }
- /*------------------------ ETHERNET MACCR Configuration --------------------*/
- /* Get the ETHERNET MACCR value */
- tmpreg = ETH->MACCR;
- /* Clear WD, PCE, PS, TE and RE bits */
- tmpreg &= MACCR_CLEAR_MASK;
- 803943a: 400a ands r2, r1
- /* Set the IPCO bit according to ETH_ChecksumOffload value */
- /* Set the DR bit according to ETH_RetryTransmission value */
- /* Set the ACS bit according to ETH_AutomaticPadCRCStrip value */
- /* Set the BL bit according to ETH_BackOffLimit value */
- /* Set the DC bit according to ETH_DeferralCheck value */
- tmpreg |= (uint32_t)(ETH_InitStruct->ETH_Watchdog |
- 803943c: 6861 ldr r1, [r4, #4]
- 803943e: 4308 orrs r0, r1
- ETH_InitStruct->ETH_Jabber |
- 8039440: 68e1 ldr r1, [r4, #12]
- 8039442: 4308 orrs r0, r1
- ETH_InitStruct->ETH_InterFrameGap |
- 8039444: 6921 ldr r1, [r4, #16]
- 8039446: 4308 orrs r0, r1
- ETH_InitStruct->ETH_CarrierSense |
- 8039448: 6961 ldr r1, [r4, #20]
- 803944a: 4308 orrs r0, r1
- ETH_InitStruct->ETH_Speed |
- 803944c: 69a1 ldr r1, [r4, #24]
- 803944e: 4308 orrs r0, r1
- ETH_InitStruct->ETH_ReceiveOwn |
- 8039450: 69e1 ldr r1, [r4, #28]
- 8039452: 4308 orrs r0, r1
- ETH_InitStruct->ETH_LoopbackMode |
- 8039454: 6a21 ldr r1, [r4, #32]
- 8039456: 4308 orrs r0, r1
- ETH_InitStruct->ETH_Mode |
- 8039458: 6a61 ldr r1, [r4, #36] ; 0x24
- 803945a: 4308 orrs r0, r1
- ETH_InitStruct->ETH_ChecksumOffload |
- 803945c: 6aa1 ldr r1, [r4, #40] ; 0x28
- 803945e: 4308 orrs r0, r1
- ETH_InitStruct->ETH_RetryTransmission |
- 8039460: 6ae1 ldr r1, [r4, #44] ; 0x2c
- 8039462: 4308 orrs r0, r1
- ETH_InitStruct->ETH_AutomaticPadCRCStrip |
- 8039464: 6b21 ldr r1, [r4, #48] ; 0x30
- 8039466: 4308 orrs r0, r1
- /* Set the IPCO bit according to ETH_ChecksumOffload value */
- /* Set the DR bit according to ETH_RetryTransmission value */
- /* Set the ACS bit according to ETH_AutomaticPadCRCStrip value */
- /* Set the BL bit according to ETH_BackOffLimit value */
- /* Set the DC bit according to ETH_DeferralCheck value */
- tmpreg |= (uint32_t)(ETH_InitStruct->ETH_Watchdog |
- 8039468: 6b61 ldr r1, [r4, #52] ; 0x34
- 803946a: 4301 orrs r1, r0
- 803946c: 430a orrs r2, r1
- ETH_InitStruct->ETH_RetryTransmission |
- ETH_InitStruct->ETH_AutomaticPadCRCStrip |
- ETH_InitStruct->ETH_BackOffLimit |
- ETH_InitStruct->ETH_DeferralCheck);
- /* Write to ETHERNET MACCR */
- ETH->MACCR = (uint32_t)tmpreg;
- 803946e: 601a str r2, [r3, #0]
- /* Set the DAIF bit according to ETH_DestinationAddrFilter value */
- /* Set the PR bit according to ETH_PromiscuousMode value */
- /* Set the PM, HMC and HPF bits according to ETH_MulticastFramesFilter value */
- /* Set the HUC and HPF bits according to ETH_UnicastFramesFilter value */
- /* Write to ETHERNET MACFFR */
- ETH->MACFFR = (uint32_t)(ETH_InitStruct->ETH_ReceiveAll |
- 8039470: 6ba2 ldr r2, [r4, #56] ; 0x38
- 8039472: 6be1 ldr r1, [r4, #60] ; 0x3c
- 8039474: 4311 orrs r1, r2
- ETH_InitStruct->ETH_SourceAddrFilter |
- 8039476: 6c22 ldr r2, [r4, #64] ; 0x40
- 8039478: 4311 orrs r1, r2
- ETH_InitStruct->ETH_PassControlFrames |
- 803947a: 6c62 ldr r2, [r4, #68] ; 0x44
- 803947c: 4311 orrs r1, r2
- ETH_InitStruct->ETH_BroadcastFramesReception |
- 803947e: 6ca2 ldr r2, [r4, #72] ; 0x48
- 8039480: 4311 orrs r1, r2
- ETH_InitStruct->ETH_DestinationAddrFilter |
- 8039482: 6ce2 ldr r2, [r4, #76] ; 0x4c
- 8039484: 4311 orrs r1, r2
- ETH_InitStruct->ETH_PromiscuousMode |
- 8039486: 6d22 ldr r2, [r4, #80] ; 0x50
- 8039488: 4311 orrs r1, r2
- /* Set the DAIF bit according to ETH_DestinationAddrFilter value */
- /* Set the PR bit according to ETH_PromiscuousMode value */
- /* Set the PM, HMC and HPF bits according to ETH_MulticastFramesFilter value */
- /* Set the HUC and HPF bits according to ETH_UnicastFramesFilter value */
- /* Write to ETHERNET MACFFR */
- ETH->MACFFR = (uint32_t)(ETH_InitStruct->ETH_ReceiveAll |
- 803948a: 6d62 ldr r2, [r4, #84] ; 0x54
- 803948c: 430a orrs r2, r1
- 803948e: 605a str r2, [r3, #4]
- ETH_InitStruct->ETH_PromiscuousMode |
- ETH_InitStruct->ETH_MulticastFramesFilter |
- ETH_InitStruct->ETH_UnicastFramesFilter);
- /*--------------- ETHERNET MACHTHR and MACHTLR Configuration ---------------*/
- /* Write to ETHERNET MACHTHR */
- ETH->MACHTHR = (uint32_t)ETH_InitStruct->ETH_HashTableHigh;
- 8039490: 6da2 ldr r2, [r4, #88] ; 0x58
- 8039492: 609a str r2, [r3, #8]
- /* Write to ETHERNET MACHTLR */
- ETH->MACHTLR = (uint32_t)ETH_InitStruct->ETH_HashTableLow;
- 8039494: 6de2 ldr r2, [r4, #92] ; 0x5c
- 8039496: 60da str r2, [r3, #12]
- /* Set the DZPQ bit according to ETH_ZeroQuantaPause value */
- /* Set the PLT bit according to ETH_PauseLowThreshold value */
- /* Set the UP bit according to ETH_UnicastPauseFrameDetect value */
- /* Set the RFE bit according to ETH_ReceiveFlowControl value */
- /* Set the TFE bit according to ETH_TransmitFlowControl value */
- tmpreg |= (uint32_t)((ETH_InitStruct->ETH_PauseTime << 16) |
- 8039498: 6e62 ldr r2, [r4, #100] ; 0x64
- 803949a: 6ea1 ldr r1, [r4, #104] ; 0x68
- ETH->MACHTHR = (uint32_t)ETH_InitStruct->ETH_HashTableHigh;
- /* Write to ETHERNET MACHTLR */
- ETH->MACHTLR = (uint32_t)ETH_InitStruct->ETH_HashTableLow;
- /*----------------------- ETHERNET MACFCR Configuration --------------------*/
- /* Get the ETHERNET MACFCR value */
- tmpreg = ETH->MACFCR;
- 803949c: 6998 ldr r0, [r3, #24]
- /* Set the DZPQ bit according to ETH_ZeroQuantaPause value */
- /* Set the PLT bit according to ETH_PauseLowThreshold value */
- /* Set the UP bit according to ETH_UnicastPauseFrameDetect value */
- /* Set the RFE bit according to ETH_ReceiveFlowControl value */
- /* Set the TFE bit according to ETH_TransmitFlowControl value */
- tmpreg |= (uint32_t)((ETH_InitStruct->ETH_PauseTime << 16) |
- 803949e: 4311 orrs r1, r2
- ETH_InitStruct->ETH_ZeroQuantaPause |
- 80394a0: 6ee2 ldr r2, [r4, #108] ; 0x6c
- 80394a2: 4311 orrs r1, r2
- ETH_InitStruct->ETH_PauseLowThreshold |
- 80394a4: 6f22 ldr r2, [r4, #112] ; 0x70
- 80394a6: 4311 orrs r1, r2
- ETH_InitStruct->ETH_UnicastPauseFrameDetect |
- 80394a8: 6f62 ldr r2, [r4, #116] ; 0x74
- 80394aa: 4311 orrs r1, r2
- ETH->MACHTLR = (uint32_t)ETH_InitStruct->ETH_HashTableLow;
- /*----------------------- ETHERNET MACFCR Configuration --------------------*/
- /* Get the ETHERNET MACFCR value */
- tmpreg = ETH->MACFCR;
- /* Clear xx bits */
- tmpreg &= MACFCR_CLEAR_MASK;
- 80394ac: f64f 7241 movw r2, #65345 ; 0xff41
- 80394b0: 4002 ands r2, r0
- /* Set the DZPQ bit according to ETH_ZeroQuantaPause value */
- /* Set the PLT bit according to ETH_PauseLowThreshold value */
- /* Set the UP bit according to ETH_UnicastPauseFrameDetect value */
- /* Set the RFE bit according to ETH_ReceiveFlowControl value */
- /* Set the TFE bit according to ETH_TransmitFlowControl value */
- tmpreg |= (uint32_t)((ETH_InitStruct->ETH_PauseTime << 16) |
- 80394b2: 430a orrs r2, r1
- 80394b4: 6e21 ldr r1, [r4, #96] ; 0x60
- 80394b6: ea42 4101 orr.w r1, r2, r1, lsl #16
- ETH_InitStruct->ETH_PauseLowThreshold |
- ETH_InitStruct->ETH_UnicastPauseFrameDetect |
- ETH_InitStruct->ETH_ReceiveFlowControl |
- ETH_InitStruct->ETH_TransmitFlowControl);
- /* Write to ETHERNET MACFCR */
- ETH->MACFCR = (uint32_t)tmpreg;
- 80394ba: 6199 str r1, [r3, #24]
- /*----------------------- ETHERNET MACVLANTR Configuration -----------------*/
- /* Set the ETV bit according to ETH_VLANTagComparison value */
- /* Set the VL bit according to ETH_VLANTagIdentifier value */
- ETH->MACVLANTR = (uint32_t)(ETH_InitStruct->ETH_VLANTagComparison |
- 80394bc: 6fe1 ldr r1, [r4, #124] ; 0x7c
- 80394be: 6fa2 ldr r2, [r4, #120] ; 0x78
- 80394c0: 430a orrs r2, r1
- 80394c2: 61da str r2, [r3, #28]
- ETH_InitStruct->ETH_VLANTagIdentifier);
-
- /*-------------------------------- DMA Config ------------------------------*/
- /*----------------------- ETHERNET DMAOMR Configuration --------------------*/
- /* Get the ETHERNET DMAOMR value */
- tmpreg = ETH->DMAOMR;
- 80394c4: f503 5380 add.w r3, r3, #4096 ; 0x1000
- /* Clear xx bits */
- tmpreg &= DMAOMR_CLEAR_MASK;
- 80394c8: 4a2a ldr r2, [pc, #168] ; (8039574 <ETH_Init+0x27c>)
- ETH_InitStruct->ETH_VLANTagIdentifier);
-
- /*-------------------------------- DMA Config ------------------------------*/
- /*----------------------- ETHERNET DMAOMR Configuration --------------------*/
- /* Get the ETHERNET DMAOMR value */
- tmpreg = ETH->DMAOMR;
- 80394ca: 6999 ldr r1, [r3, #24]
- /* Set the TTC bit according to ETH_TransmitThresholdControl value */
- /* Set the FEF bit according to ETH_ForwardErrorFrames value */
- /* Set the FUF bit according to ETH_ForwardUndersizedGoodFrames value */
- /* Set the RTC bit according to ETH_ReceiveThresholdControl value */
- /* Set the OSF bit according to ETH_SecondFrameOperate value */
- tmpreg |= (uint32_t)(ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame |
- 80394cc: f8d4 0084 ldr.w r0, [r4, #132] ; 0x84
- /*-------------------------------- DMA Config ------------------------------*/
- /*----------------------- ETHERNET DMAOMR Configuration --------------------*/
- /* Get the ETHERNET DMAOMR value */
- tmpreg = ETH->DMAOMR;
- /* Clear xx bits */
- tmpreg &= DMAOMR_CLEAR_MASK;
- 80394d0: 400a ands r2, r1
- /* Set the TTC bit according to ETH_TransmitThresholdControl value */
- /* Set the FEF bit according to ETH_ForwardErrorFrames value */
- /* Set the FUF bit according to ETH_ForwardUndersizedGoodFrames value */
- /* Set the RTC bit according to ETH_ReceiveThresholdControl value */
- /* Set the OSF bit according to ETH_SecondFrameOperate value */
- tmpreg |= (uint32_t)(ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame |
- 80394d2: f8d4 1080 ldr.w r1, [r4, #128] ; 0x80
- 80394d6: 4308 orrs r0, r1
- ETH_InitStruct->ETH_ReceiveStoreForward |
- 80394d8: f8d4 1088 ldr.w r1, [r4, #136] ; 0x88
- 80394dc: 4308 orrs r0, r1
- ETH_InitStruct->ETH_FlushReceivedFrame |
- 80394de: f8d4 108c ldr.w r1, [r4, #140] ; 0x8c
- 80394e2: 4308 orrs r0, r1
- ETH_InitStruct->ETH_TransmitStoreForward |
- 80394e4: f8d4 1090 ldr.w r1, [r4, #144] ; 0x90
- 80394e8: 4308 orrs r0, r1
- ETH_InitStruct->ETH_TransmitThresholdControl |
- 80394ea: f8d4 1094 ldr.w r1, [r4, #148] ; 0x94
- 80394ee: 4308 orrs r0, r1
- ETH_InitStruct->ETH_ForwardErrorFrames |
- 80394f0: f8d4 1098 ldr.w r1, [r4, #152] ; 0x98
- 80394f4: 4308 orrs r0, r1
- ETH_InitStruct->ETH_ForwardUndersizedGoodFrames |
- 80394f6: f8d4 109c ldr.w r1, [r4, #156] ; 0x9c
- 80394fa: 4308 orrs r0, r1
- /* Set the TTC bit according to ETH_TransmitThresholdControl value */
- /* Set the FEF bit according to ETH_ForwardErrorFrames value */
- /* Set the FUF bit according to ETH_ForwardUndersizedGoodFrames value */
- /* Set the RTC bit according to ETH_ReceiveThresholdControl value */
- /* Set the OSF bit according to ETH_SecondFrameOperate value */
- tmpreg |= (uint32_t)(ETH_InitStruct->ETH_DropTCPIPChecksumErrorFrame |
- 80394fc: f8d4 10a0 ldr.w r1, [r4, #160] ; 0xa0
- 8039500: 4301 orrs r1, r0
- 8039502: 430a orrs r2, r1
- ETH_InitStruct->ETH_ForwardErrorFrames |
- ETH_InitStruct->ETH_ForwardUndersizedGoodFrames |
- ETH_InitStruct->ETH_ReceiveThresholdControl |
- ETH_InitStruct->ETH_SecondFrameOperate);
- /* Write to ETHERNET DMAOMR */
- ETH->DMAOMR = (uint32_t)tmpreg;
- 8039504: 619a str r2, [r3, #24]
- /* Set the FB bit according to ETH_FixedBurst value */
- /* Set the RPBL and 4*PBL bits according to ETH_RxDMABurstLength value */
- /* Set the PBL and 4*PBL bits according to ETH_TxDMABurstLength value */
- /* Set the DSL bit according to ETH_DesciptorSkipLength value */
- /* Set the PR and DA bits according to ETH_DMAArbitration value */
- ETH->DMABMR = (uint32_t)(ETH_InitStruct->ETH_AddressAlignedBeats |
- 8039506: f8d4 20a8 ldr.w r2, [r4, #168] ; 0xa8
- 803950a: f8d4 10a4 ldr.w r1, [r4, #164] ; 0xa4
- 803950e: 4311 orrs r1, r2
- ETH_InitStruct->ETH_FixedBurst |
- ETH_InitStruct->ETH_RxDMABurstLength | /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */
- 8039510: f8d4 20ac ldr.w r2, [r4, #172] ; 0xac
- /* Set the RPBL and 4*PBL bits according to ETH_RxDMABurstLength value */
- /* Set the PBL and 4*PBL bits according to ETH_TxDMABurstLength value */
- /* Set the DSL bit according to ETH_DesciptorSkipLength value */
- /* Set the PR and DA bits according to ETH_DMAArbitration value */
- ETH->DMABMR = (uint32_t)(ETH_InitStruct->ETH_AddressAlignedBeats |
- ETH_InitStruct->ETH_FixedBurst |
- 8039514: f441 0100 orr.w r1, r1, #8388608 ; 0x800000
- ETH_InitStruct->ETH_RxDMABurstLength | /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */
- 8039518: 4311 orrs r1, r2
- ETH_InitStruct->ETH_TxDMABurstLength |
- 803951a: f8d4 20b0 ldr.w r2, [r4, #176] ; 0xb0
- 803951e: 4311 orrs r1, r2
- (ETH_InitStruct->ETH_DescriptorSkipLength << 2) |
- 8039520: f8d4 20b8 ldr.w r2, [r4, #184] ; 0xb8
- 8039524: 430a orrs r2, r1
- 8039526: f8d4 10b4 ldr.w r1, [r4, #180] ; 0xb4
- /* Set the FB bit according to ETH_FixedBurst value */
- /* Set the RPBL and 4*PBL bits according to ETH_RxDMABurstLength value */
- /* Set the PBL and 4*PBL bits according to ETH_TxDMABurstLength value */
- /* Set the DSL bit according to ETH_DesciptorSkipLength value */
- /* Set the PR and DA bits according to ETH_DMAArbitration value */
- ETH->DMABMR = (uint32_t)(ETH_InitStruct->ETH_AddressAlignedBeats |
- 803952a: ea42 0281 orr.w r2, r2, r1, lsl #2
- 803952e: 601a str r2, [r3, #0]
- ETH_InitStruct->ETH_DMAArbitration |
- ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */
-
- #ifdef USE_ENHANCED_DMA_DESCRIPTORS
- /* Enable the Enhanced DMA descriptors */
- ETH->DMABMR |= ETH_DMABMR_EDE;
- 8039530: 681a ldr r2, [r3, #0]
- 8039532: f042 0280 orr.w r2, r2, #128 ; 0x80
- 8039536: 601a str r2, [r3, #0]
- #endif /* USE_ENHANCED_DMA_DESCRIPTORS */
-
- /* Return Ethernet configuration success */
- return ETH_SUCCESS;
- 8039538: 2001 movs r0, #1
- }
- 803953a: b007 add sp, #28
- 803953c: bdf0 pop {r4, r5, r6, r7, pc}
- 803953e: bf00 nop
- 8039540: 40028000 .word 0x40028000
- 8039544: feced300 .word 0xfeced300
- 8039548: 00e4e1bf .word 0x00e4e1bf
- 803954c: fde9f140 .word 0xfde9f140
- 8039550: 017d783f .word 0x017d783f
- 8039554: fc6c7900 .word 0xfc6c7900
- 8039558: 026259ff .word 0x026259ff
- 803955c: fa0a1f00 .word 0xfa0a1f00
- 8039560: 02faf07f .word 0x02faf07f
- 8039564: 000fffff .word 0x000fffff
- 8039568: 0004fffe .word 0x0004fffe
- 803956c: 0004ffff .word 0x0004ffff
- 8039570: ff20810f .word 0xff20810f
- 8039574: f8de3f23 .word 0xf8de3f23
- 08039578 <_sbrk>:
- extern char _ebss; // Defined by the linker
- extern char __bss_end__;
- static char *heap_end;
- char *prev_heap_end;
- if (heap_end == 0) {
- 8039578: 4b0a ldr r3, [pc, #40] ; (80395a4 <_sbrk+0x2c>)
- 803957a: 681a ldr r2, [r3, #0]
- 803957c: b90a cbnz r2, 8039582 <_sbrk+0xa>
- //heap_end = &_ebss;
- heap_end = &__bss_end__;
- 803957e: 4a0a ldr r2, [pc, #40] ; (80395a8 <_sbrk+0x30>)
- 8039580: 601a str r2, [r3, #0]
- }
- prev_heap_end = heap_end;
- 8039582: 681b ldr r3, [r3, #0]
- */
- __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void)
- {
- register uint32_t result;
- __ASM volatile ("MRS %0, msp\n" : "=r" (result) );
- 8039584: f3ef 8208 mrs r2, MSP
- char * stack = (char*) __get_MSP();
- if (heap_end + incr > stack)
- 8039588: 1818 adds r0, r3, r0
- 803958a: 4290 cmp r0, r2
- 803958c: d905 bls.n 803959a <_sbrk+0x22>
- {
- _write (STDERR_FILENO, "Heap and stack collision\n", 25);
- errno = ENOMEM;
- 803958e: 4b07 ldr r3, [pc, #28] ; (80395ac <_sbrk+0x34>)
- 8039590: 220c movs r2, #12
- 8039592: 601a str r2, [r3, #0]
- return (caddr_t) -1;
- 8039594: f04f 33ff mov.w r3, #4294967295
- 8039598: e001 b.n 803959e <_sbrk+0x26>
- //abort ();
- }
- heap_end += incr;
- 803959a: 4a02 ldr r2, [pc, #8] ; (80395a4 <_sbrk+0x2c>)
- 803959c: 6010 str r0, [r2, #0]
- return (caddr_t) prev_heap_end;
- }
- 803959e: 4618 mov r0, r3
- 80395a0: 4770 bx lr
- 80395a2: bf00 nop
- 80395a4: 2000c808 .word 0x2000c808
- 80395a8: 20013a4c .word 0x20013a4c
- 80395ac: 20013948 .word 0x20013948
- 080395b0 <Reset_Handler>:
- .weak Reset_Handler
- .type Reset_Handler, %function
- Reset_Handler:
- /* Copy the data segment initializers from flash to SRAM */
- movs r1, #0
- 80395b0: 2100 movs r1, #0
- b LoopCopyDataInit
- 80395b2: f000 b804 b.w 80395be <LoopCopyDataInit>
- 080395b6 <CopyDataInit>:
- CopyDataInit:
- ldr r3, =_sidata
- 80395b6: 4b0d ldr r3, [pc, #52] ; (80395ec <LoopFillZerobss+0x16>)
- ldr r3, [r3, r1]
- 80395b8: 585b ldr r3, [r3, r1]
- str r3, [r0, r1]
- 80395ba: 5043 str r3, [r0, r1]
- adds r1, r1, #4
- 80395bc: 3104 adds r1, #4
- 080395be <LoopCopyDataInit>:
-
- LoopCopyDataInit:
- ldr r0, =_sdata
- 80395be: 480c ldr r0, [pc, #48] ; (80395f0 <LoopFillZerobss+0x1a>)
- ldr r3, =_edata
- 80395c0: 4b0c ldr r3, [pc, #48] ; (80395f4 <LoopFillZerobss+0x1e>)
- adds r2, r0, r1
- 80395c2: 1842 adds r2, r0, r1
- cmp r2, r3
- 80395c4: 429a cmp r2, r3
- bcc CopyDataInit
- 80395c6: f4ff aff6 bcc.w 80395b6 <CopyDataInit>
- ldr r2, =_sbss
- 80395ca: 4a0b ldr r2, [pc, #44] ; (80395f8 <LoopFillZerobss+0x22>)
- b LoopFillZerobss
- 80395cc: f000 b803 b.w 80395d6 <LoopFillZerobss>
- 080395d0 <FillZerobss>:
- /* Zero fill the bss segment. */
- FillZerobss:
- movs r3, #0
- 80395d0: 2300 movs r3, #0
- str r3, [r2], #4
- 80395d2: f842 3b04 str.w r3, [r2], #4
- 080395d6 <LoopFillZerobss>:
-
- LoopFillZerobss:
- ldr r3, = _ebss
- 80395d6: 4b09 ldr r3, [pc, #36] ; (80395fc <LoopFillZerobss+0x26>)
- cmp r2, r3
- 80395d8: 429a cmp r2, r3
- bcc FillZerobss
- 80395da: f4ff aff9 bcc.w 80395d0 <FillZerobss>
- /* Call the clock system intitialization function.*/
- bl SystemInit
- 80395de: f7ec fbd1 bl 8025d84 <SystemInit>
- /* Call static constructors */
- bl __libc_init_array
- 80395e2: f7e8 f975 bl 80218d0 <__libc_init_array>
- /* Call the application's entry point.*/
- bl main
- 80395e6: f7ed fcaf bl 8026f48 <main>
- bx lr
- 80395ea: 4770 bx lr
- /* Copy the data segment initializers from flash to SRAM */
- movs r1, #0
- b LoopCopyDataInit
- CopyDataInit:
- ldr r3, =_sidata
- 80395ec: 08045c04 .word 0x08045c04
- ldr r3, [r3, r1]
- str r3, [r0, r1]
- adds r1, r1, #4
-
- LoopCopyDataInit:
- ldr r0, =_sdata
- 80395f0: 20000000 .word 0x20000000
- ldr r3, =_edata
- 80395f4: 20000ab4 .word 0x20000ab4
- adds r2, r0, r1
- cmp r2, r3
- bcc CopyDataInit
- ldr r2, =_sbss
- 80395f8: 20000ab4 .word 0x20000ab4
- FillZerobss:
- movs r3, #0
- str r3, [r2], #4
-
- LoopFillZerobss:
- ldr r3, = _ebss
- 80395fc: 20013a4c .word 0x20013a4c
- 08039600 <ADC_IRQHandler>:
- * @retval None
- */
- .section .text.Default_Handler,"ax",%progbits
- Default_Handler:
- Infinite_Loop:
- b Infinite_Loop
- 8039600: f7ff bffe b.w 8039600 <ADC_IRQHandler>
- 08039604 <_ctype_>:
- 8039604: 2000 2020 2020 2020 2020 2828 2828 2028 . (((((
- 8039614: 2020 2020 2020 2020 2020 2020 2020 2020
- 8039624: 8820 1010 1010 1010 1010 1010 1010 1010 ...............
- 8039634: 0410 0404 0404 0404 0404 1004 1010 1010 ................
- 8039644: 1010 4141 4141 4141 0101 0101 0101 0101 ..AAAAAA........
- 8039654: 0101 0101 0101 0101 0101 0101 1010 1010 ................
- 8039664: 1010 4242 4242 4242 0202 0202 0202 0202 ..BBBBBB........
- 8039674: 0202 0202 0202 0202 0202 0202 1010 1010 ................
- 8039684: 0020 0000 0000 0000 0000 0000 0000 0000 ...............
- 8039694: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80396a4: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80396b4: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80396c4: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80396d4: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80396e4: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80396f4: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 8039704: 0000 0000 ....
- 08039708 <tinytens>:
- 8039708: 89bc 97d8 d2b2 3c9c a733 d5a8 f623 3949 .......<3...#.I9
- 8039718: a73d 44f4 0ffd 32a5 979d cf8c ba08 255b =..D...2......[%
- 8039728: 6f43 64ac 0628 0e18 Co.d(...
- 08039730 <p05.5261>:
- 8039730: 0005 0000 0019 0000 007d 0000 0000 0000 ........}.......
- 08039740 <__mprec_tens>:
- 8039740: 0000 0000 0000 3ff0 0000 0000 0000 4024 .......?......$@
- 8039750: 0000 0000 0000 4059 0000 0000 4000 408f ......Y@.....@.@
- 8039760: 0000 0000 8800 40c3 0000 0000 6a00 40f8 .......@.....j.@
- 8039770: 0000 0000 8480 412e 0000 0000 12d0 4163 .......A......cA
- 8039780: 0000 0000 d784 4197 0000 0000 cd65 41cd .......A....e..A
- 8039790: 0000 2000 a05f 4202 0000 e800 4876 4237 ... _..B....vH7B
- 80397a0: 0000 a200 1a94 426d 0000 e540 309c 42a2 ......mB..@..0.B
- 80397b0: 0000 1e90 bcc4 42d6 0000 2634 6bf5 430c .......B..4&.k.C
- 80397c0: 8000 37e0 c379 4341 a000 85d8 3457 4376 ...7y.AC....W4vC
- 80397d0: c800 674e c16d 43ab 3d00 6091 58e4 43e1 ..Ngm..C.=.`.X.C
- 80397e0: 8c40 78b5 af1d 4415 ef50 d6e2 1ae4 444b @..x...DP.....KD
- 80397f0: d592 064d f0cf 4480 4af6 c7e1 2d02 44b5 ..M....D.J...-.D
- 8039800: 9db4 79d9 7843 44ea ...yCx.D
- 08039808 <__mprec_tinytens>:
- 8039808: 89bc 97d8 d2b2 3c9c a733 d5a8 f623 3949 .......<3...#.I9
- 8039818: a73d 44f4 0ffd 32a5 979d cf8c ba08 255b =..D...2......[%
- 8039828: 6f43 64ac 0628 0ac8 Co.d(...
- 08039830 <__mprec_bigtens>:
- 8039830: 8000 37e0 c379 4341 6e17 b505 b8b5 4693 ...7y.AC.n.....F
- 8039840: f9f5 e93f 4f03 4d38 1d32 f930 7748 5a82 ..?..O8M2.0.Hw.Z
- 8039850: bf3c 7f73 4fdd 7515 3025 5832 4c00 4445 <.s..O.u%02X.LED
- 8039860: 425f 696c 6b6e 4200 7475 6f74 736e 5500 _Blink.Buttons.U
- 8039870: 5350 4d5f 6e6f 7469 726f 7300 6d6e 5370 PS_Monitor.snmpS
- 8039880: 7379 7055 6954 656d 7300 6d6e 5470 6172 ysUpTime.snmpTra
- 8039890: 5470 7365 0074 6e73 7074 6e4f 6563 6953 pTest.sntpOnceSi
- 80398a0: 686e 6f72 7300 746e 5070 7265 6f69 6964 nhro.sntpPeriodi
- 80398b0: 5363 6e69 7268 006f 6e49 7469 6154 6b73 cSinhro.InitTask
- 80398c0: 4800 7261 4664 7561 746c 0a3a 000d 0d0a .HardFault:.....
- 80398d0: 6552 6967 7473 7265 3a73 0d0a 5300 2050 Registers:...SP
- 80398e0: 2020 2020 2020 2020 3020 2578 3830 786c 0x%08lx
- 80398f0: 0d0a 5200 2030 2020 2020 2020 2020 3020 ...R0 0
- 8039900: 2578 3830 786c 0d0a 5200 2031 2020 2020 x%08lx...R1
- 8039910: 2020 2020 3020 2578 3830 786c 0d0a 5200 0x%08lx...R
- 8039920: 2032 2020 2020 2020 2020 3020 2578 3830 2 0x%08
- 8039930: 786c 0d0a 5200 2033 2020 2020 2020 2020 lx...R3
- 8039940: 3020 2578 3830 786c 0d0a 5200 3231 2020 0x%08lx...R12
- 8039950: 2020 2020 2020 3020 2578 3830 786c 0d0a 0x%08lx..
- 8039960: 4c00 2052 2020 2020 2020 2020 3020 2578 .LR 0x%
- 8039970: 3830 786c 0d0a 5000 2043 2020 2020 2020 08lx...PC
- 8039980: 2020 3020 2578 3830 786c 0d0a 5000 5253 0x%08lx...PSR
- 8039990: 2020 2020 2020 2020 3020 2578 3830 786c 0x%08lx
- 80399a0: 0d0a 2500 2e30 6631 2500 0064 3025 6934 ...%0.1f.%d.%04i
- 80399b0: 252d 3230 2d69 3025 6932 2500 0073 6425 -%02i-%02i.%s.%d
- 80399c0: d020 d0b4 2ebd 2520 2064 87d1 202e 6425 ..... %d ... %d
- 80399d0: d020 d0bc d0b8 2ebd 3100 302e 4600 6c61 ........1.0.Fal
- 80399e0: 6573 7400 7572 0065 6166 736c 0065 6e6f se.true.false.on
- 80399f0: 2d00 3130 252d 3230 3a69 3025 6932 2500 .-01-%02i:%02i.%
- 8039a00: 3230 2d69 3025 6932 252d 3230 2d69 3130 02i-%02i-%02i-01
- 8039a10: 002d 3931 2e32 3631 2e38 2e31 0032 3931 -.192.168.1.2.19
- 8039a20: 2e32 3631 2e38 2e31 0031 3532 2e35 3532 2.168.1.1.255.25
- 8039a30: 2e35 3532 2e35 0030 7570 6c62 6369 4b00 5.255.0.public.K
- 8039a40: 2d4e 3330 302d 3030 3330 3000 302e 302e N-03-00003.0.0.0
- 8039a50: 302e 3000 2e39 3031 322e 3130 0035 4345 .0.09.10.2015.EC
- 8039a60: 342d 2d43 4434 302d 2d30 3030 302d 0041 -4C-4D-00-00-0A.
- 8039a70: 6461 696d 006e 3231 3433 0035 7375 7265 admin.12345.user
- 8039a80: 3100 3332 0034 3838 312e 3734 322e 3435 .1234.88.147.254
- 8039a90: 322e 3533 6e00 6e6f 0065 3231 2e37 2e30 .235.none.127.0.
- 8039aa0: 2e30 0031 a3d0 81d1 bfd0 b5d0 88d1 bdd0 0.1.............
- 8039ab0: bed0 5400 4f32 004b 90d0 b4d0 bcd0 b8d0 ...T2OK.........
- 8039ac0: bdd0 b8d0 81d1 82d1 80d1 b0d0 82d1 bed0 ................
- 8039ad0: 80d1 2500 2e73 6425 7325 6425 000d 0020 ...%s.%d%s%d.. .
- 8039ae0: 5452 504d 4920 0049 4341 004b 434e 004b RTMP II.ACK.NCK.
- 8039af0: 6572 7571 7365 5f74 6174 6b73 5100 0d31 request_task.Q1.
- 8039b00: 5400 0d4c 5400 5100 000d 0053 0052 0d43 .TL..T.Q..S.R.C.
- 8039b10: 4300 0d54 4900 000d 0d46 5100 0d32 d000 .CT..I..F..Q2...
- 8039b20: d090 d0b2 d1b0 d080 d1b8 008f 9dd0 bed0 ................
- 8039b30: 80d1 bcd0 b0d0 d000 d097 d0b0 d0bc d0ba ................
- 8039b40: d1bd d183 d082 00be a0d0 b0d0 b7d0 bed0 ................
- 8039b50: bcd0 bad0 bdd0 83d1 82d1 bed0 6c00 676f .............log
- 8039b60: 745f 7361 006b 3025 6932 252e 3230 2e69 _task.%02i.%02i.
- 8039b70: 3025 6932 2520 3230 3a69 3025 6932 253a %02i %02i:%02i:%
- 8039b80: 3230 0069 2c22 d000 d09f d1b5 d080 d0b5 02i.",..........
- 8039b90: d0b7 d0b0 d1b3 d180 d083 d0b7 d0ba 20b0 ...............
- 8039ba0: bad0 bed0 bdd0 82d1 80d1 bed0 bbd0 bbd0 ................
- 8039bb0: b5d0 80d1 b0d0 d000 d0a1 d1b1 d080 d1be ................
- 8039bc0: 2081 bdd0 b0d0 81d1 82d1 80d1 bed0 b5d0 . ..............
- 8039bd0: bad0 d000 d09e d0b1 d0bd d0be d0b2 d0bb ................
- 8039be0: d0b5 d0bd d0b8 20b5 9fd0 9ed0 d000 d0a1 ....... ........
- 8039bf0: d0bc d0b5 d0bd 20b0 bfd0 b0d0 80d1 bed0 ....... ........
- 8039c00: bbd0 8fd1 d000 d0a1 d1be d185 d080 d0b0 ................
- 8039c10: d0bd d0b5 d0bd d0b8 20b5 bdd0 b0d0 81d1 ......... ......
- 8039c20: 82d1 80d1 bed0 b5d0 bad0 d000 d090 d1b2 ................
- 8039c30: d082 d1be d080 d0b8 d0b7 d1b0 d086 d1b8 ................
- 8039c40: 008f a2d0 b5d0 81d1 82d1 d020 d098 d091 .......... .....
- 8039c50: 009f 92d0 8bd1 bad0 bbd0 8ed1 87d1 b5d0 ................
- 8039c60: bdd0 b8d0 b5d0 d020 d098 d091 009f 90d0 ...... .........
- 8039c70: b2d0 b0d0 80d1 b8d0 8fd1 d020 d0b4 d1b8 .......... .....
- 8039c80: d081 d1ba 2e80 d020 d1b2 d085 d0be d0b4 ...... .........
- 8039c90: 20b0 0031 a1d0 bed0 81d1 82d1 bed0 8fd1 . 1.............
- 8039ca0: bdd0 b8d0 b5d0 d020 d1b2 d18b d085 d0be ...... .........
- 8039cb0: d0b4 20b0 0031 a1d0 bed0 81d1 82d1 bed0 ... 1...........
- 8039cc0: 8fd1 bdd0 b8d0 b5d0 d020 d1b2 d18b d085 ........ .......
- 8039cd0: d0be d0b4 20b0 0032 90d0 b2d0 b0d0 80d1 ..... 2.........
- 8039ce0: b8d0 8fd1 d120 d082 d0b5 d0bc d0bf d1b5 .... ...........
- 8039cf0: d080 d1b0 d182 d183 d180 008b 90d0 b2d0 ................
- 8039d00: b0d0 80d1 b8d0 8fd1 d020 d1b2 2e85 d020 ........ ..... .
- 8039d10: d0bd d0b0 d1bf d180 d08f d0b6 d0b5 d0bd ................
- 8039d20: d1b8 008f 9dd0 b8d0 b7d0 bad0 b8d0 b9d0 ................
- 8039d30: d020 d0b7 d1b0 d180 d08f 20b4 90d0 9ad0 .......... ....
- 8039d40: 91d0 d000 d090 d0b2 d1b0 d080 d1b8 208f ...............
- 8039d50: bdd0 b0d0 b3d0 80d1 83d1 b7d0 bad0 b8d0 ................
- 8039d60: d000 d090 d0b2 d1b0 d080 d1b8 208f 81d1 ............. ..
- 8039d70: b2d0 8fd1 b7d0 b8d0 d120 2081 98d0 91d0 ........ .. ....
- 8039d80: 9fd0 d000 d090 d0b2 d1b0 d080 d1b8 208f ...............
- 8039d90: bed0 82d1 bad0 bbd0 8ed1 87d1 b5d0 bdd0 ................
- 8039da0: b8d0 8fd1 d020 d090 d09a 0091 6972 676e .... .......ring
- 8039db0: 7366 615f 7070 6e65 3a64 6320 726f 7572 fs_append: corru
- 8039dc0: 7470 6465 6620 6c69 7365 7379 6574 0d6d pted filesystem.
- 8039dd0: 000a 4449 454c 0900 6325 2509 0975 7525 ..IDLE..%c.%u.%u
- 8039de0: 2509 0d75 000a 6d54 2072 7653 0063 .%u...Tmr Svc.
- 08039dee <data__rotek_png>:
- 8039dee: 722f 746f 6b65 702e 676e 0000 5448 5054 /rotek.png..HTTP
- 8039dfe: 312f 312e 3220 3030 4f20 0d4b 530a 7265 /1.1 200 OK..Ser
- 8039e0e: 6576 3a72 6c20 4977 2f50 2e31 2e33 2031 ver: lwIP/1.3.1
- 8039e1e: 6828 7474 3a70 2f2f 6173 6176 6e6e 6861 (http://savannah
- 8039e2e: 6e2e 6e6f 6e67 2e75 726f 2f67 7270 6a6f .nongnu.org/proj
- 8039e3e: 6365 7374 6c2f 6977 2970 0a0d 6f43 746e ects/lwip)..Cont
- 8039e4e: 6e65 2d74 654c 676e 6874 203a 3935 3935 ent-Length: 5959
- 8039e5e: 0a0d 6f43 6e6e 6365 6974 6e6f 203a 6c43 ..Connection: Cl
- 8039e6e: 736f 0d65 430a 6e6f 6574 746e 742d 7079 ose..Content-typ
- 8039e7e: 3a65 6920 616d 6567 702f 676e 0a0d 6143 e: image/png..Ca
- 8039e8e: 6863 2d65 6f43 746e 6f72 3a6c 7020 6972 che-Control: pri
- 8039e9e: 6176 6574 202c 616d 2d78 6761 3d65 3638 vate, max-age=86
- 8039eae: 3034 0d30 0d0a 890a 4e50 0d47 1a0a 000a 400.....PNG.....
- 8039ebe: 0000 490d 4448 0052 0100 0057 0000 08ae ...IHDR...W.....
- 8039ece: 0006 0000 db82 7d4e 0000 0e17 4449 5441 ......N}....IDAT
- 8039ede: da78 9ded ac7d 672c c059 a1cf 7a80 3285 x...}.,gY....z.2
- 8039eee: 4b45 1014 4db6 a62d ae0a b68a 52d8 45c7 EK...M-......R.E
- 8039efe: 4131 1b2d 1045 0b7a 7a53 bc69 6060 634d 1A-.E.z.Szi.``Mc
- 8039f0e: d894 c326 6c55 d2ac c6c5 285e 2c91 951f ..&.Ul....^(.,..
- 8039f1e: 4a92 885d 4ad5 dd02 6a3f 9352 1ba2 36ac .J]..J..?jR....6
- 8039f2e: a246 011b 6d69 e76b 72d2 71fb 7729 df7d F...imk..r.q)w}.
- 8039f3e: 7793 9c75 cece 9fbc b333 7e7b fc7f 6f72 .wu.....3.{~..ro
- 8039f4e: 39ce fb3b bf39 e67d 9e79 79f7 9677 e5cb .9;.9.}.y..yw...
- 8039f5e: 000e f800 1785 0001 b900 0002 5720 0000 ............ W..
- 8039f6e: 0ae4 0000 15c8 0000 02b9 2000 0057 4000 ........... W..@
- 8039f7e: 00ae c800 0015 b900 0002 7200 0005 ae40 ...........r..@.
- 8039f8e: 0000 15c8 0000 2b90 0000 0572 4000 00ae .......+..r..@..
- 8039f9e: 8000 015c 9000 002b 7200 0005 e400 000a ..\...+..r......
- 8039fae: 5c80 0001 2b90 0000 5720 0000 0ae4 8000 .\...+.. W......
- 8039fbe: 015c 0000 02b9 2000 0057 e400 000a c800 \...... W.......
- 8039fce: 0015 b900 0002 5720 0000 eae4 c19f 5f6b ...... W......k_
- 8039fde: 96b7 8fdd bede 440d 3882 9a47 ff23 def3 .......D.8G.#...
- 8039fee: 3c96 d6df ed38 377d 7e56 009e c824 3375 .<..8.}7V~..$.u3
- 8039ffe: dae5 8c17 1304 5cc1 b4b0 de40 aa6e 138e .......\..@.n...
- 803a00e: 4d23 0ae4 75c8 ca3f 4655 89a5 6192 2966 #M...u?.UF...af)
- 803a01e: 3ad3 7532 44fc 1fdd 4522 80ae b75c ae56 .:2u.D.."E..\.V.
- 803a02e: 8ab1 974e 202d 3b45 a644 15c8 eb90 c936 ..N.- E;D.....6.
- 803a03e: 4655 8b8f a496 645a 3441 5c8b b901 ba6e UF....ZdA4.\..n.
- 803a04e: bb5c d524 b4b2 08c1 22b9 4057 9bae d724 \.$......"W@..$.
- 803a05e: a1d8 5530 2cc5 2450 231b e457 c801 cbb5 ..0U.,P$.#W.....
- 803a06e: 9572 da97 0763 cdd1 edd5 1557 48ff 5db3 r...c.....W..H.]
- 803a07e: 512b 9bb7 e63b 2364 0ae4 5c80 26bb bed7 +Q..;.d#...\.&..
- 803a08e: 0a45 5320 ae05 47a1 45b1 78ea 8b13 844e E. S...G.E.x..N.
- 803a09e: 3f6c bd16 2b90 d720 caee 6475 7971 54df l?...+ ...udqy.T
- 803a0ae: 2951 48b1 8c27 2b91 7200 5b6d 13ae a943 Q).H'..+.rm[..C.
- 803a0be: 95b6 ecdf 3c59 08d6 02b9 d720 e5a6 191a ....Y<.... .....
- 803a0ce: 38e4 1d67 1a2a 0cf5 d922 7ef9 2c10 0572 .8g.*..."..~.,r.
- 803a0de: dae4 b91d 8aea b5d5 a9dd 9857 1023 9c7b ..........W.#.{.
- 803a0ee: 302b ccd4 cec9 7db7 017e 0572 dae4 b90d +0.....}~.r.....
- 803a0fe: 8aea 6675 a521 caa1 ce77 722c 63b8 c28b ..uf!...w.,r.c..
- 803a10e: a458 04ba 75f6 8b04 015c b6b9 572f b15d X....u..\.../W].
- 803a11e: 86a6 9d42 faee ea5f 189a bd16 adf6 9160 ..B..._.......`.
- 803a12e: 202b 4d57 06b9 ec14 53d4 532b d2a4 a105 + WM.....S+S....
- 803a13e: 6f57 4a65 3af4 ec52 a46b e609 15c8 2b90 WoeJ.:R.k......+
- 803a14e: f572 58cd 6443 8efd 892e 34cd 69a3 c11d r..XCd.....4.i..
- 803a15e: 904e 202b e457 8bea 07a1 f6b1 2d03 f55f N.+ W........-_.
- 803a16e: d4bd 4755 09b0 0572 8ae4 7d5c 59e4 4733 ..UG..r...\}.Y3G
- 803a17e: 8eb1 bb76 b435 7525 6c14 4db6 041d 15c8 ..v.5.%u.l.M....
- 803a18e: ab90 5c81 0a3d 2eb6 1acf 88d7 6279 9059 ...\=.......ybY.
- 803a19e: 6b4a 0be6 e6ac 8c0a 872c d76e 122d 13a8 Jk......,.n.-...
- 803a1ae: 0cec 02b9 4572 a1ae 01d2 4f23 0c8b 4bf2 ....rE....#O...K
- 803a1be: 5d62 af1f e749 5d41 4007 f0e2 91fc 202b b]..I.A].@....+
- 803a1ce: e457 56ba 8b8e e89a 87d2 2758 2e01 4db1 W..V......X'...M
- 803a1de: ba96 09d6 5c76 1e93 9088 202b 7dd7 5726 ....v\....+ .}&W
- 803a1ee: c147 35a6 a185 51c8 f3ac 9606 eac4 752e G..5...Q.......u
- 803a1fe: 13ad 7cec bb9b 9007 202b e6d7 5ae4 c457 ...|....+ ...ZW.
- 803a20e: 1d8a b472 8ba6 9a0c da9a af35 bfc9 dd56 ..r.......5...V.
- 803a21e: 87b6 015c eeb9 b933 0a5a b536 074c 01a4 ..\...3.Z.6.L...
- 803a22e: a5e6 9e46 0ae6 f6b8 8eb0 35b7 457a 80ae ..F........5zE..
- 803a23e: 9b5c 6b91 d45d abda dad8 c7c5 8322 2155 \..k].......".U!
- 803a24e: 6749 b5d8 f6e9 3ad9 1d82 7e7a 905d 202b Ig.....:..z~].+
- 803a25e: 6dd7 ab95 60a1 8b13 f9cb e2ba 8e97 2358 .m...`........X#
- 803a26e: fc75 376c 52ec 9d57 d61e 22c8 f732 ea91 u.l7.RW...."2...
- 803a27e: 0d58 f1ad 58c5 ae3d 2ab4 afda 6b91 8824 X....X=..*...k$.
- 803a28e: a905 2c60 8198 9277 6bc2 323e bdbc 07ae ..`,..w..k>2....
- 803a29e: de5c 1ebf 7572 ec17 22c2 ab3a 074b 1ac4 \...ru...":.K...
- 803a2ae: 542d 52b6 19b5 5873 d827 4589 baf4 20f0 -T.R..sX'..E...
- 803a2be: a6d7 a956 f38d 65ef 5c89 7523 cf82 4b05 ..V....e.\#u...K
- 803a2ce: ce08 f0a8 cffa 6e0c 2bab 89d7 63e5 04cb .......n.+...c..
- 803a2de: 227d 7757 f6b9 842d 73d3 85ec 049d 4892 }"Ww..-..s.....H
- 803a2ee: 22dd c481 48b2 5a95 14a4 5f5c 50fb d7c8 ."...H.Z..\_.P..
- 803a2fe: ca3e b5c9 70e7 8212 713d 5ce1 0ccd 3b6e >....p..=q.\..n;
- 803a30e: 280e c5d6 ac4a d5c8 b05d 4555 be9b 36c5 .(..J...].UE...6
- 803a31e: 332f 8b8f 6c0c 9377 2c8d 1b3b be6c 5c4c /3...lw..,;.l.L\
- 803a32e: 5b0a ddc3 e696 082d c6b9 24ea 7445 90ed .[....-....$Et..
- 803a33e: 473f 8e7b 6f51 0af1 f6c4 63ea 6eae ce4f ?G{.Qo.....c.nO.
- 803a34e: 93d5 1760 6d86 914a fae5 26fb aac4 5823 ..`..mJ....&..#X
- 803a35e: 22db b4d5 39e2 e887 0e2b 77ca e07c cb33 ."...9..+..w|.3.
- 803a36e: 5f0b 3177 6b92 4587 fce1 1d8c 5ea3 621f ._w1.k.E.....^.b
- 803a37e: 169d 8ac5 dd5c dae4 b8b3 1fb4 1659 7478 ....\.......Y.xt
- 803a38e: a897 3aae 7a01 8f25 6875 0ab8 a6cb 7607 ...:.z%.uh.....v
- 803a39e: 916c b052 185d dd31 716d cd98 bf99 07fd l.R.].1.mq......
- 803a3ae: ae88 8a1d d339 f0d4 91f6 b167 e84e 7016 ....9.....g.N..p
- 803a3be: ab6c 9430 cf4c d230 aaad 8fb8 fd76 892e l.0.L.0.....v...
- 803a3ce: 348d cd66 6dd6 bd97 8c30 a344 5d00 8b03 .4f..m..0.D..]..
- 803a3de: e536 8cfa bd3f d10d 43b5 90ea 5d1f 9c94 6...?....C...]..
- 803a3ee: 7ddb 9cc3 6ead 018a 3ab9 7608 5862 ef05 .}...n...:.vbX..
- 803a3fe: 885b a7ac 06d1 5b65 8a14 3a35 fa0e 8b1e [.....e[..5:....
- 803a40e: 3354 d3cf 5ab2 c51f a3f8 de87 ec85 679a T3...Z.........g
- 803a41e: 3858 e72f 510e 8baf 1358 5cfa ca3d 20b5 X8/..Q..X..\=..
- 803a42e: 45d8 915d f0a6 a9f7 a445 f13b c8b4 f7c0 .E].....E.;.....
- 803a43e: c098 a2c8 5548 fcf5 be6d 9018 feeb 5fa4 ....HU..m......_
- 803a44e: 2738 a36d d8de ac52 c959 4063 beae 7ae4 8'm...R.Y.c@...z
- 803a45e: fae0 4ee9 d4dd 57fd e9bc 45ad cf21 f2ea ...N...W...E!...
- 803a46e: 059b d719 6cb5 1af9 52e2 d827 61be 73ce .....l...R'..a.s
- 803a47e: 2161 d344 892f a2c4 accd 508a cd72 9537 a!D./......Pr.7.
- 803a48e: 102f f7a3 814e 65be 99b4 68f8 42b5 feae /...N..e...h.B..
- 803a49e: dae5 7213 891d 9c76 a4a5 144c eff2 72f2 ...r..v...L....r
- 803a4ae: 2715 4ee1 ce5d dcf1 2e4b 8937 7d74 720f .'.N]...K.7.t}.r
- 803a4be: 5919 a244 8255 0c8b dda3 7038 80a7 61af .YD.U.....8p...a
- 803a4ce: 3a35 cd72 8454 5654 8938 241d 6b1b 5a92 5:r.T.TV8..$.k.Z
- 803a4de: 0de4 0363 ab4c b1e8 f267 e7af 22d0 b5ea ..c.L...g...."..
- 803a4ee: eb15 cd7c 8a7b 2b5c 845e 87fc 5532 881f ..|.{.\+^...2U..
- 803a4fe: b455 9b61 598f b90a ab66 88e3 7093 ab26 U.a..Y..f....p&.
- 803a50e: dfcb d577 f7fb 2c84 795b 62f2 8f91 2563 ..w....,[y.b..c%
- 803a51e: 9cd7 8d60 5f8a f43f dff6 79da afe5 dc1c ..`.._?....y....
- 803a52e: c9f9 5e37 23ba 6bee 95e7 bfaf ef64 1e98 ..7^.#.k....d...
- 803a53e: 440a 4599 c4b7 593a 9e66 2cbe 8666 6b51 .D.E..:Yf..,f.Qk
- 803a54e: e388 7f2e cde2 56bf 0276 6af6 ba4e 52c8 .......Vv..jN..R
- 803a55e: b1b0 49e6 3a9d 8244 1a3b dd8f f8a5 9be4 ...I.:D.;.......
- 803a56e: e2d4 78f1 b56b ae42 27ff 9ed7 d6fa bb1a ...xk.B..'......
- 803a57e: d38a f217 14e4 9412 258f 2215 564c 1c97 .........%."LV..
- 803a58e: e235 8b4a 7d42 a5f9 bebf ae56 1fa2 e773 5.J.B}....V...s.
- 803a59e: 5ffc f64d e67e a970 f7dd cb24 2799 9ab9 ._M.~.p...$..'..
- 803a5ae: fd2c 849d ab92 6443 fb13 4cae 98e7 563a ,.....Cd...L..:V
- 803a5be: 7dcf ee3e b038 675c 9c0d 13a7 b706 cbd4 .}>.8.\g........
- 803a5ce: dd35 bc94 9092 5ce4 ba46 5fa7 e1fd 96bd 5......\F.._....
- 803a5de: b29f 97e2 a894 5ca9 166b 4444 7d16 a6bb .......\k.DD.}..
- 803a5ee: 9cb2 8c5a 3465 9c79 e2ae 6ed6 92ef 8def ..Z.e4y....n....
- 803a5fe: 914d b2c3 6dca 0512 0c2e b223 9190 1462 M....m....#...b.
- 803a60e: ae58 f3a1 c9d8 a980 db58 d725 08b2 ecf7 X.......X.%.....
- 803a61e: 8e2b 9dec 52d0 e72e 3c1d 2d64 9ad7 7608 +....R...<d-...v
- 803a62e: 49ee 3396 5cc3 2ce9 a760 1c40 b8e2 bce7 .I.3.\.,`.@.....
- 803a63e: 4af3 a89b f5d2 5692 b8e7 2f21 27db f281 .J.....V..!/.'..
- 803a64e: 55c4 9e44 ab9e 4769 3240 e460 b6a0 475c .UD...iG@2`...\G
- 803a65e: 52db 1531 9d72 890b 42a6 7da8 b91b dfca .R1.r....B.}....
- 803a66e: b619 f97e a592 b90f 169a 7c9e adcd 5ffd ..~........|..._
- 803a67e: 7d9e cddd 972e b6d6 98c5 c034 fb65 83b0 .}........4.e...
- 803a68e: e197 7a45 531e 3e2b bb87 d720 5c9c b9fb ..Ez.S+>.. ..\..
- 803a69e: d542 5738 4ac0 bf2d f351 9fb7 28f8 5982 B.8W.J-.Q....(.Y
- 803a6ae: 10a6 4216 e3ae 6895 e575 26ba 9045 806e ...B...hu..&E.n.
- 803a6be: 275c 9116 3aeb 3646 68cb 850b 91ac c9e5 \'...:F6.h......
- 803a6ce: 0717 ab90 2569 34dc d195 eb76 7155 6b86 ....i%.4..v.Uq.k
- 803a6de: c8c8 4235 0dae 62b7 d019 2753 fc90 a7c0 ..5B...b..S'....
- 803a6ee: 70aa 0f35 5a2d d119 810a b6f6 ae58 36b3 .p5.-Z......X..6
- 803a6fe: 0e17 d214 4b01 ee8d 2680 3ae5 841e 14eb .....K...&.:....
- 803a70e: b7e8 d620 c799 bae7 341c e9dc 5c80 621b .. ......4...\.b
- 803a71e: b425 07dc 1135 dbd2 5ceb 3108 4961 5cca %...5....\.1aI.\
- 803a72e: 2076 c954 44b5 33b0 82c3 1b53 ed72 5892 v T..D.3..S.r..X
- 803a73e: 0ee7 099f 28d3 e473 b2f9 167d 8d38 fa11 .....(s...}.8...
- 803a74e: 3cf2 8a74 39c2 457a edae 75c8 290f f93d .<t..9zE...u.)=.
- 803a75e: 14af ae60 79c1 b3e2 2a0a 9d8e 8949 68cb ..`..y...*..I..h
- 803a76e: 4cb6 9aae 7a4b 5b4d a6ab f386 756f dae5 .L..KzM[....ou..
- 803a77e: 436b 32aa 5ac7 d3d2 9aea 4b9b fe07 9adb kC.2.Z.....K....
- 803a78e: 524c 9352 8fc0 c437 038e cfb6 95b5 2bdc LRR...7........+
- 803a79e: 7572 e4bb 3a77 414e 65ae b1f7 5b27 4829 ru..w:NA.e..'[)H
- 803a7ae: 3d5f 427b f1ae b91a ebf6 f496 e87a 982e _={B........z...
- 803a7be: f639 36a2 203a b65b 95c1 ab44 f23e 36ad 9..6: [...D.>..6
- 803a7ce: 5791 145d ba15 7fc1 82da e35c f38a edaf .W].......\.....
- 803a7de: 1a82 0d72 d724 62b4 b91d a8f7 1577 cad9 ..r.$..b....w...
- 803a7ee: aa7c bc8f caad c6ff b905 2d8e cb06 ee84 |..........-....
- 803a7fe: 6d8b 407d 5cb6 b74d 6a26 6d75 3792 c2f9 .m}@.\M.&jum.7..
- 803a80e: 0c5c 6fda 6ff0 3663 d442 a742 8b00 5a08 \..o.oc6B.B....Z
- 803a81e: 6b96 586c 8824 7894 b927 84ee 50c8 7bae .klX$..x'....P.{
- 803a82e: 009d d2ea f7be 8b8a 1b2f 4929 16ba 620c ......../.)I...b
- 803a83e: 8dcb 6304 de8b 9b52 c37d 1f5a 2d90 d823 ...c..R.}.Z..-#.
- 803a84e: 8235 95b5 30eb 09c0 ba1e bfc1 1ded da07 5....0..........
- 803a85e: 514c 90f4 736b ed72 445b d904 0f9a f690 LQ..ksr.[D......
- 803a86e: 59e5 ae4e 423b 7bae d3b9 6895 225d 1fda .YN.;B.{...h]"..
- 803a87e: cb7f 4ce1 15e6 c50d 3a67 b042 a1e7 7fd1 ...L....g:B.....
- 803a88e: 56de ab31 dbd0 2aea d357 fc66 e7a1 6663 .V1....*W.f...cf
- 803a89e: 3b81 4c1b c187 d194 b00f e081 32dc 9f02 .;.L.........2..
- 803a8ae: d720 0b66 a65a b879 a7a9 fa0f 391e eeb9 .f.Z.y......9..
- 803a8be: 3ffd 8b97 6d4a e12f 7e64 30b1 a654 09aa .?..Jm/.d~.0T...
- 803a8ce: 6e7f 9c58 1c4a fd1b 1f5b 2d90 dcbe 2c7c .nX.J...[..-..|,
- 803a8de: 348f 17cd 0166 b872 e9a6 d0ab b3fd cca6 .4..f.r.........
- 803a8ee: c52d 391a c54c 21ea e6d7 3ae4 5c33 9daf -..9L..!...:3\..
- 803a8fe: 4458 2326 bc75 d551 9b9b eb93 bbff bcf4 XD&#u.Q.........
- 803a90e: f5e0 b66f 422a b9c8 6a06 c1a6 3578 a620 ..o.*B...j..x5 .
- 803a91e: 55d0 b7d0 cb58 363f 3b4c 2eb8 1d7b 1c56 .U..X.?6L;..{.V.
- 803a92e: 3527 fe1c c7b2 0ecb a6ff 6a8f 34f2 d450 '5.........j.4P.
- 803a93e: b214 1e0a 7fb2 67d6 a360 1afb 1236 22bd .......g`...6.."
- 803a94e: 7b57 86c6 4691 1964 2c49 690a b184 646e W{...Fd.I,.i..nd
- 803a95e: e420 8f9a 8d66 0e3a 9464 2226 54d9 faae ...f.:.d.&".T..
- 803a96e: 912a c4eb 8262 c2d6 6871 e98b ec80 c6be *...b...qh......
- 803a97e: 5792 4dd7 b309 11c0 6ea0 64c4 343b a77a .W.M.....n.d;4z.
- 803a98e: 5103 cfb1 9c94 14ae 26d3 57a2 6ae4 d0cf .Q.......&.W.j..
- 803a99e: ef22 b53a e378 15fa ff09 d14a b92a 4f16 ".:.x.....J.*..O
- 803a9ae: a36e 6d6f a139 2e4b cdad b5c9 772a f0ba n.om9.K.....*w..
- 803a9be: 53b8 136e b203 8ea7 3572 6969 d9b2 69af .Sn.....r5ii...i
- 803a9ce: 0832 2053 cd33 6715 0683 ebaa 9e81 7f6b 2.S 3..g......k.
- 803a9de: a04d 8593 5e8e ab91 913d 65c5 6257 8df9 M....^..=..eWb..
- 803a9ee: 175f acf1 630a df5a a2ac 3580 8934 d446 _....cZ....54.F.
- 803a9fe: b20a e554 2746 b79e ef14 b6ed 2037 48db ..T.F'......7 .H
- 803aa0e: 15d8 badb 45d4 a382 91c0 9752 6406 7977 .....E....R..dwy
- 803aa1e: 185b cb1f 6367 dae4 0acc 99ad 1145 6162 [...gc......E.ba
- 803aa2e: 1559 189e 965c 3525 cd72 8157 0667 ec51 Y...\.%5r.W.g.Q.
- 803aa3e: a2a2 a0ab 7b6a 85f0 be63 d435 ec80 d778 ....j{..c.5...x.
- 803aa4e: 9edf 9359 89c2 b7d7 52b9 6cb0 eff2 80d2 ..Y......R.l....
- 803aa5e: 2eec f731 5858 4e34 207b 3757 1646 ad79 ..1.XX4N{ W7F.y.
- 803aa6e: 61c4 b33d 8449 a992 e76f 855e ad5c 2b24 .a=.I...o.^.\.$+
- 803aa7e: abb7 2831 c564 5b16 bb8a 0a76 21a4 1ae4 ..1(d..[..v..!..
- 803aa8e: 0662 8584 5c14 e7ab 07a1 7764 ba89 3ae7 b....\....dw...:
- 803aa9e: 1909 22bd 70d7 81a9 6599 3af4 c8d5 6539 ...".p...e.:..9e
- 803aaae: 1f16 58b2 4a33 8ad1 64b4 9714 25db 2aa1 ...X3J...d...%.*
- 803aabe: 9d6a faec f5d9 c435 6c80 e5a3 0db4 2109 j.....5..l.....!
- 803aace: 68b3 09fb ecb9 9375 9ae5 fc0e c716 a28c .h....u.........
- 803aade: e457 ceea e2d4 ae1b 292e d63f fa90 32c4 W........)?....2
- 803aaee: d222 14a9 3a27 9702 9c91 01da b477 1ada "...':......w...
- 803aafe: a07c 3dbf dcf8 df70 df2c b203 728d f2ae |..=..p.,....r..
- 803ab0e: a48b b121 03f6 b65f 0e9b 4ec8 5836 f1ae ..!..._....N6X..
- 803ab1e: 6fc0 8427 b1d1 6b91 a5d8 33b0 3c87 8e99 .o'....k...3.<..
- 803ab2e: 7b04 b24a 91a6 42ec 1073 5688 22d4 6ea7 .{J....Bs..V.".n
- 803ab3e: 96c9 12ad 4eb9 862c b8c1 ceae 42ca d16c .....N,......Bl.
- 803ab4e: bf2d 3a44 d628 1a26 7bfc 2c1b 5ed7 9cc0 -.D:(.&..{.,.^..
- 803ab5e: 0cf2 36b9 7233 6170 0df1 d3a7 620e 0972 ...63rpa.....br.
- 803ab6e: 1c37 dfac 36d9 edcb 30c0 5c34 de57 f9d3 7....6...04\W...
- 803ab7e: 9776 5b2d e3ab f46a 6691 6286 e935 3573 v.-[..j..f.b5.s5
- 803ab8e: 0d99 ed3b 5c88 0e17 9aab 7642 b40a bdb9 ..;..\....Bv....
- 803ab9e: c84b 014e 435f 6269 1ae4 ae5e 6589 5675 K.N._Cib..^..euV
- 803abae: 5be7 3273 bf08 a68b bcae bab3 b1d9 1252 .[s2..........R.
- 803abbe: be2f daf2 d6ba d4a9 ae42 edba e358 00dd /.......B...X...
- 803abce: 1abb 9404 d4eb fdf1 a26d dfc1 47a6 6db7 ........m....G.m
- 803abde: 0d66 3ea4 c866 99b5 d961 cb0b 3408 ccd1 f..>f...a....4..
- 803abee: f695 203b 48d8 3fa3 1330 9d72 44d6 91ad ..; .H.?0.r..D..
- 803abfe: 5ca5 8d23 3368 2109 35d7 5b83 a35c a1d5 .\#.h3.!.5.[\...
- 803ac0e: f787 a9a4 ff06 4b7e 0763 1a9b 9d74 8ef9 ......~Kc...t...
- 803ac1e: 915e 336b d7b9 5cba 6e97 7343 301a cd8a ^.k3...\.nCs.0..
- 803ac2e: 58e7 35a7 aaf9 aeda ef82 723d 75d4 5645 .X.5......=r.uEV
- 803ac3e: 0b5d 64d5 1e4d de36 b40d 971f e8a7 316d ]..dM.6.......m1
- 803ac4e: b0f0 736d 9d43 6502 919f 8a91 bad8 da2e ..msC..e........
- 803ac5e: a0d1 ae99 0588 6d72 b226 399b 9114 ab74 ......rm&..9..t.
- 803ac6e: 99ff c967 1546 07b3 eeaa 36a7 3d8a 8afb ..g.F......6.=..
- 803ac7e: ae23 021d 229d 9727 c5b9 3809 b1f6 057b #...."'....8..{.
- 803ac8e: 0e6c d5c8 f6ff 992f 0f43 c8eb 5f22 5897 l...../.C..."_.X
- 803ac9e: 768a d9a8 5069 f977 995a 958b 0c63 a32d .v..iPw.Z...c.-.
- 803acae: 2eca b5ca e5f8 ab12 2cf7 435d 91dc 397c .........,]C..|9
- 803acbe: d720 d8ad 30a0 cc75 0d7b 2f2d e73f 9db9 ....0u.{.-/?...
- 803acce: 860e c325 d387 375c cd81 4fe5 26bf 9dfa ..%...\7...O.&..
- 803acde: 08d5 3c76 df28 7671 e553 800a 5b5c fdd8 ..v<(.qvS...\[..
- 803acee: 4eb5 8960 0446 ef3c ee48 a4ca b698 8bf6 .N`.F.<.H.......
- 803acfe: bce5 8783 ad8a c85a 9015 722b cab5 6663 ......Z...+r..cf
- 803ad0e: f703 0245 a0e9 16dd 9b18 4802 f15c f798 ..E........H\...
- 803ad1e: 8b04 015c 22b9 90d7 03dd f2ba 39ea 980c ..\..".......9..
- 803ad2e: d970 b2f1 f9a7 8cd8 6f22 d8b9 a1c0 0b15 p......."o......
- 803ad3e: 02b9 4572 daae ac3d bdba 3d87 3395 150d ..rE..=....=.3..
- 803ad4e: 66c9 5206 77cd ac37 e45b 3550 c0ff dfa8 .f.R.w7.[.P5....
- 803ad5e: b912 7202 ae45 fdb6 7373 49c3 8948 14ea ...rE...ss.IH...
- 803ad6e: 21f0 d35a 838e e2b2 5555 365e 16dd 22c1 .!Z.....UU^6..."
- 803ad7e: 400c ddae ab92 0f6e 666b f8d1 5abc 3339 .@....n.kf...Z93
- 803ad8e: f752 d551 bddc 2f9a c930 09b5 5cf9 9b02 R.Q..../0....\..
- 803ad9e: cc59 ddb0 c128 0c22 ae40 93dd e9ab 024e Y...(.".@.....N.
- 803adae: 8ebd 507d 037a 69fd 89f7 fae1 64f4 0453 ..}Pz..i.....dS.
- 803adbe: 308b b900 5376 a6ae 2203 1dc6 4068 0c8f .0..vS..."..h@..
- 803adce: 163b 1ac6 7651 3ae6 1463 02b9 4572 d6ae ;...Qv.:c...rE..
- 803adde: a883 3507 b55b 1034 9aa9 81b6 0625 9ec7 ...5[.4.....%...
- 803adee: 98fb 8a65 015c 22b9 b2d7 ce08 9174 d4c0 ..e.\.."....t...
- 803adfe: c0f3 aa8f b125 67a1 4691 cf25 617f a913 ....%..g.F%..a..
- 803ae0e: 5723 ae40 d5c8 7c66 badf 7668 da25 87be #W@...f|..hv%...
- 803ae1e: 3508 d819 66ed 3ae0 b48b b04c f3b6 9146 .5...f.:..L...F.
- 803ae2e: 202b e457 bf6a 6029 174d b8c0 ae62 ac40 + W.j.)`M...b.@.
- 803ae3e: 9e7e 2f9f d2e0 e5c6 166b 9969 c760 c72e ~../....k.i.`...
- 803ae4e: ae44 5c80 6b91 96d7 b6ba ee31 9d70 8760 D..\.k....1.p.`.
- 803ae5e: 5e21 e463 c80a 7f75 d5ca 3aa6 c5df b125 !^c...u....:..%.
- 803ae6e: 043e 859b 94e8 ae40 5c80 aff7 8b5c 5d92 >.....@..\..\..]
- 803ae7e: 2474 6d52 5ba2 df21 35a6 7221 e405 5c8a t$Rm.[!..5!r...\
- 803ae8e: 3343 6834 f7e0 69b9 d25e 73c2 bbed 5ce6 C34h...i^..s...\
- 803ae9e: 2b91 5720 6ae4 cd13 5aae 7ca5 b447 750b .+ W.j...Z.|G..u
- 803aeae: 64dc c5b0 f393 2b91 5720 aae4 db2b 0ed5 .d.....+ W..+...
- 803aebe: 7503 0573 12f2 a99d 74c8 59d5 dbd0 1f2f .us......t.Y../.
- 803aece: e476 c80a 0015 9000 002b 7200 0005 ae40 v.......+..r..@.
- 803aede: 0000 5c80 0001 2b90 0000 0572 0000 0ae4 ...\...+..r.....
- 803aeee: 8000 015c 9000 002b 2000 0057 e400 000a ..\...+.. W.....
- 803aefe: 5c80 0001 b900 0002 5720 0000 0ae4 0000 .\...... W......
- 803af0e: 15c8 0000 02b9 2000 0057 4000 00ae c800 ....... W..@....
- 803af1e: 0015 b900 0002 7200 0005 ae40 0000 15c8 .......r..@.....
- 803af2e: 0000 2b90 0000 0572 4000 00ae fb00 ae5c ...+..r..@....\.
- 803af3e: f63f 6685 ca79 1883 db0e 3781 001f 6b90 ?..fy......7...k
- 803af4e: b940 75b6 9aff 3f92 cb76 ad45 89c3 d002 @..u...?v.E.....
- 803af5e: b96d 761e eb90 0433 0917 283e 82f8 41e0 m..v..3...>(...A
- 803af6e: 49c1 23c1 7f82 dc13 7822 e087 0d79 f5cb .I.#...."x..y...
- 803af7e: 824d 3af3 d72c 0b97 412e 00ae 2bdb 8bd7 M..:,....A...+..
- 803af8e: 9905 5c85 2e9f 4cb8 9ff0 a582 2706 d704 ...\...L.....'..
- 803af9e: be0b 01bb 1eb9 7c10 7045 60a7 83b7 dd72 .......|Ep.`..r.
- 803afae: dc15 f821 e09a c859 6015 e4fb 103a 213c ..!...Y..`..:.<!
- 803afbe: d478 ae50 2c3f 27f8 a94d 7916 7058 6079 x.P.?,.'M..yXpy`
- 803afce: beb9 7727 077f 283b 37d7 9608 f78a 5722 ..'w..;(.7...."W
- 803afde: ed80 eb92 054b 04c7 854b 5cae 417f 8df0 ....K...K..\.A..
- 803afee: 3082 25bf bcf8 dde0 5f82 5c14 7820 e0b5 .0.%....._.\ x..
- 803affe: e0b0 2a13 5045 ec94 089f 169e ae40 122f ...*EP......@./.
- 803b00e: cf1c cfdd 5557 db24 b915 101e 47fc ae4e ....WU$......GN.
- 803b01e: 098f 40ce 00ae 21db d3d7 5f05 89ca 5755 ...@...!..._..UW
- 803b02e: 03ae 13c1 4905 2ade a738 5446 11cf 255c .....I.*8.FT..\%
- 803b03e: b478 db70 01a3 7ae4 8953 8fc8 4874 57ae x.p....zS...tH.W
- 803b04e: c4e5 e2ba e466 b00a 72f9 76fd dfc1 c415 ....f....r.v....
- 803b05e: 2dfa b90d 88ca bff0 390b 43d4 b206 a17a .-.......9.C..z.
- 803b06e: cbe0 e225 d4bb 5ca3 57cf b4c5 7de2 571c ..%....\.W...}.W
- 803b07e: bf8f b96d 40be bc70 ae44 0b92 2b91 e6c0 ..m..@p.D....+..
- 803b08e: 75ca 7057 4163 92ac 35fb 7ae4 4e6b 3256 .uWpcA...5.zkNV2
- 803b09e: fd7a 0359 9d51 f82e 35d7 d839 0baf ef9e z.Y.Q....59.....
- 803b0ae: ae41 c532 5770 ae45 93f7 901d c7eb 88d7 A.2.pWE.........
- 803b0be: 3255 3c17 b90d 6c02 5ca6 b77f ac44 a0b2 U2.<...l.\..D...
- 803b0ce: 73f5 7235 141d f544 061b 9292 8129 162f .s5r..D.....)./.
- 803b0de: ff6e 42a1 f6de 1e03 fae4 dc96 bef1 7829 n..B..........)x
- 803b0ee: b148 648a aa4f 705c 725b 4f3d 5270 5489 H..dO.\p[r=OpR.T
- 803b0fe: fbfe e290 399b 1ec1 ae42 9b00 5727 72d9 .....9..B...'W.r
- 803b10e: b275 d620 ea93 75e7 088b 32fe ae27 5fbf u. ....u...2'.._
- 803b11e: 885b 6f2a ba89 20b3 ebd6 efd4 277e 33f7 [.*o... ....~'.3
- 803b12e: 8b99 cd3d ae41 12cf 2d7c bc77 723b 3bbf ..=.A...|-w.;r.;
- 803b13e: fb96 5df9 8f06 a7dd 655c d5eb 399d 1e89 ...]....\e...9..
- 803b14e: fdcb 8eee cfdc 13ef 8a9c 015c 4736 17ae ..........\.6G..
- 803b15e: 08a8 18b5 1eb5 58d6 f5a1 155c ae09 f504 .......X..\.....
- 803b16e: 9acb 7a72 e0a6 0573 7eb1 d724 1a77 ba15 ..rz..s..~$.w...
- 803b17e: 2e08 9073 7beb f70b 4eb3 92ae 05a4 1eb9 ..s..{...N......
- 803b18e: a42c d600 55c9 0d72 0572 0cd8 9eb9 72a5 ,....Ur.r......r
- 803b19e: 45aa beb1 7347 ebf9 152f a3f2 d4cf d310 .E..Gs../.......
- 803b1ae: 8229 174f 76a4 fa8b fe79 feef f72c 4ffb ).O..v..y...,..O
- 803b1be: ca58 0cf5 63c1 7206 57bd ba45 c94d 3bf5 X....c.r.WE.M..;
- 803b1ce: 5f05 9035 e3eb b382 2b90 3340 bd72 7f30 ._5......+@3r.0.
- 803b1de: 6ef9 73c0 f704 8894 a8f5 6cc1 7c81 fe43 .n.s.......l.|C.
- 803b1ee: 68df 4948 a646 1637 f684 35d9 7e52 ee5b .hHIF.7....5R~[.
- 803b1fe: fe6f 52d9 7fae 525e aabc ab92 f7e4 941b o..R..^R........
- 803b20e: 91eb e292 9555 255c e453 100a ae56 26df ....U.\%S...V..&
- 803b21e: 46b8 4ab5 171d 639c d620 0453 2f9f eb11 .F.J...c .S../..
- 803b22e: d467 74ef fae5 92e1 697c 4715 220b dbfb g..t....|i.G."..
- 803b23e: 268a 0bfe 510b a9b1 7f5c 4d6a 4067 5c9d .&...Q..\.jMg@.\
- 803b24e: 531f 6f11 b968 48be a8f0 5c85 0325 0ae4 .S.oh..H...\%...
- 803b25e: 4e10 b7ae c417 45f8 5c25 b91d 2d1e ab11 .N.....E%\...-..
- 803b26e: 6fec 603d 1538 7f2b 7ee9 8d75 ae90 482e .o=`8.+..~u....H
- 803b27e: 1fec b754 bac0 7fbf e169 4def 2ae4 530b ..T.....i..M.*.S
- 803b28e: 4b73 4ab9 d53e 5c80 b93f 9c46 723a 5bbd sK.J>..\?.F.:r.[
- 803b29e: 0a70 0572 2308 a4d7 9044 ac7f d621 9577 p.r..#..D...!.w.
- 803b2ae: eedc 6a4b 9665 c8e9 7cc1 7ae4 8543 de8c ..Kje....|.zC...
- 803b2be: 905d 3dd7 bfaa 4ab5 7160 e661 8980 0f5c ]..=...J`qa...\.
- 803b2ce: f455 eab4 75c8 eea9 943f 2f5c b5c8 d95e U....u..?.\/..^.
- 803b2de: 55c8 1872 02b9 9184 6cab fffa 495c d4fb .Ur......l..\I..
- 803b2ee: 2a6b 7924 e091 92c9 0245 5967 73ce e7cd k*$y....E.gY.s..
- 803b2fe: 6f5c 235b b7a2 a417 eff5 456a 9d56 df20 \o[#......jEV. .
- 803b30e: 996a 3d73 7055 079f ceb9 8a4b 3e6c 2ae4 j.s=Up....K.l>.*
- 803b31e: 0317 55dc 4d21 b95d 2fde 9088 402b 8298 ...U!M]../..+@..
- 803b32e: 19d6 8782 b20b 4fbc 3df0 c31a 9658 572a .......O.=..X.*W
- 803b33e: ae7b b0c3 7cec c0b7 3531 35bf a12f 8583 {....|..15.5/...
- 803b34e: a725 0472 59e1 c59a 8fa8 6ee5 9377 5c81 %.r..Y.....nw..\
- 803b35e: a9af bc99 2ba5 65d7 12e5 7b5e 26b9 c215 .....+.e..^{.&..
- 803b36e: 9134 e4ab e45a 100a 5bae 6de0 9725 b7f9 4...Z....[.m%...
- 803b37e: c8a9 f576 cf37 7c13 f0a5 4f37 48aa 65d6 ..v.7..|..7O.H.e
- 803b38e: 8227 3eaa d7d7 9e0a fdcc 01ee 4795 6dd5 '..>.........G.m
- 803b39e: fffc 45ba eb9f 0bf7 f71e d728 52ff b091 ...E......(..R..
- 803b3ae: b92f 5b3e af70 b947 109e 04bc 02b9 9184 /.>[p.G.........
- 803b3be: 94ab 5fe8 0897 a476 7f7e 64a0 cb18 1653 ..._..v.~..d..S.
- 803b3ce: 3809 f36c b652 eb42 8555 5909 6252 1ae7 .8l.R.B.U..YRb..
- 803b3de: fe34 5717 3d68 5357 53ae 998d 26b1 9572 4..Wh=WS.S...&r.
- 803b3ee: a1fc b947 5d5e 4b23 b953 6e4a ae45 e100 ..G.^]#KS.JnE...
- 803b3fe: 1116 5f3c 50f0 9e41 0b8f 447e 5370 5889 ..<_.PA...~DpS.X
- 803b40e: f3af 87b8 a0d6 3664 f1c0 d4c2 9fa9 1036 ......d6......6.
- 803b41e: 4beb ab0a 74b3 0b67 4abc 2073 a9b7 1f5c .K...tg..Js ..\.
- 803b42e: 1157 abb1 cf5c f350 7d59 55cb 6af2 0ae4 W...\.P.Y}.U.j..
- 803b43e: 6e10 d685 4b1b fa24 4988 ab2f 06c3 7f85 .n...K$..I/.....
- 803b44e: 46b5 324c fd7a 0379 cab1 b4bd a5fe dfd0 .FL2z.y.........
- 803b45e: 02fa b90d c2ca ddd3 729a e995 9b89 2715 .........r.....'
- 803b46e: 6f34 69f3 720f 94fd 28a6 a84f ae19 0792 4o.i.r...(O.....
- 803b47e: 6f34 8f73 e9e0 15c8 dc20 d7f2 28b2 cf35 4os..... ....(5.
- 803b48e: aabc d597 ae41 2e2f 73cc ed5d f040 0306 ....A./..s].@...
- 803b49e: feb1 daa0 70b4 9a59 ad6b eb96 cb61 656d .....pY.k...a.me
- 803b4ae: f84c 0719 c6b9 929a e174 c89d 2015 5c9c L.......t.... .\
- 803b4be: 134f 797c 588d 4165 85eb b701 2ed6 89db O.|y.XeA........
- 803b4ce: e640 cf40 28d6 fd5e c39e 044e c872 fdcb @.@..(^...N.r...
- 803b4de: 9206 57bc e4f5 50de 78f2 b8ab 6d5b 68bc ...W...P.x..[m.h
- 803b4ee: d72a d453 563c 495d 213e 41b8 af71 edc1 *.S.<V]I>!.Aq...
- 803b4fe: 141e 177c 0572 3708 65b8 3250 f03e d511 ..|.r..7.eP2>...
- 803b50e: b58a 5013 abae b43d 978e b044 0bb7 54ae ...P..=...D....T
- 803b51e: 3fbf ed5f 25a5 cda3 af8f 7bc9 6f5e 87b0 .?_..%.....{^o..
- 803b52e: b5d6 1186 69a8 35ce 61cf b90b 321e 408c .....i.5.a...2.@
- 803b53e: 726d 2bae 43ae 00ae a761 bd62 b6cf cae5 mr.+.C..a.b.....
- 803b54e: ae51 be92 eec3 8faf ee18 fafe 0603 d379 Q.............y.
- 803b55e: dcfc 33d6 0f15 de1b 01f6 2915 caeb 54f5 ...3.......)...T
- 803b56e: ecd5 226f 87c8 6705 ee2a bc32 1cad 7dae ..o"...g*.2....}
- 803b57e: 720e 0805 5727 6339 1fe0 5c95 f0af 9e31 .r..'W9c...\..1.
- 803b58e: 40d0 3bae f2ea f2f9 90c2 2aea a84e f568 .@.;.......*N.h.
- 803b59e: ed74 fd35 dd4f a65e c629 7206 a3fd 7206 t.5.O.^.)..r...r
- 803b5ae: 45ad 8b3e 015c cec2 7d73 bad9 81f1 c80d .E>.\...s}......
- 803b5be: 3f35 fb14 9522 94df 5a83 541e fa82 5a86 5?.."....Z.T...Z
- 803b5ce: fb06 8217 a877 012e 21b3 76d5 bfbb c3fa ....w....!.v....
- 803b5de: b0df 60ec a270 9800 3ff3 637f aecb 24e6 ...`p....?.c...$
- 803b5ee: 24ed 0000 0000 4549 444e 42ae 8260 .$....IEND.B`.
- 0803b5fc <data__role_js>:
- 803b5fc: 722f 6c6f 2e65 736a 0000 0000 5448 5054 /role.js....HTTP
- 803b60c: 312f 312e 3220 3030 4f20 0d4b 530a 7265 /1.1 200 OK..Ser
- 803b61c: 6576 3a72 6c20 4977 2f50 2e31 2e33 2031 ver: lwIP/1.3.1
- 803b62c: 6828 7474 3a70 2f2f 6173 6176 6e6e 6861 (http://savannah
- 803b63c: 6e2e 6e6f 6e67 2e75 726f 2f67 7270 6a6f .nongnu.org/proj
- 803b64c: 6365 7374 6c2f 6977 2970 0a0d 6f43 746e ects/lwip)..Cont
- 803b65c: 6e65 2d74 654c 676e 6874 203a 3332 3934 ent-Length: 2349
- 803b66c: 0a0d 6f43 6e6e 6365 6974 6e6f 203a 6c43 ..Connection: Cl
- 803b67c: 736f 0d65 430a 6e6f 6574 746e 742d 7079 ose..Content-typ
- 803b68c: 3a65 6120 7070 696c 6163 6974 6e6f 782f e: application/x
- 803b69c: 6a2d 7661 7361 7263 7069 0d74 430a 6e6f -javascript..Con
- 803b6ac: 6574 746e 452d 636e 646f 6e69 3a67 6720 tent-Encoding: g
- 803b6bc: 697a 0d70 430a 6361 6568 432d 6e6f 7274 zip..Cache-Contr
- 803b6cc: 6c6f 203a 7270 7669 7461 2c65 6d20 7861 ol: private, max
- 803b6dc: 612d 6567 383d 3436 3030 0a0d 0a0d 8b1f -age=86400......
- 803b6ec: 0008 0000 0000 0a04 58b5 8eef c6db 7f11 .........X......
- 803b6fc: de15 b8c6 2d23 2d1e a939 8b0b 13c7 677c ....#-.-9.....|g
- 803b70c: 7637 b3e0 9c83 a68a 1838 72c6 2577 47d1 7v......8..rw%.G
- 803b71c: 5971 a972 7ab3 a027 d035 2d4f b410 8a9f qYr..z'.5.O-....
- 803b72c: 687e 37d0 8b48 0818 26d0 a0cf a37b 76fe ~h.7H....&..{..v
- 803b73c: 8a49 ce94 8db2 8502 44ed 9ddc 9d99 3f9d I........D.....?
- 803b74c: 99bf 51d9 3091 c915 62c4 a099 9c4a e116 ...Q.0...b..J...
- 803b75c: 3a33 c68b af54 ced9 8ce5 1666 b80d c564 3:..T.....f...d.
- 803b76c: 2454 2bca 1e89 42c5 d97f 4784 e233 d4f8 T$.+...B...G3...
- 803b77c: 3163 f3cd 7467 022a 1792 4261 c467 8cd7 c1..gt*...aBg...
- 803b78c: 56e1 22c6 5f06 e6d8 9303 7f85 cd21 35f6 .V."._......!..5
- 803b79c: 4bbf 9a3d 22a6 c7e1 2893 76e6 18e8 2c81 .K=.."...(.v...,
- 803b7ac: db38 4aa6 111c 7dc7 e6df 9f0b 759d 785f 8..J...}.....u_x
- 803b7bc: 9251 ec88 f0f1 69e4 77b0 ad40 2649 0146 Q......i.w@.I&F.
- 803b7cc: 4499 92b9 dcd9 a89b 4c69 970e 58ff b4fe .D......iL...X..
- 803b7dc: e7fc 1ff5 dfaf 7f2c feb8 5ac6 0dfe 3f9f ......,....Z...?
- 803b7ec: bf5e feb9 fe1d 6fff 79fc 5f8b 1ddf a1dc ^......o.y._....
- 803b7fc: 7b87 3b2e bdeb 625b e691 6f2f bd4a 3dfe .{.;..[b../oJ..=
- 803b80c: fe64 fd74 f2cd e5c7 cb0f d6b7 aff2 3fcb d.t............?
- 803b81c: bf2f 252d 3b91 e46b 7041 2511 5e5c b178 /.-%.;k.Ap.%\^x.
- 803b82c: c664 5e15 d54a 8124 0785 16e6 832d b853 d..^J.$.....-.S.
- 803b83c: 266f 9f48 b9dc e871 2976 bbbb d1b6 a6fd o&H...q.v)......
- 803b84c: c71c d70d af2c bb8f d6b9 dac3 bb2d f672 ....,.......-.r.
- 803b85c: 3888 2c6b 59d4 ea8c baa8 5365 32e7 aa13 .8k,.Y....eS.2..
- 803b86c: 12c8 e56b b19d 5550 1d08 9fcd 5070 f434 ..k...PU....pP4.
- 803b87c: 170c 8f3e 4892 3e69 0b16 3d9a 9449 66c8 ..>..Hi>...=I..f
- 803b88c: b634 3455 b215 8e50 0acb 6bb8 ac7a 4129 4.U4..P....kz.)A
- 803b89c: 56e5 41eb d42e b68a e245 c4f6 ada7 6203 .V.A....E......b
- 803b8ac: 7e39 285e 7644 54a5 292c faff e9e4 c943 9~^(Dv.T,)....C.
- 803b8bc: 826c 1c3d b1e0 3471 9d20 1813 cbdc bc28 l.=...q4 .....(.
- 803b8cc: b530 971d fe7c 4868 fadc 605a 22e7 4a16 0...|.hH..Z`.".J
- 803b8dc: 4b1c 1e79 9b09 3264 3a16 d6fe 2316 a58e .Ky...d2.:...#..
- 803b8ec: 3f4d 1196 0777 4547 1949 0b70 ddc7 35e9 M?..w.GEI.p....5
- 803b8fc: 6816 4429 d0dd 2e65 b32f f850 0ea2 e80a .h)D..e./.P.....
- 803b90c: 58fb f4a9 f12b 429b 6ae4 8890 6b0b a97d .X..+..B.j...k}.
- 803b91c: 97af 93aa 981f f8f8 79fa 4af8 a430 49ec .........y.J0..I
- 803b92c: 32c4 cb99 f291 cb34 f870 7425 9e14 aa44 .2....4.p.%t..D.
- 803b93c: a1d9 dd4b ae9d 84fe 2b29 8fe1 e505 b322 ..K.....)+....".
- 803b94c: b1c9 1b84 b512 9c3f 82a7 04b8 19b9 6547 ......?.......Ge
- 803b95c: de64 9579 04cb acd9 7e13 43e4 0254 e120 d.y......~.CT. .
- 803b96c: 5cf3 4d01 84d8 6326 b411 f6cc 1059 cf08 .\.M..&c....Y...
- 803b97c: 9c10 026a e1c4 0b08 b89a ddc8 ddbb 106e ..j...........n.
- 803b98c: 068c 7a76 9fc1 c7e4 cb32 b1a0 cf21 9953 ..vz....2...!.S.
- 803b99c: 62e4 5e28 972b c2d4 1048 2828 4723 db16 .b(^+...H.((#G..
- 803b9ac: 65dd 003a b9e3 1c2d cfa7 0b40 2077 c675 .e:...-...@.w u.
- 803b9bc: 7936 6594 2332 b38e b730 b84a 5bcd 40b1 6y.e2#..0.J..[.@
- 803b9cc: 3f39 9995 b509 cc91 0dec 6ac8 34a2 9a3f 9?.........j.4?.
- 803b9dc: d71f 8708 07a0 0d0b bf8d d059 d9f5 e841 ..........Y...A.
- 803b9ec: 22c5 ab19 cf89 1d3a 3c27 2f63 083c 347e ."....:.'<c/<.~4
- 803b9fc: b983 029e 0458 c6f0 0c26 3ae6 0b5f f2a0 ....X...&..:_...
- 803ba0c: 8534 f7b4 d270 a503 28b2 142c 4962 87cb 4...p....(,.bI..
- 803ba1c: 5853 8ef0 1e3d 9b69 9a00 f061 22fc 6c52 SX..=.i...a.."Rl
- 803ba2c: f262 e684 d082 6698 9cd3 b5f4 1e5c 70ac b......f....\..p
- 803ba3c: 4263 89f3 c397 f05b 27fd 01c4 f960 38fa cB....[..'..`..8
- 803ba4c: 6c43 1d73 0060 3862 dce4 5a67 cf0a 51e6 Cls.`.b8..gZ...Q
- 803ba5c: 1692 820a f640 9b30 313f 885f 758d 4cba ....@.0.?1_..u.L
- 803ba6c: 34c4 892a 32be 0d3f a2c5 0417 606c 46f4 .4*..2?.....l`.F
- 803ba7c: b508 d4ee ede8 fd92 711e 1ffa 01a0 a2c9 .........q......
- 803ba8c: 28e5 52a8 1a65 c150 ce18 7e65 babb 3498 .(.Re.P...e~...4
- 803ba9c: c984 fac2 beaa 0b05 4ed5 70e5 3f13 b560 .........N.p.?`.
- 803baac: 389b 64dc 88a4 9d80 17f1 4b35 8e00 6468 .8.d......5K..hd
- 803babc: 000b 105e a750 87c2 1122 a339 c0a9 403a ..^.P...".9...:@
- 803bacc: 516f 12ae e4d2 2e2b eb5a ac66 2469 80f3 oQ....+.Z.f.i$..
- 803badc: 4876 3a40 6f15 2468 c3b3 7d6e ceae 87cf vH@:.oh$..n}....
- 803baec: 7f88 0be4 87f8 3640 e85b 3030 9cbf a7ce ......@6[.00....
- 803bafc: baf7 dbdd b6ec 2e46 0797 43bc 4b7c 4ebc ......F....C|K.N
- 803bb0c: fbe1 cb5c 94f4 fcfc 7864 808a c649 b3b6 ..\.....dx..I...
- 803bb1c: c158 332a 0856 a378 1adb c11e 9b74 5aa4 X.*3V.x.....t..Z
- 803bb2c: 46c9 70f4 b852 b756 7d67 1341 77ab e7ff .F.pR.V.g}A..w..
- 803bb3c: ab5d eddb bfeb 0b3d f9c7 2bad d143 4e2f ].....=....+C./N
- 803bb4c: 3f9f 0db3 953e e257 ff3e a13f 0193 3416 .?..>.W.>.?....4
- 803bb5c: 4016 a465 ad3c e5bd e8a1 32a4 9db5 2e01 .@e.<......2....
- 803bb6c: 2031 fc7d 9777 bcf8 b244 ad12 8745 84bc 1 }.w...D...E...
- 803bb7c: ecbd d8da 634e 8361 2073 2f7e e956 a340 ....Nca.s ~/V.@.
- 803bb8c: f0ae 5981 1d7c d0b3 ad11 1661 d81d d022 ...Y|.....a...".
- 803bb9c: 4126 ce99 6172 f26b b306 3e50 604b ae42 &A..rak...P>K`B.
- 803bbac: 8802 8ac0 06be ab8e cc91 1362 cec1 499f ..........b....I
- 803bbbc: 8d15 a8e6 442c 8565 55c0 a09b 8927 0850 ....,De..U..'.P.
- 803bbcc: 0513 e77f 4b2f 454c 1969 c818 597b a06f ..../KLEi...{Yo.
- 803bbdc: 41b3 3b8e 8dfd 1455 2854 0284 5bd6 c917 .A.;..U.T(...[..
- 803bbec: 2cc5 6262 945f 38f8 3f28 9a5f 5acf dad2 .,bb_..8(?_..Z..
- 803bbfc: 255a 51a7 ea1a 497d 3a33 51d5 5ce0 6056 Z%.Q..}I3:.Q.\V`
- 803bc0c: 5f84 461a 6eac 4abf ea94 da2e c96f 3534 ._.F.n.J....o.45
- 803bc1c: 6318 def5 39b1 cbcd bbbd f737 94c4 f146 .c...9....7...F.
- 803bc2c: 39a2 0b98 4d16 3c69 4794 4251 b9b3 c006 .9...Mi<.GQB....
- 803bc3c: 30f2 1e9b 221e 90c5 551e dc6e d96d 3438 .0..."...Un.m.84
- 803bc4c: 43c4 b0f9 6ee4 2cb8 32e3 0e74 48b8 819b .C...n.,.2t..H..
- 803bc5c: fa85 bd04 4b8a 50e9 8160 666e e33c c12c .....K.P`.nf<.,.
- 803bc6c: bd07 d77e 30af 1d82 841c 7e8d cb34 dce8 ..~..0.....~4...
- 803bc7c: 9ef0 5cd0 2877 3b86 6a0c 8481 5d85 a1d2 ...\w(.;.j...]..
- 803bc8c: 2a2e 6b2d f62f 62f4 a9cf 6e85 bc2a ed79 .*-k/..b...n*.y.
- 803bc9c: 8af0 9a21 3156 c264 2aa7 47c9 75f2 b6a9 ..!.V1d..*.G.u..
- 803bcac: d941 6008 9ae4 325f a5d5 0f23 41c2 bfd8 A..`.._2..#..A..
- 803bcbc: b85c 2a64 9cf2 058e 1289 bdab 757f b765 \.d*.........ue.
- 803bccc: bd3f 2c8a 1b20 f467 c7ad 8e22 f5a5 992b ?.., .g..."...+.
- 803bcdc: 7cc5 2507 848b 2663 d463 0fdb ac08 02c8 .|.%..c&c.......
- 803bcec: 49f2 7bb7 feff 7bbd 559a b8a1 147f 8af3 .I.{...{.U......
- 803bcfc: ec10 11a3 4f7a e497 7913 a1f1 3533 a04d ....zO...y..35M.
- 803bd0c: 1bbb 6452 87f1 4188 ec12 9cf4 2b45 cb05 ..Rd...A....E+..
- 803bd1c: ef0e aaea a4b5 bbfb 2bab eed2 b6e5 dc77 .........+....w.
- 803bd2c: ea30 5b87 c741 a07d c783 334b a4a9 6eee 0..[A.}...K3...n
- 803bd3c: 8a90 bc5c 3e7e f702 9d96 8ea0 d280 61e3 ..\.~>.........a
- 803bd4c: 5e10 755d 9557 6aaf ea22 e4fe f430 4b9d .^]uW..j"...0..K
- 803bd5c: 38d4 deed 10b3 ae65 73a9 dfa1 84e9 7955 .8....e..s....Uy
- 803bd6c: efdb ca2d ae7e ad6a 1ddb 7377 739e 1f59 ..-.~.j...ws.sY.
- 803bd7c: d16d 9d26 5eec 90f7 480e 0317 7109 b43a m.&..^...H...q:.
- 803bd8c: d009 4310 dd5c 5374 d43b ac58 a02b 38ed ...C\.tS;.X.+..8
- 803bd9c: e21d f421 a5cb f413 1399 e9db caf4 4355 ..!...........UC
- 803bdac: 8bf6 8e22 8d7f 0049 c4cb 515a 963e 9645 .."...I...ZQ>.E.
- 803bdbc: ee1b 6afe 24ed d04a 6d42 9eae b40a 5c84 ...j.$J.Bm.....\
- 803bdcc: 2eaf 1e4c 19d7 ab56 a75f 7728 5045 0ad7 ..L...V._.(wEP..
- 803bddc: a29f 5d35 4b95 dae8 581e cdd0 f661 e508 ..5].K...X..a...
- 803bdec: d46b 5ca0 d1cd ca6b b294 cd48 a003 0a2c k..\..k...H...,.
- 803bdfc: 2d76 a804 d06f 2cbe a8eb b7e6 ac1b 3a71 v-..o..,......q:
- 803be0c: c4f7 b767 5d79 7e92 132b 7cf1 0234 4398 ..g.y].~+..|4..C
- 803be1c: e04d d882 68e7 5bc4 f692 6b59 ddbc cfae M....h.[..Yk....
- 803be2c: 6a47 4cdd a6c1 2d34 b616 57e3 29e1 3d13 Gj.L..4-...W.).=
- 803be3c: b481 8cdd 5980 f20b ed9d be51 0bbb 63cf .....Y....Q....c
- 803be4c: 95bf b425 1350 e034 0406 2f5b 9b09 d057 ..%.P.4...[/..W.
- 803be5c: 3f43 e50a 17d6 3303 b3df dbad cd14 f31b C?.....3........
- 803be6c: e1ca 15ea d19d 659c aa51 33fa 7119 ebbb .......eQ..3.q..
- 803be7c: c4f8 ad65 9fc9 ff2c f182 0ffe e798 b7bf ..e...,.........
- 803be8c: d26c 2969 e85b 1b11 4b71 cd1c 1321 b6d3 l.i)[...qK..!...
- 803be9c: 99a3 33d6 0623 4063 3569 1224 b57c e786 ...3#.c@i5$.|...
- 803beac: 7272 8bd4 bf28 57ab b80b f36c 6319 70b1 rr..(..W..l..c.p
- 803bebc: 5037 2d74 23d9 61b5 9df8 255b 4716 d9dc 7Pt-.#.a..[%.G..
- 803becc: 5ddd 6543 680d ac37 e5ba 067d 1b7a 88de .]Ce.h7...}.z...
- 803bedc: a143 da96 e989 f639 2475 a363 e50c b290 C.....9.u$c.....
- 803beec: 71f3 0b26 bd3c 2c68 192f caab 55e1 bdc8 .q&.<.h,/....U..
- 803befc: 3622 bd88 b24e 67c2 b8d3 776d 5a68 dbb6 "6..N..g..mwhZ..
- 803bf0c: a7a1 aa19 72f1 525d 7755 d86e ad70 7998 .....r]RUwn.p..y
- 803bf1c: eac0 3eba f2af c375 980c 94ab 9919 fb58 ...>..u.......X.
- 803bf2c: a1f2 2c4a dbfc 7ae7 cd46 a3f6 2664 2532 ..J,...zF...d&2%
- 803bf3c: 76b8 5b7c b225 56fc 0a07 6e5e 65fe 7e9e .v|[%..V..^n.e.~
- 803bf4c: c7be d0ab eb9b 693f 6432 6b6b a9c6 05a2 ......?i2dkk....
- 803bf5c: 71d3 846b 23df 359d 41af 0edb 73d9 f0f7 .qk..#.5.A...s..
- 803bf6c: b09c 5ae7 ca45 8101 6a29 83b0 5fe0 158f ...ZE...)j..._..
- 803bf7c: 2ce6 a42a ba06 ba98 31ed 309a 1f11 db99 .,*......1.0....
- 803bf8c: 7794 70c6 e5b0 6e69 6775 aefe 5f3b 2cd0 .w.p..inug..;_.,
- 803bf9c: 3741 bad9 6eb4 3568 4d92 8669 8997 62a7 A7...nh5.Mi....b
- 803bfac: 02a4 b3f2 7114 37c1 f1ac 5877 3fe2 b7cb .....q.7..wX.?..
- 803bfbc: c378 4efa fe6f 360f af28 cbf1 b68f 4604 x..No..6(......F
- 803bfcc: d5f6 432d e7c9 e4c8 ae1c 123a ef98 ca04 ..-C......:.....
- 803bfdc: fade d326 860f 24cf b917 b979 e11a e2fd ..&....$..y.....
- 803bfec: 6249 6937 bce4 0537 9b4d 91bb 2d83 0ade Ib7i..7.M....-..
- 803bffc: 9ac5 7f15 f0fd 4c4c 4ce5 6f94 7896 5ad6 ......LL.L.o.x.Z
- 803c00c: fff8 8b05 d809 5f38 0015 2f00 ......8_...
- 0803c017 <data__login_html>:
- 803c017: 6c2f 676f 6e69 682e 6d74 006c 5448 5054 /login.html.HTTP
- 803c027: 312f 312e 3220 3030 4f20 0d4b 530a 7265 /1.1 200 OK..Ser
- 803c037: 6576 3a72 6c20 4977 2f50 2e31 2e33 2031 ver: lwIP/1.3.1
- 803c047: 6828 7474 3a70 2f2f 6173 6176 6e6e 6861 (http://savannah
- 803c057: 6e2e 6e6f 6e67 2e75 726f 2f67 7270 6a6f .nongnu.org/proj
- 803c067: 6365 7374 6c2f 6977 2970 0a0d 6f43 746e ects/lwip)..Cont
- 803c077: 6e65 2d74 654c 676e 6874 203a 3835 0d37 ent-Length: 587.
- 803c087: 430a 6e6f 656e 7463 6f69 3a6e 4320 6f6c .Connection: Clo
- 803c097: 6573 0a0d 6f43 746e 6e65 2d74 7974 6570 se..Content-type
- 803c0a7: 203a 6574 7478 682f 6d74 0d6c 430a 6e6f : text/html..Con
- 803c0b7: 6574 746e 452d 636e 646f 6e69 3a67 6720 tent-Encoding: g
- 803c0c7: 697a 0d70 0d0a 1f0a 088b 0000 0000 0400 zip.............
- 803c0d7: 7d0a cd54 d46e 1030 157e 2463 754e 7bb7 .}T.n.0.~.c$Nu.{
- 803c0e7: a841 91c4 e950 1381 401c a382 cc93 5c6e A...P....@....n\
- 803c0f7: db1c 93d8 eeec e2ad 09c0 c409 2415 015e .............$^.
- 803c107: 03d1 8845 433e 8df6 2718 6ddb a423 e21e ..E.>C...'.m#...
- 803c117: d8f5 e333 67ef d9b4 a7bd 4fcf be5e 7179 ..3..g.....O^.yq
- 803c127: 6aca 4c6c a59e 1995 9765 7392 408a 7955 .jlL....e..s.@Uy
- 803c137: 00d6 562a 2ad6 4044 5bc9 885c 7447 9c37 ..*V.*D@.[\.Gt7.
- 803c147: 88d6 c05e 56bb 9277 16bf 9eaf 1388 78d7 ..^..Vw........x
- 803c157: ba85 c030 e959 822c 92a5 a767 aa12 5c25 ..0.Y.,...g...%\
- 803c167: 5917 80d5 9de4 9586 0177 e56f 74ad b585 .Y......w.o..t..
- 803c177: a0ac 25d3 2188 d038 a356 4656 52c4 9019 ...%.!8.V.VF.R..
- 803c187: 83f3 ad46 d375 fb36 8db8 8610 d140 f293 ..F.u.6.....@...
- 803c197: 9e88 8d40 f206 5bfe d57f edff b72f fbef ..@....[..../...
- 803c1a7: edab 7f79 fb49 6c8b de36 4665 b7db 0eac ..y.I..l6.eF....
- 803c1b7: 90b0 51bc 1eda 3196 1672 48c0 711e 2063 ...Q...1r..H.qc
- 803c1c7: 00d6 9d48 1962 47b4 1b86 704f d611 3b38 ..H.b..G..Op..8;
- 803c1d7: 9d53 4f1a 8b39 94a1 383c 8703 9167 6792 S..O9...<8..g..g
- 803c1e7: 39e3 466d 0ad1 6d57 acf2 1dd2 8d2b 518a .9mF..Wm....+..Q
- 803c1f7: ab72 42ba 3605 88fe 160a 35aa 1d78 f42e r..B.6.....5x...
- 803c207: 2a1a ce81 a753 6aff ea44 6108 cabc b533 .*..S..jD..a..3.
- 803c217: 7e83 949f 5b1b b71b 0974 a282 aa8f eba7 .~...[..t.......
- 803c227: 76ad a0ab a7bc 4c46 9257 dcef baa1 9e7a .v....FLW.....z.
- 803c237: 9ff7 9ffb a97b f57e b63f 481f 4fba 65c4 ....{.~.?..H.O.e
- 803c247: c13e 95e3 c305 f586 c19a f014 9578 d3b8 >...........x...
- 803c257: c2f9 8685 12a9 b3b5 1392 a4c6 52f4 4673 .............RsF
- 803c267: 5393 423b 5de0 ee4c 39ef 2b68 0952 1a55 .S;B.]L..9h+R.U.
- 803c277: d055 143b eaec de78 257f 2f3f 8f92 0fc7 U.;...x..%?/....
- 803c287: 116c e3fd 366c e524 b699 bdbe d26d 63be l...l6$.....m..c
- 803c297: 25ea 4b12 8932 d093 e869 1406 ff23 96dd .%.K2...i...#...
- 803c2a7: ca06 5d80 dcd2 f9f1 7243 0d35 1a40 408b ...]....Cr5.@..@
- 803c2b7: 4570 cbd0 8f1a fcd9 afc8 a8a7 593c a04a pE..........<YJ.
- 803c2c7: 93be e752 ec04 f6cf 5de3 52b0 caf6 ea85 ..R......].R....
- 803c2d7: 684e 4937 9dc9 01e1 0536 b397 d909 16d8 Nh7I....6.......
- 803c2e7: be8d b011 cb40 13e8 683e bf42 ace1 a653 ....@...>hB...S.
- 803c2f7: 2a25 17fd f802 cc9b 24bd b30a ca24 3e74 %*.......$..$.t>
- 803c307: 1376 ce33 6ceb 17f8 07f8 a233 8ac5 0415 v.3..l....3.....
- 803c317: 0000 ..
- 0803c319 <Content_Length>:
- 803c319: 6f43 746e 6e65 2d74 654c 676e 6874 203a Content-Length:
- 803c329: 0000 5000 ...
- 0803c32c <file__rotek_png>:
- 803c32c: 4c50 0804 9dee 0803 9dfa 0803 1802 0000 PL..............
- 803c33c: 0001 0000 ....
- 0803c340 <file__index_html>:
- 803c340: 4c3c 0804 c368 0803 c374 0803 04e3 0000 <L..h...t.......
- 803c350: 0001 0000 ....
- 0803c354 <file__main_js>:
- 803c354: 4680 0804 1204 0804 1210 0804 2a56 0000 .F..........V*..
- 803c364: 0001 0000 ....
- 0803c368 <data__index_html>:
- 803c368: 692f 646e 7865 682e 6d74 006c 5448 5054 /index.html.HTTP
- 803c378: 312f 312e 3220 3030 4f20 0d4b 530a 7265 /1.1 200 OK..Ser
- 803c388: 6576 3a72 6c20 4977 2f50 2e31 2e33 2031 ver: lwIP/1.3.1
- 803c398: 6828 7474 3a70 2f2f 6173 6176 6e6e 6861 (http://savannah
- 803c3a8: 6e2e 6e6f 6e67 2e75 726f 2f67 7270 6a6f .nongnu.org/proj
- 803c3b8: 6365 7374 6c2f 6977 2970 0a0d 6f43 746e ects/lwip)..Cont
- 803c3c8: 6e65 2d74 654c 676e 6874 203a 3031 3937 ent-Length: 1079
- 803c3d8: 0a0d 6f43 6e6e 6365 6974 6e6f 203a 6c43 ..Connection: Cl
- 803c3e8: 736f 0d65 430a 6e6f 6574 746e 742d 7079 ose..Content-typ
- 803c3f8: 3a65 7420 7865 2f74 7468 6c6d 0a0d 6f43 e: text/html..Co
- 803c408: 746e 6e65 2d74 6e45 6f63 6964 676e 203a ntent-Encoding:
- 803c418: 7a67 7069 0a0d 0a0d 8b1f 0008 0000 0000 gzip............
- 803c428: 0a04 56bd 6f5d 44e3 fd14 832b 6979 baa5 ...V]o.D..+.yi..
- 803c438: fba1 2084 54b6 8bba 4fb4 10ac f620 9a29 ... .T...O.. .).
- 803c448: 93d8 1678 ed7f 9278 6fb4 60fd 5161 8291 ..x...x..o.`aQ..
- 803c458: a010 e17d 17f3 8174 9a40 dda6 30bf 47fe ..}...t.@....0.G
- 803c468: 3b9c bb8e 3521 5961 7d89 93b0 e7b1 7bde .;..!5aY.}.....{
- 803c478: b9ee 5ee7 fb4f dbb5 edef 707d deff 161d ...^O.....}p....
- 803c488: 24e9 dbf6 6774 4f31 9efb 60e3 7825 b7e8 .$..tg1O...`%x..
- 803c498: a113 0b39 ae22 a10a 673d 7ba0 9bee 6778 ..9."...=g.{..xg
- 803c4a8: 469f e75a 78ae 9038 cf43 d8f9 70fd ddd7 .FZ..x8.C....p..
- 803c4b8: 92cb 6b9c 8dd9 c385 2c82 22d5 c985 3bdd ...k.....,."...;
- 803c4c8: 089e a2fb 4a36 2279 673c c528 cf28 5e94 ....6Jy"<g(.(..^
- 803c4d8: 37da a192 bc8e 0c50 2065 bb5c 92d8 d4a9 .7....P.e \.....
- 803c4e8: c792 116e 58f0 3b78 095b 97df 20c9 5eb9 ..n..Xx;[.... .^
- 803c4f8: 0a0f eca1 2382 f7a4 4206 a968 e163 1f9b .....#...Bh.c...
- 803c508: 59cd 6879 ccce 4cdc e3ca b0f2 6d3c aab7 .Yyh...L....<m..
- 803c518: ed37 a658 b09f 8948 e79e 5c24 dba6 5141 7.X...H...$\..AQ
- 803c528: 4c38 d889 0a73 107d 228b 4212 4fc3 2811 8L..s.}..".B.O.(
- 803c538: 6b99 0fa6 8072 62d5 b75f f01e af21 3a9e .k..r..b_...!..:
- 803c548: 50ac e781 2ca8 db16 0a0f 6e6c cf55 a7f1 .P...,....lnU...
- 803c558: aca2 859b 7e07 943b 1643 bcc4 3c28 e527 .....~;.C...(<'.
- 803c568: 2ec3 ac57 71fa d143 83e3 d758 9ecb 17dc ..W..qC...X.....
- 803c578: aba1 1cb3 6e9e b8d8 51e4 eaa8 df95 0be6 .....n...Q......
- 803c588: 32e8 c50d 36fe 0b95 5604 e231 9fac 1611 .2...6...V1.....
- 803c598: 0b8e ea6e 6d7b baf1 64c3 9c88 3a45 2570 ..n.{m...d..E:p%
- 803c5a8: b36a 3ad8 6b88 807b 11ab 6fe1 9bb5 f8fe j..:.k{....o....
- 803c5b8: 6ca0 606d 681e 4439 9b79 2748 6430 ecbe .lm`.h9Dy.H'0d..
- 803c5c8: 3a02 32d2 17ed 7c15 7cdf 5a8f 511d cc95 .:.2...|.|.Z.Q..
- 803c5d8: 3995 3337 ad33 5872 9335 2f69 4dab 989e .9733.rX5.i/.M..
- 803c5e8: f2cb 7353 9305 8c39 333f 72d3 6cdc c914 ..Ss..9.?3.r.l..
- 803c5f8: 6742 a0ea fbb6 3cae cd81 8425 f171 7f7c Bg.....<..%.q.|.
- 803c608: 006b 57e5 2d94 3fd1 3c52 41cf 65bc a16d k..W.-.?R<.A.em.
- 803c618: 7065 ed11 e634 c789 b5cb 79cb 622a ef66 ep..4......y*bf.
- 803c628: b575 bb61 bde4 457a 05b5 5513 e28c 365e u.a...zE...U..^6
- 803c638: 42a2 279b 06c4 fb92 401c 66a7 ccc6 e433 .B.'.....@.f..3.
- 803c648: 0c77 58cc 4f22 42f2 cc95 cd0b e8b5 2d50 w..X"O.B......P-
- 803c658: 60a1 5e2b e9cf 19c5 6fd7 2531 11fb 78a9 .`+^.....o1%...x
- 803c668: 0859 a237 4a93 47b1 ef53 22d4 16a8 ebba Y.7..J.GS.."....
- 803c678: 7392 a97a 8570 f9be 7cba ea84 0efc 5708 .sz.p....|.....W
- 803c688: c266 832c d0cf 6356 87f3 5899 1398 f1b6 f.,...Vc...X....
- 803c698: eed1 26de 0cda 8323 02ae 5a29 bb9c 047b ...&..#...)Z..{.
- 803c6a8: 9684 a1f8 2d37 f4eb f1da cbe9 bebb 2ffd ....7-........./
- 803c6b8: 6bae 67cc 98e5 4e81 332b 0b10 1b2e ca70 .k.g...N+3....p.
- 803c6c8: d3b4 e253 3361 9ad8 489f a186 dea0 48a9 ..S.a3...H.....H
- 803c6d8: 8e79 85fd 6442 bd03 4626 14e5 60dd 037e y...Bd..&F...`~.
- 803c6e8: 27b5 4fe6 42f4 d013 447c e0e3 191f 05fd .'.O.B..|D......
- 803c6f8: 9915 e741 405f e73c 720c a09f 5348 6f33 ..A._@<..r..HS3o
- 803c708: 3948 b24f e690 8372 c6af d184 d076 3400 H9O...r.....v..4
- 803c718: 3759 031d 5fd8 38b1 58a4 49e8 c1f0 23ca Y7..._.8.X.I...#
- 803c728: 2b92 dbf0 34c6 0de7 7971 55cc 14d2 65b7 .+...4..qy.U...e
- 803c738: 07f5 1040 7d6b d55f 7fed ab6d b877 42d6 ..@.k}_...m.w..B
- 803c748: e941 2be6 0700 6633 eb8e 1ca2 26db 34c3 A..+..3f.....&.4
- 803c758: 4f28 d249 814f c217 7cb0 af4d ac9b 2afb (OI.O....|M....*
- 803c768: ec9b 4c5b 19b3 49f4 f0c3 55cb 3744 ab1b ..[L...I...UD7..
- 803c778: 75cb e027 d5f4 a868 42df c8a1 c4ee 568e .u'...h..B.....V
- 803c788: d2ea e44b 468c 8638 e622 2a18 e413 9c8a ..K..F8."..*....
- 803c798: 48ed d26c 4c99 a153 5a3a 6b24 fc43 a760 .Hl..LS.:Z$kC.`.
- 803c7a8: 6415 3e50 df86 5609 8663 c905 4e6e e8d1 .dP>...Vc...nN..
- 803c7b8: fc2b 9a94 7ece 5783 0387 a0e5 2265 b13a +....~.W....e":.
- 803c7c8: d9e8 b581 273a 07fe 4045 3f09 e923 d047 ....:'..E@.?#.G.
- 803c7d8: ea2c c20e 0c41 d78d c599 8f58 f0d7 5655 ,...A.....X...UV
- 803c7e8: 1bfe ccb4 0011 3580 2140 9e45 8913 7e76 .......5@!E...v~
- 803c7f8: f435 284f d677 fd55 7027 817f 76cb e564 5.O(w.U.'p...vd.
- 803c808: 3169 d8a8 834e 9537 acbd 5bb7 de8d 356e i1..N.7....[..n5
- 803c818: 6b61 e3aa cba2 d3ab 0bd2 b81c 79ec efed ak...........y..
- 803c828: ae07 56b5 c87e 7f35 c717 bba7 c6e9 56e6 ...V~.5........V
- 803c838: 15ce 8a4f 05f7 7c86 6d11 be6c ae8d 67b1 ..O....|.ml....g
- 803c848: b43c 3d8f fefc 4905 2b6e 0ce6 000b 2f00 <..=...In+.....
- 0803c857 <data__favicon_ico>:
- 803c857: 662f 7661 6369 6e6f 692e 6f63 0000 0000 /favicon.ico....
- 803c867: 5448 5054 312f 312e 3220 3030 4f20 0d4b HTTP/1.1 200 OK.
- 803c877: 530a 7265 6576 3a72 6c20 4977 2f50 2e31 .Server: lwIP/1.
- 803c887: 2e33 2031 6828 7474 3a70 2f2f 6173 6176 3.1 (http://sava
- 803c897: 6e6e 6861 6e2e 6e6f 6e67 2e75 726f 2f67 nnah.nongnu.org/
- 803c8a7: 7270 6a6f 6365 7374 6c2f 6977 2970 0a0d projects/lwip)..
- 803c8b7: 6f43 746e 6e65 2d74 654c 676e 6874 203a Content-Length:
- 803c8c7: 3131 3035 0a0d 6f43 6e6e 6365 6974 6e6f 1150..Connection
- 803c8d7: 203a 6c43 736f 0d65 430a 6e6f 6574 746e : Close..Content
- 803c8e7: 742d 7079 3a65 6920 616d 6567 782f 692d -type: image/x-i
- 803c8f7: 6f63 0d6e 430a 6361 6568 432d 6e6f 7274 con..Cache-Contr
- 803c907: 6c6f 203a 7270 7669 7461 2c65 6d20 7861 ol: private, max
- 803c917: 612d 6567 383d 3436 3030 0a0d 0a0d 0000 -age=86400......
- 803c927: 0001 0001 1010 0000 0000 0020 0468 0000 .......... .h...
- 803c937: 0016 0000 0028 0000 0010 0000 0020 0000 ....(....... ...
- 803c947: 0001 0020 0000 0000 0440 0000 0000 0000 .. .....@.......
- 803c957: 0000 0000 0000 0000 0000 0000 ffff 01ff ................
- 803c967: ffff 01ff ffff 01ff ffff 01ff ffff 01ff ................
- 803c977: ffff 01ff ffff 01ff d2d2 ffd2 d2d2 ffd2 ................
- 803c987: ffff 01ff ffff 01ff ffff 01ff ffff 01ff ................
- 803c997: ffff 01ff ffff 01ff ffff 01ff ffff 01ff ................
- 803c9a7: ffff 01ff ffff 01ff ffff 01ff ffff 01ff ................
- 803c9b7: 8d8d ff8d 8484 ff84 8989 ff89 8989 ff89 ................
- 803c9c7: 8484 ff84 8d8d ff8d ffff 01ff ffff 01ff ................
- 803c9d7: ffff 01ff ffff 01ff ffff 01ff ffff 01ff ................
- 803c9e7: ffff 01ff ffff 01ff a4a4 ffa4 8484 ff84 ................
- 803c9f7: aeae ffae ffff 01ff ffff 01ff ffff 01ff ................
- 803ca07: ffff 01ff aeae ffae 8484 ff84 a4a4 ffa4 ................
- 803ca17: ffff 01ff ffff 01ff 8181 ff81 ffff 01ff ................
- 803ca27: ffff 01ff a0a0 ffa0 9a9a ff9a ffff 01ff ................
- 803ca37: c7c7 ffc7 8f8f ff8f 8585 ff85 8585 ff85 ................
- 803ca47: 8f8f ff8f caca ffca ffff 01ff d5d5 ffd5 ................
- 803ca57: ffff 01ff 7777 ff77 ffff 01ff ffff 01ff ....www.........
- 803ca67: d5d5 ffd5 8484 ff84 ffff 01ff a8a8 ffa8 ................
- 803ca77: 8c8c ff8c bbbb ffbb ffff 01ff ffff 01ff ................
- 803ca87: baba ffba afaf ffaf ffff 01ff ffff 01ff ................
- 803ca97: 6465 ff5b ffff 01ff ffff 01ff ffff 01ff ed[.............
- 803caa7: 9898 ff98 b0b0 ffb0 d5d5 ffd5 8484 ff84 ................
- 803cab7: dada ffda 9595 ff95 8484 ff84 9d9d ff9d ................
- 803cac7: d7d7 ffd7 ffff 01ff 9898 ff97 7a7b ff73 ............{zs.
- 803cad7: cedb ff79 c0d2 ff55 ffff 01ff ffff 01ff ..y...U.........
- 803cae7: 9393 ff93 ffff 01ff a4a4 ffa4 bebe ffbe ................
- 803caf7: bdbd ffbd d1d1 ffd1 ffff 01ff ffff 01ff ................
- 803cb07: b4b5 ffae 5f5f ff5d 979d ff6b c0d2 ff55 ....__]...k...U.
- 803cb17: ffff 01ff b5c9 ff35 ffff 01ff ffff 01ff ......5.........
- 803cb27: f0f0 fff0 ffff 01ff f1f1 fff1 ffff 01ff ................
- 803cb37: d5d5 ffd5 cfd0 ffce 8585 ff85 6060 ff60 ............```.
- 803cb47: 9194 ff85 b5ca ff37 ffff 01ff b9cc ff41 ......7.......A.
- 803cb57: ffff 01ff b4c9 ff33 ffff 01ff 6262 ff62 ......3.....bbb.
- 803cb67: 5d5e ff5c 5c5c ff5c 5d5e ff5c 6161 ff60 ^]\.\\\.^]\.aa`.
- 803cb77: 6567 ff5b 8486 ff7b ffff 01ff ffff 01ff ge[...{.........
- 803cb87: ffff 01ff b5ca ff37 ffff 01ff b9cc ff41 ......7.......A.
- 803cb97: ffff 01ff b4c9 ff33 ffff 01ff ffff 01ff ......3.........
- 803cba7: b5c9 ff35 ffff 01ff c0d2 ff55 ffff 01ff ..5.......U.....
- 803cbb7: c4d4 ff5e c3d4 ff5c ffff 01ff ffff 01ff ..^...\.........
- 803cbc7: c3d4 ff5c c4d4 ff5e cedb ff79 c0d2 ff55 ..\...^...y...U.
- 803cbd7: ffff 01ff b5c9 ff35 ffff 01ff ffff 01ff ......5.........
- 803cbe7: c0d1 ff54 cfdc ff7d ffff 01ff b4c9 ff33 ..T...}.......3.
- 803cbf7: ffff 01ff bed0 ff50 b4c9 ff33 b4c9 ff33 ......P...3...3.
- 803cc07: c0d2 ff55 ffff 01ff b4c9 ff33 ffff 01ff ..U.......3.....
- 803cc17: cedb ff79 c0d2 ff55 ffff 01ff ffff 01ff ..y...U.........
- 803cc27: ffff 01ff b4c9 ff33 ffff 01ff cad9 ff6f ......3.......o.
- 803cc37: b9cc ff41 d6e1 ff8f ffff 01ff ffff 01ff ..A.............
- 803cc47: d5e0 ff8c b9cc ff40 cedb ff79 ffff 01ff ......@...y.....
- 803cc57: b4c9 ff33 ffff 01ff ffff 01ff ffff 01ff ..3.............
- 803cc67: ffff 01ff c5d5 ff62 c1d2 ff58 ffff 01ff ......b...X.....
- 803cc77: ffff 01ff bbce ff46 b5c9 ff35 b5c9 ff35 ......F...5...5.
- 803cc87: bbce ff46 ffff 01ff ffff 01ff c0d2 ff55 ..F...........U.
- 803cc97: c5d5 ff62 ffff 01ff ffff 01ff ffff 01ff ..b.............
- 803cca7: ffff 01ff ffff 01ff c8d7 ff69 b4c9 ff33 ..........i...3.
- 803ccb7: cedb ff79 ffff 01ff ffff 01ff ffff 01ff ..y.............
- 803ccc7: ffff 01ff cedb ff79 b4c9 ff33 c8d7 ff69 ......y...3...i.
- 803ccd7: ffff 01ff ffff 01ff ffff 01ff ffff 0dff ................
- 803cce7: ffff 01ff ffff 01ff ffff 01ff ffff 01ff ................
- 803ccf7: b9cd ff42 b4c9 ff33 b7cb ff3b b7cb ff3b ..B...3...;...;.
- 803cd07: b4c9 ff33 b9cd ff42 ffff 01ff ffff 01ff ..3...B.........
- 803cd17: ffff 01ff ffff 01ff ffff 01ff ffff 01ff ................
- 803cd27: ffff 01ff ffff 01ff ffff 01ff ffff 01ff ................
- 803cd37: ffff 01ff ffff 01ff e4eb ffb5 e4eb ffb5 ................
- 803cd47: ffff 01ff ffff 01ff ffff 01ff ffff 01ff ................
- 803cd57: ffff 01ff ffff 01ff ffff 01ff 0000 ffff ................
- 803cd67: 0000 ffff 0000 ffff 0000 ffff 0000 ffff ................
- 803cd77: 0000 ffff 0000 ffff 0000 ffff 0000 ffff ................
- 803cd87: 0000 ffff 0000 ffff 0000 ffff 0000 ffff ................
- 803cd97: 0000 ffff 0000 ffff 0000 ffff ............
- 0803cda3 <data__settings_html>:
- 803cda3: 732f 7465 6974 676e 2e73 7468 6c6d 0000 /settings.html..
- 803cdb3: 5448 5054 312f 312e 3220 3030 4f20 0d4b HTTP/1.1 200 OK.
- 803cdc3: 530a 7265 6576 3a72 6c20 4977 2f50 2e31 .Server: lwIP/1.
- 803cdd3: 2e33 2031 6828 7474 3a70 2f2f 6173 6176 3.1 (http://sava
- 803cde3: 6e6e 6861 6e2e 6e6f 6e67 2e75 726f 2f67 nnah.nongnu.org/
- 803cdf3: 7270 6a6f 6365 7374 6c2f 6977 2970 0a0d projects/lwip)..
- 803ce03: 6f43 746e 6e65 2d74 654c 676e 6874 203a Content-Length:
- 803ce13: 3434 3738 0a0d 6f43 6e6e 6365 6974 6e6f 4487..Connection
- 803ce23: 203a 6c43 736f 0d65 430a 6e6f 6574 746e : Close..Content
- 803ce33: 742d 7079 3a65 7420 7865 2f74 7468 6c6d -type: text/html
- 803ce43: 0a0d 6f43 746e 6e65 2d74 6e45 6f63 6964 ..Content-Encodi
- 803ce53: 676e 203a 7a67 7069 0a0d 0a0d 8b1f 0008 ng: gzip........
- 803ce63: 0000 0000 0a04 5bdd 736b d51b fe19 cb2b .......[ks....+.
- 803ce73: 3286 d8f2 2d92 205f 2c71 da75 6524 5332 .2...-_ q,u.$e2S
- 803ce83: 8788 0538 793e d2d6 5ada ed22 d58a 4eca ..8.>y...Z"....N
- 803ce93: c99a 2e4c d2d0 8521 8424 50c2 0848 7ebd ..L...!.$..PH..~
- 803cea3: 35a1 e6e4 f95c ab0b d47f 79e7 d9cf a49b .5..\......y....
- 803ceb3: e595 7ce0 87e9 bb38 3dab 7de7 7bce df7f ...|..8..=.}.{..
- 803cec3: 7673 a5e9 27a3 ac8e bbbc cc7c 0468 66ad sv...'....|.h..f
- 803ced3: 8975 8d7f e5a6 546e 134c b677 af55 b52e u.....nTL.w.U...
- 803cee3: c0ec 6a32 cb0d d8ef c541 06ec c5eb f883 ..2j....A.......
- 803cef3: 9e4d 8236 5da0 dfb4 3aef 159b 9df3 a9e2 M.6..]...:......
- 803cf03: 155f 788f b6ad 3815 4d6b 34db 9e6a d81b _..x...8kM.4j...
- 803cf13: 862e 3f1c b156 1beb 3476 b5c8 765a dcc5 ...?V...v4..Zv..
- 803cf23: ec74 b6ad 07e7 f7a9 9cb6 d07a d4a8 4ded t.........z....M
- 803cf33: 66a7 e517 ca66 9d71 b1c0 c59a cd4e da6a .f..f.q.....N.j.
- 803cf43: f295 cb54 e33a bab4 f8ad dbbe 7db1 b1b9 ..T.:........}..
- 803cf53: b240 0332 8112 3413 6aed 4df8 ddb8 d8bb @.2....4.j.M....
- 803cf63: d4bb 10bb 0b3e 861f c28f a59d f569 52cb ....>.......i..R
- 803cf73: 71d3 1b4f df0d af5e 2d98 71cb b54b c74e .qO...^..-.qK.N.
- 803cf83: 7c34 59bb 3b31 d9c1 dda6 d869 8076 3a79 4|.Y1;....i.v.y:
- 803cf93: df35 0769 7046 0db6 81b0 267d 7e98 dacf 5.i.Fp....}&.~..
- 803cfa3: d4b4 d353 f8e8 8ab5 7be9 bb4d 5ef4 2f07 ..S......{M..^./
- 803cfb3: ab4f b8e7 2c50 f35b 67ea 4bab 6775 70d3 O...P,[..g.Kug.p
- 803cfc3: 15ea e6b3 dd75 b8a0 5be5 bc6d 799a f758 ....u....[m..yX.
- 803cfd3: 5cb6 6b3c c357 80af a9f3 fbc6 7c38 de1c .\<kW.......8|..
- 803cfe3: 5deb c230 7a1f c397 b8bb 64bc 3f84 49f1 .]0..z.....d.?.I
- 803cff3: 2f78 107c 876e 7a77 f017 7dc3 3ddc 7a35 x/|.n.wz...}.=5z
- 803d003: 8c7f 307e 3a96 cb6d 114d bb74 35ad 37db ..~0.:m.M.t..5.7
- 803d013: 0bab 8780 aa5f ef46 8622 c23c a7d0 dde1 ...._.F.".<.....
- 803d023: d2d2 1b74 8170 0526 01a9 dbc1 56cb b3a7 ..t.p.&......V..
- 803d033: f9e5 e075 f75a 96fc d561 c702 a173 060f ..u.Z...a...s...
- 803d043: de44 b0f0 b69e 21d7 8087 76fa 84f8 c228 D......!...v..(.
- 803d053: 026d 16dc 3f66 7dee a86a 3f27 3ef6 a2c4 m...f?.}j.'?.>..
- 803d063: 1aee 8fe1 bca4 7143 e5e0 bd27 06cb 8516 ......Cq..'.....
- 803d073: 16d7 4205 6ec7 b5da 50c0 d14a 36f4 771c ...B.n...PJ..6.w
- 803d083: d795 5aa6 0648 29d1 1b08 d2ea c004 498a ...ZH..).......I
- 803d093: 456c 18aa 00a4 5e30 289b 4d8d d9ab bc85 lE....0^.(.M....
- 803d0a3: 6acc bd78 71f7 83f8 66f0 7487 f009 a819 .jx..q...f.t....
- 803d0b3: 015e 9f07 3f85 2c02 00c1 d2c5 1ab4 3fda ^....?.,.......?
- 803d0c3: 3505 accb 6ff2 1bde bd56 40e5 f27a f25f .5...o..V..@z._.
- 803d0d3: b4ce 505a 6975 57cd 1cff ddb7 640d 5e35 ..ZPui.W.....d5^
- 803d0e3: deb3 aade 5a9b daa7 9f11 ae87 68c8 ad37 .....Z.......h7.
- 803d0f3: dd9a 10c0 afdb e198 4a77 bd72 853f e13b ........wJr.?.;.
- 803d103: 34c3 afb3 0cc4 de11 3341 df9d 0183 33b3 .4......A3.....3
- 803d113: 9710 a675 bb69 301b b329 aafc 39a9 0c4c ..u.i..0)....9L.
- 803d123: 0c20 0d8e 73e2 9161 89cf 1bef 1532 ff1c ....sa.....2...
- 803d133: d859 7f48 3634 6edf 16db 865c cab2 713d Y.H.46.n..\...=q
- 803d143: 96f0 bc20 3e14 9683 2342 577a a5a8 07fb .. ..>..B#zW....
- 803d153: 2dfa ac85 ad9f e80a 375a 3c08 ab57 d374 .-......Z7.<W.t.
- 803d163: d8eb 4245 c22f c2a7 62de ae01 ae05 7f81 ..EB/....b......
- 803d173: 3ac5 fa9f c745 b4dd c0fd be86 a568 6f0e .:..E.......h..o
- 803d183: 6742 bdb5 5599 4963 9629 d0a2 aee9 1cb5 Bg...UcI).......
- 803d193: 52fa 1c65 54d1 6e9d 66ad 5283 9732 d6e7 .Re..T.n.f.R2...
- 803d1a3: 4e9a 34ed 979c 741d 177d dd7e 9dae a23e .N.4...t}.~...>.
- 803d1b3: eccc a3ed 8985 97a9 59ca 3f82 5f81 30db .........Y.?._.0
- 803d1c3: e118 d419 9a66 1786 8e79 7fc4 c268 b5ae ....f...y...h...
- 803d1d3: 66b9 d0f9 fe35 ac57 ebdb b756 e349 db96 .f..5.W...V.I...
- 803d1e3: e775 5d8c 062f e45e 3306 8a63 9cf4 3934 u..]/.^..3c...49
- 803d1f3: c87a 92ea 5da5 e3b4 edd6 2533 a586 7178 z....]....3%..xq
- 803d203: 7450 408f 2cac 688a 01c4 e7c5 ed96 8b76 Pt.@.,.h......v.
- 803d213: 1c0e 7e84 dbb5 988c 3403 2211 aa5c 79b7 ...~.....4."\..y
- 803d223: 4551 1868 b84a de1a e712 4db6 d3ee f747 QEh.J......M..G.
- 803d233: 563e f9d4 7a7e 020c e064 1bb8 2c9d 3a5e >V..~z..d....,^:
- 803d243: 4dd0 bf44 3161 6b89 9fe8 71c5 3dd7 4335 .MD.a1.k...q.=5C
- 803d253: fc35 4112 03e1 d9d1 8027 07f0 0148 6b0e 5..A....'...H..k
- 803d263: a0d8 d386 3c09 6cff ee34 bd2f 90cb 1c1b .....<.l4./.....
- 803d273: f873 7938 ba7f 088b 203f c632 36a5 ab1d s.8y....? 2..6..
- 803d283: 550a b312 8bc1 7946 6028 5e3c 2b02 2ef9 .U....Fy(`<^.+..
- 803d293: d2d4 23a9 7bd8 716e 3bcd 3643 7e73 1989 ...#.{nq.;C6s~..
- 803d2a3: 99fc d017 28a5 c47c a9bc 386d 2849 3e59 .....(|...m8I(Y>
- 803d2b3: 7271 2305 a0a3 5818 786b a30f 6ab4 7ba8 qr.#...Xkx...j.{
- 803d2c3: 82f5 4dd0 439e f462 6962 1ff6 b8e8 76ad ...M.Cb.bi.....v
- 803d2d3: 0462 ef8a d62b 599a f93d 1be6 09cb 321f b...+..Y=......2
- 803d2e3: 1c63 ebd7 9a22 b785 b1c1 e10f 115d 1e29 c...".......].).
- 803d2f3: 2fc1 1620 7983 208f 1ced 1f59 ed70 8b60 ./ ..y. ..Y.p.`.
- 803d303: a8e3 f012 f4ce 127e 1865 7706 94d5 8803 ......~.e..w....
- 803d313: 4c2b f473 1704 c0c4 e62e f440 7aad c1d7 +Ls.......@..z..
- 803d323: c362 a0ab 3da2 1318 5181 70fa 0dc0 0ac0 b....=...Q.p....
- 803d333: 4186 0d66 d24f d36a 06a7 5594 7196 3ae0 .Af.O.j....U.q.:
- 803d343: 05f2 445b 89b7 c07c ea65 1146 ee69 c7f3 ..[D..|.e.F.i...
- 803d353: d8a6 942b 623d 9c6e 6449 625e 6422 1074 ..+.=bn.Id^b"dt.
- 803d363: 19e0 379c af7c 67db 35fb 69af 3930 2d59 ...7|..g.5.i09Y-
- 803d373: 7aaf abeb 14b3 b5a8 3766 280d d30f d733 .z......f7.(..3.
- 803d383: 2782 be3c eb1c c0c3 c2eb 727e f98f 1952 .'<.......~r..R.
- 803d393: c4b6 19d1 03b0 3243 937e 5d89 3b3c 3635 ......C2~..]<;56
- 803d3a3: 294e c544 0853 8254 3c92 2c88 1869 d9de N)D.S.T..<.,i...
- 803d3b3: ca78 ea01 c019 2fb3 300e f420 2621 9573 x....../.0 .!&s.
- 803d3c3: 0ff1 3c83 2637 b9e4 0717 1019 20fa 8dcf ...<7&....... ..
- 803d3d3: 3c84 263f f9e4 0717 1019 20fa 8fcf bc84 .<?&....... ....
- 803d3e3: 2630 a464 2fec 934a a101 f20f 0c42 2079 0&d../J.....B.y
- 803d3f3: 0c36 6fa8 3cda 047d d5ec d79a 756a a451 6..o.<}.....juQ.
- 803d403: cd9d d95f 785b 40cf a861 dbde 95f7 c3f5 .._.[x.@a.......
- 803d413: ab50 7feb 4e9a 9386 a705 612c 77cb 7b02 P....N....,a.w.{
- 803d423: e59c cdbc 5f17 7ae0 8006 05a8 3c0d be1e ....._.z.....<..
- 803d433: 2522 f4c2 28df aab6 1740 70f9 e3ed fa21 "%...(..@..p..!.
- 803d443: c77c 323e ee26 bf97 cc6f 9047 6562 d59b |.>2&...o.G.be..
- 803d453: 20b1 c1bc 11aa 1841 0c21 ef71 8aa9 bab0 . ....A.!.q.....
- 803d463: 64ac 6e5c a3cc 67de 1fe5 214d 5837 a053 .d\n...g..M!7XS.
- 803d473: f0ca 2500 d058 8b88 156b d1d0 6808 c7a8 ...%X...k....h..
- 803d483: 1037 1f19 594a f48a bc36 7ea7 e698 bc20 7...JY..6..~.. .
- 803d493: ad22 408f f215 4f32 8abd 12f8 1fa0 7fc2 "..@..2O........
- 803d4a3: aa99 eeb5 6320 1861 0b95 ff1d c132 bfa4 .... ca.....2...
- 803d4b3: 2cb8 3233 cf23 6c78 c320 16bb 4ade c7ca .,32#.xl ....J..
- 803d4c3: 1d6c 9f0b d4cd 58c5 8e41 bc96 9713 0298 l......XA.......
- 803d4d3: 0347 4856 85a7 9103 4fa3 3689 6e66 681c G.VH.....O.6fn.h
- 803d4e3: 3147 5bfe 0670 083d 4e74 a662 ac7f f9aa G1.[p.=.tNb.....
- 803d4f3: 607d 97fb f2c2 e867 3c5c db05 3d1f db37 }`....g.\<...=7.
- 803d503: 4f7d 5db3 c62e fb65 d057 7626 7604 73a4 }O.]..e.W.&v.v.s
- 803d513: ed02 1e42 8e85 4b05 661c 926e 0f60 08ef ..B....K.fn.`...
- 803d523: 1840 e148 41d9 de79 1019 44cf 279c ad8f @.H..Ay....D.'..
- 803d533: 948c d6a6 a437 4307 cdf5 10f7 a9dd 726f ....7..C......or
- 803d543: fff1 f0b4 6d69 5970 1e35 cde6 fb24 994e ....impY5...$.N.
- 803d553: 733d 5dd2 d99c 89ae 7efa b4b9 d9b4 bcb1 =s.].....~......
- 803d563: 7546 6684 4ea8 2374 a6e7 6922 9335 4a8d Fu.f.Nt#.."i5..J
- 803d573: ce31 4a5a e887 a37a d6d6 459e 50ae 4bbc 1.ZJ..z....E.P.K
- 803d583: 0ea5 834f 93fb 1581 85d8 b409 5002 b29f ..O..........P..
- 803d593: 75b7 2a19 5aad c71b 8b97 e8d0 e2bb 2f38 .u.*.Z........8/
- 803d5a3: 728a 6eb3 f940 b6ca a257 68f9 ea8a 4334 .r.n@...W..h..4C
- 803d5b3: 38b1 0e15 b69d af55 28a3 dad4 c315 dc8f .8....U..(......
- 803d5c3: 9647 4802 cdc7 ed56 b750 b9e3 ecd3 b888 G..H..V.P.......
- 803d5d3: 4d10 5993 2efe 78c9 4904 43c5 177d bab9 .M.Y...x.I.C}...
- 803d5e3: f414 ad8d 61b1 047f 7dae 52c2 df6a 12c1 .....a...}.Rj...
- 803d5f3: 0284 ab8a 2021 565b 74e7 cc3e 6bf0 4a48 ....! [V.t>..kHJ
- 803d603: 937c 5bea c5de 430d 2260 fdb0 aa62 a1c2 |..[...C`"..b...
- 803d613: ca90 8475 6d35 ea74 249a 58a5 a5d4 a46b ..u.5mt..$.X..k.
- 803d623: e31b 12a5 d0ac 2aa2 3317 c90d f63b 2b56 .......*.3..;.V+
- 803d633: 36b2 1518 aec2 b3c2 d7b3 7e8d db33 d4bc .6.........~3...
- 803d643: 007f e1d0 07ec 0431 fbfa e47b f329 d508 ......1...{.)...
- 803d653: d3a3 c59d 61a8 b5a7 6a3f e9a7 967e c469 .....a..?j..~.i.
- 803d663: b45d 2b35 b158 413b dce1 d77a 2dad f2be ].5+X.;A..z..-..
- 803d673: d77e 0e0b 11a3 56d3 e757 9c61 dae8 f1b1 ~......VW.a.....
- 803d683: adbd 8dba 370c 6e06 a9ef 4b87 8ad3 ba12 .....7.n...K....
- 803d693: fb79 bf47 74ee 5bb8 61b3 40a7 017c 3f00 y.G..t.[.a.@|..?
- 803d6a3: 4ad1 47c3 f229 c46c 333f 85c0 f0ed ba01 .J.G).l.?3......
- 803d6b3: 9f5a 16e2 f096 2002 4e05 a34b e299 e2e5 Z...... .NK.....
- 803d6c3: 05cb 2d85 ef00 9356 271f d24a 14ea 0db6 ...-..V..'J.....
- 803d6d3: 1c47 4ba3 2217 ec23 6e28 a47f 5d57 2380 G..K."#.(n..W].#
- 803d6e3: 09dc 4e9f abec ebd1 6d26 db39 4778 9ddf ...N....&m9.xG..
- 803d6f3: 1326 33af 0576 4989 f50d bbb0 f769 ed90 &..3v..I....i...
- 803d703: e7a2 6350 5342 6511 3555 c3de 1be1 313a ..PcBS.eU5....:1
- 803d713: f7d7 a6a8 1f9c 79db df45 f35e 763c 6ea3 .......yE.^.<v.n
- 803d723: 1789 ef48 3d62 45a0 dcfc bbf9 f46d d921 ..H.b=.E....m.!.
- 803d733: bb4b 2d89 e91f 4bea caf6 12f4 b92d e15b K..-...K....-.[.
- 803d743: 98cd 60c0 33fb d91b e376 b63b f515 9bf6 ...`.3..v.;.....
- 803d753: fe06 aefc d4e3 c9f2 6f65 f6cb ac4f 67af ........eo..O..g
- 803d763: 87dc 5662 76ca 99f7 b169 caef e003 afad ..bV.v..i.......
- 803d773: a8a7 1f73 850d ef4a 2893 e8b9 65e7 503a ..s...J..(...e:P
- 803d783: 2144 7742 f72c 2114 3686 4737 db6c 47ed D!Bw,..!.67Gl..G
- 803d793: 6110 6c4f 1044 eb79 4757 9f8f 293a a6fb .aOlD.y.WG..:)..
- 803d7a3: bc12 c210 9594 9d71 dd91 acfe cf0c acef ......q.........
- 803d7b3: 2eda 582b f36c 5ad0 f7d2 b649 7607 dd3a ..+Xl..Z..I..v:.
- 803d7c3: 2a4e 93df 31da 922d 34bc f30e d3b1 da9c N*...1-..4......
- 803d7d3: cd37 3bea 1a6b b076 0b75 5f75 a23d 4f5e 7..;k.v.u.u_=.^O
- 803d7e3: 5f44 18e5 a009 d128 6548 f86e 1f51 5009 D_....(.Hen.Q..P
- 803d7f3: 58db 5883 e891 5022 7a5d 3811 e515 a518 .X.X.."P]z.8....
- 803d803: 4dba 5935 7686 888d 5b98 91a6 f432 b7e7 .M5Y.v...[..2...
- 803d813: e77a 7648 f79e 7a0e 0d97 cd4e 0160 e090 z.Hv...z..N.`...
- 803d823: 9c06 ace1 6d3d 688f c9d2 8401 68bb 73f9 ....=m.h.....h.s
- 803d833: f0bf 2145 0415 5231 45de 7748 8709 d8bb ..E!..1R.EHw....
- 803d843: b0e9 13d3 6cfb 56a8 6837 1328 5755 7189 .....l.V7h(.UW.q
- 803d853: 3ef2 34df e2e3 260b 13b6 da6f 127c 3873 .>.4...&..o.|.s8
- 803d863: 3ded d7d3 2791 6d95 489c c6bd b4ca 36ff .=...'.m.H.....6
- 803d873: 6f90 ad32 46e3 1196 18ee 41d8 0d92 2421 .o2..F.....A..!$
- 803d883: 08be 838f 50e1 eded 2dec a715 5274 dc56 .....P...-..tRV.
- 803d893: 6a0d 0c23 5fe2 d952 08f0 0e06 88e6 477b .j#.._R.......{G
- 803d8a3: 8e72 2f9d c1ed 9ed2 dfb5 a298 9bae b636 r../..........6.
- 803d8b3: 874c 174d 425b 769b 8bc1 aefe b15b 5b3c L.M.[B.v....[.<[
- 803d8c3: 11c2 c2a1 6feb 18ac 5eb8 999c 3099 efc2 .....o...^...0..
- 803d8d3: 0ba5 0dc5 5624 8fc8 0ca6 1328 415a d9e0 ....$V....(.ZA..
- 803d8e3: fc7d 4dd5 a4b0 935b cfed cb15 d4e5 658c }..M..[........e
- 803d8f3: a335 fc24 32e0 68d6 90a0 41db 7e1d f7b9 5.$..2.h...A.~..
- 803d903: f0e7 a621 8dbe 9f29 07e0 3c64 7bc3 c54c ..!...)...d<.{L.
- 803d913: 4cf2 c26a 3519 67e1 4518 0f48 b029 719c .Lj..5.g.EH.)..q
- 803d923: 9287 8761 a8d4 52ab 48f6 9911 ea3b 3260 ..a....R.H..;.`2
- 803d933: a0ea f51a da1d 3c03 03b6 4056 5045 b0b5 .......<..V@EP..
- 803d943: c064 f21d ad28 e839 1596 90b0 877f 4557 d...(.9.......WE
- 803d953: be9f 4be2 07f8 431d 9d42 ee83 84b5 6bce ...K...CB......k
- 803d963: 9ad1 1ca4 d9fb bf33 cc9a aafc f99a 549f ......3........T
- 803d973: ee6d 03d2 cf14 30fb 1c1f 3d0b f3e4 d435 m......0...=..5.
- 803d983: 9b80 58c0 ee71 165a 8a12 8a0b 75e2 2504 ...Xq.Z......u.%
- 803d993: 78d6 a5aa 3e39 6bb5 7640 a307 1d50 f682 .x..9>.k@v..P...
- 803d9a3: 415f 0d17 5c9a f3ba dd09 4579 2af7 3e46 _A...\....yE.*F>
- 803d9b3: 1916 9ba5 033a d3f4 1212 56f5 d43b bbc8 ....:......V;...
- 803d9c3: 177b ee85 5176 14c2 308c 7c47 2573 3f04 {...vQ...0G|s%.?
- 803d9d3: 3665 8b73 b473 6f9a 577a 7e90 807c e429 e6s.s..ozW.~|.).
- 803d9e3: 9934 b74e 8eef 2198 bc36 0539 9afe e808 4.N....!6.9.....
- 803d9f3: 1601 98fd 574d b900 6626 7102 2ef5 b116 ....MW..&f.q....
- 803da03: fdd5 8e90 104a 80de 5229 605b e492 4915 ....J...)R[`...I
- 803da13: 12e6 594a 36b8 dbf0 079c 5163 51f1 3017 ..JY.6....cQ.Q.0
- 803da23: 0e75 20db dc8a d369 ae66 cf99 6483 45c8 u.. ..i.f....d.E
- 803da33: 1e68 6652 0e88 1680 1b5d 99e5 37b9 2fc2 h.Rf....]....7./
- 803da43: 8200 84de 08ea d04a deb5 18c7 2b9c d8ef ......J......+..
- 803da53: 800f 52db 8b0b c18d d8d2 fead 8c5c 19f1 ...R........\...
- 803da63: dd0f 0489 5e71 2b01 5fc4 e3b9 3b51 8ccc ....q^.+._..Q;..
- 803da73: 485a 813d e802 d17b 0016 a5ce ac9a 5273 ZH=...{.......sR
- 803da83: 337b 09c8 e692 3c84 772e 0405 7b58 38e2 {3.....<.w..X{.8
- 803da93: 4822 01de 3b91 c2bc 7453 a4ac 08e1 8777 "H...;..St....w.
- 803daa3: 753b 6660 bc27 c79f 44d1 934e 4e5a 915f ;u`f'....DN.ZN_.
- 803dab3: e18d 428f 8e80 f297 3fe2 769c d4e4 fe78 ...B.....?.v..x.
- 803dac3: e81f 6681 d5c0 07de 4c78 cd43 ca5d 6c5c ...f....xLC.].\l
- 803dad3: 932f e55a a6be 304c c944 be87 29f8 784f /.Z...L0D....)Ox
- 803dae3: fb50 fde9 0599 c4e3 fe25 01de 6bb1 36b2 P.......%....k.6
- 803daf3: 3578 fd21 ef7d 3142 96fc 1a8a 2ae6 6279 x5!.}.B1.....*yb
- 803db03: 2025 5628 53c2 e07b 660f a904 4e3c 7624 % (V.S{..f..<N$v
- 803db13: 393d a91f 6016 b114 45fb ee11 cb00 aad7 =9...`...E......
- 803db23: 0373 5e31 ddc2 98e7 8c0f 9ce2 271a 5cfa s.1^.........'.\
- 803db33: fab8 6f8e 358b b4e1 3e65 c8b5 4194 404d ...o.5..e>...AM@
- 803db43: 3b42 a0e4 0e29 0d0a ff37 e1c4 6a4d f787 B;..)...7...Mj..
- 803db53: f939 39ae 1146 5c25 dec3 100e c830 bb11 9..9F.%\....0...
- 803db63: 1de2 9008 ac03 051f 76e5 23ef 178c 9d27 .........v.#..'.
- 803db73: 324f b946 50a0 57d2 c13e d894 c293 c424 O2F..P.W>.....$.
- 803db83: df4c 858e d3c3 ff2b 2919 f2a0 e26a c8a0 L.....+..)..j...
- 803db93: 5a43 2e5d 1637 af4a 08a5 2fcd d6c0 9688 CZ].7.J..../....
- 803dba3: ecc7 1ca8 dc08 0879 b893 a933 0ee3 2de2 ......y...3....-
- 803dbb3: 3187 02d1 0a42 0d0f f0c8 a09e fe45 f1af .1..B.......E...
- 803dbc3: bae7 2498 4e44 10ea 0d49 8da4 fc31 2f32 ...$DN..I...1.2/
- 803dbd3: 87f9 23dc 926b 99e9 509d a80a f286 206d ...#k....P....m
- 803dbe3: ef89 3a93 43be 31d5 420c 24c3 58d2 9510 ...:.C.1.B.$.X..
- 803dbf3: adba 0d2c b253 7849 bf01 067d b0a2 f90e ..,.S.Ix..}.....
- 803dc03: 277b 098f d249 a931 8e93 6aff c091 30cc {'..I.1....j...0
- 803dc13: 77c9 8e44 9fa9 9ae1 2655 b13a bab8 1d09 .wD.....U&:.....
- 803dc23: ec11 14f2 7924 1734 921a 9acb 7143 01f8 ....$y4.....Cq..
- 803dc33: d119 abd9 76f0 ec14 2636 8987 2262 1bf0 .....v..6&..b"..
- 803dc43: 7053 371f d0d7 a952 64d5 a759 d756 1265 Sp.7..R..dY.V.e.
- 803dc53: 0706 a3e4 882a f20b 486c 9f17 fecb da84 ....*...lH......
- 803dc63: 10e4 24ef eb21 2c33 ca09 c79e 549f 3876 ...$!.3,.....Tv8
- 803dc73: d659 94fe 7a6a ff07 5b00 7084 3c1b ca52 Y...jz...[.p.<R.
- 803dc83: 8641 81cb bed4 81d8 7dd5 1fc3 42b0 7eb8 A........}...B.~
- 803dc93: 7d51 5e2c 3ddc 521d f12e 8b94 928d 9bdd Q},^.=.R........
- 803dca3: 8710 420a a7f4 85d7 ca87 ded3 1a81 68a9 ...B...........h
- 803dcb3: 77f1 e9e1 317d 1256 027b a5c3 4049 12d9 .w..}1V.{...I@..
- 803dcc3: c952 b416 61b4 d952 0a3f 1196 ffd9 20b7 R....aR.?......
- 803dcd3: a989 b2c9 49fd 85f8 131c b97e aa48 3632 .....I....~.H.26
- 803dce3: 7195 7094 c705 0bf7 0e01 a247 df13 4677 .q.p......G...wF
- 803dcf3: 091c f849 b42d db9d 30d0 64aa ca6d 460b ..I.-....0.dm..F
- 803dd03: 6ea7 55b9 5baf ca53 c1bc 9e73 57b9 3f71 .n.U.[S...s..Wq?
- 803dd13: 2c35 259f 9cd2 f694 af0e 9356 ac93 fd83 5,.%......V.....
- 803dd23: aa0d d8b1 38f3 49dc 001f 3456 5446 5946 .....8.I..V4FTFY
- 803dd33: 7110 9de1 1c92 a659 d5db 1ab8 3309 ab6e .q....Y......3n.
- 803dd43: 278f 34c6 4550 2865 ccd0 f791 6346 d5b1 .'.4PEe(....Fc..
- 803dd53: f68a b2d0 86d0 8781 e5f8 a548 2fde 6f8d ..........H../.o
- 803dd63: 2e47 cf63 2f9d ec7d 2863 d57a 88d7 2b09 G.c../}.c(z....+
- 803dd73: a64e 136e 94dd de6d 3813 e262 a8e7 a1e6 N.n...m..8b.....
- 803dd83: 6972 f676 52d5 4e79 99fe cc55 2e52 0275 riv..RyN..U.R.u.
- 803dd93: 0adf adba 92d9 cddf d5d3 0783 e54b d7f9 ............K...
- 803dda3: b34a f30b d9a5 5439 18e5 bb37 71e7 8808 J.....9T..7..q..
- 803ddb3: 3718 ce37 8f38 806b dc7d 1440 0cba 96af .77.8.k.}.@.....
- 803ddc3: a331 7b7c 7340 e82f 759c 2871 5234 f4b8 1.|{@s/..uq(4R..
- 803ddd3: 9193 6312 8fff 0619 dffd 3453 3e0e 7365 ...c......S4.>es
- 803dde3: 3e16 f7bf 0321 2c08 e939 c0b1 ee31 88d5 .>..!..,9...1...
- 803ddf3: d976 4e80 34a3 6c0d 49b3 96e3 7ec7 55d4 v..N.4.l.I...~.U
- 803de03: 97ac 46e9 fa4e 6dba 27c8 1546 3e53 5a6e ...FN..m.'F.S>nZ
- 803de13: cf2c fccc 6302 d9c6 6bf9 4efb f2cb 8ecf ,....c...k.N....
- 803de23: c838 beaf f800 8e0d 76b0 29d4 ec7e 80b6 8........v.)~...
- 803de33: ac27 9929 cbaa 80b9 75b8 e63f 4e3e 87ff '.)......u?.>N..
- 803de43: f408 6ab3 073f 55ae c73a 903f 6ced e8df ...j?..U:.?..l..
- 803de53: 434d 55f5 3b11 5533 5bdd 569a 9307 f8c6 MC.U.;3U.[.V....
- 803de63: 4a9c c6be 7eca 354e 5472 e8f5 6fbb beae .J...~N5rT...o..
- 803de73: ec7d a5d7 9c15 2f1a 5101 5db7 e738 17d4 }....../.Q.]8...
- 803de83: b44d e4c9 f914 be14 39de 79e2 1da7 b3bb M........9.y....
- 803de93: d2f8 f9cc c389 fc9b 2134 1472 e3bf 42a7 ........4!r....B
- 803dea3: f187 1ca2 7fd9 d8fd d80a 72f6 d641 f7a7 ...........rA...
- 803deb3: 2693 b04a f959 825a bbbb c23c 985c 8738 .&J.Y.Z...<.\.8.
- 803dec3: 0a2f 1dd6 55bf 5530 04fa b2e6 c477 1ff2 /....U0U....w...
- 803ded3: 35cd 97c9 f7a4 a0c0 350e 57e5 f85c 89fc .5.......5.W\...
- 803dee3: bb09 3d84 7684 b124 e712 2075 0446 2d97 ...=.v$...u F..-
- 803def3: 5faa 139a bcaf 6852 567a 9dfd 7e37 d47b ._....RhzV..7~{.
- 803df03: 15ab f5cc 55ad a405 23c4 53f3 2026 139a .....U...#.S& ..
- 803df13: e253 963c a9f9 c4c6 e279 ef4d 0ddf cc05 S.<.....y.M.....
- 803df23: 9277 d00f 6026 f8d7 adca 9d04 bb85 5b3d w...&`........=[
- 803df33: d731 5e9a b4ed cc99 1cb4 967d f394 22a6 1..^......}...."
- 803df43: f03a 4b11 e92e 2fc1 f4b8 2f2e d2be 5522 :..K.../.../.."U
- 803df53: 51fd f654 fea1 6912 43d8 09fd f650 51a7 .QT....i.C..P..Q
- 803df63: 740b 9c3d 1a0c 7d67 a2f2 2f2c f1d1 cba1 .t=...g}..,/....
- 803df73: b48a c0c1 9be9 5b73 42f8 dbc5 812a f28b ......s[.B..*...
- 803df83: 4429 7d49 0859 97e7 14fe 7ce4 52b9 b0d9 )DI}Y......|.R..
- 803df93: 2383 1faf e02f 1bc3 26fc 8522 71c0 02b9 .#../....&"..q..
- 803dfa3: 882f 104f f60a d954 539e 4d32 99ed 050e /.O...T..S2M....
- 803dfb3: 3d40 47c6 6a5e 50a7 3aa6 109c a9b0 e347 @=.G^j.P.:....G.
- 803dfc3: 9d0b 21aa 219f c8e6 4a7b cb78 0a37 cd2f ...!.!..{Jx.7./.
- 803dfd3: e740 a70e 763f 37e4 ffa3 1103 a13e 43e5 @...?v.7....>..C
- 803dfe3: 003a 2f00 :..
- 0803dfe6 <data__main_css>:
- 803dfe6: 6d2f 6961 2e6e 7363 0073 0000 5448 5054 /main.css...HTTP
- 803dff6: 312f 312e 3220 3030 4f20 0d4b 530a 7265 /1.1 200 OK..Ser
- 803e006: 6576 3a72 6c20 4977 2f50 2e31 2e33 2031 ver: lwIP/1.3.1
- 803e016: 6828 7474 3a70 2f2f 6173 6176 6e6e 6861 (http://savannah
- 803e026: 6e2e 6e6f 6e67 2e75 726f 2f67 7270 6a6f .nongnu.org/proj
- 803e036: 6365 7374 6c2f 6977 2970 0a0d 6f43 746e ects/lwip)..Cont
- 803e046: 6e65 2d74 654c 676e 6874 203a 3031 3435 ent-Length: 1054
- 803e056: 0d35 430a 6e6f 656e 7463 6f69 3a6e 4320 5..Connection: C
- 803e066: 6f6c 6573 0a0d 6f43 746e 6e65 2d74 7974 lose..Content-ty
- 803e076: 6570 203a 6574 7478 632f 7373 0a0d 6f43 pe: text/css..Co
- 803e086: 746e 6e65 2d74 6e45 6f63 6964 676e 203a ntent-Encoding:
- 803e096: 7a67 7069 0a0d 6143 6863 2d65 6f43 746e gzip..Cache-Cont
- 803e0a6: 6f72 3a6c 7020 6972 6176 6574 202c 616d rol: private, ma
- 803e0b6: 2d78 6761 3d65 3638 3034 0d30 0d0a 1f0a x-age=86400.....
- 803e0c6: 088b 0000 0000 0400 d50a 6b7d 238f 7239 ..........}k.#9r
- 803e0d6: 5fe0 a791 e7d0 6dae a349 bd57 d854 79c2 ._.....mI.W.T..y
- 803e0e6: f6c6 80f9 c05b bd80 da9f 418d 994a ca55 ....[......AJ.U.
- 803e0f6: 496d 4829 eeaa d1aa 3fe9 0718 3818 70e0 mI)H.....?...8.p
- 803e106: ec7e f01f e95f e49f 9278 2641 a533 ef6a ~..._...x.A&3.j.
- 803e116: bb87 9dad 2519 119f 88c1 3060 2418 fc7f .....%....`0.$..
- 803e126: 9fcd d675 76d5 2d95 5fcb fe8b b77c 7ceb ..u..v.-._..|..|
- 803e136: f719 fd07 e751 767f f77e ffdf f3be ca3f ....Q..v~.....?.
- 803e146: b179 15de f5f0 ee54 65fb a3f5 db2b cdf9 y.....T..e..+...
- 803e156: fd8f f565 7554 edb3 9cbe 8b2f b66e f32b ..e.Tu..../.n.+.
- 803e166: 9ba2 fb17 5cac baee e58f 3cd3 ecdb 6acb .....\.....<...j
- 803e176: 3f8d b79f f745 aab1 c5f6 bbb6 b228 ff1c .?..E.......(...
- 803e186: b4f3 9ead dd37 5655 bbae 62ab dcfd 675d ....7.UV...b..]g
- 803e196: ba5f 62bb 354e cf76 55ab 7db6 e43d 6ee5 _..bN5v..U.}=..n
- 803e1a6: ccb3 a75e 65b3 ff35 ec7c 36ef 7ae5 bd56 ..^..e5.|..6.zV.
- 803e1b6: 2efc 7edb e6ee eb8f 63c3 deb5 76f7 d7fb ...~.....c...v..
- 803e1c6: 3165 f72d c080 d8fc 5687 d966 bbb6 9e7b e1-......Vf...{.
- 803e1d6: 3fc1 c39b daa6 d895 74e2 2c5b 7db3 a5f9 .?.......t[,.}..
- 803e1e6: 12a0 cb0f 21f2 f6eb d937 58ba 10f6 729e .....!..7..X...r
- 803e1f6: d4fd efed d9b3 78b2 e3d8 c3f7 0b7e fa3f .......x....~.?.
- 803e206: c59b 5961 01ec dee8 936e a1cd b4d0 183f ..aY....n.....?.
- 803e216: ab15 3f63 3003 14bf fedd bf6c 3fee f356 ..c?.0....l..?V.
- 803e226: 1de7 9cfd 9f9a ea8b 200b e089 6750 e59a ......... ..Pg..
- 803e236: 29be b0ff 5e2f bdf6 98bc 5b57 0e00 5ca0 .)../^....W[...\
- 803e246: 6b57 b086 bcfb 7844 f8a0 b0ee 772c 258a Wk....Dx....,w.%
- 803e256: 23e7 7e19 5eaa 44ba f80f 29d1 9bd7 7de7 .#.~.^.D...)...}
- 803e266: fe97 71fd baff 7e29 2bbb edb2 f17c d0e9 ...q..)~.+..|...
- 803e276: 5afb 3ecc fb97 b65e 40d9 b64a 179e c5d2 .Z.>..^..@J.....
- 803e286: cb2c 189f c3fe 45d7 2fb9 4108 fccc cdba ,......E./.A....
- 803e296: 4736 89c0 aa86 634f cd34 711e fadc 3832 6G....Oc4..q..28
- 803e2a6: 1807 6ceb 9d3b fb55 b1c5 3d5c 9775 53c5 ...l;.U...\=u..S
- 803e2b6: ceb1 b30f 0b6a 3ac3 1c1d bbf9 cfbb fbbb ....j..:........
- 803e2c6: 61c5 e593 5c48 5e48 57ec 1e4b c7b0 556c .a..H\H^.WK...lU
- 803e2d6: 5f2e 7fa7 2db1 65b3 6ff7 e58a 0297 27f8 ._...-.e.o.....'
- 803e2e6: eeeb f5b2 b7ae b62b e3e5 82bd e44d 01d9 ......+.....M...
- 803e2f6: f65f fcb2 cf0f fdbb 3874 bc18 efbb 76ad _.......t8.....v
- 803e306: 64bd 71ce e556 07af 9c60 72a7 1d3d cfdc .d.qV...`..r=...
- 803e316: f9b2 4467 9d60 e6f7 b2d5 4eda fe2f f6ea ..gD`......N/...
- 803e326: 7eaf ebfa bde1 8d7c e3c7 1c7b c7a5 f565 .~....|...{...e.
- 803e336: f7b5 dd3a b7cd 72d5 bf79 ca28 05a7 74f7 ..:....ry.(....t
- 803e346: 9ecc b2f3 ceea f5b3 6c97 ddd7 ab6c 6da7 .........l..l..m
- 803e356: dbb1 bf75 9b00 8e57 cb35 b2f5 175c e23d ..u...W.5...\.=.
- 803e366: 7bd0 0d68 5971 80f6 9f19 d3d6 b659 302b .{h.qY......Y.+0
- 803e376: 1b97 ea02 dfee 9c7f cf03 4742 4fbb ae97 ..........BG.O..
- 803e386: 1c09 ed55 7077 b8fc f328 58bc ea7f 8bee ..U.wp..(..X....
- 803e396: 3015 beff ca08 b31d 0d43 3daf 2c8c e830 .0......C..=.,0.
- 803e3a6: 58b6 8fef 54d9 3378 329b 558b 7bcf 0104 .X...Tx3.2.U.{..
- 803e3b6: 2046 cd9b 1fb6 e5f7 597e 927c ead1 20c1 F ......~Y|....
- 803e3c6: abee 74d5 79b8 e4e9 b3f0 8fc8 6eb3 d9b5 ...t.y.......n..
- 803e3d6: 68b3 00ee f5ce 8f13 57d9 caa6 00cd 7206 .h.......W.....r
- 803e3e6: 24a8 5fee 14df ceab 9ee0 10c5 6986 c28a .$._.........i..
- 803e3f6: f401 7cff 1210 060f 1876 17a6 8f8f e383 ...|....v.......
- 803e406: 540e 708d 0e02 f4ed f076 a8ee eae2 ba5b .T.p....v.....[.
- 803e416: 7ab9 4f77 9584 18f1 d234 c516 5f7c a66d .zwO....4...|_m.
- 803e426: febd f415 2d0e 7201 5584 3faf 94a2 4f2f .....-.r.U.?../O
- 803e436: f944 16e9 fa98 a0f2 3e23 3265 591f 2939 D.......#>e2.Y9)
- 803e446: 434a 6840 d832 1cbc db17 eb83 d959 5411 JC@h2.......Y..T
- 803e456: 0f4f 4640 c67e 0451 0372 5f01 1f80 5fab O.@F~.Q.r.._..._
- 803e466: 47f1 2f2a 7c9d 80dc 443a 8616 cb31 443c .G*/.|..:D..1.<D
- 803e476: f3d9 3abe 2bce a250 679f f039 015b b132 ...:.+P..g9.[.2.
- 803e486: 04da b342 d6aa ea15 a2a2 7eeb f219 f403 ..B........~....
- 803e496: d9c7 2033 eebf 4ab2 63f0 2c59 b541 3efa ..3 ...J.cY,A..>
- 803e4a6: 909d c520 e5a7 017a b772 c117 2f90 c969 .. ...z.r..../i.
- 803e4b6: f783 dca5 a095 b521 6007 686d 5592 7118 ......!..`mh.U.q
- 803e4c6: 23e0 22cc 5ea2 cd54 e935 1458 d254 39b1 .#.".^T.5.X.T..9
- 803e4d6: d8e8 e6b4 f6ed 1551 8a6d 076d 8e18 ddc4 ......Q.m.m.....
- 803e4e6: f277 e98c 1073 852e 9505 6b0b d641 4c7f w...s......kA..L
- 803e4f6: 4f84 054c 024e 2dd1 41f6 b00a aaca 27dc .OL.N..-.A.....'
- 803e506: 2495 bfd7 3f9f 776f 37a0 5536 a309 95bd .$...?ow.76U....
- 803e516: 3ece a4c2 3384 fe45 6ba9 75ba 0789 94a9 .>...3E..k.u....
- 803e526: 8f17 f3d9 7f72 5a34 be79 e628 819f 0223 ....r.4Zy.(...#.
- 803e536: b628 fb30 1e54 c308 ac30 9351 662c d2b2 (.0.T...0.Q.,f..
- 803e546: bc15 35de affd 579f 62b3 69fb 553a 2e86 ...5...W.b.i:U..
- 803e556: 6bd7 db9a 75ca b2cf 130d 56ac 341a 5849 .k...u.....V.4IX
- 803e566: 255a f884 f4d6 cf13 063e ffc4 dc9c 89b8 Z%......>.......
- 803e576: ccc1 c867 8f1a b165 2dcc 05a5 8f02 2729 ..g...e..-....)'
- 803e586: 40f4 cf95 ca61 23af 54db cfc1 2dcd e973 .@..a..#.T...-s.
- 803e596: dd7e 8d23 53d9 fff5 8680 a701 e4e9 12e9 ~.#..S..........
- 803e5a6: 8592 0566 0f08 c7cf 7dbd 2d55 84c1 15b1 ..f......}U-....
- 803e5b6: 4935 d18b fc0c be58 1968 edf7 800a 8354 5I....X.h.....T.
- 803e5c6: 0561 f5c3 7cb8 732e 2e57 ae4a af15 9c15 a....|.sW.J.....
- 803e5d6: 916a 0c1c 6aa5 fe5b 2d8a 3b2c 6bb9 96b2 j....j[..-,;.k..
- 803e5e6: 15ae 1b50 2ad8 5360 4240 5060 15b4 66d1 ..P..*`S@B`P...f
- 803e5f6: 5556 d30e db29 0a23 905d 05a6 e541 3e68 VU..).#.]...A.h>
- 803e606: 34fe 40c9 344c 9600 66d9 9857 4122 5472 .4.@L4...fW."ArT
- 803e616: 6d9c a8d4 24b0 4586 32c3 dbae f64d c604 .m...$.E.2..M...
- 803e626: 1890 fc4e f5a1 ead8 0d44 f3e8 0ed1 14a5 ..N.....D.......
- 803e636: b42d bead 2e6a e4fe 6764 9008 0aa5 9ada -...j...dg......
- 803e646: a0e6 0fe9 1f9d f798 7cc1 9526 e2ac e46d .........|&...m.
- 803e656: 28ce 788c 32ba c959 6a0a ca0d 0914 b9fc .(.x.2Y..j......
- 803e666: 5e99 364d 7f2f ae56 d536 9f76 f7ad a4f7 .^M6/.V.6.v.....
- 803e676: d99e d9e4 f5a2 ff74 ccb5 0bf7 d6b6 12c4 ......t.........
- 803e686: 7c78 3c7c 7aea ec00 5342 5963 ee3c 8fb5 x||<.z..BScY<...
- 803e696: 3e87 4522 ab9c 63a6 5a8f b684 5260 cbce .>"E...c.Z..`R..
- 803e6a6: 0f2f e6b4 7038 a307 d5c9 45e6 a72d fc5b /...8p.....E-.[.
- 803e6b6: f32d 951a 92e6 5ade 3e9a 976f b7ef d860 -......Z.>o...`.
- 803e6c6: ee7e d66f 974f 1e9d e854 86f4 eff8 d575 ~.o.O...T.....u.
- 803e6d6: 16db 2260 9007 fccb da8f 29cd df1e ce1a ..`".......)....
- 803e6e6: 05f6 01d8 f320 0162 7378 66d3 bd55 9d74 .... .b.xs.fU.t.
- 803e6f6: ea64 8fb1 13d6 8f58 ecab 5d0f 1bf7 4856 d.....X....]..VH
- 803e706: 1bfc 76ac 55f9 767d c0cc a796 fc50 d3da ...v.U}v....P...
- 803e716: 0863 2463 30f4 d434 1c14 11c5 0014 37e3 c.c$.04........7
- 803e726: 4fdb 0c79 6fa8 d968 1683 6c93 e9d0 8cdd .Oy..oh....l....
- 803e736: 7a03 b2f9 904c 0de1 dab4 bdb9 d181 f032 .z..L.........2.
- 803e746: 34b7 bbd9 0ac2 d3df f66c b687 c766 d5df .4......l...f...
- 803e756: 502c adb8 21d1 f7d0 b04d 2a82 3d02 5873 ,P...!..M..*.=sX
- 803e766: 0cc1 17eb 4816 ce1b b580 591f a609 5d4f .....H.....Y..O]
- 803e776: 80ab dcc0 3c93 b22e 341c a0c0 4683 f23a .....<...4...F:.
- 803e786: f6ea 9669 1fbd f174 3faf 8cba ea5b cb68 ..i...t..?..[.h.
- 803e796: 5833 e414 876a c78f d937 a6ec acbd a259 3X..j...7.....Y.
- 803e7a6: 6aa2 c814 f6c2 4d64 32a1 0d9d a387 7b9b .j....dM.2.....{
- 803e7b6: 02c3 619c 23d7 4e0a 1cdc 002a ee85 a6e6 ...a.#.N..*.....
- 803e7c6: 3419 13a0 a02d 1561 ab0c a52c b161 5b12 .4..-.a...,.a..[
- 803e7d6: 82f5 b331 3036 008a 17a9 773f ab7b 3114 ..1.60....?w{..1
- 803e7e6: 3d63 b07e 2f9c 01a3 91ff 5664 6a63 3b25 c=~../....dVcj%;
- 803e7f6: 31c2 0d34 1955 b14e 48bc a24d ba1a 04d7 .14.U.N..HM.....
- 803e806: 6b5d 22a1 aa43 0538 c287 cb07 ee55 a60c ]k."C.8.....U...
- 803e816: 5a01 0cbc d5ee c1f7 4c0b 02aa 783d 4297 .Z.......L..=x.B
- 803e826: b7dd aae1 bb88 a184 c87d a7b4 04e9 8265 ........}.....e.
- 803e836: a375 89e6 432b 6287 9a32 5e3c 804d 70f1 u...+C.b2.<^M..p
- 803e846: af31 80b0 e922 aaec 9965 2e77 c306 386c 1..."...e.w...l8
- 803e856: 142b df27 6760 0b7c 2d68 d24b cfb9 0f7b +.'.`g|.h-K...{.
- 803e866: 365b 9a83 3860 a3de 21c2 b07a 1f3e 2b01 [6..`8...!z.>..+
- 803e876: b23b ccc6 c0c1 5b49 bf00 165f 6ff6 e861 ;.....I[.._..oa.
- 803e886: 719d c11b cb49 6cd8 28b7 fbf2 7b5f 3ae5 .q..I..l.(.._{.:
- 803e896: 5e2f c7a0 91d1 4b66 1458 4a12 c8ea 7581 /^....fKX..J...u
- 803e8a6: 2729 cb38 5760 12c0 961a eddb 2cfc 9873 )'8.`W.......,s.
- 803e8b6: 9492 1986 5750 9498 9864 5224 dc42 30cd ....PW..d.$RB..0
- 803e8c6: 6998 c7f1 3b1f ecab 67a5 c252 1ff1 9b11 .i...;...gR.....
- 803e8d6: b550 bd87 2e5f b5b9 4b92 cbf2 3427 7892 P..._....K..'4.x
- 803e8e6: e551 b94a 5f24 b9ca 60b7 912a 5de6 f792 Q.J.$_...`*..]..
- 803e8f6: 20d7 81fc f5c4 a327 abdb e19b 1c64 c3af . ....'.....d...
- 803e906: e057 58ad d102 9a98 ca34 5d9e 3cf2 263f W..X....4..].<?&
- 803e916: 517a 593b 24dd f2c4 84da 0008 aab2 1d30 zQ;Y.$........0.
- 803e926: 02b5 3406 26ae b5c1 ae43 43b2 06d4 a183 ...4.&..C..C....
- 803e936: c99d 7d28 6750 f4de dcb1 1382 be6d 9728 ..(}Pg......m.(.
- 803e946: dbe0 9873 17b7 3473 8183 bb24 64f5 ed73 ..s...s4..$..ds.
- 803e956: 5ce5 047b 0855 36d2 74fc 9e10 ba2e ce50 .\{.U..6.t....P.
- 803e966: d246 940f c400 1f32 dfe8 3f36 2a26 4031 F.....2...6?&*1@
- 803e976: 4787 3d28 4907 3083 812b 813c 1823 e7c8 .G(=.I.0+.<.#...
- 803e986: 4f58 4ca1 2a66 36b6 b1d3 aa63 cba6 d54c XO.Lf*.6..c...L.
- 803e996: 2c74 aa9a 32e9 ff3d 7692 ec21 2240 f051 t,...2=..v!.@"Q.
- 803e9a6: 570b bf51 8853 f224 341c cf3e 9a41 d368 .WQ.S.$..4>.A.h.
- 803e9b6: 25e5 39ea 1338 5cf5 8e9e 3927 ace5 8400 .%.98..\..'9....
- 803e9c6: 18d8 f53f ad39 5e89 7d12 6c03 e3a0 4e0a ..?.9..^.}.l...N
- 803e9d6: 72be 4663 ba75 2fde d57a 0f63 c8dd abef .rcFu../z.c.....
- 803e9e6: bf3c b14c ddc5 fc23 0b69 66e4 c474 0b14 <.L...#.i..ft...
- 803e9f6: 66a1 5c13 5e3c 1fe1 e32b 480e c7d4 32f9 .f.\<^..+..H...2
- 803ea06: eddb f37e f85b fbd9 e7e4 dd8b c41e ee7b ..~.[.........{.
- 803ea16: 3266 1a46 3cca d6af ab62 0f92 199c 9f77 f2F..<..b.....w.
- 803ea26: ad07 2574 1175 9ea4 bb6a a700 db2f ec02 ..t%u...j.../...
- 803ea36: a75d 1c46 a03e 702d c01b 57ac 3f60 fc04 ].F.>.-p...W`?..
- 803ea46: aa20 ffdd e7e2 c69f 5b3f a727 dfb3 1f6e .......?['...n.
- 803ea56: efe1 bd3e 207f f87d 6f41 8374 6c8d 68d7 ..>.. }.Aot..l.h
- 803ea66: d429 a7a7 ec0b ba08 2a02 93a1 205b 39a2 )........*..[ .9
- 803ea76: dc53 13b6 db70 90b2 32c3 b767 d6a9 d83b S...p....2g...;.
- 803ea86: b0bd 6946 307f e77c e17d 57e0 4f40 7fe4 ..Fi.0|.}..W@O..
- 803ea96: 155d 9979 c075 5e2f eb14 580e 9d93 7ef7 ].y.u./^...X...~
- 803eaa6: baca 06b9 ff13 50f2 b56f 4671 85c3 ef96 .......Po.qF....
- 803eab6: 55e3 affc cde4 9f57 ecac a0e5 1f83 0021 .U....W.......!.
- 803eac6: 2d0f 5af8 ec7b 0798 4dcb 8866 c906 98f0 .-.Z{....Mf.....
- 803ead6: 883d 0b42 d467 0904 a0a4 6c1d 1499 9d0d =.B.g......l....
- 803eae6: 85ea 689c bad7 d87c f93b 5277 56d9 ada8 ...h..|.;.wR.V..
- 803eaf6: c725 6d1c b92d 8b42 3ee4 f10e 1d59 a717 %..m-.B..>..Y...
- 803eb06: 6513 706e 46f3 514b 244b 593b 1235 75cc .enp.FKQK$;Y5..u
- 803eb16: 6a62 de2e d35a f393 6bbb b9be 474f fcd3 bj..Z....k..OG..
- 803eb26: 7dad 9aba 9f41 013a 9db3 175f 6144 14b0 .}..A.:..._.Da..
- 803eb36: f2bd 2829 b149 de5b e848 55b7 7434 cefe ..)(I.[.H..U4t..
- 803eb46: 8b8a 8237 68ea 56f5 5d1c db45 d2a3 1798 ..7..h.V.]E.....
- 803eb56: cd17 5ea2 b227 db01 865b c8e7 5041 59b1 ...^'...[...AP.Y
- 803eb66: 4d90 428f a0e4 b362 9f70 a8a8 0276 e314 .M.B..b.p...v...
- 803eb76: e305 b611 c0b2 0e0d 1cbb d9a4 0f59 740f ............Y..t
- 803eb86: e261 9816 31b8 164a 0a11 f93d 0f22 9ea1 a....1J...=."...
- 803eb96: 95c4 6a47 2192 047f f1ed 3ae2 2d8b b313 ..Gj.!.....:.-..
- 803eba6: f7d2 322e 09dc 736b 0c5a 2eaf 8401 85d3 ...2..ksZ.......
- 803ebb6: bc04 6d1e ca59 124e ffb8 3770 379c 1928 ...mY.N...p7.7(.
- 803ebc6: 07fc c7d9 e987 5c8f b6bc 8448 629a 2e4c .......\..H..bL.
- 803ebd6: 9800 745a 4715 d30b 4d0e 4c50 251b 1a6a ..Zt.G...MPL.%j.
- 803ebe6: 60d3 55a2 9128 a12d 87c9 be7e 36ad b1e0 .`.U(.-...~..6..
- 803ebf6: 7759 2fdc 2458 3d3e 8041 0084 f16a e461 Yw./X$>=A...j.a.
- 803ec06: fa1e 29b4 141a 3490 a71f d540 cfe2 3d44 ...)...4..@...D=
- 803ec16: 824a 3345 a943 799b 6fb6 0aa5 18ad d722 J.E3C..y.o....".
- 803ec26: a289 bc83 6c5a 0453 6ef2 a14e 9883 421f ....ZlS..nN....B
- 803ec36: d4b9 900a ccd8 4b8e 0cc7 0f63 0fc2 6e56 .......K..c...Vn
- 803ec46: d978 9e3b cb1a 1d5a 7995 38b1 2980 b595 x.;...Z..y.8.)..
- 803ec56: b87b f6a9 73bc 6e1c b6bb bd3a a4d6 3ccd {....s.n..:....<
- 803ec66: 2403 bc5b 2db5 9505 ee29 d529 39c3 a141 .$[..-..).)..9A.
- 803ec76: c705 88aa 7a26 d815 6b67 64f2 0264 bc5c ....&z..gk.dd.\.
- 803ec86: aeae ef77 cef3 c4c1 6e97 496b 50f1 a39d ..w......nkI.P..
- 803ec96: f2f0 0d77 28e4 423b 21d6 63c4 022e a1f4 ..w..(;B.!.c....
- 803eca6: 9c45 a0eb 7599 c2bd b486 3db3 a639 11a8 E....u.....=9...
- 803ecb6: d415 d781 da26 332f 8abe 03a2 17ca 1b3c ....&./3......<.
- 803ecc6: d108 82c0 aca6 1bb2 82c7 354c db97 b860 ..........L5..`.
- 803ecd6: e4a9 fd2a 1efd 444c 2f4c d440 4752 5eb7 ..*...LDL/@.RG.^
- 803ece6: b898 7162 53a4 73eb 969f 6d53 dba0 6809 ..bq.S.s..Sm...h
- 803ecf6: abd0 9377 1b8c a0d4 2011 2ce8 c0f8 b8f6 ..w...... .,....
- 803ed06: 8e43 dbc7 98e4 5d2e 8221 075b cb05 3986 C......]!.[....9
- 803ed16: 8aa6 642d a098 4cb6 2d10 0d44 4db3 e56a ..-d...L.-D..Mj.
- 803ed26: 3c17 f667 83b3 a25e d637 5370 8932 23b9 .<g...^.7.pS2..#
- 803ed36: ed84 8bd0 f619 bfe7 ba9a 25f3 f2e2 33ae ...........%...3
- 803ed46: 05e1 553f 905d ccbf 6ec2 1588 9073 a888 ..?U]....n..s...
- 803ed56: 9553 b53c a546 19d8 c3c9 5346 876f 1349 S.<.F.....FSo.I.
- 803ed66: 7315 1692 5fa9 536e c8ea 6968 2455 e795 .s..._nS..hiU$..
- 803ed76: a09a 9ba4 c3a5 d939 e24d 1216 ab2d e0bc ......9.M...-...
- 803ed86: dff9 ae0b 678c 8fb2 3d7a 16c6 ef19 4f24 .....g..z=....$O
- 803ed96: 2d85 ccca 95e9 447c a15b ec83 c769 6b1d .-....|D[...i..k
- 803eda6: edae 6db8 7584 469f 9481 d939 80b3 5016 ...m.u.F..9....P
- 803edb6: 4933 9a34 0798 2dea f848 d86b 60a9 48d0 3I4....-H.k..`.H
- 803edc6: 5872 f343 5a31 bbda 0b45 f1f5 e0b9 fa76 rXC.1Z..E.....v.
- 803edd6: b114 50a8 33b3 6129 42a5 9f4c 5dc8 180c ...P.3)a.BL..]..
- 803ede6: cb0f 7039 64c9 4166 5093 eb24 a132 4450 ..9p.dfA.P$.2.PD
- 803edf6: 45b3 55ec 6eb1 5348 b609 61ad 0efb 1a1d .E.U.nHS...a....
- 803ee06: 6b9d adb4 5e79 a3b8 b4df c00d 8af1 825c .k..y^........\.
- 803ee16: a855 7d09 fc8a ea38 b9e5 dc99 dd5c 0f82 U..}..8.....\...
- 803ee26: 4a4e b62a 6f29 39dd 891b 9360 dad7 ad82 NJ*.)o.9..`.....
- 803ee36: 083f 944c 8865 c70b 9ed2 aaec 985e b64f ?.L.e.......^.O.
- 803ee46: 38d9 5100 0a86 af1c 3ec7 91f8 5420 1d0e .8.Q.....>.. T..
- 803ee56: bbf8 0bec b8b4 1b5f 8138 0336 6ac5 e054 ......_.8.6..jT.
- 803ee66: 91df 00a2 a37a ff2e 6c77 dbf6 7cdc bb23 ....z...wl...|#.
- 803ee76: b448 824b 0331 91bd 04c4 6e4c 49de b1fd H.K.1.....Ln.I..
- 803ee86: 8ca4 c021 5b90 349a 84b7 1973 cc0f d268 ..!..[.4..s...h.
- 803ee96: 409f 0e05 740f ecbb 0a48 c433 c615 ef03 .@...t..H.3.....
- 803eea6: 515f 15b4 2539 1582 5193 7f0e 22f7 aa43 _Q..9%...Q..."C.
- 803eeb6: c515 48db 4018 b34c 08a3 caaf 564e 5e3f ...H.@L.....NV?^
- 803eec6: b860 af74 ac04 e803 fc04 642b dd31 1d27 `.t.......+d1.'.
- 803eed6: 07e0 373b 3ba9 3123 dd53 a3cb da70 79ea ..;7.;#1S...p..y
- 803eee6: e8be c0e1 1041 2af2 975b 679b 970c d6ae ....A..*[..g....
- 803eef6: 6db0 94d7 0613 b9c7 dfe5 8433 42f0 2f18 .m........3..B./
- 803ef06: a206 3f10 7070 2244 d775 25ab 09c6 cd10 ...?ppD"u..%....
- 803ef16: de4a 8365 57b1 d354 c98b 0264 94de 7819 J.e..WT...d....x
- 803ef26: 330d f8d8 d542 dbc2 665f 555e 9816 e3bc .3..B..._f^U....
- 803ef36: 613d 520e 1761 d52e d72d d58f bac9 0aea =a.Ra...-.......
- 803ef46: d6ad d7cb 66ce d10b 0780 d7d9 6896 87db .....f.......h..
- 803ef56: 25e7 cc6d 9382 7e12 c306 0c72 272a a99d .%m....~..r.*'..
- 803ef66: e99d 35cd b86c 37a9 82d5 e8d3 8e17 44f6 ...5l..7.......D
- 803ef76: 2a31 efd7 0e92 10fb 9b98 13e2 ac1b bc7c 1*............|.
- 803ef86: 2f98 f5b2 f153 e0b7 ff86 bc0a 85d7 886f ./..S.........o.
- 803ef96: fc4f 26fd 4d87 4c50 5eec 316c 1f1c 0abc O..&.MPL.^l1....
- 803efa6: dddb d5cf 021a bb65 cf17 881b c917 0eff ......e.........
- 803efb6: e282 ad61 a3bb dbb8 e0e1 179d dd0c 3dd2 ..a............=
- 803efc6: 974d 177b ef9a 88b6 becd 5bae 6264 30cc M.{........[db.0
- 803efd6: 4206 e390 8401 f754 6504 da23 01ab 60da .B....T..e#....`
- 803efe6: fa36 0af5 c522 2efd c830 6c29 e32a 3fee 6..."...0.)l*..?
- 803eff6: 2def d1bb 965a c1d6 be2e bf7d 201d 4542 .-..Z.....}.. BE
- 803f006: dcaa e781 3ada 6fb5 822d f32f 6d37 402f .....:.o-./.7m/@
- 803f016: 3f5c 1040 2302 a39a 74ee 28b8 e28a aa98 \?@..#...t.(....
- 803f026: 3961 d13c 3609 b10f 8e02 830f 9761 39be a9<..6......a..9
- 803f036: c15a 0cf2 4b04 7aab bd45 6dc6 e898 8c01 Z....K.zE..m....
- 803f046: 368d 1ae9 6039 b225 c1b8 d53f 41e6 0130 .6..9`%...?..A0.
- 803f056: 032b a1a5 0b6f a4c7 8e95 fef1 d9cd 37d4 +...o..........7
- 803f066: 19b8 a4cc 9d67 65d1 8632 7368 6d05 a1d0 ....g..e2.hs.m..
- 803f076: f240 c623 d270 8eb1 8e5e b262 8885 dc02 @.#.p...^.b.....
- 803f086: 2e73 7b72 23fa d3ce 7be8 000a b415 f2c2 s.r{.#...{......
- 803f096: f01c 9413 1d43 6e94 c83d ea09 1680 d302 ....C..n=.......
- 803f0a6: 35e2 5b68 82d2 bb72 f9e7 0e1c a42d 8f9b .5h[..r.....-...
- 803f0b6: 8333 5f9a edb3 b71a 925f c768 b699 85a6 3.._...._.h.....
- 803f0c6: a5c9 9b57 ed62 637d 11e2 2a63 d485 f6ed ..W.b.}c..c*....
- 803f0d6: 8a5b f132 8ada 1404 2b6b c428 2b6a 9312 [.2.....k+(.j+..
- 803f0e6: ada7 4c6c 5c10 686c c2ac 8943 73e7 aa38 ..lL.\lh..C..s8.
- 803f0f6: 371a 3f12 2745 8c77 d431 5183 927d 3a43 .7.?E'w.1..Q}.C:
- 803f106: b317 2fe5 e58f 6612 e016 9544 db11 adae .../...f..D.....
- 803f116: d627 862a ca59 1dbe 564d 7cc1 4103 7968 '.*.Y...MV.|.Ahy
- 803f126: 05f1 740e 36f1 4eb0 7e3b 2f6b 85cc 19d8 ...t.6.N;~k/....
- 803f136: fc88 e4b9 886c 85fd 4f7d 09b2 a03a d67d ....l...}O..:.}.
- 803f146: 0ef9 0a5c 6485 c06a cae9 b0f7 5f29 a620 ..\..dj.....)_ .
- 803f156: 8e95 4d35 3087 81b3 0136 b749 f406 4c1d ..5M.0..6.I....L
- 803f166: 2779 3964 fd08 78c1 3046 9e97 50f1 4694 y'd9...xF0...P.F
- 803f176: 8f9e 4661 93b0 e70f cc52 4d5a e1bf b7a6 ..aF....R.ZM....
- 803f186: b508 9a1f 32ee 159b 34f6 ff4a 740e 1845 .....2...4J..tE.
- 803f196: c57a 7b67 ac94 1ec1 cf28 6cda aa7f 2ab5 z.g{....(..l...*
- 803f1a6: 9dff e988 4d11 b81d 513a 38be 9578 0433 .....M..:Q.8x.3.
- 803f1b6: eee8 3f43 9cbc f1ab b85b 4041 a8ce 993f ..C?....[.A@..?.
- 803f1c6: a400 7df5 5869 d451 744f 04e9 8c6a f9cb ...}iXQ.Ot..j...
- 803f1d6: ae7c 1a7a 420f 2cc9 8e42 e333 52b8 6b50 |.z..B.,B.3..RPk
- 803f1e6: 1c2c e3c6 c7f5 0b00 4cf6 bf71 e1f2 43b1 ,........Lq....C
- 803f1f6: 20e4 ac57 0052 ce1d f909 5ff9 e68f 9025 . W.R......_..%.
- 803f206: 0d49 4284 757d 6575 59cc 495d 6b7a 9c81 I..B}uue.Y]Izk..
- 803f216: b080 90b8 0a18 57c4 6490 21a3 4395 9b8e .......W.d.!.C..
- 803f226: 0d44 c199 5553 559c 080f 1caa dd98 128d D...SU.U........
- 803f236: 6662 1df6 de8e ea44 e8db c1cd ec0d 4084 bf....D........@
- 803f246: 37b5 3f14 e45e 8068 b2fd 5d80 0a90 480e .7.?^.h....]...H
- 803f256: 233a 11ca 1651 0331 0913 528c 5762 2401 :#..Q.1....RbW.$
- 803f266: ec05 30b4 1527 cd58 51c8 5803 eb6f 67ec ...0'.X..Q.Xo..g
- 803f276: b853 5452 b492 e49b 63f8 9d8b d965 c881 S.RT.....c..e...
- 803f286: 1f3d 8c5e 0cea 35d9 b301 69da a423 6886 =.^....5...i#..h
- 803f296: 6bb2 3088 beb8 aa39 1412 1a69 d2e8 5106 .k.0..9...i....Q
- 803f2a6: c872 0b3b c712 046f 0942 1761 5314 0da9 r.;...o.B.a..S..
- 803f2b6: 0d0f e1ca 0c01 593b 0e31 be61 c09b 0750 ......;Y1.a...P.
- 803f2c6: c793 ca29 67f7 933e b4d9 617e 5182 226d ..)..g>...~a.Qm"
- 803f2d6: bd78 4a53 f7ae c9c5 1771 ca9c 432d bc48 x.SJ....q...-CH.
- 803f2e6: f6b4 70b7 f59a 08a0 088f a761 3060 f96c ...p......a.`0l.
- 803f2f6: 2acd d866 4ebf 986a 87ff 8c17 3d75 7767 .*f..Nj.....u=gw
- 803f306: 5528 ddfc 90e6 531b 28a2 9f8f 0275 cd83 (U.....S.(..u...
- 803f316: 7fba 6c6f 4bed bca6 ca77 03c6 567b ba13 ..ol.K..w...{V..
- 803f326: e841 05b6 3043 015a 8820 8de2 cbc5 0c00 A...C0Z. .......
- 803f336: bf3f 477c 074b 11a1 e6fa 4d48 06ea f394 ?.|GK.....HM....
- 803f346: 8aed 2c77 34cc 65e2 e949 c509 3494 35bb ..w,.4.eI....4.5
- 803f356: 4a42 1293 0120 3124 af74 0ed7 470a 3d04 BJ.. .$1t....G.=
- 803f366: da51 a7d0 3e0d 894b 76e4 1092 c822 7433 Q....>K..v..".3t
- 803f376: bde8 88ec 0114 6ea4 eba4 7230 878a 0988 .......n..0r....
- 803f386: d714 a33e 151e 9b39 8845 cdc3 5c28 e0d6 ..>...9.E...(\..
- 803f396: 6b68 420f 3f84 8833 3b2f 9825 884e 0b44 hk.B.?3./;%.N.D.
- 803f3a6: 4dd1 f870 0f4b 4bc9 9e8a 0036 988a d14c .Mp.K..K..6...L.
- 803f3b6: f580 5314 7f9c f41e 335c 5b9f ecee e517 ...S....\3.[....
- 803f3c6: 5efa 74d3 a61e 815e 618f 4315 0ab3 58bb .^.t..^..a.C...X
- 803f3d6: ea71 9290 e910 08f8 f3f3 47b4 9111 2c11 q..........G...,
- 803f3e6: e61e d8f0 f903 b198 b9ac 4005 7700 0d50 ...........@.wP.
- 803f3f6: 3f9c 312c e3b9 1a09 2200 05b0 a386 2a30 .?,1....."....0*
- 803f406: ed42 a686 4cb2 3d5d 4a75 f063 bf51 c13e B....L]=uJc.Q.>.
- 803f416: 0b8d 091c 93e2 4268 a987 4e97 f6b2 2f8a ......hB...N.../
- 803f426: cc60 60ef e164 b9e0 f1f8 1180 1c20 8e1b `..`d....... ...
- 803f436: 43c2 3cf4 3aac f360 9a7f 372d ec8b b8bd .C.<.:`...-7....
- 803f446: 7f3a 0d7b 2a00 0d61 d452 fc46 eead fed1 :.{..*a.R.F.....
- 803f456: 15f5 848b 852c 320f 1bb9 538b d052 233c ....,..2...SR.<#
- 803f466: cd5d 35d7 2400 fe9d d778 e029 2f90 40ac ]..5.$..x.)../.@
- 803f476: 307b 415e 9643 baf6 3234 a35c c149 2a8c {0^AC...42\.I..*
- 803f486: 1830 7256 64c5 3e96 f2b9 e00c 3e77 b52a 0.Vr.d.>....w>*.
- 803f496: 8b3d fc6b 3993 1348 1cb3 42ff 75e0 58a0 =.k..9H....B.u.X
- 803f4a6: d474 a04d 49a9 5cdc e7a6 854a afbe 2979 t.M..I.\..J...y)
- 803f4b6: 7d6c 5b66 6345 08a5 9e34 0273 7d20 0a72 l}f[Ec..4.s. }r.
- 803f4c6: 934a ef5b 67cd e0a6 b934 55ad d219 fe06 J.[..g..4..U....
- 803f4d6: 8a56 f134 e6bf ec2b 9a27 8611 513a b14a V.4...+.'...:QJ.
- 803f4e6: 5539 d18c 553a f08a 2f4b 23ec 02c6 0989 9U..:U..K/.#....
- 803f4f6: 2ab8 22de b743 8d69 5545 f577 fdc4 0ca1 .*."C.i.EUw.....
- 803f506: cb4d 44a6 3c69 1636 3bf5 f9ce 192c 65ce M..Di<6..;..,..e
- 803f516: 5e2d 2b28 298d 94c7 99a6 d6d1 93a4 28d2 -^(+.).........(
- 803f526: db05 1f81 3081 b066 2444 b1d7 e34a e7e8 .....0f.D$..J...
- 803f536: dbab d85b b035 abc0 30f8 4ba3 4edb 946e ..[.5....0.K.Nn.
- 803f546: 9257 1255 ba48 ca8a c917 568a c509 f23d W.U.H......V..=.
- 803f556: 136c e340 a3a5 3921 a505 94af d300 a667 l.@...!9......g.
- 803f566: 34e0 f5b9 31f1 ed99 28d2 3588 a34a 2e22 .4...1...(.5J.".
- 803f576: 68f3 6893 b168 0176 5292 cd8a c689 fe84 .h.hh.v..R......
- 803f586: 4aa7 4935 9ca3 0c3a 2b79 1821 4c91 b56a .J5I..:.y+!..Lj.
- 803f596: a09a dba1 f2ce 7389 2aba 738b 75db 4e81 .......s.*.s.u.N
- 803f5a6: 6f2c 8a74 3125 6b3d 154e b9d2 534e e4cc ,ot.%1=kN...NS..
- 803f5b6: eb33 e10c 94f2 49f8 1254 ef2c 9e2b f22b 3......IT.,.+.+.
- 803f5c6: 86ae 2612 b8ad 95ce d77d 2b5c 0eca 66ad ...&....}.\+...f
- 803f5d6: 20fb a126 e0d5 a5c6 249b d38c 8118 7b6c . &......$....l{
- 803f5e6: 54d0 b53f e8c2 491a 7ac8 29bd 9187 83d1 .T?....I.z.)....
- 803f5f6: 5289 432d faed 684b d72b d792 6914 7cd4 .R-C..Kh+....i.|
- 803f606: 2b7e a66e 0b58 be44 2b54 a676 79d8 9d8d ~+n.X.D.T+v..y..
- 803f616: e3a5 ca1c 94a7 2b9d 18a8 509f be41 433c .......+...PA.<C
- 803f626: 6e7b a571 d9c1 dfe5 3cd8 466b 35d1 2169 {nq......<kF.5i!
- 803f636: 6d54 4c17 09c0 e925 7c50 b6b3 378c 5468 Tm.L..%.P|...7hT
- 803f646: 4c29 59e6 0131 6f77 67ac b59b d4a5 6738 )L.Y1.wo.g....8g
- 803f656: 1205 aa77 4903 5db2 34cb 163c e9e7 2510 ..w..I.].4<....%
- 803f666: 5a2b 596d 78ab 5b52 35c6 3094 81e9 4c9a +ZmY.xR[.5.0...L
- 803f676: f2ee 3b89 adf4 c7f3 eddd 0c64 4601 21a8 ...;......d..F.!
- 803f686: e6e2 f09c 58b3 6637 93b7 e9c6 16b5 b91a .....X7f........
- 803f696: 5a9e e589 9d4b 94d5 2f90 9985 0ed7 d469 .Z..K..../....i.
- 803f6a6: 7e7c 6e2b 58a6 440b 54be 762b d8a6 8d79 |~+n.X.D.T+v..y.
- 803f6b6: 6bb5 78ac 1ab4 5635 505c 6e31 2952 f2b5 .k.x..5V\P1nR)..
- 803f6c6: ed0c c5b9 0695 9767 637f 67f3 ac68 f9ab ......g..c.gh...
- 803f6d6: f6ec 6dca 8913 b020 486a 420b b1a4 7eb4 ...m.. .jH.B...~
- 803f6e6: 77ac 8630 1b85 b608 55a7 272a b3d7 3cdb .w0......U*'...<
- 803f6f6: 937b e2ba e71a aba8 47a0 421d ea92 c730 {........G.B..0.
- 803f706: 56b0 a190 52c3 62af 5455 e558 7ea4 8a0a .V...R.bUTX..~..
- 803f716: 192b cad2 3c69 0d9c daf2 ee32 2efa c99b +...i<....2.....
- 803f726: 37f2 cb68 0269 df16 5e74 150b 3a52 dd29 .7h.i...t^..R:).
- 803f736: 3348 1c5d 8d0c f204 8c25 0a2a f1ba 9f32 H3].....%.*...2.
- 803f746: c440 3667 6263 34ca ac8d d22f 8b8c 7329 @.g6cb.4../...)s
- 803f756: 3346 8aed 4027 51b0 04eb 14a5 26bf 109d F3..'@.Q.....&..
- 803f766: 6e16 0857 5941 f8c5 86ac 1c65 2bcf 8e7b .nW.AY....e..+{.
- 803f776: 999a 07cd bbb9 4332 0cd5 7489 4b42 3ac4 ......2C...tBK.:
- 803f786: 2a46 eb37 3898 4514 abe5 b228 18d1 93dc F*7..8.E..(.....
- 803f796: cd71 ab66 6a48 a39c e266 754e 48e4 d46d q.f.Hj..f.Nu.Hm.
- 803f7a6: 0d32 c52f 3a79 c932 568a 6aa2 4f15 9d6a 2./.y:2..V.j.Oj.
- 803f7b6: 86b8 2612 78ad f98a cddd 4350 d50f 947f ...&.x....PC....
- 803f7c6: dd5f 0d5e 7379 17b5 e737 9aa4 b645 bb31 _.^.ys..7...E.1.
- 803f7d6: 349d 0d29 d8d4 2b54 1cb1 6d3c f354 8c85 .4)...T+..<mT...
- 803f7e6: 8a2a f3fb 205a 9a8d 6fcf cdc5 6b14 0061 *...Z ...o...ka.
- 803f7f6: aa5f 3b15 ec53 c6bc 95da 8c53 a372 8a7e _..;S.....S.r.~.
- 803f806: 2a0b 4dc6 a1da be56 4b5d c5c5 0695 36e7 .*.M..V.]K.....6
- 803f816: 427f d557 3f9a 5d43 0e3d 7cb2 ab12 562b .BW..?C]=..|..+V
- 803f826: ac0d e2ae 2346 a58d 63f5 e3bd a2ad c028 ....F#...c....(.
- 803f836: e552 9f32 1f8c 6fc7 8bb2 c6a4 0a39 ea2b R.2....o....9.+.
- 803f846: 8753 d491 9c4e 1867 ca2c e1d2 5549 62b3 S...N.g.,...IU.b
- 803f856: 5717 a93b a2ab 4a0a b492 9aaa 8ddf a307 .W;....J........
- 803f866: 6ed8 e6cd bba3 6e91 85bf 9631 e84e 9c59 .n.....n..1.N.Y.
- 803f876: bea3 6e5c 4d2b 7a52 a9aa 36a1 b92a 5ade ..\n+MRz...6*..Z
- 803f886: e5c8 18cb 1525 e675 41f5 2912 dd9f 9586 ....%.u..A.)....
- 803f896: d529 e63c 50be 5e1b d4a6 4d59 abb5 08a7 ).<..P.^..YM....
- 803f8a6: 46d9 14ed 5395 9b5c 47b4 bc5c 375d a545 .F...S\..G\.]7E.
- 803f8b6: fb15 1b33 a13f e299 cfc6 4c50 ddf9 78d5 ..3.?.....PL...x
- 803f8c6: 9b52 49a1 b069 8a62 8cda 92f4 6f56 4bd6 R..Ii.b.....Vo.K
- 803f8d6: de18 c7c0 4c2a a614 47fa 4ae4 f445 f822 ....*L...G.JE.".
- 803f8e6: 0830 a5fc 2744 809d 4a09 9728 79e0 71a3 0...D'...J(..y.q
- 803f8f6: a920 56eb ed53 bdcc a678 0844 0d61 2b20 ..VS...x.D.a. +
- 803f906: 047b 5331 d83f 30df a266 b36f a2a1 a8d0 {.1S?..0f.o.....
- 803f916: 0f98 86ae c719 9a75 18db 46e1 62fe dd0b ......u....F.b..
- 803f926: b89c 2f6a ae41 3bb8 484f 4371 f137 2122 ..j/A..;OHqC7."!
- 803f936: ced5 06dd 016f 6e1f abee 4ec1 3887 6838 ....o..n...N.88h
- 803f946: 3118 7380 fca7 405c ac7f 0807 f0f0 14fe .1.s..\@........
- 803f956: f2cf 2b4b d7d7 70d7 4cfc feae 88d6 2a3c ..K+...p.L....<*
- 803f966: 3104 7020 6ee8 18b8 8596 160d 26d6 ade1 .1 p.n.......&..
- 803f976: 2603 0534 b20e 0b56 1023 a113 a094 e996 .&4...V.#.......
- 803f986: 0cc5 e47b 7d23 9f65 3b69 690c 3d34 23d5 ..{.#}e.i;.i4=.#
- 803f996: 7c98 54f4 73a2 ed13 8349 d047 d482 d7ed .|.T.s..I.G.....
- 803f9a6: f01f a65f 9f61 21c8 7173 a716 6b26 ac99 .._.a..!sq..&k..
- 803f9b6: 5d44 1f0f d655 c663 0f14 83da 5c00 5ac6 D]..U.c......\.Z
- 803f9c6: 5a62 5cc3 0e1a 6714 35c9 dbc8 db14 4ba9 bZ.\...g.5.....K
- 803f9d6: 3137 41b0 aea3 1f4d 69fc f2a3 da0c 4278 71.A..M..i....xB
- 803f9e6: a356 6dad a091 3839 837e 0a00 e35d 37b8 V..m..98~...]..7
- 803f9f6: 8f13 45c4 28e8 ed45 121e a41f 5a64 6423 ...E.(E.....dZ#d
- 803fa06: c43f 6361 5d8e 6439 231a 256b 9baa aba3 ?.ac.]9d.#k%....
- 803fa16: 2121 a36e 7cb7 d53a 450c 06a2 60ed 698a !!n..|:..E...`.i
- 803fa26: 01a8 84ee 3bc6 2615 db05 eeff 99a2 6553 .....;.&......Se
- 803fa36: 024f b440 3547 4871 9240 838a 2d32 76f6 O.@.G5qH@...2-.v
- 803fa46: c32b bb4f 5295 0f16 d3bf ac95 1ef6 8c16 +.O..R..........
- 803fa56: 0f97 8bb5 8073 d105 3c75 61ca 21a4 e204 ....s...u<.a.!..
- 803fa66: e069 c63d 439b 27f3 e65a 7567 aa7e fe5e i.=..C.'Z.gu~.^.
- 803fa76: 2e12 71ad 5327 bf7e 2209 31fc 9f60 e382 ...q'S~..".1`...
- 803fa86: 4113 0dfa 7137 2bca 5635 b9b3 6d80 ad17 .A..7q.+5V...m..
- 803fa96: 549e ca57 121a 4f75 2432 f1ad 0f23 4db6 .TW...uO2$..#..M
- 803faa6: 816d c1af 68a6 3a7a d82b 5c1f f3e3 1a1f m....hz:+..\....
- 803fab6: 5fcc f00c 012f 12bd 580b 03b9 da57 6259 ._../....X..W.Yb
- 803fac6: 05e1 a2da 4fc4 361d 97b0 604d 5b28 4182 .....O.6..M`([.A
- 803fad6: fd94 5470 2792 1201 daac d654 198d 83d3 ..pT.'....T.....
- 803fae6: c5a7 3043 5f5d 5f5c 8f67 9dc5 3a46 b5c2 ..C0]_\_g...F:..
- 803faf6: df4f 5301 ce17 7766 3290 6c74 0e01 7504 O..S..fw.2tl...u
- 803fb06: 3787 dd57 78d1 eddc 075f 3897 429d b5ae .7W..x.._..8.B..
- 803fb16: 08a1 3f1b 9ba9 745d 0738 c03a 573f e636 ...?..]t8.:.?W6.
- 803fb26: c756 ee5b 4030 19c8 2e72 f802 8f58 c0a1 V.[.0@..r...X...
- 803fb36: a64f bc18 94ea 15e2 7d6f e741 c572 f062 O.......o}A.r.b.
- 803fb46: 0820 8af3 1a79 4dc7 1df3 10b2 24e0 4c90 ...y..M.....$.L
- 803fb56: b0fb 89c5 dcf2 a3ed 56f8 4b9a 921f 8875 .........V.K..u.
- 803fb66: f9cf 10ab ccd0 7745 4572 ae07 d3a3 8e42 ......EwrE....B.
- 803fb76: f230 0a0e cf60 94af 807c 8f2b 5cbd 7327 0...`...|.+..\'s
- 803fb86: 48a9 d882 1b1a d74a ea41 536b f848 d04e .H....J.A.kSH.N.
- 803fb96: efe6 f437 487d 1c11 5b8e c12a a7e1 1203 ..7.}H...[*.....
- 803fba6: 8bd4 c29c 4971 2ed8 b73c e785 3836 e40d ....qI..<...68..
- 803fbb6: 77e1 96f8 7d50 eb64 9ea7 8a54 20e9 1a92 .w..P}d...T.. ..
- 803fbc6: fd50 382b 75cc 50cc 1f6d 8aa8 41b1 8ec9 P.+8.u.Pm....A..
- 803fbd6: 08fb 310f bf15 c795 f462 16e1 ed7d 4f05 ...1....b...}..O
- 803fbe6: c056 2dd5 9f74 3f1a 4529 4747 99ef 2691 V..-t..?)EGG...&
- 803fbf6: 4003 056c a991 39fc 6344 6a4d cde0 8e21 .@l....9DcMj..!.
- 803fc06: 3416 f82d b317 fa74 ddac 6638 8815 a29c .4-...t...8f....
- 803fc16: fcf5 dea7 5a47 fbfd 2d09 277d 5e3c 10e5 ....GZ...-}'<^..
- 803fc26: 0a9e 8fb1 8589 a463 6f17 63ea 0648 7e03 ......c..o.cH..~
- 803fc36: 027e 0efc c8f2 7fc4 cf59 9b76 1ffb e9ee ~.......Y.v.....
- 803fc46: a015 8972 1f97 0bc8 fe4a 8fcc 2ad8 a378 ..r.....J....*x.
- 803fc56: 3c03 00ac 53da 0587 f520 5f37 ad10 257c .<...S.. .7_..|%
- 803fc66: 2838 a8e4 62c5 cee2 8f6d f0f1 8c33 9c01 8(...b..m...3...
- 803fc76: dbf8 79f1 d4a2 d630 da3d ae2a de22 45a8 ...y..0.=.*."..E
- 803fc86: 14e5 9098 e156 a842 def8 9637 8026 47bc ....V.B...7.&..G
- 803fc96: 7869 0527 2c8f fef2 63bd 3741 e171 0864 ix'..,...cA7q.d.
- 803fca6: c6ed 4e00 3cd1 f430 a826 48a7 3833 ac38 ...N.<0.&..H388.
- 803fcb6: 9c4e 6bdb abfc 9555 5735 3972 d11a 9641 N..k..U.5Wr9..A.
- 803fcc6: 7f98 cd9f 1d92 ec9a 6ba8 c98d 7548 a1a2 .........k..Hu..
- 803fcd6: 3292 1aed 9daa 77cb e06e 7a86 f25a 438c .2.....wn..zZ..C
- 803fce6: e3a8 981b e5e0 2920 2fde 1e1b bd42 7be6 ...... )./..B..{
- 803fcf6: 3d66 8efe 4857 0d82 bac3 b60c 6404 49ec f=..WH.......d.I
- 803fd06: 42fe 8955 ac03 8ab2 6dd2 1824 07cc 7355 .BU......m$...Us
- 803fd16: a581 3b71 77b2 341c 5723 5f03 762e 40b8 ..q;.w.4#W._.v.@
- 803fd26: c231 df57 02ba d470 9fef 3d1c 21d7 be2b 1.W...p....=.!+.
- 803fd36: dae0 970b 8b47 b630 7521 2195 4f63 4df3 ....G.0.!u.!cO.M
- 803fd46: 2aa0 b6e0 4108 d4c1 8b22 b036 c713 e628 .*...A..".6...(.
- 803fd56: 5d2a b4ce 0a15 c1c3 77cf 1dbe ecae 7f89 *].......w......
- 803fd66: a32f 9284 fd45 a387 7746 1950 fc20 496a /...E...FwP. .jI
- 803fd76: 34a6 f87a f510 27c3 d119 26e8 7794 01da .4z....'...&.w..
- 803fd86: 3c4f 5568 70c2 a9bf 3c45 aad8 0b93 44be O<hU.p..E<.....D
- 803fd96: 94e8 b106 b254 80a9 a33a 2dfe da1e 9c65 ....T...:..-..e.
- 803fda6: e327 0877 69c0 737e 44f4 6c43 7540 e5e8 '.w..i~s.DCl@u..
- 803fdb6: 1924 c310 e6bf 3428 5cb4 753b a61e e46d $.....(4.\;u..m.
- 803fdc6: 0fde d725 55ed e3c0 cbcf 2f8b 36c0 1970 ..%..U...../.6p.
- 803fdd6: 5c08 0303 5357 38bc 22f9 d291 2631 496d .\..WS.8."..1&mI
- 803fde6: eea3 aba7 5929 a38b 55f1 faf7 ff0e bfdf ....)Y...U......
- 803fdf6: 5b45 ba31 343a 332a 54bc 1b53 0d94 073e E[1.:4*3.TS...>.
- 803fe06: 8f04 2945 ca82 8188 c34f 8e30 e2c2 394e ..E)....O.0...N9
- 803fe16: 9b9a d01f 0f86 5297 21ee d383 bda6 92d7 .......R.!......
- 803fe26: 863e 8eb3 05c9 fc1a 9f8c 2d3f 1df7 36c6 >.........?-...6
- 803fe36: 51b4 ab5b 12a2 7fc6 63e2 21c3 fe85 b7bf .Q[......c.!....
- 803fe46: edff c370 6da3 a0f8 7822 e6b1 a2c5 825a ..p..m.."x....Z.
- 803fe56: 50ab cde7 3bbb ce58 c5c8 704b 37a2 84a8 .P...;X...Kp.7..
- 803fe66: 5287 09d9 ae93 1518 4f37 c1e0 0cd5 9d0d .R......7O......
- 803fe76: ead5 1f40 0bc5 7798 b1b9 c595 3336 51de ..@....w....63.Q
- 803fe86: 10e5 6330 882d 811f e58d c0dd 1d30 80de ..0c-.......0...
- 803fe96: 71cc 4c9e db1f 4db2 bbd4 1bc5 9a62 6268 .q.L...M....b.hb
- 803fea6: 4c3a 45b9 8683 87eb 8ec0 4aa8 7df1 00ca :L.E.......J.}..
- 803feb6: 83d8 3fa8 115a 3e80 dc49 af11 8f9c b1c6 ...?Z..>I.......
- 803fec6: e5cc 32f6 c188 21e5 43d4 dd78 bed0 155c ...2...!.Cx...\.
- 803fed6: 783d 37e3 7e5b ba0a 86eb e145 cbcd a2fd =x.7[~....E.....
- 803fee6: 04b5 d636 005a 0a7b 200b f838 ab3f c625 ..6.Z.{.. 8.?.%.
- 803fef6: d778 f784 cada cdba 44af 199c aaa8 6d89 x........D.....m
- 803ff06: 330e a183 d45e 4709 2a0d 3bb4 92dc 5830 .3..^..G.*.;..0X
- 803ff16: f204 bd87 831d 3ba6 d85f 72e8 535d 2dc2 .......;_..r]S.-
- 803ff26: fa22 d653 5690 6be3 9416 35e2 69a7 1281 ".S..V.k...5.i..
- 803ff36: 2334 9751 3df3 6eb6 6d45 03f0 fd02 9dc3 4#Q..=.nEm......
- 803ff46: c822 d5de e410 0e0f 813a 03e0 7203 8d30 ".......:....r0.
- 803ff56: 0be0 9e6c 0222 1489 2f97 450f e68d 74c1 ..l."..../.E...t
- 803ff66: e0d0 5284 4832 1e6b 64a8 0267 76a2 206d ...R2Hk..dg..vm
- 803ff76: cf75 1133 34aa 3bdd a4fc dbb8 f4a4 e2e3 u.3..4.;........
- 803ff86: 8292 aec1 2797 c782 5385 ab32 48e8 6d7b .....'...S2..H{m
- 803ff96: 1445 54c1 e619 f608 3451 b7e6 5034 a5e7 E..T....Q4..4P..
- 803ffa6: 2b44 90a6 9d82 f878 61d4 35dd 99e5 8d01 D+....x..a.5....
- 803ffb6: 32fe ae79 64ad 974d 2beb baeb 1cde 3d70 .2y..dM..+....p=
- 803ffc6: 4a06 ee86 2b8f 56e7 50fa d5fe a2ec 1aad .J...+.V.P......
- 803ffd6: 0cf4 998a d7a1 6174 7092 0888 00f8 e76e ......ta.p....n.
- 803ffe6: fbe0 e075 68ad 4338 f7cb c1e9 6355 dc15 ..u..h8C....Uc..
- 803fff6: f6a2 364a c254 616a 82af ff75 c15c 1d73 ..J6T.ja..u.\.s.
- 8040006: 4c60 af3e 39f7 64ba 364f 50ca dac0 d695 `L>..9.dO6.P....
- 8040016: b4aa 8e44 7e0d ab68 5787 1d5e 6154 11b1 ..D..~h..W^.Ta..
- 8040026: afa7 c3a3 a25b ec70 1d97 ecbc 1182 1523 ....[.p.......#.
- 8040036: ead7 c981 adeb 993c acf8 0265 9e76 405e ......<...e.v.^@
- 8040046: 1501 0687 8689 9d7e 634c 13d7 4ae8 394d ......~.Lc...JM9
- 8040056: 687c e74f 7a51 4f74 efd6 b16d d624 6a7e |hO.QztO..m.$.~j
- 8040066: 8d74 0018 ee47 1235 ef7e 4524 10e7 8f6e t...G.5.~.$E..n.
- 8040076: dc3c 789e 6d77 d62d 780b 13a6 7a5e 7fdc <..xwm-..x..^z..
- 8040086: 96a9 21fb 9cdc bfe7 c146 38d7 9af8 a21c ...!....F..8....
- 8040096: 9550 7861 f9e4 704f 5f45 c07a e13d 9661 P.ax..OpE_z.=.a.
- 80400a6: 6797 e4b8 3bf2 0a1c 32b8 7853 b95b 198a .g...;...2Sx[...
- 80400b6: 4c77 4a17 06a6 d709 327a 6d46 d051 1d6f wL.J....z2FmQ.o.
- 80400c6: ff23 bb42 518c 677c 7461 a121 332c 340c #.B..Q|gat!.,3.4
- 80400d6: f1ec 8f00 5f22 651c 5004 194c ee7c e53b ...."_.e.PL.|.;.
- 80400e6: c242 8865 4fb9 e74a 272d 36eb 2f93 529b B.e..OJ.-'.6./.R
- 80400f6: 5439 10be 8b67 2c35 6168 8aab 2904 764d 9T..g.5,ha...)Mv
- 8040106: 2682 4318 7781 222a a587 0448 bdef ff59 .&.C.w*"..H...Y.
- 8040116: bd0c a4ad bcb9 35be c5d9 fe15 d805 883c .......5......<.
- 8040126: 088b 13df 4830 64fa f2b9 2140 69e3 da0f ....0H.d..@!.i..
- 8040136: dc54 6f70 8bdc 3a83 ff28 887a 017f 9a20 T.po...:(.z... .
- 8040146: 3705 6b12 68ba 3518 1314 9ecb add4 0307 .7.k.h.5........
- 8040156: 7fbc 3dc0 ceb5 4c0f b6e8 5343 f3f9 6e9b ...=...L..CS...n
- 8040166: 4ea0 3fa7 1b07 df78 244a 7329 2590 8c20 .N.?..x.J$)s.% .
- 8040176: e2aa 4f4c 59ff 2ef2 734b 09ab 6edc aba6 ..LO.Y..Ks...n..
- 8040186: 8a46 8021 c2f5 82b2 602d 19b8 bb7a 7612 F.!.....-`..z..v
- 8040196: f153 9153 95a3 f336 0df0 0786 0af8 f8d6 S.S...6.........
- 80401a6: 4b73 6efb 0143 26eb 49c1 38c3 1a0e 8f6f sK.nC..&.I.8..o.
- 80401b6: d7d3 f50a b8da 3083 484e 701b dae6 8225 .......0NH.p..%.
- 80401c6: 9fed 26a3 008c b386 d927 7f82 7c02 ca70 ...&....'....|p.
- 80401d6: f8f2 5344 15b4 29b7 f5dd 43a6 2ee0 4a05 ..DS...)...C...J
- 80401e6: 0083 48a3 c58f f01b 4c75 19b0 ec78 6bf6 ...H....uL..x..k
- 80401f6: 6eef a300 6fa6 de3a 86f1 3c00 50d7 553d .n...o:....<.P=U
- 8040206: ca4d 5bc3 f2b7 19ee 04aa c59a 1e75 0fa5 M..[........u...
- 8040216: a9d3 3997 19be 2135 3444 c7b5 4292 4689 ...9..5!D4...B.F
- 8040226: e81c f8db 6849 866f a454 f17b ef15 f3d9 ....Iho.T.{.....
- 8040236: a137 80aa fde0 8ab6 6e39 f8d4 ac3a 4504 7.......9n..:..E
- 8040246: bb03 6787 7cc8 64b2 fb57 8d89 b0e8 0dbe ...g.|.dW.......
- 8040256: 887c 1355 8ec8 a7b9 41e6 06ae 2276 e324 |.U......A..v"$.
- 8040266: 16a7 dc84 16fe f802 4a3d ddcf fd4d 1a3d ........=J..M.=.
- 8040276: c8ef ef3c 4ce9 97ef 09da 7fa1 e777 086e ..<..L......w.n.
- 8040286: bf7e fb72 7749 30b7 c12b 89b5 69ff 78f2 ~.r.Iw.0+....i.x
- 8040296: 40fe 9bff 4ff1 26b1 130d 5963 cbe0 d1ad .@...O.&..cY....
- 80402a6: d169 2f9b f9cb 2ee7 fb6e e875 ebc6 8913 i../....n.u.....
- 80402b6: 7d32 5b44 e296 1b71 fedc 3adc c9bd 9834 2}D[..q....:..4.
- 80402c6: 53d3 e4ae bafe 2a80 5d70 b973 2321 edda .S.....*p]s.!#..
- 80402d6: b8c6 a985 cb4a 7070 2b8d 9535 d1c1 9a0d ....J.pp.+5.....
- 80402e6: ca91 c4ad b184 18fc 6891 19b6 111d 43bd .........h.....C
- 80402f6: e810 99b1 cb4a 5408 1930 f2d6 e762 ba27 ....J..T0...b.'.
- 8040306: 1d0c 7d3e 7a10 1055 ff28 03b4 73e5 3a69 ..>}.zU.(....si:
- 8040316: 7cd7 fcb3 6a14 99f4 5a5a 1b00 c960 7cd2 .|...j..ZZ..`..|
- 8040326: a2ac 54b9 6c3d 5f9f 7220 8d22 663e 72f3 ...T=l._ r".>f.r
- 8040336: 8438 780d a5e6 4f74 9d40 1ee5 f06f 274f 8..x..tO@...o.O'
- 8040346: b577 bc61 583d f0cc f34f 6d71 4fc7 08f3 w.a.=X..O.qm.O..
- 8040356: d080 6d0c 3a31 ee10 0404 0247 4ab0 60b6 ...m1:....G..J.`
- 8040366: c350 6803 00cc 2df2 943b 6e75 9350 9d97 P..h...-;.unP...
- 8040376: ac32 dd3c 81c5 22ee 6633 bac6 4edf 211e 2.<...."3f...N.!
- 8040386: 6324 78f6 5bb1 5f54 b6e1 1cc5 eef6 05f9 $c.x.[T_........
- 8040396: 6d02 7adc 621f 5548 8929 06de 29b3 112e .m.z.bHU)....)..
- 80403a6: aeef a0fe 51e4 6f55 c8aa 0708 3b58 f45a .....QUo....X;Z.
- 80403b6: 4871 b21b 7388 f21a 4f80 1c82 b1f0 46ca qH...s...O.....F
- 80403c6: e76f 0707 722c 94a6 9402 99e8 deb1 8d10 o...,r..........
- 80403d6: e240 91a3 245b b2b0 2ce5 21d1 5350 03f9 @...[$...,.!PS..
- 80403e6: b6dd 54b5 6cbb abe4 48af 7115 b22f 0ea9 ...T.l...H.q/...
- 80403f6: 8bd3 b132 4407 e728 ecd9 cc5e cf08 f5db ..2..D(...^.....
- 8040406: ccde e225 fd32 bbd4 d4b0 8ba2 f1cd 7106 ..%.2..........q
- 8040416: 1469 9671 006e 9012 4c50 6d50 c689 025b i.q.n...PLPm..[.
- 8040426: 6a57 d24f b01b d6c5 01db b109 c925 9865 WjO.........%.e.
- 8040436: 009a ade0 a25a ba65 2675 8e9c c7aa 3086 ....Z.e.u&.....0
- 8040446: 9445 7243 7e9a 4870 9855 7704 2e19 ebd1 E.Cr.~pHU..w....
- 8040456: a066 8c83 7b08 aa3f 2c01 2a82 6442 2dc8 f....{?..,.*Bd.-
- 8040466: 4003 346b 48be 24e0 b418 a481 838c 2df5 .@k4.H.$.......-
- 8040476: 88b2 8d21 0c8c fb62 46a8 12e8 eb45 9ac8 ..!...b..F..E...
- 8040486: 46e4 0d54 821c 4328 f4c1 d115 5832 f732 .FT...(C....2X2.
- 8040496: f4b4 b16f dbe4 0379 96a7 1053 fc0f 4316 ..o...y...S....C
- 80404a6: a990 fa26 7c18 4658 81c5 a00e 6417 6df9 ..&..|XF.....d.m
- 80404b6: 0d11 91fe 9878 ceb7 d2d8 d088 4797 ca7a ....x........Gz.
- 80404c6: 9baf 8c50 b16d 3bb3 22ef 304c 08dd c40c ..P.m..;."L0....
- 80404d6: 6ec7 9dba a85e 8153 c079 224f 96da 7698 .n..^.S.y.O"...v
- 80404e6: 501c 87bb 01c6 bd61 b072 df87 cc41 253b .P....a.r...A.;%
- 80404f6: 05c4 04f8 cb46 e3f5 4b58 1469 a7c2 9fe2 ....F...XKi.....
- 8040506: 49bc 1781 1cc5 4a0b d990 dd38 b400 fbe6 .I.....J..8.....
- 8040516: a865 336b faf5 48fd 2ed3 4d4c c1b4 8864 e.k3...H..LM..d.
- 8040526: 49a0 f275 9cb8 0c88 adce 235a cf98 ac69 .Iu.......Z#..i.
- 8040536: 2422 41d4 4ef1 0f58 4f92 c1ab b264 1ea2 "$.A.NX..O..d...
- 8040546: 4e7c 2a0d d593 895c 4ae1 a938 a429 8917 |N.*..\..J8.)...
- 8040556: 78db c310 588e 035b 6fc2 456d f614 32d6 .x...X[..omE...2
- 8040566: 448c 916b 40a6 f9a1 ff10 5e74 4112 ebd2 .Dk..@....t^.A..
- 8040576: 9e0b 3fb6 37fd 7fb3 43e8 491a 9fe6 c5b6 ...?.7...C.I....
- 8040586: 702b 9652 f13f d0bb 0cde e671 fa33 a258 +pR.?.....q.3.X.
- 8040596: 5900 538c 8eb6 9beb 20c1 6cdc d2b7 f35c .Y.S..... .l..\.
- 80405a6: a74b 258f 8604 eb34 7a23 8acc 9b60 ab16 K..%..4.#z..`...
- 80405b6: fecd a0f5 1836 622e ff89 2621 4085 b677 ....6..b..!&.@w.
- 80405c6: f7a0 d26f 0d74 0e6a 00c2 88b1 209c 2fd1 ..o.t.j...... ./
- 80405d6: a526 39d1 6504 76ec 970b 4231 dea7 536e &..9.e.v..1B..nS
- 80405e6: a6c0 8501 ea06 788b c0a8 c979 fa4c 035b .......x..y.L.[.
- 80405f6: cc85 f19d 8863 bc1b d03c 7093 ff7d 7432 ....c...<..p}.2t
- 8040606: 128f 11f0 c6b8 7a1c 7d98 28be f997 b87b .......z.}.(..{.
- 8040616: df4f 53db 8974 3f27 5eab f06b ebf4 c650 O..St.'?.^k...P.
- 8040626: 35fc 133e 28b3 1242 9cfb 7e86 f6e0 d855 .5>..(B....~..U.
- 8040636: 0ec3 0587 5576 1719 2c19 ae44 b69e dde0 ....vU...,D.....
- 8040646: 5d57 d1a2 1bcb 91e7 3a60 c02b 564f 3e80 W]......`:+.OV.>
- 8040656: bb66 cff5 fdbf b7e3 05ff fcff b7eb fdff f...............
- 8040666: dfed bcff d011 d0dc 7471 6f59 5fe4 81a8 ........qtYo._..
- 8040676: a67f ff7f dbf1 7d3f e3fb 4d79 138d fd4d ......?}..yM..M.
- 8040686: 542b 3fff fedf bce9 2606 0689 edfe 3fdb +T.?.....&.....?
- 8040696: fb7f 6fb7 847f ff7f b7fb 0bff 9d68 d4d9 ...o........h...
- 80406a6: f2f0 2e2c 9d1a 6c57 5e7c c9b1 aea5 78df ..,...Wl|^.....x
- 80406b6: 0031 399b 8d67 50c1 3ef1 6613 b119 4ab3 1..9g..P.>.f...J
- 80406c6: 41bb ab39 1fb4 a701 9c45 017f b7ad 3229 .A9.....E.....)2
- 80406d6: 6aa7 7143 a3c1 8bbc c0f2 6d2b bf81 3aad .jCq......+m...:
- 80406e6: 419c 4af4 1133 811a 3ada a241 6c05 0b63 .A.J3....:A..lc.
- 80406f6: 3af0 eeaf 39df 1775 5b99 b000 1a31 9a8c .:...9u..[..1...
- 8040706: b5d3 7a8b 8ccd b3c4 041b 087d d441 e8d1 ...z......}.A...
- 8040716: 0212 7822 85b7 d41d 9d4d f053 6f1e aa45 .."x....M.S..oE.
- 8040726: 4758 61f1 2d6a 0d91 1a15 3074 b979 a818 XG.aj-....t0y...
- 8040736: 7f66 110c 31f9 955b d7cb 2ee9 ef5b bde0 f....1[.....[...
- 8040746: 6db1 5189 e563 f8b2 bd3d 9550 4d20 eb1c .m.Qc...=.P. M..
- 8040756: 4a6c efb3 b05c 55f3 f0dd 9ae3 2064 06cb lJ..\..U....d ..
- 8040766: 048d 0480 6f45 22e0 c070 925b 3aba 7079 ....Eo."p.[..:yp
- 8040776: bc69 b428 1405 28cd 821c 5dde 57ec eb4b i.(....(...].WK.
- 8040786: 97c7 f4c8 6b60 80bc d1d0 1f60 3d5d ead3 ....`k....`.]=..
- 8040796: caa4 9b36 db22 eb66 3179 fae5 2191 ac7f ..6.".f.y1...!..
- 80407a6: 1836 e7d2 a6ed 2ac0 b9c0 ab96 1c49 d916 6......*....I...
- 80407b6: 1023 b00b b62e 470c 5d3d 1f25 c248 057c #......G=]%.H.|.
- 80407c6: fc11 63b4 041f ae3f 5761 5b23 0672 1ed1 ...c..?.aW#[r...
- 80407d6: e29e 155a 26dc 136f 76b8 d4d0 6f20 f19d ..Z..&o..v.. o..
- 80407e6: 253d 44ce 6dc5 65d9 428d eb02 dd2b d497 =%.D.m.e.B..+...
- 80407f6: e7d8 e388 98d4 6f60 3991 48c2 0828 6c64 ......`o.9.H(.dl
- 8040806: 8d0f 2bd0 dbab c4e1 a1d4 8dbc 0f60 3b43 ...+........`.C;
- 8040816: 8716 e07b 7560 a402 4faf 0729 b491 3a0d ..{.`u...O)....:
- 8040826: 1ac8 6274 cd4b 582f caac ca6e bc18 9662 ..tbK./X..n...b.
- 8040836: e9c1 8350 5607 b57b f2e8 a005 a491 c11f ..P..V{.........
- 8040846: 9848 bba3 df02 8373 cb83 f960 52d6 45e8 H.....s...`..R.E
- 8040856: b56e 746c 86e5 cb98 9ae8 c84e 8b34 d45b n.lt......N.4.[.
- 8040866: 1871 6ed1 cab1 ef5d 7795 dc36 8bf7 201c q..n..]..w6....
- 8040876: 7270 7ec4 b8cb 8635 9e86 dd71 5fed fc97 pr.~..5...q.._..
- 8040886: 1238 46af ca39 9501 6bb3 3fa3 43c6 705f 8..F9....k.?.C_p
- 8040896: 78ef faa0 f4a6 5a92 877f d9ef b3c1 4a89 .x.....Z.......J
- 80408a6: 2f76 c7cb 9d3e e4a9 79a5 3e57 0b22 87e3 v/..>....yW>"...
- 80408b6: ee1f 5795 44c8 3a91 5f87 6aab 8535 4478 ...W.D.:._.j5.xD
- 80408c6: af50 e6a1 5316 e090 4663 0e99 e1df 305b P....S..cF....[0
- 80408d6: e0ef 0aff ef31 c08f 2ee0 ba26 a4b6 c313 ....1.....&.....
- 80408e6: 6ae8 65ff 4bf4 f8f5 be8b 496c 26e7 5c20 .j.e.K....lI.& \
- 80408f6: d218 3687 727d 4efb cd0d b87a f3bd 4f85 ...6}r.N..z....O
- 8040906: 4764 a101 c034 06c0 6f89 4f10 25ff 957b dG..4....o.O.%{.
- 8040916: 6352 56ec d59f e034 9810 7e9a dd7d 421f Rc.V..4....~}..B
- 8040926: b368 5769 c673 fea3 fae8 b02d d07a c0e0 h.iWs.....-.z...
- 8040936: 0799 3f4d e0ea 1100 dcb9 2104 289d b8a2 ..M?.......!.(..
- 8040946: 854f 4988 97aa 8b2e 3e97 74d8 e933 9003 O..I.....>.t3...
- 8040956: 3ba6 98cd f5dc 9a47 0341 19a0 71a3 4dff .;....G.A....q.M
- 8040966: e043 9ad1 b458 83f4 d2d0 3a8f e0c8 c33e C...X......:..>.
- 8040976: fe55 d903 f4dc e5e0 5e02 ec89 aaef a52d U........^....-.
- 8040986: b86b 9353 c6db be1f 7317 b680 4856 c093 k.S......s..VH..
- 8040996: d133 03b0 0185 60b7 28c8 b3ab 331e 189e 3......`.(...3..
- 80409a6: 6b33 af8b 83ae 4e2f 96b3 77bd 0156 1487 3k..../N...wV...
- 80409b6: f689 c3d0 c834 f633 624a e689 af8d 37fa ....4.3.Jb.....7
- 80409c6: a9f3 3fa8 6298 c221 a00f aafc 8ea7 21fa ...?.b!........!
- 80409d6: 0fc8 d6ba f489 0e96 0d3d 38d8 733e 57e0 ........=..8>s.W
- 80409e6: f736 26a1 5527 1ff4 d92c ab43 a31b 0000 6..&'U..,.C.....
- 80409f6: 5825 4c00 676f 756f 5474 726d 3f00 6600 %X.LogoutTmr.?.f
- 8040a06: 6e75 0063 7322 6f74 2270 d000 d0a2 d1b5 unc."stop"......
- 8040a16: d181 2082 bed0 81d1 82d1 b0d0 bdd0 bed0 ... ............
- 8040a26: b2d0 bbd0 b5d0 bdd0 0021 90d0 b4d0 bcd0 ........!.......
- 8040a36: b8d0 bdd0 b8d0 81d1 82d1 80d1 b0d0 82d1 ................
- 8040a46: bed0 80d1 2820 9ed0 81d1 82d1 b0d0 bdd0 .... (..........
- 8040a56: bed0 b2d0 bbd0 b5d0 bdd0 0029 a2d0 b5d0 ..........).....
- 8040a66: 81d1 82d1 d020 d0bd 20b5 83d1 b4d0 b0d0 .... .... ......
- 8040a76: bbd0 bed0 81d1 8cd1 d020 d1be d181 d082 ........ .......
- 8040a86: d0b0 d0bd d0be d0b2 d1b8 d182 218c 2200 .............!."
- 8040a96: 6964 6373 6168 6772 2265 d000 d0a2 d1b5 discharge"......
- 8040aa6: d181 2082 b7d0 b0d0 bfd0 83d1 89d1 b5d0 ... ............
- 8040ab6: bdd0 0021 90d0 b4d0 bcd0 b8d0 bdd0 b8d0 ..!.............
- 8040ac6: 81d1 82d1 80d1 b0d0 82d1 bed0 80d1 2820 .............. (
- 8040ad6: 97d0 b0d0 bfd0 83d1 89d1 b5d0 bdd0 0029 ..............).
- 8040ae6: a2d0 b5d0 81d1 82d1 d020 d0bd 20b5 83d1 ........ .... ..
- 8040af6: b4d0 b0d0 bbd0 bed0 81d1 8cd1 d020 d0b7 ............ ...
- 8040b06: d0b0 d1bf d183 d181 d082 d1b8 d182 218c ...............!
- 8040b16: 2200 6974 656d 0022 6322 6e61 6563 226c ."time"."cancel"
- 8040b26: d000 d192 d08b d0ba d1bb d18e d087 d0b5 ................
- 8040b36: d0bd d0b8 20b5 98d0 91d0 9fd0 d020 d1be ..... ...... ...
- 8040b46: d082 d0bc d0b5 d0bd d0b5 d0bd 21be d000 .............!..
- 8040b56: d192 d08b d0ba d1bb d18e d087 d0b5 d0bd ................
- 8040b66: d0b8 20b5 98d0 91d0 9fd0 d020 d0bd 20b5 ... ...... ....
- 8040b76: 83d1 b4d0 b0d0 bbd0 bed0 81d1 8cd1 d020 .............. .
- 8040b86: d1be d082 d0bc d0b5 d0bd d1b8 d182 218c ...............!
- 8040b96: 2200 666f 2266 6100 7466 7265 7400 006f ."off".after.to.
- 8040ba6: 9fd0 b5d0 80d1 b5d0 b7d0 b0d0 b3d0 80d1 ................
- 8040bb6: 83d1 b7d0 bad0 b0d0 d020 d098 d091 219f ........ ......!
- 8040bc6: d000 d19e d082 d0bc d0b5 d0bd 20b0 bfd0 ............. ..
- 8040bd6: b5d0 80d1 b5d0 b7d0 b0d0 b3d0 80d1 83d1 ................
- 8040be6: b7d0 bad0 b8d0 d020 d098 d091 219f 4800 ...... ......!.H
- 8040bf6: 5454 2f50 2e31 2030 3032 2030 4b4f 0a0d TTP/1.0 200 OK..
- 8040c06: 6f43 746e 6e65 2d74 7954 6570 743a 7865 Content-Type:tex
- 8040c16: 2f74 7468 6c6d 0a0d 6553 2d74 6f43 6b6f t/html..Set-Cook
- 8040c26: 6569 203a 6e75 6d61 3d65 0d00 530a 7465 ie: uname=...Set
- 8040c36: 432d 6f6f 696b 3a65 6920 3d64 0d00 530a -Cookie: id=...S
- 8040c46: 7465 432d 6f6f 696b 3a65 7220 6c6f 3d65 et-Cookie: role=
- 8040c56: 0030 0a0d 6553 2d74 6f43 6b6f 6569 203a 0...Set-Cookie:
- 8040c66: 7561 6874 303d 3c00 4421 434f 5954 4550 auth=0.<!DOCTYPE
- 8040c76: 6820 6d74 3e6c 683c 6d74 206c 616c 676e html><html lang
- 8040c86: 3e3d 683c 6165 3e64 6d3c 7465 2061 7468 =><head><meta ht
- 8040c96: 7074 652d 7571 7669 223d 6572 7266 7365 tp-equiv="refres
- 8040ca6: 2268 6320 6e6f 6574 746e 223d 3b30 7275 h" content="0;ur
- 8040cb6: 3d6c 692f 646e 7865 682e 6d74 226c 3e2f l=/index.html"/>
- 8040cc6: 2f3c 6568 6461 3c3e 682f 6d74 3e6c 0a0d </head></html>..
- 8040cd6: 0a0d 2600 6c00 676f 6e69 003d 6170 7373 ...&.login=.pass
- 8040ce6: 6f77 6472 003d 0a0d 6553 2d74 6f43 6b6f word=...Set-Cook
- 8040cf6: 6569 203a 6f72 656c 003d 9fd0 bed0 bbd0 ie: role=.......
- 8040d06: 8cd1 b7d0 bed0 b2d0 b0d0 82d1 b5d0 bbd0 ................
- 8040d16: 8cd1 6f00 6e77 7265 003d 7973 4c73 636f ...owner=.sysLoc
- 8040d26: 7461 6f69 3d6e 6300 6d6f 656d 746e 003d ation=.comment=.
- 8040d36: 6572 6461 635f 6d6f 756d 696e 7974 003d read_community=.
- 8040d46: 7277 7469 5f65 6f63 6d6d 6e75 7469 3d79 write_community=
- 8040d56: 6d00 6e61 6761 7265 5049 003d 616d 616e .managerIP=.mana
- 8040d66: 6567 4972 3250 003d 616d 616e 6567 4972 gerIP2=.managerI
- 8040d76: 3350 003d 616d 616e 6567 4972 3450 003d P3=.managerIP4=.
- 8040d86: 616d 616e 6567 4972 3550 003d 6864 7063 managerIP5=.dhcp
- 8040d96: 003d 7069 6461 7264 003d 7767 003d 616d =.ipaddr=.gw=.ma
- 8040da6: 6b73 003d 7561 6874 003d 7372 655f 616e sk=.auth=.rs_ena
- 8040db6: 6c62 6465 003d 7372 735f 7265 6576 3d72 bled=.rs_server=
- 8040dc6: 7200 5f73 6f70 7472 003d 7372 705f 6477 .rs_port=.rs_pwd
- 8040dd6: 003d 7372 6b5f 7965 003d 6964 3d31 7200 =.rs_key=.di1=.r
- 8040de6: 316f 003d 6f72 3d32 6e00 7074 003d 746e o1=.ro2=.ntp=.nt
- 8040df6: 7370 7265 6976 3d70 7400 6d69 3d65 7500 pservip=.time=.u
- 8040e06: 6374 003d 5448 5054 7000 6f72 6164 6574 tc=.HTTP.prodate
- 8040e16: 003d 5448 5054 312f 302e 3220 3030 4f20 =.HTTP/1.0 200 O
- 8040e26: 0d4b 430a 6e6f 6574 746e 542d 7079 3a65 K..Content-Type:
- 8040e36: 6574 7478 682f 6d74 0d6c 0d0a 540a 7572 text/html....Tru
- 8040e46: 0065 6170 6567 003d 6c61 006c 5448 5054 e.page=.all.HTTP
- 8040e56: 312f 312e 3220 3030 4f20 0d4b 430a 6e6f /1.1 200 OK..Con
- 8040e66: 6574 746e 4c2d 6e65 7467 3a68 6c25 0d75 tent-Length:%lu.
- 8040e76: 0d0a 000a 7375 7265 616e 656d 003d 6c6f ....username=.ol
- 8040e86: 7064 7361 3d73 6e00 7765 6170 7373 003d dpass=.newpass=.
- 8040e96: 9fd0 b0d0 80d1 bed0 bbd0 8cd1 d120 d183 ............ ...
- 8040ea6: d081 d0bf d1b5 d088 d0bd 20be b8d0 b7d0 ........... ....
- 8040eb6: bcd0 b5d0 bdd0 91d1 bdd0 d000 d092 d0b2 ................
- 8040ec6: d0b5 d0b4 d0b5 d1bd 208b bdd0 b5d0 bad0 ......... ......
- 8040ed6: bed0 80d1 80d1 b5d0 bad0 82d1 bdd0 8bd1 ................
- 8040ee6: b5d0 d020 d0b4 d0b0 d0bd d1bd d08b 21b5 .. ............!
- 8040ef6: d000 d092 d0b2 d0b5 d1b4 d091 20bd bdd0 ............. ..
- 8040f06: b5d0 b2d0 b5d0 80d1 bdd0 8bd1 b9d0 d020 .............. .
- 8040f16: d0bf d1b0 d080 d0be d1bb 218c 4700 5445 ...........!.GET
- 8040f26: 2f20 616d 6e69 632e 7373 4700 5445 2f20 /main.css.GET /
- 8040f36: 6f72 6574 2e6b 6e70 0067 4547 2054 662f rotek.png.GET /f
- 8040f46: 7661 6369 6e6f 692e 6f63 4700 5445 2f20 avicon.ico.GET /
- 8040f56: 6f72 656c 6a2e 0073 4f50 5453 2f20 6f6c role.js.POST /lo
- 8040f66: 6967 2e6e 6763 0069 6c2f 676f 6e69 682e gin.cgi./login.h
- 8040f76: 6d74 006c 6f54 206f 6f6c 676e 5020 534f tml.Too long POS
- 8040f86: 2054 6572 7571 7365 2174 0a0d 4700 5445 T request!...GET
- 8040f96: 2f20 616d 6e69 6a2e 0073 4547 2054 732f /main.js.GET /s
- 8040fa6: 7465 6974 676e 2e73 7468 6c6d 2f00 6e69 ettings.html./in
- 8040fb6: 6564 2e78 7468 6c6d 4700 5445 2f20 6e69 dex.html.GET /in
- 8040fc6: 6f66 682e 6d74 006c 4547 2054 682f 7369 fo.html.GET /his
- 8040fd6: 6f74 7972 682e 6d74 006c 4547 2054 752f tory.html.GET /u
- 8040fe6: 7370 685f 7369 6f74 7972 682e 6d74 006c ps_history.html.
- 8040ff6: 4547 2054 672f 7465 734a 6e6f 632e 6967 GET /getJson.cgi
- 8041006: 4700 5445 2f20 6573 7474 6e69 7367 632e .GET /settings.c
- 8041016: 6967 5000 534f 2054 732f 7465 6974 676e gi.POST /setting
- 8041026: 2e73 6763 0069 5448 5054 312f 312e 3220 s.cgi.HTTP/1.1 2
- 8041036: 3030 4f20 0d4b 000a 213c 4f44 5443 5059 00 OK...<!DOCTYP
- 8041046: 2045 7468 6c6d 3c3e 7468 6c6d 6c20 6e61 E html><html lan
- 8041056: 3d67 3c3e 6568 6461 3c3e 656d 6174 6820 g=><head><meta h
- 8041066: 7474 2d70 7165 6975 3d76 7222 6665 6572 ttp-equiv="refre
- 8041076: 6873 2022 6f63 746e 6e65 3d74 3022 753b sh" content="0;u
- 8041086: 6c72 2f3d 6573 7474 6e69 7367 682e 6d74 rl=/settings.htm
- 8041096: 226c 3e2f 2f3c 6568 6461 3c3e 682f 6d74 l"/></head></htm
- 80410a6: 3e6c 0a0d 0a0d 4700 5445 2f20 6e69 6f66 l>.....GET /info
- 80410b6: 632e 6967 5000 534f 2054 692f 666e 2e6f .cgi.POST /info.
- 80410c6: 6763 0069 213c 4f44 5443 5059 2045 7468 cgi.<!DOCTYPE ht
- 80410d6: 6c6d 3c3e 7468 6c6d 6c20 6e61 3d67 3c3e ml><html lang=><
- 80410e6: 6568 6461 3c3e 656d 6174 6820 7474 2d70 head><meta http-
- 80410f6: 7165 6975 3d76 7222 6665 6572 6873 2022 equiv="refresh"
- 8041106: 6f63 746e 6e65 3d74 3022 753b 6c72 2f3d content="0;url=/
- 8041116: 6e69 6f66 682e 6d74 226c 3e2f 2f3c 6568 info.html"/></he
- 8041126: 6461 3c3e 682f 6d74 3e6c 0a0d 0a0d 4700 ad></html>.....G
- 8041136: 5445 2f20 6968 7473 726f 2e79 6763 0069 ET /history.cgi.
- 8041146: 4547 2054 752f 7370 685f 7369 6f74 7972 GET /ups_history
- 8041156: 632e 6967 5000 534f 2054 622f 7461 745f .cgi.POST /bat_t
- 8041166: 7365 2e74 6763 0069 4f50 5453 2f20 7075 est.cgi.POST /up
- 8041176: 5f73 6f70 6577 2e72 6763 0069 4547 2054 s_power.cgi.GET
- 8041186: 722f 7365 7465 632e 6967 4700 5445 2f20 /reset.cgi.GET /
- 8041196: 6572 6f62 746f 632e 6967 4700 5445 2f20 reboot.cgi.GET /
- 80411a6: 6f63 666e 7269 2e6d 6763 0069 4547 2054 confirm.cgi.GET
- 80411b6: 662f 5f77 7075 6164 6574 632e 6967 5000 /fw_update.cgi.P
- 80411c6: 534f 2054 632f 6168 676e 7065 6477 632e OST /changepwd.c
- 80411d6: 6967 4700 5445 2f20 6573 5074 6f72 6164 gi.GET /setProda
- 80411e6: 6574 632e 6967 0000 0000 te.cgi....
- 080411f0 <file__ups_history_html>:
- 80411f0: 4c00 0804 4694 0804 46a8 0804 0541 0000 .L...F...F..A...
- 8041200: 0001 0000 ....
- 08041204 <data__main_js>:
- 8041204: 6d2f 6961 2e6e 736a 0000 0000 5448 5054 /main.js....HTTP
- 8041214: 312f 312e 3220 3030 4f20 0d4b 530a 7265 /1.1 200 OK..Ser
- 8041224: 6576 3a72 6c20 4977 2f50 2e31 2e33 2031 ver: lwIP/1.3.1
- 8041234: 6828 7474 3a70 2f2f 6173 6176 6e6e 6861 (http://savannah
- 8041244: 6e2e 6e6f 6e67 2e75 726f 2f67 7270 6a6f .nongnu.org/proj
- 8041254: 6365 7374 6c2f 6977 2970 0a0d 6f43 746e ects/lwip)..Cont
- 8041264: 6e65 2d74 654c 676e 6874 203a 3031 3136 ent-Length: 1061
- 8041274: 0d31 430a 6e6f 656e 7463 6f69 3a6e 4320 1..Connection: C
- 8041284: 6f6c 6573 0a0d 6f43 746e 6e65 2d74 7974 lose..Content-ty
- 8041294: 6570 203a 7061 6c70 6369 7461 6f69 2f6e pe: application/
- 80412a4: 2d78 616a 6176 6373 6972 7470 0a0d 6f43 x-javascript..Co
- 80412b4: 746e 6e65 2d74 6e45 6f63 6964 676e 203a ntent-Encoding:
- 80412c4: 7a67 7069 0a0d 6143 6863 2d65 6f43 746e gzip..Cache-Cont
- 80412d4: 6f72 3a6c 7020 6972 6176 6574 202c 616d rol: private, ma
- 80412e4: 2d78 6761 3d65 3638 3034 0d30 0d0a 1f0a x-age=86400.....
- 80412f4: 088b 0000 0000 0400 ed0a 097d 1b73 9647 ..........}.s.G.
- 8041304: 5fe6 d629 2978 2cc0 b880 0178 212a 4a28 ._).x).,..x.*!(J
- 8041314: 35b6 6ba1 da24 599e cd8a 0ba8 8940 0a00 .5.k$..Y....@...
- 8041324: 1542 c948 2324 eedc 99e9 688e 78c7 77a3 B.H.$#.....h.x.w
- 8041334: 7763 6363 f67b 05f8 8f6e ad35 d5f1 f311 cwcc{...n.5.....
- 8041344: c00b 347f 7bdf 5999 0595 1480 bb65 3d3d ...4.{.Y....e.==
- 8041354: 1331 9121 9995 af2f 2f97 be5f 932b c99d 1.!.../../_.+...
- 8041364: 4bd0 68c2 bc68 7055 278a 20e3 8c99 8687 .K.hh.Up.'. ....
- 8041374: 791f 4193 4c30 ddca b920 0fdd f3e8 8be6 .y.A0L.. .......
- 8041384: 3e3b ce20 0a3a e3be c1f8 619d b54c 729c ;> .:......aL..r
- 8041394: bc9c 07e8 68e5 78e4 f261 aec2 2958 5b94 .....h.xa...X).[
- 80413a4: 9e28 391c c363 47b3 38ce de0e 47e9 524e (..9c..G.8...GNR
- 80413b4: 8198 b62f 4ec2 e0a1 d8ad 4ae5 78bd baa3 ../..N.....J.x..
- 80413c4: 2f64 e655 f4db d45a 6f8c 871f 3f43 2e3a d/U...Z..o..C?:.
- 80413d4: 838f 9367 4e20 19de 833b 60a0 94ca 6c59 ..g. N..;..`..Yl
- 80413e4: 05f9 78b7 5676 c6d0 3be9 f389 8f0e 4315 ...xvV...;.....C
- 80413f4: 44e9 02e3 e3b5 7bd8 678e 9ef9 0e15 3a0f .D.....{.g.....:
- 8041404: 6da8 9345 7c44 8e8c 96c7 24eb 9e07 4233 .mE.D|.....$..3B
- 8041414: 30e1 1f18 c124 4460 4959 0838 41fa b127 .0..$.`DYI8..A'.
- 8041424: 87e2 71d1 b630 9be2 0bc8 2fc6 2df6 aed7 ...q0....../.-..
- 8041434: dcb4 4eeb 1fb9 bb0c af49 aee5 14ac ec53 ...N....I.....S.
- 8041444: b9ec dafb de60 bddb d777 071b 124e de10 ....`...w...N...
- 8041454: 2468 9dae 5b22 dc14 b892 d4c7 84ba 42f8 h$.."[.........B
- 8041464: f2d1 6166 9ae4 4c14 3c3f a4c2 5669 995e ..fa...L?<..iV^.
- 8041474: 4b47 d81d cb4e 772b 71c2 ec9c c2f4 dfbe GK..N.+w.q......
- 8041484: ba2a 6765 0a34 3e86 0127 9599 5b15 c572 *.eg4..>'....[r.
- 8041494: d9dd 2d85 9638 bf3b 150a ad4b 1f9d a3c6 ...-8.;...K.....
- 80414a4: f3be 76c2 4f4f b74d 791f 6687 e8b6 5c9e ...vOOM..y.f...\
- 80414b4: f774 8bb5 d2ee afa2 b85d eee8 1755 9bdd t.......]...U...
- 80414c4: 7459 6460 81f0 0fd3 f8b1 6da0 1c39 c8cc Yt`d.......m9...
- 80414d4: a2c2 815b b1d5 56ba 0acf a7ad a1d6 b7d5 ..[....V........
- 80414e4: 2d06 7ec7 888b f1c8 bc0f 3068 0c98 c441 .-.~......h0..A.
- 80414f4: 1166 8acb e3dc 9871 b904 8f6c 07b2 d0ce f.....q...l.....
- 8041504: 06e9 3be3 010f e7e7 6a32 09c8 3972 e475 ...;....2j..r9u.
- 8041514: 7274 0d39 74e4 3973 c86b 51e9 384e 7c72 tr9..ts9k..QN8r|
- 8041524: 8c7f 4854 eea9 be31 0a9e f8c8 df10 f487 ..TH..1.........
- 8041534: 8e3d e20f 7c60 1014 5f58 8c66 71a2 e482 =...`|..X_f..q..
- 8041544: 2640 030f 80cc 37b1 76c4 ab52 ba8c cf7e @&.....7.vR...~.
- 8041554: 991b b2c5 0bd7 c3bc 3fc0 2d3d 3448 7705 .........?=-H4.w
- 8041564: 521e 41c7 171c 967a dc69 5879 7e9a fd3e .R.A..z.i.yX.~>.
- 8041574: fcf2 e9e3 f3cb 1b9f bfe7 ff38 f9f9 4827 ..........8...'H
- 8041584: 377c 27fd 9afa 317e dcfd a22c 1a32 16af |7.'..~1..,.2...
- 8041594: f9ad c226 26f9 357e fafd effc bfa6 4d7f ..&..&~5.......M
- 80415a4: a7c5 3996 dcfd fe98 e9ef e7e7 9f3f 457e ...9........?.~E
- 80415b4: 7f9f a740 225f 12f1 bedd 3aca 5a2d 1102 ..@._".....:-Z..
- 80415c4: d0c1 fb71 9f81 694d 7979 94c1 e70e f3c6 ..q...Miyy......
- 80415d4: fb68 9dd6 1ff7 dc1b c7f0 cf98 cc4b d16e h...........K.n.
- 80415e4: ee9c 064f 306e f42e c0d1 fff4 bf4c ff3b ..O.n0......L.;.
- 80415f4: fcf8 e313 75aa fbb7 9ea3 0433 1d27 5e87 .....u....3.'..^
- 8041604: 4061 fc2d 9a2f 818c 11c9 5f32 7f4d c407 a@-./.....2_M...
- 8041614: 827e 3a49 079e bfc4 ddae 8845 a8f6 ffd5 ~.I:......E.....
- 8041624: a3c7 39e7 8f18 dfef 687b 3354 a53c 938b ...9....{hT3<...
- 8041634: 8c1b 9963 408f c6ee 464e 73ee 99ab e0ab ..c..@..NF.s....
- 8041644: e65a b487 2e13 91ad 9091 70bf d858 731a Z..........pX..s
- 8041654: 64bd 8275 7585 79b0 a92e 59d3 0758 ebdb .du..u.y...YX...
- 8041664: 3a92 85dd b075 d301 c33a 198c 93ce f336 .:..u...:.....6.
- 8041674: 7145 cda4 ee70 2b94 43f7 3dec 58c9 be75 Eq..p..+.C.=.Xu.
- 8041684: 4e6c 3b7f 397d 03fd 1a51 ee28 3615 a7c4 lN.;}9..Q.(..6..
- 8041694: 6fd3 dfa7 b419 a62b e25f b7ff 8ae6 62bb .o....+._......b
- 80416a4: 992e ead6 0acf b5b5 4abd 6d69 b4ff 5f86 .........Jim..._
- 80416b4: 7d8d d8fc 3fda abdd f754 fcdb 3fc9 c5da .}...?..T....?..
- 80416c4: e527 1d7f b7b8 cb56 8e09 9c5f 47e4 7f4e '.....V..._..GN.
- 80416d4: 1412 4bdb 6695 1b01 2912 73c9 6e4b 1cf4 ...K.f...).sKn..
- 80416e4: 329b f077 2d14 8b70 dc79 2dca 13f6 b621 .2w..-p.y..-..!.
- 80416f4: ded4 e27b f797 0a57 66ed 6a50 f13f 8a57 ..{...W..fPj?.W.
- 8041704: 1fed 3675 6db9 c573 e139 5908 19fd a92d ..u6.ms.9..Y..-.
- 8041714: fa53 bb68 9ff4 57f7 5ade 4c5d e03f d340 S.h....W.Z]L?.@.
- 8041724: a7af 0d2f 13a6 fa63 920d 48ff 919c 18f8 ../...c....H....
- 8041734: 0b38 81f3 647f f2f6 01a9 02ce 9060 57d8 8....d......`..W
- 8041744: 6244 535f 682e 5bee 7e40 df85 0d2f 3ee2 Db_S.h.[@~../..>
- 8041754: fcf8 fce2 c6d7 95f4 fe71 d337 e757 0d7f ........q.7.W...
- 8041764: f6f6 d36b 7ff2 c584 278d 20ee de4c 39c1 ..k......'. L..9
- 8041774: e31c f5f8 21a2 8e84 c141 fe9c dd06 5fa1 .....!..A......_
- 8041784: 70c1 625f 4838 2dfe d50d ff38 d825 862b .p_b8H.-..8.%.+.
- 8041794: ff88 1c18 92ed 9857 4020 eb28 53fc 1f03 ......W. @(..S..
- 80417a4: 1438 31d4 9344 9b68 7045 907b 30dd 9519 8..1D.h.Ep{..0..
- 80417b4: 21c2 b5ce 4934 63e7 0748 345d 0922 de20 .!..4I.cH.]4". .
- 80417c4: efab 520b f3a5 0531 d497 cd6b 0b8a 006d ...R..1...k...m.
- 80417d4: 1e51 68f8 4c59 50a4 2e6c 6f22 f721 592a Q..hYL.Pl."o!.*Y
- 80417e4: 0a48 1a42 f389 fb31 c3f0 405b aa01 d17b H.B...1...[@..{.
- 80417f4: 9864 8e94 0ec7 6c0d 5561 d43a 0a18 ee32 d......laU:...2.
- 8041804: 42f0 14a0 9742 b973 1dab 379c 40dd 2874 .B..B.s....7.@t(
- 8041814: 5ce4 506a 3a64 7c71 8d1c f7fd 1a81 ccb4 .\jPd:q|........
- 8041824: 56fb 3888 df51 1d1f 09d3 f22a be58 0619 .V.8Q.....*.X...
- 8041834: 7ac7 8b1e 2238 1c6f 208c a6bf c1d0 e53c .z..8"o.. ....<.
- 8041844: 6c56 76db 30a5 7a7c 294a 972f 65f2 edaa Vl.v.0|zJ)/..e..
- 8041854: 83f4 0271 609a 3eaa 8cff 1856 4f2b 90cc ..q..`.>..V.+O..
- 8041864: fd0e 29af 0449 64b2 9b16 92de fb6d c2ed ...)I..d....m...
- 8041874: 0d6c 26c8 fa80 888e fa78 c90d 9f0a 6c83 l..&....x......l
- 8041884: 8b78 9250 e39a f18d 9505 8710 ff3d f3bb x.P.........=...
- 8041894: d04f a11c 3f39 db6b 2934 3f33 5ced 7e66 O...9?k.4)3?.\f~
- 80418a4: 28de 362a 134d 7373 69d2 b980 3c1b df92 .(*6M.ss.i...<..
- 80418b4: 8731 56ff 2ec8 03b4 4f7f e443 f80d 7692 1..V.....OC....v
- 80418c4: 81a4 7ca1 f34d cec5 d224 31e7 03ff 52ed ...|M...$..1...R
- 80418d4: f19a d877 d898 800a fa21 bec7 79f8 1b7e ..w.....!....y~.
- 80418e4: 93a4 ff3c 3094 8813 eacd f682 a7e5 7d97 ..<..0.........}
- 80418f4: c5fa 3436 ff2e ef2f 85dd a15a 0128 5b0b ..64../...Z.(..[
- 8041904: baf6 7b61 4a02 4218 b27f 15cd c567 265c ..a{.J.B....g.\&
- 8041914: 8084 9046 19c2 4cb4 1098 8829 0f18 3c1f ..F....L..)....<
- 8041924: cdde 7be4 b310 8758 17a4 d0c6 e2c4 3611 ...{..X........6
- 8041934: b058 3c1b 8a4f 5496 a0cf b010 8de4 ea52 X..<O..T......R.
- 8041944: 741f 6c5a 8b6a 5727 3089 1e91 627d 73f2 .tZlj.'W.0..}b.s
- 8041954: e387 b58f d958 43b1 5c7a 241c 2fbb ac46 ....X..Cz\.$./F.
- 8041964: 1184 427d 81a9 e76a 8125 677f 07e8 dbcf ..}B..j.%..g....
- 8041974: a792 2608 d072 b107 7d7b e320 903e 62b5 ...&r...{} .>..b
- 8041984: 469b f42f 60fd 0828 1926 aca5 2ae6 e830 .F/..`(.&....*0.
- 8041994: 3b78 c649 3ba1 0a81 f508 162d abd2 7d95 x;I..;....-....}
- 80419a4: 7132 1ca6 652a 8268 5dbf 0e36 7109 1e85 2q..*eh..]6..q..
- 80419b4: 0bb8 284c 5f89 f290 083f 9d2e 0ea2 0978 ..L(._..?.....x.
- 80419c4: a026 cd6a 63b4 9583 8df5 e478 0f0c 07aa &.j..c....x.....
- 80419d4: e751 c6a0 2318 bd38 9b19 6d39 2709 3244 Q....#8...9m.'D2
- 80419e4: fa8e 320c a43f 4dc5 dc11 9a6b bd92 838d ...2?..M..k.....
- 80419f4: 7441 2c14 3cc2 42e3 7436 1409 97c8 83d8 At.,.<.B6t......
- 8041a04: ed5a c23c 8f16 052e cd7e 7510 4bb8 c046 Z.<.....~..u.KF.
- 8041a14: 69ec 9cee 259b 058b 4cd8 0969 f19b 2c42 .i...%...Li...B,
- 8041a24: 86bc 1624 f0cf ca22 3058 7988 98ea 48d9 ..$...".X0.y...H
- 8041a34: 64b3 5331 4f3c 0b12 7400 cf44 cb14 afe6 .d1S<O...tD.....
- 8041a44: 39b0 cf08 1e92 00ae 9fad 74f5 d3ba 9db9 .9.........t....
- 8041a54: 7699 5ad6 e268 10ce 2256 ad1c 6505 0314 .v.Zh...V"...e..
- 8041a64: 94ff 41ca 0715 f2e5 03b2 b40e 0154 cea3 ...A........T...
- 8041a74: 4cf3 c158 129a 8700 52df ac05 9660 f6bb .LX......R..`...
- 8041a84: 41c6 36c7 c157 dd23 281b 4b77 1a25 10bd .A.6W.#..(wK%...
- 8041a94: a033 4277 0571 324a 90bb b96b 5667 a835 3.wBq.J2..k.gV5.
- 8041aa4: 836b 7326 e3c0 ec84 2c51 e4a1 03ad 07cc k.&s....Q,......
- 8041ab4: 4195 2c02 4af2 8bac 164c 8557 381d d464 .A.,.J..L.W..8d.
- 8041ac4: 0ab8 d8b4 e97f 2e58 64a1 00c2 e18f 3035 ......X..d....50
- 8041ad4: efb2 a04b 3434 1d8d 9c3f 1ac4 60a2 9982 ..K.44..?....`..
- 8041ae4: 3cb3 ba30 db34 65cc 8dfb 0946 6150 b9b5 .<0.4..e..F.Pa..
- 8041af4: 200a 680b 0c97 3656 76c8 cb9f 13da d488 . .h..V6.v......
- 8041b04: 7947 75c5 46cd 06fb 7815 57d4 1787 bfa3 Gy.u.F...x.W....
- 8041b14: bc02 34b6 24ce 69e9 430b e249 c203 a5be ...4.$.i.CI.....
- 8041b24: 2496 ab5b a3d7 8330 8d95 3d90 d99a 503f .$[...0....=..?P
- 8041b34: 1590 615e 7294 b24d 693a 3083 e59a 2a48 ..^a.rM.:i.0..H*
- 8041b44: 4e93 61c2 fa27 d520 b1a2 592b 278c a5cb .N.a'. ...+Y.'..
- 8041b54: 52b0 bf82 cacc 8aef 6071 9ada 4f04 4c96 .R......q`...O.L
- 8041b64: 8f98 a655 a4b4 b666 d940 a049 abeb 5835 ..U...f.@.I...5X
- 8041b74: a17d 91a2 48b2 24ca 9aa9 7fe7 86c3 3f11 }....H.$.......?
- 8041b84: e867 d7cb 6d81 0608 d83b 4909 9596 3ba2 g....m..;..I...;
- 8041b94: a5eb 6710 68a1 b6be 043e 364c 7d8c e423 ...g.h..>.L6.}#.
- 8041ba4: b45c f242 2be1 ed69 3d13 19fb 2e86 381a \.B..+i..=.....8
- 8041bb4: d5cc 37af cccb da68 0c4f b5d2 7f07 ca0a ...7..h.O.......
- 8041bc4: cc36 4b4f f7ce a3b2 0d08 0ef5 0708 f2e4 6.OK............
- 8041bd4: 68a3 afda 9620 d50b a85b 9fdf 4d09 967b .h.. ...[....M{.
- 8041be4: 4936 264d 237b 13e5 671b ff95 6a7b f0ca 6IM&{#...g..{j..
- 8041bf4: fd34 e3f9 f707 edc9 7960 2562 56fd eeea 4.......`yb%.V..
- 8041c04: 0281 5ef3 8c92 091e 4faf ca1b 9189 6acf ...^.....O.....j
- 8041c14: 9652 1e3c 21b7 1ed3 7f05 c0f9 0a7d be91 R.<..!......}...
- 8041c24: de60 bd0b 1471 9d47 4ca4 7655 1f77 b8e2 `...q.G..LUvw...
- 8041c34: 61f4 0817 0586 ddf3 d0db 1c6b 1b0b b29c .a........k.....
- 8041c44: e486 7802 d311 2871 6674 3b5b c5b2 0c3e ...x..q(tf[;..>.
- 8041c54: 0d5a a228 b060 6400 83ae d953 0641 9a55 Z.(.`..d..S.A.U.
- 8041c64: 56c4 02ad c275 1769 9b02 5326 9f66 8157 .V..u.i...&Sf.W.
- 8041c74: 75c0 c91d 042d 6845 10b4 8a13 e867 8636 .u..-.Eh....g.6.
- 8041c84: 4667 e457 2327 5612 7046 a82f 6fdd 1dab gFW.'#.VFp/..o..
- 8041c94: 068e 1e93 6ca9 b8e5 7a1f a141 956a 8ad6 .....l...zA.j...
- 8041ca4: f8ad 4c38 1ebc 1d49 139e 2607 5318 0e12 ..8L..I....&.S..
- 8041cb4: b1bb c4d9 2ed7 6444 b6f8 2a0a 1313 0966 ......Dd...*..f.
- 8041cc4: e5a0 0a62 2d87 00ae 2e2d c689 cc2f d626 ..b..-..-.../.&.
- 8041cd4: 21e0 4b75 c432 3c64 f706 51a0 0e28 1702 .!uK2.d<...Q(...
- 8041ce4: 428b 0187 9dc8 ef77 82a4 980e 9093 e068 .B....w.......h.
- 8041cf4: 4144 a44f 425d 7635 1b80 7ecf 8263 be84 DAO.]B5v...~c...
- 8041d04: 0a4b 77f4 9df8 7e19 a284 05f8 c5a9 97c8 K..w...~........
- 8041d14: ac06 0645 a2a1 3185 51b8 03f4 0107 4636 ..E....1.Q....6F
- 8041d24: 811e ac97 fe9f cc03 bf62 97c0 ce18 6702 ........b......g
- 8041d34: 77c8 1fd8 58e8 dcac 9b0f a93d c2ff a1a4 .w...X....=.....
- 8041d44: 4f66 f12a e777 02bf fc43 fa62 f9d5 162f fO*.w...C.b.../.
- 8041d54: 633a 7fb8 5daf 9570 347f 3bbf f87e 7186 :c...]p..4.;~..q
- 8041d64: 37e7 2b8c 9729 4f76 28f3 7d0a 92a3 c811 .7.+).vO.(.}....
- 8041d74: df76 b981 334f 167f e59c f5ea 6eeb c6f1 v...O3.......n..
- 8041d84: 370d b6e5 3819 e688 080e de05 f264 923a .7...8......d.:.
- 8041d94: 5a2b 5b13 934d 9c3d b982 319b e7b4 1761 +Z.[M.=....1..a.
- 8041da4: 95e4 8140 3a8f db86 8b86 e9b5 b182 5a57 ..@..:........WZ
- 8041db4: 75fe 6965 f96a c270 79f2 5c10 3ce8 2b25 .ueij.p..y.\.<%+
- 8041dc4: a07d c3f5 d823 f6f3 fdfc 72fd 0de8 ec2d }...#......r..-.
- 8041dd4: 7632 936b 0e47 de5d ef85 36d7 95ab 73d1 2vk.G.]....6...s
- 8041de4: 4513 9849 03f4 af5b 39c2 f238 7631 eadd .EI...[..98.1v..
- 8041df4: e81d 06fb c10c c419 028f 9cf8 1ee3 b7b6 ................
- 8041e04: 7ae2 7d26 d1c4 ed90 e632 3dca f36c d8f2 .z&}....2..=l...
- 8041e14: a781 007b aff7 75da 76e9 57b3 f29c c0e4 ..{....u.v.W....
- 8041e24: 1421 37c3 c48c 2640 7b7c 1f6f 47ce e8fc !..7..@&|{o..G..
- 8041e34: 62d8 5c05 8d6b 8d5c d12a 29c0 bea3 c837 .b.\k.\.*..)..7.
- 8041e44: a8e3 7512 3872 04aa 93a4 69a7 9d62 8e9c ...ur8.....ib...
- 8041e54: a4aa 6c56 3981 ef6c 2780 6a64 ce45 bfb3 ..Vl.9l..'djE...
- 8041e64: 53bd 815c ea4b ac37 33c8 40a0 4c22 d101 .S\.K.7..3.@"L..
- 8041e74: 6d38 a367 ded8 bbbe e8fd c1de dba3 9ab7 8mg.............
- 8041e84: ebe2 47dd 6fb7 27df e989 25d6 dfad 5bd2 ...G.o.'...%...[
- 8041e94: c067 6d37 3a5d 2ffc 809e e004 fc59 4857 g.7m]:./....Y.WH
- 8041ea4: 343f aca4 9bd2 a776 0ae2 ee2e 414f 3ae4 ?4....v.....OA.:
- 8041eb4: 9954 f6a8 3da6 8022 e2e1 50ce fd48 27fc T....="....PH..'
- 8041ec4: 959e 9c80 df6f 2ab3 2c97 68cf f910 2674 ....o..*.,.h..t&
- 8041ed4: eb64 69df 379b 905f d0b1 9a6c a337 4e28 d..i.7_...l.7.(N
- 8041ee4: 688c dc6c 509c 4048 edb7 4797 9013 19ba .hl..PH@...G....
- 8041ef4: 873c 6c79 0e10 2cd9 b308 caa5 c21f eecc <.yl...,........
- 8041f04: c2c0 f566 5052 c70f d41d e6c2 d270 5bef ..f.RP......p..[
- 8041f14: 9a61 f71d ac26 ab5e 4112 9e93 0755 3f4d a...&.^..A..U.M?
- 8041f24: 136d 6c30 a2a1 b4b3 0cd1 ada6 66ca c207 m.0l.........f..
- 8041f34: 3cbd 8b4d d029 4103 771d a823 62b1 8704 .<M.)..A.w#..b..
- 8041f44: d97a bc2e aa5e 6520 e65a 6588 8386 5890 z...^. eZ..e...X
- 8041f54: dc18 4527 2b2b 7372 0145 59db 7c64 0e49 ..'E++rsE..Yd|I.
- 8041f64: b989 244d b201 caa5 e86a f5cb e2f4 c44d ..M$....j.....M.
- 8041f74: c3ab 2ba1 f717 c192 4750 fcff 8ef9 75a4 ...+....PG.....u
- 8041f84: f415 9a82 6f7a 970a 4bd5 8388 29c6 354c ....zo...K...)L5
- 8041f94: 9660 f717 039c c263 06ff dbc7 dcb7 ae7f `.....c.........
- 8041fa4: 666c 9708 d84c c90f 9359 2511 22b8 dab2 lf..L...Y..%."..
- 8041fb4: f4e6 42ff 2197 fbfb 9037 be1a 7f25 a83b ...B.!..7...%.;.
- 8041fc4: fa74 903f 6599 16d0 f517 f9f5 16ca ee34 t.?..e........4.
- 8041fd4: 3924 7815 d516 4718 3d73 0b22 e63d 471b $9.x...Gs=".=..G
- 8041fe4: f36f c843 cfea 48f4 5c2d 19c8 11c7 e83c o.C....H-\....<.
- 8041ff4: 39f9 eb22 7a4d faa4 3d73 2ed6 51e8 d38a .9".Mz..s=...Q..
- 8042004: e5a0 289d 0c3a af61 061e 5209 5d2c 081e ...(:.a....R,]..
- 8042014: d909 f887 5e5c 9d90 027a dab4 707e a104 ....\^..z...~p..
- 8042024: 14b5 c78c d8d1 14b4 d539 3920 5eb1 3f7c ........9. 9.^|?
- 8042034: c24a 0bce 779c a2a8 d6c4 79dc 4c29 b957 J....w.....y)LW.
- 8042044: b0e3 cb02 8918 ca99 442f 182e 6a88 4be4 ......../D...j.K
- 8042054: 9aff 4824 30f2 2fb0 0b09 b7ff a04a 4f62 ..$H.0./....J.bO
- 8042064: 393b a696 cb2f 3c60 7717 06b7 1953 173c ;9../.`<.w..S.<.
- 8042074: 9899 04a2 8864 e9da 2dc9 67a5 b93e 5c49 ....d....-.g>.I\
- 8042084: 6f26 364a 9646 4c66 7309 c100 c1de 240a &oJ6F.fL.s.....$
- 8042094: 9570 c0ec 0dde 1b01 a47e 1096 5c6c f708 p.......~...l\..
- 80420a4: 80dd d78e b205 edb7 c510 4010 843f 355b ...........@?.[5
- 80420b4: 0547 62a2 ca9c be48 0e11 a90d 5d42 fc2c G..b..H.....B],.
- 80420c4: 3824 2025 ec25 145d 90c3 21c0 7d68 c2ef $8% %.]....!h}..
- 80420d4: 56fd af67 2902 028a 38e8 8d24 aaa4 2232 .Vg..)...8$...2"
- 80420e4: 42c6 6428 b32d f7b8 c1de edc3 db47 20f7 .B(d-.......G..
- 80420f4: 30a8 6f9c bd9b 5e03 03ec 0573 5a11 0939 .0.o...^..s..Z9.
- 8042104: 408a d630 2abd 641a e0c0 9808 4063 7991 .@0..*.d....c@.y
- 8042114: 2f49 3fb7 7db8 177f d132 834c 6e55 a6b0 I/.?.}..2.L.Un..
- 8042124: 241a 8b85 16d9 de75 a3d9 4bfc bcda bdb5 .$....u....K....
- 8042134: 7b7b cef7 dbbd cdf3 d0d6 d62c 6669 67b9 {{........,.if.g
- 8042144: c1a4 6e2b 772b b6f1 6fca af15 381f b563 ..+n+w...o...8c.
- 8042154: 7059 c2ba 4703 6d3f a68d c1f5 5cc0 116c Yp...G?m.....\l.
- 8042164: 9f51 0465 66ca 84df 50bc aa20 91d4 8c3d Q.e..f...P ...=.
- 8042174: 0186 6373 689c a644 8239 76bb 57bd 31bd ..sc.hD.9..v.W.1
- 8042184: effd 52d8 431f c153 134e d64e 9ddf 1aff ...R.CS.N.N.....
- 8042194: 9ba6 d357 ba7f 8abe ebf2 4d08 d834 6623 ..W........M4.#f
- 80421a4: 6e83 4187 e0df 259f e83f 9338 627e 03ce .n.A...%?.8.~b..
- 80421b4: 7a94 aa50 b449 31bf 7bfd 7756 077e fd8e .zP.I..1.{Vw~...
- 80421c4: f5f9 3455 e374 c8fa b660 9b65 77b4 b04a ..U4t...`.e..wJ.
- 80421d4: 758f 4d87 c3c3 82c8 0b71 fe15 861b adf1 .u.M....q.......
- 80421e4: d2d8 f606 27fd f9d8 f4e0 916c 02fa f05f .....'....l..._.
- 80421f4: 96fa afaf 6e8e c688 e9ae 7a5b 3d06 caa9 .....n....[z.=..
- 8042204: e7cd 4c31 17f7 c329 2bad 8032 cc34 11d3 ..1L..)..+2.4...
- 8042214: 1bfb 0561 811c d1ea 952e 2b26 aef6 f467 ..a.......&+..g.
- 8042224: c9ef c200 81de 7422 70e4 6100 388f a288 ......"t.p.a.8..
- 8042234: 0f54 aed1 9d1a 7bba e2de a61d 38ab 40f3 T......{.....8.@
- 8042244: 8372 2e74 296d f8a3 b90b 9890 7c5e 7df6 r.t.m)......^|.}
- 8042254: 5229 b2e3 2c43 43f1 bab0 afab 7385 5f5d )R..C,.C.....s]_
- 8042264: 9d2e 6a4d 96ac 4382 159c 6abb 5c65 eb5c ..Mj...C...je\\.
- 8042274: 3474 8e0e acde 0453 f32a 53d1 a8ba f449 t4....S.*..S..I.
- 8042284: fef3 c7c3 a8dc 607e 464c 81f1 baa4 38ff ......~`LF.....8
- 8042294: 4434 3970 6e3c e83f f9b8 07fe f7d5 39af 4Dp9<n?........9
- 80422a4: c477 0931 008a d9f7 eed3 fdce ef87 1eef w.1.............
- 80422b4: b07c a2cf 542e ed63 43d0 d2d8 3924 caba |....Tc..C..$9..
- 80422c4: c7a9 1d90 3a01 ee73 b6bd 77eb beb2 735f .....:s....w.._s
- 80422d4: 4214 4cf3 3407 1273 d25e 83cb 77f7 33f3 .B.L.4s.^....w.3
- 80422e4: ed9c 4e85 0ec6 6105 1389 f45c c9e2 9c33 ...N...a..\...3.
- 80422f4: d3b2 f6f3 bdf5 10ec a11e cec2 51f6 3ee7 .............Q.>
- 8042304: aa1a 810f d92f e505 a55e b10b ef52 9588 ..../...^...R...
- 8042314: f562 b67f 0697 b2f7 7aa6 ba81 96a2 f284 b........z......
- 8042324: d2ae cdc7 9d6d 6616 5fdb f6e3 55d7 74fb ....m..f._...U.t
- 8042334: 40fb 81ce aef2 fed2 edee 0f7b 0279 d2ac .@........{.y...
- 8042344: b6cd cebf 6fed f6a8 e185 f65a b940 0f69 .....o....Z.@.i.
- 8042354: 44b3 78fc 7b77 fdf7 f3c7 cf42 3706 a9b8 .D.xw{....B..7..
- 8042364: d41a 28e4 bbca b9b0 12c5 26d4 fb1a 9353 ...(.......&..S.
- 8042374: 34a0 cd86 fc12 487f 2451 e592 a8a4 2805 .4.....HQ$.....(
- 8042384: faba 9de9 524a 2b5a 9c17 6f8c 4d20 8ca5 ....JRZ+...o M..
- 8042394: 1335 32a7 9a0e 5409 bf19 1e43 c9df 1de8 5..2...T..C.....
- 80423a4: dc64 7909 2b7c 77a3 7290 6413 d5f1 de8c d..y|+.w.r.d....
- 80423b4: dc81 c8fa 1be0 3d1a b736 2760 8321 69af .......=6.`'!..i
- 80423c4: 0ef4 cdd2 2c85 a8be 1801 b70a 9822 f09c .....,......"...
- 80423d4: 31a6 59bd 6d11 ecf6 c5d0 d7b9 d356 bef8 .1.Y.m......V...
- 80423e4: e12e 525d 8e6f 7793 3db5 fafc 8a7a f737 ..]Ro..w.=..z.7.
- 80423f4: 56ae 9e6b 86dd ab57 e798 4fa1 56af cf29 .Vk...W....O.V).
- 8042404: 0f18 4ab5 48b3 bc57 7fae 8c09 6060 863f ...J.HW.....``?.
- 8042414: ac40 7dd1 c19e f268 0929 4ac5 949a 0141 @..}..h.)..J..A.
- 8042424: 76e2 65d5 ca3a cb1b aac5 7207 2a4d 83b7 .v.e:......rM*..
- 8042434: a241 2ab1 72b8 33d7 b1d2 9faa 786b 7492 A..*.r.3....kx.t
- 8042444: 0f36 c0fc 4183 7c99 4a1b 7235 ee29 c3d6 6....A.|.J5r)...
- 8042454: 422d d2e1 ef49 91d5 c74b ac43 2c26 e34f -B..I...K.C.&,O.
- 8042464: d41d 4ed9 300a 7ab5 aa37 8db5 7e36 6a56 ...N.0.z7...6~Vj
- 8042474: 480d f8f8 86b5 e380 67b6 2b57 f5d5 b566 .H.......gW+..f.
- 8042484: a15a 7b24 ab22 7a95 910d 2b52 63f6 2176 Z.${"..z..R+.cv!
- 8042494: 3b95 68e3 23b0 2adb a578 c6cd dc26 28b2 .;.h.#.*x...&..(
- 80424a4: 3d16 eb70 55ca 5da5 1b8f 21c4 b2d4 ac71 .=p..U.]...!..q.
- 80424b4: 2bdd 4e53 a1b7 1473 1d76 52f8 14cb bb5a .+SN..s.v..R..Z.
- 80424c4: 85dd 8a7a 6b08 3407 a084 07d2 b81d 1fa2 ..z..k.4........
- 80424d4: b9df a46d 4377 c04a ae11 2dcf 55a8 381e ..m.wCJ....-.U.8
- 80424e4: d1e4 dd5d 871d 3408 ca4d 8f6f 9e8f 2a60 ..]....4M.o...`*
- 80424f4: ca4f 7cab 62d3 9aa9 0e2d deee 77b9 c429 O..|.b..-....w).
- 8042504: 3a56 c3ce 5ef8 86e4 707d 0789 0b8f 7950 V:...^..}p....Py
- 8042514: cb32 ee18 4952 17cb 4359 b917 4511 f4b4 2...RI..YC...E..
- 8042524: 2ff9 d7a1 3a93 becd 8a7f c669 d527 7b25 ./...:....i.'.%{
- 8042534: 27da aeb0 01fd df19 72c1 86c6 182b 106b .'.......r..+.k.
- 8042544: ef52 c451 ee0d c21a 4c67 1cf6 eb4d e282 R.Q.....gL..M...
- 8042554: 4e6a 9eff ba3d c39f 49b3 cef1 ead0 19e1 jN..=....I......
- 8042564: 0bb0 191d 6e07 ef91 16fe 5b14 44f0 753b .....n.....[.D;u
- 8042574: 975f eaa1 7c52 dbb5 9b76 ba5d 4a88 0510 _...R|..v.]..J..
- 8042584: 7e48 9ee0 be9c d307 7c04 5968 7bc6 64d1 H~.......|hY.{.d
- 8042594: cb8c b206 1c34 c422 9296 4154 245c d9ec ....4."...TA\$..
- 80425a4: 81f3 6003 a6e6 5774 fb2b a614 1e56 a345 ...`..tW+...V.E.
- 80425b4: b142 b08d b6e8 a4d9 68e0 d5b3 3dd3 21a0 B........h...=.!
- 80425c4: 855a afa1 8e90 069c 7648 0298 99ac dd70 Z.......Hv....p.
- 80425d4: 7f29 5c3f 3694 0add c970 0298 c124 b32e ).?\.6..p...$...
- 80425e4: 0828 1735 dbfe c32b 78df 4c9b 775c 98e1 (.5...+..x.L\w..
- 80425f4: 600f 2b41 1498 9d44 c00b a3ce 961c 6131 .`A+..D.......1a
- 8042604: 3dd5 fd0e 87a4 939d ce2f 88af 881d 4be2 .=....../......K
- 8042614: a122 68ce d112 7a90 15b5 c01b 8e79 ba6b "..h...z....y.k.
- 8042624: e01c 7360 b7e0 dc38 4304 4570 9a96 5d37 ..`s..8..CpE..7]
- 8042634: cde8 93ed 3222 dda4 232b 41f7 d8fc 0a39 ...."2..+#.A..9.
- 8042644: 8c1e 201f e314 7026 7c54 442d 6e01 f85e ... ..&pT|-D.n^.
- 8042654: fb6c 7071 6122 8c39 d703 3992 184f df52 l.qp"a9....9O.R.
- 8042664: 747f 2cb7 d2ae 088a a410 2971 6418 81ea .t.,......q).d..
- 8042674: 2f16 68b2 2cc2 eadb 3994 129e 43d7 3605 ./.h.,...9...C.6
- 8042684: f36d 8c28 6c43 5c26 6d07 98aa 4eef 4299 m.(.Cl&\.m...N.B
- 8042694: 193c 7e33 3ca6 91ba 22ff 626f ba84 6083 <.3~.<..."ob...`
- 80426a4: d0ed 843b 3b41 94ed 04c1 c5de dc5d 9c0e ..;.A;......]...
- 80426b4: 67c3 eb8c 38d1 02ea 717d 6f86 c470 974b .g...8..}q.op.K.
- 80426c4: 0f91 e263 60fe 5890 c0a8 755f 49ca 3894 ..c..`.X.._u.I.8
- 80426d4: b7fd 95ab c80a 9d9e fa7c 9cc6 92a1 d7d7 ........|.......
- 80426e4: 91a7 46cd b0a7 f1fd d241 5503 8062 d658 ...F....A..Ub.X.
- 80426f4: 5cfa bcf8 8922 da74 3562 ebd2 2c71 014a .\..".t.b5..q,J.
- 8042704: 6edf 5c99 c2f8 67a4 6e5a db16 1b3e ec3f .n.\...gZn..>.?.
- 8042714: d6b2 e2a8 0198 61c9 766e 381a 888d 49b0 .......anv.8...I
- 8042724: 6c80 07b1 ce06 1bb8 770e 91a3 d672 6993 .l.......w..r..i
- 8042734: 828a ee59 cce3 2f00 6b06 6e4e 3806 026c ..Y..../.kNn.8l.
- 8042744: 1390 2f39 279e 438f 0fb7 a3cb 2320 9303 ..9/.'.C.... #..
- 8042754: a9c2 baae 8a2b 88e9 315b fe2a 95ba 536b ....+...[1*...kS
- 8042764: 515f 89ba b6ac 818c ceed 12ce dd44 fb60 _Q..........D.`.
- 8042774: 72a4 caae 2126 db57 02d5 e89f bb5a 2c5c .r..&!W.....Z.\,
- 8042784: 0aa7 bf17 70ba ea4c 8511 e91f 9277 a853 .....pL.....w.S.
- 8042794: 017c ce81 5fdd 614e 4a67 3808 84ed 44fc |...._NagJ.8...D
- 80427a4: c902 cf5a 1cb5 2e08 ce66 d483 2073 458d ..Z.....f...s .E
- 80427b4: 8d20 081c 5dae b7ce 46b2 c220 2721 2106 ....]...F .!'.!
- 80427c4: 715c 2b94 6e9c 2e69 2292 1b37 6030 14e1 \q.+.ni.."7.0`..
- 80427d4: dca3 5a34 cd58 6444 1150 0807 ecab 31ee ..4ZX.DdP......1
- 80427e4: c965 6078 4995 ca49 47ce e344 a730 2a0c e.x`.II..GD.0..*
- 80427f4: 43d0 5568 34a5 024f f0c8 ad5e 7298 6154 .ChU.4O...^..rTa
- 8042804: e776 cd0a 7852 b1ed 8b2f 1c44 56ac 190d v...Rx../.D..V..
- 8042814: 68b2 983e eb94 6cca ca02 c047 69a2 20ca .h>....l..G..i.
- 8042824: 5742 1797 e496 b81d e2f4 ba8a 8723 8273 BW..........#.s.
- 8042834: 84fb 70d4 6805 93b0 8037 4f86 a185 f8ff ...p.h..7..O....
- 8042844: e1cc 2e02 cc00 18a4 d100 39a9 f6c3 eea4 ...........9....
- 8042854: 90fe 21ec 016e ebb1 02e3 b568 692a e131 ...!n.....h.*i1.
- 8042864: 4d3c e5a0 998b 0ccd cea0 d479 a9c5 a1b4 <M........y.....
- 8042874: 880f 61a7 d2f1 948c a9ed 5253 272d f243 ...a......SR-'C.
- 8042884: a801 2002 3ad3 8df3 0ccc 4c41 6166 e48b ... .:....ALfa..
- 8042894: 9c89 9e24 3fb6 a291 42b9 4b2e 0263 3f69 ..$..?...B.Kc.i?
- 80428a4: 4920 a4d9 6ad8 94c0 eca4 3b99 a222 9c43 I...j.....;".C.
- 80428b4: da58 23ed 4089 32ad 6026 3ed1 2c7b 266e X..#.@.2&`.>{,n&
- 80428c4: 63e4 2da5 e22d a2db c86e 45d9 b997 1bd0 .c.--...n..E....
- 80428d4: 522a 9e24 109c be0a e78f e73a cb62 cab9 *R$.......:.b...
- 80428e4: 6132 8dfa ccdd cfba 8609 8a03 9123 2807 2a..........#..(
- 80428f4: 530b 1c92 36e9 f361 cce4 f3d2 6a10 0836 .S...6a......j6.
- 8042904: 9796 794d 63a1 0549 2dbe 9980 bacb b5b1 ..My.cI..-......
- 8042914: 9455 4d77 d8d4 df35 769a 8efb fa44 5f29 U.wM..5..v..D.)_
- 8042924: fc41 d202 4bff fd19 f78b 5816 87c8 c646 A....K.....X..F.
- 8042934: 1961 3418 599f 122d 1038 7862 970b 110a a..4.Y-.8.bx....
- 8042944: 3dfd 3d77 c790 84a1 5dc1 b01c 8ef2 5ce4 .=w=.....].....\
- 8042954: 08be 39b1 38b3 565a f644 0c51 4e40 244b ...9.8ZVD.Q.@NK$
- 8042964: 91d5 5c1e d079 5ce9 b182 d1cb 74e3 28e0 ...\y..\.....t.(
- 8042974: 5e5c e1ce f387 a080 881f 5c22 84f9 8346 \^........"\..F.
- 8042984: 2db7 6010 a320 81a5 c835 9710 288f 6689 .-.` ...5....(.f
- 8042994: 9386 3f44 58ca d510 3f30 121a b18c 6486 ..D?.X..0?.....d
- 80429a4: 1867 2a11 fa7f a445 f110 0377 663c 4993 g..*..E...w.<f.I
- 80429b4: 9441 2f35 6101 4f13 6570 799b 6649 463c A.5/.a.Ope.yIf<F
- 80429c4: 23bc 1267 a0ab 33f8 92ba 97a9 1e72 4215 .#g....3....r..B
- 80429d4: 968c 49fc 962f 04b9 39d0 ca96 4cfb 690b ...I/....9...L.i
- 80429e4: 773e 78e1 15e2 7c96 2227 0097 7470 290e >w.x...|'"..pt.)
- 80429f4: 5de4 84ef a8f3 7730 0345 921c 54d3 c2a0 .]....0wE....T..
- 8042a04: 35b8 174e 88bf caef 5f7b 3104 6973 9503 .5N.....{_.1si..
- 8042a14: 0e65 d215 a5f2 9cc3 3ce9 a657 1780 8a61 e........<W...a.
- 8042a24: 0500 feb6 9934 1aa4 7415 6086 6658 f67d ....4....t.`Xf}.
- 8042a34: c6fa 16fa 380c 00c0 4774 5bcc f01c 58f9 .....8..tG.[...X
- 8042a44: f605 e01a cbbe 44a4 7841 8a00 ac86 657d .......DAx....}e
- 8042a54: 14ea 3a07 dc5c cd80 d142 fb7c 796d bfa9 ...:\...B.|.my..
- 8042a64: 7269 c44c f319 8743 01b5 6e8a 1bc5 5452 irL...C....n..RT
- 8042a74: 4291 d551 525b 4e94 4603 87d3 28a5 7617 .BQ.[R.N.F...(.v
- 8042a84: 7e65 0a64 88b0 a4bd 0e1c 54c1 4def 0651 e~d........T.MQ.
- 8042a94: 59b1 3d3c adc5 38a9 d13c 4aa0 08a1 b440 .Y<=...8<..J..@.
- 8042aa4: e843 2a31 8755 07d2 8194 f162 153e 8895 C.1*U.....b.>...
- 8042ab4: ca2f 29ba 1ac2 5339 cb7e e086 da5f c649 /..)..9S~..._.I.
- 8042ac4: 1dfd 6171 4aca cf83 f36c 3acf b59d 5aca ..qa.J..l..:...Z
- 8042ad4: a105 1c5a fbaa b757 deef f07d 6521 1c57 ..Z...W...}.!eW.
- 8042ae4: 81bf 10f0 cd91 bb71 adc8 3dd7 02af 8a60 ......q....=..`.
- 8042af4: b13f 7864 2c0f ef11 701d 0184 e47c 1def ?.dx.,...p..|...
- 8042b04: 30a8 bb02 4966 36ab a400 f809 4003 db28 .0..fI.6.....@(.
- 8042b14: ca33 e7e5 5d8e 0057 c376 a362 bdaf 9166 3....]W.v.b...f.
- 8042b24: d71d b75e 9184 ded6 c8b0 6b12 5a6f f4ca ..^........koZ..
- 8042b34: 9f65 0f6c 31fd d202 4a9b 0311 91db 60a7 e.l..1...J.....`
- 8042b44: 7d66 4d48 ca74 26d8 ad2b 0886 b98f 77d9 f}HMt..&+......w
- 8042b54: c3bc 889b 7b54 66f1 646d b8f5 d819 dee0 ....T{.fmd......
- 8042b64: 7eac b0f8 c887 d39b 6f10 e131 e447 2b73 .~.......o1.G.s+
- 8042b74: 8fb0 9d8c 6b37 ab87 f718 61c2 2dc8 c87c ....7k.....a.-|.
- 8042b84: a68f 6fc5 c6d6 db9d 92c2 2dc8 c338 9845 ...o.......-8.E.
- 8042b94: 1850 4b2f 15dc 8a10 e69b b865 65c8 5db3 P./K......e..e.]
- 8042ba4: 0352 a1e3 20e6 68e4 2771 cce6 ec42 ff54 R.... .hq'..B.T.
- 8042bb4: 5e05 12bb 347a efdb 4e38 1430 6577 466f .^..z4..8N0.weoF
- 8042bc4: a1cf 10f0 494c 98c1 09d6 c244 f118 8823 ....LI....D...#.
- 8042bd4: fcbc e40d 7a1a 8145 99cc 8ab8 a566 2f2f .....zE.....f.//
- 8042be4: cfe8 c88b 9b53 98a2 91e8 97a9 86f4 f9c3 ....S...........
- 8042bf4: c92f 99ec 37bd 72f2 95fa a078 f660 0675 /....7.r..x.`.u.
- 8042c04: 1504 9402 0c62 44bf f15d 09ac 6e5e a180 ....b..D]...^n..
- 8042c14: d3f4 31b2 9ffd 08dc 0304 2544 10d1 a3c4 ...1......D%....
- 8042c24: 5f2b 7052 7512 ee27 fcb9 e48a 7a06 e585 +_Rp.u'......z..
- 8042c34: 7a0b e5b3 92a5 0023 ad5d 1bd0 f42f 0b68 .z....#.].../.h.
- 8042c44: 942a 2361 72e9 7d18 b693 d8a6 646d 5569 *.a#.r.}....mdiU
- 8042c54: f579 dd7a 26b4 7ee3 c713 3f08 22b7 d74e y.z..&.~...?."N.
- 8042c64: 17b8 371d 5b25 0985 4942 b8c4 0f6c fd79 ...7%[..BI..l.y.
- 8042c74: 0d7a 3eb6 9811 c079 9981 518b 0f9c bcdd z..>..y....Q....
- 8042c84: c10c d598 e717 4d9f 8f7f 4bc8 ce3c d901 .......M...K<...
- 8042c94: 984d 318f ba01 481e 40eb 614f 62e0 6121 M..1...H.@Oa.b!a
- 8042ca4: 2f06 651d 0a53 3ec0 6bea a5a6 a94f e9d3 ./.eS..>.k..O...
- 8042cb4: 1898 ade0 babf f07f ede1 b69b 7dfc 7a7a .............}zz
- 8042cc4: d672 df92 b665 da94 3827 9baf c1a9 d669 r...e...'8....i.
- 8042cd4: da80 194e 5b01 61c9 3c44 6df1 7e3c 54b6 ..N..[.aD<.m<~.T
- 8042ce4: 5e85 0b3c 890c af16 15c4 b2cf 22dd eb4d .^<.........."M.
- 8042cf4: 4d00 c712 71eb e08f 43e6 95d8 5771 cced .M...q...C..qW..
- 8042d04: f612 ac9f 917b 99ce 2f70 c11d f802 064b ....{...p/....K.
- 8042d14: 07e1 070b eb71 bdc1 d130 9cc6 3cb2 9587 ....q...0....<..
- 8042d24: 490a 0100 95d9 e931 4604 20b2 8bc1 ea57 .I....1..F. ..W.
- 8042d34: a213 3c46 a4f6 ae8d 0808 faf2 f600 8896 ..F<............
- 8042d44: 63d7 7cc8 7e96 2ab4 031d 6f96 407a e852 .c.|.~.*...oz@R.
- 8042d54: c09d 3c2e d415 ee16 8d97 8e1e 3cf1 bc24 ...<.........<$.
- 8042d64: f023 709b 3363 7a79 906b 9c7a 17a1 6ff4 #..pc3yzk.z....o
- 8042d74: 5c4e 25c4 fae2 352d 4672 5b71 3cbb dcec N\.%..-5rFq[.<..
- 8042d84: 712c eefb 80f8 5d71 1466 4740 3a90 9a8b ,q....q]f.@G.:..
- 8042d94: 729a 90e2 a5bb 843c 48f4 22da 0a04 c917 .r....<..H."....
- 8042da4: 594c b1c7 7e0a a8a3 ec4a fb12 5c04 eb45 LY...~..J....\E.
- 8042db4: ee8d 8a26 0407 1985 af03 b608 9894 5e9f ..&............^
- 8042dc4: 2248 5367 b797 7911 ac2c 192e 77fd 3c71 H"gS...y,....wq<
- 8042dd4: d817 c16b c55f 5a95 6de3 edef 0af5 a3fd ..k._..Z.m......
- 8042de4: f90b 32f0 6177 7dbc def7 f0ae 914d 211b ...2wa.}....M..!
- 8042df4: 66a5 a38f 6daf 21b8 72e0 8608 2ee4 ff7b .f...m.!.r....{.
- 8042e04: 1dd1 dd3c 7786 b057 3042 af6e 7a14 b36d ..<..wW.B0n..zm.
- 8042e14: 0465 47cf b421 402e f0f5 0d36 7d72 a5ca e..G!..@..6.r}..
- 8042e24: 833b f2c8 5645 5940 57b8 84e4 6a43 644d ;...EV@Y.W..CjMd
- 8042e34: 06e2 0b47 4ac6 1e04 8807 378e d241 b5c0 ..G..J.....7A...
- 8042e44: 6f36 37cd 7b97 928c 2607 26dd adab f127 6o.7.{...&.&..'.
- 8042e54: 176a c6c3 2c3d 1d0a 1be1 5058 5c83 529b j...=,....XP.\.R
- 8042e64: 7896 4814 c279 2e78 a545 0a9a 6017 4e7e .x.Hy.x.E....`~N
- 8042e74: 86f2 72a3 adfe 6154 10ff 6bef d316 d5b7 ...r..Ta...k....
- 8042e84: eae8 6e06 0650 6d7d e2a8 28fa 4248 20ac ...nP.}m...(HB.
- 8042e94: 65f9 1140 9258 e8c5 b82c 8a1a 815c 2f0d .e@.X...,...\../
- 8042ea4: 2287 338f ec35 f6ee 9626 a951 fe96 19dc .".35...&.Q.....
- 8042eb4: 3696 462a d2a5 7fa4 0355 078b 65cc f424 .6*F....U....e$.
- 8042ec4: 127e 41f6 8ae9 28a2 3609 e135 3d47 0373 ~..A...(.65.G=s.
- 8042ed4: 0696 f166 a78c 0b08 cb75 273d 707e a43c ..f.....u.='~p<.
- 8042ee4: 034d f573 f80b 968e 9797 841c 6278 f426 M.s.........xb&.
- 8042ef4: 26cb 358f e9d6 ad2d 74a5 a7c7 c553 e5e4 .&.5..-..t..S...
- 8042f04: 568e b7cf cc66 bcb4 b8eb b79a 4b01 5eac .V..f........K.^
- 8042f14: 7576 5140 ac27 432a 1246 8c68 55b1 84b2 vu@Q'.*CF.h..U..
- 8042f24: 4f30 6cb8 4743 a328 a01f 4b54 9e9d a6aa 0O.lCG(...TK....
- 8042f34: 7720 5b29 f0c6 a1c0 b96b 11d8 8e00 d4b2 w)[....k.......
- 8042f44: c005 5c90 0112 5f48 4033 15a4 f7f5 2bc8 ...\..H_3@.....+
- 8042f54: cfb0 277e 1870 2a82 4e50 2cf1 45e5 b200 ..~'p..*PN.,.E..
- 8042f64: 3fd1 b2b1 8e08 f211 9c35 d8c8 be7a 83d9 .?......5...z...
- 8042f74: bc22 ab14 4287 9e93 a8ec a653 2b4c ff06 "....B....S.L+..
- 8042f84: 5aad e640 2031 957f 9816 bd01 0cab 2842 .Z@.1 ........B(
- 8042f94: 031c 8972 be0b dc45 3263 56ca 2e48 5c34 ..r...E.c2.VH.4\
- 8042fa4: 7b51 64fb f021 9569 8e6f 63a3 8ea8 278f Q{.d!.i.o..c...'
- 8042fb4: b223 630d a7e3 f07e ed0e 1b24 8f1c e2df #..c..~...$.....
- 8042fc4: f78d 083a 2439 7817 8bd9 3263 b2d1 ff01 ..:.9$.x..c2....
- 8042fd4: 5d31 7c51 0bdc e640 005c 1747 6d00 de0f 1]Q|..@.\.G..m..
- 8042fe4: 1c15 d26c 66e9 3bcd 9510 ddb3 2741 9ec1 ..l..f.;....A'..
- 8042ff4: dfb3 d072 b934 fd33 2502 dae9 dc03 b33f ..r.4.3..%....?.
- 8043004: d3c3 22e7 7cf1 b101 2f2d 282f 6f88 d8be ...".|..-//(.o..
- 8043014: ba75 8cf4 ec12 1359 c578 e13b 6f10 a677 u.....Y.x.;..ow.
- 8043024: ad26 1194 fbe8 f675 3e7c 4d3d d65b 63ce &.....u.|>=M[..c
- 8043034: 18e5 1687 1fa6 ea83 c41e 93ec d6af 8ad0 ................
- 8043044: 6d70 e89b dbc8 46b7 e4f8 c5d3 b18d acd3 pm.....F........
- 8043054: 3867 910c e384 8930 73de 7b70 294d c5ee g8....0..sp{M)..
- 8043064: 40d6 f114 f701 e20e fe07 8262 62cb 6792 .@........b..b.g
- 8043074: 66a3 eda4 cc12 4fa1 905d 2562 0568 536d .f.....O].b%h.mS
- 8043084: d0f0 3da0 f668 7ddb c1a6 d6f4 98c6 c1d6 ...=h..}........
- 8043094: ed1e f78d 635b 04ac a3a8 614b e010 f0dc ....[c....Ka....
- 80430a4: cd10 078e c8d7 2286 878f 6487 a440 5bd4 ......."...d@..[
- 80430b4: 7e5e db66 741d f38c 5907 b588 e0f4 26a8 ^~f..t...Y.....&
- 80430c4: 3987 9b62 a7b0 2fc7 7a4e f7a8 0156 2eae .9b..../Nz..V...
- 80430d4: d008 3108 b188 9f43 4b82 b53d 8201 0efa ...1..C..K=.....
- 80430e4: b3b5 eb03 5c6c 7bc0 bc9c 0365 35d0 acbd ....l\.{..e..5..
- 80430f4: 15a7 85e1 5158 10f4 fd91 eafc 2c1e e239 ....XQ.......,9.
- 8043104: b8c6 487d 092d 43e2 ac0b eb84 2e3e bc0b ..}H-..C....>...
- 8043114: 5245 ca4e b025 b848 0f06 7531 1c87 81a6 ERN.%.H...1u....
- 8043124: f05f 2770 05df 1601 90ba 8aaf 2167 4466 _.p'........g!fD
- 8043134: 70b6 43b8 74c5 22c2 7471 1531 b77c 870b .p.C.t."qt1.|...
- 8043144: cbcb b887 040a ec40 3029 1da4 1831 7434 ......@.)0..1.4t
- 8043154: f248 4807 d168 f49c 9992 6129 d525 c284 H..Hh.....)a%...
- 8043164: 7362 ed09 453f 5a8f da4b 9e68 eae2 86b7 bs..?E.ZK.h.....
- 8043174: bd29 8255 8aca b605 a6b4 1451 3311 ee64 ).U.......Q..3d.
- 8043184: 4e25 625d d922 932e 0417 e858 0460 6cb8 %N]b".....X.`..l
- 8043194: 5c5a 8a0a 0f49 c37c 0da0 9b7b 53ee cc15 Z\..I.|...{..S..
- 80431a4: 91fb 8b01 3d00 61f9 f470 fc08 4699 c682 .....=.ap....F..
- 80431b4: c482 d5c0 0eec 271e 11f2 40d8 876c 6862 .......'...@l.bh
- 80431c4: 93b2 7b01 7192 bb43 5612 c77c 8a85 4b8c ...{.qC..V|....K
- 80431d4: e68c 6f04 8171 f4b0 fbe7 7616 6b2a 3018 ...oq......v*k.0
- 80431e4: 062b 1ba2 c23a 20e0 bd96 a753 558a 1440 +...:.. ..S..U@.
- 80431f4: 8f80 d729 e4b7 d007 48e2 d0ec 2088 8243 ..)......H... C.
- 8043204: 2f47 4b36 cb81 08ee 080a 33b0 f6c4 5705 G/6K.......3...W
- 8043214: e9ec 0fa7 8668 f1c0 82b0 084e b81d e5b2 ....h.....N.....
- 8043224: e682 4208 866c fadc 68b5 cc9b 34ac 9110 ...Bl....h...4..
- 8043234: 78a3 7bb9 3a42 6727 41d6 829b 3101 5af6 .x.{B:'g.A...1.Z
- 8043244: 8062 f9c9 fb7c c0c5 8ab6 10bc a067 570f b...|.......g..W
- 8043254: d24d 0c23 0d95 bcb6 a7d0 5b41 70d8 7014 M.#.......A[.p.p
- 8043264: eb48 4ea5 74b3 88f4 e8de 98e5 3d0c a120 H..N.t.......= .
- 8043274: ba94 ad0e 4518 a46e ad87 06c2 a509 14ae .....En.........
- 8043284: c190 bca7 f119 e49e c84d 96ea b286 ff0c ........M.......
- 8043294: e4a4 d09c e8d1 120b 2b14 5680 9ee4 e22c .........+.V..,.
- 80432a4: 93d0 702e 1c66 fc78 bf37 f41d 94c2 88ab ...pf.x.7.......
- 80432b4: 70cd ee26 09fe 98fe 0975 3857 acdb d849 .p&.....u.W8..I.
- 80432c4: ebc6 a091 f818 8e9d 760f cf41 8682 d203 .........vA.....
- 80432d4: 70e0 5f41 28dc 90b3 0ea9 3a34 7d35 5675 .pA_.(....4:5}uV
- 80432e4: fcb2 a949 f979 09b3 9147 4ba2 410e fc83 ..I.y...G..K.A..
- 80432f4: 1409 8789 1635 9d8a 2d6a d884 6299 1b5d ....5...j-...b].
- 8043304: 9835 4096 4614 7ccd d17b 41d0 88ca 59aa 5..@.F.|{..A...Y
- 8043314: f434 0f2e bbbd eadf 138a f680 bf9e a5d7 4...............
- 8043324: 6a28 4011 b106 8699 427d a499 340f 0349 (j.@....}B...4I.
- 8043334: 1dc5 f2bf 28d3 6bc4 8426 7e06 e3d7 002c .....(.k&..~..,.
- 8043344: 0f4b af68 fc58 23b6 c9c1 06e0 99ac 87a8 K.h.X..#........
- 8043354: e237 8531 ad0c 35d8 157c 9e9a 3b13 e9c3 7.1....5|....;..
- 8043364: 3aff 48c9 7493 0b1c 4b47 d038 c110 2191 .:.H.t..GK8....!
- 8043374: cc32 952e cabe a404 0e70 0ce5 82a9 d5d2 2.......p.......
- 8043384: 7f56 24f6 395e ffc5 56b7 8abb 105d e155 V..$^9...V..].U.
- 8043394: 798d 73bc 5ae2 94ac 6b88 e1dd 8147 3968 .y.s.Z...k..G.h9
- 80433a4: 4feb 49b1 f57b 8c49 f436 b826 b717 3698 .O.I{.I.6.&....6
- 80433b4: 0f45 1366 51a7 5cc7 08d6 391d 7abc 2b1e E.f..Q.\...9.z.+
- 80433c4: 8f6f ee82 e7ed 82a3 e4f9 0b89 adec 6ff0 o..............o
- 80433d4: cccb ecbd 9f2c e640 6e5b 3ec4 1953 9d44 ....,.@.[n.>S.D.
- 80433e4: 5937 bce3 b487 9413 58d2 3d23 45e8 4462 7Y.......X#=.EbD
- 80433f4: c2cb 6cad 148a 68c6 1db5 d334 06a6 dd8e ...l...h..4.....
- 8043404: 8339 bd21 19fd 880c 46d3 076a 19fa b590 9.!......Fj.....
- 8043414: cd2f 7c1e 2062 32a0 6fb5 7b80 58e4 7a78 /..|b .2.o.{.Xxz
- 8043424: a87c bdb5 9ca8 7354 dd28 8bf8 6f01 4f67 |.....Ts(....ogO
- 8043434: c87a 2b37 24e8 a1cb 641c a84a 9467 0243 z.7+.$...dJ.g.C.
- 8043444: 699a 1d53 2e1b 6d05 7057 54db 1aee 04f9 .iS....mWp.T....
- 8043454: a52a 78b3 0822 f20b 01b9 cfca 238e 7356 *..x"........#Vs
- 8043464: 8917 3972 141c 304f 0466 4a21 8a0b 0592 ..r9..O0f.!J....
- 8043474: c45b 70a0 d330 4a89 a14f 6338 f20f fa93 [..p0..JO.8c....
- 8043484: b74a 052c c279 799d 41e2 119b ea40 1eed J.,.y..y.A..@...
- 8043494: 3238 f704 d65a 57b8 c980 7b78 7ec1 102b 82..Z..W..x{.~+.
- 80434a4: 002c 1c12 0a52 86d2 decd 11c7 97ca 7d9e ,...R..........}
- 80434b4: 885c 1855 6fa7 9ec9 934c 95a7 af0a 5cda \.U..o..L......\
- 80434c4: 6ef0 6eab ca0b 84cd 54e2 fc29 0a0d d40e .n.n.....T).....
- 80434d4: 1528 fab0 d467 4da1 f073 8ada 5637 ba40 (...g..Ms...7V@.
- 80434e4: f4cd 1711 7b9f 0f7b d727 3b95 95c2 c967 .....{{.'..;..g.
- 80434f4: 7978 0043 306b 8812 14cf 6437 b18d 1466 xyC.k0....7d..f.
- 8043504: ad1c 6c83 baab 36f4 b562 cd7d 0634 1f81 ...l...6b.}.4...
- 8043514: 883a 60e1 91cf ac69 78de bc32 bcd6 f266 :..`..i..x2...f.
- 8043524: 56ef 32aa 9b70 6b85 864f 11d7 75f1 e068 .V.2p..kO....uh.
- 8043534: 5a7d 2154 2a1d 1d26 6f0a 02bb b607 0d79 }ZT!.*&..o....y.
- 8043544: e22f 6592 1b2f a3c1 3f49 74b8 3300 dffd /..e/...I?.t.3..
- 8043554: d6b8 6f34 8b98 e5fa 8cde f42c 156d 1cea ..4o......,.m...
- 8043564: f43a 11e8 ebde 5cab 637a 059e 44e3 f254 :......\zc...DT.
- 8043574: e1b2 8292 a69e afe8 a46d 5709 01c5 0c2b ........m..W..+.
- 8043584: 9e9f edba ec02 31c1 bdcc 63e5 3c67 0524 .......1...cg<$.
- 8043594: 5e87 d1ec 8883 09a9 e159 db69 e685 581a .^......Y.i....X
- 80435a4: f524 cf56 a9d4 1c7f 87b8 2261 df9f 1eda $.V.......a"....
- 80435b4: 9086 6130 e3c7 bebf 52c2 fc80 2c03 2533 ..0a.....R...,3%
- 80435c4: 5b1d 862c e374 1bd9 9beb c0f4 ec19 5d82 .[,.t..........]
- 80435d4: a97b e3e0 62c1 7c32 3f41 c60f bd38 7c11 {....b2|A?..8..|
- 80435e4: 05e6 a5ed 736a 42a9 b941 9c38 56c8 9f06 ....js.BA.8..V..
- 80435f4: 1199 86c6 901b 0b3c 8413 210f 70ca bc0c ......<....!.p..
- 8043604: 1635 c1e3 709d 3242 9e27 e2aa 06bf ef93 5....pB2'.......
- 8043614: f0de 9851 0044 2776 965d 20b7 c297 60fb ..Q.D.v'].. ...`
- 8043624: 23ac b103 10ca a172 2cf5 432f ea5f 8229 .#....r..,/C_.).
- 8043634: 2204 e8b2 fa3d 377b b927 acfb dffa d1bf ."..=.{7'.......
- 8043644: 82fe d90b c0f9 8f7a 6471 367a ddbf 7033 ......z.qdz6..3p
- 8043654: 179e ad9e d754 a741 e9aa 3e6c 43fa 4ea0 ....T.A...l>.C.N
- 8043664: 99e1 844d 95e6 4070 aba7 c9d8 63d6 3c7b ..M...p@.....c{<
- 8043674: 5e76 1664 fc0c 96ed 423e a019 d8f1 1ece v^d.....>B......
- 8043684: 00e2 de79 4ae6 7fb4 ea7a 0dec 6965 01d6 ..y..J..z...ei..
- 8043694: 44e8 abae a078 9e89 d84b 5773 fb46 67e0 .D..x...K.sWF..g
- 80436a4: c9f2 22a6 a752 81a7 a985 83b7 21e6 941e ..."R........!..
- 80436b4: c6ce cdd1 1693 621f ce4a 5bf2 75de 9265 .......bJ..[.ue.
- 80436c4: 796b 5b82 6da1 d3a8 24fb c8e0 294f c88f ky.[.m...$..O)..
- 80436d4: f841 504c fe6c 3990 d3b3 381b 76a3 0861 A.LPl..9...8.va.
- 80436e4: dc97 9b28 5604 4041 99ef 6c3b c617 20a1 ..(..VA@..;l...
- 80436f4: 243e 9a41 f9fb 980a 7cb5 c5ed c9c1 911d >$A......|......
- 8043704: 832d dfee 6100 aec2 f02c 6785 f0d8 0dd0 -....a..,..g....
- 8043714: 09ac 753c d9bf a3c7 d934 e9d4 2675 c639 ..<u....4...u&9.
- 8043724: 7804 8ac1 6564 5661 0c06 f965 914f e09f .x..deaV..e.O...
- 8043734: 7291 b51c e80b 9211 32bb e76c d509 f1f6 .r.......2l.....
- 8043744: e4bc 9545 f1d0 d545 77d0 1191 7fca 06c4 ..E...E..w......
- 8043754: 8116 c43d 7c46 e404 dd88 ee6a c4c3 e661 ..=.F|....j...a.
- 8043764: 32bb ea61 1530 56d6 5822 2a3a 18d6 103b .2a.0..V"X:*..;.
- 8043774: 64f5 1e6e 8ade a145 f740 594c 2362 66a4 .dn...E.@.LYb#.f
- 8043784: 5629 cfef 5da9 3640 b94f 6c21 d145 c229 )V...]@6O.!lE.).
- 8043794: 4516 63cc b071 fc62 9d14 9c44 e4d9 d994 .E.cq.b...D.....
- 80437a4: d81c 0758 adfd b93a 2880 22c0 05e8 b0f4 ..X...:..(."....
- 80437b4: 11d0 d7ac 0358 2d99 1a5f ce68 6869 a672 ....X..-_.h.ihr.
- 80437c4: bdcc 97a0 9fd1 c290 2296 332e 128c 0bb0 .........".3....
- 80437d4: cd62 7065 b960 83fc 3333 a7e2 b304 c737 b.ep`...33....7.
- 80437e4: def8 5ab7 6e65 c6c7 45f6 4684 d26a bd4a ...Zen...E.Fj.J.
- 80437f4: 4201 686a 9c9f f949 0841 fcbc 186e 91ac .Bjh..I.A...n...
- 8043804: 8238 9b0f 7827 ac6c ed79 7c7a 5c44 e28a 8...'xl.y.z|D\..
- 8043814: cdf7 055a 5107 7610 787b 841f 8fbe e0c2 ..Z..Q.v{x......
- 8043824: ae18 db4e b984 a8d9 6c6e f8d5 6987 1f3c ..N.....nl...i<.
- 8043834: 87f4 f730 f0f7 6234 7573 f8f5 b8f8 5c7c ..0...4bsu....|\
- 8043844: 472f eee3 c22a 2bf4 68ab cf10 902c 1ff9 /G..*..+.h..,...
- 8043854: 9b9a 8f79 c82e 6b18 c68d a351 f9b1 cd0c ..y....k..Q.....
- 8043864: 4a34 465b 9ead 6a94 6375 57ab d7aa cf2a 4J[F...juc.W..*.
- 8043874: d54a 5186 ba41 95b4 b694 fbf0 b4a8 78de J..QA..........x
- 8043884: a156 4a5c 5425 abd0 1ad5 a547 5afa 366d V.\J%T....G..Zm6
- 8043894: 901f 1b54 1a2d 095b fc35 a0d1 5d51 1437 ..T.-.[.5...Q]7.
- 80438a4: 66e4 a369 aa5e a06d eabb 26d6 47ff e642 .fi.^.m....&.GB.
- 80438b4: f819 ae42 2541 751b 0503 e1c8 325f cb57 ..B.A%.u...._2W.
- 80438c4: 0022 02d9 0355 47ec 0c03 a8c9 4660 cab5 "...U..G....`F..
- 80438d4: 0956 7c77 fa8c 5ae6 0d79 daf3 2ad8 a1af V.w|...Zy....*..
- 80438e4: 7e2a 3896 ee0b bad4 22f8 5130 7f2e 25a6 *~.8....."0Q...%
- 80438f4: 8c19 29ac e15a 59fa 04e3 ca25 4fe5 334a ...)Z..Y..%..OJ3
- 8043904: 47cc d426 3efd 8a64 2b6b d47a 0ac4 21c9 .G&..>d.k+z....!
- 8043914: dc38 ba8f ae37 6621 4f11 f1c7 40b3 f12f 8...7.!f.O...@/.
- 8043924: 3bd7 9ee0 e726 7d30 eb88 af39 3fce 0883 .;..&.0}..9..?..
- 8043934: 7b97 eaa6 23a7 4d91 432c b1ad 0479 129c .{...#.M,C..y...
- 8043944: d746 30b1 0346 6cc8 01ac bded 6d52 fd6d F..0F..l....Rmm.
- 8043954: a959 0eb6 692a a1ac 5688 5f13 2547 a706 Y...*i...V._G%..
- 8043964: 4e02 5c27 23d8 8260 0345 4fc8 a5b8 068f .N'\.#`.E..O....
- 8043974: 1075 6554 bd6d aa5f 1a6d 0810 7440 4dd4 u.Tem._.m...@t.M
- 8043984: 82ad 12b5 e11d b663 ac2b 7520 4046 8ee8 ......c.+. uF@..
- 8043994: 96aa 5544 72ee 7383 4693 c183 447a a2c9 ..DU.r.s.F..zD..
- 80439a4: 645b c770 4000 73db 834b 9c77 ae16 7fcb [dp..@.sK.w.....
- 80439b4: 8381 5f9a e5a0 1085 d52a b64f b502 2dad ..._....*.O....-
- 80439c4: b363 ef5a 1a97 9ab5 ff81 cfc0 c096 4d2a c.Z...........*M
- 80439d4: a045 081d 6ad8 7fd0 942a 80ff c63b 1f7d E....j..*...;.}.
- 80439e4: 1cdb ae08 e33d 4c12 309b 0bc7 afd0 3636 ....=..L.0....66
- 80439f4: ebb0 4037 6bb2 fb20 45b5 1510 1670 8bae ..7@.k ..E..p...
- 8043a04: e8ce ad1f 5c88 6ab7 6aa3 d66c db79 bbff .....\.j.jl.y...
- 8043a14: ccdd eb1c 90b4 7e66 9b8b 1f6d a053 b609 ......f~..m.S...
- 8043a24: 7aae eea8 a327 f599 86f5 b9b1 4eb5 7d4c .z..'........NL}
- 8043a34: bd6d 8eb4 b50d 89b5 4375 0d6e 8feb 06ff m.......uCn.....
- 8043a44: 41be 9b2f 7ac6 7e95 8401 0972 ff82 b7d3 .A/..z.~..r.....
- 8043a54: a128 dde5 19ac b49b ead1 b00d dafc be3a (.............:.
- 8043a64: 1b6a 6795 b00d 9ace 05b1 0ace 9026 d66c j..g........&.l.
- 8043a74: a5b1 2ad6 90cf a8d5 17a1 b6a4 03f0 49f4 ...*...........I
- 8043a84: 773c 9f13 4acf 6ee8 ed03 55af 5391 acdd <w...J.n...U.S..
- 8043a94: a526 aa35 ab54 e1f1 6953 0d18 f2da e5e0 &.5.T...Si......
- 8043aa4: 56a8 50ad eab5 013a 9fc8 8722 354a 92c0 .V.P..:...".J5..
- 8043ab4: 43a8 a070 ae71 3f43 0931 49aa a085 5456 .Cp.q.C?1..I..VT
- 8043ac4: 69a1 aad4 21dc 1358 82e1 8146 55a9 619f .i...!X...F..U.a
- 8043ad4: 615f 3c22 dc4e 44f8 34df 12f8 fe0d bd59 _a"<N..D.4....Y.
- 8043ae4: 6a5a 31d4 d2f8 255a c2d9 b148 1a43 68e0 Zj.1..Z%..H.C..h
- 8043af4: 9c15 8466 ec06 4a9b 9842 8031 8f99 3806 ..f....JB.1....8
- 8043b04: 2b1b 85c4 f08e 981b 435f 9bb3 56c6 2705 .+......_C...V.'
- 8043b14: 0567 0147 227e ff4d 2ab6 8c74 a402 56b4 g.G.~"M..*t....V
- 8043b24: 0513 9709 1601 fa49 55b7 32b9 c26b 4f5f ......I..U.2k._O
- 8043b34: 87ca e2f7 ed79 8e33 1407 166f 202e fab9 ....y.3...o.. ..
- 8043b44: 451f d896 61aa 1bca cfeb ead6 efe0 8c5b .E...a........[.
- 8043b54: 7014 a4d9 ac4e 9296 f547 3a4d d640 3540 .p..N...G.M:@.@5
- 8043b64: 8b2a 4330 43c8 a8fa 4eba 5b38 2f5f 4b11 *.0C.C...N8[_/.K
- 8043b74: 92aa 5054 1bad 8d8d 961e 4e88 7598 613a ..TP.......N.u:a
- 8043b84: 8590 9062 06d4 1e7d b695 0ea8 8915 448c ..b...}........D
- 8043b94: f794 06b8 a055 5086 8896 a926 8f8b 1806 ....U..P..&.....
- 8043ba4: b541 7906 b365 a681 9b6b a838 4136 907e A..ye...k.8.6A~.
- 8043bb4: 5868 c1be 4289 8d22 54ec 3f0a 5f10 3058 hX...B"..T.?._X0
- 8043bc4: e23a c0fe 0d30 9316 4a58 bee2 98a4 2103 :...0...XJ.....!
- 8043bd4: c849 6848 87b2 afb6 86bc c5bf ff49 ac7b I.Hh........I.{.
- 8043be4: 5e22 a2ca b84b dc78 c297 10c6 25e3 1afe "^..K.x......%..
- 8043bf4: de0e fe1a 248c b101 74ae 604f a2c1 f1fe .....$...tO`....
- 8043c04: c404 a36a d9b2 bd03 111e 7abe b944 3447 ..j........zD.G4
- 8043c14: 01b9 b0e1 6404 48f6 948c fc85 a5c9 e300 .....d.H........
- 8043c24: 0042 32c9 e2fa d422 b9c1 3b51 6922 8160 B..2.."...Q;"i`.
- 8043c34: 5144 f305 2c5a 1052 acfc c148 f3d0 0532 DQ..Z,R...H...2.
- 8043c44: fe77 bb6f 3787 1b90 3fff 0462 9829 95ee w.o..7...?b.)...
- 8043c54: 1da4 dc19 9e68 b59d 05fe e8b6 0dcb 77ce ....h..........w
- 8043c64: 0000 ..
- 08043c66 <data__info_html>:
- 8043c66: 692f 666e 2e6f 7468 6c6d 0000 5448 5054 /info.html..HTTP
- 8043c76: 312f 312e 3220 3030 4f20 0d4b 530a 7265 /1.1 200 OK..Ser
- 8043c86: 6576 3a72 6c20 4977 2f50 2e31 2e33 2031 ver: lwIP/1.3.1
- 8043c96: 6828 7474 3a70 2f2f 6173 6176 6e6e 6861 (http://savannah
- 8043ca6: 6e2e 6e6f 6e67 2e75 726f 2f67 7270 6a6f .nongnu.org/proj
- 8043cb6: 6365 7374 6c2f 6977 2970 0a0d 6f43 746e ects/lwip)..Cont
- 8043cc6: 6e65 2d74 654c 676e 6874 203a 3031 3839 ent-Length: 1098
- 8043cd6: 0a0d 6f43 6e6e 6365 6974 6e6f 203a 6c43 ..Connection: Cl
- 8043ce6: 736f 0d65 430a 6e6f 6574 746e 742d 7079 ose..Content-typ
- 8043cf6: 3a65 7420 7865 2f74 7468 6c6d 0a0d 6f43 e: text/html..Co
- 8043d06: 746e 6e65 2d74 6e45 6f63 6964 676e 203a ntent-Encoding:
- 8043d16: 7a67 7069 0a0d 0a0d 8b1f 0008 0000 0000 gzip............
- 8043d26: 0a04 569d 6edd 36db 7e14 5615 69bb 2881 ...V.n.6.~.V.i.(
- 8043d36: 766e 6035 8096 2b22 0286 1aeb 1da0 5eb0 nv5`.."+.......^
- 8043d46: b40d db44 256c 9352 c728 4bbe adb2 68bb ..D.l%R.(..K...h
- 8043d56: 0e81 30c1 4114 aed7 827b 6b74 b4b6 d389 ...0.A..{.tk....
- 8043d66: a057 68de 21df 272d 9c5e e7ec 3642 c88f W..h.!-'^...B6..
- 8043d76: f7f3 ef9d aa1c e57b 3b93 f7eb 6fee 64dc ......{..;...o.d
- 8043d86: 9343 7167 7e97 c659 20d5 020a 8248 71a7 C.gq.~Y.. ..H..q
- 8043d96: 1737 b386 c864 4acb 2898 4da8 fc3f 7b08 7...d..J.(.M?..{
- 8043da6: edee 98d0 1422 d75f 1472 5f05 5f86 08dc ...."._.r.._._..
- 8043db6: 75d7 705e 7b23 0899 a258 1195 2a0a 6eb7 .u^p#{..X....*.n
- 8043dc6: 2246 881d 4956 5cf1 c144 8a48 42cd e697 F"..VI.\D.H..B..
- 8043dd6: b9cc 994d 619a 8a94 4c91 e844 1584 a4a9 ..M..a...LD.....
- 8043de6: 3c91 ab0b 6784 5a22 c95b 58f9 75e6 973e .<...g"Z[..X.u>.
- 8043df6: 4aeb 4e94 70e0 5d19 0b87 4d23 6226 ccfb .J.N.p.]..#M&b..
- 8043e06: 9b4e ed6f b349 8f65 7eed c8f3 361e bb4f N.o.I.e..~...6O.
- 8043e16: bf1d cdd7 7aa4 86c8 e8a5 4147 a5ce 4d5a .....z....GA..ZM
- 8043e26: 2aaa a560 a2c8 32a0 4c93 4354 0c21 552c .*`....2.LTC!.,U
- 8043e36: 2949 c30b a4cc b840 8c46 e74d 1f01 ff71 I)....@.F.M...q.
- 8043e46: 6036 9955 4144 33a9 fab1 c2a0 8ee1 8f7f 6`U.DA.3........
- 8043e56: 0785 a7ad 49d3 4ddc 88e5 1925 aaaf 5028 .....I.M..%...(P
- 8043e66: d47c 25e3 7ff3 2a61 bcfa 4cce f62b 58e5 |..%..a*...L+..X
- 8043e76: a1a4 05d1 9d2c 09d3 a2c9 fd28 dc56 b3e5 ....,.....(.V...
- 8043e86: a5d0 c54a 9578 060a bd08 4c8f 340f c2c5 ..J.x......L.4..
- 8043e96: c0f1 fb4c 6adb 107c 9930 6722 eaa1 a250 ..L..j|.0."g..P.
- 8043ea6: b33a 75a3 ead6 b823 2236 fd2c 5a69 80c4 :..u..#.6",.iZ..
- 8043eb6: a96c d8e3 04be 5bba 1f76 1f28 3b34 56cd l......[v.(.4;.V
- 8043ec6: d8f3 a77b 67f3 4075 231d a0d5 f1f2 f6c6 ..{..gu@.#......
- 8043ed6: a867 936d 3d82 6fb1 3bed b87b 4d5c beaa g.m..=.o.;{.\M..
- 8043ee6: 4c5e 2791 8e46 a540 05e5 c4a6 eeff 287a ^L.'F.@.......z(
- 8043ef6: a32b 49cb f9eb e6a7 781b 229d a3e4 9f53 +..I.....x."..S.
- 8043f06: 1a9d f7dc 9d90 7f81 e4b3 0145 1de0 336a ..........E...j3
- 8043f16: 0336 e18b 05da b1de 05d1 8498 88f1 3267 6.............g2
- 8043f26: 2345 1568 f4f6 8098 0f26 5d7d 6ee6 eefb E#h.....&.}].n..
- 8043f36: b7e7 2837 80b7 3e51 455a cb81 1934 80c8 ..7(..Q>ZE..4...
- 8043f46: b1a1 1a86 3626 dcee 07bd 4345 6ecc e40b ....&6....EC.n..
- 8043f56: 5985 735c 9912 e85e e18c 27b0 299f 8969 .Y\s..^....'.)i.
- 8043f66: cc06 82aa f8c3 c087 0f6b 4f48 8867 d91f ........k.HOg...
- 8043f76: 9423 0b6b 310d 6444 1a74 d72b c6eb d6f3 #.k..1Ddt.+.....
- 8043f86: 4819 af5b 2b4a 3481 474a bb42 f80b ec0e .H[.J+.4JGB.....
- 8043f96: f371 b994 bfc2 9346 50ed 0dd9 8546 aa59 q.....F..P..F.Y.
- 8043fa6: 52e3 0bae 7323 019a a0ee ea73 c4bd 39f6 .R..#s....s....9
- 8043fb6: 7b42 9b03 cd47 b993 4719 9d54 6c8a c6a9 B{..G....GT..l..
- 8043fc6: a08f 8ecf 67dd bdf6 d063 fda1 fed3 4646 .....g..c.....FF
- 8043fd6: 5388 ed58 982f 4a29 528d 772c 4bbd 3438 .SX./.)J.R,w.K84
- 8043fe6: 34db 181e fcb8 4162 bfb1 1239 8565 2cf2 .4....bA..9.e..,
- 8043ff6: e18b 8df6 0675 bd12 3421 ed9a bd05 279c ....u...!4.....'
- 8044006: 4d3c 61a9 e7cf 8afa da1c 9043 da7e b63c <M.a......C.~.<.
- 8044016: 196f 7898 9ae2 aa87 11e1 d4a4 d631 6b94 o..x........1..k
- 8044026: 7a65 00b7 2ed6 076a 04b7 4c17 6a3d e2b5 ez....j....L=j..
- 8044036: 54ae 7d45 5a76 6805 1a65 7ab4 b553 9e1c .TE}vZ.he..zS...
- 8044046: 672d 82d3 18d8 ad12 c531 3b40 ce3e 1a84 -g......1.@;>...
- 8044056: 0060 6b07 69d7 9e90 fd8f 6539 800a ec4f `..k.i....9e..O.
- 8044066: 3c7b 7847 40fe 5318 7364 cff0 5461 ea93 {<Gx.@.Sds..aT..
- 8044076: 9d33 96b8 0df0 cd95 ffa5 0f1b fa51 c098 3...........Q...
- 8044086: 6223 39bb 4874 c483 78c3 2031 ce89 0231 #b.9tH...x1 ..1.
- 8044096: f171 d010 e173 06bf 69d1 e55b 96e2 e67b q...s....i[...{.
- 80440a6: 6ad1 77be bd18 f663 0135 f008 0288 9007 .j.w..c.5.......
- 80440b6: f668 fd51 b77f a027 4832 2c88 ace8 abbb h.Q...'.2H.,....
- 80440c6: 6d2e df4d c7cf 3a50 3855 0f65 fdda fb07 .mM...P:U8e.....
- 80440d6: 0582 b318 ed2f b31e c0bf afc7 b8f0 2c17 ..../..........,
- 80440e6: eaad eef2 8bab abea c2fc bc0e 71b4 7548 .............qHu
- 80440f6: f379 a8b4 dc75 8b24 bdbb 18da 66ad ac77 y...u.$......fw.
- 8044106: 0217 55a6 c992 21e4 57ae ea61 b152 eeaa ...U...!.Wa.R...
- 8044116: d2e5 c2dc bcbc 6d7a cae5 fcda ebba c519 ......zm........
- 8044126: 84f0 2945 5e73 904e 2bf5 a30c 00ef 07ae ..E)s^N..+......
- 8044136: 8765 89e6 0a37 133a f1dd efe7 3f45 fee6 e...7.:.....E?..
- 8044146: 0dc5 3eef 1610 f86f b54b 9a62 9fc4 730a ...>..o.K.b....s
- 8044156: daf5 67c7 09bf e3e8 2fea 307b 75b5 096c ...g...../{0.ul.
- 8044166: 0000 ..
- 08044168 <data__history_html>:
- 8044168: 682f 7369 6f74 7972 682e 6d74 006c 0000 /history.html...
- 8044178: 5448 5054 312f 312e 3220 3030 4f20 0d4b HTTP/1.1 200 OK.
- 8044188: 530a 7265 6576 3a72 6c20 4977 2f50 2e31 .Server: lwIP/1.
- 8044198: 2e33 2031 6828 7474 3a70 2f2f 6173 6176 3.1 (http://sava
- 80441a8: 6e6e 6861 6e2e 6e6f 6e67 2e75 726f 2f67 nnah.nongnu.org/
- 80441b8: 7270 6a6f 6365 7374 6c2f 6977 2970 0a0d projects/lwip)..
- 80441c8: 6f43 746e 6e65 2d74 654c 676e 6874 203a Content-Length:
- 80441d8: 3031 3339 0a0d 6f43 6e6e 6365 6974 6e6f 1093..Connection
- 80441e8: 203a 6c43 736f 0d65 430a 6e6f 6574 746e : Close..Content
- 80441f8: 742d 7079 3a65 7420 7865 2f74 7468 6c6d -type: text/html
- 8044208: 0a0d 6f43 746e 6e65 2d74 6e45 6f63 6964 ..Content-Encodi
- 8044218: 676e 203a 7a67 7069 0a0d 0a0d 8b1f 0008 ng: gzip........
- 8044228: 0000 0000 0a04 568d 8f5f 44db ff10 5b2a .......V_..D..*[
- 8044238: 9d53 2962 2e4e 05e2 d891 0a15 a87d a084 S.b)N.......}...
- 8044248: 2952 a782 dad3 d89e 5bdb baef 6bbb 02e7 R).......[...k..
- 8044258: 4487 e05b 48a5 7895 bc40 c420 3837 4e90 .D[..H.x@. .78.N
- 8044268: d2ba 7deb e706 311b b5eb 8f83 c746 4a29 ...}...1....F.)J
- 8044278: dff6 cecc 6fcc 337e c59b 8f9d 5b3f fe7e .....o~3....?[~.
- 8044288: c3d5 24fb 0537 168f 97f6 2a70 d0b2 70f3 ...$7.....p*...p
- 8044298: 3405 168d 1805 924a 2a9c 260d 2af4 0ab3 .4....J..*.&.*..
- 80442a8: c03e 76b3 3737 0ca6 69e0 eac5 fbd0 7832 >..v77...i....2x
- 80442b8: 51fc 94b0 4945 8b0d 7839 9124 80c2 9540 .Q..EI..9x$...@.
- 80442c8: f707 4843 e833 0495 202d 6af4 eb06 2a52 ..CH3...- .j..R*
- 80442d8: 9033 b35b e4d4 0a61 4b35 6820 6317 9826 3.[...a.5K h.c&.
- 80442e8: 9461 3a07 1ca1 d9c2 a0b8 ac27 8aa8 badd a..:......'.....
- 80442f8: a0d2 05da 9345 21e1 309a 70cc 9a88 b65f ....E..!.0.p.._.
- 8044308: b62f 35df 9b6f e6b3 d90d 6b3e 9aae b73f /..5o.....>k..?.
- 8044318: b72f 9bcf e68b 6935 c6fe dbe5 73ed bf3c /.....5i.....s<.
- 8044328: de6a e7e0 671c 8b67 d3a9 705c 8e26 ae49 j....gg...\p&.I.
- 8044338: 1560 057a 6265 6892 11ed 3c05 b4f4 70d9 `.z.eb.h...<...p
- 8044348: 39d0 4180 3a3b ac51 c434 4a6c c60c 89c0 .9.A;:Q.4.lJ....
- 8044358: 3e99 35a1 bb75 d11e 092a 253d 4c39 689e .>.5u...*.=%9L.h
- 8044368: 9e14 7dba 389c 6348 6e99 45a2 6aca 7092 ...}.8Hc.n.E.j.p
- 8044378: 75aa 09e8 c75a 1154 0437 ac29 c568 bf4d .u..Z.T.7.).h.M.
- 8044388: b15c 4813 2303 bc4b 1de9 c09d 08de 1dca \..H.#K.........
- 8044398: 0b45 b9da 44ce 270a 9b13 044e d9d8 32e0 E....D.'..N....2
- 80443a8: d693 8a17 bc5f ffa6 35ed f3de 4b08 6631 ...._....5...K1f
- 80443b8: 5510 30c0 9d77 c568 7d7b ae74 08f7 4ea7 .U.0w.h.{}t....N
- 80443c8: 4eda 8422 af6c a8e1 bdf9 b339 36d8 8897 .N".l.....9..6..
- 80443d8: e231 7dbd ace9 f95b 0ea1 cb12 9130 e769 1..}..[.....0.i.
- 80443e8: d46f 86fc cf6a 04ba c6bd 5d74 57ec 6263 o...j.....t].Wcb
- 80443f8: 7b25 5f95 a331 37df 6857 12ed 7f95 2e6c %{._1..7Wh....l.
- 8044408: afb6 2bf6 4ce5 a91b d736 a1a1 6189 1235 ...+.L..6....a5.
- 8044418: 4874 7f9b a7d5 5615 8386 006c a5bf f237 tH.....V..l...7.
- 8044428: a103 716f 55d3 608c 10ac 2e8d 89d7 6a02 ..oq.U.`.......j
- 8044438: 51e0 7f15 6b4a 6196 4851 f231 03e7 b42a .Q..Jk.aQH1...*.
- 8044448: 1839 b85c b456 fb2c baeb c1e2 f2eb 35d9 9.\.V.,........5
- 8044458: 6eb7 66cb 1b54 c592 02d8 1409 52e8 dd0a .n.fT........R..
- 8044468: bac6 b768 df5a d9db 278e bf6e a6f3 22e7 ..h.Z....'n...."
- 8044478: 623a 771c b28d 9ed3 6514 a88e 31fd afa8 :b.w.....e...1..
- 8044488: 2c73 7ca4 849f 28cd e826 1615 45e5 5fb3 s,.|...(&....E._
- 8044498: 67ea df4c 7379 5369 ef67 5a98 3853 bb6b .gL.ysiSg..ZS8k.
- 80444a8: b190 d335 db7a f065 a528 a286 d35b c4f6 ..5.z.e.(...[...
- 80444b8: 368e 1c44 b877 3a5a 1c5b 0eb1 116d a85a .6D.w.Z:[...m.Z.
- 80444c8: 16ed a9a6 c7cb e42e 88d8 5320 b2b2 1615 .......... S....
- 80444d8: c657 d148 87c7 c427 769e e925 2911 ce12 W.H...'..v%..)..
- 80444e8: e392 cbd0 3cc0 19a4 668c 2a3e 92e9 420a .....<...f>*...B
- 80444f8: a315 ce41 14d2 b604 5504 a121 0f4e 7d38 ..A......U!.N.8}
- 8044508: 495a 769b 4094 dce7 11ed b5b9 5299 dd41 ZI.v.@.......RA.
- 8044518: b9da 0cc9 515a 1dea c323 97fc 6334 25a2 ....ZQ..#...4c.%
- 8044528: 7a21 44cb 0d59 975b 7063 2952 fd85 251a !z.DY.[.cpR)...%
- 8044538: 79b1 f66b f635 99b5 1d17 5888 f397 1ba9 .yk.5......X....
- 8044548: 9c5c 4416 c52b c159 15b0 ee1e 6b82 bf91 \..D+.Y......k..
- 8044558: 7e2d 7b02 ffe6 a607 05f6 7b76 faf4 9524 -~.{......v{..$.
- 8044568: f5f6 207a e8cc e8ee f300 e661 ff3b d2dd ..z ......a.;...
- 8044578: d89f be16 2f74 7f96 d423 4daa e9e8 e82e ....t/..#..M....
- 8044588: a32e ef1d 47f6 2a5f 5056 09b5 a898 1941 .....G_*VP....A.
- 8044598: 1d48 29e0 3497 ea3d 3ce8 5660 65cc 09fc H..).4=..<`V.e..
- 80445a8: 751e f6ae 2b1d d8c9 eb3d 4876 7739 8f5e .u...+..=.vH9w^.
- 80445b8: b0dd d013 b775 706f c26b 5dd2 361c 3163 ....u.opk..].6c1
- 80445c8: b23f ba31 dd72 d0fe 65f6 452c b36c 913f ?.1.r....e,El.?.
- 80445d8: 2fe6 7cb2 45f4 521f 285f b1a8 9c62 6123 ./.|.E.R_(..b.#a
- 80445e8: f7ba 7ae2 fda8 fb66 dd96 39e2 5f6c ebd3 ...z..f....9l_..
- 80445f8: e1cf 5a8d 9f51 99bc be3f f23b f486 27f4 ...ZQ...?.;....'
- 8044608: 1c52 06c3 036b cf1f 2555 7db0 7763 ff05 R...k...U%.}cw..
- 8044618: 381b 1d3d b841 d7c6 ae4f 5027 9d23 79fd .8=.A...O.'P#..y
- 8044628: 1f6d 10d6 a826 94b0 4a29 64c0 b39d 9f24 m...&...)J.d..$.
- 8044638: 302b 1295 ecde 2f7d c50c 51bd 6e6f 95c0 +0....}/...Qon..
- 8044648: 18ff 29ad c0af c7f7 6677 87fe 64b5 3929 ...)....wf...d)9
- 8044658: 76fc d0d8 bfdb ff50 1100 94f1 524b 0009 .v....P.....KR..
- 8044668: 4800 .
- 08044669 <HTTP_200_OK>:
- 8044669: 5448 5054 312f 312e 3220 3030 4f20 0d4b HTTP/1.1 200 OK.
- 8044679: 0d0a 000a 0000 2800 .......
- 08044680 <file__main_css>:
- 8044680: 4c28 0804 dfe6 0803 dff2 0803 2a04 0000 (L...........*..
- 8044690: 0001 0000 ....
- 08044694 <data__ups_history_html>:
- 8044694: 752f 7370 685f 7369 6f74 7972 682e 6d74 /ups_history.htm
- 80446a4: 006c 0000 5448 5054 312f 312e 3220 3030 l...HTTP/1.1 200
- 80446b4: 4f20 0d4b 530a 7265 6576 3a72 6c20 4977 OK..Server: lwI
- 80446c4: 2f50 2e31 2e33 2031 6828 7474 3a70 2f2f P/1.3.1 (http://
- 80446d4: 6173 6176 6e6e 6861 6e2e 6e6f 6e67 2e75 savannah.nongnu.
- 80446e4: 726f 2f67 7270 6a6f 6365 7374 6c2f 6977 org/projects/lwi
- 80446f4: 2970 0a0d 6f43 746e 6e65 2d74 654c 676e p)..Content-Leng
- 8044704: 6874 203a 3131 3337 0a0d 6f43 6e6e 6365 th: 1173..Connec
- 8044714: 6974 6e6f 203a 6c43 736f 0d65 430a 6e6f tion: Close..Con
- 8044724: 6574 746e 742d 7079 3a65 7420 7865 2f74 tent-type: text/
- 8044734: 7468 6c6d 0a0d 6f43 746e 6e65 2d74 6e45 html..Content-En
- 8044744: 6f63 6964 676e 203a 7a67 7069 0a0d 0a0d coding: gzip....
- 8044754: 8b1f 0008 0000 0000 0a04 568d 6edd 44dc ...........V.n.D
- 8044764: 7e14 d715 d154 8a5a 59bd 41b8 ed64 850a .~..T.Z..Y.Ad...
- 8044774: 545e 1042 1429 55c1 b634 aecf 99a7 bb1d ^TB.)..U4.......
- 8044784: b1e3 5b37 9482 14a4 8a2e 9a54 540b a121 ..7[......T..T!.
- 8044794: 3caa 0441 28aa 6d3f 615f 46fc 999c 17b1 .<A..(?m_a.F....
- 80447a4: d9a7 7b44 ebb1 39f9 e7ff e73b f8cc 27c6 ..D{...9..;....'
- 80447b4: ef9f f17c eef5 276d 3393 8d16 bff5 08c3 ..|...m'.3......
- 80447c4: 869f 8bae 203b 3469 819e 4e24 1192 8251 ....; i4..$N..Q.
- 80447d4: dd0c 4e4a 0ffc cef1 669c 1652 dc3e 68af ..JN.....fR.>..h
- 80447e4: ba1d f95f 3f77 77f6 59f2 2441 198d 4eb8 .._.w?.w.YA$...N
- 80447f4: 7392 1c09 ee59 0edc 9d21 c742 c9c4 420c .s..Y...!.B....B
- 8044804: a6b7 2f30 2172 747b 9a73 2cca a14c 09a6 ..0/r!{ts..,L...
- 8044814: 66f8 49b3 9539 3094 4cbf 8308 b470 2339 .f.I9..0.L..p.9#
- 8044824: 7487 cd56 fb96 04aa 3661 5504 5b86 42a8 .tV.....a6.U.[.B
- 8044834: c952 5220 373f 9b0f f563 9d5a 7fab e69c R. R?7..c.Z.....
- 8044844: bd44 4e69 539a 7ffc 4782 9aaf 8e27 a67a D.iN.S...G..'.z.
- 8044854: aa9e e3e7 a5a1 331e 0fca 4c9c 24c0 6774 .......3...L.$tg
- 8044864: f284 2920 d74b c011 b742 0b94 6506 2006 .. )K...B....e.
- 8044874: 7651 0899 485a 2e47 740a c240 1ca1 23de Qv..ZHG..t@....#
- 8044884: b135 aea7 8a53 7424 ce45 b820 2257 d0f1 5...S.$tE. .W"..
- 8044894: e39e 86c2 ce31 45d3 4e34 ed69 8c24 6594 ....1..E4Ni.$..e
- 80448a4: 72e8 c752 3844 e3f6 30a7 1521 dd93 4276 .rR.D8...0!...vB
- 80448b4: 210f 65f5 a05e 4ba4 be3c 0896 5ec2 6345 .!.e^..K<....^Ec
- 80448c4: 9ad2 794e 870a 4e81 0621 ead5 f960 d734 ..Ny...N!...`.4.
- 80448d4: 10b6 a1fc ee98 e3bf cf78 6875 3e8a af03 ........x.uh.>..
- 80448e4: 8a7c 6af9 2b49 f1d6 71a3 459d b4b8 7ad4 |..jI+...q.E...z
- 80448f4: 6111 56c8 8e2a 73d4 8e75 3f91 ff57 97aa .a.V*..su..?W...
- 8044904: 69cd dc73 b63c 35da 9f7d c107 2924 969f .is.<..5}...$)..
- 8044914: ded6 fd48 6c8a 2398 7d64 fea3 7f52 57ab ..H..l.#d}..R..W
- 8044924: d9ab 9f28 1de4 33cb baf5 0ef9 7a93 ba8c ..(....3.....z..
- 8044934: 9bce 75ef 5762 5533 b945 d19f e652 7162 ...ubW3UE...R.bq
- 8044944: 3c31 9124 46b4 f660 f2e1 88bf 8561 6115 1<$..F`.....a..a
- 8044954: d6c3 814b 3586 0462 6fc3 5762 3156 6406 ..K..5b..obWV1.d
- 8044964: 1182 f369 089d 1220 aaf6 33f8 d352 1629 ..i... ....3R.).
- 8044974: ce43 de07 0f76 260e 3d0f 7381 8a41 13a2 C...v..&.=.sA...
- 8044984: 16d7 8a0d 46cb cc17 0eba 48c5 07da d489 .....F.....H....
- 8044994: e0c5 280b 9c8b c697 b1bf 3239 9af6 12d5 ...(......92....
- 80449a4: f61f b5bc c3a0 2a20 1697 52b3 65e8 8607 ...... *...R.e..
- 80449b4: 7b22 431f d675 0a3c 531c 6f59 e39b 4b00 "{.Cu.<..SYo...K
- 80449c4: bb28 834c 54c9 d6fa 39d0 77ea 5964 784d (.L..T...9.wdYMx
- 80449d4: 3cd6 535e 1fdc a508 ea87 444f f9c6 a255 .<^S......OD..U.
- 80449e4: aed0 07e6 230b c544 55e9 ef84 f718 fa93 .....#D..U......
- 80449f4: 3d45 2d5d 37f2 12f5 f5a1 8116 808c 6c46 E=]-.7........Fl
- 8044a04: 96ea 8572 17f6 9f5a 3921 2d59 0ceb 5179 ..r...Z.!9Y-..yQ
- 8044a14: 869a 8ea8 50d8 1687 a657 4ac3 1bdd 764c .....P..W..J..Lv
- 8044a24: 945a a7ee 1244 c34c dcd0 afe8 294e 977e Z...D.L.....N)~.
- 8044a34: d1d8 ab65 82b1 46fd 1b37 270d 847d 6c50 ..e....F7..'}.Pl
- 8044a44: b731 714c b92c 153f a579 493b 495c f399 1.Lq,.?.y.;I\I..
- 8044a54: 9f2e e378 dbe8 f5b6 4eb8 13ce 9346 d083 ..x......N..F...
- 8044a64: 829d bbbc b7bb a64b 1830 c879 1657 3b84 ......K.0.y.W..;
- 8044a74: 5044 67e2 4d34 6381 13f7 d615 d1cd 2306 DP.g4M.c.......#
- 8044a84: abf7 a35c 291b 3ed0 20ab d672 54d6 a808 ..\..).>. r..T..
- 8044a94: 553b 69d7 4542 5c42 d3d2 7d47 a641 9b94 ;U.iBEB\..G}A...
- 8044aa4: 4372 2983 aa2f a37e b5b6 549a e042 4244 rC.)/.~....TB.DB
- 8044ab4: 1c4a 254f 807d 7c5d 46e4 3c1b 8b2e a1ed J.O%}.]|.F.<....
- 8044ac4: 58fd 7557 3528 a315 8a33 7f8d e96b 899f .XWu(5..3...k...
- 8044ad4: baff e451 2138 f2d6 ac4d 6df2 18fd b2f6 ..Q.8!..M..m....
- 8044ae4: e855 7d29 cb87 cdc1 06c1 4626 2f6e b0bd U.)}......&Fn/..
- 8044af4: 2f5b 63d0 c76b 664e daef 0b80 d993 a5a3 [/.ck.Nf........
- 8044b04: 6deb 5b6a ae0c 418e e821 888c 4f85 0d79 .mj[...A!....Oy.
- 8044b14: 4242 c36a b29e a49c 035d a1ee 662c fc79 BBj.....]...,fy.
- 8044b24: 5e29 a6b5 bbf6 3274 b7a5 e9b4 6121 5acc )^....t2....!a.Z
- 8044b34: 69be 173f ca88 bdba 5893 0137 974d e8fe .i?......X7.M...
- 8044b44: c5fc 5f6c 8afb eb1d 7605 4783 74ba f0cd ..l_.....v.G.t..
- 8044b54: 6d3f c47e e48e ecec d97d d6b9 0f15 4c72 ?m~.....}.....rL
- 8044b64: 6328 9f08 5676 745e 3bb9 7334 8d7c 80a7 (c..vV^t.;4s|...
- 8044b74: 4979 7c5c 5c0a 15cb f2f5 f238 6f36 dc0e yI\|.\....8.6o..
- 8044b84: 5e3e 20bd 07e7 c0b0 c17a c3b7 e2a4 b938 >^. ....z.....8.
- 8044b94: b070 f780 1c0d 0d1d 9c20 f0e3 e7cf d401 p....... .......
- 8044ba4: 6f88 bb6f efd6 108a 6402 c9d8 a453 6080 .oo......d..S..`
- 8044bb4: d19e db24 2016 c12b d1dd 6e07 f218 835b ..$.. +....n..[.
- 8044bc4: c69e 721e d1de 135b 8156 6de7 18de 1f79 ...r..[.V..m..y.
- 8044bd4: 39d5 9d4d 6fad e3fb 3ccc ff1c 2503 ce74 .9M..o...<...%t.
- 8044be4: 4891 000a 0000 0000 .H......
- 08044bec <file__favicon_ico>:
- 8044bec: 0000 0000 c857 0803 c867 0803 053c 0000 ....W...g...<...
- 8044bfc: 0001 0000 ....
- 08044c00 <file__settings_html>:
- 8044c00: c32c 0803 cda3 0803 cdb3 0803 1233 0000 ,...........3...
- 8044c10: 0001 0000 ....
- 08044c14 <file__info_html>:
- 8044c14: c340 0803 3c66 0804 3c72 0804 04f6 0000 @...f<..r<......
- 8044c24: 0001 0000 ....
- 08044c28 <file__login_html>:
- 8044c28: 4c14 0804 c017 0803 c023 0803 02f6 0000 .L......#.......
- 8044c38: 0001 0000 ....
- 08044c3c <file__history_html>:
- 8044c3c: 4bec 0804 4168 0804 4178 0804 04f1 0000 .K..hA..xA......
- 8044c4c: 0001 0000 ....
- 08044c50 <file__role_js>:
- 8044c50: c354 0803 b5fc 0803 b608 0803 0a0f 0000 T...............
- 8044c60: 0001 0000 5448 5054 312f 302e 3220 3030 ....HTTP/1.0 200
- 8044c70: 4f20 0d4b 430a 6e6f 6574 746e 542d 7079 OK..Content-Typ
- 8044c80: 3a65 6574 7478 682f 6d74 0d6c 0d0a 000a e:text/html.....
- 8044c90: 227b 4341 3a22 0022 2c22 4422 2243 223a {"AC":".","DC":"
- 8044ca0: 2200 222c 6e69 665f 6572 2271 223a 2200 .","in_freq":"."
- 8044cb0: 222c 756f 5f74 7266 7165 3a22 0022 2c22 ,"out_freq":".",
- 8044cc0: 7022 7277 3a22 0022 2c22 6222 7461 635f "pwr":".","bat_c
- 8044cd0: 7061 3a22 0022 2c22 6922 6e6e 7265 745f ap":".","inner_t
- 8044ce0: 6d65 2270 223a 2200 222c 6162 5f74 6974 emp":".","bat_ti
- 8044cf0: 656d 6c5f 6665 2274 223a 2200 222c 6964 me_left":".","di
- 8044d00: 2231 223a 2200 222c 6f72 2231 223a 2200 1":".","ro1":"."
- 8044d10: 222c 6f72 2232 223a 2200 222c 5f6d 6c61 ,"ro2":".","m_al
- 8044d20: 7261 226d 223a 2200 222c 5f75 6c61 7261 arm":".","u_alar
- 8044d30: 226d 223a 2200 222c 656e 7374 7465 6974 m":".","netsetti
- 8044d40: 676e 5f73 6863 6e61 6567 2264 223a 2200 ngs_changed":"."
- 8044d50: 007d 227b 6572 6461 635f 6d6f 756d 696e }.{"read_communi
- 8044d60: 7974 3a22 0022 2c22 7722 6972 6574 635f ty":".","write_c
- 8044d70: 6d6f 756d 696e 7974 3a22 0022 2c22 6d22 ommunity":".","m
- 8044d80: 6e61 6761 7265 5049 3a22 0022 2c22 6d22 anagerIP":".","m
- 8044d90: 6e61 6761 7265 5049 2232 223a 2200 222c anagerIP2":".","
- 8044da0: 616d 616e 6567 4972 3350 3a22 0022 2c22 managerIP3":".",
- 8044db0: 6d22 6e61 6761 7265 5049 2234 223a 2200 "managerIP4":"."
- 8044dc0: 222c 616d 616e 6567 4972 3550 3a22 0022 ,"managerIP5":".
- 8044dd0: 2c22 6922 6170 6464 2272 223a 2200 222c ","ipaddr":".","
- 8044de0: 7767 3a22 0022 2c22 6d22 7361 226b 223a gw":".","mask":"
- 8044df0: 2200 222c 6864 7063 3a22 2c00 6122 7475 .","dhcp":.,"aut
- 8044e00: 2268 003a 222c 7372 735f 7265 6576 2272 h":.,"rs_server"
- 8044e10: 223a 2200 222c 7372 705f 726f 2274 223a :".","rs_port":"
- 8044e20: 2200 222c 7372 705f 6477 3a22 0022 2c22 .","rs_pwd":".",
- 8044e30: 7222 5f73 656b 2279 223a 2200 222c 7372 "rs_key":".","rs
- 8044e40: 655f 616e 6c62 6465 3a22 2c00 6422 7461 _enabled":.,"dat
- 8044e50: 2265 223a 2200 222c 6974 656d 3a22 0022 e":".","time":".
- 8044e60: 2c22 6e22 7074 3a22 0022 2c22 6e22 7074 ","ntp":".","ntp
- 8044e70: 6573 7672 7069 3a22 0022 2c22 7522 6374 servip":".","utc
- 8044e80: 3a22 0022 2c22 7522 6d74 3a22 0022 2c22 ":".","utm":".",
- 8044e90: 6c22 7361 7374 6e79 7463 6d69 2265 223a "lastsynctime":"
- 8044ea0: 7b00 7522 7470 6d69 2265 223a 2200 222c .{"uptime":".","
- 8044eb0: 6f6d 6564 226c 223a 2200 222c 7270 646f model":".","prod
- 8044ec0: 7461 2265 223a 2200 222c 7766 6576 7372 ate":".","fwvers
- 8044ed0: 6f69 226e 223a 2200 222c 616d 6163 6464 ion":".","macadd
- 8044ee0: 2272 223a 2200 222c 6573 6e72 226f 223a r":".","serno":"
- 8044ef0: 2200 222c 776f 656e 2272 223a 2200 222c .","owner":".","
- 8044f00: 7973 4c73 636f 7461 6f69 226e 223a 2200 sysLocation":"."
- 8044f10: 222c 6f63 6d6d 6e65 2274 223a 2200 222c ,"comment":".","
- 8044f20: 7075 5f73 6f6d 6564 226c 223a 2200 222c ups_model":".","
- 8044f30: 7075 5f73 7766 6576 7372 6f69 226e 223a ups_fwversion":"
- 8044f40: 4800 5454 2f50 2e31 2031 3032 2030 4b4f .HTTP/1.1 200 OK
- 8044f50: 0a0d 6f43 746e 6e65 2d74 7954 6570 743a ..Content-Type:t
- 8044f60: 7865 2f74 7468 6c6d 0a0d 0a0d 7b00 7022 ext/html.....{"p
- 8044f70: 6761 2265 203a 005b 6925 5d00 222c 6170 age": [.%i.],"pa
- 8044f80: 6567 2273 223a 5200 6265 6f6f 5474 7361 ges":".RebootTas
- 8044f90: 006b 6374 6970 5f70 6874 6572 6461 0000 k.tcpip_thread..
- 08044fa0 <memp_num>:
- 8044fa0: 0004 0006 000c 0005 0019 0010 0006 0008 ................
- 8044fb0: 0014 000a 001e 0032 0005 0009 0032 0019 ......2.....2...
- 08044fc0 <memp_sizes>:
- 8044fc0: 001c 0020 0094 001c 0010 0010 002c 0014 .. .........,...
- 8044fd0: 0014 0010 0020 0010 0024 0080 0010 0614 .... ...$.......
- 08044fe0 <tcp_pcb_lists>:
- 8044fe0: f6c4 2000 f6cc 2000 f6bc 2000 f6d0 2000 ... ... ... ...
- 08044ff0 <tcp_backoff>:
- 8044ff0: 0201 0403 0605 0707 0707 0707 0307 .............
- 08044ffd <tcp_persist_backoff>:
- 8044ffd: 0603 180c 6030 ff78 ....0`x
- 08045004 <ip_addr_broadcast>:
- 8045004: ffff ffff ....
- 08045008 <ip_addr_any>:
- 8045008: 0000 0000 ....
- 0804500c <syslocation_len_default>:
- 804500c: 0000 0000 ....
- 08045010 <snmp_scalar>:
- 8045010: 4395 0803 3e49 0803 43d9 0803 3f5d 0803 .C..I>...C..]?..
- 8045020: 0001 0000 ....
- 08045024 <udpentry_nodes>:
- 8045024: 0774 2000 0774 2000 t.. t..
- 0804502c <attable>:
- 804502c: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 804503c: 0002 0001 515c 0804 5284 0804 ....\Q...R..
- 08045048 <mib2_nodes>:
- 8045048: 5854 0804 541c 0804 073c 2000 58f8 0804 TX...T..<.. .X..
- 8045058: 521c 0804 53ec 0804 5648 0804 51b8 0804 .R...S..HV...Q..
- 08045068 <iprteentry_nodes>:
- 8045068: 07a4 2000 07a4 2000 07a4 2000 07a4 2000 ... ... ... ...
- 8045078: 07a4 2000 07a4 2000 07a4 2000 07a4 2000 ... ... ... ...
- 8045088: 07a4 2000 07a4 2000 07a4 2000 07a4 2000 ... ... ... ...
- 8045098: 07a4 2000 ...
- 0804509c <iprouteinfo>:
- 804509c: 0002 0000 0000 0000 0000 0000 0000 0000 ................
- 80450ac: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80450bc: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80450cc: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80450dc: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80450ec: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80450fc: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 804510c: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 804511c: 0000 0000 ....
- 08045120 <sysname_default>:
- 8045120: 5146 4e44 752d 6b6e 0000 0000 FQDN-unk....
- 0804512c <ipntomentry_ids>:
- 804512c: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 0804513c <interfaces_scalar>:
- 804513c: 3a9d 0803 3abd 0803 39eb 0803 39ef 0803 .:...:...9...9..
- 804514c: 0001 0000 ....
- 08045150 <syslocation_default>:
- 8045150: 0000 0000 ....
- 08045154 <interfaces_ids>:
- 8045154: 0001 0000 0002 0000 ........
- 0804515c <attable_id>:
- 804515c: 0001 0000 ....
- 08045160 <mgmt>:
- 8045160: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045170: 0002 0001 5850 0804 5644 0804 ....PX..DV..
- 0804517c <mib2_ids>:
- 804517c: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 804518c: 0005 0000 0006 0000 0007 0000 000b 0000 ................
- 0804519c <mib2>:
- 804519c: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 80451ac: 0002 0008 517c 0804 5048 0804 ....|Q..HP..
- 080451b8 <snmp>:
- 80451b8: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 80451c8: 0002 001c 573c 0804 55d4 0804 ....<W...U..
- 080451d4 <tcp_scalar>:
- 80451d4: 4309 0803 3d41 0803 39eb 0803 39ef 0803 .C..A=...9...9..
- 80451e4: 0001 0000 ....
- 080451e8 <sys_tem_nodes>:
- 80451e8: 5328 0804 5328 0804 5328 0804 5328 0804 (S..(S..(S..(S..
- 80451f8: 5328 0804 5328 0804 5328 0804 (S..(S..(S..
- 08045204 <snmpenableauthentraps_default>:
- 8045204: 0002 0000 ....
- 08045208 <udp_nodes>:
- 8045208: 5270 0804 5270 0804 5270 0804 5270 0804 pR..pR..pR..pR..
- 8045218: 0758 2000 X..
- 0804521c <icmp>:
- 804521c: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 804522c: 0002 001a 54e8 0804 5378 0804 .....T..xS..
- 08045238 <ip_scalar>:
- 8045238: 421d 0803 3ad1 0803 3b91 0803 39ef 0803 .B...:...;...9..
- 8045248: 0001 0000 ....
- 0804524c <udpentry_ids>:
- 804524c: 0001 0000 0002 0000 ........
- 08045254 <ipntomentry>:
- 8045254: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045264: 0002 0004 512c 0804 540c 0804 ....,Q...T..
- 08045270 <udp_scalar>:
- 8045270: 3de5 0803 3e11 0803 39eb 0803 39ef 0803 .=...>...9...9..
- 8045280: 0001 0000 ....
- 08045284 <attable_node>:
- 8045284: 530c 0804 .S..
- 08045288 <ifspecific>:
- 8045288: 0002 0000 0000 0000 0000 0000 0000 0000 ................
- 8045298: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80452a8: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80452b8: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80452c8: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80452d8: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80452e8: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 80452f8: 0000 0000 0000 0000 0000 0000 0000 0000 ................
- 8045308: 0000 0000 ....
- 0804530c <atentry>:
- 804530c: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 804531c: 0002 0003 546c 0804 5564 0804 ....lT..dU..
- 08045328 <sys_tem_scalar>:
- 8045328: 39f1 0803 4675 0803 4181 0803 4421 0803 .9..uF...A..!D..
- 8045338: 0001 0000 ....
- 0804533c <tcp_nodes>:
- 804533c: 51d4 0804 51d4 0804 51d4 0804 51d4 0804 .Q...Q...Q...Q..
- 804534c: 51d4 0804 51d4 0804 51d4 0804 51d4 0804 .Q...Q...Q...Q..
- 804535c: 51d4 0804 51d4 0804 51d4 0804 51d4 0804 .Q...Q...Q...Q..
- 804536c: 08a4 2000 51d4 0804 51d4 0804 ... .Q...Q..
- 08045378 <icmp_nodes>:
- 8045378: 5820 0804 5820 0804 5820 0804 5820 0804 X.. X.. X.. X..
- 8045388: 5820 0804 5820 0804 5820 0804 5820 0804 X.. X.. X.. X..
- 8045398: 5820 0804 5820 0804 5820 0804 5820 0804 X.. X.. X.. X..
- 80453a8: 5820 0804 5820 0804 5820 0804 5820 0804 X.. X.. X.. X..
- 80453b8: 5820 0804 5820 0804 5820 0804 5820 0804 X.. X.. X.. X..
- 80453c8: 5820 0804 5820 0804 5820 0804 5820 0804 X.. X.. X.. X..
- 80453d8: 5820 0804 5820 0804 X.. X..
- 080453e0 <sysdescr_len_default>:
- 80453e0: 0004 0000 ....
- 080453e4 <interfaces_nodes>:
- 80453e4: 513c 0804 0944 2000 <Q..D..
- 080453ec <tcp>:
- 80453ec: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 80453fc: 0002 000f 5598 0804 533c 0804 .....U..<S..
- 08045408 <syscontact_default>:
- 8045408: 0000 0000 ....
- 0804540c <ipntomentry_nodes>:
- 804540c: 0a08 2000 0a08 2000 0a08 2000 0a08 2000 ... ... ... ...
- 0804541c <interfaces>:
- 804541c: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 804542c: 0002 0002 5154 0804 53e4 0804 ....TQ...S..
- 08045438 <iprteentry_ids>:
- 8045438: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 8045448: 0005 0000 0006 0000 0007 0000 0008 0000 ................
- 8045458: 0009 0000 000a 0000 000b 0000 000c 0000 ................
- 8045468: 000d 0000 ....
- 0804546c <atentry_ids>:
- 804546c: 0001 0000 0002 0000 0003 0000 ............
- 08045478 <tcpconnentry_nodes>:
- 8045478: 08cc 2000 08cc 2000 08cc 2000 08cc 2000 ... ... ... ...
- 8045488: 08cc 2000 ...
- 0804548c <ip_nodes>:
- 804548c: 5238 0804 5238 0804 5238 0804 5238 0804 8R..8R..8R..8R..
- 804549c: 5238 0804 5238 0804 5238 0804 5238 0804 8R..8R..8R..8R..
- 80454ac: 5238 0804 5238 0804 5238 0804 5238 0804 8R..8R..8R..8R..
- 80454bc: 5238 0804 5238 0804 5238 0804 5238 0804 8R..8R..8R..8R..
- 80454cc: 5238 0804 5238 0804 5238 0804 08f8 2000 8R..8R..8R.....
- 80454dc: 0960 2000 0720 2000 5238 0804 `.. .. 8R..
- 080454e8 <icmp_ids>:
- 80454e8: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 80454f8: 0005 0000 0006 0000 0007 0000 0008 0000 ................
- 8045508: 0009 0000 000a 0000 000b 0000 000c 0000 ................
- 8045518: 000d 0000 000e 0000 000f 0000 0010 0000 ................
- 8045528: 0011 0000 0012 0000 0013 0000 0014 0000 ................
- 8045538: 0015 0000 0016 0000 0017 0000 0018 0000 ................
- 8045548: 0019 0000 001a 0000 ........
- 08045550 <udp_ids>:
- 8045550: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 8045560: 0005 0000 ....
- 08045564 <atentry_nodes>:
- 8045564: 0918 2000 0918 2000 0918 2000 ... ... ...
- 08045570 <ipaddrentry_nodes>:
- 8045570: 0874 2000 0874 2000 0874 2000 0874 2000 t.. t.. t.. t..
- 8045580: 0874 2000 t..
- 08045584 <ipaddrentry_ids>:
- 8045584: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 8045594: 0005 0000 ....
- 08045598 <tcp_ids>:
- 8045598: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 80455a8: 0005 0000 0006 0000 0007 0000 0008 0000 ................
- 80455b8: 0009 0000 000a 0000 000b 0000 000c 0000 ................
- 80455c8: 000d 0000 000e 0000 000f 0000 ............
- 080455d4 <snmp_nodes>:
- 80455d4: 5010 0804 5010 0804 5010 0804 5010 0804 .P...P...P...P..
- 80455e4: 5010 0804 5010 0804 5010 0804 5010 0804 .P...P...P...P..
- 80455f4: 5010 0804 5010 0804 5010 0804 5010 0804 .P...P...P...P..
- 8045604: 5010 0804 5010 0804 5010 0804 5010 0804 .P...P...P...P..
- 8045614: 5010 0804 5010 0804 5010 0804 5010 0804 .P...P...P...P..
- 8045624: 5010 0804 5010 0804 5010 0804 5010 0804 .P...P...P...P..
- 8045634: 5010 0804 5010 0804 5010 0804 5010 0804 .P...P...P...P..
- 08045644 <mgmt_nodes>:
- 8045644: 519c 0804 .Q..
- 08045648 <udp>:
- 8045648: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045658: 0002 0005 5550 0804 5208 0804 ....PU...R..
- 08045664 <iprteentry>:
- 8045664: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045674: 0002 000d 5438 0804 5068 0804 ....8T..hP..
- 08045680 <ifentry>:
- 8045680: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045690: 0002 0016 57c8 0804 58a0 0804 .....W...X..
- 0804569c <udpentry>:
- 804569c: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 80456ac: 0002 0002 524c 0804 5024 0804 ....LR..$P..
- 080456b8 <ip_ids>:
- 80456b8: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 80456c8: 0005 0000 0006 0000 0007 0000 0008 0000 ................
- 80456d8: 0009 0000 000a 0000 000b 0000 000c 0000 ................
- 80456e8: 000d 0000 000e 0000 000f 0000 0010 0000 ................
- 80456f8: 0011 0000 0012 0000 0013 0000 0014 0000 ................
- 8045708: 0015 0000 0016 0000 0017 0000 ............
- 08045714 <sysdescr_default>:
- 8045714: 776c 5049 0800 lwIP.
- 08045719 <sysname_len_default>:
- 8045719: 0008 e300 ...
- 0804571c <tcpconnentry>:
- 804571c: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 804572c: 0002 0005 588c 0804 5478 0804 .....X..xT..
- 08045738 <syscontact_len_default>:
- 8045738: 0000 0000 ....
- 0804573c <snmp_ids>:
- 804573c: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 804574c: 0005 0000 0006 0000 0008 0000 0009 0000 ................
- 804575c: 000a 0000 000b 0000 000c 0000 000d 0000 ................
- 804576c: 000e 0000 000f 0000 0010 0000 0011 0000 ................
- 804577c: 0012 0000 0013 0000 0014 0000 0015 0000 ................
- 804578c: 0016 0000 0018 0000 0019 0000 001a 0000 ................
- 804579c: 001b 0000 001c 0000 001d 0000 001e 0000 ................
- 080457ac <sys_tem_ids>:
- 80457ac: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 80457bc: 0005 0000 0006 0000 0007 0000 ............
- 080457c8 <ifentry_ids>:
- 80457c8: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 80457d8: 0005 0000 0006 0000 0007 0000 0008 0000 ................
- 80457e8: 0009 0000 000a 0000 000b 0000 000c 0000 ................
- 80457f8: 000d 0000 000e 0000 000f 0000 0010 0000 ................
- 8045808: 0011 0000 0012 0000 0013 0000 0014 0000 ................
- 8045818: 0015 0000 0016 0000 ........
- 08045820 <icmp_scalar>:
- 8045820: 3c19 0803 3c45 0803 39eb 0803 39ef 0803 .<..E<...9...9..
- 8045830: 0001 0000 ....
- 08045834 <internet>:
- 8045834: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045844: 0002 0002 08ec 2000 5914 0804 ....... .Y..
- 08045850 <mgmt_ids>:
- 8045850: 0001 0000 ....
- 08045854 <sys_tem>:
- 8045854: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045864: 0002 0007 57ac 0804 51e8 0804 .....W...Q..
- 08045870 <ipaddrentry>:
- 8045870: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045880: 0002 0005 5584 0804 5570 0804 .....U..pU..
- 0804588c <tcpconnentry_ids>:
- 804588c: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 804589c: 0005 0000 ....
- 080458a0 <ifentry_nodes>:
- 80458a0: 07cc 2000 07cc 2000 07cc 2000 07cc 2000 ... ... ... ...
- 80458b0: 07cc 2000 07cc 2000 07cc 2000 07cc 2000 ... ... ... ...
- 80458c0: 07cc 2000 07cc 2000 07cc 2000 07cc 2000 ... ... ... ...
- 80458d0: 07cc 2000 07cc 2000 07cc 2000 07cc 2000 ... ... ... ...
- 80458e0: 07cc 2000 07cc 2000 07cc 2000 07cc 2000 ... ... ... ...
- 80458f0: 07cc 2000 07cc 2000 ... ...
- 080458f8 <mib2_ip>:
- 80458f8: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045908: 0002 0017 56b8 0804 548c 0804 .....V...T..
- 08045914 <internet_nodes>:
- 8045914: 5160 0804 5a2c 0804 `Q..,Z..
- 0804591c <prefix>:
- 804591c: 0001 0000 0003 0000 0006 0000 0001 0000 ................
- 0804592c <snmp_version>:
- 804592c: 0000 0000 ....
- 08045930 <snmp_publiccommunity>:
- 8045930: 7570 6c62 6369 ff00 public.
- 08045937 <ethbroadcast>:
- 8045937: ffff ffff ffff ......
- 0804593d <ethzero>:
- 804593d: 0000 0000 0000 7445 5f68 6669 2000 7325 ......Eth_if. %s
- 804594d: 0d0a 4400 4348 4350 696c 6e65 0074 6577 ...DHCPClient.we
- 804595d: 5262 6965 696e 0074 6552 6e69 7469 6557 bReinit.ReinitWe
- 804596d: 0062 1800 b..
- 08045970 <enterprises_ids>:
- 8045970: a318 0000 ....
- 08045974 <bt6701_ids>:
- 8045974: 0001 0000 ....
- 08045978 <swt_nodes>:
- 8045978: 59c8 0804 .Y..
- 0804597c <rotek_nodes>:
- 804597c: 5a48 0804 HZ..
- 08045980 <signals_ids>:
- 8045980: 0001 0000 0002 0000 0003 0000 0004 0000 ................
- 8045990: 0005 0000 0006 0000 0007 0000 0008 0000 ................
- 80459a0: 0009 0000 000a 0000 000b 0000 000c 0000 ................
- 80459b0: 000d 0000 000e 0000 000f 0000 0010 0000 ................
- 80459c0: 0011 0000 0012 0000 ........
- 080459c8 <bt6701>:
- 80459c8: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 80459d8: 0002 0001 5974 0804 5ac0 0804 ....tY...Z..
- 080459e4 <signals_nodes>:
- 80459e4: 5aac 0804 5aac 0804 5aac 0804 5aac 0804 .Z...Z...Z...Z..
- 80459f4: 5aac 0804 5aac 0804 5aac 0804 5aac 0804 .Z...Z...Z...Z..
- 8045a04: 5aac 0804 5aac 0804 5aac 0804 5aac 0804 .Z...Z...Z...Z..
- 8045a14: 5aac 0804 5aac 0804 5aac 0804 5aac 0804 .Z...Z...Z...Z..
- 8045a24: 5aac 0804 5aac 0804 .Z...Z..
- 08045a2c <mib_private>:
- 8045a2c: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045a3c: 0002 0001 5a64 0804 5a6c 0804 ....dZ..lZ..
- 08045a48 <swt>:
- 8045a48: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045a58: 0002 0001 5a68 0804 5978 0804 ....hZ..xY..
- 08045a64 <mib_private_ids>:
- 8045a64: 0001 0000 ....
- 08045a68 <swt_ids>:
- 8045a68: 0003 0000 ....
- 08045a6c <mib_pivate_nodes>:
- 8045a6c: 5a70 0804 pZ..
- 08045a70 <enterprises>:
- 8045a70: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045a80: 0002 0001 5970 0804 5a8c 0804 ....pY...Z..
- 08045a8c <enterprises_nodes>:
- 8045a8c: 5ac8 0804 .Z..
- 08045a90 <signals>:
- 8045a90: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045aa0: 0002 0012 5980 0804 59e4 0804 .....Y...Y..
- 08045aac <signals_var>:
- 8045aac: 7fb1 0803 7f71 0803 80cd 0803 7ec5 0803 ....q........~..
- 8045abc: 0001 0000 ....
- 08045ac0 <bt6701_nodes>:
- 8045ac0: 5a90 0804 .Z..
- 08045ac4 <rotek_ids>:
- 8045ac4: 038f 0000 ....
- 08045ac8 <rotek>:
- 8045ac8: 39e3 0803 39e9 0803 39eb 0803 39ef 0803 .9...9...9...9..
- 8045ad8: 0002 0001 5ac4 0804 597c 0804 3025 6432 .....Z..|Y..%02d
- 8045ae8: 252e 3230 2e64 3025 6432 2520 3230 3a64 .%02d.%02d %02d:
- 8045af8: 3025 6432 253a 3230 0064 6425 252e 2e64 %02d:%02d.%d.%d.
- 8045b08: 6425 2520 3a64 6425 253a 2064 0d0a 3b00 %d %d:%d:%d ...;
- 8045b18: 3b3b 3b00 3b3b 3254 4b4f 3b3b 7b00 7322 ;;.;;;T2OK;;.{"s
- 8045b28: 7265 6f6e 3a22 0022 2c22 6422 6368 2270 erno":".","dhcp"
- 8045b38: 223a 2200 222c 7069 6461 7264 7365 2273 :".","ipaddress"
- 8045b48: 223a 2200 222c 6167 6574 6177 2279 223a :".","gateway":"
- 8045b58: 2200 6573 6e72 226f 2200 6864 7063 0022 ."serno"."dhcp".
- 8045b68: 6922 6170 6464 6572 7373 0022 6722 7461 "ipaddress"."gat
- 8045b78: 7765 7961 0022 6d22 7361 226b 7500 7064 eway"."mask".udp
- 8045b88: 6e5f 7465 6573 7474 6e69 7367 745f 7361 _netsettings_tas
- 8045b98: 006b 0000 666e 0000 6e69 7469 0079 0000 k...nf..inity...
- 8045ba8: 6e61 0000 4241 4443 4645 0000 6261 6463 an..ABCDEF..abcd
- 8045bb8: 6665 0000 3130 3332 3534 3736 3938 0000 ef..0123456789..
- 8045bc8: 0043 0000 4f50 4953 0058 0000 0000 0000 C...POSIX.......
- 8045bd8: 002e 0000 ....
- 08045bdc <_init>:
- 8045bdc: b5f8 push {r3, r4, r5, r6, r7, lr}
- 8045bde: bf00 nop
- 8045be0: bcf8 pop {r3, r4, r5, r6, r7}
- 8045be2: bc08 pop {r3}
- 8045be4: 469e mov lr, r3
- 8045be6: 4770 bx lr
- 08045be8 <_fini>:
- 8045be8: b5f8 push {r3, r4, r5, r6, r7, lr}
- 8045bea: bf00 nop
- 8045bec: bcf8 pop {r3, r4, r5, r6, r7}
- 8045bee: bc08 pop {r3}
- 8045bf0: 469e mov lr, r3
- 8045bf2: 4770 bx lr
|