Home | History | Annotate | Download | only in src
      1 /* ------------------------------------------------------------------
      2  * Copyright (C) 1998-2009 PacketVideo
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13  * express or implied.
     14  * See the License for the specific language governing permissions
     15  * and limitations under the License.
     16  * -------------------------------------------------------------------
     17  */
     18 /**
     19  *  @file oscl_uuid.h
     20  *  @brief This file defines the OSCL UUID structure used for unique
     21  *  identifiers as well as the short (32-bit) identifiers OsclUid32.
     22  */
     23 
     24 #ifndef OSCL_UUID_H_INCLUDED
     25 #define OSCL_UUID_H_INCLUDED
     26 
     27 #ifndef OSCL_BASE_H_INCLUDED
     28 #include "oscl_base.h"
     29 #endif
     30 
     31 #ifndef OSCL_MEM_BASIC_FUNCTIONS_H
     32 #include "oscl_mem_basic_functions.h"
     33 #endif
     34 
     35 #ifndef OSCL_STRING_UTILS_H
     36 #include "oscl_string_utils.h"
     37 #endif
     38 
     39 #ifndef OSCL_STDSTRING_H_INCLUDED
     40 #include "oscl_stdstring.h"
     41 #endif
     42 // __cplusplus
     43 
     44 typedef uint32 OsclUid32;
     45 const char PV_CHAR_CLOSE_BRACKET = ')';
     46 const char PV_CHAR_COMMA = ',';
     47 /**
     48  * OSCL UUID structure used for unique identification of modules and interfaces.
     49  */
     50 struct OsclUuid
     51 {
     52 #define BYTES_IN_UUID_ARRAY 8
     53 
     54     OsclUuid()
     55     {
     56         oscl_memset(this, 0, sizeof(OsclUuid));
     57     }
     58 
     59     OsclUuid(uint32 l, uint16 w1, uint16 w2, uint8 b1, uint8 b2, uint8 b3,
     60              uint8 b4, uint8 b5, uint8 b6, uint8 b7, uint8 b8)
     61     {
     62         data1 = l;
     63         data2 = w1;
     64         data3 = w2;
     65         data4[0] = b1;
     66         data4[1] = b2;
     67         data4[2] = b3;
     68         data4[3] = b4;
     69         data4[4] = b5;
     70         data4[5] = b6;
     71         data4[6] = b7;
     72         data4[7] = b8;
     73     }
     74 
     75     //The OSCL UUID structure takes in a string parameter
     76     //Expected string input for the OsclString should be like:
     77     //(0xa054569c,0x24c5,0x452e,0x99,0x77,0x87,0x4b,0xca,0x79,0xd3,0xaf)
     78 
     79     OsclUuid(const char* aUuidString)
     80     {
     81         //Initialize all data members to 0 to begin with
     82         data1 = data2 = data3 = 0;
     83 
     84         for (int ii = 0; ii < 8; ++ii)
     85         {
     86             data4[ii] = 0;
     87         }
     88 
     89         int uuidStrLen = oscl_strlen(aUuidString);
     90 
     91         if (uuidStrLen != 0)
     92         {
     93             const char* sptr = NULL, *eptr = NULL;
     94             int commaval = 0;
     95             sptr = aUuidString;
     96             ++sptr; //Increment over the starting parantheses '('
     97             eptr = sptr;
     98             for (int i = 0; i < uuidStrLen - 1 ; ++i)
     99             {
    100                 if ((*eptr != PV_CHAR_COMMA) && (*eptr != PV_CHAR_CLOSE_BRACKET)) //Increment the pointer unless you get to the ","
    101                 {                               //The comma signifies the beginning of the new OsclUuid parameter
    102                     ++eptr;
    103                 }
    104                 else
    105                 {
    106                     sptr = sptr + 2;//Move over the 0x characters in the beginning of the hex value;
    107                     ++commaval;
    108                     switch (commaval)
    109                     {
    110                         case 1:
    111                         {
    112                             PV_atoi(sptr , 'x', eptr - sptr, data1);
    113                             break;
    114                         }
    115                         case 2:
    116                         {
    117                             uint32 tempdata2 = 0;
    118                             PV_atoi(sptr , 'x', (eptr - sptr), tempdata2);
    119                             data2 = (uint16)tempdata2;
    120                             break;
    121                         }
    122                         case 3:
    123                         {
    124                             uint32 tempdata3 = 0;
    125                             PV_atoi(sptr , 'x', (eptr - sptr), tempdata3);
    126                             data3 = (uint16)tempdata3;
    127                             break;
    128                         }
    129                         case 4:
    130                         {
    131                             uint32 tempdata4_0 = 0;
    132                             PV_atoi(sptr , 'x', (eptr - sptr), tempdata4_0);
    133                             data4[0] = (uint8)tempdata4_0;
    134                             break;
    135                         }
    136                         case 5:
    137                         {
    138                             uint32 tempdata4_1 = 0;
    139                             PV_atoi(sptr , 'x', (eptr - sptr), tempdata4_1);
    140                             data4[1] = (uint8)tempdata4_1;
    141                             break;
    142                         }
    143                         case 6:
    144                         {
    145                             uint32 tempdata4_2 = 0;
    146                             PV_atoi(sptr , 'x', (eptr - sptr), tempdata4_2);
    147                             data4[2] = (uint8)tempdata4_2;
    148                             break;
    149                         }
    150                         case 7:
    151                         {
    152                             uint32 tempdata4_3 = 0;
    153                             PV_atoi(sptr , 'x', (eptr - sptr), tempdata4_3);
    154                             data4[3] = (uint8)tempdata4_3;
    155                             break;
    156                         }
    157                         case 8:
    158                         {
    159                             uint32 tempdata4_4 = 0;
    160                             PV_atoi(sptr , 'x', (eptr - sptr), tempdata4_4);
    161                             data4[4] = (uint8)tempdata4_4;
    162                             break;
    163                         }
    164                         case 9:
    165                         {
    166                             uint32 tempdata4_5 = 0;
    167                             PV_atoi(sptr , 'x', (eptr - sptr), tempdata4_5);
    168                             data4[5] = (uint8)tempdata4_5;
    169                             break;
    170                         }
    171                         case 10:
    172                         {
    173                             uint32 tempdata4_6 = 0;
    174                             PV_atoi(sptr , 'x', (eptr - sptr), tempdata4_6);
    175                             data4[6] = (uint8)tempdata4_6;
    176                             break;
    177                         }
    178                         case 11:
    179                         {
    180                             uint32 tempdata4_7 = 0;
    181                             PV_atoi(sptr, 'x', (eptr - sptr), tempdata4_7);
    182                             data4[7] = (uint8)tempdata4_7;
    183                             break;
    184                         }
    185                     }
    186                     if (*eptr == PV_CHAR_CLOSE_BRACKET) //Break from the loop on finding
    187                     {
    188                         break;
    189                     }
    190                     ++eptr;
    191                     sptr = eptr;
    192                 }
    193             }
    194         }
    195     }
    196 
    197     OsclUuid(const OsclUuid &uuid)
    198     {
    199         oscl_memcpy(this, &uuid, sizeof(OsclUuid));
    200     }
    201 
    202     OsclUuid &operator=(const OsclUuid& src)
    203     {
    204         oscl_memcpy(this, &src, sizeof(OsclUuid));
    205         return *this;
    206     }
    207 
    208     bool operator==(const OsclUuid& src) const
    209     {
    210         if (data1 != src.data1 || data2 != src.data2 || data3 != src.data3)
    211         {
    212             return false;
    213         }
    214 
    215         for (int ii = 0; ii < 8; ++ii)
    216         {
    217             if (data4[ii] != src.data4[ii])
    218             {
    219                 return false;
    220             }
    221         }
    222 
    223         return true;
    224     }
    225 
    226     bool operator!=(const OsclUuid &src) const
    227     {
    228         return !(*this == src);
    229     }
    230 
    231     uint32  data1;
    232     uint16  data2;
    233     uint16  data3;
    234     uint8   data4[BYTES_IN_UUID_ARRAY];
    235 };
    236 
    237 #endif
    238 
    239