#include 
#include 
#include 

typedef unsigned char raw_obs_t[11];

void
check_err(const int stat, const int line, const char *file) {
    if (stat != NC_NOERR) {
        (void)fprintf(stderr,"line %d of %s: %s\n", line, file, nc_strerror(stat));
        fflush(stderr);
        exit(1);
    }
}

int
main() {/* create sensor.nc */

    int  stat;  /* return status */
    int  ncid;  /* netCDF id */

    /* group ids */
    int root_grp;

    /* type ids */
    int raw_obs_t_typ;

    /* dimension ids */
    int time_dim;

    /* dimension lengths */
    size_t time_len = 5;

    /* variable ids */
    int raw_obs_id;

    /* rank (number of dimensions) for each variable */
#   define RANK_raw_obs 1

    /* variable shapes */
    int raw_obs_dims[RANK_raw_obs];

    /* enter define mode */
    stat = nc_create("sensor.nc", NC_CLOBBER|NC_NETCDF4, &ncid);
    check_err(stat,__LINE__,__FILE__);
    root_grp = ncid;


    stat = nc_def_opaque(root_grp, 11, "raw_obs_t", &raw_obs_t_typ);

    check_err(stat,__LINE__,__FILE__);


    /* define dimensions */
    stat = nc_def_dim(root_grp, "time", time_len, &time_dim);
    check_err(stat,__LINE__,__FILE__);

    /* define variables */

    raw_obs_dims[0] = time_dim;

    stat = nc_def_var(root_grp, "raw_obs", raw_obs_t_typ, RANK_raw_obs, raw_obs_dims, &raw_obs_id);

    check_err(stat,__LINE__,__FILE__);

    /* assign per-variable attributes */
    { /* _FillValue */
    static const raw_obs_t raw_obs_FillValue_att[1] = {"\xca\xfe\xba\xbe\xca\xfe\xba\xbe\xca\xfe\xba"} ;
    stat = nc_put_att(root_grp, raw_obs_id, "_FillValue", raw_obs_t_typ, 1, raw_obs_FillValue_att);    check_err(stat,__LINE__,__FILE__);
    }


    /* leave define mode */
    stat = nc_enddef (root_grp);
    check_err(stat,__LINE__,__FILE__);

    /* assign variable data */
    {
    raw_obs_t raw_obs_data[5] = {"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b", "\xaa\xbb\xcc\xdd\xee\xff\xee\xdd\xcc\xbb\xaa", "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", "\xca\xfe\xba\xbe\xca\xfe\xba\xbe\xca\xfe\xba", "\xcf\x0d\xef\xac\xed\x0c\xaf\xe0\xfa\xca\xde"} ;
    size_t raw_obs_startset[1] = {0} ;
    size_t raw_obs_countset[1] = {5} ;
    stat = nc_put_vara(root_grp, raw_obs_id, raw_obs_startset, raw_obs_countset, raw_obs_data);
    stat = nc_put_vara(root_grp, raw_obs_id, raw_obs_startset, raw_obs_countset, raw_obs_data);
    check_err(stat,__LINE__,__FILE__);
    }


    stat = nc_close(root_grp);
    check_err(stat,__LINE__,__FILE__);
    return 0;
}