<commit_before>/**
* V-Sido CONNECTとの通信機能。
* @namespace vsido
**/
var vsido = vsido || {
	SERVO_INFO_ITEM:[
		'all',						/* すべての項目 */
		'rom_model_num',			/* サーボモデル番号 −32768~32767 */
		'rom_servo_ID',				/* SID 1～254 */
		'rom_cw_agl_lmt',			/* 時計回り回転リミット角（deg） -180.0~180.0 */
		'rom_ccw_agl_lmt',			/* 反時計回り回転リミット角（deg） -180.0~180.0 */
		'rom_damper',				/* ダンパー 0～254 */
		'rom_cw_cmp_margin',		/* コンプライアンスマージン（deg） 0.0～25.4 */
		'rom_ccw_cmp_margin',		/* コンプライアンスマージン（deg） 0.0～25.4 */
		'rom_cw_cmp_slope',			/* コンプライアンススコープ（deg） 0.0～25.4 */
		'rom_ccw_cmp_slope',		/* コンプライアンススコープ（deg） 0.0～25.4 */
		'rom_punch',				/* パンチ（最大トルクの 0.01%単位） 0～254 */
		'ram_goal_pos',				/* 目標角度 -180.0~180.0 */
		'ram_goal_tim',				/* 速度（目標到達時間を 10msec 刻みで指定） −32768~32767 */
		'ram_max_torque',			/* 最大トルク 0~254 */
		'ram_torque_mode',			/* トルクモード 0:off、1:on、2:break */
		'ram_pres_pos',				/* 現在角度（deg） -180.0~180.0 */
		'ram_pres_time',			/* 現在時間（移動コマンド受信から 10msec 刻み） −32768~32767 */
		'ram_pres_spd',				/* 現在速度（参考程度） −32768~32767 */
		'ram_pres_curr',			/* 現在電流（mA） −32768~32767 */
		'ram_pres_temp',			/* 現在温度（℃） −32768~32767 */
		'ram_pres_volt',			/* 現在電圧（10mV） −32768~32767 */
		'Flags',					/* サーボのリターンフラグ（温度エラーなど） 0～254 */
		'alg_ofset',				/* トリム角（deg） −32768~32767 */
		'parents_ID',				/* ダブルサーボ時の ID 1～254 */
		'connected',				/* サーボ接続の有無（0:なし、1:あり） */
		'read_time',				/* 関節角度の受信にかかった時間（msec） −32768~32767 */
		'_ram_goal_pos',			/* 前回の目標角度（deg） -180.0~180.0 */
		'__ram_goal_pos',			/* 前々回の目標角度（deg） -180.0~180.0 */
		'_ram_res_pos',				/* 前回の現在角度（deg） -180.0~180.0 */
		'_send_speed',				/* 前回の目標速度（0.1deg/sec） 0～254 */
		'_send_cmd_time',			/* 前回の long packet コマンド送信時間（10msec） 0～254 */
		'flg_min_max',				/* 現在角＞最大角のとき 1 現在角＜最小角のとき 1 通常 0 */
		'flg_goal_pos',				/* 目標角度に変化があったとき 1、変化がないとき 0 */
		'flg_parent_inv',			/* ダブルサーボ時の逆転（実装予定） */
		'flg_cmp_slope',			/* コンプライアンススロープに変化があったとき 1、変化がないとき 0 */
		'flg_check_angle',			/* 常に角度情報を監視するか否か   0:監視しない  1:監視する */
		'port_type',				/* TTL 接続のとき 1、RS485 接続のとき 0 */
		'servo_type'				/* サーボメーカー  0：モデルなし   1：FUTABA  2：ROBOTIS（Dynamixel Communication1.0）  3：ROBOTIS（Dynamixel Communication2.0） */
	],
	VID_ITEM:[
		'all',						/* すべての項目 */
		'RS485_Baudrate',			/* RS485 接続のサーボとの通信 速度（単位：bps）  0：B_9600  1：B_57600  2：B_115200  3：B_1000000 */
		'TTL_Baudrate',				/* TTL 接続サーボとの通信速度 速度（単位：bps）  0：B_9600  1：B_57600  2：B_115200  3：B_1000000 */
		'RS232_Baudrate',			/* 外部端末と RS232 接続の通信 速度（単位：bps）  0：B_9600  1：B_57600  2：B_115200  3：B_1000000 */
		'IO_PA_IO_Mode',			/* 汎用端子の IO モード */
		'IO_PA_Analog_Mode',		/* 汎用端子のアナログモード */
		'IO_PA_PWM',				/* 汎用端子の PWM モード 0 or 1 */
		'IO_PA_PWM_CYCLE',			/* 汎用端子のPWM周期 0～65532 usec */
		'Through_Port',				/* パススルーポート */
		'Servo_Type_RS485',			/* RS485 サーボの種類  0：なし  1：FUTABA   2：ROBOTIS ver1.0   3：ROBOTIS ver2.0 */
		'Servo_Type_TTL',			/* TTL サーボの種類  0：なし  1：FUTABA   2：ROBOTIS ver1.0   3：ROBOTIS ver2.0 */
		'IMU_Type',					/* IMU の種類  0：なし  1：センサスティック  2：MPU9150 */
		'Balancer_Flag',			/* オートバランサーの ON/OFF  0:OFF 1:ON */
		'Theta_Th',					/* 角度の閾値 0.1～10.0 */
		'Cycletime',				/* 実行時間 1～100 10msec */
		'Min_Cmp',					/* 最小コンプライアンス(deg) 1～250 */
		'Flag_Ack',					/* Ack フラグの有無 0～1 */
		'Volt_Th',					/* 電圧の閾値(未実装) 6.0～9.0 v */
		'Initialize_Torque',		/* 初期化時のトルク有無 0～1 */
		'Initialize_Angle',			/* 初期化時の目標角度設定  0～1 */
		'Inspection_Flag',			/* 定期診断の有無  0～1 */
		'Inspection_Type',			/* 定期診断の挙動  0～1 */
		'Robot_Model',				/* ロボットモデル  0:モデルなし※2   1:GR-001   2:DARWIN-MINI */
		'UID_Flag'					/* ユーザー設定領域の使用  0:使用しない  1:使用する */
	],
	VID_VALUE:[
		'B_9600',					/* 通信 速度 */
		'B_57600',					/* 通信 速度 */
		'B_115200',					/* 通信 速度 */
		'B_1000000',				/* 通信 速度 */
		'None',						/* RS485 サーボの種類 */
		'FUTABA',					/* RS485 サーボの種類 */
		'ROBOTIS_v1.0',				/* RS485 サーボの種類 */
		'ROBOTIS_v2.0',				/* RS485 サーボの種類 */
		'None',						/* ロボットモデル */
		'GR-001',					/* ロボットモデル */
		'DARWIN-MINI'				/* ロボットモデル */
	],
	KID_ITEM:[
		'body',						/* 体幹 */
		'head',						/* 頭部 */
		'right_hand',				/* 右手 */
		'left_hand',				/* 左手 */
		'right_foot',				/* 右足 */
		'left_foot'					/* 左足 */
	]
};

