davide carboni / Mbed 2 deprecated pymite_http_get

Dependencies:   mbed

Committer:
dadaista
Date:
Wed Jul 21 12:50:41 2010 +0000
Revision:
0:14e5e829dffe

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dadaista 0:14e5e829dffe 1 /*
dadaista 0:14e5e829dffe 2 # This file is Copyright 2003, 2006, 2007, 2009 Dean Hall.
dadaista 0:14e5e829dffe 3 #
dadaista 0:14e5e829dffe 4 # This file is part of the PyMite VM.
dadaista 0:14e5e829dffe 5 # The PyMite VM is free software: you can redistribute it and/or modify
dadaista 0:14e5e829dffe 6 # it under the terms of the GNU GENERAL PUBLIC LICENSE Version 2.
dadaista 0:14e5e829dffe 7 #
dadaista 0:14e5e829dffe 8 # The PyMite VM is distributed in the hope that it will be useful,
dadaista 0:14e5e829dffe 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
dadaista 0:14e5e829dffe 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
dadaista 0:14e5e829dffe 11 # A copy of the GNU GENERAL PUBLIC LICENSE Version 2
dadaista 0:14e5e829dffe 12 # is seen in the file COPYING in this directory.
dadaista 0:14e5e829dffe 13 */
dadaista 0:14e5e829dffe 14
dadaista 0:14e5e829dffe 15
dadaista 0:14e5e829dffe 16 #undef __FILE_ID__
dadaista 0:14e5e829dffe 17 #define __FILE_ID__ 0x07
dadaista 0:14e5e829dffe 18
dadaista 0:14e5e829dffe 19
dadaista 0:14e5e829dffe 20 /**
dadaista 0:14e5e829dffe 21 * \file
dadaista 0:14e5e829dffe 22 * \brief Image routines
dadaista 0:14e5e829dffe 23 *
dadaista 0:14e5e829dffe 24 * Created to eliminate a circular include
dadaista 0:14e5e829dffe 25 * among mem, string and obj.
dadaista 0:14e5e829dffe 26 */
dadaista 0:14e5e829dffe 27
dadaista 0:14e5e829dffe 28
dadaista 0:14e5e829dffe 29 #include "pm.h"
dadaista 0:14e5e829dffe 30
dadaista 0:14e5e829dffe 31
dadaista 0:14e5e829dffe 32 /*
dadaista 0:14e5e829dffe 33 * Searches for a module's name in a contiguous array of images
dadaista 0:14e5e829dffe 34 * in the given namespace starting at the given address.
dadaista 0:14e5e829dffe 35 * A module's name is stored in the last index of the names tuple of an image.
dadaista 0:14e5e829dffe 36 */
dadaista 0:14e5e829dffe 37 static PmReturn_t
dadaista 0:14e5e829dffe 38 img_findInPath(uint8_t *cname, uint8_t cnamelen, PmMemSpace_t memspace,
dadaista 0:14e5e829dffe 39 uint8_t const **paddr)
dadaista 0:14e5e829dffe 40 {
dadaista 0:14e5e829dffe 41 uint8_t const *imgtop;
dadaista 0:14e5e829dffe 42 PmType_t type;
dadaista 0:14e5e829dffe 43 uint16_t len;
dadaista 0:14e5e829dffe 44 int16_t size = 0;
dadaista 0:14e5e829dffe 45 uint8_t i = 0;
dadaista 0:14e5e829dffe 46
dadaista 0:14e5e829dffe 47 /* Addr is top of img */
dadaista 0:14e5e829dffe 48 imgtop = *paddr;
dadaista 0:14e5e829dffe 49
dadaista 0:14e5e829dffe 50 /* Get img's type byte */
dadaista 0:14e5e829dffe 51 type = (PmType_t)mem_getByte(memspace, paddr);
dadaista 0:14e5e829dffe 52
dadaista 0:14e5e829dffe 53 /* Search all sequential images */
dadaista 0:14e5e829dffe 54 while (type == OBJ_TYPE_CIM)
dadaista 0:14e5e829dffe 55 {
dadaista 0:14e5e829dffe 56 /* Use size field to calc addr of next potential img */
dadaista 0:14e5e829dffe 57 size = mem_getWord(memspace, paddr);
dadaista 0:14e5e829dffe 58
dadaista 0:14e5e829dffe 59 /* Point to names tuple */
dadaista 0:14e5e829dffe 60 *paddr = imgtop + CI_NAMES_FIELD;
dadaista 0:14e5e829dffe 61
dadaista 0:14e5e829dffe 62 /* Ensure it's a tuple */
dadaista 0:14e5e829dffe 63 type = (PmType_t)mem_getByte(memspace, paddr);
dadaista 0:14e5e829dffe 64 C_ASSERT(type == OBJ_TYPE_TUP);
dadaista 0:14e5e829dffe 65
dadaista 0:14e5e829dffe 66 /* Scan to last name in tuple (it's the module's name) */
dadaista 0:14e5e829dffe 67 i = mem_getByte(memspace, paddr) - (uint8_t)1;
dadaista 0:14e5e829dffe 68 for (; i > 0; i--)
dadaista 0:14e5e829dffe 69 {
dadaista 0:14e5e829dffe 70 /* Ensure obj is a string */
dadaista 0:14e5e829dffe 71 type = (PmType_t)mem_getByte(memspace, paddr);
dadaista 0:14e5e829dffe 72 C_ASSERT(type == OBJ_TYPE_STR);
dadaista 0:14e5e829dffe 73
dadaista 0:14e5e829dffe 74 /* Skip the length of the string */
dadaista 0:14e5e829dffe 75 len = mem_getWord(memspace, paddr);
dadaista 0:14e5e829dffe 76 (*paddr) += len;
dadaista 0:14e5e829dffe 77 }
dadaista 0:14e5e829dffe 78
dadaista 0:14e5e829dffe 79 /* Ensure it's a string */
dadaista 0:14e5e829dffe 80 type = (PmType_t)mem_getByte(memspace, paddr);
dadaista 0:14e5e829dffe 81 C_ASSERT(type == OBJ_TYPE_STR);
dadaista 0:14e5e829dffe 82
dadaista 0:14e5e829dffe 83 /* If strings match, return the address of this image */
dadaista 0:14e5e829dffe 84 if ((cnamelen == mem_getWord(memspace, paddr))
dadaista 0:14e5e829dffe 85 && (PM_RET_OK == mem_cmpn(cname, cnamelen, memspace, paddr)))
dadaista 0:14e5e829dffe 86 {
dadaista 0:14e5e829dffe 87 *paddr = imgtop;
dadaista 0:14e5e829dffe 88 return PM_RET_OK;
dadaista 0:14e5e829dffe 89 }
dadaista 0:14e5e829dffe 90
dadaista 0:14e5e829dffe 91 /* Calc imgtop for next iteration */
dadaista 0:14e5e829dffe 92 imgtop += size;
dadaista 0:14e5e829dffe 93
dadaista 0:14e5e829dffe 94 /* Point to next potential img */
dadaista 0:14e5e829dffe 95 *paddr = imgtop;
dadaista 0:14e5e829dffe 96
dadaista 0:14e5e829dffe 97 /* Check if another img follows this one */
dadaista 0:14e5e829dffe 98 type = (PmType_t)mem_getByte(memspace, paddr);
dadaista 0:14e5e829dffe 99 }
dadaista 0:14e5e829dffe 100 return PM_RET_NO;
dadaista 0:14e5e829dffe 101 }
dadaista 0:14e5e829dffe 102
dadaista 0:14e5e829dffe 103
dadaista 0:14e5e829dffe 104 PmReturn_t
dadaista 0:14e5e829dffe 105 img_findInPaths(pPmObj_t pname, PmMemSpace_t *r_memspace,
dadaista 0:14e5e829dffe 106 uint8_t const **r_imgaddr)
dadaista 0:14e5e829dffe 107 {
dadaista 0:14e5e829dffe 108 uint8_t i;
dadaista 0:14e5e829dffe 109 PmReturn_t retval = PM_RET_NO;
dadaista 0:14e5e829dffe 110
dadaista 0:14e5e829dffe 111 /* Search in each path in the paths */
dadaista 0:14e5e829dffe 112 for (i = 0; i < gVmGlobal.imgPaths.pathcount; i++)
dadaista 0:14e5e829dffe 113 {
dadaista 0:14e5e829dffe 114 *r_imgaddr = gVmGlobal.imgPaths.pimg[i];
dadaista 0:14e5e829dffe 115 *r_memspace = gVmGlobal.imgPaths.memspace[i];
dadaista 0:14e5e829dffe 116 retval = img_findInPath(((pPmString_t)pname)->val,
dadaista 0:14e5e829dffe 117 ((pPmString_t)pname)->length,
dadaista 0:14e5e829dffe 118 *r_memspace, r_imgaddr);
dadaista 0:14e5e829dffe 119 if (retval == PM_RET_NO)
dadaista 0:14e5e829dffe 120 {
dadaista 0:14e5e829dffe 121 continue;
dadaista 0:14e5e829dffe 122 }
dadaista 0:14e5e829dffe 123 else if (retval == PM_RET_OK)
dadaista 0:14e5e829dffe 124 {
dadaista 0:14e5e829dffe 125 break;
dadaista 0:14e5e829dffe 126 }
dadaista 0:14e5e829dffe 127 else
dadaista 0:14e5e829dffe 128 {
dadaista 0:14e5e829dffe 129 return retval;
dadaista 0:14e5e829dffe 130 }
dadaista 0:14e5e829dffe 131 }
dadaista 0:14e5e829dffe 132
dadaista 0:14e5e829dffe 133 return retval;
dadaista 0:14e5e829dffe 134 }
dadaista 0:14e5e829dffe 135
dadaista 0:14e5e829dffe 136
dadaista 0:14e5e829dffe 137 PmReturn_t
dadaista 0:14e5e829dffe 138 img_appendToPath(PmMemSpace_t memspace, uint8_t *paddr)
dadaista 0:14e5e829dffe 139 {
dadaista 0:14e5e829dffe 140 uint8_t i;
dadaista 0:14e5e829dffe 141
dadaista 0:14e5e829dffe 142 if (gVmGlobal.imgPaths.pathcount >= PM_NUM_IMG_PATHS)
dadaista 0:14e5e829dffe 143 {
dadaista 0:14e5e829dffe 144 return PM_RET_NO;
dadaista 0:14e5e829dffe 145 }
dadaista 0:14e5e829dffe 146
dadaista 0:14e5e829dffe 147 i = gVmGlobal.imgPaths.pathcount;
dadaista 0:14e5e829dffe 148
dadaista 0:14e5e829dffe 149 gVmGlobal.imgPaths.memspace[i] = memspace;
dadaista 0:14e5e829dffe 150 gVmGlobal.imgPaths.pimg[i] = paddr;
dadaista 0:14e5e829dffe 151 gVmGlobal.imgPaths.pathcount++;
dadaista 0:14e5e829dffe 152
dadaista 0:14e5e829dffe 153 return PM_RET_OK;
dadaista 0:14e5e829dffe 154 }