1 名前:デフォルトの名無しさん mailto:sage [04/09/24 15:07:03] BREW(Binary Runtime Environment for Wireless)についてのスレ QUALCOMM BREWホーム www.qualcomm.com/brew/ja/ www.qualcomm.com/brew/ BREW JAPAN .COM|BREW増強計画 www.brewjapan.com/ 前スレ pc5.2ch.net/test/read.cgi/tech/1076511398/ 関連情報>>2-18 ■過去スレ 02 pc5.2ch.net/test/read.cgi/tech/1076511398/ 01 pc2.2ch.net/test/read.cgi/tech/1011078904/
2 名前:デフォルトの名無しさん [04/09/24 15:24:38] >>1 関連情報まだですか?
3 名前:デフォルトの名無しさん mailto:sage [04/09/24 19:39:09] ('A`)ノ kintubo.kakiko.com/brew/
4 名前:デフォルトの名無しさん [04/09/24 21:11:24] >>1 乙 >>3 リンクのまとめサイトなんてあったんだな。知らんかった でも、なんか寂しいので追加しとくわ BREW関連 Qualcomm CDMA Technologies - CDMA2000 3G Solutions ← チップセットの情報(PDFあり) www.cdmatech.com/solutions/cdma2000_3g_solutions.jsp?L2=cdma2000_3g_solutions ARM関連 ARM7DTMIの部屋 vsync.org/arm/ ARMメモ www.bomber.co.jp/chaola/docs/ARM/ Linux Zaurusでアセンブリプログラミング www.nk.rim.or.jp/~jun/slasm/arm00.html
5 名前:よくありそうな質問 mailto:sage [04/09/25 00:31:37] Q. BREWアプリを自作して自分の携帯に入れたいのですが? A. 素人は作ることは可能ですが端末に転送することはできません あきらめるかCPなどのプロになりましょう Q. DLLにコンパイルしたものを端末に転送したのですが実行できません A. ARMの形式でコンパイルする必要があります あきらめるかARMにコンパイルできるようがんばりましょう
6 名前:デフォルトの名無しさん mailto:sage [04/09/25 00:40:58] Q. BREWて正直うんこなんですが… A. そうかもしれません しかし手段・道具によらず目的を達成するのがプロというものです がんばりましょう Q. _| ̄|○ …… A. (つДT)つ旦
7 名前:デフォルトの名無しさん [04/09/25 12:09:22] ぶりゅっ
8 名前:デフォルトの名無しさん mailto:sage [04/09/25 14:22:11] シンビアンのほうが良くない?
9 名前:デフォルトの名無しさん mailto:sage [04/09/25 15:19:48] シンビアンはウイルスあるよ
10 名前:デフォルトの名無しさん mailto:sage [04/09/25 15:53:04] ('A`)1の過去ログ持ってる人いますか?
11 名前:デフォルトの名無しさん mailto:sage [04/09/25 16:06:54] 更新されてた https://secsvr.net/brewjapan.com/tech/tech20040910.pdf
12 名前:デフォルトの名無しさん mailto:sage [04/09/25 16:08:08] >>10 持ってますよ。
13 名前:デフォルトの名無しさん mailto:sage [04/09/25 16:47:06] ARMってはじめてだったけど、整数除算命令ないのね・・・orz アライメントは良いとしても他に気をつける所ありますか?
14 名前:デフォルトの名無しさん mailto:sage [04/09/25 18:38:15] >>12 age.tubo.80.kg/age01/imgboard.cgi ここにうpして頂けますか?お願いします('A`)
15 名前:デフォルトの名無しさん mailto:sage [04/09/25 19:06:44] アップしました。 ぶりゅぶりゅ過去ログです。
16 名前:デフォルトの名無しさん mailto:sage [04/09/25 19:31:29] >>15 サンクスです
17 名前:デフォルトの名無しさん [04/09/26 02:40:08] SDKダウンロードできねぇす。うえーん
18 名前:デフォルトの名無しさん mailto:sage [04/09/27 08:05:04] >>17 ■FAQ IE5.5SP2以降推奨、NNでも動くかも知れないけどOperaとかMozillaとかは確実に無理。 JavaScript+ActiveX。 あと、会社名とかをちゃんと登録しないとダウンロードできません。 2Channel Inc. みたいな正式な名前。 登録内容は全部英語。 (pc5.2ch.net/test/read.cgi/tech/1076511398/15 )
19 名前:デフォルトの名無しさん mailto:sage [04/09/27 09:46:26] 技術討論スレに話題が上がってたので質問したいのですが BREWは携帯電話専用のAPIなんですか? それとも携帯端末汎用?
20 名前:デフォルトの名無しさん mailto:sage [04/09/27 10:36:18] >>19 一応、携帯専用APIではなかったはず・・・ Plamでなかったっけ?(計画だけか?)
21 名前:デフォルトの名無しさん [04/09/27 22:34:55] >>18 FAQあったんだ。。。過去ログ見られないけど、サンキューです!! Firefox使ってたよ。。。
22 名前:デフォルトの名無しさん mailto:sage [04/09/28 23:55:23] 武龍3.0てどんな感じですか?
23 名前:デフォルトの名無しさん [04/09/29 00:25:17] おっ かっこいいな>武龍
24 名前:デフォルトの名無しさん mailto:sage [04/09/29 00:48:28] 命名:武龍
25 名前:デフォルトの名無しさん mailto:sage [04/09/29 01:41:46] よみがな:むりゅう 無理ゆう
26 名前:デフォルトの名無しさん mailto:sage [04/09/29 09:56:12] お後がよろしいようで
27 名前:デフォルトの名無しさん mailto:sage [04/09/29 11:01:57] 虎BREW
28 名前:デフォルトの名無しさん [04/09/29 17:39:46] 質問です。 IDISPLAY_DrawTextにて文字描画を行っております。 文字の部分に枠ができてしまうのですが 解決方法はないのでしょうか? 透過というか、背景に文字が直接描かれるようにしたいのです。 IDISPLAY_DrawText(app->a.m_pIDisplay, AEE_FONT_NORMAL, // 太字のフォント wstr, -1, 0, 204, NULL, IDF_ALIGN_CENTER); 現在はこのような感じです。 よろしくおねがいします。
29 名前:デフォルトの名無しさん [04/09/29 17:40:38] フォントのコメントは無視してください。ミスッタ!
30 名前:デフォルトの名無しさん mailto:sage [04/09/29 17:56:42] >>28 flagにIDF_TEXT_TRANSPARENTは?
31 名前:28 [04/09/29 18:02:33] ぐあ!できました!>>30 様感謝! ちなみに、フラグを || で繋げていたため 「うごかねー」と、思っていたのかもしれません。。。 ありがとうございました。
32 名前:28 [04/09/29 18:51:50] ついでといってはなんなのですが、もうひとつ。 3バイトの文字。たとえば"-あ"をAECHARにするには どうしたらいいのでしょう。
33 名前:デフォルトの名無しさん mailto:sage [04/09/29 19:07:54] STRTOWSTR() じゃない方のワイド文字列変換 これ使うと認証通らない
34 名前:デフォルトの名無しさん [04/09/29 19:12:27] QRコード解析について質問です。 開発環境 SDK: 2.1.1 端末: W21S Extension(QRDEC3GV)使用 ICameraで取得した画像からQRコードの解析を行いたいのですが、どうしてもうまくいきません。 撮影した画像をファイルから読み込んで解析する場合、撮影した画像ファイルの深度を16bitに変換して 読み込む必要があるそうなのですが、16bitへの変換がうまくいきません。 また、カメラのコールバック関数内で取得したIBitmapインスタンスから直接解析を行う方法も試してみたのですが、 QRDEC_IMAGE等の構造体に格納する値がわからず、IQRDEC3GV_QrdecDecodeSymbolSetParametersで失敗してしまいます。 画像を撮影してファイルから解析を行う方法と、プレビュー画像を直接解析する方法のどちらでも構わないので、 カメラからの画像を解析する方法をご教授ください。 ちなみに、Extensionのサンプルについてきた画像からの解析は成功しています。
35 名前:デフォルトの名無しさん [04/09/29 19:14:42] QRコード解析について質問です。 開発環境 SDK: 2.1.1 端末: W21S Extension(QRDEC3GV)使用 ICameraで取得した画像からQRコードの解析を行いたいのですが、どうしてもうまくいきません。 撮影した画像をファイルから読み込んで解析する場合、撮影した画像ファイルの深度を16bitに変換して 読み込む必要があるそうなのですが、16bitへの変換がうまくいきません。 また、カメラのコールバック関数内で取得したIBitmapインスタンスから直接解析を行う方法も試してみたのですが、 QRDEC_IMAGE等の構造体に格納する値がわからず、IQRDEC3GV_QrdecDecodeSymbolSetParametersで失敗してしまいます。 画像を撮影してファイルから解析を行う方法と、プレビュー画像を直接解析する方法のどちらでも構わないので、 カメラからの画像を解析する方法をご教授ください。 ちなみに、Extensionのサンプルについてきた画像からの解析は成功しています。
36 名前:28 [04/09/29 19:45:27] STREXPANDでできました。 STRTOWSTRは使わない方がいいのですね。ありがとうございました。
37 名前:デフォルトの名無しさん mailto:sage [04/09/29 22:01:08] カメラの撮影設定がQRコード用になっていますか? ズームに0x7fffffffを設定してやれば各端末の最適な設定に変更されるはずです 画像取り込みをそれでおこなえば良いと思います 画像解析はメモリを直接参照すr
38 名前:35 [04/09/30 10:07:40] ICAMERA_SetZoom( pMe->Camera, (int32)0x7fffffff ); という感じで設定しています。 撮影した画像とサンプルについてきた画像をテキストエディタで開いてみたのですが、 サンプルの画像は「BM6」で始まっているのに対し、撮影した画像は最初から文字化けしていました。 従って、撮影した画像のエンコード方法がまずいのではないかと考えています。 ちなみに、ICAMERA_SetVideoEncodeで、AEECLSID_WINBMPやAEECLSID_NATIVEBMPが設定できなかったので、 AEECLSID_JPEGを設定しています。 一応、関係ありそうな部分のコードを↓に載せます。
39 名前:35 [04/09/30 10:23:36] #define QR_MAX_FILE_BUF300 #defineQR_MAX_DECODE_BUFFER_SIZE2062 // アプリケーション構造体のQRコードに関する部分 ------------ charQR_FileName[64]; unsigned char*QR_psDecodedText;// デコード結果バッファ unsigned char*QR_psFormatText;// デコード結果フォーマットバッファ longQR_lBufferSize;// デコード結果文字列サイズ // QR関係プロトタイプ static void Conv24BGRto16RGB_UpsideDownEx( IFile * pFile, unsigned char *img16rgb, long hs, long vs, long lImageSize); static void Conv8BGRto16RGB_UpsideDown( unsigned char *img8bgr, unsigned char *img16rgb, long hs, long vs); intQR_GetErr(QRDEC_HRESULT lErr); static boolean QR_DecodeSymbol( IApplet* pi );// サンプルからコピペした解析用関数 static voidQR_DecodeFromBmp( IApplet* pi, IBitmap* pBmp );// IBitmapから直接解析する為の関数
40 名前:35 [04/09/30 10:24:03] /*------------------------------------------------------------------------------- HelloWorld2_HandleEvent ハンドルイベント ------------------------------------------------------------------------------- */ static boolean HelloWorld2_HandleEvent(AEEApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam) { CHelloWorld2 * pMe = (CHelloWorld2*)pi; AECHAR szBuf[30] = {0}; int ret; // キーイベント case EVT_KEY: DBGPRINTF("### APP_EVT_KEY ###"); switch( wParam ){ // 選択キー押下 case AVK_SELECT: DBGPRINTF("### AVK_SELECT ###"); // カメラ:スナップショット if( pMe->Camera && pMe->m_DispState == STATE_PICTURE ){ ret = ICAMERA_RecordSnapshot( pMe->Camera ); return FALSE; } return FALSE; }
41 名前:35 [04/09/30 10:27:57] /*------------------------------------------------------------------------------- 画像撮影用関数(mode=TRUE:QRモード、FALSE:通常モード) ------------------------------------------------------------------------------- */ void GetPicture( IApplet* pi, boolean mode ){ CHelloWorld2* pMe = (CHelloWorld2*)pi; intret; AEESize*pList; AEESizeList; pMe->m_DispState = STATE_PICTURE; IDISPLAY_ClearScreen (pMe->a.m_pIDisplay); pMe->Camera = NULL; // ICameraインスタンス生成 if( (ret = ISHELL_CreateInstance(pMe->m_pIShell,AEECLSID_CAMERA,(void **)&pMe->Camera) ) != SUCCESS ){ return; } // コールバック設定 if( ICAMERA_RegisterNotify(pMe->Camera,(PFNCAMERANOTIFY)Camera_CB,(void*)pMe) != SUCCESS ){ return; } pList = (AEESize *)CAM_MODE_PREVIEW;// OK //サイズリストの取得 pMe->Camera_pbRange = TRUE; ret = ICAMERA_GetDisplaySizeList(pMe->Camera, &pList, &pMe->Camera_pbRange); if( ret != SUCCESS ){ return; } List.cx = pList[0].cx;List.cy = pList[0].cy; // 諸設定 ret = ICAMERA_SetDisplaySize(pMe->Camera, &List); if( ret != SUCCESS ){ return; }
42 名前:35 [04/09/30 10:28:27] // FPS設定 pMe->Camera_dwFPS = (int32 *)CAM_MODE_PREVIEW; pMe->Camera_pbRange = TRUE; ret = ICAMERA_GetParm(pMe->Camera, CAM_PARM_FPS_LIST, (int32 *)&pMe->Camera_dwFPS, (int32 *)&pMe->Camera_pbRange); ret = ICAMERA_SetFramesPerSecond( pMe->Camera, *pMe->Camera_dwFPS); // QRモード指定 if( mode ){ ret = ICAMERA_SetZoom( pMe->Camera, (int32)0x7fffffff );// QRモード指定 } IDISPLAY_SetColor(pMe->a.m_pIDisplay, CLR_USER_BACKGROUND,MAKE_RGB(255,255,255)); IDISPLAY_SetColor(pMe->a.m_pIDisplay, CLR_SYS_ITEM,MAKE_RGB(255,255,255)); // メディアデータ設定 pMe->Camera_Media.clsData= MMD_FILE_NAME; pMe->Camera_Media.pData= "qr.bmp"; STRCPY(pMe->QR_FileName,"qr.bmp"); ret = ICAMERA_SetMediaData( pMe->Camera, &pMe->Camera_Media, "image/bitmap" );
43 名前:35 [04/09/30 10:29:20] // サイズ設定 ret = ICAMERA_SetSize(pMe->Camera, &List); if( ret != SUCCESS ){ return; } //IFileMgr インタフェースオブジェクトのインスタンス化 ret = ISHELL_CreateInstance(pMe->m_pIShell, AEECLSID_FILEMGR,(void**)&pMe->Camera_FileMgr); if( ret != SUCCESS ){ return; } //ファイルを作成 IFILEMGR_Remove(pMe->Camera_FileMgr, "qr.bmp"); if((pMe->Camera_File = IFILEMGR_OpenFile(pMe->Camera_FileMgr,"qr.bmp", _OFM_CREATE)) == NULL){ return; } //ファイルをクローズ IFILE_Release( pMe->Camera_File ) ; // エンコード設定 ret = ICAMERA_SetVideoEncode(pMe->Camera, AEECLSID_JPEG, NULL);// ○ // プレビュースタート ret = ICAMERA_Preview(pMe->Camera); if( ret != SUCCESS ){ return; } }
44 名前:35 [04/09/30 10:29:45] /*------------------------------------------------------------------------------- Camera_CB カメラコールバック ------------------------------------------------------------------------------- */ void Camera_CB( void* pUser, AEECameraNotify* pNotify ){ CHelloWorld2*pMe = (CHelloWorld2*)pUser; IBitmap*pFrame; AEEBitmapInfo bi; int ret = SUCCESS; if( !pMe || !pNotify ){ return; } switch( pNotify->nStatus ){ case CAM_STATUS_USER_BASE:DBGPRINTF("### Camera_CB:USER_BASE ###");break; case CAM_STATUS_FAIL:DBGPRINTF("### Camera_CB:FAIL ###");break; case CAM_STATUS_PAUSE:DBGPRINTF("### Camera_CB:PAUSE ###");break; case CAM_STATUS_RESUME:DBGPRINTF("### Camera_CB:RESUME ###");break; case CAM_STATUS_DATA_IO_DELAY:DBGPRINTF("### Camera_CB:DATA_IO_DELAY ###");break; case CAM_STATUS_SPACE_WARNING:DBGPRINTF("### Camera_CB:SPACE_WARNING ###");break; case CAM_STATUS_START:// プレビュー開始 DBGPRINTF("### Camera_CB:START ###"); break;
45 名前:35 [04/09/30 10:39:50] case CAM_STATUS_FRAME: { // ▼040924▼ AEEImageInfo*info=NULL; boolean*retbool=NULL; //IDIB*pIDIB; // ▲040924▲ DBGPRINTF("### Camera_CB:FRAME ###"); // フレーム取得 ret = ICAMERA_GetFrame( pMe->Camera, &pFrame ); //DBGPRINTF("### Camera_CB:GetFrame:%d ###",ret); // ビットマップ情報を取得 IBITMAP_GetInfo( pFrame, &bi, sizeof(bi)); //DBGPRINTF("### Camera_CB:BitmapSize:%d ###",sizeof(bi)); DBGPRINTF("### IBITMAP:ImageInfo.nDepth = %d ###",bi.nDepth); // 取得フレームから直接解析するバージョン QR_DecodeFromBmp( (IApplet*)pMe, pFrame );
46 名前:35 [04/09/30 10:40:21] //CONVERTBMP( (void*)pFrame, info, retbool ); //DBGPRINTF("### info.nColors = %d ###",info->nColors); //IDIB を作成し、ポインタを取得 /*ret = IBITMAP_QueryInterface( pFrame, AEECLSID_DIB, (void**)&pIDIB ); if( ret != SUCCESS ){ DBGPRINTF("● IBITMAP:QueryInterface:FAILED ●"); } pIDIB->nDepth = 16; //IBITMAP を開放 IBITMAP_Release( pFrame ); //IDIB をIBITMAP に変換(キャストなので開放不要) pFrame = IDIB_TO_IBITMAP(pIDIB); */ //ファイルを作成 /*IFILEMGR_Remove(pMe->Camera_FileMgr, "qr.bmp"); if((pMe->Camera_File = IFILEMGR_OpenFile(pMe->Camera_FileMgr,"qr.bmp", _OFM_CREATE)) == NULL){ DBGPRINTF("● Camera_CB:CreateFile(bmp):FAILED ●"); return; } IFILE_Write( pMe->Camera_File, (void*)pFrame, sizeof(bi)); //ファイルをクローズ IFILE_Release( pMe->Camera_File ) ; QR_DecodeSymbol( (IApplet*)pMe ); */IBITMAP_Release(pFrame); break; }
47 名前:35 [04/09/30 10:44:50] // 結構多いので一部省略します。 /*------------------------------------------------------------------------------- QR_DecodeSymbol QRコード・バーコードデコード処理 デコード対象:"pMe->QR_FileName"で指定された画像ファイル(例:"images/qr1.bmp") デコード結果文字列は"pMe->QR_psDecodedText"に格納 ------------------------------------------------------------------------------- */ static boolean QR_DecodeSymbol( IApplet* pi ){ CHelloWorld2* pMe = (CHelloWorld2*)pi; IBitmap*pScreen = NULL; IDIB*pDibScreen = NULL; IFile*pFile; FileInfofi; IFileMgr*pFileMgr; IQrdec3GV*pQrdec = NULL; QRDEC_IMAGEgImage; QRDEC_SYMBOL_INFOgSymbol; QRDEC_STRING_INFOsInfo; QRDEC_HRESULTrc; longlImageSize = 0; void*pWorkarea = NULL; unsigned longlMemoryVecLen; int16nLoop = 0; int32ret32; unsigned char*pimg24 = NULL, *pimg16 = NULL; BITMAPFILEHEADERbmFh; BITMAPINFOHEADERbmIh; int ret;
48 名前:35 [04/09/30 10:46:16] { DBGPRINTF("### QR_DecodeSymbol:Start ###"); // ファイル参照 ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_FILEMGR, (void **)&pFileMgr); if(pFileMgr){ pFile = IFILEMGR_OpenFile(pFileMgr, pMe->QR_FileName, _OFM_READ); if(pFile){ // ビットマップヘッダの読み込み ret32 = IFILE_Read(pFile, (void *)&bmFh, 14); ret32 = IFILE_Read(pFile, (void *)&bmIh, sizeof(BITMAPINFOHEADER)); lImageSize = (bmIh.biHeight * bmIh.biWidth * bmIh.biBitCount / 8); }else{ return 1; } // ビットマップフレームデータの取得→16ビットデータをExtensionに渡すための前処理 if(bmIh.biBitCount == 24){ // 24ビット・ビットマップの場合 pimg16 = (unsigned char*)MALLOC(bmIh.biWidth * bmIh.biHeight * 2 ); if( !pimg16 ){ return 2; } Conv24BGRto16RGB_UpsideDownEx(pFile, pimg16, bmIh.biWidth, bmIh.biHeight, lImageSize); }
49 名前:35 [04/09/30 10:47:08] if(bmIh.biBitCount == 8){ // 8ビット・ビットマップの場合 IFILE_GetInfo(pFile, &fi); pimg24 = (unsigned char*)MALLOC(bmIh.biWidth * bmIh.biHeight+100); pimg16 = (unsigned char*)MALLOC(bmIh.biWidth * bmIh.biHeight+100); if( !pimg16 ){ return 2; } ret32 = IFILE_Seek(pFile, _SEEK_END, -lImageSize ); IFILE_Read(pFile, pimg24, lImageSize); Conv8BGRto16RGB_UpsideDown( pimg24, pimg16, bmIh.biWidth, bmIh.biHeight); } if(pFile){ ReleaseObj((void**)&pFile); } if(pFileMgr){ ReleaseObj((void**)&pFileMgr); } }else{ if(pimg24){ FREE(pimg24); } if(pimg16){ FREE(pimg16); } return FALSE; } }
50 名前:35 [04/09/30 10:48:23] // Extensionを利用してのデコード処理 // パラメータの設定 gImage.imSize= sizeof(QRDEC_IMAGE);// 構造体サイズ gImage.imPixels= pimg16;// フレームデータバッファ gImage.imWidth= bmIh.biWidth;// イメージ幅 gImage.imHeight= bmIh.biHeight;// イメージ高さ gImage.imBitCount= (bmIh.biBitCount == 24) ? 16 : 8;// ビットカウント gImage.imCompression= QRDEC_BI_RGB;// 圧縮形式 gImage.imSourceCameraType= QRDEC_IM_DEFAULT;// カメラ情報1 gImage.imSourceCameraValue= 0;// カメラ情報2 gSymbol.siSize= sizeof(QRDEC_SYMBOL_INFO);// 構造体サイズ gSymbol.siSymbolType= QRDEC_QR_CODE_M2 | QRDEC_JAN13 | QRDEC_JAN8;// ターゲットシンボルタイプ gSymbol.siQRVersionLow= 1;// QRコード対象最小バージョン gSymbol.siQRVersionHigh= 20;// QRコード対象最高バージョン
51 名前:35 [04/09/30 10:51:55] // 結果文字列受取バッファの確保 if(!pMe->QR_psDecodedText){ pMe->QR_psDecodedText = (unsigned char *)MALLOC(QR_MAX_DECODE_BUFFER_SIZE); if( pMe->QR_psDecodedText == NULL ){ if(pWorkarea){ FREE(pWorkarea); } if(pimg24){ FREE(pimg24); } if(pimg16){ FREE(pimg16); } if(pDibScreen){ ReleaseObj((void**)&pDibScreen); } if(pScreen){ ReleaseObj((void**)&pScreen); } if(pQrdec){ IQRDE3GV_Release(pQrdec); } return (boolean)8; } } MEMSET(pMe->QR_psDecodedText, 0, QR_MAX_DECODE_BUFFER_SIZE); // 結果フォーマット文字列バッファの確保 if(!pMe->QR_psFormatText ){ pMe->QR_psFormatText = (unsigned char *)MALLOC(QR_MAX_DECODE_BUFFER_SIZE); if( pMe->QR_psFormatText == NULL ){ if(pWorkarea){ FREE(pWorkarea); } if(pimg24){ FREE(pimg24); } if(pimg16){ FREE(pimg16); } if(pDibScreen){ ReleaseObj((void**)&pDibScreen); } if(pScreen){ ReleaseObj((void**)&pScreen); } if(pQrdec){ IQRDE3GV_Release(pQrdec); } return (boolean)8; } } MEMSET(pMe->QR_psFormatText, 0, QR_MAX_DECODE_BUFFER_SIZE);
52 名前:35 [04/09/30 10:54:04] sInfo.tiSize= sizeof(QRDEC_STRING_INFO);// 構造体サイズ sInfo.tiDecodedBuffer= pMe->QR_psDecodedText;// 結果受取バッファ sInfo.tiFormatBuffer= pMe->QR_psFormatText;// 結果フォーマットバッファ sInfo.tiMaxBufferSize= QR_MAX_DECODE_BUFFER_SIZE;// バッファサイズ // デコードExtensionインスタンスの構築 if ( (ret = ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_QRDEC3GV, (void **)&pQrdec)) != SUCCESS){ if(pScreen){ ReleaseObj((void**)&pScreen); } return 2; } // デコードExtension処理領域の問い合わせ if(!pWorkarea){ lMemoryVecLen = IQRDE3GV_QrdecGetWorkAreaSize(pQrdec); pWorkarea = MALLOC(lMemoryVecLen * 3); if(!pWorkarea){ if(pQrdec){ IQRDE3GV_Release(pQrdec); } return 2; } } // デコードパラメータのセット rc = IQRDE3GV_QrdecDecodeSymbolSetParameters(pQrdec, &gImage, &gSymbol, &sInfo, pWorkarea); if(rc){ if(pWorkarea){ FREE(pWorkarea); } if(pQrdec){ IQRDE3GV_Release(pQrdec); } return 2; } rc = QRDEC_S_CONTINUE;
53 名前:35 [04/09/30 10:54:37] // デコード処理実行 while (rc == QRDEC_S_CONTINUE ){ rc = IQRDE3GV_QrdecDecodeSymbolNextStep(pQrdec, 150, 100, pWorkarea); } if ( rc == QRDEC_S_OK ){ pMe->QR_lBufferSize = sInfo.tiBufferSize; }else{ ret = QR_GetErr(rc); } if(pWorkarea){ FREE(pWorkarea); } if(pQrdec){ IQRDE3GV_Release(pQrdec); } return (boolean)rc; }
54 名前:35 [04/09/30 10:56:36] /*------------------------------------------------------------------------------- QR_DecodeFromBmp QRコード・バーコードデコード処理 IBitmapから直接変換 ------------------------------------------------------------------------------- */ static voidQR_DecodeFromBmp( IApplet* pi, IBitmap* pBmp ){ CHelloWorld2* pMe = (CHelloWorld2*)pi; void*pWorkArea = NULL; IQrdec3GV*pQrdec = NULL; intret; QRDEC_IMAGEimageArea; QRDEC_SYMBOL_INFOcodeInstructions; QRDEC_STRING_INFOstringArea; AEEBitmapInfobi; if( ( ret = ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_QRDEC3GV, (void **)&pQrdec)) != SUCCESS ){return; } { IBITMAP_GetInfo( pBmp, &bi, sizeof(bi)); imageArea.imSize= sizeof(QRDEC_IMAGE);// 構造体サイズ imageArea.imPixels= (unsigned char*)pBmp;// フレームデータバッファ imageArea.imWidth= bi.cx;// イメージ幅 imageArea.imHeight= bi.cy;// イメージ高さ imageArea.imBitCount= 16;// ビットカウント imageArea.imCompression= QRDEC_BI_RGB;// 圧縮形式 imageArea.imSourceCameraType= QRDEC_IM_DEFAULT;// カメラ情報1 imageArea.imSourceCameraValue= 0;// カメラ情報2
55 名前:35 [04/09/30 10:57:21] codeInstructions.siSize= sizeof(QRDEC_SYMBOL_INFO); codeInstructions.siSymbolType= QRDEC_QR_CODE_M2; codeInstructions.siQRVersionLow= 0; codeInstructions.siQRVersionHigh= 0; stringArea.tiSize= sizeof(QRDEC_STRING_INFO); stringArea.tiDecodedBuffer= pMe->QR_psDecodedText; stringArea.tiMaxBufferSize= QR_MAX_DECODE_BUFFER_SIZE; stringArea.tiFormatBuffer= pMe->QR_psFormatText; if (pWorkArea == NULL) { unsigned long MemoryVecLen = IQRDE3GV_QrdecGetWorkAreaSize(pQrdec); pWorkArea = MALLOC(MemoryVecLen); } IQRDE3GV_QrdecDecodeSymbolSetParameters( pQrdec, &imageArea, &codeInstructions, &stringArea, pWorkArea); } while (ret == QRDEC_S_CONTINUE ){ ret = IQRDE3GV_QrdecDecodeSymbolNextStep(pQrdec, 150, 100, pWorkArea); } if ( ret == QRDEC_S_OK ){ DBGPRINTF("○●○ QR(Bmp):SUCCESS ○●○"); pMe->QR_lBufferSize = stringArea.tiBufferSize; }else{ ret = QR_GetErr(ret); } if(pWorkArea){ FREE(pWorkArea); } if(pQrdec){ IQRDE3GV_Release(pQrdec); } return; }
56 名前:35 [04/09/30 10:58:12] 大変長くなってしまって申し訳ありません。 宜しくお願いします。
57 名前:デフォルトの名無しさん mailto:sage [04/09/30 11:30:40] QRはやってないし、わからんが そらAEECLSID_JPEGを指定したらJPEGが出力 されるがな。 加工したいならRAW出力で出力して、BMPファイルに すればいいんでねーの?
58 名前:35 [04/09/30 13:27:44] >>57 AEECLSID_WINBMPやAEECLSID_NATIVEBMPが設定できなかったので、 とりあえず動かすためにAEECLSID_JPEGを設定していました。 というかCAM_ENCODE_RAWの存在をすっかり忘れていました。 RAW出力早速やってみます。
59 名前:57 mailto:sage [04/09/30 14:55:04] >>58 CAM_PARM_VIDEO_ENCODE_LISTでGetParamやれば サポートフォーマットは取得できる。 まぁ〜BMPサポートしているのなんか見たこと 無いけど とりあえず、RAWはメーカ依存なので絶対とは いえんけどYUV422で出力されると思われ # RGBは見たとき無いな・・・あんのかな?
60 名前:デフォルトの名無しさん mailto:sage [04/09/30 16:20:37] とりあえず長いソースを晒すときはテキストでうぷしる でも守秘義務は守ろうな 晒せる範囲に気をつけれ でカメラだが jpg援交画像をimageで取り込み→bitmap化 getフレームのbitmapを直接取り込み あたりをすればよいかと思われ
61 名前:58 [04/09/30 21:22:04] >>59-60 情報提供&忠告有難うございます。 RAW出力でやってみたのですが、やはりうまくいかないようです。 >jpg援交画像をimageで取り込み→bitmap化 >getフレームのbitmapを直接取り込み サンプルのコードを見る限り、解析するときに ret32 = IFILE_Read(pFile, (void *)&bmFh, 14); ret32 = IFILE_Read(pFile, (void *)&bmIh, sizeof(BITMAPINFOHEADER)); で取得した情報を元に16bitに変換してるようなので、 BMP形式でファイルに保存してからじゃないと無理っぽいです。 IBitmapから直接解析しようとすると、 Extensionの構造体(特にQRDEC_IMAGEのimPixels)に何を入れていいかわからない状態です。
62 名前:デフォルトの名無しさん [04/09/30 22:58:44] BREW 上でMINIXをさらにショボくしたようなレベルの簡易OSが作れないかな、 と思っているんですが、ちょっと質問。 1、MMUはイジれますか?第一、そもそもハード的にありますか? 2、少なくとも、Dirty Bitは見たいのですが、可能ですか? 3、例外や割り込みはトラップできますか。とりわけ、ページフォルトは? 4、簡易OS上のアプリからのBREWのAPIコールやライブラリコールをトラップ (正確には禁止)できますか? クアルコムは、BREWでJavaVMも書けるよ、と怪気炎を吐いていますので、 このあたりのOSレベルの機能も無理やり開放させる方法があるような気がするのですが、 どうでしょうか。
63 名前:デフォルトの名無しさん mailto:sage [04/10/01 22:07:00] BREW Developers Agreementについて解説してあるサイトとかないですか? グラントバック条項として BREWの開発に役立つ特許なら親会社のでも子会社のでもクアルコムに実施料無料で 自由に使わせろって書いてあるように読めるんだけど。 子会社はともかく親会社にそんなこと認めてもらうなんて・・・。 みんなこんな契約そのまま承諾してるのかなあ?
64 名前:デフォルトの名無しさん mailto:sage [04/10/02 01:50:48] >>60 関係ないが 援交っていーぱつ変換でだすなんt
65 名前:デフォルトの名無しさん [04/10/02 03:20:44] >>62 だれか教えて! とりわけ、 ・ページフォルトがトラップできるか ・BREW API/ライブラリへのコールがトラップ(もしくは禁止)できるか ・ダーティービットが見れるか この三点、よろしくお願いします。
66 名前:デフォルトの名無しさん [04/10/03 23:27:08] うーん。クアルコムのサイトでの検索結果では、 非常にダメっぽいなぁ。mmap() すらないんだもんな。
67 名前:デフォルトの名無しさん mailto:sage [04/10/04 09:24:17] 型宣言について聞いてみたい。 BREWでは int16, int32, uint16, uint32 といった型がわざわざtypedefされているが インターフェイスのヘルプを見ると引数や戻り値に int と書かれているものもある。 みなさんソース書くときにint16とかの記述で統一してますか? それともintも混在で? 「そんなの好きに書けばいいじゃない」って、気にするほどのもんでもないのかな。 (結局はコンパイルでintやlongに置き換わるわけだし) 実は bool型 true, false が boolean型 TRUE, FALSE (1, 0でdefineされてる) で定義されてるのもかなりウザイと感じている。 boolean result = (a != b); がエラーになってバカらしいなと… (BREW的には boolean result = (a != b) ? TRUE : FALSE; )
68 名前:デフォルトの名無しさん [04/10/04 10:17:27] >みなさんソース書くときにint16とかの記述で統一してますか? それともintも混在で? 自分で宣言した変数ではintしか使ってない。 >実は bool型 true, false が >boolean型 TRUE, FALSE (1, 0でdefineされてる) >で定義されてるのもかなりウザイと感じている。 同感。すげーウザイ。 他にも、KDDI認証とかマニュアルの不便さとか、挙げればキリがない。
69 名前:デフォルトの名無しさん mailto:sage [04/10/04 10:33:24] BREWは、VC依存でしょうか? gccでは使用できませんか?
70 名前:デフォルトの名無しさん mailto:sage [04/10/04 11:28:33] 素人なので間違えてたらごめんなさい。 GNUDEでもできるみたいなんですが、 elf2modが必要で、正式デベロッパーになるか、 auのBREWCPになるか、Visual Studio Addin を入れないといけないみたいですね。 ところで、Visual Studio Addin入れようとするとエラーになるんですが、 やっぱりVisual Studioがないといけないんでしょうか。 String NO_VS_ERR_MSG1 was not found in string table.って出ます。
71 名前:69 mailto:sage [04/10/04 11:35:10] >>69 の質問は、gccで作成されたアプリの資源が生かされるのかどうかの為に聞きました。 よろしく、お願いします。m(. .)m
72 名前:69 mailto:sage [04/10/04 11:38:37] >>70 すいません。レスを確認しませんでした。 >GNUDEでもできるみたいなんですが、 >elf2modが必要で、正式デベロッパーになるか、 >auのBREWCPになるか、Visual Studio Addin を入れないといけないみたいですね。 なるほど、そうなんですか。gccでも可能ってことですね。 ありがとうございました。
73 名前:デフォルトの名無しさん mailto:sage [04/10/04 17:19:33] >>69-72 エミュレータ用のDLLを生成するには、Visual C++相当のコンパイラが必要。 gccがVCと互換性のあるDLLを吐いてくれるのかどうかは知らん。 実機向けにビルドするならgccで問題ないが、>>70 にあるとおり、Visual Studioが 入っていないとgcc用のelf2modがインストールできない。 まあ、gccベースのアプリをBREW化するのはコンパイラ以外の問題のほうが多いと思うが... (グローバル変数、Cの標準関数、浮動小数点演算が全部NG。 C++の機能も制限あり...これはgccだと回避できるのかな? 100%イベントドリブン+シングルスレッドな構造にそのまま移植できるソースなんて そうないだろうし。)
74 名前:デフォルトの名無しさん mailto:sage [04/10/04 22:41:55] まあ武龍の売りはイベントドンブリとかうっへり言語じゃなくて 高速で動く高性能チップと それようのネットリワーク環境が ワンセットになっている事らしいから まあチップの中の人とか小人さんがいくら優秀でも それに命令を渡すため書類の書き方やら手続きやら用語やらがあれだったら 中の人やら小人さんも働きようがないゃな
75 名前:949 [04/10/05 14:12:49] 質問が御座います。 今朝端末でアプリを立ち上げた所、 「エラーが発生しました(004)」と表示され、 製作中の全てのアプリで同じ現象が 発生している状態です。(⊃△T) ※昨日まで動作していました エラー004の内容についてお知りの方、 助言していただけないでしょうか?
76 名前:デフォルトの名無しさん mailto:sage [04/10/05 14:21:56] >>75 SIGファイルの期限切れ
77 名前:75 [04/10/05 14:30:33] >SIGファイルの期限切れ (゚△゚;) クライアント様に新しいの用意して もらいまふ…。_| ̄|○||| >>76 早急なレスありがとうございました。
78 名前:デフォルトの名無しさん mailto:sage [04/10/05 16:14:22] _| ̄|〇.oO( IBITMAP_Release2回やらんとメモリ解放されない・・・・) 原因が解かりません。 まさか仕様って訳じゃ無いですよ・・・ね? 一応解放されるけどなんか気持ち悪いです。 どなたか解決法知ってましたら助けてくださぃ。
79 名前:78 mailto:sage [04/10/05 16:24:52] 自己解決しました。 2次配列で取得してました(;´Д⊂)
80 名前:デフォルトの名無しさん mailto:sage [04/10/05 17:36:48] >>77 SIGは3ヶ月で切れるから気をつけれ
81 名前:デフォルトの名無しさん mailto:sage [04/10/06 14:26:42] 前スレでGCCでのビルドについて質問した者です。 makefileアップしてもらってもうまく行かずに悩んでいたが、>>76 ではたと気づいたよ。 sig作り直したらうまく行きました(;°д°) ついでにC++でもHelloWorldレベルでの確認までできたのでフォーラムのほうにアップしますた。 ttp://brewforums.qualcomm.com/ja/showthread.php?s=&threadid=97 みんなありがとう!(^^)!
82 名前:デフォルトの名無しさん mailto:sage [04/10/06 23:49:26] 武龍で強制的にスリープさせる方法なんてあんのかね?
83 名前:デフォルトの名無しさん mailto:sage [04/10/07 01:17:05] >>81 お〜ま〜え〜は〜ア〜ホ〜か〜 まあ、実際良くあることだけどな
84 名前:デフォルトの名無しさん mailto:sage [04/10/07 11:27:20] BREWで動く関数ポインタの使い方を教えていただけませんか? 下のに書いた感じで、エミュでは問題なく動いてるんですが、 armコンパイルするとエラーが(⊃д⊂) switch caseや if else 多用すれば良いとも言うけど… //キーイベントが発生したら、本関数をコール KeyEvent(AEEApplet *a, uint16 wParam) { void (*key[])(AEEApplet*, uint16)={ KeyEvent_0, //0 KeyEvent_1, //1 KeyEvent_2, //2 … }; //共通処理 key[a->JumpNo]; //各関数へジャンプ }; void KyeEvent_0(AEEApplet *a, uint16 wParam) { //個別処理 } void KyeEvent_1(AEEApplet *a, uint16 wParam) { //個別処理 } //以下略
85 名前:デフォルトの名無しさん mailto:sage [04/10/07 22:23:24] リンク時にはまだ関数のアドレスが確定してないから、変数の初期値として 関数のアドレスは指定できないよ。 実行しはじめてからでないと。
86 名前:84 mailto:sage [04/10/08 00:14:02] なるほど… つまるところ関数ポインタをメンバ構造体へ突っ込んどいて、 動的に初期化すればOKて事ですか・・? うーん、そこまでやるならif elseでズラズラ書いた方が良いかなぁ… ひとまずやってみます。ありがとうございました。
87 名前:デフォルトの名無しさん mailto:sage [04/10/08 07:13:45] >>85 それじゃぁ呼び出しもできないね。 >>86 「なるほど」じゃねぇだろ。
88 名前:84 mailto:sage [04/10/08 08:52:35] armコンパイル時にリンクでエラーが出てたと思ったので、 納得してしまったんでつが… じゃぁどーすりゃいいんだyp!ヽ(`Д´)ノ
89 名前:デフォルトの名無しさん mailto:sage [04/10/08 08:55:28] >>88 「思った」ってなんだよ? エラーでたならエラーメッセージ貼って質問するのが基本なわけだが、できないのか?
90 名前:デフォルトの名無しさん mailto:sage [04/10/08 09:11:51] >>84 >key[a->JumpNo]; //各関数へジャンプ これに引数は書かないのか? (*key[a->JumpNo])(a, wParam); ではダメ? ちなみに関数ポインタは実機でも使えるよ。 リンクも通るし、できた mod もちゃんと動く。 ただ、前の開発では配列にしたら何故かダメだった。 調べるのもめんどくさいので switch で切り分けた (´A`)
91 名前:デフォルトの名無しさん mailto:sage [04/10/08 10:14:34] グローバルなポインタの配列?は出来ないくさい。 テーブルのテーブルとかすると叱られた。
92 名前:デフォルトの名無しさん mailto:sage [04/10/08 10:59:39] なんかBREWの仕様もさながら ARMコンパイラが腐ってるのが苦労の原因に見える……外から見てると
93 名前:デフォルトの名無しさん [04/10/08 11:56:36] 質問です。 通信処理を行った後、少しの間動作が遅くなる といった現象が起きているのです。 どうもIWEB_GetResponse使った時点から 遅くなってる様なのですが、 同じ様な現象が起こった方アドバイスいただけませんか? ちなみにソースはこんな感じ↓ venus.aez.jp/uploda/dat/upload10830.txt SDKのサンプル元にしてます。 よろしくお願い致します。
94 名前:デフォルトの名無しさん mailto:sage [04/10/08 15:09:39] >>93 とりあえず、ぱっと見の突込み所(遅くなる原因かはわからないけど) なんでデータ受信時の再読み込み系でCALLBACK_Initを 何回もやっているの?必要だっけか? たまにしかアクセス行かないアプリなら別だけど IWebをリクエスト毎に生成するのは何故? IWebは基本的に使いまわすもの
95 名前:デフォルトの名無しさん mailto:sage [04/10/08 17:18:38] >>94 CALLBACK_Initについてはコールバック設定前に行うっていうのはどっかに書いてあったはず・・・。 あとIWebについてだけど あれって使いまわせないと思うんだが? IWebはIWEB_Releaseを行わないと切断できないし。 ついでに>>93 については分からないなぁ・・・。 俺のときはメモリを細かく取ってたら遅くなったけど。
96 名前:デフォルトの名無しさん mailto:sage [04/10/09 00:41:23] >>91 constつけてないだろ。
97 名前:デフォルトの名無しさん mailto:sage [04/10/09 23:48:57] ラボで貸してくれるという評価ボードって何ができるの? ICEつなげてソースデバッグとかできるとありがたいんだが・・・・
98 名前:デフォルトの名無しさん mailto:sage [04/10/11 12:26:02] MSのeMbedded VC++4.0でBREW用バイナリは出来ないのかなぁ・・・。
99 名前:デフォルトの名無しさん mailto:sage [04/10/12 19:13:16] J2Bトランスレータってどうしたんでしょうね。 10月から始まるって話でしたよね。
100 名前:デフォルトの名無しさん mailto:sage [04/10/12 20:11:31] Javaに詳しいトランスレーター用の中の人が思ったより集まらなかったのでは? どうせ家内製手工業だろうし