Example #1
0
def encode(params, validate=False):
    '''Create a sls_lockorder binary message payload to pack into an AIS Msg sls_lockorder.

    Fields in params:
      - vessel(aisstr6): Vessel Name
      - direction(bool): Up bound/Down bound
      - ETA_month(uint): Estimated time of arrival  month 1..12
      - ETA_day(uint): Estimated time of arrival  day of the month 1..31
      - ETA_hour(uint): Estimated time of arrival  UTC hours 0..23
      - ETA_min(uint): Estimated time of arrival  minutes
      - reserved(uint): Reserved bits for future use (field automatically set to "0")
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    if 'vessel' in params:
        bvList.append(aisstring.encode(params['vessel'],90))
    else:
        bvList.append(aisstring.encode('@@@@@@@@@@@@@@@',90))
    if params["direction"]: bvList.append(TrueBV)
    else: bvList.append(FalseBV)
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['ETA_month']),4))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['ETA_day']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['ETA_hour']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['ETA_min']),6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0),19))

    return binary.joinBV(bvList)
Example #2
0
def encode(params, validate=False):
    '''Create a sls_wind binary message payload to pack into an AIS Msg sls_wind.

    Fields in params:
      - time_month(uint): Time tag of measurement  month 1..12
      - time_day(uint): Time tag of measurement  day of the month 1..31
      - time_hour(uint): Time tag of measurement  UTC hours 0..23
      - time_min(uint): Time tag of measurement  minutes
      - stationid(aisstr6): Character identifier of the station
      - pos_longitude(decimal): Location of measurement  East West location
      - pos_latitude(decimal): Location of measurement  North South location
      - speed(udecimal): Average wind speed
      - gust(udecimal): Wind gust
      - direction(uint): Wind direction
      - reserved(uint): Reserved bits for future use (field automatically set to "0")
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_month']),4))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_day']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_hour']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_min']),6))
    if 'stationid' in params:
        bvList.append(aisstring.encode(params['stationid'],42))
    else:
        bvList.append(aisstring.encode('@@@@@@@',42))
    if 'pos_longitude' in params:
        bvList.append(binary.bvFromSignedInt(int(Decimal(params['pos_longitude'])*Decimal('60000')),25))
    else:
        bvList.append(binary.bvFromSignedInt(10860000,25))
    if 'pos_latitude' in params:
        bvList.append(binary.bvFromSignedInt(int(Decimal(params['pos_latitude'])*Decimal('60000')),24))
    else:
        bvList.append(binary.bvFromSignedInt(5460000,24))
    if 'speed' in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=int((Decimal(params['speed'])*Decimal('10')))),10))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=int(1023)),10))
    if 'gust' in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=int((Decimal(params['gust'])*Decimal('10')))),10))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=int(1023)),10))
    if 'direction' in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params['direction']),9))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=511),9))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0),4))

    return binary.joinBV(bvList)
