構文
long OseComm(
long sessionID,
int terminateKey,
const char *appVersion,
pOnOseCommInfo OnOseCommInfo
);
パラメータ
- sessionID
-
[in] 通信セッションを識別するID番号を指定します。
- 指定可能な値は0〜16777215 (0x000000〜0xFFFFFF)です。
- -1を指定すると、端末内で生成した乱数の値を使用します。
(注意)
- OseComm32ユーティリティの[受信ファイルダイアログ]にある[アドバンスファイル名]の設定の中の「端末ID」は、このパラメータで指定した値を使用します。 システムメニューの端末ID 設定の値ではないことに注意してください。
- システムメニューの端末ID 設定の値をID番号として使用する場合は、GetTerminalId関数で値を取得してください。 この場合は、端末ID 設定を使用して端末ごとにID番号を設定する必要があります。
- 端末のシリアル番号の値をID番号として使用する場合は、GetSerialNo関数を使用して取得してください。
- terminateKey
-
[in] 通信セッションを中断するための入力キーを指定します。
- [ANY_KEYS_ABORT]は任意のキーを押すと中断します。
- 0'-'9'、またはその他のキーコードは指定されたキーを押すと中断します。
- SHIFTキー,電源キー,サイドキーでは中断しません。
- appVersion
-
[in] 接続先からバージョン番号を要求された場合に返す文字列を指定します。
- スペース(0x20)は使用しないでください。
- スペース以降の文字列は無効となります。
- OnOseCommInfo
-
[out] セッションの状態遷移を取得するコールバック関数を指定します。
- 取得不要の場合、NULLを指定します。
- [コールバック関数の書式]:
void OnOseComInfo(int status, int errorsuccess, int progress, const char *info);
status -
[out] 通信セッションの種類が格納されます。
値 説明 STAT_GET_TIME_DATE 日時取得 STAT_SET_TIME_DATE 日時設定 STAT_GET_OS_VERSION OSバージョン取得 STAT_GET_APPL_VERSION アプリケーションバージョン取得 STAT_XMIT_FILE_TO_PC ファイル送信 STAT_RECV_FILE_FROM_PC ファイル受信 STAT_LIST_FILES ファイル一覧 STAT_DELETE_FILES ファイル削除 - errorsuccess
-
[out] セッションの状態が格納されます。
- [SUCC_COMPLETE]はセッション正常完了となります。
- または下記「戻り値」のいずれかの値を取ります。
- progress
-
[out] ファイル送受信の場合、進捗が0〜100の値で格納されます。
- その他のセッションの場合、0が格納されます。
- info
-
[out] ファイル送受信の場合、ファイル名が格納されます。
- その他のセッションの場合、0が格納されます。
戻り値
値 | 説明 |
---|---|
COMM_OK | 正常終了 |
ERR_PR_NO_RESPONSE | 返答なし |
ERR_PR_CRC | CRC-16エラー |
ERR_PR_CMD_MISMATCH | コマンド不整合 |
ERR_PR_FRAME_LENGTH | フレーム長エラー |
ERR_PR_SESSION_ID | セッションID不整合 |
ERR_PR_SENDING_FRAME | フレーム送信エラー |
ERR_PR_OPEN_FILE | ファイルを開けない |
ERR_PR_READ_FROM_FILE | ファイルを読めない |
ERR_PR_WRITE_TO_FILE | ファイルに書き込めない |
ERR_PR_WRONG_BLOCK | ブロック番号エラー |
ERR_PR_FILE_SIZE | ファイルサイズエラー |
ERR_PR_POLL_COMMAND | 想定されないポーリング |
ERR_PR_FILE_UNAVAILABLE | ファイルが存在しない |
ERR_PR_LINE_BUSY | ビジー |
ERR_PR_TIME_DATE | 日時設定エラー |
ERR_PR_DELETE_FILE | ファイル削除失敗 |
ERR_PR_USER_ABORT | ユーザによる中断 |
解説
OseCommプロトコルを開始します。
必要条件
ヘッダファイル:
lib.hライブラリファイル:
libSTARTUPOPH5000.a
サンプル
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "lib.h"
void sampleMain(void);
void OnOseComInfo(int status, int errorsuccess, int progress, const char *info);
bool BT_Connect(char *BD_address);
void BT_Disconnect(void);
char *bd_address = "00126AFFE131"; //BD address of PC's Bluetooth adapter
static bool g_BT_Opened = false;
void main(void)
{
while(1){
printf("\n## OseComm sample ##\n");
printf(" Press ENT to start\n");
while(1){
if (kbhit()){
if (getchar() == ENT_KEY){
sampleMain();
break;
}
}
Idle();
}
}
}
void sampleMain(void)
{
char serialNoText[17];
long serialNo;
bool aborted = false;
long result;
printf(" <Press BS to abort>\n");
printf(" Bluetooth started\n");
// Wait for Bluetooth connection
while (!BT_Connect(bd_address)){
if (kbhit()){
if (getchar() == BS_KEY){
aborted = true;
printf(" ->Aborted\n");
break;
}
}
Idle();
}
if (aborted){
BT_Disconnect();
return;
}
printf(" ->Connected\n");
// Do OseComm protocol while Bluetooth is connected
printf(" OseComm started\n");
//Use serial no as a session ID.
GetSerialNo(serialNoText);
serialNo = atol(serialNoText);
result = OseComm(serialNo, BS_KEY, "SAMPLE1.0", OnOseComInfo);
if (result == COMM_OK){
printf(" ->success\n");
}else if (result == ERR_PR_USER_ABORT){
printf("\n ->aborted\n");
}else{
printf(" ->error(%ld)\n", result);
}
BT_Disconnect();
return;
}
void OnOseComInfo(int status, int errorsuccess, int progress, const char *info)
{
switch (status)
{
case STAT_GET_TIME_DATE:
printf(" > get time\n");
break;
case STAT_SET_TIME_DATE:
printf(" > set time\n");
break;
case STAT_GET_OS_VERSION:
printf(" > OS version\n");
break;
case STAT_GET_APPL_VERSION:
printf(" > APP version\n");
break;
case STAT_XMIT_FILE_TO_PC:
if (errorsuccess == SUCC_COMPLETE){
printf("\n");
}else if (errorsuccess == 0){
printf(" > S:%s:%d\r", info, progress);
}else if (errorsuccess != 0){
printf("\n -->Error(%d)\n", errorsuccess);
}
break;
case STAT_RECV_FILE_FROM_PC:
if (errorsuccess == SUCC_COMPLETE){
printf("\n");
}else if (errorsuccess == 0){
printf(" > R:%s:%d\r", info, progress);
}else if (errorsuccess != 0){
printf("\n -->Error(%d)\n", errorsuccess);
}
break;
case STAT_LIST_FILES:
//printf(" > list file\n");
break;
case STAT_DELETE_FILES:
printf(" > delete file\n");
break;
default:
printf(" > unknown:%d\n", status);
break;
}
}
bool BT_Connect(char *BD_address)
{
if (GetConnectionStatus(COM3) != COM_STATE_CONNECT){
if (!g_BT_Opened){
// Open COM3 (Bluetooth SPP/Master)
SetDefault(COM3);
BltSetConnectAddress(BD_address);
if (ComOpen(COM3) == OK){
BltWaitAcceptStart();
g_BT_Opened = true;
}
}
return false;
}else{
BltWaitAcceptEnd(TRUE);
return true;
}
}
void BT_Disconnect(void)
{
if (g_BT_Opened){
BltWaitAcceptEnd(TRUE);
ComClose(COM3);
g_BT_Opened = false;
}
}
最終更新日:2021/06/07