/************************************************************
 **
 **     Object name : rasp-netapi-cmd.h
 **
 **     Description
 **     -- -- -- -- -- -- -- --
 **     RASPをネットワーク経由で利用するためのAPIにおける
 **     クライアント＆サーバ共通ヘッダファイル
 **     非公開ファイル
 **
 **     History
 **     -- -- -- -- -- -- -- --
 **     [ver2履歴]
 **     2011.04.21 K.Takagi A/D停止中のコンバータの状態設定を追加
 **     2011.04.12 K.Takagi 統合化のために整理
 **
 **
 **     [ver1履歴]
 **     2011.02.07 K.Takagi コメント類を整備
 **     2010.10.18 K.Takagi 新規作成
 **                         従来のシステムをベースに移植
 **
 **     Copyright (c) 2010-2011
 **     System In Frontier,Inc.
 **
 **     All rights reserved. 
 **
 **     当社の許可なしに複製および転載を禁ず
 **
 */


/*=========================================================*/
/*               Special Macro Definition                  */
/*=========================================================*/

#ifndef _INCLUDE_RASP_NET_API_COMMON_H_
#define _INCLUDE_RASP_NET_API_COMMON_H_

/*=========================================================*/
/*                   Include Files                         */
/*=========================================================*/

/*=========================================================*/
/*                   Macro Definition                      */
/*=========================================================*/

/* 通信で使用するポート番号 */
#define WS_CONTROL_PORT                     52920
#define WS_DATA_PORT                        (WS_CONTROL_PORT+1)
#define WS_FPAA_PORT                        (WS_CONTROL_PORT+2)
#define WS_DA_CONTROL_PORT                  (WS_CONTROL_PORT+3)
#define WS_DA_DATA_PORT                     (WS_CONTROL_PORT+4)
#define WS_KERNEL_UPDATE_PORT               (WS_CONTROL_PORT+5)
#define WS_SYSTEM_PARAM_PORT                (WS_CONTROL_PORT+6)


#define WS_CONTROL_SERVER_MAX_CONNECTION        3
#define WS_DATA_SERVER_MAX_CONNECTION           3
#define WS_FPAA_SERVER_MAX_CONNECTION           3
#define WS_DA_CONTROL_SERVER_MAX_CONNECTION     3
#define WS_DA_DATA_SERVER_MAX_CONNECTION        3
#define WS_SYSTEM_PARAM_SERVER_MAX_CONNECTION   3



/* 通信で使用するコマンド */
#define SET_FLAG         0x00000000
#define GET_FLAG         0x10000000
#define MISC_FLAG        0x20000000
#define SYS_FLAG         0x40000000

#define WS_CMD_BASE      0x00219700

/*************************************************/
/******************** A/D関係 ********************/
/*************************************************/

/* 開始・停止制御 */
#define WS_CMD_CONTINUATION_AD_START    (SET_FLAG  | WS_CMD_BASE | 0x01)
#define WS_CMD_ONE_SHOT_AD_START        (SET_FLAG  | WS_CMD_BASE | 0x02)
#define WS_CMD_AD_STOP                  (SET_FLAG  | WS_CMD_BASE | 0x03)
#define WS_CMD_AD_DA_START              (SET_FLAG  | WS_CMD_BASE | 0x04)

/* タイムスタンプ */
#define WS_CMD_SET_TIMER                (SET_FLAG  | WS_CMD_BASE | 0x0F)
#define WS_CMD_GET_TIMER                (GET_FLAG  | WS_CMD_BASE | 0x0F)

/* サンプリング周波数 */
#define WS_CMD_SET_FREQ                 (SET_FLAG  | WS_CMD_BASE | 0x11)
#define WS_CMD_GET_FREQ                 (GET_FLAG  | WS_CMD_BASE | 0x11)

/* 同期サンプリングCH数モード設定 */
#define WS_CMD_SET_CHANNEL              (SET_FLAG  | WS_CMD_BASE | 0x12)
#define WS_CMD_GET_CHANNEL              (GET_FLAG  | WS_CMD_BASE | 0x12)

/* 未使用 */
#define WS_CMD_SET_SAMPLE_COUNT         (SET_FLAG  | WS_CMD_BASE | 0x13)
#define WS_CMD_GET_SAMPLE_COUNT         (GET_FLAG  | WS_CMD_BASE | 0x13)