Example #3
0
def encode(params, validate=False):
    '''Create a sls_waterlevel binary message payload to pack into an AIS Msg sls_waterlevel.

    Fields in params:
      - time_month(uint): Time tag of measurement  month 1..12
      - time_day(uint): Time tag of measurement  day of the month 1..31
      - time_hour(uint): Time tag of measurement  UTC hours 0..23
      - time_min(uint): Time tag of measurement  minutes
      - stationid(aisstr6): Character identifier of the station.  Usually a number.
      - pos_longitude(decimal): Location of measurement  East West location
      - pos_latitude(decimal): Location of measurement  North South location
      - type(uint): How to interpret the water level
      - waterlevel(int): Water level in centimeters
      - datum(uint): What reference datum applies to the value
      - reserved(uint): Reserved bits for future use (field automatically set to "0")
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_month']),4))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_day']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_hour']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['time_min']),6))
    if 'stationid' in params:
        bvList.append(aisstring.encode(params['stationid'],42))
    else:
        bvList.append(aisstring.encode('@@@@@@@',42))
    if 'pos_longitude' in params:
        bvList.append(binary.bvFromSignedInt(int(Decimal(params['pos_longitude'])*Decimal('60000')),25))
    else:
        bvList.append(binary.bvFromSignedInt(10860000,25))
    if 'pos_latitude' in params:
        bvList.append(binary.bvFromSignedInt(int(Decimal(params['pos_latitude'])*Decimal('60000')),24))
    else:
        bvList.append(binary.bvFromSignedInt(5460000,24))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['type']),1))
    if 'waterlevel' in params:
        bvList.append(binary.bvFromSignedInt(params['waterlevel'],16))
    else:
        bvList.append(binary.bvFromSignedInt(-32768,16))
    if 'datum' in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params['datum']),2))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=31),2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0),14))

    return binary.joinBV(bvList)
Example #4
0
def encode(params, validate=False):
    '''Create a sls_lockschedule binary message payload to pack into an AIS Msg sls_lockschedule.

    Fields in params:
      - vessel(aisstr6): Vessel Name
      - direction(bool): Up bound/Down bound
      - ETA_month(uint): Estimated time of arrival  month 1..12
      - ETA_day(uint): Estimated time of arrival  day of the month 1..31
      - ETA_hour(uint): Estimated time of arrival  UTC hours 0..23
      - ETA_min(uint): Estimated time of arrival  minutes
      - reserved(uint): Reserved bits for future use (field automatically set to "0")
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    if 'vessel' in params:
        bvList.append(aisstring.encode(params['vessel'], 90))
    else:
        bvList.append(aisstring.encode('@@@@@@@@@@@@@@@', 90))
    if params["direction"]: bvList.append(TrueBV)
    else: bvList.append(FalseBV)
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['ETA_month']), 4))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['ETA_day']), 5))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['ETA_hour']), 5))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['ETA_min']), 6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 19))

    return binary.joinBV(bvList)
Example #5
0
def encode(params, validate=False):
    '''Create a alltypesmsg binary message payload to pack into an AIS Msg alltypesmsg.

    Fields in params:
      - dac(uint): Designated Area Code (field automatically set to "366")
      - reqDecimal(decimal): required decimal value... FIX: scale or no? (field automatically set to "122")
      - unavail_uint(uint): Unavailable unsigned integer
      - anUInt(uint): NO unavailable unsigned integer
      - anInt(int): NO unavailable signed integer
      - aBool(bool): Simple bool
      - aStr(aisstr6): An ais string of 5 characters
      - anUDecimal(udecimal): An unsigned decimal.  Allow smaller numbers
      - aDecimal(decimal): A decimal
      - aFloat(float): An IEEE floating point number
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    bvList.append(binary.setBitVectorSize(BitVector(intVal=366), 16))
    bvList.append(binary.bvFromSignedInt(122, 8))
    if 'unavail_uint' in params:
        bvList.append(
            binary.setBitVectorSize(BitVector(intVal=params['unavail_uint']),
                                    2))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=3), 2))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['anUInt']), 2))
    bvList.append(binary.bvFromSignedInt(params['anInt'], 3))
    if params["aBool"]: bvList.append(TrueBV)
    else: bvList.append(FalseBV)
    bvList.append(aisstring.encode(params['aStr'], 30))
    bvList.append(
        binary.setBitVectorSize(
            BitVector(intVal=int((Decimal(params['anUDecimal']) *
                                  Decimal('10')))), 16))
    bvList.append(
        binary.bvFromSignedInt(
            int(Decimal(params['aDecimal']) * Decimal('10')), 16))
    bvList.append(binary.float2bitvec(params['aFloat']))

    return binary.joinBV(bvList)
Example #6
0
def encode(params, validate=False):
    '''Create a alltypesmsg binary message payload to pack into an AIS Msg alltypesmsg.

    Fields in params:
      - dac(uint): Designated Area Code (field automatically set to "366")
      - reqDecimal(decimal): required decimal value... FIX: scale or no? (field automatically set to "122")
      - unavail_uint(uint): Unavailable unsigned integer
      - anUInt(uint): NO unavailable unsigned integer
      - anInt(int): NO unavailable signed integer
      - aBool(bool): Simple bool
      - aStr(aisstr6): An ais string of 5 characters
      - anUDecimal(udecimal): An unsigned decimal.  Allow smaller numbers
      - aDecimal(decimal): A decimal
      - aFloat(float): An IEEE floating point number
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    bvList.append(binary.setBitVectorSize(BitVector(intVal=366),16))
    bvList.append(binary.bvFromSignedInt(122,8))
    if 'unavail_uint' in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params['unavail_uint']),2))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=3),2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['anUInt']),2))
    bvList.append(binary.bvFromSignedInt(params['anInt'],3))
    if params["aBool"]: bvList.append(TrueBV)
    else: bvList.append(FalseBV)
    bvList.append(aisstring.encode(params['aStr'],30))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=int((Decimal(params['anUDecimal'])*Decimal('10')))),16))
    bvList.append(binary.bvFromSignedInt(int(Decimal(params['aDecimal'])*Decimal('10')),16))
    bvList.append(binary.float2bitvec(params['aFloat']))

    return binary.joinBV(bvList)
