Форум программистов, компьютерный форум CyberForum.ru

Управление широковещательным оборудованием - C++

Восстановить пароль Регистрация
 
kazhuravlev
Сообщений: n/a
28.05.2011, 16:15     Управление широковещательным оборудованием #1
Работаю инженером на телевидении. Контролирую работу широковещательного пред-эфирного, пост-эфирного и эфирного оборудования. Для управления работой некоторых устройств используются дорогие и малоэффективные программы с ограниченной поддержкой протокола управления. В руки попало описание протокола, и примеры реализации его на языке C ( или C++, мне сложно определить ). Встала задача написать программу, способную контролировать работу данного устройства. Так как я являюсь Python/Java программистом, и только догадываюсь о том что написано в коде ниже, я прошу вас помочь мне понять смысл действий, описанных в данном коде. Если кто-либо может в точности перевести это на Python, и оно будет работать - переведу денежку на WebMoney.
С помощью описанной ниже функции remote_send(), по идее должна осуществляться передача команды вышеописанному устройству ( думаю не имеет особого смысла рассказывать о его предназначении ).

C++
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#define STX0 0x002
#define STX1 0x003
#define ACK0 0x004
#define ACK1 0x005
#define NAK 0x007
char stx = STX0;
const UINT lstab[] =
{
0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0,
0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741,
0x0500, 0xc5c1, 0xc481, 0x0440
};
const UINT mstab[] =
{
0x0000, 0xcc01, 0xd801, 0x1400, 0xf001, 0x3c00,
0x2800, 0xe401, 0xa001, 0x6c00, 0x7800, 0xb401,
0x5000, 0x9c01, 0x8801, 0x4400
};
void do_crc(INT8 ch, UINT16 * crcptr)
{
UINT tmp;
 
tmp = *crcptr ^ ch;
*crcptr = mstab[(tmp>>4) & 0xf] ^ lstab[tmp&0xf] ^ ((*crcptr) >> 8);
}
void remote_send(char * format,...)
{
UINT16 rem_crc = 0;
INT ch;
char message[128];
char* messageptr = (char*)message;
va_list argptr;
va_start(argptr, format);
vsprintf(message, format, argptr);
va_end(argptr);
rem_send_char(stx);
while((ch = *messageptr++) != 0)
{
rem_send_char(ch);
do_crc(ch, &rem_crc);
}
rem_send_char(':');
do_crc(':', &rem_crc);
rem_send_char(rem_crc & 0xff);
rem_send_char(rem_crc >> 8);
if (stx == STX0)
stx = STX1;
else
stx = STX0;
}


Для примера приведу пример использования функции remote_send() в обертке:

C++
1
2
3
4
5
6
7
8
9
// плавно скрыть/показать видео слой
// где 1( единица ) - номер команды ( длинна команды до 3 символов ),
// Layer - один из четырех слоев,
// Up - одно из двух значений( 1 - поднять слой, 2 - опустить)
 
void FadeKeyer(int Layer, bool Up) 
 {
   remote_send("1%x %d", Layer, Up ? 1:0); 
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2011, 16:15     Управление широковещательным оборудованием
Посмотрите здесь:

Управление USB C++
Управление временем C++
C++ Управление устройствами
Управление памятью C++
C++ Управление строками
C++ Управление стрелками C++
Управление змейкой C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 09:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru