Example #1
0
int main(int argc, char *argv[]) {
	SensorB sens_data;
	double measured_time;
	SSM_sid sensB_sid;

	initSSM();
	//名前をsensor_Bで、IDを0で、0.05秒おきに来るデータを5秒間保持するよう領域を確保。
	sensB_sid = createSSM_time("sensor_B", 0, sizeof(SensorB), 5, 0.05);

	while (1) {
		//SensorBのデータを何かしらの方法(例えばシリアル通信)で取得し、頑張って観測時刻を推定する関数。
		receive_sensorB(&sens_data, &measured_time);
		//SSMへのデータの書き込み。
		writeSSM(sensB_sid, (char*) &sens_data, measured_time);
	}
}
Example #2
0
/*--------------------------------------------------------writeBoardsL1()
*/ 
int writeBoardsN(int n, int *boards, w32 modecode,w32 submode){
 int i;
 for(i=1;i<n;i++)writeSPn(boards[i],0,1,0);   //Write all 0 to receiving boards
 if(!DEBFLG)for(i=0;i<n;i++)writeSSM(boards[i]);// Write ssm[board[i]].sm to hardware
return 0;	
}
Example #3
0
int main ()
{
    struct sockaddr_in dstAddr;
    int dstSock;
    char c;
    char raw_start_buf[26];
    char raw_line_buf[20][1113];
    char raw_end_buf[33];
    char *line_buf[22];
    char str_buf[5];
    char det;
    long dist[20][137];
    int n;
    int numrcv;
    char *toSendText1 = "#TD2GET\n";
    char *toSendText2 = "#TD2STOP\n";

    FILE *fp; //ファイルポインタ

    int i,j,k;

    //-角度用-//
    long U_x_beta[20][136];
    long U_y_beta[20][136];
    long D_x_beta[20][136];
    long D_y_beta[20][136];
    double U_angle_x[20][136];
    double U_angle_y[20][136];
    double D_angle_x[20][136];
    double D_angle_y[20][136];

    //-時間計測用-//
    double time_1; //時間計測用
    double time_2; //時間計測用
    double time_3; //時間計測用

    //-座標値-//
    double x;

    double angle_convert(long angle); //プロトタイプ宣言
    void calc_xyz(double angle_x, double angle_y, long dist, double *x, double *y, double *z); //プロトタイプ宣言
    double get_time(void); //プロトタイプ宣言

    //-SSM-//
    LS3D SCAN_DATA;
    initSSM();
    SSM_sid LS3D_sid;

    LS3D_sid = createSSM_time("LS3D", 0, sizeof(LS3D), 1.0, 0.025);

    //-SCAN_DATAの初期化-//
    // for(i=0; i<2880; i++)
    for(i=0; i<STEP_NUM; i++)
    {
        SCAN_DATA.det = 'U';
        SCAN_DATA.dist[i] = 0.0;
        SCAN_DATA.x[i] = 0.0;
        SCAN_DATA.y[i] = 0.0;
        SCAN_DATA.z[i] = 0.0;
    }

    //-----------角度データ読み込み-----------//
    //-ファイルオープン-//
    fp = fopen("beta_data", "r");
    for(j=0; j<20; j++)
    {
        for(i=0; i<136; i++)
        {
            fscanf(fp, "%ld", &U_x_beta[j][i]);
            U_angle_x[j][i] = angle_convert(U_x_beta[j][i]);
        }
    }
    for(j=0; j<20; j++)
    {
        for(i=0; i<136; i++)
        {
            fscanf(fp, "%ld", &U_y_beta[j][i]);
            U_angle_y[j][i] = angle_convert(U_y_beta[j][i]);
        }
    }
    for(j=0; j<20; j++)
    {
        for(i=0; i<136; i++)
        {
            fscanf(fp, "%ld", &D_x_beta[j][i]);
            D_angle_x[j][i] = angle_convert(D_x_beta[j][i]);
        }
    }
    for(j=0; j<20; j++)
    {
        for(i=0; i<136; i++)
        {
            fscanf(fp, "%ld", &D_y_beta[j][i]);
            D_angle_y[j][i] = angle_convert(D_y_beta[j][i]);
        }
    }

    //-----------距離データ取得ループ-----------//
    //-ソケットの作成-//
    dstSock = socket(AF_INET, SOCK_STREAM, 0);

    //-接続先指定用構造体の準備-//
    dstAddr.sin_family = AF_INET;
    dstAddr.sin_port = htons(10940);
    dstAddr.sin_addr.s_addr = inet_addr("192.168.0.10");

    //-コネクト-//
    connect(dstSock, (struct sockaddr *)&dstAddr, sizeof(dstAddr));

    //-サーバにメッセージを送信-//
    memset(&dstAddr, 0, sizeof(dstAddr));
    send(dstSock, toSendText1, strlen(toSendText1)+1, 0);
    sleep(1);
    printf("sending...\n");

    //-サーバからデータを受信-//
    memset(raw_start_buf, 0, sizeof(raw_start_buf));
    memset(raw_line_buf, 0, sizeof(raw_line_buf));
    memset(raw_end_buf, 0, sizeof(raw_end_buf));

    while(1){ //距離データ取得ループ
        //time_1 = get_time();

        for(i=0; i<26; i++)
        {
            numrcv = recv(dstSock, &c, 1, 0);
            if(c=='\n')
            {
                raw_start_buf[i] = '\0';
                break;
            }
            raw_start_buf[i] = c;
            det = raw_start_buf[19]; //ループの外だとなぜか文字が消える
        }

        for(j=0; j<20; j++)
        {
            for(i=0; i<1177; i++)
            {
                numrcv = recv(dstSock, &c, 1, 0);
                if(c=='\n'){
                    raw_line_buf[j][i] = '\0';
                    break;
                }
                raw_line_buf[j][i] = c;
            }
        }

        for(i=0; i<33; i++)
        {
            numrcv = recv(dstSock, &c, 1, 0);
            if(c=='\n')
            {
                raw_end_buf[i] = '\0';
                break;
            }
            raw_end_buf[i] = c;
        }

        //-距離データを抽出-//
        for(i=0; i<20; i++)
        {
            char *tp;
            tp = strtok(&raw_line_buf[i][0], "#:");
            for(j=0; j<3; j++)
            {
                tp = strtok(NULL, "#:");
            }
            line_buf[i] = tp;
        }


        for(i=0; i<20; i++)
        {
            if(line_buf[i] != NULL)
            {
                for(j=0; j<136; j++)
                {
                    str_buf[0] = *(line_buf[i] + 8*j);
                    str_buf[1] = *(line_buf[i] + 8*j + 1);
                    str_buf[2] = *(line_buf[i] + 8*j + 2);
                    str_buf[3] = *(line_buf[i] + 8*j + 3);
                    str_buf[4] = '\0';

                    dist[i][j] = strtol(str_buf, NULL, 16);
                }
            }
        }

        //-xyz座標値に変換-//
        if(det == 'U')
        {
            SCAN_DATA.det = 'U';
            for(i=0; i<20; i++)
            {
                for(j=0; j<136; j++)
                {
                    calc_xyz(U_angle_x[i][j], U_angle_y[i][j], dist[i][j], &SCAN_DATA.x[i*136 + j], &SCAN_DATA.y[i*136 + j], &SCAN_DATA.z[i * 136 + j]);
                }
            }
        }else if(det == 'D'){
            SCAN_DATA.det = 'D';
            for(i=0; i<20; i++)
            {
                for(j=0; j<136; j++)
                {
                    calc_xyz(D_angle_x[i][j], D_angle_y[i][j], dist[i][j], &SCAN_DATA.x[i*136 + j], &SCAN_DATA.y[i*136 + j], &SCAN_DATA.z[i * 136 + j]);
                }
            }
        }

        //-SSM書き込み-//
        for(i=0; i<20; i++)
        {
            for(j=0; j<136; j++)
            {
                SCAN_DATA.dist[136*i + j] = dist[i][j];
            }
        }

        printf("%c\n", SCAN_DATA.det);

        writeSSM(LS3D_sid, (char*)&SCAN_DATA, gettimeSSM());

        usleep(1000);

        //time_2 = get_time();
        //usleep(freq*1000000 - (time_2 - time_1)*1000000);
        //time_3 = get_time();

    } //距離データ取得ループ

    //-計測停止要求-//
    send(dstSock, toSendText2, strlen(toSendText2)+1, 0);

    //-socketの終了-//
    close(dstSock);

    return 0;
}