Example #7
0
def encode(params, validate=False):
    '''Create a imo_fairway_closed binary message payload to pack into an AIS Msg imo_fairway_closed.

    Fields in params:
      - MessageID(uint): AIS message number.  Must be 8 (field automatically set to "8")
      - RepeatIndicator(uint): Indicated how many times a message has been repeated
      - UserID(uint): MMSI number of transmitter broadcasting the message
      - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0")
      - dac(uint): Designated Area Code - part 1 of the IAI (field automatically set to "1")
      - fid(uint): Functional Identifier - part 2 of the IAI (field automatically set to "11")
      - reason(aisstr6): Reason for closing
      - from(aisstr6): Location of closing from
      - to(aisstr6): Location of closing To
      - radius(uint): Extention of closed area
      - unit(uint): Unit of extension value for range field
      - closingday(uint): Closing from day
      - closingmonth(uint): Closing from month
      - fromhour(uint): From LT hour (appr)
      - frommin(uint): From LT minute (appr)
      - today(uint): To day
      - tomonth(uint): To month
      - tohour(uint): To LT hour (appr)
      - tomin(uint): To LT minute (appr)
      - spare2(uint): Padding out the slot (field automatically set to "0")
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    bvList.append(binary.setBitVectorSize(BitVector(intVal=8), 6))
    if 'RepeatIndicator' in params:
        bvList.append(
            binary.setBitVectorSize(
                BitVector(intVal=params['RepeatIndicator']), 2))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['UserID']), 30))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=1), 10))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=11), 6))
    if 'reason' in params:
        bvList.append(aisstring.encode(params['reason'], 120))
    else:
        bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@', 120))
    if 'from' in params:
        bvList.append(aisstring.encode(params['from'], 120))
    else:
        bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@', 120))
    if 'to' in params:
        bvList.append(aisstring.encode(params['to'], 120))
    else:
        bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@', 120))
    if 'radius' in params:
        bvList.append(
            binary.setBitVectorSize(BitVector(intVal=params['radius']), 10))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=1001), 10))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['unit']), 2))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['closingday']), 5))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['closingmonth']), 4))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['fromhour']), 5))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['frommin']), 6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['today']),
                                          5))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['tomonth']), 4))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['tohour']), 5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['tomin']),
                                          6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 4))

    return binary.joinBV(bvList)
Example #8
0
def encode(params, validate=False):
    '''Create a imo_fairway_closed binary message payload to pack into an AIS Msg imo_fairway_closed.

    Fields in params:
      - MessageID(uint): AIS message number.  Must be 8 (field automatically set to "8")
      - RepeatIndicator(uint): Indicated how many times a message has been repeated
      - UserID(uint): MMSI number of transmitter broadcasting the message
      - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0")
      - dac(uint): Designated Area Code - part 1 of the IAI (field automatically set to "1")
      - fid(uint): Functional Identifier - part 2 of the IAI (field automatically set to "11")
      - reason(aisstr6): Reason for closing
      - from(aisstr6): Location of closing from
      - to(aisstr6): Location of closing To
      - radius(uint): Extention of closed area
      - unit(uint): Unit of extension value for range field
      - closingday(uint): Closing from day
      - closingmonth(uint): Closing from month
      - fromhour(uint): From LT hour (appr)
      - frommin(uint): From LT minute (appr)
      - today(uint): To day
      - tomonth(uint): To month
      - tohour(uint): To LT hour (appr)
      - tomin(uint): To LT minute (appr)
      - spare2(uint): Padding out the slot (field automatically set to "0")
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    bvList.append(binary.setBitVectorSize(BitVector(intVal=8),6))
    if 'RepeatIndicator' in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params['RepeatIndicator']),2))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=0),2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['UserID']),30))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0),2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=1),10))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=11),6))
    if 'reason' in params:
        bvList.append(aisstring.encode(params['reason'],120))
    else:
        bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@',120))
    if 'from' in params:
        bvList.append(aisstring.encode(params['from'],120))
    else:
        bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@',120))
    if 'to' in params:
        bvList.append(aisstring.encode(params['to'],120))
    else:
        bvList.append(aisstring.encode('@@@@@@@@@@@@@@@@@@@@',120))
    if 'radius' in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params['radius']),10))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=1001),10))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['unit']),2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['closingday']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['closingmonth']),4))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['fromhour']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['frommin']),6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['today']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['tomonth']),4))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['tohour']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['tomin']),6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0),4))

    return binary.joinBV(bvList)
