由于公司新上的DTV产品线标准多,型号多,产量大,最重要的是经验还处于学习总结阶段,所以根据设备供应商的建议建了个中央信号源,专门购买了个 机柜放在中心机房,采购了一批Dectek的DTA-115卡来作为DVB-C,DVB-T,ATSC和ISDB-T的信号源。这样就带来了管理的麻烦, 需要改点什么必须使用远程桌面管理,这样换个session就看不见管理界面了,对多用户管理造成不便,每台公共机只插了两块卡,普通用户根本不知道想更 改某块卡的参数的时候需要连接哪台公共机,并且把远程桌面开放给普通用户还会带来安全等问题。
所以就考虑结合公司实际情况,自己写一套 DTA-115的管理程序,利用现有已实现的EOfficeAgent中的IPMSG模块进行管理,这样用户只需要使用飞鸽给EOfficeAgent发 送一条命令,相应的设置就会立刻更改,而不需要知道自己想更改的设置所在的位置。
这段代码是控制DTA-115的demo,测试已经可以跑得很好了。抛砖引玉。
可惜,CMMB那块烂卡,没办法这么做。
1
namespace
DTA115_test
2 {
3 class Program
4 {
5 static DtDevice Dvc0=new DtDevice();
6 const Int32 BufSize = 1 << 16;
7 const Int32 IniLoad = (1 << 20) * 8;
8 static void Main(string[] args)
9 {
10 try
11 {
12 if (Dvc0.AttachToType(115, 0) == DTAPI_RESULT.OK)
13 {
14 FileInfo TSFile = new FileInfo(@"R:\Video_Teletext.trp");
15 FileStream TSStream = TSFile.OpenRead();
16 DtOutpChannel TsOut = new DtOutpChannel();
17 if (TsOut.AttachToPort(Dvc0, 2) == DTAPI_RESULT.OK)
18 {
19 Console.WriteLine("OK!");
20 TsOut.SetTxMode(DTAPI.TXMODE_188, 1);
21 //DVB-T工作模式
22 TsOut.SetModControl(DTAPI.MOD_DVBT, DTAPI.MOD_7_8,
23 DTAPI.MOD_DVBT_8MHZ | DTAPI.MOD_DVBT_8K
24 | DTAPI.MOD_DVBT_QAM64 | DTAPI.MOD_DVBT_G_1_4,
25 -1);
26 //初始化FIFO
27 TsOut.SetTxControl(DTAPI.TXCTRL_HOLD);
28 byte[] Buf = new byte[BufSize];
29 Int32 Load = 0;
30 int NumBytes = TSStream.Read(Buf, 0, BufSize);
31 while ((Load < IniLoad) && (NumBytes != 0))
32 {
33 TsOut.Write(Buf, NumBytes);
34 Load += NumBytes;
35 NumBytes = TSStream.Read(Buf, 0, BufSize);
36 }
37 //设置频点
38 TsOut.SetRfControl(698000000);
39 //设置衰减
40 TsOut.SetOutputLevel(-180);
41 //开始发射
42 TsOut.SetTxControl(DTAPI.TXCTRL_SEND);
43 while (NumBytes != 0)
44 {
45 TsOut.Write(Buf, NumBytes);
46 NumBytes = TSStream.Read(Buf, 0, BufSize);
47 }
48 //卸载设备
49 TsOut.Detach(DTAPI.INSTANT_DETACH);
50 }
51 }
52 }
53 catch (Exception e)
54 {
55 Console.Write(e.Message);
56 }
57 }
58 }
59}
60
2 {
3 class Program
4 {
5 static DtDevice Dvc0=new DtDevice();
6 const Int32 BufSize = 1 << 16;
7 const Int32 IniLoad = (1 << 20) * 8;
8 static void Main(string[] args)
9 {
10 try
11 {
12 if (Dvc0.AttachToType(115, 0) == DTAPI_RESULT.OK)
13 {
14 FileInfo TSFile = new FileInfo(@"R:\Video_Teletext.trp");
15 FileStream TSStream = TSFile.OpenRead();
16 DtOutpChannel TsOut = new DtOutpChannel();
17 if (TsOut.AttachToPort(Dvc0, 2) == DTAPI_RESULT.OK)
18 {
19 Console.WriteLine("OK!");
20 TsOut.SetTxMode(DTAPI.TXMODE_188, 1);
21 //DVB-T工作模式
22 TsOut.SetModControl(DTAPI.MOD_DVBT, DTAPI.MOD_7_8,
23 DTAPI.MOD_DVBT_8MHZ | DTAPI.MOD_DVBT_8K
24 | DTAPI.MOD_DVBT_QAM64 | DTAPI.MOD_DVBT_G_1_4,
25 -1);
26 //初始化FIFO
27 TsOut.SetTxControl(DTAPI.TXCTRL_HOLD);
28 byte[] Buf = new byte[BufSize];
29 Int32 Load = 0;
30 int NumBytes = TSStream.Read(Buf, 0, BufSize);
31 while ((Load < IniLoad) && (NumBytes != 0))
32 {
33 TsOut.Write(Buf, NumBytes);
34 Load += NumBytes;
35 NumBytes = TSStream.Read(Buf, 0, BufSize);
36 }
37 //设置频点
38 TsOut.SetRfControl(698000000);
39 //设置衰减
40 TsOut.SetOutputLevel(-180);
41 //开始发射
42 TsOut.SetTxControl(DTAPI.TXCTRL_SEND);
43 while (NumBytes != 0)
44 {
45 TsOut.Write(Buf, NumBytes);
46 NumBytes = TSStream.Read(Buf, 0, BufSize);
47 }
48 //卸载设备
49 TsOut.Detach(DTAPI.INSTANT_DETACH);
50 }
51 }
52 }
53 catch (Exception e)
54 {
55 Console.Write(e.Message);
56 }
57 }
58 }
59}
60