Cosmo-Z Library  2.0.5
cosmoz.h
[詳解]
1 /**************************************************************************/
11 #ifndef H_COSMOZ
12 #define H_COSMOZ
13 
14 #include <stdio.h>
15 #include <stdint.h>
16 #include <time.h>
17 
18 // 基本的な値の定義
19 
20 #define FIRMWARE_VERSION 0x02000301
21 #define FIRMWARE_DATE 0x20171025
22 
23 #define MAX_REGS 64
24 #define MAX_EXTCH 4
25 
26 #ifndef NULL
27 #define NULL ((void *)0)
28 #endif
29 
30 #ifndef BOOL
31 #define BOOL int
32 #endif
33 
34 #ifndef TRUE
35 #define TRUE 1
36 #endif
37 
38 #ifndef FALSE
39 #define FALSE 0
40 #endif
41 
43 typedef struct ADC_INFO {
44  int basefreq;
47  int adc_num;
52  char device_type[8][32];
53 } ADC_INFO ;
54 
58 typedef struct ANALOG_CH_INFO {
61  double filter_fc;
62  double gain;
64 
65 // ユーザ公開 API関数の定義
66 #if __cplusplus
67 extern "C" {
68 #endif
69 
70 /***********************************************************************************!
71 // ドライバ基本関数
72 ************************************************************************************/
73 
80 BOOL csz_open();
81 
85 uint32_t csz_firmware_version();
86 
90 uint32_t csz_firmware_date();
91 
95 uint32_t csz_driver_version();
96 
100 uint32_t csz_fpga_version();
101 
106 void csz_close();
107 
112 uint64_t csz_time48();
113 
114 /***********************************************************************************!
115 // 低レベルなメモリ/レジスタ操作関数
116 ************************************************************************************/
117 
124 uint32_t csz_reg_read(int regnum);
125 
133 //
134 BOOL csz_reg_write(int regnum,uint32_t val);
135 
149 int csz_mem_read(uint32_t addr, int len, void *buf);
150 
160 int csz_mem_write(uint32_t addr, int len, void *buf);
161 
165 void csz_mem_info(uint32_t *base_addr, ssize_t *size);
166 
170 void csz_mem_dump(int offset, int len);
171 
176 
180 char *csz_get_error();
181 
182 
183 /***********************************************************************************!
184 // ADC操作関数
185 ************************************************************************************/
186 
195 uint32_t csz_adc_val(int ch);
196 
201 void csz_adc_reset();
202 
224 BOOL csz_adc_freq(int freq);
225 
231 int csz_adc_getfreq();
232 
237 void csz_adc_getinfo(ADC_INFO *info);
238 
247 void csz_adc_testmode(BOOL on,int option);
248 
254 
259 int csz_adc_maxch();
260 
264 void csz_adc_calstat();
265 
269 void csz_adc_enumerate(int *adcnum,char partnum[8][32]);
270 
274 void csz_adc_regdump();
275 
276 /***********************************************************************************!
277 // 波形キャプチャ関数
278 ************************************************************************************/
279 
281 typedef enum {
286 
288 typedef enum {
295 
297 typedef enum {
303 
305 typedef struct CAPTURE_INFO {
307  uint32_t chmask;
308  int chcount;
309  int length;
310  int iteration;
312  time_t start_time;
313  time_t end_time;
314  double sampling_rate;
315  int adc_freq;
316  int adc_div;
318  uint32_t gps_time;
319  uint32_t gps_10ns;
320  uint32_t gps_maxcount;
321  uint64_t start_time48;
322  uint32_t top_addr;
323  uint32_t bot_addr;
324  uint32_t last_addr;
325  // 以下はイベントキャプチャで使う
326  int mesp;
327  int evcount;
329 } CAPTURE_INFO;
330 
340 CAPTURE_INFO csz_capture_execute(uint32_t chmask,int length,CAPTURE_TRIGGER type);
341 
348 void csz_capture_datacopy(CAPTURE_INFO info, int ch, uint16_t *result);
349 
356 void csz_capture_datacopy32(CAPTURE_INFO info, int ch, uint32_t *result);
357 
364 void csz_capture_timeout(int ms);
365 
370 
374 void csz_capture_abort();
375 
380 
381 /***********************************************************************************!
382 * イベントキャプチャ
383 ************************************************************************************/
384 
385 typedef struct EVHEADER_STR {
386  int evcount;
387  uint16_t hdr;
388  uint8_t ch;
389  uint16_t length;
390  uint64_t time48;
391  uint16_t plsh;
392  uint16_t sum;
393  uint16_t ped;
394  uint16_t meslen;
395  int mesp;
396 } EVHEADER_STR;
397 
398 typedef BOOL (*CALLBACK_EVENTCAP)(uint16_t *data,int datacount);
399 
400 CAPTURE_INFO csz_evcap_execute(uint32_t chmask,int count, CALLBACK_EVENTCAP func);
401 BOOL csz_evcap_get_next(CAPTURE_INFO *info,EVHEADER_STR *hdr,uint16_t *data);
402 
403 /***********************************************************************************!
404 * トリガの設定
405 ************************************************************************************/
406 
408 typedef enum {
419 } TRIGTYPE;
420 
422 typedef enum {
427 } EXTTRIGTYPE;
428 
432 void csz_trig_ortrig(BOOL ortrig);
433 
438 
446 BOOL csz_trig_set(int ch,TRIGTYPE type, int val);
447 
455 BOOL csz_trig_set_voltage(int ch, TRIGTYPE type, double voltage);
456 
464 TRIGTYPE csz_trig_gettype(int ch);
465 
471 TRIGTYPE csz_trig_gettype(int ch);
472 
478 int csz_trig_getadcval(int ch);
479 
485 double csz_trig_getvoltage(int ch);
486 
498 const char *csz_trig_tostr(TRIGTYPE type);
499 
503 int csz_trig_rate(int ch);
504 
508 int csz_trig_pulseheight(int ch);
509 
513 int csz_trig_pedestal(int ch);
514 
518 BOOL csz_pretrig_set(int pre);
519 
525 void csz_pretrig_type(BOOL extend);
526 
530 int csz_pretrig_get();
531 
536 int csz_pretrig_max();
537 
541 BOOL csz_posttrig_set(int pre);
542 
546 int csz_posttrig_get();
547 
551 void csz_posttrig_fixed(BOOL fixed);
552 
557 
563 BOOL csz_exttrig_set(int extch, EXTTRIGTYPE type);
564 
568 const char *csz_exttrig_tostr(EXTTRIGTYPE type);
569 
574 EXTTRIGTYPE csz_exttrig_get(int extch);
575 
576 /***********************************************************************************!
577 // GPS関係
578 ************************************************************************************/
579 
590 BOOL csz_gps_time(uint32_t *gps_time, uint32_t *gps_10ns, uint32_t *gps_maxcount);
591 
596 void csz_gps_settime(time_t time);
597 
598 /***********************************************************************************!
599 * XADC処理
600 ************************************************************************************/
601 
605 double csz_xadc_tempe();
606 
610 double csz_xadc_vccint();
611 
615 double csz_xadc_vccaux();
616 
620 double csz_xadc_vccddro();
621 
622 /***********************************************************************************!
623 * エラー処理
624 ************************************************************************************/
625 
630 typedef enum {
637 } COSMOZ_ERROR;
638 
642 void csz_set_error(COSMOZ_ERROR err);
643 
644 /***********************************************************************************!
645 * その他
646 ************************************************************************************/
647 
653 double csz_point2us(int point);
654 
660 int csz_us2point(double us);
661 
665 void disable_ctrlc();
666 
671 
672 #if __cplusplus
673 }
674 #endif
675 
676 #endif /* H_COSMOZ */
uint32_t csz_firmware_version()
ファームウェアのバージョンを返す
BOOL csz_pretrig_set(int pre)
プレトリガ(トリガ点より前に何ポイント取るか)を設定する
void csz_trig_ortrig(BOOL ortrig)
トリガをORトリガ(全チャネルのうちの1つでもヒットしたら、全体のトリガをかける)に設定する ...
Definition: cosmoz.h:385
トリガは発生しない
Definition: cosmoz.h:423
CAPTURE_STATUS csz_capture_status()
現在のキャプチャの状態(RUNか、IDLEか、TRIGWAITか)を返す
double csz_xadc_vccddro()
FPGAのDDR電圧を返す
int device_max_freq
ADCの最高クロック周波数
Definition: cosmoz.h:49
BOOL is_crtlc_pushed()
ctrlcが押されたことを知る
struct ANALOG_CH_INFO ANALOG_CH_INFO
アナログチャネルの情報
キャプチャはユーザからの指示で中断された
Definition: cosmoz.h:290
設定できない周波数に設定しようとした
Definition: cosmoz.h:634
キャプチャは成功した
Definition: cosmoz.h:289
BOOL testmode
テストモードか否か
Definition: cosmoz.h:48
BOOL csz_trig_is_ortrig()
現在ORトリガが適用されているかを調べる
アナログチャネルの情報
Definition: cosmoz.h:58
void csz_adc_regdump()
ADCのレジスタを表示
トリガは発生しない
Definition: cosmoz.h:409
立ち下がりでトリガ発生
Definition: cosmoz.h:425
int csz_adc_maxch()
ADCのチャンネル数を取得する
void disable_ctrlc()
CTRL+Cを無効にする
int adc_div
実行開始時のデシメーション比
Definition: cosmoz.h:316
int adc_num
ADCの数 (Cosmo-Zならばチャネル数の1/4になる)
Definition: cosmoz.h:47
int evcount
現在読み出し中のデータの数
Definition: cosmoz.h:327
メモリアクセスの範囲がオーバーフローした
Definition: cosmoz.h:632
int csz_posttrig_get()
ポストトリガの長さを取得する
uint32_t gps_maxcount
実行開始時のGPS最大カウント
Definition: cosmoz.h:320
BOOL csz_adc_is_testmode()
ADCがテストモードかどうかを調べる
int chcount
キャプチャしたチャネル数
Definition: cosmoz.h:308
int current_resolution
現在の分解能(bit)
Definition: cosmoz.h:51
指定値を横切ったらトリガ発生
Definition: cosmoz.h:412
double csz_trig_getvoltage(int ch)
トリガの値を電圧として取得する
CAPTURE_RESULT
波形キャプチャの実行結果
Definition: cosmoz.h:288
struct CAPTURE_INFO CAPTURE_INFO
波形キャプチャの実行結果
int length
キャプチャ長
Definition: cosmoz.h:309
メモリアクセスが4バイトの単位になっていない(エラーにはならない)
Definition: cosmoz.h:633
char * csz_get_error()
最終エラーの内容をテキストで受け取る
void csz_adc_reset()
ADCをソフトリセットし、同期を取り直す
const char * csz_trig_tostr(TRIGTYPE type)
トリガの値を電圧で取得する
int csz_pretrig_max()
FPGAに設定可能なプレトリガの最大値を調べる
double csz_point2us(int point)
現在のADCのサンプリング速度の設定で、データ点数を時間に変換する
uint32_t gps_10ns
実行開始時のGPS時刻 10ns単位
Definition: cosmoz.h:319
指定値以上ならトリガ発生
Definition: cosmoz.h:410
オシロのAUTOモードのように、少しだけトリガを待ってからキャプチャ
Definition: cosmoz.h:298
double sampling_freq_mhz
デシメーションされたサンプリング周波数
Definition: cosmoz.h:46
int iteration
繰り返し回数
Definition: cosmoz.h:310
BOOL csz_trig_set_voltage(int ch, TRIGTYPE type, double voltage)
電圧でトリガをセットする
長時間キャプチャ
Definition: cosmoz.h:301
指定値を横切って立ち下がったらトリガ発生
Definition: cosmoz.h:415
BOOL csz_mem_test()
メモリのテストを行う
波形キャプチャの実行結果
Definition: cosmoz.h:305
uint32_t chmask
キャプチャしたチャネル
Definition: cosmoz.h:307
BOOL csz_trig_set(int ch, TRIGTYPE type, int val)
トリガをセットする
待機状態
Definition: cosmoz.h:282
TRIGTYPE
トリガの方法を示す
Definition: cosmoz.h:408
double csz_xadc_vccint()
FPGAのコア電圧を返す
void csz_adc_enumerate(int *adcnum, char partnum[8][32])
どのようなADCが接続されているか調べ上げる
COSMOZ_ERROR
エラーの定義
Definition: cosmoz.h:630
int prev_capaddr
ここまで読んだポインタ
Definition: cosmoz.h:328
uint32_t gps_time
実行開始時のGPS時刻
Definition: cosmoz.h:318
void csz_adc_calstat()
キャリブレーションの結果を表示(テスト用)
設定できないチャネル番号が指定された
Definition: cosmoz.h:635
void csz_capture_datacopy32(CAPTURE_INFO info, int ch, uint32_t *result)
キャプチャされた波形データを32bitとしてユーザバッファにコピーする
uint32_t bot_addr
格納される物理アドレスの最後尾
Definition: cosmoz.h:323
time_t start_time
開始時刻
Definition: cosmoz.h:312
time_t end_time
終了時刻
Definition: cosmoz.h:313
int resolution
分解能(bit単位)
Definition: cosmoz.h:317
他のチャネルがヒットしたらトリガ発生
Definition: cosmoz.h:416
char device_type[8][32]
ADCの型番が文字列で入る。最大8個のADCを扱える。
Definition: cosmoz.h:52
uint64_t start_time48
実行開始時の48bitタイムスタンプ
Definition: cosmoz.h:321
BOOL csz_exttrig_set(int extch, EXTTRIGTYPE type)
外部トリガを設定
void csz_posttrig_fixed(BOOL fixed)
ポストトリガのタイプを固定長にする
BOOL csz_posttrig_set(int pre)
ポストトリガの長さを設定する
uint64_t csz_time48()
48bitタイムスタンプの値を返す
int adc_freq
実行開始時のADC周波数
Definition: cosmoz.h:315
BOOL csz_open()
ドライバをオープンし、その他の雑多な初期化処理を行う。
double input_max_voltage
最大入力電圧(V)
Definition: cosmoz.h:60
BOOL csz_adc_freq(int freq)
ADCの周波数を設定し、同期をリセットする。
int csz_pretrig_get()
現在のプレトリガを取得する
double filter_fc
アナログフロントエンドのLPFのカットオフ周波数(MHz)
Definition: cosmoz.h:61
uint32_t last_addr
格納された物理アドレスのlast
Definition: cosmoz.h:324
CAPTURE_TRIGGER
波形キャプチャの方法を示す
Definition: cosmoz.h:297
void csz_adc_testmode(BOOL on, int option)
ADをがテストモードにする
データの転送が間に合わなかったなどの理由で失敗した
Definition: cosmoz.h:291
即座にキャプチャを開始する
Definition: cosmoz.h:300
void csz_mem_dump(int offset, int len)
メモリの内容をダンプする
uint32_t csz_fpga_version()
FPGAのバージョンを返す
double sampling_rate
サンプリングレート
Definition: cosmoz.h:314
#define BOOL
C言語ではBOOLがないのでintでtypedefしておく
Definition: cosmoz.h:31
int csz_trig_pulseheight(int ch)
トリガがかかっているパルスハイトを調べる
BOOL csz_posttrig_is_fixed()
ポストトリガのタイプが固定長であるか調べる
void csz_pretrig_type(BOOL extend)
プレトリガのタイプを指定
void csz_capture_abort()
現在の波形キャプチャを中断する
トリガの値が逸脱した
Definition: cosmoz.h:636
範囲外のレジスタ番号
Definition: cosmoz.h:631
BOOL csz_reg_write(int regnum, uint32_t val)
FPGA内蔵レジスタへ書き込み
立ち上がりでトリガ発生
Definition: cosmoz.h:424
int device_resolution
ADCの持つ本来の分解能(bit)
Definition: cosmoz.h:50
void csz_mem_info(uint32_t *base_addr, ssize_t *size)
メモリの情報を調べる
void csz_adc_getinfo(ADC_INFO *info)
ADCに関する情報を取得する
double csz_xadc_tempe()
FPGAの温度を返す
int decimation_ratio
デシメーション比
Definition: cosmoz.h:45
EXTTRIGTYPE
ディジタル入力トリガの方法を示す
Definition: cosmoz.h:422
uint32_t csz_reg_read(int regnum)
FPGA内蔵レジスタの読み出し
void csz_close()
CosmoZライブラリをクローズする関数
通常の値より指定値分下回ったらトリガ発生
Definition: cosmoz.h:413
指定値を横切って立ち上がったらトリガ発生
Definition: cosmoz.h:414
トリガ待ち状態
Definition: cosmoz.h:283
void csz_capture_datacopy(CAPTURE_INFO info, int ch, uint16_t *result)
キャプチャされた波形データをユーザバッファにコピーする
トリガ待ち状態のままで、タイムアウトした
Definition: cosmoz.h:293
int csz_trig_getadcval(int ch)
トリガのタイプを取得する
エラー
Definition: cosmoz.h:418
void csz_set_error(COSMOZ_ERROR err)
エラーのセット
double gain
アナログフロントエンドのゲイン。真数で示す。
Definition: cosmoz.h:62
CAPTURE_INFO csz_capture_execute(uint32_t chmask, int length, CAPTURE_TRIGGER type)
波形キャプチャを実行する
struct ADC_INFO ADC_INFO
ADCの情報を調べた結果が入る構造体
uint32_t csz_adc_val(int ch)
現在のADCの値を取得する
BOOL csz_gps_time(uint32_t *gps_time, uint32_t *gps_10ns, uint32_t *gps_maxcount)
GPSに同期した時刻を得る
他のキャプチャが動作しているため、波形キャプチャを開始できない
Definition: cosmoz.h:292
ADCの情報を調べた結果が入る構造体
Definition: cosmoz.h:43
int csz_capture_get_timeout()
キャプチャのタイムアウト時間を取得する
void csz_gps_settime(time_t time)
GPS時刻を設定する
EXTTRIGTYPE csz_exttrig_get(int extch)
外部トリガの状態を取得
void csz_capture_timeout(int ms)
タイムアウトを指定する
CAPTURE_TRIGGER trig
キャプチャトリガの種類
Definition: cosmoz.h:311
TRIGTYPE csz_trig_gettype(int ch)
トリガのタイプを取得する
int basefreq
デシメーションされる前のベースとなるクロック周波数
Definition: cosmoz.h:44
double csz_xadc_vccaux()
FPGAのAUX電圧を返す
Hレベルでトリガ発生
Definition: cosmoz.h:426
int csz_mem_read(uint32_t addr, int len, void *buf)
DMA用メモリのリード
int csz_adc_getfreq()
現在のADCのサンプリング周波数を取得する
const char * csz_exttrig_tostr(EXTTRIGTYPE type)
外部トリガのタイプを文字列にする
int mesp
現在読み出し中のデータのポインタ
Definition: cosmoz.h:326
double input_min_voltage
最小入力電圧(V)
Definition: cosmoz.h:59
指定値以下ならトリガ発生
Definition: cosmoz.h:411
int csz_mem_write(uint32_t addr, int len, void *buf)
DMA用メモリのライト
uint32_t csz_firmware_date()
ファームウェアの日付を返す
uint32_t csz_driver_version()
ドライバのバージョンを返す
uint32_t top_addr
格納される物理アドレスの先頭
Definition: cosmoz.h:322
トリガが来るまで待ってからキャプチャする。オシロのNORMALモードに相当
Definition: cosmoz.h:299
実行中
Definition: cosmoz.h:284
int csz_us2point(double us)
現在のADCのサンプリング速度の設定で、時間をデータ点数に変換する
CAPTURE_RESULT result
キャプチャ実行結果
Definition: cosmoz.h:306
CAPTURE_STATUS
波形キャプチャの現在の状態
Definition: cosmoz.h:281
int csz_trig_pedestal(int ch)
トリガがかかっていない状態のADC値を調べる
ユーザ定義による
Definition: cosmoz.h:417
int csz_trig_rate(int ch)
トリガのカウントレートを調べる