#define _USE_MATH_DEFINES
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <stdint.h>
#include <unistd.h>
 

static unsigned char sta_byte_u[256];  
static unsigned char sta_len_u = 0;


static unsigned char hex_sta[65536];
static int  hex_sta_flags = 0;
static int  sta_data_len      = 0;
static int  sta_Body_len      = 0;
static int  sta_ID = 0;
 


static void init_hex_sta_var(void)
{
   hex_sta_flags = 0;
   memset(hex_sta, 0, sizeof(hex_sta));
   sta_data_len = 0;
   sta_Body_len = 0;
   sta_ID = 0;
}



void  unicore_static_rinex_run(char* str, int len)
{

    int i = 0,j = 0;
    int tmp_len = 0;
    for(i = 0; i < len; i++ , sta_len_u++){
 
        sta_byte_u[sta_len_u] = str[i];
       // printf("%02X ", sta_byte_u[sta_len_u]);
//3.1-----------------------------------
        if((sta_byte_u[sta_len_u] == 0x1c) && 
        (sta_byte_u[(unsigned char)(sta_len_u-1)] == 0x12) && 
        (sta_byte_u[(unsigned char)(sta_len_u-2)] == 0x44) && 
        (sta_byte_u[(unsigned char)(sta_len_u-3)] == 0xaa)){ 
              printf("\n--------start---------------\n");
              init_hex_sta_var();
              hex_sta_flags = 1;
              hex_sta[0] = 0xaa;
              hex_sta[1] = 0x44;
              hex_sta[2] = 0x12;
              sta_data_len = 3;
        }  
//3.2--------------------------------------------------------
        if(hex_sta_flags == 1){
               if(sta_data_len < 11){
                 if(sta_data_len == 4){
                    sta_ID = (unsigned char) (str[i] & 0xff);
                 }
                 if(sta_data_len == 5){
                    sta_ID |= ((unsigned char) (str[i] & 0xff)) << 8;
                 }
                 if(sta_data_len == 8){
                    sta_Body_len = (unsigned char) (str[i] & 0xff);
                 }

                 if(sta_data_len == 9){
                    tmp_len = (unsigned char) (str[i] & 0xff);
                    sta_Body_len += (tmp_len << 8);
                    
                 }
               }

              hex_sta[sta_data_len++] = str[i];
              if(sta_data_len >= sta_Body_len + 32){   // 提取一帧静态数据;
                   // flags_cmp = hex_sta[5] << 8 + hex_sta[4];
                    printf("\n-----------------------(%d)[%02x][%02x][%d]\n", sta_ID, hex_sta[5], hex_sta[4], sta_data_len);
                    
                    for(j = 0; j < sta_data_len; j++)
                       printf("%02X", hex_sta[j]);
                    printf("\n-----------------------\n");

                 sleep(1);
                 init_hex_sta_var();
              }
        }
    }
}

 

int main(int argc, char *argv[])
{
    
    char rcv[1024];
    int ret = 0;
    if (argc != 2)
    {
        printf("Usage: %s bin_file\n", argv[0]);
        return 1;
    }


    FILE *fp = fopen(argv[1], "rb");
    if (!fp)
    {
        perror("fopen failed");
        return -1;
    }
   
     while(1){
        ret = fread(rcv, 1, sizeof(rcv), fp);
        printf("ret = %d\n", ret);
        if(ret <= 0)
            break;
        unicore_static_rinex_run(rcv, ret);

     }
    return 0;
}