#ifndef SYUKEI_SERI_H #define SYUKEI_SERI_H /*---------------------------------------------------------------------- syukei_seri.h ----------------------------------------------------------------------*/ #define U3_ADR 0x03 // ユニット3 #define U4_ADR 0x04 // ユニット4 #define U7_ADR 0x07 // ユニット7 #define U8_ADR 0x08 // ユニット8 #define LIMIT_ADR 0xFF // 瞬時値取得用変動値 #define DATE_ADR 0x30 // 日時設定 #define R 'R' // 読み込み #define W 'W' // 書き込み #define DEF_SERI_DEVICE "/dev/ttymxc2" // デフォルトシリアルデバイス #define POLL_DELAY 3000 // 開始から30秒遅らせる(*10ms) // FIFO受信マトリクスステータス typedef enum { StaFifoRecvStx, // STX待機 StaFifoRecvProcNo, // プロセス番号待機 StaFifoRecvEtx // ETX待機 } eStaFifoRecv; // FIFO受信マトリクスイベント typedef enum { EvtFifoRecvStx, // STX受信 EvtFifoRecvEtx, // ETX受信 EvtFifoRecvData, // その他のデータ受信 EvtFifoRecvMax // 読み出しイベント数 } eEvtFifoRecv; // シリアル受信マトリクスステータス typedef enum { StaSeriRecvStx, // STX受信 StaSeriRecvAddr, // アドレス StaSeriRecvFn, // ファンクション StaSeriRecvRw, // RW StaSeriRecvData, // データ受信 StaSeriRecvCrc // CRC } eStaSeriRecv; // シリアル受信マトリクスイベント typedef enum { EvtSeriRecvStx, // STX受信 EvtSeriRecvData, // その他受信 EvtSeriRecvTimeout, // タイムアウト EvtSeriRecvMax // 受信イベント数 } eEvtSeriRecv; // シリアル送信マトリクスステータス typedef enum { StaSeriSendReq, // シリアル送信要求待機 StaSeriSendRes, // シリアル応答受信待機 StaSeriSendRetry // シリアル送信リトライ } eStaSeriSend; // シリアル送信マトリクスイベント typedef enum { EvtSeriSendNone, // イベント無し EvtSeriSendReq, // 送信要求 EvtSeriSendRes, // 送信応答完了 EvtSeriSendTimeout, // 送信タイムアウト EvtSeriSendMax // 送信イベント数 } eEvtSeriSend; typedef enum { SeqInit, // 初期化 SeqWait, // 待機 SeqCheckAdd, // ポーリング追加確認 SeqWaitRecv, // ポーリング受信待機 SeqCheckSave // 保存確認 } eSeriSeq; // FIFO受信構造体 #define FIFO_BUF_SIZE 100 // FIFO受信バッファサイズ #define FIFO_MATRIX_RUNNING (0x98769876) // FIFO受信中 typedef struct { eStaFifoRecv Sta; // FIFO受信マトリクスステータス char Buff[FIFO_BUF_SIZE]; // バッファ unsigned int Len; // 受信サイズ char ProcNo; // プロセス番号 unsigned long Run; // 受信中フラグ } stFifoRecv; // シリアル受信構造体 //#define RECV_BUF_SIZE 1300 // 受信バッファサイズ #define RECV_BUF_SIZE 256 #define DATA_BUF_SIZE 1333 // 最大データ部 #define RECV_MATRIX_RUNNING (0x98769876) // シリアル受信中 typedef struct { eStaSeriRecv Sta; // シリアル受信マトリクスステータス char Addr; // アドレス char Rw; // R/W char Data[DATA_BUF_SIZE + 1]; // データ int Max; // 受信サイズ int Count; // カウンタ unsigned short Crc16; // CRC16 unsigned long Time; // 受信タイムアウト基準時間 unsigned long Run; // 受信中フラグ } stSeriRecv; // シリアル送信構造体 #define SEND_NUM_MAX 100 // 送信コマンド登録段数 #define SEND_BUF_SIZE 100 // 送信バッファサイズ #define SEND_MATRIX_RUNNING (0x98769876) // シリアル送信中 typedef struct { eStaSeriSend Sta; // シリアル送信マトリクスステータス char Buff[SEND_NUM_MAX][SEND_BUF_SIZE]; // バッファ int Lens[SEND_NUM_MAX]; // 送信数バッファ unsigned short NumW; // バッファ書き込みポインタ unsigned short NumR; // バッファ読み込みポインタ char Addr; // アドレス char Rw; // RW unsigned short Crc16; // CRC16 int Retry; // リトライ回数 unsigned long Time; // 送信タイムアウト基準時間 unsigned long Run; // 送信中フラグ } stSeriSend; // シリアル応答構造体 #define GET_RESPONSE (0x1234abcd) // 応答受信 #define RES_OK (0xabcd) // 応答正常 #define RES_NG (0xfedc) // 応答異常 typedef struct { int Status; // 正常or異常 int End; // 応答完了 } stResponse; // 設定構造体 #define DISABLE (0x9753) // ポーリング許可用 typedef struct { unsigned long RecvTimeout; // 受信タイムアウト時間(10ms単位) unsigned long SendTimeout; // 送信タイムアウト時間(10ms単位) int Retry; // リトライ回数 unsigned long PollingCycle; // ポーリング周期((10ms単位) int PollingDis; // ポーリング禁止 char Block[LEN_TERM + 1]; // ブロック名 char Bldg[LEN_TERM + 1]; // ビル名 char Floor[LEN_TERM + 1]; // フロア名 char Num[LEN_TERM + 1]; // 架番号 char IpAddr[LEN_TERM + 1]; char Port[LEN_TERM + 1]; char Peak[10]; // 瞬時値取得用変動値 } stSetting; // チャンネル構造体 typedef struct { double Tmp; // 平均値加算用 double Peak[PEAK_MAX]; // ピーク } stCh; #define DT_SIZE 6 // 日付型バイト数 // ユニット構造体 typedef struct { int Recv; // 受信成功 char TimeStamp[DT_SIZE]; // 日付 stCh Ch[CH_MAX]; // チャンネル int Count; // 平均値加算カウンタ } stUnitData; // フラグ構造体 typedef struct { unsigned AveSaveSkip : 1; // 平均値保存スキップ unsigned PeakSaveSkip : 1; // 瞬時値保存スキップ unsigned PeakSave : 1; // ピーク値保存 }stFlags; // IO共用体 typedef union { unsigned int Port; // ポート struct { unsigned RtcErr : 1; // RTCエラー unsigned Hotswap : 1; // ホットスワップ unsigned RtcSetting : 1; // RTC設定中 }; }unGpio; // ユニットアドレス const int units[] = { 3, 4, 7, 8 }; // ユニット配列 // IO名称 const char* ioName[] = { GPIO_RTC_ERR, // RTC エラー GPIO_HOTSWAP_I, // ホットスワップ GPIO_RTC_SETING // RTC 設定中 }; // プロトタイプ宣言 int InitGpio(void); void ModeUsual(void); void ClearAve(void); #endif //#ifndef SYUKEI_SERI_H