/* A/Dコンバータの動作設定 */
#define WS_CMD_SET_AD_MODE              (SET_FLAG  | WS_CMD_BASE | 0x14)
#define WS_CMD_GET_AD_MODE              (GET_FLAG  | WS_CMD_BASE | 0x14)

/* 同期サンプリングのCHの個別設定 */
#define WS_CMD_SET_CAPTURE_CHANNELS     (SET_FLAG  | WS_CMD_BASE | 0x15)
#define WS_CMD_GET_CAPTURE_CHANNELS     (GET_FLAG  | WS_CMD_BASE | 0x15)

/* A/Dデータフォーマット */
#define WS_CMD_SET_AD_FORMAT            (SET_FLAG  | WS_CMD_BASE | 0x16)
#define WS_CMD_GET_AD_FORMAT            (GET_FLAG  | WS_CMD_BASE | 0x16)

/* 16bitデータ時のシフト量制御 */
#define WS_CMD_SET_AD_SHIFT_SIZE        (SET_FLAG  | WS_CMD_BASE | 0x17)
#define WS_CMD_GET_AD_SHIFT_SIZE        (GET_FLAG  | WS_CMD_BASE | 0x17)

/* A/Dゲイン設定 */
#define WS_CMD_SET_CAPTURE_GAIN         (SET_FLAG  | WS_CMD_BASE | 0x18)
#define WS_CMD_GET_CAPTURE_GAIN         (GET_FLAG  | WS_CMD_BASE | 0x18)

/* A/Dデータヘッダ制御 */
#define WS_CMD_SET_AD_HEADER_FLAG       (SET_FLAG  | WS_CMD_BASE | 0x19)
#define WS_CMD_GET_AD_HEADER_FLAG       (GET_FLAG  | WS_CMD_BASE | 0x19)

/* A/Dコンバータの停止中の設定 */
#define WS_CMD_SET_AD_SLEEP_MODE        (SET_FLAG  | WS_CMD_BASE | 0x1A)
#define WS_CMD_GET_AD_SLEEP_MODE        (GET_FLAG  | WS_CMD_BASE | 0x1A)


/*************************************************/
/******************** D/A関係 ********************/
/*************************************************/

/* 開始・停止制御 */
#define WS_CMD_DA_START                 (SET_FLAG  | WS_CMD_BASE | 0x31)
#define WS_CMD_DA_READY                 (SET_FLAG  | WS_CMD_BASE | 0x32)
#define WS_CMD_DA_STOP                  (SET_FLAG  | WS_CMD_BASE | 0x33)
#define WS_CMD_DA_STOP_WAIT             (SET_FLAG  | WS_CMD_BASE | 0x34)

/* 出力制御 */
#define WS_CMD_SET_DA_OUTPUT_ENABLE     (SET_FLAG  | WS_CMD_BASE | 0x36)
#define WS_CMD_GET_DA_OUTPUT_ENABLE     (GET_FLAG  | WS_CMD_BASE | 0x36)

/* ループバック制御 */
#define WS_CMD_SET_DA_LOOP_BACK_CH      (SET_FLAG  | WS_CMD_BASE | 0x37)
#define WS_CMD_GET_DA_LOOP_BACK_CH      (GET_FLAG  | WS_CMD_BASE | 0x37)

#define WS_CMD_SET_DA_LOOP_BACK_MODE    (SET_FLAG  | WS_CMD_BASE | 0x38)
#define WS_CMD_GET_DA_LOOP_BACK_MODE    (GET_FLAG  | WS_CMD_BASE | 0x38)

#define WS_CMD_GET_DA_STATUS            (GET_FLAG  | WS_CMD_BASE | 0x39)

/* D/AコンバータのMute制御 */
#define WS_CMD_SET_DA_MUTE_MODE         (SET_FLAG  | WS_CMD_BASE | 0x41)
#define WS_CMD_GET_DA_MUTE_MODE         (GET_FLAG  | WS_CMD_BASE | 0x41)

/* D/Aコンバータの出力ゲイン制御 */
#define WS_CMD_SET_DA_GAIN              (SET_FLAG  | WS_CMD_BASE | 0x42)
#define WS_CMD_GET_DA_GAIN              (GET_FLAG  | WS_CMD_BASE | 0x42)

