| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048 |
- /******************************************************************************
- 版权所有:
- 文件名称: Maintain.c
- 文件版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2013-03-05
- 功能说明: 装置维护管理
- 其它说明:
- 修改记录:
- */
- /*------------------------------- 头文件 --------------------------------------
- */
- #include "head.h"
- /*------------------------------- 宏定义 --------------------------------------
- */
- #define MAINTAIN_TYPE 138
- #define MAINTAIN_ACK 0X80
- #define MAINTAIN_NAK 0X40
- #define MAINTAIN_ERR_OK 0x00
- #define MAINTAIN_ERR_NAME 0x01
- #define MAINTAIN_ERR_TYPE 0x02
- #define MAINTAIN_ERR_BUSY 0x03
- #define MAINTAIN_ERR_ADDR 0x04
- #define MAINTAIN_ERR_SIZE 0x05
- #define MAINTAIN_ERR_CRC 0x06
- #define MAINTAIN_ERR_SAVE 0x07
- #define MAINTAIN_ERR_PHASE 0x08
- #define MAINTAIN_ERR_MEM 0x09
- #define MAINTAIN_ERR_STATE 0x0a
- #define MAINTAIN_ERR_OCODE 0X0B
- #define MAINTAIN_ERR_NCODE 0X0C
- #define MAINTAIN_ERR_NSLOT 0X0D
- #define MAINTAIN_ERR_TIME 0X0E
- #define MAINTAIN_ERR_SETNULL 0X0F
- #define MAINTAIN_ERR_SETERR 0X10
- #define MAINTAIN_ERR_DATAL 0X11 //输入校正值太小
- #define MAINTAIN_ERR_CHXS 0X12 //通道系数超范围
- #define MAINTAIN_ERR_ANGLEL 0X13 //输入角度值太小
- #define MAINTAIN_ERR_ANGLEH 0X14 //输入角度值太大
- #define MAINTAIN_ERR_ANGLEXS 0X15 //角度系数超范围
- #define MAINTAIN_ERR_XSSAVE 0X16 //系数保存错误
- #define MAINTAIN_ERR_CODE 0X17
- #define MAINTAIN_ERR_CMD 0X18 // 不支持的命令
- #define MAINTAIN_ERR_FORMAT 0X19 // 格式错误
- #define MAINTAIN_ERR_OTHER 0xff
- #define MAINTAIN_ATTR_UP 0X01
- #define MAINTAIN_ATTR_DOWN 0X02
- #define BOARD_NUMBER 12 //最大支持板卡个数
- /*------------------------------ 类型结构 -------------------------------------
- */
- enum mState
- {
- MS_IDLE = 0, // 空闲状态
- MS_REQUEST, // 维护请求
- MS_END, // 维护结束
- MS_UPDATE, // 文件更新命令
- MS_EQUINF, // 查看装置信息
-
- MS_BOARDINF, // 查看板卡信息
- MS_TEST_DO, // 开出测试
- MS_TEST_DI, // 开入值刷新
- MS_TEST_LED, // LED测试
- MS_SAMPLE, // 零漂值刷新
-
- MS_ADJUST, // 采样校准
- MS_TEST_REMOTE, // 远动测试
- MS_RECORD, // 手动启动录波
- MS_MEASURE, // 测量值刷新
- MS_TIME_DIS, // 时间刷新
-
- MS_TIME_SET, // 对时
- MS_FLAG_DIS, // 标志刷新
- MS_BAT_MANAGE, // 电池管理
- MS_CLEAR_SOE, // 清除SOE
- MS_SET_CODE, // 修改密码
-
- MS_KEEP_ALIVE, // 心跳命令
- MS_BOARD_VERSION, // 主板版本
- MS_DIDO_AUTO_TEST, // 开入开出自动测试
- MS_BOARD_DI, // 板卡遥信
- MS_RESOURCE_THAN, // 资源表文件比对
-
- MS_BOARD_MEASURE, // 板卡测量值刷新
- MS_BOARD_CALIBRATION, // 板卡校准系数上传
- MS_DEFAULT_CALIBRATION, // 恢复默认校准系数
- MS_SAMPLE_CALIBRATION, // 整机采样校准
- MS_DEFAULT, // 恢复出厂设置
- MS_UZTEMP_MEASURE, // 直流、温度刷新
- MS_ADJUST_UZL, // 直流校准
- MS_SAMPLE_TEST, // 采样通道测试
- MS_KRKC_TEST, // 开入开出测试
- MS_LCD_TEST, // LCD测试
-
- MS_RESET_TEST, // 装置复位
- MS_CFGINF, // 配置信息查看
- MS_ERRINF, // 故障信息查看
- MS_GETIP, // 获取网口及对应IP
- MS_GET_GPRS_INFO, // 得到GPRS信息
- MS_FZXS_UD, // 辐值系数上传下载
- MS_AC_CFG, // 采样板单板通道配置
- MS_DC_FACTOR, // 直流校准系数
- MS_WAVE_OK, // 录波完成
- MS_FILE_ISUPDATE, // 文件是否更新
- MS_COMM_TEST, // 串口测试
- MS_PASSWORD, // 密码及权限确认
- MS_INSTU, // 内部状态查看
- MS_RCD_NAME, // 录波文件名称获取
- MS_RMT_PAIR, // 遥控器配对
- MS_BOARDINF2, // 查看板卡信息
- MS_SET_MTPWD, // 设置维护工具密码
- MS_MT_PWD, // 维护工具密码及权限确认
- MS_CLOSE_PORT, // 关闭维护端口服务
- MS_AUTH, // 装置授权管理
- MS_YD_REFRESH, // 远动遥信遥测刷新
- MS_FACTORY_SETUP, //出厂设置
- #if defined(CPU_AM335X)
- MS_APP_BAK_START, //启动app分区备份 58
- MS_APP_BAK_RESULT, //查询app分区备份结果 59
- #endif
- };
- struct maintain
- {
- enum mState state;
- s32 file_index;
- u16 file_type;
- };
- //板卡类型
- enum
- {
- BOARD_MASTER=0, //主板
- BOARD_AUX, //辅助功能板
- BOARD_DI_30, //DI板:30个
- BOARD_DI_72, //DI板:72个
- BOARD_DO, //DO板
- BOARD_AI_UI, //AI板:电压3个,电流9个
- BOARD_AI_I, //AI板:电流12个
- BOARD_POWER, //电源板
- BOARD_DISP, //显示板
- };
- //采样板类型
- enum
- {
- AC_4U12I=1,
- AC_4U9I,
- AC_1U12I,
- AC_6U4I,
- AC_4U4I,
- ACTYPE_NUM,
- };
- //板卡信息格式
- struct board_inf
- {
- BYTE bytype; //板卡类型
- BYTE bystatus; //板卡状态
- BYTE byCRC[2]; //程序CRC校验
- BYTE byVer[4]; //程序版本
- };
- struct ac_test_type
- {
- char * name;
- u16 normal_data;
- short normal_angle;
- };
- struct ac_test_board
- {
- int type;
- int num;
- const struct ac_test_type
- *data;
- };
- #define FILELIST_FILE_VERSION 0X01010101 //文件列表版本
- #define MTPWD_FILE_VERSION 0X01010101 //文件版本
- /*------------------------------ 全局变量 -------------------------------------
- */
- // 维护接入方式,是串口还是网络,如果是串口,不能打开网络端口
- bool g_mt_rs232;
- struct maintain g_maintain = {0};
- struct maintain_def g_mtbuf;
- struct prog_up g_prog_up;
- static const char * mt_init_pwd = "gh123456@"; // 维护工具默认密码
- static char mt_pwd[17];
- extern struct timespec g_sys_time;
- u8 dido_buf[128];
- uint32_t alive_us0 = 0,alive_us1 = 0;
- uint32_t rmttest_us0 = 0,rmttest_us1 = 0;
- const struct ac_test_type g_dtu_ac4u12i_desc[17] =
- {
- {"Ua", 100, 0},
- {"Ub", 100, -120},
- {"Uc", 100, 120},
- {"US", 100, 120},
-
- {"Ia1", 5, 0},
- {"Ib1", 5, -120},
- {"Ic1", 5, 120},
-
- {"Ia2", 5, 0},
- {"Ib2", 5, -120},
- {"Ic2", 5, 120},
-
- {"Ia3", 5, 0},
- {"Ib3", 5, -120},
- {"Ic3", 5, 120},
-
- {"Ia4", 5, 0},
- {"Ib4", 5, -120},
- {"Ic4", 5, 120},
-
- {"F", 50, 0},
- };
- #define AC_DTU_4U12I_NUM (sizeof(g_dtu_ac4u12i_desc)/sizeof(g_dtu_ac4u12i_desc[0]))
- const struct ac_test_type g_dtu_ac4u9i_desc[17] =
- {
- {"Ua", 100, 0},
- {"Ub", 100, -120},
- {"Uc", 100, 120},
- {"US", 100, 120},
-
- {"Ia1", 5, 0},
- {"Ib1", 5, -120},
- {"Ic1", 5, 120},
-
- {"Ia2", 5, 0},
- {"Ib2", 5, -120},
- {"Ic2", 5, 120},
-
- {"Ia3", 5, 0},
- {"Ib3", 5, -120},
- {"Ic3", 5, 120},
-
- {"+12V", 12, 0},
- {"-12V", -12, 0},
- {"+05V", 5, 0},
-
- {"F", 50, 0},
- };
- #define AC_DTU_4U9I_NUM (sizeof(g_dtu_ac4u9i_desc)/sizeof(g_dtu_ac4u9i_desc[0]))
- const struct ac_test_type g_dtu_ac1u12i_desc[17] =
- {
- {"US1", 100, 0},
-
- {"Ia1", 5, 0},
- {"Ib1", 5, -120},
- {"Ic1", 5, 120},
-
- {"Ia2", 5, 0},
- {"Ib2", 5, -120},
- {"Ic2", 5, 120},
-
- {"Ia3", 5, 0},
- {"Ib3", 5, -120},
- {"Ic3", 5, 120},
-
- {"Ia4", 5, 0},
- {"Ib4", 5, -120},
- {"Ic4", 5, 120},
- {"+12V", 12, 0},
- {"-12V", -12, 0},
- {"+05V", 5, 0},
-
- {"F", 50, 0},
- };
- #define AC_DTU_1U12I_NUM (sizeof(g_dtu_ac1u12i_desc)/sizeof(g_dtu_ac1u12i_desc[0]))
- const struct ac_test_type g_ftu_4u4i_desc[9] =
- {
- {"UA", 100, 0},
- {"UB", 100, -120},
- {"UC", 100, 120},
- {"U0", 100, 120},
-
- {"IA", 5, 0},
- {"IB", 5, -120},
- {"IC", 5, 120},
- {"I0", 5, 120},
-
- {"F", 50, 0},
- };
- #define AC_FTU_4U4I_NUM (sizeof(g_ftu_4u4i_desc)/sizeof(g_ftu_4u4i_desc[0]))
- struct ac_test_board g_ac_test_board[] =
- {
- {AC_4U12I,AC_DTU_4U9I_NUM,g_dtu_ac4u12i_desc},
- {AC_4U9I,AC_DTU_4U9I_NUM,g_dtu_ac4u9i_desc},
- {AC_1U12I,AC_DTU_1U12I_NUM,g_dtu_ac1u12i_desc},
- {AC_4U4I,AC_FTU_4U4I_NUM,g_ftu_4u4i_desc},
- };
- #define AC_TEST_BOARD_NUM (sizeof(g_ac_test_board)/sizeof(g_ac_test_board[0]))
- /*------------------------------ 函数声明 -------------------------------------
- */
- static void _maintain_state_reset(void);
- static void _maintain_echo(struct maintain_def *pt,u8 * cmd_buf,u8 cmd_len);
- static void _maintain_recv_rst(struct maintain_def *pt);
- static void _maintain_send(void);
- static int _maintain_comm(struct maintain_def *pt,unsigned char *buf,int len);
- static int _trans_file_comm(struct maintain_def *pt,u8 *buf,int len);
- static int _maintain_pwd_createfile(u8 *pwd);
- static int _maintain_pwd_readfile(void);
- extern BYTE g_LedNo;
- extern struct down_program_comm g_down_program; //面板升级
- int IEC101_TransFile(IEC101_DEF *pt,unsigned char *buf,int len);
- /*------------------------------ 外部函数 -------------------------------------
- 外部函数供其它实体文件引用,必须仔细检查传入参数的合法性.
- */
- /**************************************************************************
- 函数名称:MainTain_Init
- 函数版本:1.00
- 作者:
- 创建日期:2013.03.28
- 函数功能说明:维护命令初始化
- 输入参数:
- 输出参数:
- 返回值:
- 更新信息:
- 更新日志1:
- 日期:
- 修改者:
- 修改内容:
- 修改原因:
- ***************************************************************************/
- void MainTain_Init(void)
- {
- int i;
- memset(&g_mtbuf,0,sizeof(struct maintain_def));
- alive_us0= ustimer_get_origin();
- alive_us1= ustimer_get_origin();
- i = _maintain_pwd_readfile();
- if (i != 0)
- {
- u8 j, tmp_pwd[16];
- memset (&mt_pwd, ' ', 16);
- memcpy (&mt_pwd, mt_init_pwd, strlen(mt_init_pwd));
- for (j=0; j<16; j++)
- {
- tmp_pwd[j] = ~mt_pwd[j];
- }
- _maintain_pwd_createfile(tmp_pwd);
- rt_printf("维护工具密码文件错误: %d\r\n", i);
- }
- }
- /**************************************************************************
- 函数名称:Maintain_Applay
- 函数版本:1.00
- 作者:
- 创建日期:2013.03.28
- 函数功能说明:维护命令链路数据处理
- 输入参数:
- 输出参数:
- 返回值:
- 更新信息:
- 更新日志1:
- 日期:
- 修改者:
- 修改内容:
- 修改原因:
- ***************************************************************************/
- void Maintain_Applay(void)
- {
- struct maintain_def *pt=&g_mtbuf;
- BYTE *pd;
- u8 AddByte=0;
- // 如果有僵死的维护线程,回收。
- net_maintain_zombie();
- if(bMaintain)
- {
- alive_us1 = ustimer_get_origin();
- #if defined (CPU_AM335X) || (defined CPU_FUXI)
- //noted by sunxi: 目前维护工具为每30秒发1条心跳,如果漏1条,就已经是60秒了。
- //这样很容易出问题,应该是发3条心跳,1条都没有收到才被认为有问题才合理。100秒可有3条心跳了。
- //需要这里加了宏CPU_AM335X,但是所有平台都应该改为100秒。
- if(alive_us1 - alive_us0 > 100*USTIMER_SEC) // 100秒循环检查
- #else
- if(alive_us1 - alive_us0 > 60*USTIMER_SEC)
- #endif
- {
- bMaintain=false;
- }
- }
-
- if(g_run_stu.bToolRmtTest)
- {
- rmttest_us1 = ustimer_get_origin();
- if(rmttest_us1 - rmttest_us0> 600UL*USTIMER_SEC) // 10分钟自动退出远动测试模式
- {
- g_run_stu.bToolRmtTest=false;
- }
- }
- if(pt->bData) //有接收到的数据
- {
- if (!g_mtbuf.hmi_mode)
- {
- g_file_save = 0;
- }
- pt->bData=false;
- if(pt->recvbuf[0]==0x10) pd=&pt->recvbuf[1];//短帧
- else if(pt->recvbuf[0]==0x68) pd=&pt->recvbuf[4];//长帧
- else return;
- // rt_printf("Maintain_Recv buf= %x %x %x %x %x %x %x %x %x %x %x %x\r\n", pd[0],pd[1],pd[2],pd[3],pd[4],pd[5],pd[6],pd[7],pd[8],pd[9],pd[10],pd[11]);
- pt->dValidTime=dTCounter;
- switch((pd[0]&0x0f))
- {
- case 3: //请求/确认
- case 4: //请求/无应答
- switch(pd[2]) //类型标识判断
- {
- case 138://维护命令管理模块
- _maintain_comm(pt,&pd[2+AddByte],pt->recvbuf[1]-(2+AddByte));
- break;
- case 137: // 下载上传文件
- _trans_file_comm(pt,&pd[2+AddByte],pt->recvbuf[1]-(2+AddByte));
- break;
- }
- break;
- } //类型判断结束
- _maintain_send();
- }
- else //无有效数据接收,平衡式101处理自动发送数据
- {
- if(pt->bSend)return; //正在发送数据,不处理
- if(dTCounter-pt->dValidTime>T_1s*10) // 6秒后,未收到应答报文
- {
-
- pt->dValidTime=dTCounter;
- if(++pt->byRetryTimes>2) //重发三次后,重新初始化
- {
- pt->bSend=false;
- }
- else
- {
- //需重新组织发送
- _maintain_send();
- }
- }
- return; // 发送,未收到数据,返回
- }
- }
- /**************************************************************************
- 函数名称:Maintain_Manage
- 函数版本:1.00
- 作者:
- 创建日期:2013.03.28
- 函数功能说明:维护命令处理
- 输入参数:
- 输出参数:
- 返回值:
- 更新信息:
- 更新日志1:
- 日期:
- 修改者:
- 修改内容:
- 修改原因:
- ***************************************************************************/
- int Maintain_Manage(u8 *buf, u32 len, u8 *cmd_buf)
- {
- u8 cmd_len=0;
- u16 i;
- char name[256];
- #if defined(CPU_AM335X)
- u32 llen;
- u8 *lbuf;
- u8 result = 0;
- struct file * pfile;
- loff_t pos;
- char *cmd_ls[] = {"/usr/sbin/app_backup.sh",NULL, NULL, NULL};
- #endif
-
- cmd_buf[0] = MAINTAIN_TYPE;
- cmd_buf[1] = buf[1];
- alive_us0= ustimer_get_origin();
- switch(buf[1])
- {
- case MS_REQUEST:
- // 维护请求
- _maintain_state_reset();
- sprintf(cmd_buf+2,szTool);
- sprintf(cmd_buf+21,VER_TIME "CRC:%04XH",m_CodeCrc);
- cmd_len = strlen(cmd_buf+2)+1+2;
- #if 0
- for (i=0; i<19; i++) //检查版本号
- {
- if (buf[2+i] != szTool[i])
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- break;
- }
- }
- #endif
- bMaintain = true;
- cmd_buf[1] |= MAINTAIN_ACK;
-
- g_maintain.state = MS_REQUEST;
- break;
-
- case MS_END:
- // 维护结束
- bMaintain = false;
- if(g_run_stu.bToolRmtTest)
- {
- g_run_stu.bToolRmtTest = false;
- }
- // 如果是重复报文,继续肯定应答。
- if(g_maintain.state == MS_END)
- {
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- break;
- }
- // 判断是否需要复位
- if(buf[2] == 1) // 0:不复位;1:复位
- {
- }
- // 一切正常,肯定应答
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- // 复位全部状态后,设置状态为MS_END,继续应答重发确认帧。
- _maintain_state_reset();
- g_maintain.state = MS_END;
- break;
- case MS_UPDATE:
- {
- u16 file_type;
- char from_file_name[64];
- char to_file_name[64];
- memcpy(cmd_buf+2,buf+2,25);
-
- // 检查阶段
- if((g_maintain.state != MS_REQUEST) || (!bMaintain))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[25] = MAINTAIN_ERR_PHASE;
- cmd_len = 26;
- break;
- }
- //检查文件名
- g_maintain.file_index = file_check(buf+3,ATTR_DOWN);
- if(g_maintain.file_index < 0)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[25] = MAINTAIN_ERR_NAME;
- cmd_len = 26;
- break;
- }
-
- if (buf[25])
- {
- //子板升级
- if(g_maintain.file_type == FILETYPE_CHILDPRO)
- {
- #if defined(BSP_DTU3) || defined(BSP_DTU2) || defined(BSP_DTU5)
- extern struct program_comm g_program;
- if ((g_program.comm == 0)&&(g_prog_up.bit_echo == 0))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[25] = MAINTAIN_ERR_OTHER;
- cmd_len = 26;
- break;
- }
- else
- {
- cmd_buf[26] = g_prog_up.framesum;
- cmd_buf[27] = g_prog_up.framesum>>8;
-
- cmd_buf[28] = g_prog_up.frameno;
- cmd_buf[29] = g_prog_up.frameno>>8;
-
- cmd_buf[30] = g_prog_up.bit_prog;
- cmd_buf[31] = g_prog_up.bit_prog>>8;
- cmd_buf[32] = g_prog_up.bit_echo;
- cmd_buf[33] = g_prog_up.bit_echo>>8;
-
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 34;
- }
- #endif
-
- }
- else if(g_maintain.file_type == FILETYPE_F308_HMI)
- {
- if ((g_down_program.comm == 0)&&(g_down_program.bit_echo == 0))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[25] = MAINTAIN_ERR_OTHER;
- cmd_len = 26;
- break;
- }
- else
- {
- cmd_buf[26] = g_down_program.framenum;
- cmd_buf[27] = g_down_program.framenum>>8;
-
- cmd_buf[28] = g_down_program.frameno;
- cmd_buf[29] = g_down_program.frameno>>8;
-
- cmd_buf[30] = g_down_program.bit_prog;
- cmd_buf[31] = g_down_program.bit_prog>>8;
- cmd_buf[32] = g_down_program.bit_echo;
- cmd_buf[33] = g_down_program.bit_echo>>8;
-
- cmd_buf[1] |= MAINTAIN_ACK;
- //rt_printf("[frameno=%d, %d]\n", g_down_program.frameno,g_down_program.framenum);
- cmd_len = 34;
- }
- }
- break;
- }
-
- memcpy(&g_maintain.file_type,buf+23,2);
- #ifndef MODE_LITTLE_ENDIAN
- swap16(&g_maintain.file_type);
- #endif
- file_type = file_check_type(buf+3,ATTR_DOWN);
- //文件校验,并进行移动、删除动作.注意GPRS相关文件作特殊处理
- if (g_file_save)
- {
- g_file_save = 0;
- }
- else if (g_maintain.file_type == file_type)
- {
- if (file_check_info(g_maintain.file_index) == 0)
- {
- char log_buf[128]={0};
- uint32_t us0 = ustimer_get_origin();
- watchdog_feed_mainloop_50s();
- sprintf(to_file_name,"%s%s",g_file_item[g_maintain.file_index].file_dir,g_file_item[g_maintain.file_index].file_name);
- sprintf(from_file_name,"%s%s","/tmp/",g_file_item[g_maintain.file_index].file_name);
- rt_file_mv(from_file_name,to_file_name);
- rt_printf("rt_file_mv:us=%d.\r\n",ustimer_get_duration(us0)/USTIMER_US);
- sprintf(name,"%s%s%s","文件更新",g_file_item[g_maintain.file_index].file_dir,g_file_item[g_maintain.file_index].file_name);
- log_str_time(LOG_OPERATE,name,0,1);
- sprintf(log_buf,"%s updated",g_file_item[g_maintain.file_index].file_name);
- load_hs_log_rcd(TYPE_SW_UPDATE,true,NULL,log_buf,1);
- }
- else
- {
- sprintf(from_file_name,"%s%s","/tmp/",g_file_item[g_maintain.file_index].file_name);
- rt_file_del(from_file_name);
- if (g_maintain.file_type == FILETYPE_SET)
- {
- set_create_data_file();
- }
-
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[25] = MAINTAIN_ERR_CRC;
- cmd_len = 26;
- break;
- }
- }
-
- if (g_maintain.file_type == FILETYPE_SET)
- {
- int ret=0;
- ret = set_save_data_file(g_maintain.file_index);
- if (ret != 0)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- if (ret < 0)
- {
- cmd_buf[25] = MAINTAIN_ERR_CRC;
- }
- else if (ret & 0x07)
- {
- cmd_buf[25] = MAINTAIN_ERR_SETNULL;
- }
- else if (ret & 0x70)
- {
- cmd_buf[25] = MAINTAIN_ERR_SETERR;
- }
- cmd_len = 26;
- break;
- }
- }
- #ifdef FUN_GPRS // modfiy for xxxxxx 20220706 GPRS没有使用。
- else if(g_maintain.file_type == FILETYPE_INNERGPRS)
- {
- //extern void gprs_net_update_gprsini(void);
- //gprs_net_update_gprsini();
- //不作任何处理.GPRS模块自己会复位.
- extern int g_update_gprs_driver;
- if(strcmp(g_file_item[g_maintain.file_index].file_name,FILE_NAME_GPRSDRIVER) == 0)
- {
- g_update_gprs_driver = 1;//置更新标志
- }
- }
- #endif
- else if(g_maintain.file_type == FILETYPE_CHILDPRO)
- {
- #if defined(BSP_DTU3) || defined(BSP_DTU2) || defined(BSP_DTU5)
- if (init_file_program(buf[2], g_maintain.file_index) != 0) //文件读取校验有误
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[25] = MAINTAIN_ERR_CRC;
- cmd_len = 26;
- rt_file_del("/tmp/DTU-DIDO.elf.bin");
- break;
- }
- else
- {
- cmd_buf[25] = 1;
- }
- #endif
- }
- else if(g_maintain.file_type == FILETYPE_F308_HMI)
- {
-
- if (init_down_program( g_maintain.file_index) != 0) //文件读取校验有误
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[25] = MAINTAIN_ERR_CRC;
- cmd_len = 26;
- rt_file_del("/tmp/F308_HMI.bin");
- break;
- }
- else
- {
- cmd_buf[25] = 1;
- }
- }
-
- cmd_buf[1] |= MAINTAIN_ACK;
- if (cmd_buf[25])
- {
- //子板升级
- if(g_maintain.file_type == FILETYPE_CHILDPRO)
- {
- cmd_buf[26] = g_prog_up.framesum;
- cmd_buf[27] = g_prog_up.framesum>>8;
-
- cmd_buf[28] = g_prog_up.frameno;
- cmd_buf[29] = g_prog_up.frameno>>8;
-
- cmd_buf[30] = g_prog_up.bit_prog;
- cmd_buf[31] = g_prog_up.bit_prog>>8;
- cmd_buf[32] = g_prog_up.bit_echo;
- cmd_buf[33] = g_prog_up.bit_echo>>8;
- cmd_len = 34;
- }
- else if(g_maintain.file_type == FILETYPE_F308_HMI)
- {
- cmd_buf[26] = g_down_program.framenum;
- cmd_buf[27] = g_down_program.framenum>>8;
-
- cmd_buf[28] = g_down_program.frameno;
- cmd_buf[29] = g_down_program.frameno>>8;
-
- cmd_buf[30] = g_down_program.bit_prog;
- cmd_buf[31] = g_down_program.bit_prog>>8;
- cmd_buf[32] = g_down_program.bit_echo;
- cmd_buf[33] = g_down_program.bit_echo>>8;
- cmd_len = 34;
- }
- break;
- }
- else
- {
- cmd_len = 26;
- }
- }
- break;
-
- case MS_EQUINF:
- // 查看装置信息
- cmd_len = set_get_fixed_args_sz(buf[2],cmd_buf+2,240);
- cmd_len += 2;
- cmd_buf[1] |= MAINTAIN_ACK;
- break;
-
- case MS_BOARDINF:
- case MS_BOARDINF2:
- {
- // 查看板卡信息
- #define BOARD_INF_MAX_SLOT 11
- int slot_num=0,slot_begin=0;
- int b_info_size;
- if(buf[1] == MS_BOARDINF)
- {
- slot_num = g_equ_config->equ_slot_num > BOARD_INF_MAX_SLOT ? BOARD_INF_MAX_SLOT : g_equ_config->equ_slot_num;
- slot_begin = 0;
- }
- else if(g_equ_config->equ_slot_num > BOARD_INF_MAX_SLOT)
- {
- slot_num = g_equ_config->equ_slot_num -BOARD_INF_MAX_SLOT;
- slot_begin = BOARD_INF_MAX_SLOT;
- }
- else
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_OTHER;
- cmd_len = 3;
- break;
- }
-
- cmd_len = 2;
- b_info_size = 21;
- for(i=0; i<slot_num; i++)
- {
- cmd_buf[2+i*b_info_size] = g_board_info[slot_begin + i].type;
- cmd_buf[3+i*b_info_size] = g_board_info[slot_begin + i].status;
- cmd_buf[4+i*b_info_size] = g_board_info[slot_begin + i].errcode;
- cmd_buf[5+i*b_info_size] = g_board_info[slot_begin + i].crc;
- cmd_buf[6+i*b_info_size] = g_board_info[slot_begin + i].crc>>8;
- cmd_buf[7+i*b_info_size] = g_board_info[slot_begin + i].version;
- cmd_buf[8+i*b_info_size] = g_board_info[slot_begin + i].version>>8;
- cmd_buf[9+i*b_info_size] = g_board_info[slot_begin + i].version>>16;
- cmd_buf[10+i*b_info_size] = g_board_info[slot_begin + i].version>>24;
- cmd_buf[11+i*b_info_size] = g_board_info[slot_begin + i].update_time.tv_sec;
- cmd_buf[12+i*b_info_size] = g_board_info[slot_begin + i].update_time.tv_sec>>8;
- cmd_buf[13+i*b_info_size] = g_board_info[slot_begin + i].update_time.tv_sec>>16;
- cmd_buf[14+i*b_info_size] = g_board_info[slot_begin + i].update_time.tv_sec>>24;
- cmd_buf[15+i*b_info_size] = g_board_info[slot_begin + i].update_time.tv_nsec;
- cmd_buf[16+i*b_info_size] = g_board_info[slot_begin + i].update_time.tv_nsec>>8;
- cmd_buf[17+i*b_info_size] = g_board_info[slot_begin + i].update_time.tv_nsec>>16;
- cmd_buf[18+i*b_info_size] = g_board_info[slot_begin + i].update_time.tv_nsec>>24;
- cmd_buf[19+i*b_info_size] = g_board_info[slot_begin + i].can_bus;
- cmd_buf[20+i*b_info_size] = g_board_info[slot_begin + i].can_bus>>8;
- cmd_buf[21+i*b_info_size] = g_board_info[slot_begin + i].is_check;
- cmd_buf[22+i*b_info_size] = g_board_info[slot_begin + i].is_check>>8;
- cmd_len += b_info_size;
- }
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
-
- case MS_TEST_DO:
- // 开出测试
- // 检查阶段
- if((g_maintain.state != MS_REQUEST) ||(!bMaintain))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
- bMaintain_test = true;
- dido_single_test(buf[2],buf[3]);
- bMaintain_test = false;
- cmd_buf[2] = buf[2];
- cmd_buf[3] = buf[3];
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 4;
- break;
- case MS_TEST_DI:
- {
- // 开入值刷新
- int sw;
- sw = buf[2];
- cmd_buf[2] = sw;
-
- if(sw == 0)
- {
- int i;
- long flag=0;
- long value=0;
- long flag2=0;
- long value2=0;
-
- for(i=0;i<PUB_DI_NUM;i++)
- {
- if((short)g_sw_pub.di_cfg_index[i]!=INDEX_INVALLID) //此遥信有配置
- {
- struct equ_config_di *ecd=&g_equ_config_di[g_sw_pub.di_cfg_index[i]];
-
- if(i<32)
- {
- if(dido_di_is_on(ecd->slot,ecd->index))
- {
- value |= (1<<i);
- }
-
- flag |= (1<<i);
- }
- else
- {
- if(dido_di_is_on(ecd->slot,ecd->index))
- {
- value2 |= (1<<(i-32));
- }
-
- flag2 |= (1<<(i-32));
- }
- }
- }
-
- cmd_buf[3] = flag;
- cmd_buf[4] = (flag >> 8);
- cmd_buf[5] = (flag >> 16);
- cmd_buf[6] = (flag >> 24);
- cmd_buf[7] = value;
- cmd_buf[8] = (value >> 8);
- cmd_buf[9] = (value >> 16);
- cmd_buf[10] = (value >> 24);
- cmd_len = 11;
- if(PUB_DI_NUM>32)
- {
- cmd_buf[11] = flag2;
- cmd_buf[12] = (flag2 >> 8);
- cmd_buf[13] = (flag2>> 16);
- cmd_buf[14] = (flag2 >> 24);
- cmd_buf[15] = value2;
- cmd_buf[16] = (value2 >> 8);
- cmd_buf[17] = (value2 >> 16);
- cmd_buf[18] =(value2 >> 24);
- cmd_len = 19;
- }
- }
- else if(sw <= SWITCH_NUM_MAX)
- {
- int i;
- long flag=0;
- long value=0;
- long flag2=0;
- long value2=0;
-
- sw --;
-
- for(i=0;i<SW_DI_NUM;i++)
- {
- if((short)g_sw[sw].di_cfg_index[i]!=INDEX_INVALLID) //此遥信有配置
- {
- struct equ_config_di *ecd=&g_equ_config_di[g_sw[sw].di_cfg_index[i]];
- if(i<32)
- {
- if(dido_di_is_on(ecd->slot,ecd->index))
- {
- value |= (1<<i);
- }
- flag |= (1<<i);
- }
- else
- {
- if(dido_di_is_on(ecd->slot,ecd->index))
- {
- value2 |= (1<<(i-32));
- }
- flag2 |= (1<<(i-32));
- }
- }
- }
- cmd_buf[3] = flag;
- cmd_buf[4] = (flag >> 8);
- cmd_buf[5] = (flag>> 16);
- cmd_buf[6] = (flag >> 24);
- cmd_buf[7] = value;
- cmd_buf[8] = (value >> 8);
- cmd_buf[9] = (value >> 16);
- cmd_buf[10] =(value >> 24);
- cmd_len = 11;
- if(SW_DI_NUM>32)
- {
- cmd_buf[11] = flag2;
- cmd_buf[12] = (flag2 >> 8);
- cmd_buf[13] = (flag2>> 16);
- cmd_buf[14] = (flag2 >> 24);
- cmd_buf[15] = value2;
- cmd_buf[16] = (value2 >> 8);
- cmd_buf[17] = (value2 >> 16);
- cmd_buf[18] =(value2 >> 24);
- cmd_len = 19;
- }
- }
- else
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_NSLOT;
- cmd_len = 3;
- break;
- }
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
- case MS_TEST_LED:
- { // LED测试
- // 检查阶段
- if((g_maintain.state != MS_REQUEST) ||(!bMaintain))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
- // 显示面板LED测试
- if(buf[2] == 0)
- {
- add_led_test(TEST_LED);
- }
- // 辅助板LED测试
- else if(buf[2] == 1)
- {
- g_led_aux_test_st= 1;
- }
- // 状态板LED测试
- else if(buf[2] == 2)
- {
- g_led_aux_test_st= 1;
- }
- cmd_buf[2] = buf[2];
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 3;
- }
- break;
- case MS_SAMPLE:
- { // 零漂值刷新
- u8 slot, i;
- short data;
- #ifdef CPU_FUXI
- int samcnt=((g_adc_dots_data_count/ADC_REC_SAMPLE_RATE)&CFG_ADC_DOTS_MASK);
- #else
- int samcnt=((g_adc_dots_count-1)&CFG_ADC_DOTS_MASK);
- #endif
- cmd_buf[2] = buf[2] ;
- slot = buf[2];
-
- if((slot>=16)
- || !(g_board_info[slot].type== BOARD_TYPE_FTUKZ1
- ||(g_board_info[slot].type >= BOARD_TYPE_DFTU_KC00&&g_board_info[slot].type<BOARD_TYPE_DFTU_KC00+BOARD_TYPE_KZ_NUM)
- || g_board_info[slot].type == BOARD_TYPE_AC) //只有7到10板有零漂
- || (g_board_info[slot].type== BOARD_TYPE_FBDTU_MAIN)
- || (g_board_info[slot].type== BOARD_TYPE_FBDTU_MAIN1)
- )
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_NSLOT;
- cmd_len = 3;
- break;
- }
-
- for(i=0; i<EQU_SLOT_AC_CHN; i++)
- {
- data = g_adc_dots[equ_get_ac_channel(slot,i)][samcnt];
- cmd_buf[i*2+3]=(data);
- cmd_buf[i*2+4]=(data)>>8;
- }
- cmd_len = EQU_SLOT_AC_CHN*2;
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len += 3;
- }
- break;
- case MS_ADJUST:
- {
- // 采样校准
- // 检查阶段
- int ret;
- if((g_maintain.state != MS_REQUEST) || (!bMaintain))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
- ret = sw_auto_adjust(-1);
- switch(ret)
- {
- case 0:
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- break;
-
- case -1:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_DATAL;
- cmd_len = 3;
- break;
-
- case -2:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_CHXS;
- cmd_len = 3;
- break;
-
- case -3:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_ANGLEL;
- cmd_len = 3;
- break;
-
- case -4:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_ANGLEH;
- cmd_len = 3;
- break;
-
- case -5:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_ANGLEXS;
- cmd_len = 3;
- break;
-
- case -6:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_XSSAVE;
- cmd_len = 3;
- break;
- }
- if (ret == 0)
- {
- log_str_time(LOG_OPERATE,"工具交流校准成功",0,0);
- }
- else
- {
- log_str_time(LOG_OPERATE,"工具交流校准失败",0,0);
- }
- }
- break;
- case MS_TEST_REMOTE:
- { // 远动测试
-
- // 检查阶段
- if(g_maintain.state != MS_REQUEST)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
- cmd_buf[2] = buf[2];
-
- if(buf[2] == 0x01)
- {
- send_rmt_yc(buf); // 遥测
- }
- else if(buf[2] == 0x06) // 电度
- {
- send_rmt_dd(buf); // 遥测
- }
- else if (buf[2] == 0x05)
- {
- int ret;
- char *szErr;
- ret = send_rmt_yk(buf); // 遥控
- if(ret != 0)
- {
- szErr = RmtCtrl_Err(ret);
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_NAK;
- strcpy(&cmd_buf[3],szErr);
- cmd_len = 3 + strlen(szErr) + 1;
- break;
- }
- }
- else if(buf[2] == 0x02||buf[2] == 0x04) //xj 2019-10-18 解决远动测试发送遥测时,遥信也突发上送
- {
- send_rmt_yx(buf); // 遥信
- }
- rmttest_us0 = ustimer_get_origin();
- g_run_stu.bToolRmtTest = true;
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 3;
- }
- break;
- case MS_RECORD:
- { // 手动启动录波
- int waves;
- struct rtc_time_t tm;
- struct timespec ts;
-
- memcpy(cmd_buf+2,buf+2,4);
- waves = (int)buf[2] | (int)buf[3]<<8 | (int)buf[4]<<16 | (int)buf[5]<<24; // zwg 此处有BUG,维护工具未发时间
- // 得到当前时刻。
- clk_time_get(&ts);
- timespec_to_rtc(ts,&tm,0);
- rt_printf("当前时间: %04d-%02d-%02d %02d:%02d:%02d:%09d!\r\n",
- tm.year + 2000,
- tm.month,
- tm.day,
- tm.hour,
- tm.min,
- tm.ms/1000,
- ts.tv_nsec
- );
- rcd_start(SWITCH_NUM_MAX,RECORD_TYPE_SD, waves);
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 6;
- }
- break;
- case MS_MEASURE:
- {
- // 测量值刷新
- #define YC_NUM_PER_FRAME (250/9)
- int sw,frame,cnt;
- sw = buf[2]&0x1f;
- frame = (buf[2]>>5)&0x07;
- cnt = 0;
- if (sw == 0)
- {
- long val,ang;
- int pCal=0;
-
- for(i=frame*YC_NUM_PER_FRAME;i<PUB_AC_NUM_ALL;i++)
- {
- val=g_sw_pub.ac_in[i];
- if(i<PUB_AC_NUM)
- {
- ang=g_ui[i].p;
- if(g_ui[i].chn_index!=CFG_ADC_CHANNEL_ZERO)
- {
- pCal = 0x1;
- }
- else if(g_ui[i].ui_base_make!=-1)
- {
- pCal = 0x2;
- }
- else
- {
- pCal = 0x4;
- }
- }
- else
- {
- ang=ANGEL_INVALID;
- pCal=0x2;
- }
-
- if(g_unit[g_pub_ac_desc[i].unit].zero>0&&_AbsL(val)<g_unit[g_pub_ac_desc[i].unit].zero && pRunSet->bTT_RET_ZERO)
- {
- val=0;
- ang=ANGEL_INVALID;
- }
-
- cmd_buf[3+cnt*9] = pCal;
- cmd_buf[3+cnt*9+1] = val;
- cmd_buf[3+cnt*9+2] = (val >> 8);
- cmd_buf[3+cnt*9+3] = (val >> 16);
- cmd_buf[3+cnt*9+4] = (val >> 24);
- cmd_buf[3+cnt*9+5] = ang;
- cmd_buf[3+cnt*9+6] = (ang >> 8);
- cmd_buf[3+cnt*9+7] = (ang >> 16);
- cmd_buf[3+cnt*9+8] = (ang >> 24);
- cnt++;
- if(cnt== YC_NUM_PER_FRAME)
- {
- frame++;
- break;
- }
- }
- }
- else if (sw <= EQU_SLOT_NUM_MAX)
- {
- int index_begin;
- index_begin = UI_SW_INDEX_BEGIN(sw-1);
- for(i=frame*YC_NUM_PER_FRAME;i<SW_AC_NUM_ALL;i++)
- {
- long val,ang;
- int pCal=0;
-
- val=g_sw[sw-1].ac_in[i];
- if(i<SW_AC_NUM)
- {
- ang=g_ui[index_begin+i].p;
- if(g_ui[index_begin+i].chn_index!=CFG_ADC_CHANNEL_ZERO)
- {
- pCal = 0x1;
- }
- else if(g_ui[index_begin+i].ui_base_make!=-1)
- {
- pCal = 0x2;
- }
- else
- {
- pCal = 0x4;
- }
- }
- else
- {
- pCal=0x2;
- ang=ANGEL_INVALID;
- }
-
- if(g_unit[g_sw_ac_desc[i].unit].zero>0&&_AbsL(val)<g_unit[g_sw_ac_desc[i].unit].zero && pRunSet->bTT_RET_ZERO)
- {
- val=0;
- ang=ANGEL_INVALID;
- }
- if(g_sw_ac_desc[i].unit==UNIT_GE)val*=65536;
-
- cmd_buf[3+cnt*9] = pCal;
- cmd_buf[3+cnt*9+1] = val;
- cmd_buf[3+cnt*9+2] = (val >> 8);
- cmd_buf[3+cnt*9+3] = (val >> 16);
- cmd_buf[3+cnt*9+4] = (val >> 24);
- cmd_buf[3+cnt*9+5] = ang;
- cmd_buf[3+cnt*9+6] = (ang >> 8);
- cmd_buf[3+cnt*9+7] = (ang >> 16);
- cmd_buf[3+cnt*9+8] = (ang >> 24);
- cnt++;
- if(cnt== YC_NUM_PER_FRAME)
- {
- frame++;
- break;
- }
- }
- }
-
- cmd_len = cnt*9;
- cmd_len += 3;
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_buf[2] = sw;// | frame;
- }
- break;
- case MS_TIME_DIS:
- {
- // 时间刷新
- struct rtc_time_t t_rtc;
- struct timespec ts;
- #ifndef MODE_LITTLE_ENDIAN
- u8 tmp=0;
- #endif
- // 得到系统时间
- clk_time_get(&ts);
- timespec_to_rtc(ts,&t_rtc,1);
- memcpy(cmd_buf+2, &t_rtc, 8);
- #ifndef MODE_LITTLE_ENDIAN
- tmp = cmd_buf[2];
- cmd_buf[2]=cmd_buf[3];
- cmd_buf[3]=tmp;
- tmp = cmd_buf[8];
- cmd_buf[8]=cmd_buf[9];
- cmd_buf[9]=tmp;
- #endif
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 10;
- }
- break;
- case MS_TIME_SET:
- {
- // 时间设置
- struct rtc_time_t t_rtc;
- #ifndef MODE_LITTLE_ENDIAN
- u8 tmp=0;
- #endif
-
- memcpy(cmd_buf+2, buf+2, 8);
- #ifndef MODE_LITTLE_ENDIAN
- tmp = buf[2];
- buf[2]=buf[3];
- buf[3]=tmp;
- tmp = buf[8];
- buf[8]=buf[9];
- buf[9]=tmp;
- #endif
- memcpy(&t_rtc, buf+2, 8);
-
- // 设置系统时间
- if(sys_time_set(&t_rtc)!= 0)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_TIME;
- cmd_len = 3;
- break;
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 10;
- log_str_time(LOG_OPERATE,"工具设置时间",0,0);
- }
- break;
- case MS_FLAG_DIS:
- // 标志刷新
-
- // 得到所需上传标志
- cmd_buf[2] = 1;
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- break;
- case MS_BAT_MANAGE:
- // 电源管理
- if(buf[2] == 1)
- {
- bat_active(1);
- }
- if(buf[3] == 1)
- {
- bat_act_off(1);
- }
-
- memcpy(cmd_buf+2,buf+2,2);
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 4;
- break;
- case MS_CLEAR_SOE:
- // 清除事件
-
- if (buf[2]) //清除操作记录
- {
- soe_clear_opt();
- soe_record_opt(EV_CLEAR_OPE,0);
- }
- if (buf[3]) //清除事件记录
- {
- soe_clear_ev();
- soe_record_opt(EV_CLEAR_SOE,0);
- }
-
- memcpy(cmd_buf+2,buf+2,2);
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 4;
- break;
- case MS_SET_CODE:
- {
- // 设置密码
- u16 old_password,new_password;
-
- old_password = buf[2] | (buf[3]<<8);
- new_password = buf[4] | (buf[5]<<8);
-
- if((old_password!=tRunPara.wPassword) && (old_password!=PASS_WORD))
- {
- old_password=0;
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_OCODE; //旧密码错误
- cmd_len = 3;
- break;
- }
- if(new_password == INTER_PASSWORD)
- {
- new_password=0;
- old_password=0;
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_NCODE; //新密码无效
- cmd_len = 3;
- break;
- }
- //SavePassword(new_password);
- tRunPara.wPassword = ReadPassword();
- log_str_time(LOG_OPERATE,"工具设置用户密码",0,0);
-
- memcpy(cmd_buf+2,buf+2,4);
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 6;
- }
- break;
- case MS_KEEP_ALIVE:
- {
- alive_us0= ustimer_get_origin();
- cmd_len = 2;
- }
- break;
- case MS_BOARD_VERSION:
- { // 主板版本
-
- int flag,no=0;
- struct board_info *bi;
- bi = g_board_info;
- flag = buf[2];
-
- cmd_buf[2] =flag;
-
-
- switch(flag)
- {
- case 0:
- no = ENV_U_BOOT;
- break;
- case 1:
- no = ENV_KERNEL;
- break;
- case 2:
- no = ENV_ROOT_FS;
- break;
- case 3:
- sprintf(cmd_buf+3,"APP VERSION:SV%02d.%03d %s",
- VER_NUM/1000,VER_NUM%1000,VER_TIME);
- cmd_len = strlen(cmd_buf+3) + 3;
- break;
- #ifdef CPU_FUXI
- //fuxi 增加裸核版本信息
- case 4:
- sprintf(cmd_buf+3,"LuoHe VERSION:V%d.%02d %s CRC=%X",
- LuoHe_version.ver/100,LuoHe_version.ver%100,LuoHe_version.time,LuoHe_version.v_crc);
- cmd_len = strlen(cmd_buf+3) + 3;
- break;
- #endif
- default:
- cmd_len = 3;
- break;
- }
- if(flag < 3)
- {
- sprintf(cmd_buf+3,"%s",env_get_info(no));
-
- cmd_len = strlen(env_get_info(no)) + 3;
- }
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
-
- }
- break;
- case MS_DIDO_AUTO_TEST:
- { // 开入开出自动测试
- char tmpbuf[16];
-
- // 检查阶段
- if((g_maintain.state != MS_REQUEST) || (!bMaintain))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
- bMaintain_test = true;
- switch(buf[2])
- {
- case 0: //自动检测板卡测试
- #if defined(BSP_DTU3) || defined(BSP_DTU2) || defined(BSP_DTU5)
- tmpbuf[0] = 1;
- tmpbuf[1] = 3;
- tmpbuf[2] = 1;
- tmpbuf[3] = 4;
- tmpbuf[4] = 2;
- tmpbuf[5] = 5;
- tmpbuf[6] = 2;
- tmpbuf[7] = 6;
- dido_auto_test(tmpbuf,3);
- cmd_buf[6] = 3;
- #else
- tmpbuf[0] = 1; // DO板卡
- tmpbuf[1] = 1; // DI板卡
- dido_auto_test(tmpbuf,1);
- cmd_buf[6] = 1;
- #endif
- break;
- case 1: //开出板卡测试
- case 2: //开入板卡测试
- tmpbuf[0] = 1;
- tmpbuf[1] = 3;
- dido_auto_test(tmpbuf,1);
- cmd_buf[6] = 1;
- break;
- case 3: // 辅助板测试
- tmpbuf[0] = 5;
- tmpbuf[1] = 5;
- dido_auto_test(tmpbuf,1);
- cmd_buf[6] = 1;
- break;
- case 4: // 综合板测试
- tmpbuf[0] = 4;
- tmpbuf[1] = 6;
-
- dido_auto_test(tmpbuf,1);
- cmd_buf[6] = 1;
- break;
- case 5: //开入60板测试
- tmpbuf[0] = 1;
- tmpbuf[1] = 3;
- tmpbuf[2] = 2;
- tmpbuf[3] = 3;
- dido_auto_test(tmpbuf,2);
- cmd_buf[6] = 2;
- break;
- default:
- break;
- }
- bMaintain_test = false;
-
- cmd_buf[2] = 0;
-
- #if defined(BSP_DTU3) || defined(BSP_DTU2) || defined(BSP_DTU5)
- {
- extern struct rt_stat g_stat_do_delay;
- extern struct rt_stat g_stat_di_delay;
- if (g_stat_do_delay.max > 1000000)
- {
- cmd_buf[2] |= 0x01;
- }
- if (g_stat_di_delay.max > (20000000+20000000))
- {
- cmd_buf[2] |= 0x02;
- }
- }
- #endif
- cmd_buf[3] = 0;
- cmd_buf[4] = 0;
- cmd_buf[5] = 0;
- memcpy(cmd_buf+7,dido_buf,cmd_buf[6]*14);
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = cmd_buf[6]*14 + 4 + 3;
- }
- break;
- case MS_BOARD_DI:
- { // 板卡遥信
-
- int slot;
- slot = buf[2];
- cmd_buf[2] = slot;
-
- {
- int i;
- long flag1=0;
- long value1=0;
- long flag2=0;
- long value2=0;
- int di_num;
- di_num = equ_get_di_num(slot);
-
- for(i=0;i<di_num;i++)
- {
- if (i<32)
- flag1 |= (1<<i);
- else
- flag2 |= (1<<(i-32));
- if(dido_di_is_on(slot,i))
- {
- if (i<32)
- value1 |= (1<<i);
- else
- value2 |= (1<<(i-32));
- }
- else
- {
- if (i<32)
- value1 &= ~(1<<i);
- else
- value2 &= ~(1<<(i-32));
- }
- }
- cmd_buf[3] = flag1;
- cmd_buf[4] = (flag1 >> 8);
- cmd_buf[5] = (flag1 >> 16);
- cmd_buf[6] = (flag1 >> 24);
- cmd_buf[7] = (flag2 >> 0);
- cmd_buf[8] = (flag2 >> 8);
- cmd_buf[9] = (flag2 >> 16);
- cmd_buf[10] = (flag2 >> 24);
- cmd_buf[11] = value1;
- cmd_buf[12] = (value1 >> 8);
- cmd_buf[13] = (value1 >> 16);
- cmd_buf[14] = (value1 >> 24);
- cmd_buf[15] = (value2 >> 0);
- cmd_buf[16] = (value2 >> 8);
- cmd_buf[17] = (value2 >> 16);
- cmd_buf[18] = (value2 >> 24);
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 19;
- }
- break;
- case MS_RESOURCE_THAN:
- {
- memcpy(cmd_buf+2,buf+2,22);
- // 定值描述文件
- if(strcmp(buf+2,FILE_NAME_SET_DESC) == 0)
- {
- cmd_buf[22] = setdesc_contrast.version;
- cmd_buf[23] = (setdesc_contrast.version >> 8);
- cmd_buf[24] = (setdesc_contrast.version >> 16);
- cmd_buf[25] = (setdesc_contrast.version >> 24);
- cmd_buf[26] = setdesc_contrast.signature;
- cmd_buf[27] = (setdesc_contrast.signature >> 8);
- cmd_buf[28] = (setdesc_contrast.signature >> 16);
- cmd_buf[29] = (setdesc_contrast.signature >> 24);
- cmd_buf[30] = setdesc_contrast.length;
- cmd_buf[31] = (setdesc_contrast.length >> 8);
- cmd_buf[32] = (setdesc_contrast.length >> 16);
- cmd_buf[33] = (setdesc_contrast.length >> 24);
- cmd_buf[34] = setdesc_contrast.crc;
- cmd_buf[35] = (setdesc_contrast.crc>> 8);
- }
- // 资源描述文件
- else if(strcmp(buf+2,FILE_NAME_RSC) == 0)
- {
- cmd_buf[22] = rsc_contrast.version;
- cmd_buf[23] = (rsc_contrast.version >> 8);
- cmd_buf[24] = (rsc_contrast.version >> 16);
- cmd_buf[25] = (rsc_contrast.version >> 24);
- cmd_buf[26] = rsc_contrast.signature;
- cmd_buf[27] = (rsc_contrast.signature >> 8);
- cmd_buf[28] = (rsc_contrast.signature >> 16);
- cmd_buf[29] = (rsc_contrast.signature >> 24);
- cmd_buf[30] = rsc_contrast.length;
- cmd_buf[31] = (rsc_contrast.length >> 8);
- cmd_buf[32] = (rsc_contrast.length >> 16);
- cmd_buf[33] = (rsc_contrast.length >> 24);
- cmd_buf[34] = rsc_contrast.crc;
- cmd_buf[35] = (rsc_contrast.crc>> 8);
- }
- // 通道配置文件
- else if(strcmp(buf+2,FILE_NAME_EQU_CFG) == 0)
- {
- cmd_buf[22] = g_equ_contrast.version;
- cmd_buf[23] = (g_equ_contrast.version >> 8);
- cmd_buf[24] = (g_equ_contrast.version >> 16);
- cmd_buf[25] = (g_equ_contrast.version >> 24);
- cmd_buf[26] = g_equ_contrast.signature;
- cmd_buf[27] = (g_equ_contrast.signature >> 8);
- cmd_buf[28] = (g_equ_contrast.signature >> 16);
- cmd_buf[29] = (g_equ_contrast.signature >> 24);
- cmd_buf[30] = g_equ_contrast.length;
- cmd_buf[31] = (g_equ_contrast.length >> 8);
- cmd_buf[32] = (g_equ_contrast.length >> 16);
- cmd_buf[33] = (g_equ_contrast.length >> 24);
- cmd_buf[34] = g_equ_contrast.crc;
- cmd_buf[35] = (g_equ_contrast.crc>> 8);
- }
- else
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[22] = MAINTAIN_ERR_PHASE;
- cmd_len = 23;
- break;
- }
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 36;
- }
- break;
- case MS_BOARD_MEASURE:
- { // 板卡测量值刷新
- int slot,chn;
- slot = buf[2];
- cmd_buf[2] = slot;
- if((slot>=16)
- || !(g_board_info[slot].type== BOARD_TYPE_FTUKZ1
- ||(g_board_info[slot].type >= BOARD_TYPE_DFTU_KC00&&g_board_info[slot].type<BOARD_TYPE_DFTU_KC00+BOARD_TYPE_KZ_NUM)
- || g_board_info[slot].type == BOARD_TYPE_AC) //只有7到10板有零漂
- || (g_board_info[slot].type== BOARD_TYPE_FBDTU_MAIN)
- || (g_board_info[slot].type== BOARD_TYPE_FBDTU_MAIN1)
- )
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_NSLOT;
- cmd_len = 3;
- break;
- }
- chn = g_board_res[g_board_info[slot].type].ac_num;
- for(i=0;i<chn;i++)
- {
- long val,ang;
- int chn_index,j;
- chn_index = equ_get_ac_channel(slot,i);
- for(j=0;j<UI_NUM;j++)
- {
- if(g_ui[j].chn_index == chn_index)
- {
- break;
- }
- }
- if(chn_index >=0 && j != UI_NUM)
- {
- val=g_ui[j].e;
- ang=g_ui[j].p;
- }
- else
- {
- val=0;
- ang=0;
- }
- cmd_buf[3+i*8] = val;
- cmd_buf[3+i*8+1] = (val >> 8);
- cmd_buf[3+i*8+2] = (val >> 16);
- cmd_buf[3+i*8+3] = (val >> 24);
- cmd_buf[3+i*8+4] = ang;
- cmd_buf[3+i*8+5] = (ang >> 8);
- cmd_buf[3+i*8+6] = (ang >> 16);
- cmd_buf[3+i*8+7] = (ang >> 24);
- }
-
- {
- long val=0;
- val = g_sw_pub.ac_in[PUB_AC_IN_F1];
- cmd_buf[3+i*8+0] = val;
- cmd_buf[3+i*8+1] = (val >> 8);
- cmd_buf[3+i*8+2] = (val >> 16);
- cmd_buf[3+i*8+3] = (val >> 24);
- }
-
- cmd_len = 8*(chn+1);
- cmd_len += 3;
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
- case MS_BOARD_CALIBRATION:
- { // 板卡校准系数上传
-
- int board;
- s32 factor;
- struct ac_slot_factor asf;
- board = buf[2];
- cmd_buf[2] = board;
- if((board>=16)
- || !(g_board_info[board].type== BOARD_TYPE_FTUKZ1
- ||(g_board_info[board].type >= BOARD_TYPE_DFTU_KC00&&g_board_info[board].type<BOARD_TYPE_DFTU_KC00+BOARD_TYPE_KZ_NUM)
- || g_board_info[board].type == BOARD_TYPE_AC) //只有7到10板有零漂
- || (g_board_info[board].type== BOARD_TYPE_FBDTU_MAIN)
- || (g_board_info[board].type== BOARD_TYPE_FBDTU_MAIN1)
- )
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_NSLOT;
- cmd_len = 3;
- break;
- }
- if (factor_read(board,&asf) != 0)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_OTHER;
- cmd_len = 3;
- break;
- }
-
- for(i=0;i<EQU_SLOT_AC_CHN;i++)
- {
- factor = (s32)rt_round(asf.factor_e_c[i]*Q16_BASE); // 幅值系数
- cmd_buf[3+i*8+0] = factor;
- cmd_buf[3+i*8+1] = (factor>>8);
- cmd_buf[3+i*8+2] = (factor>>16);
- cmd_buf[3+i*8+3] = (factor>>24);
- factor = (s32)rt_round(asf.factor_p_c[i]*Q16_BASE); // 角度系数
- cmd_buf[3+i*8+4] = factor;
- cmd_buf[3+i*8+5] = (factor>>8);
- cmd_buf[3+i*8+6] = (factor>>16);
- cmd_buf[3+i*8+7] = (factor>>24);
- }
- cmd_len = 8*EQU_SLOT_AC_CHN;
- cmd_len += 3;
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
- case MS_DEFAULT_CALIBRATION:
- { // 恢复默认校准系数
-
- // 检查阶段
- if((g_maintain.state != MS_REQUEST) || (!bMaintain))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
- factor_restore_default();
- log_str_time(LOG_OPERATE,"工具恢复默认校准系数",0,0);
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- }
- break;
- case MS_SAMPLE_CALIBRATION:
- { // 整机采样校准
- int ret;
- // 检查阶段
- if((g_maintain.state != MS_REQUEST) ||(!bMaintain))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
-
- ret = sw_auto_adjust(-1);
- switch(ret)
- {
- case 0:
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- break;
-
- case -1:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_DATAL;
- cmd_len = 3;
- break;
-
- case -2:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_CHXS;
- cmd_len = 3;
- break;
-
- case -3:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_ANGLEL;
- cmd_len = 3;
- break;
-
- case -4:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_ANGLEH;
- cmd_len = 3;
- break;
-
- case -5:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_ANGLEXS;
- cmd_len = 3;
- break;
-
- case -6:
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_XSSAVE;
- cmd_len = 3;
- break;
- }
- if (ret == 0)
- {
- log_str_time(LOG_OPERATE,"工具交流校准成功",0,0);
- }
- else
- {
- log_str_time(LOG_OPERATE,"工具交流校准失败",0,0);
- }
- }
- break;
- case MS_DEFAULT:
- { // 恢复出厂设置
- // 检查阶段
- if((g_maintain.state != MS_REQUEST) || ((!bMaintain)))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
- init_default_equip_set(1);
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- log_str_time(LOG_OPERATE,"工具恢复出厂设置",0,0);
- }
- break;
-
- case MS_UZTEMP_MEASURE:
- { // 直流电压温度刷新
- long val;
-
- for(i=PUB_AC_IN_UZ1;i<PUB_AC_NUM_ALL;i++)
- {
- val=g_sw_pub.ac_in[i];
-
- if(_AbsL(val)<g_unit[g_pub_ac_desc[i].unit].zero && pRunSet->bTT_RET_ZERO)
- {
- val=0;
- }
- cmd_buf[2+(i-PUB_AC_IN_UZ1)*4] = val;
- cmd_buf[2+(i-PUB_AC_IN_UZ1)*4+1] = (val >> 8);
- cmd_buf[2+(i-PUB_AC_IN_UZ1)*4+2] = (val >> 16);
- cmd_buf[2+(i-PUB_AC_IN_UZ1)*4+3] = (val >> 24);
- }
- cmd_len = 4*3;
- cmd_len += 3;
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
- case MS_ADJUST_UZL:
- { // 直流校准
- // 检查阶段
- if((g_maintain.state != MS_REQUEST) ||(!bMaintain))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
- cmd_buf[2] = buf[2];
- if (cmd_buf[2] == 0x01)
- {
- sw_adjust_dc_0();
- }
- else if(cmd_buf[2] == 0x02)
- {
- sw_adjust_dc_1();
- }
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- log_str_time(LOG_OPERATE,"工具直流校准",0,0);
- }
- break;
- case MS_SAMPLE_TEST:
- {
- float val=0,base_v=-1.0,base_i=-1.0;
- u32 check_result[2]={0,0};
- float accuracy[6] = {0.1, -0.1, 0.2, -0.2, 0.01, -0.01};
- u8 sw;
- // 检查电压
- for(i=0;i<PUB_AC_NUM;i++)
- {
- if(g_ui[i].chn_index == CFG_ADC_CHANNEL_ZERO)
- {
- continue;
- }
- // 确定基准
- if(base_v < 0)
- {
- val = ((float)g_ui[i].e/65536-100.0) / 100.0*100;
- if ((val < accuracy[0]) && (val > accuracy[1]))
- {
- base_v = 100.0;
- }
- else
- {
- val = ((float)g_ui[i].e/65536-57.735) / 57.735*100;
- if ((val < accuracy[0]) && (val > accuracy[1]))
- {
- base_v = 57.735;
- }
- }
- }
- // 检查精度
- val = ((float)g_ui[i].e/65536-base_v) / base_v*100;
- if ((val > accuracy[0]) || (val < accuracy[1]))
- {
- check_result[0] |= 0x01; //电压超精度
- }
- }
- // 检查频率
- val = g_sw_pub.ac_in[PUB_AC_IN_F1];
- val = ((float)val/65536-50.0) / 100.0*100;
- if ((val > accuracy[4]) || (val < accuracy[5]))
- {
- check_result[0] |= 0x02; //频率超精度
- }
-
- for (sw=0; sw<g_sw_num; sw++)
- {
- float dat=0;
- int cnt;
-
- // 检查电流
- cnt = 0;
- for(i=0;i<SW_AC_NUM;i++)
- {
- if(g_ui[UI_SW_INDEX(sw,i)].chn_index == CFG_ADC_CHANNEL_ZERO)
- {
- cnt++;
- continue;
- }
- // 确定基准
- if(base_i < 0)
- {
- val = ((float)g_ui[UI_SW_INDEX(sw,i)].e/65536-5.0) / 5.0*100;
- if ((val < accuracy[0]) && (val > accuracy[1]))
- {
- base_i = 5.0;
- }
- else
- {
- val = ((float)g_ui[UI_SW_INDEX(sw,i)].e/65536-3.0) / 3.0*100;
- if ((val < accuracy[0]) && (val > accuracy[1]))
- {
- base_i = 3.0;
- }
- }
- rt_printf("base_i=%f.\r\n",base_i);
- }
-
- val = ((float)g_ui[UI_SW_INDEX(sw,i)].e/65536-base_i) / base_i*100;
- if ((val > accuracy[0]) || (val < accuracy[1]))
- {
- // 0x01,开关电流超精度
- check_result[1] |= 0x01<<(sw*2);
- break;
- }
- }
- // 整个开关没有配置,置0x03标志
- if(cnt == SW_AC_NUM)
- {
- check_result[1] |= 0x03<<(sw*2);
- continue;
- }
-
- // 如果精度有问题,不再检测P、Q.
- if(i != SW_AC_NUM)
- {
- continue;
- }
- // 开始检查功率
- dat = base_v*base_i*3;
- if(g_ui[PUB_AC_UA1].chn_index == CFG_ADC_CHANNEL_ZERO)
- {
- // 二表法
- dat /= 1.732;
- }
- // 检查P
- val = ((float)g_sw[sw].ac_in[SW_AC_IN_P]/65536-dat) / dat*100;
- if ((val > accuracy[2]) || (val < accuracy[3]))
- {
- // 0x02,开关功率超精度
- check_result[1] |= 0x02<<(sw*2);
- }
- // 检查Q
- val = ((float)g_sw[sw].ac_in[SW_AC_IN_Q]/65536-0.0) / dat*100;
- if ((val > accuracy[2]) || (val < accuracy[3]))
- {
- // 0x02,开关功率超精度
- check_result[1] |= 0x02<<(sw*2);
- }
- }
-
- cmd_buf[2+0] = check_result[0];
- cmd_buf[2+1] = (check_result[0] >> 8);
- cmd_buf[2+2] = (check_result[0] >> 16);
- cmd_buf[2+3] = (check_result[0] >> 24);
- cmd_buf[2+4] = check_result[1];
- cmd_buf[2+5] = (check_result[1] >> 8);
- cmd_buf[2+6] = (check_result[1] >> 16);
- cmd_buf[2+7] = (check_result[1] >> 24);
- cmd_len = 10;
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
- case MS_KRKC_TEST:
- { // 开入开出自动测试
- extern struct rt_stat g_stat_do_delay;
- extern struct rt_stat g_stat_di_delay;
- u8 buf_test[24];
- // 检查阶段
- if((g_maintain.state != MS_REQUEST) || (!bMaintain))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
- memset(buf_test,0,sizeof(buf_test));
- memcpy(buf_test,buf+3,buf[2]*2);
- dido_auto_test(buf_test,buf[2]);
- cmd_buf[2] = 0;
- if (g_stat_do_delay.max > 1000000)
- {
- cmd_buf[2] |= 0x01;
- }
- if (g_stat_di_delay.max > (5000000+20000000))
- {
- cmd_buf[2] |= 0x02;
- }
-
- cmd_buf[3] = 0;
- cmd_buf[4] = 0;
- cmd_buf[5] = 0;
- cmd_buf[6] = buf[2];
- memcpy(cmd_buf+7,dido_buf,42);
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = buf[2]*14 + 4 + 3;
- }
- break;
-
- case MS_LCD_TEST:
- { // LCD测试
- // 检查阶段
- if((g_maintain.state != MS_REQUEST) ||(!bMaintain))
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_PHASE;
- cmd_len = 3;
- break;
- }
- add_led_test(TEST_LED);
- add_led_test(TEST_LCD);
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- }
- break;
- case MS_RESET_TEST:
- {
- //复位
- cmd_buf[2] = buf[2];
- switch (cmd_buf[2])
- {
- case 0x1:
- rt_printf("装置复位\r\n");
- watchdog_reset_cpu(2); //装置复位
- break;
- case 0x2:
- rt_printf("子板复位\r\n");
- break;
- case 0x4:
- rt_printf("应用复位\r\n");
- //env_restart(); //主板复位
- watchdog_reset_cpu(2); //装置复位
- break;
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- }
- break;
- case MS_CFGINF:
- {
- // 配置信息查看
- cmd_buf[2] = 6;
- sprintf(cmd_buf+3+24*0,"装置资源文件:%04XH",g_crc_rsc);
- sprintf(cmd_buf+3+24*1,"板卡资源文件:%04XH",g_crc_brd_res);
- sprintf(cmd_buf+3+24*2,"通道配置文件:%04XH",g_crc_equ_cfg);
- sprintf(cmd_buf+3+24*3,"转发点表文件:%04XH",g_crc_rectable);
- sprintf(cmd_buf+3+24*4,"定值描述文件:%04XH",g_crc_set_desc);
- sprintf(cmd_buf+3+24*5,"定值数据文件:%04XH",g_crc_set_data);
- cmd_len = 3 + 24*6;
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
- case MS_ERRINF:
- {
- // 故障信息查看
- u8 num=0;
- if(rt_err_count())
- {
- cmd_buf[2] = rt_err_count();
- for (i=0; i<ERR_CODE_NUM; i++)
- {
- if (rt_err_test(i))
- {
- num++;
- if (num > 9)
- {
- break;
- }
- sprintf(cmd_buf+3+(num-1)*20,rt_err_msg(i));
- }
- }
- }
- else
- {
- cmd_buf[2] = 0;
- }
- cmd_len = 3 + 20*10;
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
- case MS_GETIP:
- {
- // 获取网口及对应IP
- int net;
- char ipbuf[32];
- cmd_buf[2] = 0;
- for(net=0; net<g_net_num; net++)
- {
- // 如果接口不正常,不初始化
- if(rt_if_ip_get(net,ipbuf) != 0)
- {
- cmd_buf[3+net*5] = 0;
- continue;
- }
-
- cmd_buf[2] = net+1;
- cmd_buf[3+net*5] = 1;
- Swap_32(ipbuf);
- memcpy(cmd_buf+4+net*5,ipbuf, 4);
- }
- cmd_len = 3 + 5*IEC104_TOTAL_SOCKETS;
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
-
- case MS_GET_GPRS_INFO:
- {
- int i,num;
-
- cmd_buf[2] = buf[2];
- if(cmd_buf[2] == 1)
- {
- // 发送查询子命令
- IEC101_PH_GprsInfo();
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 3;
- }
- else if(cmd_buf[2] == 2)
- {
- // 接收查询子命令1
- gprs_get_info();
- num = g_gprs_info_num<10 ? g_gprs_info_num : 10;
- cmd_buf[3] = num;
- for(i=0; i<num; i++)
- {
- strcpy(cmd_buf+ 4 + i*20,strGprsInf[i]);
- }
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 4 + num*20;
- }
- else if(cmd_buf[2] == 3)
- {
- //接收查询子命令2
- num = g_gprs_info_num<10 ? 0 : (g_gprs_info_num -10);
- cmd_buf[3] = num;
- for(i=0; i<num; i++)
- {
- strcpy(cmd_buf+ 4 + i*20,strGprsInf[i+10]);
- }
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 4 + num*20;
- }
- else
- {
- // 不支持的子命令
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[3] = MAINTAIN_ERR_OTHER;
- cmd_len = 4;
- }
- }
- break;
- case MS_FZXS_UD:
- {
- int board;
- s32 factor;
-
- struct ac_slot_factor asf;
- cmd_buf[2] = buf[2];
- board = buf[3];
- cmd_buf[3] = board;
- if((board>=16)
- || !(g_board_info[board].type== BOARD_TYPE_FTUKZ1
- ||(g_board_info[board].type >= BOARD_TYPE_DFTU_KC00&&g_board_info[board].type<BOARD_TYPE_DFTU_KC00+BOARD_TYPE_KZ_NUM)
- || g_board_info[board].type == BOARD_TYPE_AC) //只有7到10板有零漂
- || (g_board_info[board].type== BOARD_TYPE_FBDTU_MAIN)
- || (g_board_info[board].type== BOARD_TYPE_FBDTU_MAIN1)
- )
-
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[4] = MAINTAIN_ERR_NSLOT;
- cmd_len = 5;
- break;
- }
- if (factor_read(board,&asf) != 0)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[4] = MAINTAIN_ERR_OTHER;
- cmd_len = 5;
- break;
- }
- if(cmd_buf[2] == 1) //上传
- {
- for(i=0;i<EQU_SLOT_AC_CHN;i++)
- {
- factor = (s32)rt_round(asf.factor_e_c[i]*Q16_BASE); // 幅值系数
- cmd_buf[4+i*8+0] = factor;
- cmd_buf[4+i*8+1] = (factor>>8);
- cmd_buf[4+i*8+2] = (factor>>16);
- cmd_buf[4+i*8+3] = (factor>>24);
- factor = (s32)rt_round(asf.factor_p_c[i]*Q16_BASE); // 角度系数
- cmd_buf[4+i*8+4] = factor;
- cmd_buf[4+i*8+5] = (factor>>8);
- cmd_buf[4+i*8+6] = (factor>>16);
- cmd_buf[4+i*8+7] = (factor>>24);
- }
- cmd_len = 8*EQU_SLOT_AC_CHN;
- cmd_len += 4;
- }
- else if(cmd_buf[2] == 2)//下载
- {
- union
- {
- float ff;
- u8 bb[4];
- }ff;
- for(i=0;i<EQU_SLOT_AC_CHN;i++)
- {
- CopySwap(ff.bb,&buf[4+i*8+0],4,false);
- asf.factor_e_c[i] = ff.ff / Q16_BASE;
-
- CopySwap(ff.bb,&buf[4+i*8+4],4,false);
- asf.factor_p_c[i] = ff.ff / Q16_BASE;
- }
- if (factor_write_board(board, &asf) != 0)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[4] = MAINTAIN_ERR_OTHER;
- cmd_len = 5;
- break;
- }
- cmd_len = 4;
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
- case MS_AC_CFG:
- {
- int i,j;
- cmd_buf[2] = buf[2];
- for(i=0; i<AC_TEST_BOARD_NUM; i++)
- {
- if(g_ac_test_board[i].type == cmd_buf[2])
- {
- break;
- }
- }
- if (i == AC_TEST_BOARD_NUM)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[4] = MAINTAIN_ERR_NSLOT;
- cmd_len = 5;
- break;
- }
- else
- {
- char name[10];
- for (j=0; j<g_ac_test_board[i].num; j++)
- {
- strncpy(name,g_ac_test_board[i].data[j].name,4);
- memcpy(&cmd_buf[3+8*j+0], name, 4);
- cmd_buf[3+8*j+4] = g_ac_test_board[i].data[j].normal_data;
- cmd_buf[3+8*j+5] = g_ac_test_board[i].data[j].normal_data>>8;
- cmd_buf[3+8*j+6] = g_ac_test_board[i].data[j].normal_angle;
- cmd_buf[3+8*j+7] = g_ac_test_board[i].data[j].normal_angle>>8;
- }
- }
- cmd_len = 8*g_ac_test_board[i].num;
- cmd_len += 4;
- }
- break;
- case MS_DC_FACTOR:
- {
- s32 factor;
- u8 *p;
-
- cmd_buf[2] = buf[2];
- cmd_len = 3;
-
- if(cmd_buf[2] == 1) //上传
- {
-
- for(i=0; i<DC_NUM; i++)
- {
- factor = (s32)rt_round(g_dcfactor_save[i].dc_h * Q16_BASE); // 直流H系数
- cmd_buf[3+i*8+0] = factor;
- cmd_buf[3+i*8+1] = (factor>>8);
- cmd_buf[3+i*8+2] = (factor>>16);
- cmd_buf[3+i*8+3] = (factor>>24);
- factor = (s32)rt_round(g_dcfactor_save[i].dc_l * Q16_BASE); // 直流L系数
- cmd_buf[3+i*8+4] = factor;
- cmd_buf[3+i*8+5] = (factor>>8);
- cmd_buf[3+i*8+6] = (factor>>16);
- cmd_buf[3+i*8+7] = (factor>>24);
- }
- cmd_buf[3+DC_NUM*8+0] = g_dcfactor_save[0].adjust_set;
- cmd_buf[3+DC_NUM*8+1] = g_dcfactor_save[1].adjust_set;
- memcpy (&cmd_buf[3+DC_NUM*8+2], g_auth_id, 8); //装置flash_id
- memcpy (&cmd_buf[3+DC_NUM*8+2+8], g_dcfactor_id, 8); //存储flash_id
- // 上传校准温度
- p = (u8*)&g_dc_temp;
- cmd_buf[3+DC_NUM*8+2+16] = p[3];
- cmd_buf[3+DC_NUM*8+2+17] = p[2];
- cmd_buf[3+DC_NUM*8+2+18] = p[1];
- cmd_buf[3+DC_NUM*8+2+19] = p[0];
-
- cmd_len = 8*2 + 2 + 8*2 + 4;
- cmd_len += 3;
- cmd_buf[1] |= MAINTAIN_ACK;
- break;
- }
- else if(cmd_buf[2] == 2)//下载
- {
- union
- {
- float ff;
- u8 bb[4];
- }ff;
- float dc_h, dc_l;
- u8 id[8];
- struct dc_factor_save factor[2];
- memcpy(factor, g_dcfactor_save, sizeof(g_dcfactor_save));
- for(i=0; i<DC_NUM; i++)
- {
- CopySwap(ff.bb,&buf[3+i*8+0],4,false);
- dc_h = ff.ff / Q16_BASE;
- CopySwap(ff.bb,&buf[3+i*8+4],4,false);
- dc_l = ff.ff / Q16_BASE;
- if (factor[i].dc_h != dc_h)
- {
- factor[i].dc_h = dc_h;
- factor[i].adjust_set = DC_SETDATA;
- }
- if (factor[i].dc_l!= dc_l)
- {
- factor[i].dc_l = dc_l;
- factor[i].adjust_set = DC_SETDATA;
- }
- }
- memcpy(id, g_auth_id, 8);
- if(dcfactor_createfile(&id[0], (u8 *)&factor) != 0)
- {
- rt_printf("直流系数文件保存失败.\r\n");
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[3] = MAINTAIN_ERR_OTHER;
- cmd_len = 4;
- break;
- }
-
- log_str_time(LOG_OPERATE,"工具直流系数修改",0,0);
-
- cmd_len = 3;
- cmd_buf[1] |= MAINTAIN_ACK;
- break;
-
- }
- else if(cmd_buf[2] == 3) // 恢复默认值
- {
-
- if(dcfactor_restore_default() != 0)
- {
- rt_printf("直流系数恢复默认值失败.\r\n");
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[3] = MAINTAIN_ERR_OTHER;
- cmd_len = 4;
- break;
- }
- cmd_len = 3;
- cmd_buf[1] |= MAINTAIN_ACK;
- break;
- }
-
- // 不支持的直流系数命令
- rt_printf("不支持的直流系数命令:cmd_buf[2]=%d.\r\n",cmd_buf[2]);
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[3] = MAINTAIN_ERR_OTHER;
- break;
- }
- break;
- case MS_WAVE_OK:
- {
- if (rcd_check_ok(SWITCH_NUM_MAX) != 1)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_OTHER;
- cmd_len = 3;
- break;
- }
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- }
- break;
- case MS_FILE_ISUPDATE:
- {
- int file_index=0;
- u32 file_time=0;
- u16 file_type=0;
- // 复制文件名
- memcpy(cmd_buf+2,buf+2,20);
- // 检查文件名
- file_index = file_check(buf+2, ATTR_UP);
-
- if(file_index < 0)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[22] = MAINTAIN_ERR_NAME;
- cmd_len = 23;
- break;
- }
- // 获取文件当前时间
- file_time = file_change_time(file_index);
- if ((short)file_time == -1)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[22] = MAINTAIN_ERR_NAME;
- cmd_len = 23;
- break;
- }
- // 如果是首次上传,暂存文件时间
- if (buf[22])
- {
- g_file_time[file_index].st_mtime = file_time;
- if (file_type == FILETYPE_LOG_APP)
- {
- file_index = log_file_check(buf+2);
- g_logfile_update[file_index] = 0;
- }
- cmd_buf[22] = 0;
- }
- else
- {
- // 非首次上传,比对文件时间,并上传文件是否修改状态
- cmd_buf[22] = 0;
- if(g_file_time[file_index].st_mtime != file_time)
- {
- cmd_buf[22] = 1;
- }
- else if (file_type == FILETYPE_LOG_APP)
- {
- file_index = log_file_check(buf+2);
- if(g_logfile_update[file_index])
- {
- cmd_buf[22] = 1;
- }
- }
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 23;
- }
- break;
- case MS_COMM_TEST:
- {
- u8 j;
-
- // 启动测试
- uart_test_begin = 1;
- // 串口测试
- uart_232_485_test(&buf[2]);
- // 停止测试
- uart_test_begin = 0;
- memset(&cmd_buf[2], 0, 6);
- // RS232_1, RS232_2
- cmd_buf[2] = 0x7;
- for (j=0; j<2; j++)
- {
- if (uart_test_flag[j][0])
- {
- cmd_buf[3] |= 0x1<<j;
- }
- if (uart_test_flag[j][1])
- {
- cmd_buf[4] |= 0x1<<j;
- }
- }
- cmd_buf[3] |= 0x1<<2; // 串口3 自动满足
- cmd_buf[4] |= 0x1<<2;
- // RS485_1,RS485_2,RS485_3
- cmd_buf[5] = 0x7;
- for (j=0; j<3; j++)
- {
- if (uart_test_flag[j+3][0])
- {
- cmd_buf[6] |= 0x1<<j;
- }
- if (uart_test_flag[j+3][1])
- {
- cmd_buf[7] |= 0x1<<j;
- }
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 8;
- }
- break;
- case MS_INSTU:
- {
- int i;
- u32 data;
- cmd_buf[2] = INSTU_NUM;
- for(i=0; i<INSTU_NUM; i++)
- {
- data = *g_instu_desc[i].fstdata;
- cmd_buf[3+i*4] = data;
- cmd_buf[4+i*4] = (data >> 8);
- cmd_buf[5+i*4] = (data >> 16);
- cmd_buf[6+i*4] = (data >> 24);
- }
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = INSTU_NUM*4 + 3;
- }
- break;
- case MS_RCD_NAME:
- {
- static char name[9*64];
- int i=0, j;
- struct stat s;
- static int sum=0, num=0, cur=0;
- // 首次查询
- if (buf[2] == 0)
- {
- memset (name, 0, 9*64);
-
- //检查文件是否存在
- if(sys_newstat("/tmp/rec_wave.dat",&s)==0)
- {
- memcpy(name, "/tmp/rec_wave.dat", strlen("/tmp/rec_wave.dat"));
- i=1;
- }
- num = rcd_get_list_name();
- if(num > 8)
- {
- num = 8;
- }
- for (j=0; j<num; j++)
- {
- memcpy(&name[(i+j)*64], "/app/data/rec_wave/", strlen("/app/data/rec_wave/"));
- memcpy(&name[(i+j)*64+strlen("/app/data/rec_wave/")], wave_name[j],35);
- }
- if (num)
- {
- num += i;
- sum = num;
- }
- else
- {
- num = 0;
- sum = i;
- }
- cur=0;
- }
- else
- {
- cur+=3;
- }
- // 总条数
- cmd_buf[2] = sum;
- if (num > 3)
- {
- cmd_buf[3] = 1;
- memcpy(cmd_buf+4, &name[cur*64], 3*64);
- num -= 3;
- cmd_len += 3*64;
- }
- else
- {
- cmd_buf[3] = 0;
- memcpy(cmd_buf+4, &name[cur*64], (sum-cur)*64);
- cmd_len += (sum-cur)*64;
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len += 4;
- }
- break;
- case MS_RMT_PAIR:
- { // 遥控器配对
-
- memcpy(cmd_buf+2,buf+2,2);
-
- if (cmd_buf[2])
- {
- add_rmt_pair(RMT_PAIR);
- log_str_time(LOG_OPERATE,"工具遥控器配对",0,0);
- }
- if (cmd_buf[3])
- {
- add_rmt_pair(RMT_CLRPAIR);
- log_str_time(LOG_OPERATE,"工具遥控器配对清除",0,0);
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 4;
- }
- break;
- case MS_SET_MTPWD:
- {
- // 设置密码
- u8 pwd[16];
- int i, check=0, str=0, data=0;
- // 此处需将密码解密
- for (i=0; i<16; i++)
- {
- pwd[i] = ~buf[2+i];
- }
- // 校验旧密码
- check = memcmp(pwd, mt_pwd,16);
- if (check != 0)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_OCODE;
- cmd_len = 3;
- // break;
- }
- // 此处需将密码解密
- for (i=0; i<16; i++)
- {
- pwd[i] = ~buf[18+i];
- }
- // 校验新密码是否符合规则
- for (i=0; i<16; i++)
- {
- // 密码中有数字
- if ((pwd[i] >= 0x30) && (pwd[i] < 0x3A))
- {
- data = 1;
- }
- else
- {
- str = 1;
- }
- }
- if (!data || !str)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_NCODE; //新密码无效
- cmd_len = 3;
- break;
- }
- // 更新密码
- memcpy (&mt_pwd, pwd, 16);
- // 保存加密后的新密码
- _maintain_pwd_createfile(&buf[18]);
-
- log_str_time(LOG_OPERATE,"工具设置维护工具密码",0,0);
-
- memcpy(cmd_buf+2,buf+2,32);
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 34;
- }
- break;
- case MS_PASSWORD:
- // 不支持旧密码认证,直接否定确认
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_CODE;
- cmd_len = 3;
- break;
-
- case MS_MT_PWD:
- {
- int i, check=0;
- u8 pwd[16];
- // 此处需将密码解密
- for (i=0; i<16; i++)
- {
- pwd[i] = ~buf[2+i];
- }
- check = memcmp(pwd,mt_pwd,16);
- if (check != 0)
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_CODE;
- cmd_len = 3;
- //print_mem("pwd0:",mt_pwd,16);
- //print_mem("pwd1:",pwd,16);
- break;
- }
- // 密码校验通过,打开相关的维护端口
- {
- char log[128];
- sprintf(log,"%s登录!", &buf[2+16]);
- log_str_time(LOG_OPERATE,log,0,0);
- rt_printf("%s\r\n",log);
- }
- if(g_mt_rs232 == 0)
- {
- net_debug_init();
- open_inet_port();
- }
-
- memcpy(cmd_buf+2,buf+2,16);
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 18;
- }
- break;
- case MS_CLOSE_PORT:
- {
- // 关闭端口服务,仅保留6008维护端口
- net_debug_exit();
- close_inet_port();
- rt_printf("网络维护端口关闭.\r\n");
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- }
- break;
-
- case MS_AUTH:
- {
- cmd_buf[2] = buf[2];
-
- // 上传ID
- if(cmd_buf[2] == 1)
- {
- auth_get_encrypt_id(&cmd_buf[3],32);
- print_mem(" id:",&cmd_buf[3],24);
- cmd_len = 3 + 32;
- }
- // 下载license
- else if(cmd_buf[2] == 2)
- {
- auth_save(&buf[3],AUTH_LICENSE_LEN);
- cmd_len = 3;
- }
- // 从授权机获取授权
- else if(cmd_buf[2] == 3)
- {
- int ret;
- ret = auth_license(&buf[3],(struct rtc_time_t *)&buf[3+32],&cmd_buf[3]);
- if(ret != 0)
- {
- rt_printf("auth_license error:ret=%d.\r\n",ret);
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_OTHER;
- cmd_len = 3;
- break;
- }
- cmd_len = 3 + AUTH_LICENSE_LEN;
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
-
- case MS_YD_REFRESH:
- {
- u16 begin,num;
- // 将子命令和开始值复制到返回命令中
- memcpy(&cmd_buf[2],&buf[2],3);
- // 得到开始值和个数
- Swap_16_memcpy((BYTE*)&begin,&buf[3]); // modify for am335x xxxxxx
- Swap_16_memcpy((BYTE*)&num,&buf[5]); // modify for am335x xxxxxx
- // 遥信
- if(cmd_buf[2] == 1)
- {
- num = tbl_yd_yx(begin,num,cmd_buf+7);
- if(num > 0)
- {
- Swap_16_memcpy(&cmd_buf[5],(BYTE*)&num); // modify for am335x xxxxxx
- cmd_len = 3 + 4 + (num+3)/4;
- }
- else
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_OTHER;
- cmd_len = 3;
- break;
- }
- }
- // 遥测
- else if(cmd_buf[2] == 2)
- {
- num = tbl_yd_yc(begin,num,cmd_buf+7);
- if(num > 0)
- {
- Swap_16_memcpy(&cmd_buf[5],(BYTE*)&num); // modify for am335x xxxxxx
- cmd_len = 3 + 4 + num*9;
- }
- else
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_OTHER;
- cmd_len = 3;
- break;
- }
- }
- // 电度
- else if(cmd_buf[2] == 3)
- {
- num = tbl_yd_dd(begin,num,cmd_buf+7);
- if(num > 0)
- {
- Swap_16_memcpy(&cmd_buf[5],(BYTE*)&num); // modify for am335x xxxxxx
- cmd_len = 3 + 4 + num*9;
- }
- else
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_OTHER;
- cmd_len = 3;
- break;
- }
- }
- else
- {
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_OTHER;
- cmd_len = 3;
- break;
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
-
- case MS_FACTORY_SETUP:
- {
- u8 mac[6];
-
- cmd_buf[2] = buf[2];
-
- // 装置ID码
- if(buf[2] == 1)
- {
- if(strlen(&buf[3]) == 24)
- {
- env_setenv("pid", &buf[3]);
- rt_printf("pid=%s\r\n",&buf[3]);
- cmd_len = 3;
- }
- else
- {
- cmd_buf[3] = MAINTAIN_ERR_FORMAT;
- cmd_len = 4;
- cmd_buf[1] |= MAINTAIN_NAK;
- break;
- }
- }
- // 网络1MAC
- else if(buf[2] == 2)
- {
- if(rt_if_sz2mac(&buf[3],mac) == 0)
- {
- env_setenv("net1mac", &buf[3]);
- rt_printf("net1mac=%s\r\n",&buf[3]);
- cmd_len = 3;
- }
- else
- {
- cmd_buf[3] = MAINTAIN_ERR_FORMAT;
- cmd_len = 4;
- cmd_buf[1] |= MAINTAIN_NAK;
- break;
- }
- }
- // 网络2MAC
- else if(buf[2] == 3)
- {
- if(rt_if_sz2mac(&buf[3],mac) == 0)
- {
- env_setenv("net2mac", &buf[3]);
- rt_printf("net2mac=%s\r\n",&buf[3]);
- cmd_len = 3;
- }
- else
- {
- cmd_buf[3] = MAINTAIN_ERR_FORMAT;
- cmd_len = 4;
- cmd_buf[1] |= MAINTAIN_NAK;
- break;
- }
- }
-
- // 发送ACK
- cmd_buf[1] |= MAINTAIN_ACK;
- }
- break;
- #if defined(CPU_AM335X)
- case MS_APP_BAK_START:
- rt_printf("maintain: 启动app分区备份.\r\n");
- //下面备份工作需要大约5秒,耗时有点长,先喂狗
- watchdog_feed_mainloop();
- //1. 删除临时文件/tmp/backup_flag
- rt_file_del("/tmp/backup_flag");
- //2. 调用启动备份脚本(函数)
- call_usermodehelper("/usr/sbin/app_backup.sh", cmd_ls, NULL, UMH_WAIT_PROC);
- watchdog_feed_mainloop();
- //3. 回复
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_len = 2;
- break;
- case MS_APP_BAK_RESULT:
- //1. 检测临时文件/tmp/backup_flag是否存在?
- // 打开文件
- pfile = rt_file_open("/tmp/backup_flag",O_RDONLY ,0);
- if(IS_ERR(pfile))
- {
- rt_printf("maintain: 临时文件/tmp/backup_flag不存在.\r\n");
-
- //1.1 不存在
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_buf[2] = 2;//备份中
- cmd_len = 3;
- break;
- }
-
- // 得到文件长度
- rt_file_llseek(pfile,0,SEEK_END);
- llen = pfile->f_pos;
- rt_file_llseek(pfile,0,SEEK_SET);
-
- // 分配内存
- lbuf = rt_malloc(llen);
- if((lbuf) == NULL)
- {
- rt_file_close(pfile,0);
- break;
- }
-
- // 读出内容
- pos = 0;
- if(rt_file_read(pfile,lbuf,llen,&pos) != llen)
- {
- rt_file_close(pfile,0);
- rt_free(lbuf);
- break;
- }
-
- // 关闭文件
- rt_file_close(pfile,0);
-
- result = lbuf[0];
- rt_free(lbuf);
- //1.2 存在
- if(result == '1')
- {
- rt_printf("maintain: app分区备份成功.\r\n");
-
- //2 读取文件/tmp/backup_flag内容,成功值是1,备份失败值是 0
- //成功
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_buf[2] = 1;//成功
- cmd_len = 3;
- }
- else
- {
- rt_printf("maintain: app分区备份失败.\r\n");
-
- //失败
- cmd_buf[1] |= MAINTAIN_ACK;
- cmd_buf[2] = 0;//失败
- cmd_len = 3;
- }
- break;
- #endif
-
- default:
- rt_printf("Maintain_Manage:不支持的命令(%d)\r\n",buf[1]);
- _maintain_state_reset();
- cmd_buf[1] |= MAINTAIN_NAK;
- cmd_buf[2] = MAINTAIN_ERR_CMD;
- cmd_len = 3;
- break;
- }
- return cmd_len;
- }
- void Maintain_uart_send(void)
- {
- struct maintain_def *pt = &g_mtbuf;
- int len;
- u8 buf_tx[256];
- memset(buf_tx,0,sizeof(buf_tx));
- pt->bData = false;
- len = pt->recvbuf[1] + 6; //68 L L 68 + data + crc + END
-
- memcpy(buf_tx,pt->recvbuf,len-1);
-
- buf_tx[len] = 0x80;
- buf_tx[len] |= (PDA_BOARD<<3);
- buf_tx[len] |= MAIN_BOARD;
-
- Add_Uart_Frame(PDA_BOARD,len,buf_tx);
- }
- void Maintain_Board_Recv(int len,BYTE *para)
- {
- struct maintain_def *pt = &g_mtbuf;
- if(pt->bData)
- {
- _maintain_recv_rst(pt);
- return;
- }
- pt->nRecvLenth = len;
- memcpy(pt->recvbuf,para,len);
- pt->bData=true;
- pt->hmi_mode=true;
- //print_mem("PCRX:",g_mtbuf.recvbuf,len);
- mainloop_wakeup();
-
- }
- /**************************************************************************
- 函数名称:_maintain_recv
- 函数版本:1.00
- 作者:
- 创建日期:2013.03.29
- 函数功能说明:6008端口数据接受判断,只判断是否满足报文格式
- 输入参数:
- 输出参数:有完整帧接受,返回1,否则返回 0
- 返回值:
- 更新信息:
- 更新日志1:
- 日期:
- 修改者:
- 修改内容:
- 修改原因:
- ***************************************************************************/
- void Maintain_Recv(u8 byRevData)
- {
- struct maintain_def *pt = &g_mtbuf;
- pt->recvbuf[pt->nRecvCounter++]=byRevData;
- // pt->dTRecvPiece=dTCounter; //接收字符时的时刻,在大循环中判断,是否需要复归
- switch(pt->nTypeCounter)
- {
- case 0:
- if(byRevData==0x68)
- {
- pt->nTypeCounter=1;
- }
- else if(byRevData==0x10)
- {
- pt->nTypeCounter=4;
- pt->nRecvLenth=2;
- }
- else
- {
- _maintain_recv_rst(pt);
- }
- break;
-
- case 1:
- pt->nTypeCounter=2;
- pt->nRecvLenth=byRevData; //长帧长度
- if(pt->nRecvLenth>IEC101_RECVBUF_MAX)
- {
- _maintain_recv_rst(pt);
- }
- break;
-
- case 2:
- if(pt->nRecvLenth==byRevData)
- {
- pt->nTypeCounter=3;
- }
- else
- {
- _maintain_recv_rst(pt);
- }
- break;
-
- case 3:
- if(byRevData==0x68)
- {
- pt->nTypeCounter=4;
- }
- else
- {
- _maintain_recv_rst(pt);
- }
- break;
-
- case 4: //控制域
- pt->sum=byRevData;
- pt->nTypeCounter=5;
- break;
-
- case 5: //目标地址
- pt->sum+=byRevData;
- pt->nRecvCnt=0;
- pt->nTypeCounter=6;
- if(pt->nRecvLenth==2)//短帧
- pt->nTypeCounter=7;
- break;
-
- case 6: //有效数据 //有效数据
- if(++pt->nRecvCnt>=pt->nRecvLenth-2)
- {
- pt->nTypeCounter=7;
- }
- pt->sum+=byRevData;
- break;
-
- case 7: //校验和
- pt->recvsum=byRevData;
- pt->nTypeCounter=8;
- break;
-
- case 8: //结束符
- _maintain_recv_rst(pt);
- if(byRevData==0x16) //校验结束字符,报文接收完毕,
- {
- if(pt->sum!=pt->recvsum)
- {
- return;
- }
- else
- {
- pt->bData=true;
- // 唤醒主循环
- mainloop_wakeup();
- }
- return ;
- }
- break;
-
- default:
- _maintain_recv_rst(pt);
- break;
- } //类型校验结束
- return ;
- }
- /******************************************************************************
- 函数名称: filelist_getlen
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2015-2-13
- 函数说明: 获取文件列表长度
- 参数说明:
- fname:文件列表名
- 返回值: 文件列表长度
- 修改记录:
- */
- static unsigned int filelist_getlen(struct file_item *file_list)
- {
- int len = 0;
- int i = 0;
- int fd = 0;
- char file_name[64];
-
- //遍历文件列表
- for(i=0;i<FILE_LIST_NUM;i++)
- {
- memset(file_name, 0, 64);
- // 组合文件路径和文件名
- sprintf(file_name,"%s%s",file_list[i].file_dir,file_list[i].file_name);
-
- //打开文件
- fd = sys_open(file_name, O_RDONLY, 0);
- //打不开表示文件不存在
- if(fd < 0) continue;
- //计算长度
- len += strlen(file_name) + 2;
- //关闭文件
- sys_close(fd);
- }
- return len;
-
- }
- /******************************************************************************
- 函数名称: filelist_memcpy
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2015-2-13
- 函数说明: 拷贝文件列表内容到目的地址
- 参数说明:
- dst: 目的地址
- fname:文件列表名
- 返回值: 文件列表长度
- 修改记录:
- */
- static void filelist_memcpy(char *dst, struct file_item *file_list)
- {
- int len = 0;
- int i = 0;
- int fd = 0;
- char file_name[64];
- //遍历文件列表
- for(i=0; i<FILE_LIST_NUM; i++)
- {
- memset(file_name, 0, 64);
- // 组合文件路径和文件名
- sprintf(file_name,"%s%s",file_list[i].file_dir,file_list[i].file_name);
-
- // 在系统中打开对应文件
- fd = sys_open(file_name, O_RDONLY, 0);
- // 打不开表示文件不存在
- if(fd < 0) continue;
- // 如果文件不需要放入文件列表,关闭文件并退出
- if ((file_list[i].file_attr & ATTR_UP) == 0)
- {
- sys_close(fd);
- continue;
- }
- if((strcmp(file_name, file_list[i].file_dir)==0)
- && (strlen(file_name) == strlen(file_list[i].file_dir)))
- {
- continue;
- }
-
- // 文件名拷贝,并添加回车
- len = strlen(file_name);
- memcpy(dst, file_name, len);
- dst = dst + len;
- memcpy(dst, "\r\n", 2);
- dst = dst + 2;
- // 关闭文件
- sys_close(fd);
- }
- }
- /******************************************************************************
- 函数名称: filelist_createfile
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2015-10-23
- 函数说明: 创建文件列表
- 参数说明: 无
- 返回值: 成功返回0.
- 修改记录:
- */
- int filelist_createfile(void)
- {
- unsigned int addr,file_length;
- u16 crc;
- char *p;
- loff_t pos;
- struct file * pfile;
- struct cfg_file_head filelist_file;
-
- // 写文件头
- memset(&filelist_file,0,sizeof(filelist_file));
- filelist_file.signature = SIG_FILELIST_FILE;
- filelist_file.version = FILELIST_FILE_VERSION;
- addr = FILE_ADDR_ALGIN(sizeof(filelist_file));
-
- // 得到文件长度
- file_length = addr + filelist_getlen(g_file_item);
- file_length = FILE_ADDR_ALGIN(file_length);
- // 分配并初始化空间
- p = rt_malloc(file_length + 2);
- if(!p)
- {
- return -1;
- }
- memset(p, 0, file_length + 2);
-
- // 写入文件头
- memcpy(p, (char *)&filelist_file, sizeof(filelist_file));
-
- // 写文件列表
- filelist_memcpy(p+addr, g_file_item);
- // 计算CRC
- crc = CrcStr(p, file_length);
- memcpy(p+file_length, &crc, 2);
- // 创建数据文件
- pfile = rt_file_open("/tmp/file_list.bin",O_CREAT|O_RDWR,0);
- if(IS_ERR(pfile))
- {
- rt_free(p);
- return -2;
- }
-
- pos = 0;
- rt_file_write(pfile, p, file_length+2, &pos);
- rt_file_close(pfile,0);
-
- rt_free(p);
-
- return 0;
- }
- /*------------------------------ 内部函数 -------------------------------------
- 内部函数以下划线‘_’开头,不需要检查参数的合法性.
- */
- static void _maintain_state_reset(void)
- {
- g_maintain.state = MS_IDLE;
- }
- static void _maintain_echo(struct maintain_def *pt,u8 * cmd_buf,u8 cmd_len) //确认帧
- {
- u8 cnt,checksum ,len;
- u8 *p;
-
- p=pt->sendbuf;
- // 101规约len域的值 +4=控制域、地址 、类型标识 、 文件命令
- len = cmd_len+2;
-
- // 报文帧长度 +6=报文头(4字节)校验和、结束符
- p[0] = len + 6 ;
- // 帧头
- p[1] = 0x68; //报文头
- p[2] = len;
- p[3] = len;
- p[4] = 0x68;
- p[5] = IEC101_ECHO_DATA; //控制域
- p[6] = 0x01; //链路地址
- // 命令
- p = &pt->sendbuf[7]; // 调整位置
- memcpy(p,cmd_buf,cmd_len);
- // 计算检验和
- p = &pt->sendbuf[5];
- checksum = 0;
- for(cnt=0; cnt<len; cnt++)
- {
- checksum += *p++;
- }
- *p++=checksum;
- // 帧尾
- if (pt->hmi_mode)
- {
- *p++ = 0x80 | (MAIN_BOARD << 3) | MAINTAIN_BOARD;
- }
- else
- {
- *p++ = 0x16;
- }
- }
- /**************************************************************************
- 函数名称:IEC101_Recv_Rst
- 函数版本:1.00
- 作者:
- 创建日期:2008.9.1
- 函数功能说明:复归数据的接受
- 输入参数:
- 输出参数:
- 返回值:
- 更新信息:
- 更新日志1:
- 日期:
- 修改者:
- 修改内容:
- 修改原因:
- ***************************************************************************/
- static void _maintain_recv_rst(struct maintain_def *pt)
- {
- pt->nTypeCounter=0;
- pt->nRecvLenth=0;
- pt->nRecvCounter=0;
- }
- static int _maintain_comm(struct maintain_def *pt,u8 *buf,int len)
- {
- static u8 cmd_buf[256];
- u8 cmd_len;
- g_mt_rs232 = 0;
- memset(cmd_buf,0,sizeof(cmd_buf));
- cmd_len = Maintain_Manage(buf, len, &cmd_buf[0]);
-
- // 按内部101格式组帧
- _maintain_echo(pt, &cmd_buf[0], cmd_len);
-
- g_mtbuf.bSend = true;
- return 0;
- }
- static int _trans_file_comm(struct maintain_def *pt,u8 *buf,int len)
- {
- static u8 cmd_buf[256] = {0};
- u8 cmd_len;
-
- cmd_len = com_trans_file(buf, len, &cmd_buf[0]);
-
- // 按内部101格式组帧
- _maintain_echo(pt, &cmd_buf[0], cmd_len);
-
- g_mtbuf.bSend = true;
- return 0;
- }
-
- /**************************************************************************
- 函数名称:_maintain_Send
- 函数版本:1.00
- 作者:
- 创建日期:2013.03.28
- 函数功能说明:启动数据发送
- 输入参数:
- 输出参数:无
- 返回值:
- 函数扇入清单:
- ***************************************************************************/
- static void _maintain_send(void)
- {
- u8 length;
- length = g_mtbuf.sendbuf[0];
- if(g_mtbuf.bSend)
- {
- //print_mem("PCTX:",&g_mtbuf.sendbuf[1],length);
- if (!g_mtbuf.hmi_mode)
- {
- if (net_maintain_send(&g_mtbuf.sendbuf[1],length))
- {
- g_mtbuf.bSend = FALSE;
- }
- }
- else
- {
- Add_Uart_Frame(PDA_BOARD, (int)g_mtbuf.sendbuf[0], &g_mtbuf.sendbuf[1]);
- g_mtbuf.bSend = FALSE;
- }
- }
- }
- /******************************************************************************
- 函数名称: _maintain_pwd_createfile
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2015-10-23
- 函数说明: 创建直流系数文件
- 参数说明: 无
- 返回值: 成功返回0.
- 修改记录:
- */
- static int _maintain_pwd_createfile(u8 *pwd)
- {
- unsigned int addr,file_length;
- u16 crc;
- char *p;
- loff_t pos;
- struct file * pfile;
- struct mtpwd_file_head_data mtpwd_file;
-
- // 写文件头
- memset(&mtpwd_file,0,sizeof(mtpwd_file));
- mtpwd_file.cfh.signature = SIG_MTPWD_FILE;
- mtpwd_file.cfh.version = MTPWD_FILE_VERSION;
-
- memcpy (&mtpwd_file.pwd, pwd, 16);
-
- // 得到文件长度
- addr = FILE_ADDR_ALGIN(sizeof(mtpwd_file));
- file_length = FILE_ADDR_ALGIN(addr);
- // 分配并初始化空间
- p = rt_malloc(file_length + 2);
- if(!p)
- {
- return -1;
- }
- memset(p, 0, file_length + 2);
-
- // 写入文件头
- memcpy(p, (char *)&mtpwd_file, sizeof(mtpwd_file));
-
- // 计算CRC
- crc = CrcStr(p, file_length);
- memcpy(p+file_length, &crc, 2);
- // 创建数据文件
- pfile = rt_file_open("/app/data/mt_pwd.bin",O_CREAT|O_RDWR,0);
- if(IS_ERR(pfile))
- {
- rt_free(p);
- return -2;
- }
-
- pos = 0;
- rt_file_write(pfile, p, file_length+2, &pos);
- rt_file_close(pfile,0);
-
- rt_free(p);
-
- return 0;
- }
- /******************************************************************************
- 函数名称: _maintain_pwd_readfile
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2015-10-23
- 函数说明: 读取直流系数文件
- 参数说明: 无
- 返回值: 成功返回0.
- 修改记录:
- */
- static int _maintain_pwd_readfile(void)
- {
- u32 len;
- u16 crc;
- u8 *buf;
- loff_t pos;
- struct file * pfile;
- u8 i,pwd[16];
- struct mtpwd_file_head_data *brh;
-
- // 创建并打开文件
- pfile = rt_file_open("/app/data/mt_pwd.bin",O_RDWR,0);
- if(IS_ERR(pfile))
- {
- return -1;
- }
- // 得到文件长度
- len = rt_file_getfile_size(pfile);
- if(len <= 0)
- {
- rt_file_close(pfile,0);
- return -11;
- }
- // 分配内存
- buf = rt_malloc(len);
- if((buf) == NULL)
- {
- rt_file_close(pfile,0);
- return -2;
- }
- // 读出内容
- pos = 0;
- if(rt_file_read(pfile,buf,len,&pos) != len)
- {
- rt_file_close(pfile,0);
- rt_free(buf);
- return -3;
- }
- // 关闭文件
- rt_file_close(pfile,0);
- // 检查CRC
- crc = CrcStr(buf,len-2);
- if(crc != *(u16*)(buf+len-2))
- {
- rt_free(buf);
- return -4;
- }
- // 检查文件签名
- brh = (struct mtpwd_file_head_data*)buf;
- if(brh->cfh.signature != SIG_MTPWD_FILE)
- {
- rt_free(buf);
- return -5;
- }
- // 检查文件长度
- if(len < sizeof(*brh) + 2)
- {
- rt_free(buf);
- return -7;
- }
- //取出文件中存储内容
- memcpy (&pwd, brh->pwd, 16);
- // 此处需将密码解密
- for (i=0; i<16; i++)
- {
- mt_pwd[i] = ~pwd[i];
- }
- rt_free(buf);
- return 0;
- }
- /*------------------------------ 测试函数 -------------------------------------
- 一个实体文件必须带一个本模块的测试函数来进行单元测试,如果的确不方便在本模块中
- 进行单元测试,必须在此注明实际的测试位置(例如在哪个实体文件中使用哪个测试函数).
- */
- int printf_maintian(void)
- {
- return 0;
- }
- /*------------------------------ 文件结束 -------------------------------------
- */
|