Example #1
0
 bool register_resource(const std::string& resource,
         http_resource<T>* res, bool family = false
 )
 {
     details::http_resource_mirror hrm(res);
     return register_resource(resource, hrm, family);
 }
Example #2
0
//
// main routine
//
int main(void) {
#ifdef DEBUG
	CSerial ser;		// declare a UART object
	ser.enable();
	CDebug dbg(ser);	// Debug stream use the UART object
	dbg.start();
#endif
	//
	// Declare SoftDevice Object
	//
	bleDevice ble;
	ble.enable();						// enable BLE stack

	// GAP
	ble.m_gap.settings(DEVICE_NAME);	// set Device Name on GAP
	ble.m_gap.tx_power(BLE_TX_0dBm);	// set output radio Power

	//
	// Declare a HRM service object
	//
	bleServiceHRM hrm(ble);

	//
	// Declare a HTM service object
	//
	bleServiceHTM htm(ble);

	//
	// Declare a BAT service object
	//
	bleServiceBattery bat(ble);

	//
	// Add "connection parameters update" negotiation. (optional)
	//
	bleConnParams conn(ble);

	//
	// update advertisement contents
	//
	ble.m_advertising.commpany_identifier(APP_COMPANY_IDENTIFIER);	// add company identifier
	ble.m_advertising.add_uuid_to_complete_list(hrm);				// add hrm object to the uuid list of advertisement
	ble.m_advertising.add_uuid_to_complete_list(htm);				// add htm object to the uuid_list of advertisement
	ble.m_advertising.add_uuid_to_complete_list(bat);				// add bat object to the uuid_list of advertisement
	ble.m_advertising.appearance(BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR);
	ble.m_advertising.update();										// update advertisement data

	// Start advertising
	ble.m_advertising.interval(APP_ADV_INTERVAL);					// set advertising interval
//	ble.m_advertising.timeout(30); // set timeout, will cause the system to enter to the power off mode.
	ble.m_advertising.start();

	//
	// Tickless Low Power Feature
	//
#ifndef DEBUG
	CPowerSave::tickless(true);
#endif

	//
	// Analog input (for VDD detected)
	//
	CAdc::init();			// AREF internal VBG
	CAdc::source(VDD_1_3);	// source from internal: VDD x 1/3
	CAdc::enable();

	//
	// LED Task
	//
	CThread t(tskLED);
	t.start("LED", 45);	// stack size=45 DWORD

	//
	uint16_t value;
	float 	 temp, percentage;

	//
    // Enter main loop.
	//
    while(1) {

    	//
    	// wait for BLE connected, the task will be blocked until connected.
    	//
    	ble.wait();

    	//
    	// Heart Rate Measurement Service
    	//
    	if ( hrm.isAvailable() ) {	// is service available (when remote app connected to the service)
    		hrm.send(70);			// send Heart Rate Measurement
    	}

    	//
    	// Health Thermometer Measurement Service
    	//
    	if ( htm.isAvailable() ) {		// is service available (when remote app connected to the service)
			if ( bleServiceHTM::get_temperature(temp) ) {
				htm.send(temp);	// send temp
			}
    	}

    	//
    	// Battery Service
    	//
    	if ( bat.isAvailable() ) {		// is service available (when remote app connected to the service)
			if ( CAdc::read(value) ) {
				percentage = (value / 1024.0f) * 100.0;
				bat.send(percentage);
			}
    	}

    	// Negotiate the "connection parameters update"
    	conn.negotiate();

    	// sleep to make more idle time for tickless.
    	sleep(200);
    }
}
Example #3
0
//
// main task
//
int main(void) {

#ifdef DEBUG
	#if __USE_USB
		usbCDC ser;
		ser.connect();
	#else
		CSerial ser;
		ser.settings(115200);
	#endif
	CDebug dbg(ser);
	dbg.start();
#endif

	/*************************************************************************
	 *
	 *                         your setup code here
	 *
	**************************************************************************/
	//
	// BLE engine (serial stream)
	//
	bleSerial	ble("myHRM");
	ble.enable(96);

	//
	// Heart Beat Rate Service
	//
	bleHeartRate hrm(ble);
	hrm.supportContact(true);
	hrm.contactStatus(true);
	hrm.setSensorLocation(HRSL_FINGER);

	//
	// Battery Level & Health Thermometer Service (Use internal sensors)
	//
	bleBatteryLevel		 bat(ble);
	bleHealthThermometer ht(ble);

	//
	// Pulse Sensor
	//
	myPulseSensor pulse(AD0);	// signal on AD0
	pulse.start();

	//
	// Fade LED task
	//
	ledTask led(pulse);
	led.start("LED", 50);	// reduce stack size to 58 to increase the heap memory

	//
	//
	//
	CTimeout t1, t2, t3;
	float value;
	uint8_t level;

	while(1) {
		/**********************************************************************
		 *
		 *                         your loop code here
		 *
		 **********************************************************************/
		//
		// Heart Rate Measurement
		//
		if ( hrm.isAvailable() ) {
			if ( t1.isExpired(1000) ) {	// interval 1 second
				t1.reset();
				hrm.sendMeasure((uint8_t)pulse.BPM);
			}
		}

		//
		// Battery Level
		//
		if ( t2.isExpired(10000) ) {	// interval 10 seconds
			t2.reset();
			if ( bat.readSystemVoltage(value) ) {
				level = map(value, 2.0, 3.3, 0, 100);	// 0%~100%
				bat.sendBatteryLevel(level);
			}
		}

		//
		// Health Thermometer Service
		//
		if ( t3.isExpired(5000) ) {	// interval 5 seconds
			t3.reset();
			if ( ht.readTemperature(value) ) {
				ht.sendMeasure(value);
			}
		}

	}
    return 0 ;
}
int main() {
  hrm(c);
  return 0;
}
Example #5
0
void V800export::export_sessions(QList<QString> sessions, unsigned char mode)
{
    QSettings settings;
    QString default_dir = settings.value(tr("default_dir")).toString();

    for(int sessions_iter = 0; sessions_iter < sessions.length(); sessions_iter++)
    {
        QStringList filters;
        filters << QString(tr("%1_*")).arg(sessions[sessions_iter]);

        QDir filter_dir(default_dir);
        filter_dir.setNameFilters(filters);
        filter_dir.setFilter(QDir::Dirs);

        int multi_sessions_iter;
        QStringList multi_sessions = filter_dir.entryList();
        for(multi_sessions_iter = 0; multi_sessions_iter < multi_sessions.length(); multi_sessions_iter++)
        {
            if(!make_bipolar_names(multi_sessions[multi_sessions_iter]))
            {
                emit export_session_error(sessions[sessions_iter], RENAME_ERROR);
                continue;
            }

            QString session_info(QString(tr("%1/%2/v2-users-0000000-training-sessions-%3")).arg(default_dir).arg(multi_sessions[multi_sessions_iter]).arg(multi_sessions[multi_sessions_iter]));
            polar::v2::TrainingSession parser(session_info);

            qDebug("Parser: %s", session_info.toUtf8().constData());

            parser.setTcxOption(polar::v2::TrainingSession::ForceTcxUTC, true);

            if(!parser.parse())
                emit export_session_error(sessions[sessions_iter], PARSE_ERROR);

            if(mode & TCX_EXPORT)
            {
                QString tcx(QString(tr("%1/%2.tcx")).arg(default_dir).arg(multi_sessions[multi_sessions_iter]));
                if(!parser.writeTCX(tcx))
                    emit export_session_error(sessions[sessions_iter], TCX_ERROR);
            }

            if(mode & HRM_EXPORT)
            {
                QString hrm(QString(tr("%1/%2")).arg(default_dir).arg(multi_sessions[multi_sessions_iter]));
                QStringList hrm_out = parser.writeHRM(hrm);
                if(hrm_out.length() < 1)
                    emit export_session_error(sessions[sessions_iter], HRM_ERROR);
            }

            if(mode & GPX_EXPORT)
            {
                QString gpx(QString(tr("%1/%2.gpx")).arg(default_dir).arg(multi_sessions[multi_sessions_iter]));
                if(!parser.writeGPX(gpx))
                    emit export_session_error(sessions[sessions_iter], GPX_ERROR);
            }

            QDir(QString(tr("%1/%2")).arg(default_dir).arg(multi_sessions[multi_sessions_iter])).removeRecursively();
        }

        emit export_session_done(sessions_iter, sessions.length());
    }

    emit export_sessions_done();
}