Source code for platformids.embed.armbian

# -*- coding: utf-8 -*-
"""Armbian releases.

The *Armbian* Linux is implemented as a module 
based on custom numbering scheme due to the specific value ranges, 
which are required for this distribution only.

The *Armbian* distribution represents a *shrinked multi-role PC-Platform* as an
embedded system with integrated low-level HW interfaces for a wide range of *ARM*
based boards. 
"""
from __future__ import absolute_import

# from platformids import _debug, _verbose
from pythonids import PYV35Plus
from platformids import RTE, rte2num, num2rte, num2pretty, custom_rte_distrel2tuple, custom_dist, \
    decode_version_str_to_segments, \
    PlatformIDsUnknownError, \
    RTE_LINUX, RTE_DIST, \
    DSKORG_ID, DSKORG_RELEASE, DSKORG_VERSION, PlatformIDsFileCheck


__author__ = 'Arno-Can Uestuensoez'
__license__ = "Artistic-License-2.0 + Forced-Fairplay-Constraints"
__copyright__ = "Copyright (C) 2010-2018 Arno-Can Uestuensoez" \
                " @Ingenieurbuero Arno-Can Uestuensoez"
__version__ = '0.1.1'
__uuid__ = "7add5ded-c39b-4b6e-8c87-1b3a1c150ee9"


#
# *** special modifications ***
#
RTE_ARMBIAN = RTE_LINUX          + custom_dist.add_enum()    #: Armbian - re-grouped version sub-ranges 

    
#: mapping of the rte string and numeric representation to the numeric value
rte2num.update(
    {
        'armbian':   RTE_ARMBIAN,
        RTE_ARMBIAN: RTE_ARMBIAN,
    }
)


#: mapping of the rte numeric representation to the string value
num2rte.update(
    {
        RTE_ARMBIAN:        'armbian',
    }
)

num2pretty.update(
    {
        RTE_ARMBIAN:         'Armbian',
    }
)


#-----------------------------------------------#
#                                               #
# optional constants for convenience            #
#                                               #
#-----------------------------------------------#


RTE_ARMBIAN5 = RTE_ARMBIAN          + 0x00002800 #: ARMBIAN - stretch
RTE_ARMBIAN550 = RTE_ARMBIAN5       + 0x00000190 #: ARMBIAN - stretch

    
#: mapping of the rte string and numeric representation to the numeric value
rte2num.update(
    {
        'armbian5':          RTE_ARMBIAN5,
        'armbian550':        RTE_ARMBIAN550,
        'Armbian-stretch':   RTE_ARMBIAN550,
        RTE_ARMBIAN5:        RTE_ARMBIAN5,
        RTE_ARMBIAN550:      RTE_ARMBIAN550,
    }
)


#: mapping of the rte numeric representation to the string value
num2rte.update(
    {
        RTE_ARMBIAN5:        'armbian5',
        RTE_ARMBIAN550:      'armbian550',
    }
)


num2pretty.update(
    {
        RTE_ARMBIAN5:        'Armbian-stretch',
    }
)



# armbian
dist = ['', '', 'Armbian-', 'Armbian', '', '']

try:

    with open("/etc/os-release", 'r') as f:
        for l in f:
            if l.startswith('ID='):
                # id
                dist[0] = dist[5] = DSKORG_ID.sub(r'\1', l)

            elif l.startswith('VERSION='):
                # actual pretty name
                _pretty = DSKORG_RELEASE.split(l)[2]  # for now a reminder only 

    #
    # scan dist + distrel
    #
    with open("/etc/armbian-release", 'r') as f:
        # has it's own numbering
        for l in f:
            if l.startswith('VERSION='):
                dist[1] = DSKORG_VERSION.sub(r'\1', l)
                dist[4] = decode_version_str_to_segments(dist[1])
                dist[0] += '%d%d' % (dist[4][0], dist[4][1],)
                dist[2] += dist[1]
    

except PlatformIDsFileCheck:
    # not on armbian platform, so scan will fail
    pass


if dist[0] != 'armbian':
    # not actually armbian
    dist = ['armbian', '0.0.0', 'Armbian-0.0.0', 'Armbian', (0, 0, 0,), 'armbian']


[docs]def my_distrel2tuple(rte=RTE): """Callback for special version layout of Armbian, see manuals. A callback to be used by the function: platformids.decode_rte_distrel_to_segments(rte=RTE) Decodes the compressed *distrel* from the 32bit integer bitmask *rte* into the corresponding tuple of integer segments. Args: **rte**: The comppressed runtime environment identifier bitmask. default := RTE Returns: Tuple of Integer values of the encoded segments, either as defined by the default layout, or any known as defined by additional extended and/or custom criteria. Raises: pass-through Examples: :: decode_rte_distrel_to_segments() => (5, 50, 0) # on Armbian-5.50 """ if rte & RTE_DIST != RTE_ARMBIAN: raise PlatformIDsUnknownError("Not Armbian: rte = " + str(rte)) try: # handle string input _rte = rte2num[rte] except KeyError: # non-registered release if type(rte) is int: # can split basically any number, let's see... _rte = rte else: raise PlatformIDsUnknownError("Unknown Armbian release rte = " + str(rte)) # represents the Armbian layout return ( (_rte & 0xf800) >> 11, (_rte & 0x07f8) >> 3, _rte & 0x0003, )
#: registered callbacks for special handling of custom layout custom_rte_distrel2tuple.update( { RTE_ARMBIAN: my_distrel2tuple, #: the callback to be registered } )