roboforum.ru

Технический форум по робототехнике.

[liborfa.so] Pure C API

Правила форума
Правила раздела OpenRobotics

[liborfa.so] Pure C API

Vooon » 27 июл 2009, 22:53

Библиотека работает как под linux, так и под windows.

Лицензия: MIT
Репозиторий исходного кода: http://hg.vehq.ru/liborfa/
Архив последней версии: http://hg.vehq.ru/liborfa/archive/tip.zip

Для сборки требуется CMake версии 2.6 или старше (очень удобная система для кроссплатформенной разработки).

refman.pdf
Документация.
(1.62 МиБ) Скачиваний: 10


Проверка работы на висте 32.
Код: Выделить всёРазвернуть
PS C:\Users\Vovan> C:\Users\Vovan\lsorfa.exe
Usage: C:\Users\Vovan\lsorfa.exe /dev/ttyS0
PS C:\Users\Vovan> C:\Users\Vovan\lsorfa.exe COM40
open_and_configure: can't open device "COM40": ═х єфрхЄё  эрщЄш єърчрээ√щ Їрщы.

Can't open the port: COM40
PS C:\Users\Vovan> C:\Users\Vovan\lsorfa.exe \\.\COM40
Protocol: V1.0

   UID Version Start Count
------ ------- ----- -----
0x0000     1.0  0x00     1
0x0020     1.0  0x02     8
0x0001     1.0  0x0A     2
0x0060     1.0  0x0C     4
0x0031     1.1  0x10     2
0x0040     1.0  0x12     2
0xFF00     1.0  0x14     1
orfa_close() returned: 1
PS C:\Users\Vovan> notepad lsorfa-runlog.txt



Начал потихоньку писать чисто сишную библиотеку.
По сути это минимальная обертка над ком-портом.

Пока разбираюсь как бы лучше интерфейс написать, нужно ваше мнение.
Вот заготовка:
/* текст удален */

Re: [liborfa.so] Pure C API

Angel71 » 28 июл 2009, 02:49

:oops: всякие штуки для определения версии вроде не особо нужны.
и по мелочам:
эта обвёртка вообще нужна или просто хочется?
зачем i2c добавлена?
почему не с++?
для каких контроллеров и компиляторов или без привязки?

Re: [liborfa.so] Pure C API

Vooon » 28 июл 2009, 16:13

Да, версия пока не очень нужна, но в протоколе есть.
К тому же я собираюсь выкинуть REGIO (R/W) из протокола версии 1.1.
Эта библиотека будет поддерживать протокол 1.1 (это урезанный 1.0, более строгий, но совместимый).

> эта обвёртка вообще нужна или просто хочется?
Главная задача — парсинг входного потока, формирование запросов просто бонус.

> зачем i2c добавлена?
Это же основа протокола.

> почему не с++?
Потому что гладиолус.

> для каких контроллеров и компиляторов или без привязки?
Нет привязки к контроллеру, на нем просто должна быть ORFA собранная с libserialgate.a.
Это серверная часть, и в первую очередь пишу под линукс, потом портирую.

Re: [liborfa.so] Pure C API

Angel71 » 29 июл 2009, 01:12

:crazy: фреймворк... понятно. :wink: исчезаю

Re: [liborfa.so] Pure C API

Vooon » 29 июл 2009, 05:24

При чем тут фреймворк? Обычная библиотека...

/* портировал парсер из pyor,
* захостил http://hg.vehq.ru/liborfa/
* (что-то админка реп поломалась, и странный трейс показывет)
*/

Re: [liborfa.so] Pure C API

Angel71 » 29 июл 2009, 05:44

http://ru.wikipedia.org/wiki/Фреймворк
в данном случае ORFA это фреймворк :) я уже заметил, в какой ветке этот топик, исчезааааааю

Re: [liborfa.so] Pure C API

Vooon » 29 июл 2009, 09:19

Я так и не увидел где это библиотека переросла во фреймворк.
Вот ORFA да, фреймворк: бери, пиши модули, а каркас уже готовый.
А это только библиотека связи, не больше. Хотя в нее и будет входить интроспектор (упрощенный, в питонячей либе я его излишне усложнил), но только потому, что без него обойтись нельзя — это часть ядра.
Ты же не назовешь библиотеку сокетов фреймворком? :)

Добавлено спустя 2 минуты 47 секунд:
Ой, опять я невнимательно читаю :)

Re: [liborfa.so] Pure C API

Сергей » 30 июл 2009, 12:38

ай ай яй
срочно переделать
Код: Выделить всёРазвернуть
static inline void orfa_free_reply(orfareply *reply) {
   free(reply->data);
   free(reply);
}

вот в это
Код: Выделить всёРазвернуть
static inline void orfa_free_reply( orfareply **reply )
{
    if( !reply )
        return;

    if( !(*reply) )
        return;

    if( *reply->data )
        free( *reply->data );
   
    free( *reply );

    *reply = NULL;
}

Re: [liborfa.so] Pure C API

Виталий » 30 июл 2009, 12:54

Сергей, в твоем коде тоже ошибка. :D

Re: [liborfa.so] Pure C API

Сергей » 30 июл 2009, 13:04

Поправил :)

Re: [liborfa.so] Pure C API

blindman » 30 июл 2009, 13:30

Сергей писал(а):reply = NULL;

А смысл?

Re: [liborfa.so] Pure C API

boez » 30 июл 2009, 13:41

может подразумевалось *reply = NULL ? Тогда смысл есть

Re: [liborfa.so] Pure C API

Vooon » 30 июл 2009, 14:19

И к чему такие сложности?
Да и сейчас того кода уже нет.

Re: [liborfa.so] Pure C API

Сергей » 30 июл 2009, 17:04

boez писал(а):может подразумевалось *reply = NULL ? Тогда смысл есть

да, описался просто. поправил.
Vooon, где ты тут сложности увидел?

Re: [liborfa.so] Pure C API

Vooon » 30 июл 2009, 17:41

Посмотри последнюю версию по ссылке плиз.

Я просто не понимаю зачем передавать указатель на указатель, когда мне нужно освободить память занимаемую ответом.
Для этого же достаточно просто указателя.

И сейчас я убрал «магию» с указателем на данные. Т.к. максимальный размер ответа известен заменил *data на data[REPLY_MAX].


cron
Rambler\'s Top100 Mail.ru counter