equ_ftu.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. /******************************************************************************
  2. 版权所有:
  3. 文件名称: equ.c
  4. 文件版本: 01.01
  5. 创建作者: sunxi
  6. 创建日期: 2013-03-25
  7. 功能说明: 装置信息管理维护
  8. 其它说明:
  9. 修改记录:
  10. */
  11. /*------------------------------- 头文件 --------------------------------------
  12. */
  13. #include "head.h"
  14. /*------------------------------- 宏定义 --------------------------------------
  15. */
  16. #define EQU_SLOT_CHECK_TIMEOUT 4 // 子板检查超时,以秒为单位,不能小于4s
  17. /*------------------------------ 类型结构 -------------------------------------
  18. */
  19. //子板信息帧结构
  20. struct board_info_frame
  21. {
  22. u8 type; // 子板类型
  23. u8 status :4; // 子板状态
  24. u8 errcode:4; // 子板错误代码
  25. u16 crc; // 子板CRC
  26. u32 version; // 子板版本
  27. };
  28. /*------------------------------ 全局变量 -------------------------------------
  29. */
  30. // 控制板类型
  31. u32 g_brd_type_kz;
  32. // 模拟量对应关系
  33. static const s8 g_ac_index[BOARD_TYPE_KZ_NUM][EQU_SLOT_AC_CHN] =
  34. {
  35. {0X01,0X03,0X05,0X07,0X09,0X0B,0X0D,0X04,0X0A,0X0E,0X02,0X08,0X0C,0X00,0X06,0X0F}, // KC00
  36. {0X01,0X03,0X05,0X07,0X09,0X0B,0X0D,0X0F,0x0E,0x04,0x02,0x08,0x0C,0x00,0x06,0x0A}, // KC08
  37. {0X0C,0X0E,0X01,0X03,0X00,0X02,0X04,0X06,0X08,0X0A,0X05,0X07,0X09,0X0B,0X0D,0X0F}, // KC10,10AC
  38. {0X01,0X03,0X05,0X07,0X09,0X0B,0X0D,0X04,0X0A,0X0E,0X02,0X08,0X0C,0X00,0X06,0X0F}, // 一体式分布式DTU控制板
  39. {0X01,0X03,0X05,0X07,0X09,0X0B,0X0D,0X0F,0x0E,0x04,0x02,0x08,0x0C,0x00,0x06,0x0A}, // 后拔插分布式DTU控制板 FB_V3_22_12
  40. {0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00}, // 18 老版本分布式主板类型,不起作用
  41. {0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00}, // 19 老版本分布式主板类型,不起作用
  42. {0X01,0X03,0X05,0X07,0X09,0X0B,0X0D,0X0F,0x0E,0x04,0x02,0x08,0x0C,0x00,0x06,0x0A}, // 类型 20 FB_V4_24_12
  43. {0X01,0X03,0X05,0X07,0X09,0X0B,0X0D,0X0F,0x08,0x0A,0x0C,0x0E,0x06,0x04,0x02,0x00}, //类型 21 FB_V4.1_24_12
  44. {0X01,0X03,0X05,0X07,0X09,0X0B,0X0D,0X0F,0x08,0x0A,0x0C,0x0E,0x06,0x04,0x02,0x00}, //类型 22 FB_V3.1_22_12
  45. {0X01,0X03,0X05,0X07,0X09,0X0B,0X0D,0X0F,0x0E,0x04,0x02,0x08,0x0C,0x00,0x06,0x0A}, //类型 23 FB_V3D_1_22_12
  46. {0X01,0X03,0X05,0X07,0X09,0X0B,0X0D,0X0F,0x0E,0x04,0x02,0x08,0x0C,0x00,0x06,0x0A}, //类型 24 V4_D_30_12
  47. };
  48. //遥信转换表
  49. s8 g_change_di_index[BOARD_TYPE_KZ_NUM][EQU_DB_YX_NUM] =
  50. {
  51. { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32},//13
  52. { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32},//14 FB_V3_22_8 21,20,19,22,23,24,25,26,27,28,29,30,31,32}
  53. { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32},//15
  54. { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,00,00,00,00,00,00,00,00,00,00,00,00,00},//16 FBV1_19_6
  55. { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32},//17 FB_V3_22_12
  56. { 1, 2, 3, 5, 7, 9,11,13,15,19,21,23,24,18,17, 4, 6, 8,10,12,14,16,20,22,00,00,00,00,00,00,00,00},//18 null
  57. { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32},//19 null
  58. { 1, 2, 3, 5, 7, 9,11,13,15,19,21,23,24,18,17, 4, 6, 8,10,12,14,16,20,22,00,00,00,00,00,00,00,00},//20 FB_V4_24_12
  59. { 1, 2, 3, 5, 7, 9,11,13,15,19,21,23,24,18,17, 4, 6, 8,10,12,14,16,20,22,00,00,00,00,00,00,00,00},//21 FB_V4.1_24_12
  60. { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,24,23,21,22,25,26,27,28,29,30,31,32},//22 FB_V3.1_22_12
  61. { 2, 4, 6, 8,10,12,14,15,16, 1, 3, 5, 7, 9,11,13,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32},//23 FB_V3D_122_12
  62. { 1, 3, 5, 7, 9,11,13,15,19,21,25,27,29, 2, 4, 6, 8,10,12,14,16,20,22,26,28,30,17,18,23,24,00,00},//24 V4_D_30_12
  63. };
  64. // 开出对应关系
  65. static const s8 g_do_index[BOARD_TYPE_KZ_NUM][DO_NUM] =
  66. {
  67. {-1,-1,-1,-1-1,-1,-1,-1-1,-1,-1,-1},
  68. {DO_OUT8,DO_OUT0,DO_OUT1,DO_OUT6,DO_OUT5,DO_OUT2,DO_OUT3,DO_OUT4,DO_OUT7,-1}, //14
  69. {DO_OUT9,DO_OUT0,DO_OUT2,DO_OUT4,DO_OUT6,DO_OUT1,DO_OUT3,DO_OUT5,DO_OUT7,-1}, //15
  70. {-1,-1,-1,-1-1,-1,-1,-1-1,-1,-1,-1}, // 18 老版本分布式主板类型,不起作用
  71. {-1,-1,-1,-1-1,-1,-1,-1-1,-1,-1,-1}, // 19 老版本分布式主板类型,不起作用
  72. // {DO_PWM2,DO_PWM1,DO_OUT7,DO_OUT6,DO_OUT3,DO_OUT2,DO_PWM0,DO_PWM3,DO_OUT0,DO_OUT1,DO_OUT5,-1}, //20 V4 类型20
  73. // {DO_PWM2,DO_PWM1,DO_OUT7,DO_OUT6,DO_OUT3,DO_OUT2,DO_PWM0,DO_PWM3,DO_OUT0,DO_OUT1,DO_OUT5,-1}, //21 V4.1 类型20
  74. // {DO_PWM0,DO_PWM3,DO_OUT0,DO_OUT1,DO_OUT6,DO_OUT5,DO_OUT2,DO_OUT3,DO_OUT4,DO_OUT7,DO_PWM1,-1}, //22 FB_V3.1_22_12
  75. // {DO_PWM0,DO_PWM3,DO_OUT0,DO_OUT1,DO_OUT6,DO_OUT5,DO_OUT2,DO_OUT3,DO_OUT4,DO_OUT7,DO_PWM1,-1}, //23 FB_V3D1_22_12
  76. // {DO_OUT2,DO_OUT3,DO_PWM2,DO_PWM0,DO_PWM3,DO_OUT0,DO_OUT1,DO_OUT6,DO_OUT5,DO_OUT7,DO_PWM1,-1},//24 V4_D_30_12
  77. };
  78. // 采样板索引和插槽的对应关系
  79. const int g_ac_index_to_slot[EQU_SLOT_AC_NUM] = {1};
  80. // 采样板起始槽位,每种机箱不一样。
  81. u32 g_ac_slot_begin;
  82. // 记录频率对应ui通道的索引值
  83. int g_ui_freq[CFG_FREQ_NUM];
  84. /*------------------------------ 函数声明 -------------------------------------
  85. */
  86. int equ_slot_config_di(int slot);
  87. int equ_slot_config_do(int slot);
  88. unsigned int chDi;
  89. unsigned int change_di_ch(unsigned int di)
  90. {
  91. register int i,rts=0;
  92. #if 0
  93. static int di_bak;
  94. if(di_bak!=di)
  95. {
  96. rt_printf_time("change_di_ch di=%x \r\n",di);
  97. di_bak=di;
  98. }
  99. #endif
  100. for(i=0;i<EQU_DB_YX_NUM;i++)
  101. {
  102. if(g_change_di_index[g_brd_type_kz][i]!=0 && g_change_di_index[g_brd_type_kz][i]<=EQU_DB_YX_NUM)
  103. {
  104. if(di>>(g_change_di_index[g_brd_type_kz][i]-1)&0x01)
  105. rts|= (1<<i);
  106. }
  107. }
  108. //rt_printf("%d %d 。。",rts,g_brd_type_kz);
  109. return rts;
  110. }
  111. /*------------------------------ 外部函数 -------------------------------------
  112. 外部函数供其它实体文件引用,必须仔细检查传入参数的合法性.
  113. */
  114. int equ_config_di(void)
  115. {
  116. u32 i;
  117. struct equ_config_di *ecd;
  118. memset(&g_di_st,0,sizeof(g_di_st));
  119. // 用户配置的保持时间、拥有者、类型
  120. ecd = g_equ_config_di;
  121. for(i=0;i<g_equ_config->di_num;i++)
  122. {
  123. // 开入扫描在156us中断,通过以下算法,得出对应不同防抖延时的最佳动态转换系数,理论误差为156us左右
  124. //g_di_st[ecd->slot][ecd->index].tm_filter = ecd->filter_time * 1000 / 156;
  125. if(ecd->filter_time>=10000)
  126. {
  127. g_di_st[ecd->slot][ecd->index].tm_filter = ecd->filter_time * 3200 / 500;
  128. g_di_st[ecd->slot][ecd->index].tm_filter -= (g_di_st[ecd->slot][ecd->index].tm_filter/10000);
  129. }
  130. else
  131. {
  132. g_di_st[ecd->slot][ecd->index].tm_filter = ecd->filter_time * 3200 / 500;
  133. }
  134. //rt_printf("filter_time[%d]=%d\r\n",i,ecd->filter_time);
  135. g_di_st[ecd->slot][ecd->index].owner = ecd->owner;
  136. g_di_st[ecd->slot][ecd->index].type = ecd->type;
  137. ecd++;
  138. }
  139. return 0;
  140. }
  141. int equ_config_do(void)
  142. {
  143. u32 i,index;
  144. struct equ_config_do *ecd;
  145. memset(&g_do_st,0,sizeof(struct do_struct)*14);
  146. // 用户配置的保持时间
  147. ecd = g_equ_config_do;
  148. for(i=0;i<g_equ_config->do_num;i++)
  149. {
  150. if(ecd->slot == EQU_SLOT_KZ)
  151. {
  152. index = equ_get_do_channel(ecd->index);
  153. g_do_st[index].us_keep = (u32)ecd->time_pulse;
  154. g_do_st[index].us_keep *= 1000; //ms转换为us
  155. }
  156. ecd++;
  157. }
  158. return 0;
  159. }
  160. int equ_config_di_yd(void)
  161. {
  162. u32 i;
  163. struct equ_config_di *ecd;
  164. // 用户配置的保持时间、拥有者、类型
  165. ecd = g_equ_config_di;
  166. for(i=0;i<g_equ_config->di_num;i++)
  167. {
  168. // 开入扫描在156us中断,通过以下算法,得出对应不同防抖延时的最佳动态转换系数,理论误差为156us左右
  169. g_di_st[ecd->slot][ecd->index].tm_filter = (u32)tRunPara.wYXFD * 1000 / 156;
  170. ecd++;
  171. }
  172. return 0;
  173. }
  174. int equ_config_do_yd(void)
  175. {
  176. #if 0
  177. int i,index;
  178. struct equ_config_do *ecd;
  179. // 用户配置的保持时间
  180. ecd = g_equ_config_do;
  181. for(i=0;i<g_equ_config->do_num;i++)
  182. {
  183. u32 dotime=(u32)ecd->time_pulse;
  184. if(ecd->slot == EQU_SLOT_KZ)
  185. {
  186. // 如果定值参数中设置了分闸时间,覆盖
  187. if(ecd->owner&&((ecd->type == (SW_DO_FZ+1))||(ecd->type == (SW_DO_BHT+1))||(ecd->type == (SW_DO_YKT+1))))
  188. {
  189. if(pRunSet->bTT_RmtPara)
  190. {
  191. dotime=tRunPara.wFZMC;
  192. }
  193. }
  194. // 如果定值参数中设置了合闸时间,覆盖
  195. if(ecd->owner&&((ecd->type == (SW_DO_HZ+1))||(ecd->type == (SW_DO_BHH+1))||(ecd->type == (SW_DO_YKH+1))))
  196. {
  197. if(pRunSet->bTT_RmtPara)
  198. {
  199. dotime=tRunPara.wHZMC;
  200. }
  201. }
  202. index = equ_get_do_channel(ecd->index);
  203. g_do_st[index].us_keep = (u32)dotime;
  204. g_do_st[index].us_keep *= 1000; //ms转换为us
  205. }
  206. ecd++;
  207. }
  208. #endif
  209. return 0;
  210. }
  211. int equ_init_later(void)
  212. {
  213. u32 i;
  214. int ui,index;
  215. //TODO:need to check g_brd_type_kz how to work
  216. g_brd_type_kz = g_board_info[EQU_SLOT_KZ].type - BOARD_TYPE_DFTU_KC00;
  217. if(g_brd_type_kz >= BOARD_TYPE_KZ_NUM)
  218. {
  219. rt_printf("控制板类型错误(g_brd_type_kz=%lu).\r\n",g_brd_type_kz);
  220. g_brd_type_kz = 0;
  221. return -1;
  222. }
  223. //通道取反,重新初始化一下,在equ.c中初始化过,但由于g_brd_type_kz未初始化,取反是错误的
  224. memset(g_equ_adc_inv,0,sizeof(g_equ_adc_inv));
  225. g_equ_adc_inv_num=0;
  226. memset(g_equ_adc_config,0,sizeof(g_equ_adc_config)); //jack.liu20200917 g_equ_adc_config初始化
  227. for(i=0; i<g_equ_config->ac_num; i++)
  228. {
  229. u32 adc;
  230. adc = equ_get_ac_channel(g_equ_config_ac[i].slot,g_equ_config_ac[i].index);
  231. if (adc<CFG_ADC_CHANNEL)
  232. {
  233. // 是否配置
  234. if(g_equ_config_ac[i].type)
  235. {
  236. g_equ_adc_config[adc] = 1;
  237. }
  238. // 是否取反
  239. if (g_equ_config_ac[i].is_ct_inverse)
  240. {
  241. g_equ_adc_inv[g_equ_adc_inv_num++] = adc;
  242. }
  243. }
  244. }
  245. // 获取频率所对应的UI通道
  246. // 频率采样对应ADC通道为1.
  247. for(index=0;index<EQU_SLOT_AC_CHN;index++)
  248. {
  249. if(g_ac_index[g_brd_type_kz][index] == 1) // 频率0对应通道为 1
  250. {
  251. break;
  252. }
  253. }
  254. g_ui_freq[0] = UI_NUM;
  255. for(i=0; i< g_equ_config->ac_num; i++)
  256. {
  257. // 频率通道必须是配置了的公共电压类型
  258. if(g_equ_config_ac[i].type == 0 || g_equ_config_ac[i].owner != 0)
  259. {
  260. continue;
  261. }
  262. ui = g_equ_config_ac[i].type -1;
  263. if(ui >= PUB_AC_NUM)
  264. {
  265. continue;
  266. }
  267. if(g_equ_config_ac[i].slot == EQU_SLOT_KZ && g_equ_config_ac[i].index == index)
  268. {
  269. g_ui_freq[0] = ui;
  270. }
  271. }
  272. // 获取频率所对应的UI通道
  273. // 频率1采样对应ADC通道为12.
  274. for(index=0;index<EQU_SLOT_AC_CHN;index++)
  275. {
  276. if(g_ac_index[g_brd_type_kz][index] == 7) // 频率1对应通道为 7
  277. {
  278. break;
  279. }
  280. }
  281. g_ui_freq[1] = UI_NUM;
  282. for(i=0; i< g_equ_config->ac_num; i++)
  283. {
  284. // 频率通道必须是配置了的公共电压类型
  285. if(g_equ_config_ac[i].type == 0 || g_equ_config_ac[i].owner != 0)
  286. {
  287. continue;
  288. }
  289. ui = g_equ_config_ac[i].type -1;
  290. if(ui >= PUB_AC_NUM)
  291. {
  292. continue;
  293. }
  294. if(g_equ_config_ac[i].slot == EQU_SLOT_KZ && g_equ_config_ac[i].index == index)
  295. {
  296. g_ui_freq[1] = ui;
  297. }
  298. }
  299. // 采样板起始槽位
  300. g_ac_slot_begin = EQU_SLOT_AC_BEGIN;
  301. // 初始化开入开出
  302. equ_config_do();
  303. equ_config_di();
  304. return 0;
  305. }
  306. /******************************************************************************
  307. 函数名称: equ_board_info_update
  308. 函数版本: 01.01
  309. 创建作者: sunxi
  310. 创建日期: 2013-08-08
  311. 函数说明: 接收到子板的对时应答帧后,更新子板信息
  312. 参数说明:
  313. can_bus 从哪条can总线接收到的帧。
  314. frame 接收帧的buf指针
  315. 返回值:
  316. 0: 成功
  317. 其它: 失败
  318. 修改记录:
  319. */
  320. int equ_board_info_update(int can_bus,u8 * frame)
  321. {
  322. struct can_frame_head *cfh;
  323. struct board_info_frame *bif;
  324. struct board_info *bi;
  325. // 检查帧内容
  326. cfh = (struct can_frame_head *)frame;
  327. #ifdef CAN_SLAVE_BOARD
  328. if(cfh->src >= (EQU_SLOT_NUM_MAX+CAN_BOARD_NUM))
  329. #else
  330. if(cfh->src >= EQU_SLOT_NUM_MAX)
  331. #endif
  332. {
  333. return -1;
  334. }
  335. if(cfh->len != 8)
  336. {
  337. return -2;
  338. }
  339. // 比较子板类型
  340. bi = &g_board_info[cfh->src];
  341. bif = (struct board_info_frame *)(frame + sizeof(cfh));
  342. if(bif->type != bi->type)
  343. {
  344. // rt_printf("board type error(no=%d,bi_type=%d,gbi_type=%d)\r\n",cfh->src,bif->type,bi->type);
  345. // print_mem("frame",frame,16);
  346. return -3;
  347. }
  348. // 得到子板信息
  349. bi->status = bif->status;
  350. bi->errcode = bif->errcode;
  351. bi->crc = bif->crc;
  352. bi->version = bif->version;
  353. //rt_printf("%02d\t%02d\t%02d\t%04x\t%08x\t",bi->type,bi->status,bi->errcode,bi->crc,bi->version);
  354. // 得到子板时间
  355. clk_time_get(&bi->update_time);
  356. bi->us0 = ustimer_get_origin();
  357. bi->is_ok = 1;
  358. bi->can_bus = can_bus;
  359. return 0;
  360. }
  361. /******************************************************************************
  362. 函数名称: equ_ac_channel_is_ok
  363. 函数版本: 01.01
  364. 创建作者: sunxi
  365. 创建日期: 2013-08-08
  366. 函数说明: 得到插槽中子板的模拟量通道对应的ADC采样通道。
  367. 参数说明:
  368. slot 插槽索引号
  369. index 子板上模拟量通道索引号
  370. 返回值: ADC采样通道索引号
  371. 修改记录:
  372. */
  373. int equ_ac_channel_is_ok(u32 index)
  374. {
  375. // 检查参数
  376. if(index >= CFG_ADC_CHANNEL)
  377. {
  378. return 0;
  379. }
  380. // 板卡不能插拔,直接返回ok
  381. return 1;
  382. // return g_ac_slot_is_ok[index/EQU_SLOT_AC_CHN];
  383. }
  384. /******************************************************************************
  385. 函数名称: equ_get_ac_channel
  386. 函数版本: 01.01
  387. 创建作者: sunxi
  388. 创建日期: 2013-08-08
  389. 函数说明: 得到插槽中子板的模拟量通道对应的ADC采样通道。
  390. 参数说明:
  391. slot 插槽索引号
  392. index 子板上模拟量通道索引号
  393. 返回值: ADC采样通道索引号
  394. 修改记录:
  395. */
  396. int equ_get_ac_channel(u32 slot,u32 index)
  397. {
  398. // 检查参数
  399. if(slot != EQU_SLOT_KZ)
  400. {
  401. return -1;
  402. }
  403. if(index >= 16)
  404. {
  405. return -2;
  406. }
  407. return g_ac_index[g_brd_type_kz][index];
  408. }
  409. /******************************************************************************
  410. 函数名称: equ_get_ac_slot
  411. 函数版本: 01.01
  412. 创建作者: xxxxxx
  413. 创建日期: 2014-10-09
  414. 函数说明: 得到采样通道对应的板卡
  415. 参数说明:
  416. owner 归属公共、开关
  417. type 采样类型
  418. 返回值: ADC采样通道索引号
  419. 修改记录:
  420. */
  421. int equ_get_ac_slot(u32 owner, u32 type)
  422. {
  423. u32 no;
  424. if (owner)
  425. {
  426. no = g_sw[owner].ac_cfg_index[type];
  427. }
  428. else
  429. {
  430. no = g_sw_pub.ac_cfg_index[type];
  431. }
  432. return g_equ_config_ac[no].slot;
  433. }
  434. /******************************************************************************
  435. 函数名称: equ_ac_index_to_slot
  436. 函数版本: 01.01
  437. 创建作者: sunxi
  438. 创建日期: 2013-08-08
  439. 函数说明: 将采样板索引号(和ADC通道号对应)转换为插槽号。
  440. 参数说明:
  441. ac_index 采样板索引号
  442. 返回值: 插槽号
  443. 修改记录:
  444. */
  445. int equ_ac_index_to_slot(int ac_index)
  446. {
  447. if((u32)ac_index >= EQU_SLOT_AC_NUM)
  448. {
  449. return 0;
  450. }
  451. return g_ac_index_to_slot[ac_index];
  452. }
  453. /******************************************************************************
  454. 函数名称: equ_slot_config_do
  455. 函数版本: 01.01
  456. 创建作者: sunxi
  457. 创建日期: 2013-08-08
  458. 函数说明: 配置子板上的开出资源
  459. 参数说明:
  460. slot 插槽索引号
  461. 返回值: 插槽号
  462. 0: 成功
  463. 其它: 失败
  464. 修改记录:
  465. */
  466. int equ_get_do_channel(u32 index)
  467. {
  468. return g_do_index[g_brd_type_kz][index];
  469. }
  470. /******************************************************************************
  471. 函数名称: equ_slot_config_di
  472. 函数版本: 01.01
  473. 创建作者: xxxxxx
  474. 创建日期: 2014-04-08
  475. 函数说明: 配置子板上的开入资源
  476. 参数说明:
  477. slot 插槽索引号
  478. 返回值: 插槽号
  479. 0: 成功
  480. 其它: 失败
  481. 修改记录:
  482. */
  483. /*------------------------------ 内部函数 -------------------------------------
  484. 内部函数以下划线‘_’开头,不需要检查参数的合法性.
  485. */
  486. /*------------------------------ 测试函数 -------------------------------------
  487. 一个实体文件必须带一个本模块的测试函数来进行单元测试,如果的确不方便在本模块中
  488. 进行单元测试,必须在此注明实际的测试位置(例如在哪个实体文件中使用哪个测试函数).
  489. */
  490. /*------------------------------ 文件结束 -------------------------------------
  491. */