/**
* V-Sido CONNECTと接続する。
* @class Connect
* @constructor
* @param {object} config 接続設定情報
* <pre><code>
* {'ip':'address String of ip','debug':boolean};
* </code></pre>
* @param {function} onOpen 接続完了通知
* @example
* <pre><code>
* var connect = new vsido.Connect({'ip':'192.168.11.5','debug':true});
* </code></pre>
**/
vsido.Connect = function(config) {
	// call back time out 1 second
	this.CALL_BACK_TIME_OUT = 1000;
	this.ws = null;
	this.cb = new Array();
	this.VSidoWebNotifyCallBack = null;
	this.ready = false;
	this.requestDate = new Date();
	this.waitCmd = new Array();
	this.onOpen = null;
	this.onOpenIntervalVar = null;
	this.openWS = function(self) {
		self.ws = new WebSocket('ws://' + self.ip +':20080','vsido-cmd');
		self.ws.onerror = function (error) {
			console.error('[vsido.Connect.error]onerror:',error);
		};
		// Log messages from the server
		self.ws.onmessage = function (evt) {
			if (self.debug) {
				console.log('[vsido.Connect.debug]onmessage:',evt);
			}
			var remoteMsg = JSON.parse(evt.data);
			var responseDate = new Date();
			var timeResponse = responseDate.getTime() - self.requestDate.getTime();
			self.invokeCallBack_(remoteMsg,timeResponse);
			if (self.VSidoWebNotifyCallBack && remoteMsg['type'] == 'StatusNotify') {
				self.VSidoWebNotifyCallBack(remoteMsg);
			}
		};
		self.ws.onopen = function(evt) {
			if (self.debug) {
				console.log('[vsido.Connect.debug]onopen:',evt);
			}
			self.onOpenIntervalVar = setInterval(self.wsOpenReadyCheck_,10,self);
			self.ready = true;
		};
		self.ws.onclose = function(evt) {
			if (self.debug) {
				console.log('[vsido.Connect.debug]onclose:',evt);
			}
			var remoteMsg = JSON.parse(evt.data);
			self.ready = false;
			self.ws = null;
		}
	};
	if (config && config['debug']) {
		this.debug = true;
	} else {
		this.debug = false;
	}
	this.ip = window.location.hostname;
	if (config && config['ip']) {
		this.ip = config['ip'];
	}
	this.openWS(this);
};

