/// <reference path="../typings/cordova_plugins.d.ts" />
export declare class RawReading {
    private _raw_timestamp;
    private _value;
    private _time;
    private _stream;
    private _id;
    constructor(stream: number, value: number, timestamp: number, timebase: Date, id?: number);
    readonly timestamp: number;
    readonly value: number;
    readonly stream: number;
    readonly id: number;
    readonly time: Date;
    readonly variable: string;
}
export declare class IOTileReport {
}
export declare class IndividualReport extends IOTileReport {
    private _uuid;
    private _reading;
    private _sentTimestamp;
    constructor(uuid: number, sentTime: number, reading: RawReading);
    /**
     * Update the IndividualReport using formatting data from the cloud to be able to show
     * accurate realtime data about the device stream.
     *
     * @param fmt: a raw_value_format code from the cloud that indicates what format
     * the binary device data should be interpreted as.
     */
    decodeUsingFormat(fmt: string): void;
    readonly deviceID: number;
    readonly reading: RawReading;
    readonly sentTimestamp: number;
}
export declare const USER_REPORT_STREAMER: number;
export declare const SYSTEM_REPORT_STREAMER: number;
export declare const COMBINED_REPORT_STREAMER: number;
export interface SignedReportHeader {
    format: number;
    lengthLow: number;
    lengthHigh: number;
    uuid: number;
    reportID: number;
    sentTime: number;
    signatureFlags: number;
    streamer: number;
    selector: number;
    decodedSelector: StreamSelector;
}
export interface SignedReportFooter {
    lowestID: number;
    highestID: number;
    signature: ArrayBuffer;
}
export declare enum SignedReportSelectors {
    UserOutputs = 22527,
    SystemOutputs = 24575,
    CombinedOutputs = 55295
}
export declare enum SignatureFlags {
    HashOnly = 0,
    SignedUserKey = 1,
    SignedDeviceKey = 2
}
export declare enum SignatureStatus {
    Valid = 0,
    Invalid = 1,
    Unknown = 2
}
export declare enum StreamMatchOperator {
    UserOnly = 0,
    SystemOnly = 1,
    UserAndBreaks = 2,
    UserAndSystem = 3
}
export declare enum StreamType {
    Storage = 0,
    Unbuffered = 1,
    Constant = 2,
    Input = 3,
    Count = 4,
    Output = 5,
    Realtime = 6
}
export declare class StreamSelector {
    static readonly WILDCARD: number;
    static readonly REBOOT_STREAM: number;
    readonly type: StreamType;
    readonly code: number;
    readonly match_op: StreamMatchOperator;
    readonly isWildcard: boolean;
    constructor(encodedSelector: number);
    matches(streamID: number): boolean;
    static decode(encodedSelector: number): [StreamType, number, StreamMatchOperator];
    private static getOperator;
}
export declare class SignedListReport extends IOTileReport {
    private _uuid;
    private _readings;
    private _rawData;
    private _receivedTime;
    private _lowestID;
    private _highestID;
    private _streamer;
    private _header;
    private _valid;
    static extractHeader(data: ArrayBuffer): SignedReportHeader;
    constructor(uuid: number, streamer: number, rawData: ArrayBuffer, receivedTime: Date);
    readonly deviceID: number;
    readonly readings: RawReading[];
    readonly validity: SignatureStatus;
    readonly rawData: ArrayBuffer;
    readonly streamer: number;
    readonly receivedTime: Date;
    readonly readingIDRange: number[];
    readonly header: SignedReportHeader;
    private updateReadingRange;
    private updateReadings;
    /**
     * Note that this method is designed to be called from the constructor
     * only.  It needs to be followed by calls to updateReadings() and updateReadingRange()
     * since it may modify the raw report data.
     */
    private validateSignature;
}
