示例#1
0
// basically oauth_sign_url() from liboauth in steps..
char *oauthsign_ext (int mode, char *method, oauthparam *op, int optargc, char **optargv, int *saveargcp, char ***saveargvp) {
    int argc=0;
    char **argv = NULL;
    char *sign=NULL;

    url_to_array(&argc, &argv, mode, op->url);
    append_parameters(&argc, &argv, optargc, optargv);
    add_oauth_params_to_array(&argc, &argv, op);
    if (saveargvp && saveargcp) {
        clear_parameters(saveargcp, saveargvp);
        append_parameters(saveargcp, saveargvp, argc, argv);
    }

    sign=process_array(argc, argv, method, mode, op);
    free_array(argc,argv);
    return (sign); // needs to be free()d.

#if 0 // cruft
    if (sign) {
        add_kv_to_array(&argc, &argv, "oauth_signature", sign);
        free(sign);
    }
    char *result;
    result = oauth_serialize_url(argc, (mode&2?1:0), argv);
    return (result);
#endif
}
示例#2
0
// basically oauth_sign_url() from liboauth in steps..
char *oauthrequest_ext (int mode, oauthparam *op, int oauthargc, char **oauthargv, char *sign) {
    int argc=0;
    char **argv = NULL;
    char *request=NULL;

    append_parameters(&argc, &argv, oauthargc, oauthargv);

    if (sign) {
        add_kv_to_array(&argc, &argv, "oauth_signature", sign);
    }

    // build URL params
    request = oauth_serialize_url(argc, (mode&2?1:0), argv);

    char *reply = NULL;
    if(request) {
        if (mode&2) { // POST
            reply = oauth_http_post(argv[0],request);
        } else { // GET
            reply= oauth_http_get(request, NULL);
        }
        free(request);
    }
    free_array(argc,argv);
    return reply;
}
示例#3
0
TEST(UtilsTest,append_parameters)
{
    char buf[132];

    int n= append_parameters(buf, {{'X', 1}, {'Y', 2}, {'Z', 3}}, sizeof(buf));
    //printf("%d - %s\n", n, buf);
    ASSERT_TRUE(n == 24);
    ASSERT_TRUE(strcmp(buf, "X1.0000 Y2.0000 Z3.0000 ") == 0);
}
示例#4
0
// if limit switches are enabled, then we must move off of the endstop otherwise we won't be able to move
// checks if triggered and only backs off if triggered
void Endstops::back_off_home(std::bitset<3> axis)
{
    std::vector<std::pair<char, float>> params;
    this->status = BACK_OFF_HOME;

    // these are handled differently
    if(is_delta) {
        // Move off of the endstop using a regular relative move in Z only
        params.push_back({'Z', this->retract_mm[Z_AXIS] * (this->home_direction[Z_AXIS] ? 1 : -1)});

    } else {
        // cartesians, concatenate all the moves we need to do into one gcode
        for( int c = X_AXIS; c <= Z_AXIS; c++ ) {
            if(!axis[c]) continue; // only for axes we asked to move

            // if not triggered no need to move off
            if(this->limit_enable[c] && debounced_get(c + (this->home_direction[c] ? 0 : 3)) ) {
                params.push_back({c + 'X', this->retract_mm[c] * (this->home_direction[c] ? 1 : -1)});
            }
        }
    }

    if(!params.empty()) {
        // Move off of the endstop using a regular relative move
        params.insert(params.begin(), {'G', 0});
        // use X slow rate to move, Z should have a max speed set anyway
        params.push_back({'F', this->slow_rates[X_AXIS] * 60.0F});
        char gcode_buf[64];
        append_parameters(gcode_buf, params, sizeof(gcode_buf));
        Gcode gc(gcode_buf, &(StreamOutput::NullStream));
        THEROBOT->push_state();
        THEROBOT->inch_mode = false;     // needs to be in mm
        THEROBOT->absolute_mode = false; // needs to be relative mode
        THEROBOT->on_gcode_received(&gc); // send to robot directly
        // Wait for above to finish
        THECONVEYOR->wait_for_idle();
        THEROBOT->pop_state();
    }

    this->status = NOT_HOMING;
}