OseCommプロトコルを開始します。

構文

long OseComm(
  long sessionID, 
  int terminateKey, 
  const char *appVersion,
  pOnOseCommInfo OnOseCommInfo
);

パラメータ

sessionID
[in] 通信セッションを識別するID番号を指定します。
  • 指定可能な値は0〜16777215 (0x000000〜0xFFFFFF)です。
  • -1を指定すると、端末内で生成した乱数の値を使用します。

(注意)

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