/* D/Aコンバータのオーバーサンプリングレート制御 */
#define WS_CMD_SET_DA_OVER_SAMPLE_RATE  (SET_FLAG  | WS_CMD_BASE | 0x43)
#define WS_CMD_GET_DA_OVER_SAMPLE_RATE  (GET_FLAG  | WS_CMD_BASE | 0x43)

/* 周波数設定（A/Dと共通） */
#define WS_CMD_SET_DA_FREQ              (SET_FLAG  | WS_CMD_BASE | 0x11)
#define WS_CMD_GET_DA_FREQ              (GET_FLAG  | WS_CMD_BASE | 0x11)

/* シングル／モノラル／ステレオ設定 */
#define WS_CMD_SET_DA_CHANNEL           (SET_FLAG  | WS_CMD_BASE | 0x12)
#define WS_CMD_GET_DA_CHANNEL           (GET_FLAG  | WS_CMD_BASE | 0x12)

/* D/Aデータフォーマット（A/Dと共通） */
#define WS_CMD_SET_DA_FORMAT            (SET_FLAG  | WS_CMD_BASE | 0x16)
#define WS_CMD_GET_DA_FORMAT            (GET_FLAG  | WS_CMD_BASE | 0x16)


/*************************************************/
/******************** FPAA関係 *******************/
/*************************************************/

/* FPAA関係 */
#define WS_CMD_SET_FPAA_CFG_DATA_SIZE   (SET_FLAG  | WS_CMD_BASE | 0x71)
#define WS_CMD_FPAA_CFG_DATA_SIZE_CHK   (MISC_FLAG | WS_CMD_BASE | 0x72)
#define WS_CMD_FPAA_CFG                 (MISC_FLAG | WS_CMD_BASE | 0x73)
#define WS_CMD_FPAA_UPDATE              (MISC_FLAG | WS_CMD_BASE | 0x74)


/*************************************************/
/********************* その他 ********************/
/*************************************************/

/* Word Clock関係 */
#define WS_CMD_SET_WORD_CLOCK_MODE      (SET_FLAG  | WS_CMD_BASE | 0x81)

/* システム更新関係 */
#define WS_CMD_SET_KERNEL_DATA_SIZE     (SET_FLAG  | WS_CMD_BASE | 0x81)
#define WS_CMD_SET_KERNEL_UPDATE_BANK   (MISC_FLAG | WS_CMD_BASE | 0x82)
#define WS_CMD_KERNEL_DATA_SIZE_CHK     (MISC_FLAG | WS_CMD_BASE | 0x83)
#define WS_CMD_KERNEL_UPDATE            (MISC_FLAG | WS_CMD_BASE | 0x84)

#define WS_CMD_SET_SYSTEM_PARAM         (SET_FLAG  | WS_CMD_BASE | 0x86)
#define WS_CMD_GET_SYSTEM_PARAM         (GET_FLAG  | WS_CMD_BASE | 0x86)
#define WS_CMD_SYSTEM_PARAM_UPDATE      (MISC_FLAG | WS_CMD_BASE | 0x87)
#define WS_CMD_SYSTEM_PARAM_SAVE        (MISC_FLAG | WS_CMD_BASE | 0x88)

/* 共通部 */
#define WS_CMD_CLEAR_LAST_ERROR         (SYS_FLAG  | WS_CMD_BASE | 0x90)
#define WS_CMD_GET_LAST_ERROR           (GET_FLAG  | WS_CMD_BASE | 0x90)
#define WS_CMD_GET_BOARD_NUM            (GET_FLAG  | WS_CMD_BASE | 0x91)
#define WS_CMD_SYSTEM_END               (SYS_FLAG  | WS_CMD_BASE | 0x99)
#define WS_CMD_SYSTEM_POWER_DOWN        (SYS_FLAG  | WS_CMD_BASE | 0x9F)

#define WS_CMD_GET_SYSTEM_INFO          (GET_FLAG  | WS_CMD_BASE | 0x98)
#define WS_SUB_CMD_GET_TARGET_INFO      1
#define WS_SUB_CMD_GET_CORE_INFO        2
#define WS_SUB_CMD_GET_BUILD_INFO       3