Example #9
0
def encode(params, validate=False):
    '''Create a whalenotice binary message payload to pack into an AIS Msg whalenotice.

    Fields in params:
      - MessageID(uint): AIS message number.  Must be 8 (field automatically set to "8")
      - RepeatIndicator(uint): Indicated how many times a message has been repeated
      - UserID(uint): Unique ship identification number (MMSI)
      - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0")
      - dac(uint): Designated Area Code - 366 for the United States (field automatically set to "366")
      - fid(uint): Functional IDentifier - 63 for the Whale Notice (field automatically set to "63")
      - efid(uint): Extended Functional IDentifier.  1 for the Whale Notice (dac+fid+efid defines the exact message type) (field automatically set to "1")
      - month(uint): Time of most recent whale detection.  UTC month 1..12
      - day(uint): Time of most recent whale detection.  UTC day of the month 1..31
      - hour(uint): Time of most recent whale detection.  UTC hours 0..23
      - min(uint): Time of most recent whale detection.  UTC minutes
      - sec(uint): Time of most recent whale detection.  UTC seconds
      - stationid(aisstr6): Identifier of the station that detected the whale.  (e.g. which buoy)
      - longitude(decimal): Center of the detection zone.  East West location
      - latitude(decimal): Center of the detection zone.  North South location
      - timetoexpire(uint): Seconds from the detection time until the notice expires
      - radius(uint): Distance from center of detection zone (lat/lon above)
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    bvList.append(binary.setBitVectorSize(BitVector(intVal=8), 6))
    if 'RepeatIndicator' in params:
        bvList.append(
            binary.setBitVectorSize(
                BitVector(intVal=params['RepeatIndicator']), 2))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['UserID']), 30))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=366), 10))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=63), 6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=1), 12))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['month']),
                                          4))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['day']), 5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['hour']), 5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['min']), 6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['sec']), 6))
    if 'stationid' in params:
        bvList.append(aisstring.encode(params['stationid'], 42))
    else:
        bvList.append(aisstring.encode('@@@@@@@', 42))
    if 'longitude' in params:
        bvList.append(
            binary.bvFromSignedInt(
                int(Decimal(params['longitude']) * Decimal('600000')), 28))
    else:
        bvList.append(binary.bvFromSignedInt(108600000, 28))
    if 'latitude' in params:
        bvList.append(
            binary.bvFromSignedInt(
                int(Decimal(params['latitude']) * Decimal('600000')), 27))
    else:
        bvList.append(binary.bvFromSignedInt(54600000, 27))
    if 'timetoexpire' in params:
        bvList.append(
            binary.setBitVectorSize(BitVector(intVal=params['timetoexpire']),
                                    16))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 16))
    if 'radius' in params:
        bvList.append(
            binary.setBitVectorSize(BitVector(intVal=params['radius']), 16))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=65534), 16))

    return binary.joinBV(bvList)
Example #10
0
def encode(params, validate=False):
    '''Create a whalenotice binary message payload to pack into an AIS Msg whalenotice.

    Fields in params:
      - MessageID(uint): AIS message number.  Must be 8 (field automatically set to "8")
      - RepeatIndicator(uint): Indicated how many times a message has been repeated
      - UserID(uint): Unique ship identification number (MMSI)
      - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0")
      - dac(uint): Designated Area Code - 366 for the United States (field automatically set to "366")
      - fid(uint): Functional IDentifier - 63 for the Whale Notice (field automatically set to "63")
      - efid(uint): Extended Functional IDentifier.  1 for the Whale Notice (dac+fid+efid defines the exact message type) (field automatically set to "1")
      - month(uint): Time of most recent whale detection.  UTC month 1..12
      - day(uint): Time of most recent whale detection.  UTC day of the month 1..31
      - hour(uint): Time of most recent whale detection.  UTC hours 0..23
      - min(uint): Time of most recent whale detection.  UTC minutes
      - sec(uint): Time of most recent whale detection.  UTC seconds
      - stationid(aisstr6): Identifier of the station that detected the whale.  (e.g. which buoy)
      - longitude(decimal): Center of the detection zone.  East West location
      - latitude(decimal): Center of the detection zone.  North South location
      - timetoexpire(uint): Seconds from the detection time until the notice expires
      - radius(uint): Distance from center of detection zone (lat/lon above)
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    bvList.append(binary.setBitVectorSize(BitVector(intVal=8),6))
    if 'RepeatIndicator' in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params['RepeatIndicator']),2))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=0),2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['UserID']),30))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0),2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=366),10))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=63),6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=1),12))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['month']),4))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['day']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['hour']),5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['min']),6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['sec']),6))
    if 'stationid' in params:
        bvList.append(aisstring.encode(params['stationid'],42))
    else:
        bvList.append(aisstring.encode('@@@@@@@',42))
    if 'longitude' in params:
        bvList.append(binary.bvFromSignedInt(int(Decimal(params['longitude'])*Decimal('600000')),28))
    else:
        bvList.append(binary.bvFromSignedInt(108600000,28))
    if 'latitude' in params:
        bvList.append(binary.bvFromSignedInt(int(Decimal(params['latitude'])*Decimal('600000')),27))
    else:
        bvList.append(binary.bvFromSignedInt(54600000,27))
    if 'timetoexpire' in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params['timetoexpire']),16))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=0),16))
    if 'radius' in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params['radius']),16))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=65534),16))

    return binary.joinBV(bvList)
