void myNotifyWayFunc (OSMWay* psWay, OSMContext* psOSMContext, void* user_data) { VSILFILE* fp = (VSILFILE*) user_data; int l; struct tm mytm; WRITE_STR(" <way id=\""); VSIFPrintfL(fp, "%d", (int)psWay->nID); WRITE_STR("\" version=\""); VSIFPrintfL(fp, "%d", psWay->sInfo.nVersion); WRITE_STR("\" changeset=\""); VSIFPrintfL(fp, "%d", (int) psWay->sInfo.nChangeset); if (psWay->sInfo.nUID >= 0) { WRITE_STR("\" uid=\""); VSIFPrintfL(fp, "%d", psWay->sInfo.nUID); WRITE_STR("\" user=\""); WRITE_ESCAPED(psWay->sInfo.pszUserSID); } if( !(psWay->sInfo.bTimeStampIsStr) ) { WRITE_STR("\" timestamp=\""); myCPLUnixTimeToYMDHMS(psWay->sInfo.ts.nTimeStamp, &mytm); VSIFPrintfL(fp, "%04d-%02d-%02dT%02d:%02d:%02dZ", 1900 + mytm.tm_year, mytm.tm_mon + 1, mytm.tm_mday, mytm.tm_hour, mytm.tm_min, mytm.tm_sec); } else if (psWay->sInfo.ts.pszTimeStamp != NULL && psWay->sInfo.ts.pszTimeStamp[0] != '\0') { WRITE_STR("\" timestamp=\""); WRITE_STR(psWay->sInfo.ts.pszTimeStamp); } WRITE_STR("\">\n"); for(l=0;l<psWay->nRefs;l++) VSIFPrintfL(fp, " <nd ref=\"%d\"/>\n", (int)psWay->panNodeRefs[l]); for(l=0;l<psWay->nTags;l++) { WRITE_STR(" <tag k=\""); WRITE_ESCAPED(psWay->pasTags[l].pszK); WRITE_STR("\" v=\""); WRITE_ESCAPED(psWay->pasTags[l].pszV); WRITE_STR("\" />\n"); } VSIFPrintfL(fp, " </way>\n"); }
/* prefs_write_xml_pref: * stores specified value to the disk */ static void prefs_write_xml_pref(const gchar * prefs_name, struct prefs_value * value, FILE * prefs_f) { gchar * esc; GList * entry; g_assert(prefs_name && value && prefs_f); #define WRITE_ESCAPED(format, ...) \ do { \ esc = g_markup_printf_escaped(format, __VA_ARGS__); \ fputs(esc, prefs_f); \ g_free(esc); \ } while(0); WRITE_ESCAPED("\t\t<pref name=\"%s\"", prefs_name); switch(value->type) { case PREFS_TYPE_UINT: WRITE_ESCAPED(" type=\"uint\">%u</pref>\n", value->value.integer); break; case PREFS_TYPE_BOOL: WRITE_ESCAPED(" type=\"bool\">%s</pref>\n", value->value.boolean ? "TRUE": "FALSE"); break; case PREFS_TYPE_STR: WRITE_ESCAPED(" type=\"string\">%s</pref>\n", value->value.string); break; case PREFS_TYPE_LIST: fputs(" type=\"list\">", prefs_f); if(value->value.list) { fputs("\n", prefs_f); for(entry = value->value.list; entry; entry = entry->next) WRITE_ESCAPED("\t\t\t<entry>%s</entry>\n", (const gchar*)entry->data); fputs("\t\t", prefs_f); } fputs("</pref>\n", prefs_f); break; } }
void myNotifyRelationFunc (OSMRelation* psRelation, OSMContext* psOSMContext, void* user_data) { VSILFILE* fp = (VSILFILE*) user_data; int l; const OSMTag* pasTags = psRelation->pasTags; const OSMMember* pasMembers = psRelation->pasMembers; struct tm mytm; WRITE_STR(" <relation id=\""); VSIFPrintfL(fp, "%d", (int)psRelation->nID); WRITE_STR("\" version=\""); VSIFPrintfL(fp, "%d", psRelation->sInfo.nVersion); WRITE_STR("\" changeset=\""); VSIFPrintfL(fp, "%d", (int) psRelation->sInfo.nChangeset); if (psRelation->sInfo.nUID >= 0) { WRITE_STR("\" uid=\""); VSIFPrintfL(fp, "%d", psRelation->sInfo.nUID); WRITE_STR("\" user=\""); WRITE_ESCAPED(psRelation->sInfo.pszUserSID); } if( !(psRelation->sInfo.bTimeStampIsStr) ) { myCPLUnixTimeToYMDHMS(psRelation->sInfo.ts.nTimeStamp, &mytm); WRITE_STR("\" timestamp=\""); VSIFPrintfL(fp, "%04d-%02d-%02dT%02d:%02d:%02dZ", 1900 + mytm.tm_year, mytm.tm_mon + 1, mytm.tm_mday, mytm.tm_hour, mytm.tm_min, mytm.tm_sec); } else if (psRelation->sInfo.ts.pszTimeStamp != NULL && psRelation->sInfo.ts.pszTimeStamp[0] != '\0') { WRITE_STR("\" timestamp=\""); WRITE_STR(psRelation->sInfo.ts.pszTimeStamp); } WRITE_STR("\">\n"); for(l=0;l<psRelation->nMembers;l++) { WRITE_STR(" <member type=\""); VSIFPrintfL(fp, "%s", pasMembers[l].eType == MEMBER_NODE ? "node": pasMembers[l].eType == MEMBER_WAY ? "way": "relation"); WRITE_STR("\" ref=\""); VSIFPrintfL(fp, "%d", (int)pasMembers[l].nID); WRITE_STR("\" role=\""); WRITE_ESCAPED(pasMembers[l].pszRole); WRITE_STR("\"/>\n"); } for(l=0;l<psRelation->nTags;l++) { WRITE_STR(" <tag k=\""); WRITE_ESCAPED(pasTags[l].pszK); WRITE_STR("\" v=\""); WRITE_ESCAPED(pasTags[l].pszV); WRITE_STR("\" />\n"); } VSIFPrintfL(fp, " </relation>\n"); }
void myNotifyNodesFunc (unsigned int nNodes, OSMNode* pasNodes, OSMContext* psOSMContext, void* user_data) { VSILFILE* fp = (VSILFILE*) user_data; int k; for(k=0;k<nNodes;k++) { int l; const OSMNode* psNode = &pasNodes[k]; OSMTag *pasTags = psNode->pasTags; struct tm mytm; WRITE_STR(" <node id=\""); VSIFPrintfL(fp, "%d", (int)psNode->nID); WRITE_STR("\" lat=\""); VSIFPrintfL(fp, "%.7f", psNode->dfLat); WRITE_STR("\" lon=\""); VSIFPrintfL(fp, "%.7f", psNode->dfLon); WRITE_STR("\" version=\""); VSIFPrintfL(fp, "%d", psNode->sInfo.nVersion); WRITE_STR("\" changeset=\""); VSIFPrintfL(fp, "%d", (int) psNode->sInfo.nChangeset); if (psNode->sInfo.nUID >= 0) { WRITE_STR("\" user=\""); WRITE_ESCAPED(psNode->sInfo.pszUserSID); WRITE_STR("\" uid=\""); VSIFPrintfL(fp, "%d", psNode->sInfo.nUID); } if( !(psNode->sInfo.bTimeStampIsStr) ) { WRITE_STR("\" timestamp=\""); myCPLUnixTimeToYMDHMS(psNode->sInfo.ts.nTimeStamp, &mytm); VSIFPrintfL(fp, "%04d-%02d-%02dT%02d:%02d:%02dZ", 1900 + mytm.tm_year, mytm.tm_mon + 1, mytm.tm_mday, mytm.tm_hour, mytm.tm_min, mytm.tm_sec); } else if (psNode->sInfo.ts.pszTimeStamp != NULL && psNode->sInfo.ts.pszTimeStamp[0] != '\0') { WRITE_STR("\" timestamp=\""); WRITE_STR(psNode->sInfo.ts.pszTimeStamp); } if (psNode->nTags) { WRITE_STR("\">\n"); for(l=0;l<psNode->nTags;l++) { WRITE_STR(" <tag k=\""); WRITE_ESCAPED(pasTags[l].pszK); WRITE_STR("\" v=\""); WRITE_ESCAPED(pasTags[l].pszV); WRITE_STR("\" />\n"); } WRITE_STR(" </node>\n"); } else { WRITE_STR("\"/>\n"); } } }
/* UART_writeFrame writes an UART frame on the wire * Argument : * pt : pointer to the memory area where the frame will be read. * size : size of data to read at pt. * Return value : * >0 : nb of bytes written on success (excluding escape char and UART_framing overhead) * <=0 : error (ex : writing error, size too big) */ int UART_writeFrame(const void *pt,int size){ uint8_t cSum=0; //checksum int j=0; int ret; #ifdef ARCH_X86_LINUX uint8_t c; int i; #endif //check size : if ( size > UART_MTU ) return -ERR_UART_OVERSIZE; #ifdef ARCH_X86_LINUX if(framebased){ uint8_t *buf = (uint8_t *)malloc(1+(size+3)*2); // worst case size if(!buf){ return -ERR_INSUFFICIENT_MEMORY; } i=0; #define WRITE_ESCAPED(byte) do{\ if ( byte == UART_FRAME_START || byte == UART_XOFF || byte == UART_XON || byte == UART_ESCAPE_CHAR ){\ buf[i] = UART_ESCAPE_CHAR;\ i++;\ buf[i] = (byte)^UART_ESCAPE_MASK;\ i++;\ }\ else{\ buf[i] = (byte);\ i++;\ }\ }while(0) //write start byte buf[i] = UART_FRAME_START; i++; //write size c=(uint8_t)(size>>8); WRITE_ESCAPED(c); c=(uint8_t)(size&0xff); WRITE_ESCAPED(c); //write data for(j=0;j<size;j++){ c=((uint8_t*)pt)[j]; WRITE_ESCAPED(c); cSum+=c; } //compute and write checksum cSum=0xff-cSum; WRITE_ESCAPED(cSum); #undef WRITE_ESCAPED //actual sending of data ret=serialWriteBytes(buf, i); free(buf); return ret==i?size:(ret<0?ret:0); } else{ #endif //write start byte if ( (ret=serialWrite(UART_FRAME_START)) <= 0 ) return ret;