Перейти к содержанию
Переключить боковую панель
Экзомех
Поиск
Создать учётную запись
Войти
Персональные инструменты
Создать учётную запись
Войти
Страницы для неавторизованных редакторов
узнать больше
Вклад
Обсуждение
Навигация
Заглавная страница
Свежие правки
Категории
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице
Редактирование:
Mindset
(раздел)
Статья
Обсуждение
русский
Читать
Править
Править код
История
Ещё
Читать
Править
Править код
История
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
=== Example === Here is an example program using the inkGearStreamParser API. It is very similar to the example program described above, simply printing received Data Values to stdout: <nowiki>#</nowiki>include <stdio.h> <nowiki>#</nowiki>include "ThinkGearStreamParser.h" /** <nowiki>*</nowiki> 1) Function which acts on the value[] bytes of each ThinkGear DataRow as it is received. <nowiki>*</nowiki>/ void handleDataValueFunc( unsigned char extendedCodeLevel, unsigned char code, unsigned char valueLength, const unsigned char *value, void *customData ) { if( extendedCodeLevel == 0 ) { switch( code ) { /* [CODE]: ATTENTION eSense */ case( 0x04 ): printf( "Attention Level: %d\n", value[0] & 0xFF ); break; /* [CODE]: MEDITATION eSense */ case( 0x05 ): printf( "Meditation Level: %d\n", value[0] & 0xFF ); break; /* Other [CODE]s */ default: printf( "EXCODE level: %d CODE: 0x%02X vLength: %d\n", extendedCodeLevel, code, valueLength ); printf( "Data value(s):" ); for( i=0; i<valueLength; i++ ) printf( " %02X", value[i] & 0xFF ); printf( "\n" ); } } } /** <nowiki>*</nowiki> Program which reads ThinkGear Data Values from a COM port. <nowiki>*</nowiki>/ int main( int argc, char **argv ) { /* 2) Initialize ThinkGear stream parser */ ThinkGearStreamParser parser; THINKGEAR_initParser( &parser, PARSER_TYPE_PACKETS, handleDataValueFunc, NULL ); /* TODO: Initialize 'stream' here to read from a serial data <nowiki>*</nowiki> stream, or whatever stream source is appropriate for your <nowiki>*</nowiki> application. See documentation for "Serial I/O" for your <nowiki>*</nowiki> platform for details. <nowiki>*</nowiki>/ FILE *stream = fopen( "COM4", "r" ); /* 3) Stuff each byte from the stream into the parser. Every time <nowiki>*</nowiki> a Data Value is received, handleDataValueFunc() is called. <nowiki>*</nowiki>/ unsigned char streamByte; while( 1 ) { fread( &streamByte, 1, stream ); THINKGEAR_parseByte( &parser, streamByte ); } } A few things to note: • e handleDataValueFunc() callback should be implemented to execute quickly, so as not to block the thread which is reading from the data stream. A more robust (and useful) program would probably spin off the thread which reads from the data stream and calls handleDataValueFunc(), and dene handleDataValueFunc() to simply save the Data Values it receives, while the main thread actually uses the saved values for displaying to screen, controlling a game, etc. reading is outside the scope of this manual. • e code for opening a serial communication port data stream for reading varies by operating system and platform. Typically, it is very similar to opening a normal le for reading. Serial communication is outside the scope of this manual, so please consult the documentation for "Serial I/O" for your platform for details. As an alternative, you may use the inkGear Communications Driver (TGCD) API, which can take care of opening and reading from serial I/O streams on some platforms for you. Use of that interface is described in the developer\_ tools\_2.1\_development\_guide and TGCD API documentation. • Most error handling has been omitted from the above code for clarity. A properly written program should check all error codes returned by functions. Please consult the ThinkGearStream- Parser.h header le for details about function parameters and return values.
Описание изменений:
Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Creative Commons Zero (общественное достояние) (см.
Экзомех:Авторские права
). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!
Отменить
Справка по редактированию
(в новом окне)