// -------------------------------------------------- // Global Versatile Controler http://www.gvc-on.net/ // -------------------------------------------------- // -------------------------------------------------- // Revision Memo (Y.M.D Editor/Memo) // -------------------------------------------------- // // 2013.05.08 T.Kabu // GVC Rev.2としてのもろもろを定義 // // -------------------- // 今までの記録 // 2011.11.04 T.Kabu // 2011.11.18 H.A. // 2011.12.02 Arduino-IDE VerUp to 1.0 // 2011.12.13 T.Kabu このファイルはベースなので、定数を各モジュールに別途記述とした // 2012.01.19 T.Kabu gvcd側からのコマンドを受け付けるようにしたベース // 2012.02.07 T.Kabu gvcd側からGVCに対して送られてきたコマンドを処理するようにした // 2012.03.02 T.Kabu 定数やテーブル定義などをヘッダファイルに分離した // 2012.10.15 T.Kabu Arduinoはメモリの制限があるので、メッセージテーブルをポインタ構造体として扱うためファイルを別ける // 2013.12.20 T.Kabu 清書と、赤外線データのサイズの関係で扱えるデータサイズをヘッダ込みで最大1600バイトまでに統一する // // このファイルはArduinoのWireライブラリディレクトリに「gvc.h」というファイル名で寄生設置すること // 例→C:\Documents and Settings\User\デスクトップ\arduino-1.0\libraries\Wire\gvc.h // -------------------- //--------------------------------------------------- // include //--------------------------------------------------- // Standard Liblary // // ここでは標準ヘッダファイルは読み込まないこと // // -------------------------------------------------- // GVC Parameter define and initialize // -------------------------------------------------- // 動作確認用LEDを接続するポート #define PORT_STATUS_LED PORTAbits.RA4 #define PORT_RESULT_LED PORTAbits.RA5 // STATUS用LEDを青色、RESULT用LEDを赤色、としている #define PORT_BLUE_LED PORTAbits.RA4 #define PORT_RED_LED PORTAbits.RA5 // 赤外線信号受信ポート #define PORT_IR_RX PORTCbits.RC0 #define PORT_IR_TX PORTCbits.RC1 // 赤外線LEDポート(0を1として反転出力すること) // 赤外線信号送信ポート(0を1として反転出力すること) #define PORT_IR_TX PORTCbits.RC1 // LEDのON/OFF用スイッチ #define LED_ON 0; #define LED_OFF 1; // メッセージタイプ #define GVC_CMD_REQUEST_VERSION 0x01 // バージョン要求コマンド #define GVC_CMD_REQUEST_MODULEINFO 0x02 // 接続モジュール情報要求コマンド #define GVC_CMD_REQUEST_MODULEDATA 0x03 // モジュールデータ取得要求コマンド #define GVC_MSG_0x04 0x04 // xxx (TBD) #define GVC_MSG_ENQ 0x05 // GVCへの各種要求 #define GVC_MSG_0x06 0x06 // xxx (TBD) #define GVC_MSG_0x07 0x07 // xxx (TBD) #define GVC_MSG_0x08 0x08 // xxx (TBD) #define GVC_MSG_0x09 0x09 // xxx (TBD) #define GVC_MSG_0x0a 0x0a // xxx (TBD) #define GVC_MSG_0x0b 0x0b // xxx (TBD) #define GVC_MSG_0x0c 0x0c // xxx (TBD) #define GVC_MSG_0x0d 0x0d // xxx (TBD) #define GVC_MSG_0x0e 0x0e // xxx (TBD) #define GVC_MSG_0x0f 0x0f // xxx (TBD) #define GVC_MSG_0x10 0x10 // xxx (TBD) #define GVC_MSG_0x11 0x11 // xxx (TBD) #define GVC_MSG_0x12 0x12 // xxx (TBD) #define GVC_MSG_0x13 0x13 // xxx (TBD) #define GVC_MSG_0x14 0x14 // xxx (TBD) #define GVC_MSG_0x15 0x15 // xxx (TBD) #define GVC_MSG_0x16 0x16 // xxx (TBD) #define GVC_MSG_0x17 0x17 // xxx (TBD) #define GVC_MSG_0x18 0x18 // xxx (TBD) #define GVC_MSG_0x19 0x19 // xxx (TBD) #define GVC_MSG_0x1a 0x1a // xxx (TBD) #define GVC_MSG_0x1b 0x1b // xxx (TBD) #define GVC_MSG_0x1c 0x1c // xxx (TBD) #define GVC_MSG_0x1d 0x1d // xxx (TBD) #define GVC_MSG_0x1e 0x1e // xxx (TBD) #define GVC_MSG_0x1f 0x1f // xxx (TBD) #define GVC_MSG_0x20 0x20 // xxx (TBD) #define GVC_MSG_OTHER 0x21 // 各種情報メッセージ #define GVC_MSG_0x22 0x22 // xxx (TBD) #define GVC_MSG_0x23 0x23 // xxx (TBD) #define GVC_MSG_0x24 0x24 // xxx (TBD) #define GVC_MSG_0x25 0x25 // xxx (TBD) #define GVC_MSG_0x26 0x26 // xxx (TBD) #define GVC_MSG_0x27 0x27 // xxx (TBD) #define GVC_MSG_0x28 0x28 // xxx (TBD) #define GVC_MSG_0x29 0x29 // xxx (TBD) #define GVC_MSG_0x2a 0x2a // xxx (TBD) #define GVC_MSG_0x2b 0x2b // xxx (TBD) #define GVC_MSG_0x2c 0x2c // xxx (TBD) #define GVC_MSG_0x2d 0x2d // xxx (TBD) #define GVC_MSG_0x2e 0x2e // xxx (TBD) #define GVC_MSG_0x2f 0x2f // xxx (TBD) #define GVC_MSG_0x30 0x30 // xxx (TBD) #define GVC_MSG_0x31 0x31 // xxx (TBD) #define GVC_MSG_0x32 0x32 // xxx (TBD) #define GVC_MSG_0x33 0x33 // xxx (TBD) #define GVC_MSG_0x34 0x34 // xxx (TBD) #define GVC_MSG_0x35 0x35 // xxx (TBD) #define GVC_MSG_0x36 0x36 // xxx (TBD) #define GVC_MSG_0x37 0x37 // xxx (TBD) #define GVC_MSG_0x38 0x38 // xxx (TBD) #define GVC_MSG_0x39 0x39 // xxx (TBD) #define GVC_MSG_0x3a 0x3a // xxx (TBD) #define GVC_MSG_0x3b 0x3b // xxx (TBD) #define GVC_MSG_0x3c 0x3c // xxx (TBD) #define GVC_MSG_0x3d 0x3d // xxx (TBD) #define GVC_MSG_0x3e 0x3e // xxx (TBD) #define GVC_MSG_0x3f 0x3f // xxx (TBD) #define GVC_MSG_0x40 0x40 // xxx (TBD) #define GVC_MSG_0x41 0x41 // 'A' Acceleration (TBD) #define GVC_MSG_0x42 0x42 // 'B' xxx (TBD) #define GVC_MSG_0x43 0x43 // 'C' Compass (TBD) #define GVC_MSG_DIST 0x44 // 'D' Distance (TBD) #define GVC_MSG_0x45 0x45 // 'E' xxx (TBD) #define GVC_MSG_0x46 0x46 // 'F' xxx (TBD) #define GVC_MSG_0x47 0x47 // 'G' Gyro (TBD) #define GVC_MSG_HUMI 0x48 // 'H' Humidity (TBD) #define GVC_MSG_IR 0x49 // 'I' Infrared (TBD) #define GVC_MSG_0x4a 0x4a // 'J' xxx (TBD) #define GVC_MSG_0x4b 0x4b // 'K' xxx (TBD) #define GVC_MSG_LIGHT 0x4c // 'L' LIGHT (TBD) #define GVC_MSG_0x4d 0x4d // 'M' xxx (TBD) #define GVC_MSG_0x4e 0x4e // 'N' xxx (TBD) #define GVC_MSG_0x4f 0x4f // 'O' xxx (TBD) #define GVC_MSG_PRESS 0x50 // 'P' Pressure (TBD) #define GVC_MSG_0x51 0x51 // 'Q' xxx (TBD) #define GVC_MSG_0x52 0x52 // 'R' xxx (TBD) #define GVC_MSG_0x53 0x53 // 'S' xxx (TBD) #define GVC_MSG_TEMP 0x54 // 'T' Templeture (TBD) #define GVC_MSG_0x55 0x55 // 'U' xxx (TBD) #define GVC_MSG_0x56 0x56 // 'V' xxx (TBD) #define GVC_MSG_0x57 0x57 // 'W' xxx (TBD) #define GVC_MSG_0x58 0x58 // 'X' xxx (TBD) #define GVC_MSG_0x59 0x59 // 'Y' xxx (TBD) #define GVC_MSG_0x5a 0x5a // 'Z' xxx (TBD) #define GVC_MSG_0x5b 0x5b // xxx (TBD) #define GVC_MSG_0x5c 0x5c // xxx (TBD) #define GVC_MSG_0x5d 0x5d // xxx (TBD) #define GVC_MSG_0x5e 0x5e // xxx (TBD) #define GVC_MSG_0x5f 0x5f // xxx (TBD) #define GVC_MSG_0x60 0x60 // 'a' xxx (TBD) #define GVC_MSG_0x61 0x61 // 'b' xxx (TBD) #define GVC_MSG_0x62 0x62 // 'c' xxx (TBD) #define GVC_MSG_0x63 0x63 // 'd' xxx (TBD) #define GVC_MSG_0x64 0x64 // 'e' xxx (TBD) #define GVC_MSG_0x65 0x65 // 'f' xxx (TBD) #define GVC_MSG_0x66 0x66 // 'g' xxx (TBD) #define GVC_MSG_0x67 0x67 // 'h' xxx (TBD) #define GVC_MSG_0x68 0x68 // 'X' xxx (TBD) #define GVC_MSG_0x69 0x69 // 'i' xxx (TBD) #define GVC_MSG_0x6a 0x6a // 'j' xxx (TBD) #define GVC_MSG_0x6b 0x6b // 'k' xxx (TBD) #define GVC_MSG_0x6c 0x6c // 'l' xxx (TBD) #define GVC_MSG_0x6d 0x6d // 'm' xxx (TBD) #define GVC_MSG_0x6e 0x6e // 'n' xxx (TBD) #define GVC_MSG_0x6f 0x6f // 'o' xxx (TBD) #define GVC_MSG_0x70 0x70 // 'p' xxx (TBD) #define GVC_MSG_0x71 0x71 // 'q' xxx (TBD) #define GVC_MSG_0x72 0x72 // 'r' xxx (TBD) #define GVC_MSG_0x73 0x73 // 's' xxx (TBD) #define GVC_MSG_0x74 0x74 // 't' xxx (TBD) #define GVC_MSG_0x75 0x75 // 'u' xxx (TBD) #define GVC_MSG_0x76 0x76 // 'v' xxx (TBD) #define GVC_MSG_0x77 0x77 // 'w' xxx (TBD) #define GVC_MSG_0x78 0x78 // 'x' xxx (TBD) #define GVC_MSG_0x79 0x79 // 'y' xxx (TBD) #define GVC_MSG_0x7a 0x7a // 'z' xxx (TBD) #define GVC_MSG_0x7b 0x7b // xxx (TBD) #define GVC_MSG_0x7c 0x7c // xxx (TBD) #define GVC_MSG_0x7d 0x7d // xxx (TBD) #define GVC_MSG_0x7e 0x7e // xxx (TBD) #define GVC_MSG_0x7f 0x7f // xxx (TBD) #define GVC_DEV_00 0 // GVC DEVICE NO 0 (DO NOT USE THIS!!) #define GVC_DEV_01 1 // GVC DEVICE NO 1 #define GVC_DEV_02 2 // GVC DEVICE NO 2 #define GVC_DEV_03 3 // GVC DEVICE NO 3 #define GVC_DEV_04 4 // GVC DEVICE NO 4 #define GVC_DEV_05 5 // GVC DEVICE NO 5 #define GVC_DEV_06 6 // GVC DEVICE NO 6 #define GVC_DEV_07 7 // GVC DEVICE NO 7 #define GVC_DEV_08 8 // GVC DEVICE NO 8 #define GVC_DEV_09 9 // GVC DEVICE NO 9 #define GVC_I2C_MESSAGE_HEADER_SIZE 4 // I2C上を流れるメッセージのヘッダー部分(format,cmd,data_len)の長さ #define GVC_SERIAL_MESSAGE_HEADER_SIZE 6 // シリアル上を流れるメッセージのヘッダー部分(msg_type, dev_num, format,cmd,data_len)の長さ #define GVC_IR_DATALEN_MAX 1568 // 赤外線データの最大長 2013.12.20 仮決定 // GVCの各モジュールのメイン/サブバッファサイズ #define GVC_MAINBUFF_SIZE 2560 // メインバッファサイズ #define GVC_SUBBUFF_SIZE 256 // メインバッファサイズ // -------------------------------------------------- // Structure // -------------------------------------------------- // | | | | | | | | | | | | | | | // ------------------------------ // GVC I2C MESSAGE (GVC <-I2C-> Module) // ------------------------------ typedef struct _GVC_I2C_MESSAGE_T_ { unsigned char format; // format unsigned char cmd; // cmd unsigned int data_len; // data length unsigned char data[]; // data array (最低3バイトで、その最後はchecksumが入る) } GVC_I2C_MESSAGE_t; // ------------------------------ // GVC SERIAL MESSAGE (gvcd <-Serial-> GVC) // ------------------------------ typedef struct _GVC_SERIAL_MESSAGE_T_ { unsigned char msg_type; // message type unsigned char dev_num; // device number unsigned char format; // format unsigned char cmd; // cmd unsigned int data_len; // data length unsigned char data[]; // data array (最低3バイトで、その最後はchecksumが入る) } GVC_SERIAL_MESSAGE_t; // unionで複数構成にしてもいいかなと思ったけど、まぁそこまでいじるよりもダイレクトにポインタ参照で入れていったほうが早いし… // -------------------------------------------------- // Variable Param prototype // -------------------------------------------------- extern unsigned char reg_SSP1STAT; // SSP1ステータスレジスタ // -------------------------------------------------- // Function prototype // -------------------------------------------------- // ------------------------------ // STATUS LED Brink (ON=300ms/OFF=100ms) // ------------------------------ extern void led_status_brink(char); // ------------------------------ // RESULT LED Brink (ON=300ms/OFF=100ms) // ------------------------------ extern void led_result_brink(char); // ------------------------------ // STATUS/RESULT LED Brink (ON=300ms/OFF=100ms) // ------------------------------ extern void led_brink(char); // ------------------------------ // LED Brink (Start Up Sign) // ------------------------------ extern void led_brink3(void); // ------------------------------ // LED light // ------------------------------ extern void led_light(char, char); // ------------------------------ // CRC8テーブルから計算 // ------------------------------ extern unsigned char GetCRC8(const void *, size_t); // ------------------------------ // Send CR // ------------------------------ extern void send_cr(void); // ------------------------------ // Send LF // ------------------------------ extern void send_lf(void); // ------------------------------ // Send CR/LF // ------------------------------ extern void send_crlf(void); // ------------------------------ // Send STR DATA // ------------------------------ extern void send_strdata(const char *); // ------------------------------ // Send intdata // ------------------------------ extern void send_intdata(int); // ------------------------------ // Send hexdata // ------------------------------ extern void send_hexdata(char); // ------------------------------ // Send DATA // ------------------------------ extern void send_serial(const char *, int); // ------------------------------ // I2C wait Clear buffer // ------------------------------ extern void i2c_waitClearbuffer(void); // ------------------------------ // I2C begin Transmission // ------------------------------ extern void i2c_beginTransmission(void); // ------------------------------ // I2C end Transmission // ------------------------------ extern void i2c_endTransmission(void); // ------------------------------ // I2C write // ------------------------------ extern int i2c_write(char, char *, int); // ------------------------------ // I2C read // ------------------------------ extern int i2c_read(char, char *, int); // ------------------------------ // I2C Scan // ------------------------------ extern char i2c_slave_check(unsigned char);