/**
* V-Sido CONNECTと接続完了を通知する。
* @method onOpen
* @param {object} evt イベント
* @example
* <pre><code>
* var connect = new vsido.Connect({'ip':'192.168.11.5','debug':true});
* connect.onOpen = function(evt) {
*	console.log(evt);
* };
* </code></pre>
**/
vsido.Connect.prototype.onOpen = function(evt) {
};

/*
* private method
*/
vsido.Connect.prototype.wsOpenReadyCheck_ = function(self) {
	if (self.ws && 1 == self.ws.readyState && 'function' == typeof self.onOpen) {
		self.onOpen(self.ws);
		for (var i = 0; i < self.waitCmd.length;i++) {
			self.send(self.waitCmd[i]);
		}<commit_msg>wait condition check change<commit_after>/**
* V-Sido CONNECTとの通信機能。
* @namespace vsido
**/
var vsido = vsido || {
	SERVO_INFO_ITEM:[
		'all',						/* すべての項目 */
		'rom_model_num',			/* サーボモデル番号 −32768~32767 */
		'rom_servo_ID',				/* SID 1～254 */
		'rom_cw_agl_lmt',			/* 時計回り回転リミット角（deg） -180.0~180.0 */
		'rom_ccw_agl_lmt',			/* 反時計回り回転リミット角（deg） -180.0~180.0 */
		'rom_damper',				/* ダンパー 0～254 */
		'rom_cw_cmp_margin',		/* コンプライアンスマージン（deg） 0.0～25.4 */
		'rom_ccw_cmp_margin',		/* コンプライアンスマージン（deg） 0.0～25.4 */
		'rom_cw_cmp_slope',			/* コンプライアンススコープ（deg） 0.0～25.4 */
		'rom_ccw_cmp_slope',		/* コンプライアンススコープ（deg） 0.0～25.4 */
		'rom_punch',				/* パンチ（最大トルクの 0.01%単位） 0～254 */
		'ram_goal_pos',				/* 目標角度 -180.0~180.0 */
		'ram_goal_tim',				/* 速度（目標到達時間を 10msec 刻みで指定） −32768~32767 */
		'ram_max_torque',			/* 最大トルク 0~254 */
		'ram_torque_mode',			/* トルクモード 0:off、1:on、2:break */
		'ram_pres_pos',				/* 現在角度（deg） -180.0~180.0 */
		'ram_pres_time',			/* 現在時間（移動コマンド受信から 10msec 刻み） −32768~32767 */
		'ram_pres_spd',				/* 現在速度（参考程度） −32768~32767 */
		'ram_pres_curr',			/* 現在電流（mA） −32768~32767 */
		'ram_pres_temp',			/* 現在温度（℃） −32768~32767 */
		'ram_pres_volt',			/* 現在電圧（10mV） −32768~32767 */
		'Flags',					/* サーボのリターンフラグ（温度エラーなど） 0～254 */
		'alg_ofset',				/* トリム角（deg） −32768~32767 */
		'parents_ID',				/* ダブルサーボ時の ID 1～254 */
		'connected',				/* サーボ接続の有無（0:なし、1:あり） */
		'read_time',				/* 関節角度の受信にかかった時間（msec） −32768~32767 */
		'_ram_goal_pos',			/* 前回の目標角度（deg） -180.0~180.0 */
		'__ram_goal_pos',			/* 前々回の目標角度（deg） -180.0~180.0 */
		'_ram_res_pos',				/* 前回の現在角度（deg） -180.0~180.0 */
		'_send_speed',				/* 前回の目標速度（0.1deg/sec） 0～254 */
		'_send_cmd_time',			/* 前回の long packet コマンド送信時間（10msec） 0～254 */
		'flg_min_max',				/* 現在角＞最大角のとき 1 現在角＜最小角のとき 1 通常 0 */
		'flg_goal_pos',				/* 目標角度に変化があったとき 1、変化がないとき 0 */
		'flg_parent_inv',			/* ダブルサーボ時の逆転（実装予定） */
		'flg_cmp_slope',			/* コンプライアンススロープに変化があったとき 1、変化がないとき 0 */
		'flg_check_angle',			/* 常に角度情報を監視するか否か   0:監視しない  1:監視する */
		'port_type',				/* TTL 接続のとき 1、RS485 接続のとき 0 */
		'servo_type'				/* サーボメーカー  0：モデルなし   1：FUTABA  2：ROBOTIS（Dynamixel Communication1.0）  3：ROBOTIS（Dynamixel Communication2.0） */
	],
	VID_ITEM:[
		'all',						/* すべての項目 */
		'RS485_Baudrate',			/* RS485 接続のサーボとの通信 速度（単位：bps）  0：B_9600  1：B_57600  2：B_115200  3：B_1000000 */
		'TTL_Baudrate',				/* TTL 接続サーボとの通信速度 速度（単位：bps）  0：B_9600  1：B_57600  2：B_115200  3：B_1000000 */
		'RS232_Baudrate',			/* 外部端末と RS232 接続の通信 速度（単位：bps）  0：B_9600  1：B_57600  2：B_115200  3：B_1000000 */
		'IO_PA_IO_Mode',			/* 汎用端子の IO モード */
		'IO_PA_Analog_Mode',		/* 汎用端子のアナログモード */
		'IO_PA_PWM',				/* 汎用端子の PWM モード 0 or 1 */
		'IO_PA_PWM_CYCLE',			/* 汎用端子のPWM周期 0～65532 usec */
		'Through_Port',				/* パススルーポート */
		'Servo_Type_RS485',			/* RS485 サーボの種類  0：なし  1：FUTABA   2：ROBOTIS ver1.0   3：ROBOTIS ver2.0 */
		'Servo_Type_TTL',			/* TTL サーボの種類  0：なし  1：FUTABA   2：ROBOTIS ver1.0   3：ROBOTIS ver2.0 */
		'IMU_Type',					/* IMU の種類  0：なし  1：センサスティック  2：MPU9150 */
		'Balancer_Flag',			/* オートバランサーの ON/OFF  0:OFF 1:ON */
		'Theta_Th',					/* 角度の閾値 0.1～10.0 */
		'Cycletime',				/* 実行時間 1～100 10msec */
		'Min_Cmp',					/* 最小コンプライアンス(deg) 1～250 */
		'Flag_Ack',					/* Ack フラグの有無 0～1 */
		'Volt_Th',					/* 電圧の閾値(未実装) 6.0～9.0 v */
		'Initialize_Torque',		/* 初期化時のトルク有無 0～1 */
		'Initialize_Angle',			/* 初期化時の目標角度設定  0～1 */
		'Inspection_Flag',			/* 定期診断の有無  0～1 */
		'Inspection_Type',			/* 定期診断の挙動  0～1 */
		'Robot_Model',				/* ロボットモデル  0:モデルなし※2   1:GR-001   2:DARWIN-MINI */
		'UID_Flag'					/* ユーザー設定領域の使用  0:使用しない  1:使用する */
	],
	VID_VALUE:[
		'B_9600',					/* 通信 速度 */
		'B_57600',					/* 通信 速度 */
		'B_115200',					/* 通信 速度 */
		'B_1000000',				/* 通信 速度 */
		'None',						/* RS485 サーボの種類 */
		'FUTABA',					/* RS485 サーボの種類 */
		'ROBOTIS_v1.0',				/* RS485 サーボの種類 */
		'ROBOTIS_v2.0',				/* RS485 サーボの種類 */
		'None',						/* ロボットモデル */
		'GR-001',					/* ロボットモデル */
		'DARWIN-MINI'				/* ロボットモデル */
	],
	KID_ITEM:[
		'body',						/* 体幹 */
		'head',						/* 頭部 */
		'right_hand',				/* 右手 */
		'left_hand',				/* 左手 */
		'right_foot',				/* 右足 */
		'left_foot'					/* 左足 */
	]
};

/**
* V-Sido CONNECTと接続する。
* @class Connect
* @constructor
* @param {object} config 接続設定情報
* <pre><code>
* {'ip':'address String of ip','debug':boolean};
* </code></pre>
* @param {function} onOpen 接続完了通知
* @example
* <pre><code>
* var connect = new vsido.Connect({'ip':'192.168.11.5','debug':true});
* </code></pre>
**/
vsido.Connect = function(config) {
	// call back time out 1 second
	this.CALL_BACK_TIME_OUT = 1000;
	this.ws = null;
	this.cb = new Array();
	this.VSidoWebNotifyCallBack = null;
	this.ready = false;
	this.requestDate = new Date();
	this.waitCmd = new Array();
	this.onOpen = null;
	this.onOpenIntervalVar = null;
	this.openWS = function(self) {
		self.ws = new WebSocket('ws://' + self.ip +':20080','vsido-cmd');
		self.ws.onerror = function (error) {
			console.error('[vsido.Connect.error]onerror:',error);
		};
		// Log messages from the server
		self.ws.onmessage = function (evt) {
			if (self.debug) {
				console.log('[vsido.Connect.debug]onmessage:',evt);
			}
			var remoteMsg = JSON.parse(evt.data);
			var responseDate = new Date();
			var timeResponse = responseDate.getTime() - self.requestDate.getTime();
			self.invokeCallBack_(remoteMsg,timeResponse);
			if (self.VSidoWebNotifyCallBack && remoteMsg['type'] == 'StatusNotify') {
				self.VSidoWebNotifyCallBack(remoteMsg);
			}
		};
		self.ws.onopen = function(evt) {
			if (self.debug) {
				console.log('[vsido.Connect.debug]onopen:',evt);
			}
			self.onOpenIntervalVar = setInterval(self.wsOpenReadyCheck_,10,self);
			self.ready = true;
		};
		self.ws.onclose = function(evt) {
			if (self.debug) {
				console.log('[vsido.Connect.debug]onclose:',evt);
			}
			var remoteMsg = JSON.parse(evt.data);
			self.ready = false;
			self.ws = null;
		}
	};
	if (config && config['debug']) {
		this.debug = true;
	} else {
		this.debug = false;
	}
	this.ip = window.location.hostname;
	if (config && config['ip']) {
		this.ip = config['ip'];
	}
	this.openWS(this);
};

/**
* V-Sido CONNECTと接続完了を通知する。
* @method onOpen
* @param {object} evt イベント
* @example
* <pre><code>
* var connect = new vsido.Connect({'ip':'192.168.11.5','debug':true});
* connect.onOpen = function(evt) {
*	console.log(evt);
* };
* </code></pre>
**/
vsido.Connect.prototype.onOpen = function(evt) {
};

/*
* private method
*/
vsido.Connect.prototype.wsOpenReadyCheck_ = function(self) {
	if (self.ws && 1 == self.ws.readyState) {
		if ('function' == typeof self.onOpen) {
			self.onOpen(self.ws);
		}
		for (var i = 0; i < self.waitCmd.length;i++) {
			self.send(self.waitCmd[i]);
		}
{'fraction_non_alphanumeric': 0.192605978465477, 'fraction_numerical': 0.07198253143588586, 'mean_word_length': 3.0530973451327434, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 27, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 4, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3736410', 'n_tokens_mistral': 8200, 'n_tokens_neox': 7231, 'n_words': 950}