/****f* xml_element/xml_elem_new * NAME * xml_elem_new * SYNOPSIS * xml_element* xml_elem_new() * FUNCTION * allocates and initializes a new xml_element * INPUTS * none * RESULT * xml_element* or NULL. NULL indicates an out-of-memory condition. * NOTES * SEE ALSO * xml_elem_free () * xml_elem_free_non_recurse () * SOURCE */ xml_element* xml_elem_new() { xml_element* elem = calloc(1, sizeof(xml_element)); if(elem) { Q_Init(&elem->children); Q_Init(&elem->attrs); simplestring_init(&elem->text); /* init empty string in case we don't find any char data */ simplestring_addn(&elem->text, "", 0); } return elem; }
int main(int argc, char *argv[]) { int policy; struct sched_param param; pthread_attr_t attr; char buffer[1024]; int err; dprintf("init\n"); if(argc != 2) { perr(AR_ERR_BAD_INIT_PARAM); printf("Useage: %s INSTANCE\n", AR_MODULE_NAME); return(AR_ERR_BAD_INIT_PARAM); } memset(&config, 0, sizeof(config)); erret(init_config(AR_MODULE_NAME, atoi(argv[1]), &config.base)); erret(read_config_int(config.base.name, "PRIORITY", &config.priority)); erret(read_config_int(config.base.name, "PRIORITY_DGPS_CORR_DATA", &config.priority_dgps_corr_data)); erret(read_config_string(config.base.name, "DEVICE", config.ser_device, sizeof(config.ser_device))); err = read_config_int_tab(config.base.name, "QUEUE_INDEX", "QUEUE_IN_GPS_CORR", &config.queue_corr_data); if(err != 0) { erret(read_config_string(config.base.name, "DEVICE_CORR_DATA_READ", config.ser_device_corr_data_read, sizeof(config.ser_device_corr_data_read))); // fprintf(stderr, "DGPS correction data from ser. device <%s>\n", config.ser_device_corr_data_read); } else { // fprintf(stderr, "DGPS correction data from queue <%d>\n", config.queue_corr_data); } memset(buffer, 0, sizeof(buffer)); config.corr_mode = -1; erret(read_config_string(config.base.name, "CORRECTION_MODE", buffer, sizeof(buffer))); if(strnicmp(buffer, "RTCA", strlen("RTCA")) == 0) { config.corr_mode = OEM4_RTCA_MODE; } else if(strnicmp(buffer, "RTCM", strlen("RTCM")) == 0) { config.corr_mode = OEM4_RTCM_MODE; } else { perrs(AR_ERR_BAD_INIT_PARAM, "Correction data mode not specified (RTCA | RTCM)."); // return(AR_ERR_BAD_INIT_PARAM); } erret(read_config_int_tab(config.base.name, "SHM_INDEX", "SHM_OUT_GPS_POS", &config.ishm_pos_out)); erret(read_config_int_tab(config.base.name, "SHM_INDEX", "SHM_OUT_GPS_VEL", &config.ishm_vel_out)); if(read_config_int(config.base.name, "UTC_OFFSET", &config.utc_offset)) { config.utc_offset = 15; } erret(SHM_Init()); erret(SHM_InitSlot(config.ishm_pos_out, sizeof(gps_pos_novatel_t))); erret(SHM_InitSlot(config.ishm_vel_out, sizeof(gps_vel_novatel_t))); if(config.queue_corr_data != 0) { erret(Q_Init()); erret(Q_InitSlot(config.queue_corr_data, sizeof(gps_corr_t), MAX_GPS_CORRECTION_Q_ITEMS_NUMBER, 1)); } else if (strlen(config.ser_device_corr_data_read)>0){ erret(open_comport(&fd_corr_data_read, config.ser_device_corr_data_read, O_RDWR, 115200)); } erret(open_comport(&fd, config.ser_device, O_RDWR, 57600)); if(0){ struct termios termios_p; if(tcgetattr(fd, &termios_p)==0) { termios_p.c_cc[VTIME] = 1; // 2*0.1s = 0.2s termios_p.c_cc[VMIN] = 0; tcsetattr(fd, TCSADRAIN, &termios_p); } else fprintf(stderr, "failed to set read timeout\n"); } //create thread for reading and writing of the correction data: ifret(pthread_getschedparam(pthread_self(), &policy, ¶m), AR_ERR_SYS_RESOURCES); param.sched_priority = config.priority_dgps_corr_data; pthread_attr_init( &attr ); ifret(pthread_attr_setschedparam(&attr, ¶m), AR_ERR_SYS_RESOURCES); ifret(pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED), AR_ERR_SYS_RESOURCES); ifret(pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED), AR_ERR_SYS_RESOURCES); if(config.corr_mode == OEM4_RTCA_MODE) { ifret(write(fd, OEM4_INIT_ROVER_RTCA, strlen(OEM4_INIT_ROVER_RTCA))==-1, AR_ERR_IO_ERROR); ifret(pthread_create(&pthreads[0], &attr, &corr_data_thread_func, NULL), AR_ERR_SYS_RESOURCES); } else if(config.corr_mode == OEM4_RTCM_MODE) { ifret(write(fd, OEM4_INIT_ROVER_RTCM, strlen(OEM4_INIT_ROVER_RTCM))==-1, AR_ERR_IO_ERROR); ifret(pthread_create(&pthreads[0], &attr, &corr_data_thread_func, NULL), AR_ERR_SYS_RESOURCES); } else { ifret(write(fd, OEM4_INIT_ROVER_COM1, strlen(OEM4_INIT_ROVER_COM1))==-1, AR_ERR_IO_ERROR); printf("running without differential data\n"); } ifret(pthread_getschedparam(pthread_self(), &policy, ¶m), AR_ERR_SYS_RESOURCES); param.sched_priority = config.priority; ifret(pthread_setschedparam(pthread_self(), policy, ¶m), AR_ERR_SYS_RESOURCES); while(1) { errp(read_data()); } return 0; }
/** * @ingroup app * @brief * ״̬����ʼ������ʼ����ָ��״̬S0 * @details * @param �� * @retval �� * @note * @code * @endcode */ void Initial(QEVENT const *e) { bFoo = false; Q_Init((QSTATE)s0); }
int main(int argc, char* argv[]) { int policy; struct sched_param param; char buffer[1024]; dprintf("init\n"); if(argc != 2) { perr(AR_ERR_BAD_INIT_PARAM); printf("Useage: %s INSTANCE\n", AR_MODULE_NAME); return(AR_ERR_BAD_INIT_PARAM); } erret(init_config(AR_MODULE_NAME, atoi(argv[1]), &config.base)); erret(read_config_int(config.base.name, "PRIORITY", &config.priority)); erret(read_config_string(config.base.name, "DEVICE", config.ser_device, sizeof(config.ser_device))); memset(buffer, 0, sizeof(buffer)); erret(read_config_string(config.base.name, "CORRECTION_MODE", buffer, sizeof(buffer))); if(strnicmp(buffer, "RTCA", strlen("RTCA")) == 0) config.corr_mode = OEMX_RTCA_MODE; else if(strnicmp(buffer, "RTCM", strlen("RTCM")) == 0) config.corr_mode = OEMX_RTCM_MODE; else { perrs(AR_ERR_BAD_INIT_PARAM, "Correction data mode not specified (RTCA | RTCM)."); return(AR_ERR_BAD_INIT_PARAM); } erret(open_comport(&fd, config.ser_device, O_RDWR, 115200)); memset(buffer, 0, sizeof(buffer)); erret(read_config_string(config.base.name, "GPS_MODE", buffer, sizeof(buffer))); if(strnicmp(buffer, "OEM4", strlen("OEM4")) == 0) config.gps_mode = OEM4_GPS; else if(strnicmp(buffer, "OEM5", strlen("OEM5")) == 0) config.gps_mode = OEM4_GPS; else { perrs(AR_ERR_BAD_INIT_PARAM, "GPS_MODE must be OEM4 or OEM5."); return(AR_ERR_BAD_INIT_PARAM); } //ifret(write(fd, OEM4_INIT_ROVER_COM1, strlen(OEM4_INIT_ROVER_COM1))==-1, AR_ERR_IO_ERROR); /* if(config.gps_mode == OEM4_GPS && config.corr_mode == OEMX_RTCA_MODE) { ifret(write(fd, OEM4_INIT_RTCA, strlen(OEM4_INIT_RTCA))==-1, AR_ERR_IO_ERROR); printf("INIT RTCA\n"); } else if(config.gps_mode == OEM4_GPS && config.corr_mode == OEMX_RTCM_MODE) { struct termios termios_p; int rlen=0; if(tcgetattr(fd, &termios_p)==0) { termios_p.c_cc[VTIME] = 10; // 2*0.1s = 0.2s termios_p.c_cc[VMIN] = 0; tcsetattr(fd, TCSANOW, &termios_p); } sprintf(buffer, "unlogall com2\n\r"); sleep(1); write(fd,buffer, strlen(buffer)); rlen=read(fd,buffer,sizeof(buffer)-1); buffer[rlen]=0; printf("%s\n---\n",buffer); ifret(write(fd, OEM4_INIT_RTCM, strlen(OEM4_INIT_RTCM))==-1, AR_ERR_IO_ERROR); sleep(1); write(fd,buffer, strlen(buffer)); rlen=read(fd,buffer,sizeof(buffer)-1); buffer[rlen]=0; printf("%s\n---\n",buffer); printf("INIT RTCM\n"); } else { perrs(AR_ERR_BAD_INIT_PARAM, "can not initialized mode for corr. data\n"); return(AR_ERR_BAD_INIT_PARAM); } */ config.queue_corr_data_1 = 0; config.queue_corr_data_2 = 0; config.queue_corr_data_3 = 0; config.queue_corr_data_4 = 0; config.queue_corr_data_5 = 0; config.queue_corr_data_6 = 0; erret(read_config_int_tab(config.base.name, "QUEUE_INDEX", "QUEUE_OUT_GPS_CORRCTION_1", &config.queue_corr_data_1)); erret(Q_Init()); erret(Q_InitSlot(config.queue_corr_data_1, sizeof(gps_corr_t), MAX_GPS_CORRECTION_Q_ITEMS_NUMBER, 0)); if(read_config_int_tab(config.base.name, "QUEUE_INDEX", "QUEUE_OUT_GPS_CORRCTION_2", &config.queue_corr_data_2)==0) { erret(Q_InitSlot(config.queue_corr_data_2, sizeof(gps_corr_t), MAX_GPS_CORRECTION_Q_ITEMS_NUMBER, 0)); } if(read_config_int_tab(config.base.name, "QUEUE_INDEX", "QUEUE_OUT_GPS_CORRCTION_3", &config.queue_corr_data_3)==0) { erret(Q_InitSlot(config.queue_corr_data_3, sizeof(gps_corr_t), MAX_GPS_CORRECTION_Q_ITEMS_NUMBER, 0)); } if(read_config_int_tab(config.base.name, "QUEUE_INDEX", "QUEUE_OUT_GPS_CORRCTION_4", &config.queue_corr_data_4)==0) { erret(Q_InitSlot(config.queue_corr_data_4, sizeof(gps_corr_t), MAX_GPS_CORRECTION_Q_ITEMS_NUMBER, 0)); } if(read_config_int_tab(config.base.name, "QUEUE_INDEX", "QUEUE_OUT_GPS_CORRCTION_5", &config.queue_corr_data_5)==0) { erret(Q_InitSlot(config.queue_corr_data_5, sizeof(gps_corr_t), MAX_GPS_CORRECTION_Q_ITEMS_NUMBER, 0)); } if(read_config_int_tab(config.base.name, "QUEUE_INDEX", "QUEUE_OUT_GPS_CORRCTION_6", &config.queue_corr_data_6)==0) { erret(Q_InitSlot(config.queue_corr_data_6, sizeof(gps_corr_t), MAX_GPS_CORRECTION_Q_ITEMS_NUMBER, 0)); } //both queues are initialized in non-blocking mode; if one of communicators is blocked, //the second one continues to transmit the data ifret(pthread_getschedparam(pthread_self(), &policy, ¶m), AR_ERR_SYS_RESOURCES); param.sched_priority = config.priority; ifret(pthread_setschedparam(pthread_self(), policy, ¶m), AR_ERR_SYS_RESOURCES); read_corr_data_loop(); return(0); }