Архив рубрики Air

Статья о создании расширений на Хабре

Потратив 2 дня, добился создания рабочего расширения на PureBasic(кроссплатформенный язык). Статья лежит здесь http://habrahabr.ru/post/147089/.

Скачать код и рабочую версию можно здесь http://code.google.com/p/purebasic-extension-for-adobe-air/

Реклама

, , ,

Оставить комментарий

6. Air extensions: завершающий этап

Сегодня весь код и расширения и тестового приложения был перенесен на Google Code: http://code.google.com/p/air-hid-usb/.



DemoHID Windows

DemoHID Windows



DemoHID Mac OS X

DemoHID Mac OS X

, , , ,

1 комментарий

5. Air extensions: работа с usb. Demo Mac OS X 10.6

Подправил билды, настроил XCode и теперь расширение работает и на маках. Посмотреть можно тут

, , , ,

Оставить комментарий

4. Air extensions: разработка с помощью MinGW

Настройка MS Visual Studio не самое интересное занятие, кроме нее может понадобиться установка Windows Driver Kit (WDK). Настройка проектов, солюшенов, автоматических билдов достаточно сложное занятие. Поэтому посмотрев на HIDAPI, я решил тоже использовать  MinGW (что такое MinGW можно почитать тут).

Краткая инструкция по созданию расширений с помощью MinGW:

Building with MinGW

1. Setup MinGW: HOWTOforMinGW
2. Download MinGW Utils (mingw-util-0.3): mingw-utils
3. Create def-file using reimp from utils: reimp -d FlashRuntimeExtensions.lib
4. Rename generated def file(«Adobe Air» or similar) to FlashRuntimeExtensions.def
5. Create .a library from FlashRuntimeExtensions.lib(see Air SDK lib folder):
dlltool -d FlashRuntimeExtensions.def -l FlashRuntimeExtensions.a
6. Fix FlashRuntimeExtensions.h or #undef WIN32

#ifdef __MINGW32__
    #include <stdint.h>
#else
    #ifdef WIN32
          typedef unsigned __int32	uint32_t;
          typedef unsigned __int8		uint8_t;
          typedef          __int32	int32_t;
    #else
          #include <stdint.h>
    #endif
#endif

7. Now you can compile dll:
g++ -Wall -shared Extension.cpp -o Extension.dll -L. -lFlashRuntimeExtensions -static-libgcc -static-libstdc++
8. Read DevelopingActionScriptExtensionsForAdobeAIR.pdf

Example:

Extension.h:

//air3.0\include\
#include "FlashRuntimeExtensions.h"

#ifdef __cplusplus
extern "C" {
#endif

__declspec(dllexport) void initializer(void** extData, FREContextInitializer* ctxInitializer, FREContextFinalizer* ctxFinalizer);
__declspec(dllexport) void finalizer(void* extData);

#ifdef __cplusplus
}
#endif

Extension.cpp:

#include <malloc.h>
#include "Extension.h"
#ifdef __cplusplus
extern "C" {
#endif
    //will return Boolean true to AS3 side
    FREObject test(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
    {
        bool value = true;
        FREObject resultObject;
        FRENewObjectFromBool(value, &resultObject);
        return resultObject;
    }

    /*
    * usage:
    * var context:ExtensionContext = ExtensionContext.createExtensionContext("AnyContext", null);
    * var result:Boolean = context.call('test') as Boolean;
    */
    void contextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctions, const FRENamedFunction** functions)
    {
        *numFunctions = 1;

        FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * (*numFunctions));

        func[0].name = (const uint8_t*) "test";
        func[0].functionData = NULL;
        func[0].function = &test;

        *functions = func;
    }

    void contextFinalizer(FREContext ctx)
    {
        return;
    }

    void initializer(void** extData, FREContextInitializer* ctxInitializer, FREContextFinalizer* ctxFinalizer)
    {
        *ctxInitializer = &contextInitializer;
        *ctxFinalizer = &contextFinalizer;
    }

    //The runtime calls this function when it unloads an extension. However, the runtime does not guarantee that it will
    //unload the extension or call FREFinalizer().
    //it seems to be never called atleast on windows
    void finalizer(void* extData)
    {
        return;
    }
#ifdef __cplusplus
}
#endif

, , , , ,

Оставить комментарий

3. Air extensions: работа с usb. Demo.

Создал новый проект на гугле. Там уже можно скачать демо-версию приложения, способную отображать подключенные hid-девайсы и определять их подключение/отключение.

asdoc

, , , ,

Оставить комментарий

2. Air extensions: работа с usb. Preview!

HIDAPI + Air

Расширение-обертка для HIDAPI



Небольшой кусок кода, иллюстрирующий работу с расширением. (Есть возможность вызывать все(!) методы HIDAPI)

            var manager:IHIDManager = HIDFactory.createHIDManager();

            var deviceInfos:Array = manager.getDeviceList(0x8001, 0xA00F);//0x8001, 0xA00F
            log.info("getDeviceList: {0}", (deviceInfos ? deviceInfos.length : "error"));
            if (deviceInfos)
            {
                devices.dataProvider = new ArrayCollection(deviceInfos);
                var wmouse:HidDeviceInfo;
                for each (var hidDeviceInfo:HidDeviceInfo in deviceInfos)
                {
                    if (hidDeviceInfo.interface_number == 1)
                    {
                        wmouse = hidDeviceInfo;
                        break;
                    }
                }
                if (wmouse)
                {
                    log.info("getDeviceByPath {0}", wmouse);
                    var device:IHIDDevice = manager.getDeviceByPath(wmouse.path);
                    device.open();
                    if (device.isOpened)
                    {
                        log.info("getManufacturerString: {0}", device.getManufacturerString());
                        log.info("getProductString: {0}", device.getProductString());
                        log.info("getSerialNumberString: {0}", device.getSerialNumberString());
                        device.close();
                    }
                    device.dispose();
            }

, , , ,

Оставить комментарий

1. Air extensions: работа с usb.

Cобран тестовый проект, в котором уже работает вызов нативных методов.
Набор инструментов:

  • Intellij IDEA
  • MS Visual Studio
  • MinGW
  • Apache Ant.

Фреймворки и библиотеки:

  • HidApi
  • Robot Legs
  • Air 3.0.
  • Flex 4.5.

В скором времени проект появится на code.google.com.

, , , ,

Оставить комментарий