Example #11
0
def encode(params, validate=False):
    """Create a waterlevel binary message payload to pack into an AIS Msg waterlevel.

    Fields in params:
      - MessageID(uint): AIS message number.  Must be 8 (field automatically set to "8")
      - RepeatIndicator(uint): Indicated how many times a message has been repeated
      - UserID(uint): Unique ship identification number (MMSI)
      - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0")
      - dac(uint): Designated Area Code (field automatically set to "366")
      - fid(uint): Functional Identifier (field automatically set to "63")
      - month(uint): Time the measurement represents  month 1..12
      - day(uint): Time the measurement represents  day of the month 1..31
      - hour(uint): Time the measurement represents  UTC hours 0..23
      - min(uint): Time the measurement represents  minutes
      - stationid(aisstr6): Character identifier of the station.  Usually a number.
      - waterlevel(int): Water level in centimeters
      - datum(uint): What reference datum applies to the value
      - sigma(uint): Standard deviation of 1 second samples used to compute the water level height.  FIX: is this the correct description of sigma?
      - source(uint): How the water level was derived
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    """

    bvList = []
    bvList.append(binary.setBitVectorSize(BitVector(intVal=8), 6))
    if "RepeatIndicator" in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params["RepeatIndicator"]), 2))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params["UserID"]), 30))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=366), 10))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=63), 6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params["month"]), 4))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params["day"]), 5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params["hour"]), 5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params["min"]), 6))
    if "stationid" in params:
        bvList.append(aisstring.encode(params["stationid"], 42))
    else:
        bvList.append(aisstring.encode("@@@@@@@", 42))
    if "waterlevel" in params:
        bvList.append(binary.bvFromSignedInt(params["waterlevel"], 16))
    else:
        bvList.append(binary.bvFromSignedInt(-32768, 16))
    if "datum" in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params["datum"]), 5))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=31), 5))
    if "sigma" in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params["sigma"]), 7))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=127), 7))
    if "source" in params:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=params["source"]), 3))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 3))

    return binary.joinBV(bvList)
