sys_api.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. /******************************************************************************
  2. 版权所有:
  3. 文件名称: sys_api.c
  4. 文件版本: 01.01
  5. 创建作者: xxxxxx
  6. 创建日期: 2022-09
  7. 功能说明: 系统接口
  8. 其它说明:
  9. 修改记录:
  10. *******************************************************************************/
  11. #include "head.h"
  12. extern int timespec_to_rtchms(struct timespec ts, struct rtc_time_t * p_rtc,int is_round);
  13. /***********************************************************************
  14. 函数名称:parseEnvInfo
  15. 函数版本:01.01
  16. 创建作者:xxxxxx
  17. 创建日期:2022-10-31
  18. 函数说明:解析环境变量信息
  19. 参数说明:*env_buf:环境变量buf首地址
  20. type_char:环境变量类型字符
  21. *ver:解析环境变量信息得到的版本信息首地址
  22. 返 回 值:true:解析成功 false:解析失败
  23. ***********************************************************************/
  24. static bool parseEnvInfo(char* env_buf,char type_char,VERSION* ver)
  25. {
  26. u8 dat;
  27. bool ret=false;
  28. int i,str_len,tab=0;
  29. str_len = strlen(env_buf);
  30. for(i=0;i<str_len;i++)
  31. {
  32. if(env_buf[i] == type_char)
  33. {
  34. tab = i;
  35. }
  36. else if(env_buf[i] == 'V' && i == (tab + 1))
  37. {
  38. tab = i;
  39. ret = true;
  40. continue;
  41. }
  42. if(!ret)
  43. continue;
  44. if(i == (tab + 1))
  45. {
  46. dat = atoi(&env_buf[i]);
  47. }
  48. if(env_buf[i] == '.')
  49. {
  50. if(dat)
  51. {
  52. ver->majorVer = dat;
  53. tab = i;
  54. }
  55. }
  56. else if(ver->majorVer && dat)
  57. {
  58. ver->minorVer = dat;
  59. break;
  60. }
  61. }
  62. return ret;
  63. }
  64. /***********************************************************************
  65. 函数名称:GetUBootVer
  66. 函数版本:01.01
  67. 创建作者:xxxxxx
  68. 创建日期:2022-09-30
  69. 函数说明:获取U-Boot版本号
  70. 参数说明:none
  71. 返 回 值:版本号对象的首地址 NULL:为获取失败
  72. ***********************************************************************/
  73. VERSION *GetUBootVer(void)
  74. {
  75. char* pboot;
  76. bool ret=false;
  77. const char uboot_char = 'U';
  78. static VERSION g_uBootVer={0};
  79. pboot = env_get_info(ENV_U_BOOT);
  80. if(pboot == NULL)
  81. {
  82. rt_printf("warning:Get system u-boot version failure!\r\n");
  83. return NULL;
  84. }
  85. ret = parseEnvInfo(pboot,uboot_char,&g_uBootVer);
  86. if(!ret)
  87. {
  88. rt_printf("warning:Get system u-boot version failure!\r\n");
  89. return NULL;
  90. }
  91. if(!g_uBootVer.minorVer && !g_uBootVer.majorVer)
  92. {
  93. rt_printf("warning:Get system u-boot version failure!\r\n");
  94. return NULL;
  95. }
  96. rt_printf("Current system u-boot version number:V%02d.%03d\r\n",g_uBootVer.majorVer,g_uBootVer.minorVer);
  97. return &g_uBootVer;
  98. }
  99. /***********************************************************************
  100. 函数名称:GetKernelVer
  101. 函数版本:01.01
  102. 创建作者:xxxxxx
  103. 创建日期:2022-09-30
  104. 函数说明:获取内核版本号
  105. 参数说明:none
  106. 返 回 值:版本号对象的首地址 NULL:为获取失败
  107. ***********************************************************************/
  108. VERSION *GetKernelVer(void)
  109. {
  110. char* pker;
  111. bool ret=false;
  112. const char kernel_char = 'K';
  113. static VERSION g_kernelVer={0};
  114. pker = env_get_info(ENV_KERNEL);
  115. if(pker == NULL)
  116. {
  117. rt_printf("warning:Get system kernel version failure!\r\n");
  118. return NULL;
  119. }
  120. ret = parseEnvInfo(pker,kernel_char,&g_kernelVer);
  121. if(!ret)
  122. {
  123. rt_printf("warning:Get system kernel version failure!\r\n");
  124. return NULL;
  125. }
  126. if(!g_kernelVer.minorVer && !g_kernelVer.majorVer)
  127. {
  128. rt_printf("warning:Get system kernel version failure!\r\n");
  129. return NULL;
  130. }
  131. rt_printf("Current system kernel version number:V%02d.%03d\r\n",g_kernelVer.majorVer,g_kernelVer.minorVer);
  132. return &g_kernelVer;
  133. }
  134. /***********************************************************************
  135. 函数名称:GetRootFileSysVer
  136. 函数版本:01.01
  137. 创建作者:xxxxxx
  138. 创建日期:2022-10-31
  139. 函数说明:获取文件系统版本号
  140. 参数说明:none
  141. 返 回 值:版本号对象的首地址 NULL:为获取失败
  142. ***********************************************************************/
  143. VERSION *GetRootFileSysVer(void)
  144. {
  145. char* proot;
  146. bool ret=false;
  147. const char file_sys_char = 'R';
  148. static VERSION g_fileSysVer={0};
  149. proot = env_get_info(ENV_ROOT_FS);
  150. if(proot == NULL)
  151. {
  152. rt_printf("warning:Get system file system version failure!\r\n");
  153. return NULL;
  154. }
  155. ret = parseEnvInfo(proot,file_sys_char,&g_fileSysVer);
  156. if(!ret)
  157. {
  158. rt_printf("warning:Get system file system version failure!\r\n");
  159. return NULL;
  160. }
  161. if(!g_fileSysVer.minorVer && !g_fileSysVer.majorVer)
  162. {
  163. rt_printf("warning:Get system file system version failure!\r\n");
  164. return NULL;
  165. }
  166. rt_printf("Current system file system version number:V%02d.%03d\r\n",g_fileSysVer.majorVer,g_fileSysVer.minorVer);
  167. return &g_fileSysVer;
  168. }
  169. /***********************************************************************
  170. 函数名称:CheckSysProgramVer
  171. 函数版本:01.01
  172. 创建作者:xxxxxx
  173. 创建日期:2022-09-30
  174. 函数说明:检查系统程序版本
  175. 参数说明:none
  176. 返 回 值:0:版本号合法 非0:版本号非法
  177. ***********************************************************************/
  178. int CheckSysProgramVer(void)
  179. {
  180. int ver_num; // 版本号
  181. VERSION *ver;
  182. ver = GetUBootVer();
  183. if(ver == NULL)
  184. return -1;
  185. ver_num = ver->majorVer*256 + ver->minorVer;
  186. if(ver_num < UBOOT_VER_BASE)
  187. {
  188. rt_printf("warning:Current system u-boot version is low, please upgrade for the u-boot to version higher than or equal V01.%03d\r\n",UBOOT_VER_BASE%256);
  189. return -2;
  190. }
  191. ver = GetKernelVer();
  192. if(ver == NULL)
  193. return -3;
  194. ver_num = ver->majorVer*256 + ver->minorVer;
  195. if(ver_num < KERNEL_VER_BASE)
  196. {
  197. rt_printf("warning:Current system kernel version is low, please upgrade for the kernel to version higher than or equal V01.%03d\r\n",KERNEL_VER_BASE%256);
  198. return -4;
  199. }
  200. ver = GetRootFileSysVer();
  201. if(ver == NULL)
  202. return -5;
  203. ver_num = ver->majorVer*256 + ver->minorVer;
  204. if(ver_num < ROOT_FILE_SYS_VER_BASE)
  205. {
  206. rt_printf("warning:Current system file system version is low, please upgrade for the file system to version higher than or equal V01.%03d\r\n",ROOT_FILE_SYS_VER_BASE%256);
  207. return -6;
  208. }
  209. return 0;
  210. }
  211. /***********************************************************************
  212. 函数名称:find_par_cval_param
  213. 函数版本:01.01
  214. 创建作者:xxxxxx
  215. 创建日期:2022-11-09
  216. 函数说明:查找遥参参数
  217. 参数说明:addr:遥参地址
  218. 返 回 值: 遥参参数实体首地址(获取失败返回NULL指针)
  219. ***********************************************************************/
  220. static SET_PARAID* find_par_cval_param(WORD addr)
  221. {
  222. int i;
  223. SET_PARAID *pt;
  224. for(i=0;i<ParaIDNum;i++)
  225. {
  226. pt = &tParaID[i];
  227. if(pt->parId != addr)
  228. continue;
  229. return pt;
  230. }
  231. return NULL;
  232. }
  233. /***********************************************************************
  234. 函数名称:set_par_value
  235. 函数版本:01.01
  236. 创建作者:xxxxxx
  237. 创建日期:2022-11-09
  238. 函数说明:修改遥参值
  239. 参数说明:addr:遥参地址
  240. value:写入的值
  241. 返 回 值: 0:修改成功 非0:修改失败
  242. ***********************************************************************/
  243. int set_par_value(WORD addr,float value)
  244. {
  245. const SET_PARAID *pt;
  246. SET_VALUE *psetbuf,*pparabuf,*pcstbuf;
  247. pt = find_par_cval_param(addr);
  248. if(pt == NULL)
  249. {
  250. rt_printf("%s:地址0x%x在遥参点表里查找失败!\r\n",__func__,addr);
  251. return -1;
  252. }
  253. switch(pt->group_type)
  254. {
  255. case SETGROUP_TYPE_BH:
  256. case SETGROUP_TYPE_PUB:
  257. psetbuf = rt_malloc(SET_NUMBER*4);
  258. if(!psetbuf)
  259. {
  260. return -2;
  261. }
  262. if(!ReadSet(m_runsection,(void*)psetbuf)) // 读定值
  263. {
  264. GetDefSet((float*)psetbuf);
  265. }
  266. if(pt->group_type == SETGROUP_TYPE_PUB)
  267. {
  268. psetbuf[pt->setno].ff = value;
  269. }
  270. else
  271. {
  272. psetbuf[PUB_SET_NUMBER+pt->setno].ff = value;
  273. }
  274. if(SaveSet(m_runsection,(void *)psetbuf))
  275. {
  276. soe_record_opt(EV_SET_OK,0);
  277. MakeRunSet(false);
  278. rt_err_clr(ERR_CODE_SET,0);
  279. }
  280. else
  281. {
  282. soe_record_opt(EV_SET_FAIL,0);
  283. }
  284. rt_free(psetbuf);
  285. break;
  286. case SETGROUP_TYPE_PARA:
  287. pparabuf = rt_malloc(EQUIP_PARA_NUMBER*4);
  288. if(!pparabuf)
  289. {
  290. return -3;
  291. }
  292. if(!ReadPara((void*)pparabuf,EEP_EQUIP_PARA_ADDR,EQUIP_PARA_NUMBER,&tEquipParaTable[0]))
  293. {
  294. GetDefPara((void*)pparabuf,EQUIP_PARA_NUMBER,&tEquipParaTable[0]);
  295. }
  296. if(tEquipParaTable[pt->setno].wType == SETTYPE_IP)
  297. pparabuf[pt->setno].tt = (DWORD)value;
  298. else
  299. pparabuf[pt->setno].ff = value;
  300. if(SavePara((void*)pparabuf,EEP_EQUIP_PARA_ADDR,EQUIP_PARA_NUMBER,&tEquipParaTable[0]))
  301. {
  302. soe_record_opt(EV_EQUPARA_OK,0);
  303. MakeRunPara(false, false);
  304. rt_err_clr(ERR_CODE_EQU_PARA,0);
  305. }
  306. else
  307. {
  308. soe_record_opt(EV_EQUPARA_FAIL,0);
  309. }
  310. rt_free(pparabuf);
  311. break;
  312. case SETGROUP_TYPE_CSTSET:
  313. pcstbuf = rt_malloc(CSTSET_NUMBER*4);
  314. if(!pcstbuf)
  315. {
  316. return -4;
  317. }
  318. if(!ReadPara((void*)pcstbuf,EEP_CSTSET_ADDR,CSTSET_NUMBER,&tCstSetTable[0]))
  319. {
  320. GetDefPara((void*)pcstbuf,CSTSET_NUMBER,&tCstSetTable[0]);
  321. }
  322. pcstbuf[pt->setno].ff = value;
  323. if(SavePara((void*)pcstbuf,EEP_CSTSET_ADDR,CSTSET_NUMBER,&tCstSetTable[0]))
  324. {
  325. soe_record_opt(EV_CSTSET_OK,0);
  326. MakeRunSet(false);
  327. rt_err_clr(ERR_CODE_SET_IN,0);
  328. }
  329. else
  330. {
  331. soe_record_opt(EV_CSTSET_FAIL,0);
  332. }
  333. rt_free(pcstbuf);
  334. break;
  335. default:
  336. return -5;
  337. }
  338. return 0;
  339. }
  340. /***********************************************************************
  341. 函数名称:get_par_nane
  342. 函数版本:01.01
  343. 创建作者:xxxxxx
  344. 创建日期:2022-11-09
  345. 函数说明:获取遥参描述
  346. 参数说明:addr:遥参的地址
  347. 返 回 值: 获取的遥参描述首地址(获取失败返回NULL指针)
  348. ***********************************************************************/
  349. char *get_par_nane(WORD addr)
  350. {
  351. char *name=NULL;
  352. const SET_PARAID *pt = find_par_cval_param(addr);
  353. if(pt == NULL)
  354. {
  355. rt_printf("%s:地址0x%x在遥参点表里查找失败!\r\n",__func__,addr);
  356. return NULL;
  357. }
  358. switch(pt->group_type)
  359. {
  360. case SETGROUP_TYPE_BH:
  361. name = (char*)tSwSetTable[pt->setno].szName;
  362. break;
  363. case SETGROUP_TYPE_PUB:
  364. name = (char*)tPubSetTable[pt->setno].szName;
  365. break;
  366. case SETGROUP_TYPE_PARA:
  367. name = (char*)tEquipParaTable[pt->setno].szName;
  368. break;
  369. case SETGROUP_TYPE_CSTSET:
  370. name = (char*)tCstSetTable[pt->setno].szName;
  371. break;
  372. default:
  373. break;
  374. }
  375. return name;
  376. }
  377. /***********************************************************************
  378. 函数名称:get_par_nane
  379. 函数版本:01.01
  380. 创建作者:xxxxxx
  381. 创建日期:2022-11-09
  382. 函数说明:获取遥参描述
  383. 参数说明:addr:遥参的地址
  384. 返 回 值: 获取的遥参描述首地址(获取失败返回NULL指针)
  385. ***********************************************************************/
  386. int get_par_value_str(WORD addr,char *buf,const int buf_len)
  387. {
  388. int str_len;
  389. DWORD u32_val;
  390. SET_VALUE tmp_val;
  391. const SET_PARAID *pt;
  392. char tmp_buf[128]={0};
  393. const TSETTABLE *table;
  394. struct timespec ts={0};
  395. struct rtc_time_t time={0};
  396. SET_VALUE *psetbuf,*pparabuf,*pcstbuf;
  397. if(buf==NULL)
  398. return -1;
  399. pt = find_par_cval_param(addr);
  400. if(pt==NULL)
  401. {
  402. rt_printf("%s:地址0x%x在遥参点表里查找失败!\r\n",__func__,addr);
  403. return -2;
  404. }
  405. switch(pt->group_type)
  406. {
  407. case SETGROUP_TYPE_BH:
  408. case SETGROUP_TYPE_PUB:
  409. psetbuf = rt_malloc(SET_NUMBER*4);
  410. if(!psetbuf)
  411. {
  412. return -3;
  413. }
  414. if(!ReadSet(m_runsection,(void*)psetbuf))
  415. {
  416. GetDefSet((float*)psetbuf);
  417. }
  418. if(pt->group_type == SETGROUP_TYPE_PUB)
  419. {
  420. table = &tPubSetTable[pt->setno];
  421. tmp_val.ff = psetbuf[pt->setno].ff;
  422. }
  423. else
  424. {
  425. table = &tSwSetTable[pt->setno];
  426. tmp_val.ff = psetbuf[PUB_SET_NUMBER+pt->setno].ff;
  427. }
  428. rt_free(psetbuf);
  429. break;
  430. case SETGROUP_TYPE_PARA:
  431. pparabuf = rt_malloc(EQUIP_PARA_NUMBER*4);
  432. if(!pparabuf)
  433. {
  434. return -4;
  435. }
  436. if(!ReadPara((void*)pparabuf,EEP_EQUIP_PARA_ADDR,EQUIP_PARA_NUMBER,&tEquipParaTable[0]))
  437. {
  438. GetDefPara((void*)pparabuf,EQUIP_PARA_NUMBER,&tEquipParaTable[0]);
  439. }
  440. table = &tEquipParaTable[pt->setno];
  441. tmp_val.ff = pparabuf[pt->setno].ff;
  442. rt_free(pparabuf);
  443. break;
  444. case SETGROUP_TYPE_CSTSET:
  445. pcstbuf = rt_malloc(CSTSET_NUMBER*4);
  446. if(!pcstbuf)
  447. {
  448. return -5;
  449. }
  450. if(!ReadPara((void*)pcstbuf,EEP_CSTSET_ADDR,CSTSET_NUMBER,&tCstSetTable[0]))
  451. {
  452. GetDefPara((void*)pcstbuf,CSTSET_NUMBER,&tCstSetTable[0]);
  453. }
  454. table = &tCstSetTable[pt->setno];
  455. tmp_val.ff = pcstbuf[pt->setno].ff;
  456. rt_free(pcstbuf);
  457. break;
  458. default:
  459. return -6;
  460. }
  461. u32_val = (DWORD)tmp_val.ff;
  462. switch(table->wType)
  463. {
  464. case SETTYPE_LIST:
  465. str_len = sprintf(tmp_buf,"%s",table->list[u32_val].str);
  466. break;
  467. case SETTYPE_IP:
  468. str_len = sprintf(tmp_buf,"%d.%d.%d.%d",(tmp_val.tt>>24)&0xFF,(tmp_val.tt>>16)&0xFF,(tmp_val.tt>>8)&0xFF,tmp_val.tt&0xFF);
  469. break;
  470. case SETTYPE_YMD:
  471. ts.tv_sec = tmp_val.tt;
  472. timespec_to_rtc(ts,&time,1);
  473. str_len = sprintf(tmp_buf,"%04d-%02d-%02d",2000+time.year,time.month,time.day);
  474. break;
  475. case SETTYPE_HMS:
  476. ts.tv_sec = tmp_val.tt;
  477. timespec_to_rtchms(ts,&time,1);
  478. str_len = sprintf(tmp_buf,"%02d:%02d:%02d",time.hour,time.min,time.ms%1000);
  479. break;
  480. default:
  481. str_len = sprintf(tmp_buf,"%.3f",tmp_val.ff);
  482. strcat(tmp_buf,SetUints[table->wUnit]);
  483. str_len += strlen(SetUints[table->wUnit]);
  484. break;
  485. }
  486. if(str_len > buf_len)
  487. {
  488. str_len = buf_len;
  489. }
  490. memcpy(buf,tmp_buf,str_len);
  491. return str_len;
  492. }
  493. /***********************************************************************
  494. 函数名称:get_plc_yx_nane
  495. 函数版本:01.01
  496. 创建作者:xxxxxx
  497. 创建日期:2022-11-09
  498. 函数说明:获取遥信描述
  499. 参数说明:addr:遥信地址
  500. *buf:缓存遥信描述的首地址
  501. buf_len:缓存区的字节数
  502. 返 回 值: 获取遥信描述的长度
  503. ***********************************************************************/
  504. int get_plc_yx_nane(WORD addr,char *buf,const int buf_len)
  505. {
  506. int index;
  507. int name_len;
  508. char name[128]={0};
  509. if(buf == NULL)
  510. return 0;
  511. index = tbl_cp2index(addr);
  512. if(index < 0)
  513. {
  514. return 0;
  515. }
  516. tbl_getname(RES_TYPE_YX,index,name);
  517. name_len = strlen(name);
  518. if(name_len > buf_len)
  519. {
  520. name_len = buf_len;
  521. }
  522. memcpy(buf,name,name_len);
  523. return name_len;
  524. }
  525. /***********************************************************************
  526. 函数名称:get_plc_yx_val
  527. 函数版本:01.01
  528. 创建作者:xxxxxx
  529. 创建日期:2022-11-09
  530. 函数说明:获取遥信值
  531. 参数说明:addr:遥信地址
  532. 返 回 值: 获取遥信的遥信值(正常值:0、1、2 其他:获取失败)
  533. ***********************************************************************/
  534. int get_plc_yx_val(WORD addr)
  535. {
  536. int val,index;
  537. index = tbl_cp2index(addr);
  538. if(index < 0)
  539. return -1;
  540. val = tbl_get_yx(index,0);
  541. return val;
  542. }
  543. /***********************************************************************
  544. 函数名称:set_plc_yk
  545. 函数版本:01.01
  546. 创建作者:xxxxxx
  547. 创建日期:2022-11-09
  548. 函数说明:控制遥控开出
  549. 参数说明:addr:遥控地址
  550. cmd:命令码 1:合 0:分
  551. 返 回 值: 0:遥控成功 非0:遥控失败
  552. ***********************************************************************/
  553. int set_plc_yk(WORD addr,int cmd)
  554. {
  555. int i,ret;
  556. int yk_cmd;
  557. for(i=0;i<g_table_head->do_num;i++)
  558. {
  559. if(addr != g_do_table[i].cp)
  560. {
  561. continue;
  562. }
  563. if(cmd == 0)
  564. {
  565. yk_cmd = YK_VAL_TZ;
  566. }
  567. else if(cmd == 1)
  568. {
  569. yk_cmd = YK_VAL_HZ;
  570. }
  571. else
  572. {
  573. return -1; // 遥控命令码错误
  574. }
  575. ret = RemoteCtrl(YK_TYPE_SEL,i,yk_cmd,MASTER_MAINTAIN); // 预置
  576. if(ret == 0)
  577. return RemoteCtrl(YK_TYPE_EXE,i,yk_cmd,MASTER_MAINTAIN); // 执行
  578. else
  579. return ret;
  580. }
  581. return -255; // 遥控地址错误
  582. }
  583. /***********************************************************************
  584. 函数名称:get_led_name
  585. 函数版本:01.01
  586. 创建作者:xxxxxx
  587. 创建日期:2022-11-10
  588. 函数说明:获取LED描述
  589. 参数说明:slot:板卡号
  590. addr:LED地址
  591. 返 回 值: led描述的长度 0:失败
  592. ***********************************************************************/
  593. char *get_led_name(int slot,int addr)
  594. {
  595. char *name;
  596. struct led_config *pt;
  597. if(slot >= EQU_SLOT_NUM_MAX)
  598. return NULL;
  599. pt = &g_led_slot[slot];
  600. if(addr >= pt->num || pt->sn[addr].no == LED_NULL)
  601. return NULL;
  602. if(pt->sn[addr].sw) // 开关的
  603. {
  604. int index = pt->sn[addr].no%SW_LED_NUM;
  605. name = (char*)g_sw_led_name[index];
  606. }
  607. else // 公共的
  608. {
  609. if(pt->sn[addr].no >= PUB_LED_NUM)
  610. return NULL;
  611. name = (char*)g_pub_led_name[pt->sn[addr].no];
  612. }
  613. return name;
  614. }
  615. /***********************************************************************
  616. 函数名称:get_led_value
  617. 函数版本:01.01
  618. 创建作者:xxxxxx
  619. 创建日期:2022-11-10
  620. 函数说明:获取LED状态值
  621. 参数说明:slot:板卡号
  622. addr:led地址
  623. 返 回 值: 0灭 1快闪 2慢闪 3常亮 其他:错误
  624. ***********************************************************************/
  625. int get_led_value(int slot,int addr)
  626. {
  627. int status;
  628. struct led_config *pt;
  629. if(slot >= EQU_SLOT_NUM_MAX)
  630. return -1;
  631. pt = &g_led_slot[slot];
  632. if(addr >= pt->num )
  633. return -2;
  634. if(pt->sn[addr].sw >= (SWITCH_NUM_MAX+1) || pt->sn[addr].no == LED_NULL || pt->sn[addr].no >= SW_LED_NUM)
  635. return -3;
  636. status = g_led_stu[pt->sn[addr].sw][pt->sn[addr].no];
  637. return status;
  638. }
  639. int rt_gunzip(char *filename)
  640. {
  641. int ret;
  642. char *argv[] = {"/bin/gunzip","-f",filename,NULL};
  643. char *envp[] = { NULL };
  644. ret = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);
  645. rt_printf("rt_gunzip=%d,%s\r\n\r\n",ret,filename);
  646. return ret;
  647. }
  648. int rt_bunzip2(char *filename)
  649. {
  650. int ret;
  651. char *argv[] = {"/usr/bin/bunzip2","-f",filename,NULL};
  652. char *envp[] = { NULL };
  653. ret = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);
  654. rt_printf("rt_bunzip2=%d,%s\r\n\r\n",ret,filename);
  655. return ret;
  656. }
  657. int rt_untar_a(char *filename)
  658. {
  659. int ret=-1;
  660. if(strstr(filename,".gz"))
  661. {
  662. ret =rt_gunzip(filename);
  663. }
  664. else if(strstr(filename,".bz2"))
  665. {
  666. ret =rt_bunzip2(filename);
  667. }
  668. return ret;
  669. }