/* ステータスコード */
#define STATUS_OK      0x00000000
#define STATUS_WARNING 0x80000000
#define STATUS_ERROR   0xE0000000

#define WRN_UNKNOWN_CMD              (STATUS_WARNING | 0x01)
#define ERR_UNKNOWN_CMD              (STATUS_ERROR   | 0x01)
#define ERR_UNSUPPORTED_CMD          (STATUS_ERROR   | 0x11)
#define ERR_CMD_FORMAT               (STATUS_ERROR   | 0x02)
#define ERR_BAD_PARAMETER            (STATUS_ERROR   | 0x03)
#define ERR_CREATE_TASK              (STATUS_ERROR   | 0x04)
#define ERR_AD_STARTED               (STATUS_ERROR   | 0x05)
#define ERR_FPAA_NO_CONFIG           (STATUS_ERROR   | 0x06)
#define ERR_BUFFER_OVER_FLOW         (STATUS_ERROR   | 0x07)
#define ERR_BRAM_OVER_FLOW           (STATUS_ERROR   | 0x08)
#define ERR_LOCAL_BUFFER_OVER_FLOW   (STATUS_ERROR   | 0x09)
#define ERR_AD_START                 (STATUS_ERROR   | 0x10)

#define ERR_DA_STARTED               (STATUS_ERROR   | 0x21)
#define ERR_DA_BRAM_UNDER_RUN        (STATUS_ERROR   | 0x22)

#define ERR_FPAA_CFG_SIZE            (STATUS_ERROR   | 0x71)
#define ERR_FPAA_CFG_DATA            (STATUS_ERROR   | 0x72)
#define ERR_FPAA_CFG                 (STATUS_ERROR   | 0x73)
#define ERR_FPAA_UPDATE              (STATUS_ERROR   | 0x74)

#define ERR_KERNEL_DATA_SIZE         (STATUS_ERROR   | 0x81)
#define ERR_KERNEL_UPDATE_BANK       (STATUS_ERROR   | 0x82)
#define ERR_KERNEL_DATA              (STATUS_ERROR   | 0x83)
#define ERR_KERNEL_UPDATE            (STATUS_ERROR   | 0x84)

/* 通信で使用するバッファサイズ */
#define CMD_STRING_LENGTH       64
#define DATA_BUFFER_SIZE        (64 * 1024)
#define FPAA_CONFIG_DATA_SIZE   ( 3 * 1024)


/* システムパラメータ関係 */
#define CONV_KEY2CODE(c1,c2,c3,c4)  ( ((c1 << 24) & 0xff000000) | \
                                      ((c2 << 16) & 0x00ff0000) | \
                                      ((c3 <<  8) & 0x0000ff00) | \
                                      ((c4 <<  0) & 0x000000ff) )

#define SYS_PARAM_IP_ADDRESS                CONV_KEY2CODE('i','p','-','-')
#define SYS_PARAM_SAMPLING_RATE             CONV_KEY2CODE('r','a','t','e')
#define SYS_PARAM_AD_MODE                   CONV_KEY2CODE('m','o','d','e')
#define SYS_PARAM_FPAA_AUTO_CONF            CONV_KEY2CODE('f','p','a','a')
#define SYS_PARAM_DA_GAIN_L                 CONV_KEY2CODE('g','L','c','h')
#define SYS_PARAM_DA_GAIN_R                 CONV_KEY2CODE('g','R','c','h')
#define SYS_PARAM_DA_LOOP_L                 CONV_KEY2CODE('l','L','c','h')
#define SYS_PARAM_DA_LOOP_R                 CONV_KEY2CODE('l','R','c','h')
#define SYS_PARAM_DA_OVER_SAMPLING_RATE     CONV_KEY2CODE('o','s','r','-')
#define SYS_PARAM_WORD_CLOCK_OUT            CONV_KEY2CODE('w','c','o','-')


/*=========================================================*/
/*                 Structure Declaration                   */
/*=========================================================*/

/*=========================================================*/
/*                    Private Valiable                     */
/*=========================================================*/

/*=========================================================*/
/*                    Public Valiable                      */
/*=========================================================*/


#endif /* _INCLUDE_RASP_NET_API_COMMON_H_ */

/* EOF */