Example #12
0
def encode(params, validate=False):
    '''Create a sls_weatherreport binary message payload to pack into an AIS Msg sls_weatherreport.

    Fields in params:
      - time_month(uint): Time tag of measurement  month 1..12
      - time_day(uint): Time tag of measurement  day of the month 1..31
      - time_hour(uint): Time tag of measurement  UTC hours 0..23
      - time_min(uint): Time tag of measurement  minutes
      - stationid(aisstr6): Character identifier of the station
      - pos_longitude(decimal): Location of measurement  East West location
      - pos_latitude(decimal): Location of measurement  North South location
      - speed(udecimal): Average wind speed
      - gust(udecimal): Wind gust
      - direction(uint): Wind direction
      - atmpressure(udecimal): Atmospheric pressure
      - airtemp(decimal): Air temperature
      - dewpoint(decimal): Dew Point
      - visibility(udecimal): Visibility
      - watertemp(decimal): Water Temperature
      - reserved(uint): Reserved bits for future use (field automatically set to "0")
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['time_month']), 4))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['time_day']), 5))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['time_hour']), 5))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['time_min']), 6))
    if 'stationid' in params:
        bvList.append(aisstring.encode(params['stationid'], 42))
    else:
        bvList.append(aisstring.encode('@@@@@@@', 42))
    if 'pos_longitude' in params:
        bvList.append(
            binary.bvFromSignedInt(
                int(Decimal(params['pos_longitude']) * Decimal('60000')), 25))
    else:
        bvList.append(binary.bvFromSignedInt(10860000, 25))
    if 'pos_latitude' in params:
        bvList.append(
            binary.bvFromSignedInt(
                int(Decimal(params['pos_latitude']) * Decimal('60000')), 24))
    else:
        bvList.append(binary.bvFromSignedInt(5460000, 24))
    if 'speed' in params:
        bvList.append(
            binary.setBitVectorSize(
                BitVector(intVal=int((Decimal(params['speed']) *
                                      Decimal('10')))), 10))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=int(1023)), 10))
    if 'gust' in params:
        bvList.append(
            binary.setBitVectorSize(
                BitVector(intVal=int((Decimal(params['gust']) *
                                      Decimal('10')))), 10))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=int(1023)), 10))
    if 'direction' in params:
        bvList.append(
            binary.setBitVectorSize(BitVector(intVal=params['direction']), 9))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=511), 9))
    if 'atmpressure' in params:
        bvList.append(
            binary.setBitVectorSize(
                BitVector(intVal=int((Decimal(params['atmpressure']) *
                                      Decimal('10')))), 14))
    else:
        bvList.append(
            binary.setBitVectorSize(BitVector(intVal=int(163830)), 14))
    if 'airtemp' in params:
        bvList.append(
            binary.bvFromSignedInt(
                int(Decimal(params['airtemp']) * Decimal('10')), 10))
    else:
        bvList.append(binary.bvFromSignedInt(-512, 10))
    if 'dewpoint' in params:
        bvList.append(
            binary.bvFromSignedInt(
                int(Decimal(params['dewpoint']) * Decimal('10')), 10))
    else:
        bvList.append(binary.bvFromSignedInt(-512, 10))
    if 'visibility' in params:
        bvList.append(
            binary.setBitVectorSize(
                BitVector(intVal=int((Decimal(params['visibility']) *
                                      Decimal('10')))), 8))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=int(255)), 8))
    if 'watertemp' in params:
        bvList.append(
            binary.bvFromSignedInt(
                int(Decimal(params['watertemp']) * Decimal('10')), 10))
    else:
        bvList.append(binary.bvFromSignedInt(-512, 10))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 4))

    return binary.joinBV(bvList)
Example #13
0
def encode(params, validate=False):
    '''Create a waterlevel binary message payload to pack into an AIS Msg waterlevel.

    Fields in params:
      - MessageID(uint): AIS message number.  Must be 8 (field automatically set to "8")
      - RepeatIndicator(uint): Indicated how many times a message has been repeated
      - UserID(uint): Unique ship identification number (MMSI)
      - Spare(uint): Reserved for definition by a regional authority. (field automatically set to "0")
      - dac(uint): Designated Area Code (field automatically set to "366")
      - fid(uint): Functional Identifier (field automatically set to "63")
      - month(uint): Time the measurement represents  month 1..12
      - day(uint): Time the measurement represents  day of the month 1..31
      - hour(uint): Time the measurement represents  UTC hours 0..23
      - min(uint): Time the measurement represents  minutes
      - stationid(aisstr6): Character identifier of the station.  Usually a number.
      - waterlevel(int): Water level in centimeters
      - datum(uint): What reference datum applies to the value
      - sigma(uint): Standard deviation of 1 second samples used to compute the water level height.  FIX: is this the correct description of sigma?
      - source(uint): How the water level was derived
    @param params: Dictionary of field names/values.  Throws a ValueError exception if required is missing
    @param validate: Set to true to cause checking to occur.  Runs slower.  FIX: not implemented.
    @rtype: BitVector
    @return: encoded binary message (for binary messages, this needs to be wrapped in a msg 8
    @note: The returned bits may not be 6 bit aligned.  It is up to you to pad out the bits.
    '''

    bvList = []
    bvList.append(binary.setBitVectorSize(BitVector(intVal=8), 6))
    if 'RepeatIndicator' in params:
        bvList.append(
            binary.setBitVectorSize(
                BitVector(intVal=params['RepeatIndicator']), 2))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2))
    bvList.append(
        binary.setBitVectorSize(BitVector(intVal=params['UserID']), 30))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 2))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=366), 10))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=63), 6))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['month']),
                                          4))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['day']), 5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['hour']), 5))
    bvList.append(binary.setBitVectorSize(BitVector(intVal=params['min']), 6))
    if 'stationid' in params:
        bvList.append(aisstring.encode(params['stationid'], 42))
    else:
        bvList.append(aisstring.encode('@@@@@@@', 42))
    if 'waterlevel' in params:
        bvList.append(binary.bvFromSignedInt(params['waterlevel'], 16))
    else:
        bvList.append(binary.bvFromSignedInt(-32768, 16))
    if 'datum' in params:
        bvList.append(
            binary.setBitVectorSize(BitVector(intVal=params['datum']), 5))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=31), 5))
    if 'sigma' in params:
        bvList.append(
            binary.setBitVectorSize(BitVector(intVal=params['sigma']), 7))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=127), 7))
    if 'source' in params:
        bvList.append(
            binary.setBitVectorSize(BitVector(intVal=params['source']), 3))
    else:
        bvList.append(binary.setBitVectorSize(BitVector(intVal=0), 3))

    return binary.joinBV(bvList)