// Function to print "Hello World!". FREObject _Basic_helloWorld(FREContext ctx, void* functionData, uint32_t argc, FREObject argv[]) { FREObject strResult; const char* msg = "[Native Code]: Hello MAC from Amanita!"; FRENewObjectFromUTF8( strlen(msg)+1, (const uint8_t *) msg, &strResult ); return strResult; }
/** * Called by ActionScript after it receives an event when a contact has been updated. * This method returns an array of the properties that have been updated for each contact. */ FREObject getUpdatedContactProperties(FREContext ctx, void* functionData, uint32_t argc, FREObject argv[]) { pthread_mutex_lock(&amutex); FREObject result = NULL; FRENewObject((const uint8_t*) "Array", 0, NULL, &result, NULL); trace( "getUpdatedContactProperties" ); int i = 0; for( i = 0; i<update_size; i++ ) { ContactUpdate contactUpdate = contact_updates[ i ]; FREObject update; FRENewObject((const uint8_t*) "Object", 0, NULL, &update, NULL); if( contactUpdate.value != NULL ) { FREObject value; FRENewObjectFromUTF8( (uint32_t)(strlen(contactUpdate.value) + 1), (const uint8_t*)contactUpdate.value, &value ); FRESetObjectProperty( update, (const uint8_t*) "value", value, NULL ); } FREObject ppid; FRENewObjectFromUTF8( (uint32_t)(strlen(contactUpdate.ppid) + 1), (const uint8_t*)contactUpdate.ppid, &ppid ); FRESetObjectProperty( update, (const uint8_t*) "ppid", ppid, NULL ); FREObject property; FRENewObjectFromInt32( (int32_t)contactUpdate.property, &property ); FRESetObjectProperty( update, (const uint8_t*) "property", property, NULL ); FREObject status; FRENewObjectFromInt32( (int32_t)contactUpdate.status, &status ); FRESetObjectProperty( update, (const uint8_t*) "status", status, NULL ); FRESetArrayElementAt( result, i, update ); free( contactUpdate.value ); free( contactUpdate.ppid ); } update_size = 0; pthread_mutex_unlock(&amutex); return result; }
FREObject getHelloWorld(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { FREObject result; const char *str = "Hello ANE World!! This is your DLL talking."; FRENewObjectFromUTF8(strlen(str)+1, (const uint8_t *)str, &result); return result; }
FREObject getWifiTags(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { FREObject result; std::wstring tags = getTags(); std::vector<uint8_t> tagsVector(tags.begin(), tags.end()); uint8_t *pVector = &tagsVector[0]; FRENewObjectFromUTF8(tags.size(), pVector, &result); return result; }
FREObject getTestString(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { FREObject result; const char *str = "This is a test string from ANE!"; FRENewObjectFromUTF8(strlen(str)+1, (const uint8_t *)str, &result); return result; }
FREObject getBytesAsString(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { FREObject result; pthread_mutex_lock(&safety); FRENewObjectFromUTF8(bufferSize, (unsigned char *)buffer, &result); bufferSize = 0; sentEvent = 0; pthread_mutex_unlock(&safety); return result; }
FREObject LNLeapDevice::getConfigString(uint32_t len, const uint8_t* key) { std::string keyString( key, key+len ); std::string valueString(controller->config().getString(keyString)); std::vector<uint8_t> valueVector(valueString.begin(), valueString.end()); uint8_t *valueArray = &valueVector[0]; FREObject freReturnValue; FRENewObjectFromUTF8(valueString.length(), valueArray, &freReturnValue); return freReturnValue; }
FREObject talkBack(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { const uint8_t *locale = 0; const uint8_t *inpWord = 0; uint32_t len = 0; FREObject retObj=0; //get first argument if(FREGetObjectAsUTF8(argv[0], &len, &inpWord) != FRE_OK) return retObj; FRENewObjectFromUTF8((uint32_t)(strlen((char *)inpWord)),(const uint8_t*)(inpWord), &retObj); return retObj; }
FREObject FlyCapture2_getVersion(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { FREObject retObj; FlyCapture2::FC2Version fc2Version; FlyCapture2::Utilities::GetLibraryVersion( &fc2Version ); char version[128]; sprintf_s( version, "FlyCapture2 library version: %d.%d.%d.%d\n", fc2Version.major, fc2Version.minor, fc2Version.type, fc2Version.build ); FRENewObjectFromUTF8(strlen((const char*)version)+1, (const uint8_t*) version, &retObj); return retObj; }
FREObject listInputDevices(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { FREObject result = NULL; FRENewObject((const uint8_t *)"Vector.<benkuper.nativeExtensions.MIDIDeviceIn>",0,NULL,&result,NULL); unsigned int nPorts = midiin->getPortCount(); //printf("Native MIDI :: listInputDevices > %i devices detected :\n",nPorts); FRESetArrayLength(result,nPorts); // Check inputs. std::string portName; for ( unsigned int i=0; i<nPorts; i++ ) { try { portName = midiin->getPortName(i); } catch ( RtMidiError &error ) { error.printMessage(); // return NULL; } //std::cout << " Input Port #" << i+1 << ": " << portName << '\n'; //printf("[%i] %s\n",i,portName.c_str()); FREObject args[1]; FREObject portFRE = NULL; FRENewObjectFromUTF8(portName.size(),(const uint8_t*)portName.c_str(),&portFRE); args[0] = portFRE; FREObject curPort = NULL; FREObject exc = NULL; FREResult fre = FRENewObject((const uint8_t *)"benkuper.nativeExtensions.MIDIDeviceIn",1,args,&curPort,&exc); //printf("FREResult = %i",fre); FRESetArrayElementAt(result,i,curPort); } return result; }
FREObject getBytesAsArray(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { FREObject result; FRENewObject((const uint8_t*) "Array", 0, NULL, &result, NULL); FRESetArrayLength(result, bufferSize - 1); FREObject myChar; int i; pthread_mutex_lock(&safety); for (i = 0; i < bufferSize; i++) { FRENewObjectFromUTF8(1, (unsigned char *)buffer + i, &myChar); FRESetArrayElementAt(result, i, myChar); } bufferSize = 0; sentEvent = 0; pthread_mutex_unlock(&safety); return result; }
FREObject getFREObjectFromString(const char* arg) { FREObject result; FRENewObjectFromUTF8(uint32_t(strlen(arg)) + 1, (const uint8_t*)arg, &result); return result; }
FREObject getSuggestions(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { const uint8_t *locale = 0; const uint8_t *inpWord = 0; uint32_t len = -1; FREObject retObj=0; FREObject oneSuggestion=0; U16Char_t* inpWordU16 = NULL; std::string inpWordDictEncoded; bool isConversionUnSuccesful=false; char * oneSuggestionEncoded=NULL; U16Char_t * oneSuggestionU16=NULL; std::string oneSuggestionU8; //assign memory to retobj FRENewObject((const uint8_t*)"Array", 0, NULL, &retObj, 0); //get first argument if(FREGetObjectAsUTF8(argv[1], &len, &locale) != FRE_OK) return retObj; len = 0; //get second argument if(FREGetObjectAsUTF8(argv[0], &len, &inpWord) != FRE_OK) return retObj; //get the hunspell object from cache Hunspell * hunspellObject=getHunspellObject(std::string((char *)locale)); if(!hunspellObject) return retObj; //convert input utf8 to u16 string inpWordU16 = EncConv::convCharStrToU16Str((char *)inpWord, "UTF-8"); //get dictionary encoding HUNSPELL_GET_ENCODING getEncAdd=(HUNSPELL_GET_ENCODING) GetProcAddress(hinstLib, "hunspell_get_dic_encoding"); char * m_MainEncoding= (getEncAdd)(hunspellObject); //convert u16 to dictionary encoding inpWordDictEncoded=EncConv::convU16StrToCharStr(inpWordU16,m_MainEncoding); if(inpWordDictEncoded.length()==0) { isConversionUnSuccesful = true; } //get suggestAddress &freelistAddress HUNSPELL_SUGGEST suggestAdd= (HUNSPELL_SUGGEST) GetProcAddress(hinstLib, "hunspell_suggest"); HUNSPELL_FREE_LIST freeListAdd= (HUNSPELL_FREE_LIST) GetProcAddress(hinstLib, "hunspell_free_list"); char** suggList = NULL; int numSugg = 0; //Try getting suggestions with encoded word else try with UTF8 if(suggestAdd && !isConversionUnSuccesful) { numSugg = (suggestAdd)(hunspellObject,(char *) (inpWordDictEncoded.c_str()),&suggList); } else { numSugg = (suggestAdd)(hunspellObject,(char *) (inpWord),&suggList); } if(numSugg) { FRESetArrayLength( retObj, numSugg ); for(int iCount=0; iCount <numSugg; iCount++) { oneSuggestionEncoded=suggList[iCount]; oneSuggestionU16=EncConv::convCharStrToU16Str(oneSuggestionEncoded, m_MainEncoding); oneSuggestionU8= EncConv::convU16StrToCharStr(oneSuggestionU16, "UTF-8"); FRENewObjectFromUTF8((uint32_t)(oneSuggestionU8.length()),(const uint8_t*)(oneSuggestionU8.c_str()), &oneSuggestion); FRESetArrayElementAt(retObj, iCount, oneSuggestion); EncConv::releaseU16Str(oneSuggestionU16); } (freeListAdd)(hunspellObject, &suggList,numSugg); } EncConv::releaseU16Str(inpWordU16); return retObj; }
FREObject getScores(FREContext ctx, void* functionData, uint32_t argc, FREObject argv[]) { SC_ScoreList_h score_list; SC_Score_h aScore; FREObject returnObject; int i,j; unsigned int contextArrayLength = 0; FREGetArrayLength(argv[0],&contextArrayLength); score_list = SC_ScoresController_GetScores(scores_controller); // arrayArgs has the Array arguments. #if defined(BB10) unsigned int scoreListSize = SC_ScoreList_GetCount(score_list); #else unsigned int scoreListSize = SC_ScoreList_GetScoresCount(score_list); #endif FREObject* arrayArgs = (FREObject*)malloc(sizeof(FREObject)*scoreListSize); for(i = 0 ; i < scoreListSize ; i++) { #if defined(BB10) aScore = SC_ScoreList_GetAt(score_list,i); #else aScore = SC_ScoreList_GetScore(score_list,i); #endif FREObject* argV=(FREObject*)malloc(sizeof(FREObject)*6); FRENewObjectFromInt32(SC_Score_GetMode(aScore), &argV[0]); FRENewObjectFromInt32(SC_Score_GetLevel(aScore), &argV[1]); FRENewObjectFromDouble(SC_Score_GetResult(aScore), &argV[2]); FRENewObjectFromDouble(SC_Score_GetMinorResult(aScore), &argV[3]); // Create the 5th argument(User) SC_User_h aUser = SC_Score_GetUser(aScore); SC_String_h scLogin = SC_User_GetLogin(aUser); SC_String_h scEmail = SC_User_GetEmail(aUser); const char * login = ""; const char * email = ""; if(scLogin != NULL) login= SC_String_GetData(scLogin); if(scEmail != NULL) email = SC_String_GetData(scEmail); FREObject* userArgV=(FREObject*)malloc(sizeof(FREObject)*2); FRENewObjectFromUTF8(strlen(login)+1,(const uint8_t*)login, &userArgV[0]); FRENewObjectFromUTF8(strlen(email)+1,(const uint8_t*)email, &userArgV[1]); fprintf(stderr, "username: %s\n", login); FRENewObject((const uint8_t*)"com.wallwizz.scoreloop.User",2,userArgV,&argV[4],NULL); // Create the 6th argument(Context) FREObject* contextArray = (FREObject*)malloc(sizeof(FREObject)*contextArrayLength); for(j = 0; j < contextArrayLength; j++) { FREObject context; FREObject freContextKey; const char * aKey = "test"; SC_String_h scValue = NULL; const char* aValue = NULL; unsigned int length; FREGetArrayElementAt(argv[0], j, &freContextKey); if(FREGetObjectAsUTF8(freContextKey,&length,(const uint8_t**)&aKey) != FRE_OK) fprintf(stderr, "FREGetArrayElementAt Error\n"); fprintf(stderr, "retrieved aKey: %s\n", aKey); SC_Context_h aContext = SC_Score_GetContext(aScore); SC_Context_Get(aContext, aKey, &scValue); if(scValue != NULL) { aValue= SC_String_GetData(scValue); }else{ fprintf(stderr, "scValue NULL\n"); aValue = "not found"; } fprintf(stderr, "retrieved aValue: %s\n", aValue); FREObject* contextArgv=(FREObject*)malloc(sizeof(FREObject)*2); FRENewObjectFromUTF8(strlen(aKey)+1,(const uint8_t*)aKey, &contextArgv[0]); FRENewObjectFromUTF8(strlen(aValue)+1,(const uint8_t*)aValue, &contextArgv[1]); FRENewObject((const uint8_t*)"com.wallwizz.scoreloop.Context",2,contextArgv,&contextArray[j],NULL); free(contextArgv); } FRENewObject((const uint8_t*)"Array",contextArrayLength,contextArray,&argV[5],NULL); FRENewObject((const uint8_t*)"com.wallwizz.scoreloop.Score",6,argV,&arrayArgs[i],NULL); free(contextArray); } FRENewObject((const uint8_t*)"Array",scoreListSize,arrayArgs,&returnObject,NULL); free(arrayArgs); return returnObject; }
/** * Creates a ActionScript net.rim.bbm.BBMContact instance from the supplied native contact. */ FREObject createActionScriptContact( const bbmsp_contact_t* contact ) { FREObject contact_AS = NULL; const int cNumAttributes = 7; FREObject resultAttributes[cNumAttributes]; bbmsp_result_t result; char ppid[BBMSP_CONTACT_PPID_MAX]; result = bbmsp_contact_get_ppid( contact, ppid, BBMSP_CONTACT_PPID_MAX ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromUTF8((uint32_t)(strlen(ppid) + 1), (uint8_t*)ppid, &resultAttributes[0]); } else { trace( "createActionScriptContact ppid %i", result ); } char displayName[BBMSP_CONTACT_DISPLAY_NAME_MAX]; result = bbmsp_contact_get_display_name( contact, displayName, BBMSP_CONTACT_DISPLAY_NAME_MAX ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromUTF8((uint32_t)(strlen(displayName) + 1), (uint8_t*)displayName, &resultAttributes[1]); } else { trace( "createActionScriptContact displayName %i", result ); } char personalMessage[BBMSP_CONTACT_PERSONAL_MSG_MAX]; result = bbmsp_contact_get_personal_message( contact, personalMessage, BBMSP_CONTACT_PERSONAL_MSG_MAX ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromUTF8((uint32_t)(strlen(personalMessage) + 1), (uint8_t*)personalMessage, &resultAttributes[2]); } else { trace( "createActionScriptContact personalMessage %i", result ); } char statusMessage[BBMSP_CONTACT_STATUS_MSG_MAX]; result = bbmsp_contact_get_status_message( contact, statusMessage, BBMSP_CONTACT_STATUS_MSG_MAX ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromUTF8((uint32_t)(strlen(statusMessage) + 1), (uint8_t*)statusMessage, &resultAttributes[3]); } else { trace( "createActionScriptContact statusMessage %i", result ); } char appVersion[BBMSP_CONTACT_APP_VERSION_MAX]; result = bbmsp_contact_get_app_version( contact, appVersion, BBMSP_CONTACT_APP_VERSION_MAX ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromUTF8((uint32_t)(strlen(appVersion) + 1), (uint8_t*)appVersion, &resultAttributes[4]); } else { trace( "createActionScriptContact appVersion %i", result ); } bbmsp_presence_status_t status; result = bbmsp_contact_get_status( contact, &status ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromInt32( (int32_t)status, &resultAttributes[5]); } else { trace( "createActionScriptContact status %i", result ); } bbmsp_image_t* m_contact_avatar; bbmsp_image_create_empty(&m_contact_avatar); result = bbmsp_contact_get_display_picture( contact, m_contact_avatar ); trace( "%i picture", result ); if( result == BBMSP_SUCCESS ) { char path[PATH_MAX]; getAvatarPath( m_contact_avatar, ppid, path ); FRENewObjectFromUTF8((uint32_t)(strlen(path) + 1), (uint8_t*)path, &resultAttributes[6]); } else { resultAttributes[5] = NULL; } bbmsp_image_destroy( &m_contact_avatar ); FRENewObject((const uint8_t*) "Array", cNumAttributes, resultAttributes, &contact_AS, NULL); return( contact_AS ); }
FREObject getFREObjectFromString(std::string arg) { FREObject result; FRENewObjectFromUTF8((uint32_t)arg.length(), reinterpret_cast<const uint8_t*>(arg.data()), &result); return result; }
FREObject FREString(std::string value) { FREObject result; FRENewObjectFromUTF8(value.size() + 1, (const uint8_t*)value.c_str(), &result); return result; }