Esempio n. 1
0
void FORTE_INSYS_OUTPUT::executeEvent(int pa_nEIID){
  switch(pa_nEIID){
    case scm_nEventINITID:

    	output = std::make_unique<OutputSetterControl>(factory->getOutputSetter());

    	if(output) {
    		setInitialised();

			SUCCESS() = output->isControlStatusOK();
			RESPONSE().fromString(output->getControlStatusMessage().c_str());
    	} else {
    		resetInitialised();

			SUCCESS() = false;
			RESPONSE().fromString("ERROR: initialisation failed");
		}

		sendOutputEvent(scm_nEventINITOID);
      break;
    case scm_nEventREQID:

    	if(!QI()) {
    		SUCCESS() = false;
    		RESPONSE().fromString("QI is false");

    		sendOutputEvent(scm_nEventCNFID);

    		return;
    	}

    	if(!isInitialised()) {
    		SUCCESS() = false;
    		RESPONSE().fromString("ERROR: Not initialised");
    		return;
    	}

    	std::string outputName;

    	outputName = OUTPUT().getValue();
    	output->setOutputName(outputName);

    	output->setOutputState(CHANGE().getValue());

    	SUCCESS() = output->isControlStatusOK();
    	RESPONSE().fromString(output->getControlStatusMessage().c_str());

		sendOutputEvent(scm_nEventCNFID);
  }
}
Esempio n. 2
0
static int dbCount(char * varName, response *res, error *err) {
	fetchResults *fResults;
	if (obtainResults(varName, &fResults, err)) {
		goto exit;
	}

	int nResults = fResults->nResultEntries;

	if (nResults == 0) {
		ERROR(err, E_VAREMT);
		goto exit;
	}

	int resultBytes = sizeof(int);
	int *count = (int *) malloc(resultBytes);
	if (count == NULL) {
		ERROR(err, E_NOMEM);
		goto exit;
	}

	*count = nResults;

	RESPONSE(res, "Maximum result:", resultBytes, count);

	return 0;

exit:
	return 1;
}
Esempio n. 3
0
static int dbAverage(char * varName, response *res, error *err) {
	fetchResults *fResults;
	if (obtainResults(varName, &fResults, err)) {
		goto exit;
	}

	int nResults = fResults->nResultEntries;

	if (nResults == 0) {
		ERROR(err, E_VAREMT);
		goto exit;
	}

	int resultBytes = sizeof(int);
	int *average = (int *) malloc(resultBytes);
	if (average == NULL) {
		ERROR(err, E_NOMEM);
		goto exit;
	}

	*average = 0;
	for (int i = 0; i < nResults; i++) {
		*average += fResults->results[i];
	}
	*average /= nResults;

	RESPONSE(res, "Maximum result:", resultBytes, average);

	return 0;

exit:
	return 1;
}
Esempio n. 4
0
static int dbMaximum(char * varName, response *res, error *err) {
	fetchResults *fResults;
	if (obtainResults(varName, &fResults, err)) {
		goto exit;
	}

	int nResults = fResults->nResultEntries;

	if (nResults == 0) {
		ERROR(err, E_VAREMT);
		goto exit;
	}

	int resultBytes = sizeof(int);
	int *maximum = (int *) malloc(resultBytes);
	if (maximum == NULL) {
		ERROR(err, E_NOMEM);
		goto exit;
	}

	*maximum = fResults->results[0];
	for (int i = 1; i < nResults; i++) {
		if (fResults->results[i] > *maximum) {
			*maximum = fResults->results[i];
		}
	}

	RESPONSE(res, "Maximum result:", resultBytes, maximum);

	return 0;

exit:
	return 1;
}
Esempio n. 5
0
static int dbPrintVar(char *varName, response *res, error *err) {

	if (varName == NULL) {
		ERROR(err, E_BADARG);
		goto exit;
	}

	void *payload;
	VAR_TYPE type;
	if (varMapGetVar(varName, &type, &payload, err)) {
		goto exit;
	}

	int resultBytes;
	int *results;

	if (type == VAR_BMP) {
		struct bitmap *bmp = (struct bitmap *) payload;

		printf("Bitmap result: \n");
		bitmapPrint(bmp);

		int bmpSize = bitmapSize(bmp);

		resultBytes = bmpSize * sizeof(int);
		results = (int *) malloc(resultBytes);

		if (resultBytes == 0) {
			free(results);
			results = NULL;
		} else {
			for (int i = 0; i < bmpSize; i++) {
				results[i] = bitmapIsSet(bmp, i) ? 1 : 0;
			}
		}
	} else if (type == VAR_RESULTS) {
		fetchResults *fResults = (fetchResults *) payload;

		resultBytes = fResults->nResultEntries * sizeof(int);
		results = (int *) malloc(resultBytes);
		memcpy(results, fResults->results, resultBytes);


		if (resultBytes == 0) {
			free(results);
			results = NULL;
		}
	} else {
		ERROR(err, E_VARTYPE);
		goto exit;
	}

	RESPONSE(res, "Print var results:", resultBytes, results);

	return 0;

exit:
	return 1;
}
Esempio n. 6
0
/*--------------------------------------------------------------------------------*/
BiQuadCoeffs::RESPONSE BiQuadCoeffs::CalcResponseComplex(double f, double fs, bool usetargets) const
{
  static const RESPONSE mul = 2.0 * M_PI * RESPONSE(0, 1.0);    // = 2.pi.j
  static const RESPONSE one(1.0);                               // = 1
  const COEFFS& coeffs = usetargets ? targets : current;
  RESPONSE z1 = exp(RESPONSE(f / fs * mul));                    // z^-1
  RESPONSE z2 = exp(RESPONSE(f / fs * 2.0 * mul));              // z^-2

  // Calculate
  //
  //      num0 + num1.z^-1 + num2.z^-2
  // H = -----------------------------
  //       1 + den1.z^-1 + den2.z^-2

  return ((coeffs.num0 + coeffs.num1 * z1 + coeffs.num2 * z2) /
          (one         + coeffs.den1 * z1 + coeffs.den2 * z2));
}
Esempio n. 7
0
static int dbMultiply(mathArgs *args, response *res, error *err) {
	char *var1 = args->var1;
	char *var2 = args->var2;

	if (var1 == NULL || var2 == NULL) {
		ERROR(err, E_BADARG);
		goto exit;
	}

	fetchResults *fResults1;
	fetchResults *fResults2;

	if (obtainResults(var1, &fResults1, err) || obtainResults(var2, &fResults2, err)) {
		goto exit;
	}

	int nResults1 = fResults1->nResultEntries;
	int nResults2 = fResults2->nResultEntries;

	if (nResults1 == 0 || nResults1 != nResults2) {
		ERROR(err, E_VAREMT);
		goto exit;
	}

	int resultBytes = nResults1 * sizeof(int);
	int *results = (int *) malloc(resultBytes);
	if (results == NULL) {
		ERROR(err, E_NOMEM);
		goto exit;
	}

	for (int i = 0; i < nResults1; i++) {
		results[i] = fResults1->results[i] * fResults2->results[i];
	}

	RESPONSE(res, "Add results:", resultBytes, results);

	return 0;

exit:
	return 1;
}
Esempio n. 8
0
void FORTE_MRX_INFO_LED::executeEvent(int pa_nEIID){
  switch(pa_nEIID){
	case scm_nEventINITID:

		cliCommander = std::make_unique<CliCommanderControl>(factory->getCliCommander());

		if(cliCommander) {
			setInitialised();

			SUCCESS() = cliCommander->isControlStatusOK();
			RESPONSE().fromString(cliCommander->getControlStatusMessage().c_str());
		} else {
			resetInitialised();

			SUCCESS() = false;
			RESPONSE().fromString("ERROR: initialisation failed");
		}

		sendOutputEvent(scm_nEventINITOID);
	  break;
	case scm_nEventREQID:
		if(!QI()) {
			SUCCESS() = false;
			RESPONSE().fromString("QI is false");

			sendOutputEvent(scm_nEventCNFID);

			return;
		}

		if(!isInitialised()) {
    		SUCCESS() = false;
    		RESPONSE().fromString("ERROR: Not initialised");

    		sendOutputEvent(scm_nEventCNFID);

    		return;
		}

		const std::string mode(MODE().getValue());

		if(mode != "on" && mode != "off" && mode != "flash") {
			SUCCESS() = false;
			RESPONSE().fromString("ERROR: Invalid mode");

			sendOutputEvent(scm_nEventCNFID);

			return;
		}

		std::string cliCommand = "help.debug.info_led.info_led=";

		cliCommand.append(MODE().getValue());
		cliCommander->sendCliCommand(cliCommand);

		if(!cliCommander->isControlStatusOK()) {
			SUCCESS() = cliCommander->isControlStatusOK();
			RESPONSE().fromString(cliCommander->getControlStatusMessage().c_str());

			sendOutputEvent(scm_nEventCNFID);
			return;
		}

		cliCommand = "help.debug.info_led.submit";
		cliCommander->sendCliCommand(cliCommand);

		SUCCESS() = cliCommander->isControlStatusOK();
		RESPONSE().fromString(cliCommander->getControlStatusMessage().c_str());

		sendOutputEvent(scm_nEventCNFID);
	  break;
  }
}
Esempio n. 9
0
#define RESPONSE(b) {"", 0, b, sizeof(b) - 1}
#define FAST_RESPONSE(b) {NULL, -1, b, sizeof(b) - 1}
#define FAST_SEND(b) {(const char *) 1, -2, b, sizeof(b) - 1}
#define FAST_SEND_TCF(b) {(const char *) 2, -2, b, sizeof(b) - 1}

static const struct command_response_s fax_send_test_seq[] =
{
    EXCHANGE("ATE0\r", "ATE0\r\r\nOK\r\n"),
    EXCHANGE("AT+FCLASS=1\r", "\r\nOK\r\n"),
    EXCHANGE("ATD123456789\r", "\r\nCONNECT\r\n"),
    //<NSF frame>         AT+FRH=3 is implied when dialing in the AT+FCLASS=1 state
    //RESPONSE("\xFF\x03\x10\x03"),
    //RESPONSE("\r\nOK\r\n"),
    //EXCHANGE("AT+FRH=3\r", "\r\nCONNECT\r\n"),
    //<CSI frame data>
    RESPONSE("\xFF\x03\x40\x31\x31\x31\x31\x31\x31\x31\x31\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x1e\x46\x10\x03"),
    RESPONSE("\r\nOK\r\n"),
    EXCHANGE("AT+FRH=3\r", "\r\nCONNECT\r\n"),
    //<DIS frame data>
    RESPONSE("\xFF\x13\x80\x00\xEE\xF8\x80\x80\x91\x80\x80\x80\x18\x78\x57\x10\x03"), // For audio FAXing
    //RESPONSE("\xFF\x13\x80\x04\xEE\xF8\x80\x80\x91\x80\x80\x80\x18\xE4\xE7\x10\x03"),   // For T.38 FAXing
    RESPONSE("\r\nOK\r\n"),
    //EXCHANGE("AT+FRH=3\r", "\r\nNO CARRIER\r\n"),
    EXCHANGE("AT+FTH=3\r", "\r\nCONNECT\r\n"),
    //<TSI frame data>
    EXCHANGE("\xFF\x03\x43\x32\x32\x32\x32\x32\x32\x32\x32\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x10\x03", "\r\nCONNECT\r\n"),
    //<DCS frame data>
    EXCHANGE("\xFF\x13\x83\x01\xC6\x80\x80\x80\x80\x01\xFD\x13\x10\x03", "\r\nOK\r\n"),
    //Do a wait for timed silence at this point, or there won't be one in the tests
    EXCHANGE("AT+FRS=7\r", "\r\nOK\r\n"),
    //EXCHANGE("AT+FTS=8;+FTM=96\r", "\r\nCONNECT\r\n"),
Esempio n. 10
0
	char type;
	int bell_volume;
	int keyclick_volume;
	int ctrlclick_volume;
};

#ifdef LKKBD_DEBUG
/*
 * Responses from the keyboard and mapping back to their names.
 */
static struct {
	unsigned char value;
	unsigned char *name;
} lk_response[] = {
#define RESPONSE(x) { .value = (x), .name = #x, }
	RESPONSE (LK_STUCK_KEY),
	RESPONSE (LK_SELFTEST_FAILED),
	RESPONSE (LK_ALL_KEYS_UP),
	RESPONSE (LK_METRONOME),
	RESPONSE (LK_OUTPUT_ERROR),
	RESPONSE (LK_INPUT_ERROR),
	RESPONSE (LK_KBD_LOCKED),
	RESPONSE (LK_KBD_TEST_MODE_ACK),
	RESPONSE (LK_PREFIX_KEY_DOWN),
	RESPONSE (LK_MODE_CHANGE_ACK),
	RESPONSE (LK_RESPONSE_RESERVED),
#undef RESPONSE
};

static unsigned char *
response_name (unsigned char value)
Esempio n. 11
0
static int dbFetch(tableInfo *tbl, fetchArgs *args, response *res, error *err) {
	
	char *columnName = args->columnName;
	char *oldVarName = args->oldVarName;
	char *newVarName = args->newVarName;

	if (columnName == NULL || oldVarName == NULL) {
		ERROR(err, E_BADARG);
		goto exit;
	}
	
	printf("Fetching from column '%s'...\n", columnName);

	// Get bitmap from var name
	struct bitmap *bmp;
	VAR_TYPE type;
	if (varMapGetVar(oldVarName, &type, (void **) (&bmp), err)) {
		goto exit;
	}

	if (type != VAR_BMP) {
		ERROR(err, E_VARTYPE);
		goto exit;
	}

	printf("Got bitmap for variable '%s'\n", oldVarName);
	bitmapPrint(bmp);


	// Retrieve the column from disk
	column *col = (column *) malloc(sizeof(column));
	if (col == NULL) {
		ERROR(err, E_NOMEM);
		goto exit;
	}

	if (columnReadFromDisk(tbl, columnName, col, err)) {
		free(col);
		goto exit;
	}

	// Fetch the results
	int resultBytes;
	int *results;
	int *indices;
	if (columnFetch(col, bmp, &resultBytes, &results, &indices, err)) {
		goto cleanupColumn;
	}

	// Return data to user if the haven't given a variable to store it in
	if (newVarName[0] == '\0') {

		int nResults = resultBytes / sizeof(int);
		printf("Got %d results from fetch\n", nResults);
		printf("[");
		for (int i = 0; i < nResults; i++) {
			printf("%d,", results[i]);
		}
		printf("]\n");


		if (resultBytes == 0) {
			results = NULL;
		}
		RESPONSE(res, "Fetch results:", resultBytes, results);

		free(indices);
	}

	// Otherwise, store data in variable
	else {

		// Add variable-results pair to varmap
		fetchResults *fResults = (fetchResults *) malloc(sizeof(fetchResults));
		if (fResults == NULL) {
			ERROR(err, E_NOMEM);
			goto cleanupColumn;
		}

		fResults->nColumnEntries = bitmapSize(bmp);
		fResults->nResultEntries = resultBytes / sizeof(int);
		fResults->results = results;
		fResults->indices = indices;

		if (varMapAddVar(newVarName, VAR_RESULTS, fResults, err)) {
			free(results);
			free(indices);
			free(fResults);
			goto cleanupColumn;
		}

		printf("Added variable '%s'\n", newVarName);
		RESPONSE_SUCCESS(res);
	}

	// Cleanup
	columnDestroy(col);
	
	return 0;

// cleanupResults:
// 	free(results);
// 	free(indices);
cleanupColumn:
	columnDestroy(col);
exit:
	return 1;
}
Esempio n. 12
0
std::vector<talk_response> gen_responses(talk_topic topic, game *g, npc *p)
{
    std::vector<talk_response> ret;

    switch (topic) {
    case TALK_MISSION_LIST:
        if (p->chatbin.missions.empty()) {
            RESPONSE(_("Oh, okay."));
            SUCCESS(TALK_NONE);
        } else if (p->chatbin.missions.size() == 1) {
            SELECT_MISS(_("Tell me about it."), 0);
            SUCCESS(TALK_MISSION_OFFER);
            RESPONSE(_("Never mind, I'm not interested."));
            SUCCESS(TALK_NONE);
        } else {
            for (int i = 0; i < p->chatbin.missions.size(); i++) {
                SELECT_MISS(g->find_mission_type( p->chatbin.missions[i] )->name, i);
                SUCCESS(TALK_MISSION_OFFER);
            }
            RESPONSE(_("Never mind, I'm not interested."));
            SUCCESS(TALK_NONE);
        }
        break;

    case TALK_MISSION_LIST_ASSIGNED:
        if (p->chatbin.missions_assigned.empty()) {
            RESPONSE(_("Never mind then."));
            SUCCESS(TALK_NONE);
        } else if (p->chatbin.missions_assigned.size() == 1) {
            SELECT_MISS(_("I have news."), 0);
            SUCCESS(TALK_MISSION_INQUIRE);
            RESPONSE(_("Never mind."));
            SUCCESS(TALK_NONE);
        } else {
            for (int i = 0; i < p->chatbin.missions_assigned.size(); i++) {
                SELECT_MISS(g->find_mission_type( p->chatbin.missions_assigned[i] )->name,
                            i);
                SUCCESS(TALK_MISSION_INQUIRE);
            }
            RESPONSE(_("Never mind."));
            SUCCESS(TALK_NONE);
        }
        break;

    case TALK_MISSION_DESCRIBE:
        RESPONSE(_("What's the matter?"));
        SUCCESS(TALK_MISSION_OFFER);
        RESPONSE(_("I don't care."));
        SUCCESS(TALK_MISSION_REJECTED);
        break;

    case TALK_MISSION_OFFER:
        RESPONSE(_("I'll do it!"));
        SUCCESS(TALK_MISSION_ACCEPTED);
        SUCCESS_ACTION(&talk_function::assign_mission);
        RESPONSE(_("Not interested."));
        SUCCESS(TALK_MISSION_REJECTED);
        break;

    case TALK_MISSION_ACCEPTED:
        RESPONSE(_("Not a problem."));
        SUCCESS(TALK_NONE);
        RESPONSE(_("Got any advice?"));
        SUCCESS(TALK_MISSION_ADVICE);
        RESPONSE(_("Can you share some equipment?"));
        SUCCESS(TALK_SHARE_EQUIPMENT);
        RESPONSE(_("I'll be back soon!"));
        SUCCESS(TALK_DONE);
        break;

    case TALK_MISSION_ADVICE:
        RESPONSE(_("Sounds good, thanks."));
        SUCCESS(TALK_NONE);
        RESPONSE(_("Sounds good.  Bye!"));
        SUCCESS(TALK_DONE);
        break;

    case TALK_MISSION_REJECTED:
        RESPONSE(_("I'm sorry."));
        SUCCESS(TALK_NONE);
        RESPONSE(_("Whatever.  Bye."));
        SUCCESS(TALK_DONE);
        break;

    case TALK_MISSION_INQUIRE: {
        int id = p->chatbin.missions_assigned[ p->chatbin.mission_selected ];
        if (g->mission_failed(id)) {
            RESPONSE(_("I'm sorry... I failed."));
            SUCCESS(TALK_MISSION_FAILURE);
            SUCCESS_OPINION(-1, 0, -1, 1, 0);
            RESPONSE(_("Not yet."));
            TRIAL(TALK_TRIAL_LIE, 10 + p->op_of_u.trust * 3);
            SUCCESS(TALK_NONE);
            FAILURE(TALK_MISSION_FAILURE);
            FAILURE_OPINION(-3, 0, -1, 2, 0);
        } else if (!g->mission_complete(id, p->id)) {
            mission_type *type = g->find_mission_type(id);
            RESPONSE(_("Not yet."));
            SUCCESS(TALK_NONE);
            if (type->goal == MGOAL_KILL_MONSTER) {
                RESPONSE(_("Yup, I killed it."));
                TRIAL(TALK_TRIAL_LIE, 10 + p->op_of_u.trust * 5);
                SUCCESS(TALK_MISSION_SUCCESS);
                SUCCESS_ACTION(&talk_function::mission_success);
                FAILURE(TALK_MISSION_SUCCESS_LIE);
                FAILURE_OPINION(-5, 0, -1, 5, 0);
                FAILURE_ACTION(&talk_function::mission_failure);
            }
            RESPONSE(_("No.  I'll get back to it, bye!"));
            SUCCESS(TALK_DONE);
        } else {
// TODO: Lie about mission
            mission_type *type = g->find_mission_type(id);
            switch (type->goal) {
            case MGOAL_FIND_ITEM:
            case MGOAL_FIND_ANY_ITEM:
                RESPONSE(_("Yup!  Here it is!"));
                SUCCESS(TALK_MISSION_SUCCESS);
                SUCCESS_ACTION(&talk_function::mission_success);
                break;
            case MGOAL_GO_TO:
            case MGOAL_FIND_NPC:
                RESPONSE(_("Here I am."));
                SUCCESS(TALK_MISSION_SUCCESS);
                SUCCESS_ACTION(&talk_function::mission_success);
                break;
            case MGOAL_FIND_MONSTER:
                RESPONSE(_("Here it is!"));
                SUCCESS(TALK_MISSION_SUCCESS);
                SUCCESS_ACTION(&talk_function::mission_success);
                break;
            case MGOAL_KILL_MONSTER:
                RESPONSE(_("I killed it."));
                SUCCESS(TALK_MISSION_SUCCESS);
                SUCCESS_ACTION(&talk_function::mission_success);
                break;
            default:
                RESPONSE(_("Mission success!  I don't know what else to say."));
                SUCCESS(TALK_MISSION_SUCCESS);
                SUCCESS_ACTION(&talk_function::mission_success);
                break;
            }
        }
    }
    break;

    case TALK_MISSION_SUCCESS:
        RESPONSE(_("Glad to help.  I need no payment."));
        SUCCESS(TALK_NONE);
        SUCCESS_OPINION(p->op_of_u.owed / (OWED_VAL * 4), -1,
                        p->op_of_u.owed / (OWED_VAL * 2), -1, 0 - p->op_of_u.owed);
        SUCCESS_ACTION(&talk_function::clear_mission);
        RESPONSE(_("How about payment?"));
        SUCCESS(TALK_MISSION_REWARD);
        SUCCESS_ACTION(&talk_function::mission_reward);
        RESPONSE(_("Glad to help.  I need no payment.  Bye!"));
        SUCCESS(TALK_DONE);
        SUCCESS_ACTION(&talk_function::clear_mission);
        SUCCESS_OPINION(p->op_of_u.owed / (OWED_VAL * 4), -1,
                        p->op_of_u.owed / (OWED_VAL * 2), -1, 0 - p->op_of_u.owed);
        break;

    case TALK_MISSION_SUCCESS_LIE:
        RESPONSE(_("Well, um, sorry."));
        SUCCESS(TALK_NONE);
        SUCCESS_ACTION(&talk_function::clear_mission);

    case TALK_MISSION_FAILURE:
        RESPONSE(_("I'm sorry.  I did what I could."));
        SUCCESS(TALK_NONE);
        break;

    case TALK_MISSION_REWARD:
        RESPONSE(_("Thank you."));
        SUCCESS(TALK_NONE);
        SUCCESS_ACTION(&talk_function::clear_mission);
        RESPONSE(_("Thanks, bye."));
        SUCCESS(TALK_DONE);
        SUCCESS_ACTION(&talk_function::clear_mission);
        break;

    case TALK_SHELTER:
        RESPONSE(_("What should we do now?"));
        SUCCESS(TALK_SHELTER_PLANS);
        RESPONSE(_("Can I do anything for you?"));
        SUCCESS(TALK_MISSION_LIST);
        if (!p->is_following()) {
            RESPONSE(_("Want to travel with me?"));
            SUCCESS(TALK_SUGGEST_FOLLOW);
        }
        if (p->chatbin.missions_assigned.size() == 1) {
            RESPONSE(_("About that job..."));
            SUCCESS(TALK_MISSION_INQUIRE);
        } else if (p->chatbin.missions_assigned.size() >= 2) {
            RESPONSE(_("About one of those jobs..."));
            SUCCESS(TALK_MISSION_LIST_ASSIGNED);
        }
        RESPONSE(_("I can't leave the shelter without equipment..."));
        SUCCESS(TALK_SHARE_EQUIPMENT);
        RESPONSE(_("Well, bye."));
        SUCCESS(TALK_DONE);
        break;

    case TALK_SHELTER_PLANS:
// TODO: Add "follow me"
        RESPONSE(_("Hmm, okay.  Bye."));
        SUCCESS(TALK_DONE);
        break;

    case TALK_SHARE_EQUIPMENT: {
        int score = p->op_of_u.trust + p->op_of_u.value * 3 +
                    p->personality.altruism * 2;
        int missions_value = p->assigned_missions_value(g);
        RESPONSE(_("Because I'm your friend!"));
        TRIAL(TALK_TRIAL_PERSUADE, 10 + score);
        SUCCESS(TALK_GIVE_EQUIPMENT);
        SUCCESS_ACTION(&talk_function::give_equipment);
        SUCCESS_OPINION(0, 0, -1, 0, score * 300);
        FAILURE(TALK_DENY_EQUIPMENT);
        FAILURE_OPINION(0, 0, -1, 0, 0);
        if (missions_value >= 1) {
            RESPONSE(_("Well, I am helping you out..."));
            TRIAL(TALK_TRIAL_PERSUADE, 10 + score + p->op_of_u.owed / OWED_VAL);
            SUCCESS(TALK_GIVE_EQUIPMENT);
            SUCCESS_ACTION(&talk_function::give_equipment);
            FAILURE(TALK_DENY_EQUIPMENT);
            FAILURE_OPINION(0, 0, -1, 0, 0);
        }
        RESPONSE(_("I'll give it back!"));
        TRIAL(TALK_TRIAL_LIE, score * 1.5);
        SUCCESS(TALK_GIVE_EQUIPMENT);
        SUCCESS_ACTION(&talk_function::give_equipment);
        SUCCESS_OPINION(0, 0, -1, 0, score * 300);
        FAILURE(TALK_DENY_EQUIPMENT);
        FAILURE_OPINION(0, -1, -1, 1, 0);
        RESPONSE(_("Give it to me, or else!"));
        TRIAL(TALK_TRIAL_INTIMIDATE, 40);
        SUCCESS(TALK_GIVE_EQUIPMENT);
        SUCCESS_ACTION(&talk_function::give_equipment);
        SUCCESS_OPINION(-3, 2, -2, 2,
                        (g->u.intimidation() + p->op_of_u.fear -
                         p->personality.bravery - p->intimidation()) * 500);
        FAILURE(TALK_DENY_EQUIPMENT);
        FAILURE_OPINION(-3, 1, -3, 5, 0);
        RESPONSE(_("Eh, never mind."));
        SUCCESS(TALK_NONE);
        RESPONSE(_("Never mind, I'll do without.  Bye."));
        SUCCESS(TALK_DONE);
    }
    break;

    case TALK_GIVE_EQUIPMENT:
        RESPONSE(_("Thank you!"));
        SUCCESS(TALK_NONE);
        RESPONSE(_("Thanks!  But can I have some more?"));
        SUCCESS(TALK_SHARE_EQUIPMENT);
        RESPONSE(_("Thanks, see you later!"));
        SUCCESS(TALK_DONE);
        break;

    case TALK_DENY_EQUIPMENT:
        RESPONSE(_("Okay, okay, sorry."));
        SUCCESS(TALK_NONE);
        RESPONSE(_("Seriously, give me more stuff!"));
        SUCCESS(TALK_SHARE_EQUIPMENT);
        RESPONSE(_("Okay, fine, bye."));
        SUCCESS(TALK_DONE);
        break;

    case TALK_SUGGEST_FOLLOW:
        if (p->has_disease(DI_INFECTION)) {
            RESPONSE(_("Understood.  I'll get those antibiotics."));
            SUCCESS(TALK_NONE);
        } else if (p->has_disease(DI_ASKED_TO_FOLLOW)) {
            RESPONSE(_("Right, right, I'll ask later."));
            SUCCESS(TALK_NONE);
        } else {
            int strength = 3 * p->op_of_u.fear + p->op_of_u.value + p->op_of_u.trust +
                           (10 - p->personality.bravery);
            int weakness = 3 * p->personality.altruism + p->personality.bravery -
                           p->op_of_u.fear + p->op_of_u.value;
            int friends = 2 * p->op_of_u.trust + 2 * p->op_of_u.value -
                          2 * p->op_of_u.anger + p->op_of_u.owed / 50;
            RESPONSE(_("I can keep you safe."));
            TRIAL(TALK_TRIAL_PERSUADE, strength * 2);
            SUCCESS(TALK_AGREE_FOLLOW);
            SUCCESS_ACTION(&talk_function::follow);
            SUCCESS_OPINION(1, 0, 1, 0, 0);
            FAILURE(TALK_DENY_FOLLOW);
            FAILURE_ACTION(&talk_function::deny_follow);
            FAILURE_OPINION(0, 0, -1, 1, 0);
            RESPONSE(_("You can keep me safe."));
            TRIAL(TALK_TRIAL_PERSUADE, weakness * 2);
            SUCCESS(TALK_AGREE_FOLLOW);
            SUCCESS_ACTION(&talk_function::follow);
            SUCCESS_OPINION(0, 0, -1, 0, 0);
            FAILURE(TALK_DENY_FOLLOW);
            FAILURE_ACTION(&talk_function::deny_follow);
            FAILURE_OPINION(0, -1, -1, 1, 0);
            RESPONSE(_("We're friends, aren't we?"));
            TRIAL(TALK_TRIAL_PERSUADE, friends * 1.5);
            SUCCESS(TALK_AGREE_FOLLOW);
            SUCCESS_ACTION(&talk_function::follow);
            SUCCESS_OPINION(2, 0, 0, -1, 0);
            FAILURE(TALK_DENY_FOLLOW);
            FAILURE_ACTION(&talk_function::deny_follow);
            FAILURE_OPINION(-1, -2, -1, 1, 0);
            RESPONSE(_("!I'll kill you if you don't."));
            TRIAL(TALK_TRIAL_INTIMIDATE, strength * 2);
            SUCCESS(TALK_AGREE_FOLLOW);
            SUCCESS_ACTION(&talk_function::follow);
            SUCCESS_OPINION(-4, 3, -1, 4, 0);
            FAILURE(TALK_DENY_FOLLOW);
            FAILURE_OPINION(-4, 0, -5, 10, 0);
        }
        break;

    case TALK_AGREE_FOLLOW:
        RESPONSE(_("Awesome!"));
        SUCCESS(TALK_NONE);
        RESPONSE(_("Okay, let's go!"));
        SUCCESS(TALK_DONE);
        break;

    case TALK_DENY_FOLLOW:
        RESPONSE(_("Oh, okay."));
        SUCCESS(TALK_NONE);
        break;

    case TALK_FRIEND:
        RESPONSE(_("Combat commands..."));
        SUCCESS(TALK_COMBAT_COMMANDS);
        RESPONSE(_("Can I do anything for you?"));
        SUCCESS(TALK_MISSION_LIST);
        RESPONSE(_("Let's trade items."));
        SUCCESS(TALK_NONE);
        SUCCESS_ACTION(&talk_function::start_trade);
        RESPONSE(_("Let's go."));
        SUCCESS(TALK_DONE);
        break;

    case TALK_COMBAT_COMMANDS: {
        RESPONSE(_("Change your engagement rules..."));
        SUCCESS(TALK_COMBAT_ENGAGEMENT);
        if (p->combat_rules.use_guns) {
            RESPONSE(_("Don't use guns anymore."));
            SUCCESS(TALK_COMBAT_COMMANDS);
            SUCCESS_ACTION(&talk_function::toggle_use_guns);
        } else {
            RESPONSE(_("You can use guns."));
            SUCCESS(TALK_COMBAT_COMMANDS);
            SUCCESS_ACTION(&talk_function::toggle_use_guns);
        }
        if (p->combat_rules.use_grenades) {
            RESPONSE(_("Don't use grenades anymore."));
            SUCCESS(TALK_COMBAT_COMMANDS);
            SUCCESS_ACTION(&talk_function::toggle_use_grenades);
        } else {
            RESPONSE(_("You can use grenades."));
            SUCCESS(TALK_COMBAT_COMMANDS);
            SUCCESS_ACTION(&talk_function::toggle_use_grenades);
        }
        RESPONSE(_("Never mind."));
        SUCCESS(TALK_NONE);
    }
    break;

    case TALK_COMBAT_ENGAGEMENT: {
        if (p->combat_rules.engagement != ENGAGE_NONE) {
            RESPONSE(_("Don't fight unless your life depends on it."));
            SUCCESS(TALK_NONE);
            SUCCESS_ACTION(&talk_function::set_engagement_none);
        }
        if (p->combat_rules.engagement != ENGAGE_CLOSE) {
            RESPONSE(_("Attack enemies that get too close."));
            SUCCESS(TALK_NONE);
            SUCCESS_ACTION(&talk_function::set_engagement_close);
        }
        if (p->combat_rules.engagement != ENGAGE_WEAK) {
            RESPONSE(_("Attack enemies that you can kill easily."));
            SUCCESS(TALK_NONE);
            SUCCESS_ACTION(&talk_function::set_engagement_weak);
        }
        if (p->combat_rules.engagement != ENGAGE_HIT) {
            RESPONSE(_("Attack only enemies that I attack first."));
            SUCCESS(TALK_NONE);
            SUCCESS_ACTION(&talk_function::set_engagement_hit);
        }
        if (p->combat_rules.engagement != ENGAGE_ALL) {
            RESPONSE(_("Attack anything you want."));
            SUCCESS(TALK_NONE);
            SUCCESS_ACTION(&talk_function::set_engagement_all);
        }
        RESPONSE(_("Never mind."));
        SUCCESS(TALK_NONE);
    }
    break;

    case TALK_SIZE_UP:
    case TALK_LOOK_AT:
    case TALK_OPINION:
        RESPONSE(_("Okay."));
        SUCCESS(TALK_NONE);
        break;
    }

    if (ret.empty()) {
        RESPONSE(_("Bye."));
        SUCCESS(TALK_DONE);
    }

    return ret;
}
Esempio n. 13
0
uchar usbFunctionWrite(uchar *data, uchar len)
{
    uchar i;
    uchar counter;
    uint8_t temp;

    if(len > bytesRemaining)                // if this is the last incomplete chunk
        len = bytesRemaining;               // limit to the amount we can store
    bytesRemaining -= len;
    for(i = 0; i < len; i++)
        buffer[currentPosition++] = data[i];

    if(bytesRemaining == 0) {
        switch(buffer[0]) {
        case CMD_READ_EEDATA:
            RESPONSE(read_eedata)->addr = REQUEST(read_eedata)->addr;
            RESPONSE(read_eedata)->value = eeprom_read_byte((uint8_t*)(uint16_t)REQUEST(read_eedata)->addr);

            buffer_len = sizeof(usb_response_read_eedata_t);
            break;
        case CMD_WRITE_EEDATA:
            RESPONSE(write_eedata)->result = 1;
            eeprom_write_byte((uint8_t*)(uint16_t)REQUEST(write_eedata)->addr, REQUEST(write_eedata)->value);
            buffer_len = sizeof(usb_response_write_eedata_t);
            break;
        case CMD_READ_VERSION:
            RESPONSE(read_version)->version_major = FIRMWARE_MAJOR;
            RESPONSE(read_version)->version_minor = FIRMWARE_MINOR;
            buffer_len = sizeof(usb_response_read_version_t);;
            break;
        case CMD_BOARD_TYPE:
            RESPONSE(board_type)->board_type = BOARD_TYPE_I2C;
            temp = eeprom_read_byte((uint8_t*)1);
            if((temp == 0) || (temp == 255))
                temp = 9;

            RESPONSE(board_type)->serial = temp;  // read from EEPROM address 1

#ifdef __AVR_ATmega88__
            RESPONSE(board_type)->proc_type = PROCESSOR_TYPE_A88;
#elif defined __AVR_ATmega168__
            RESPONSE(board_type)->proc_type = PROCESSOR_TYPE_A168;
#else
#warn "UNKNOWN PROC TYPE!"
            RESPONSE(board_type)->proc_type = PROCESSOR_TYPE_UNKNOWN;
#endif

            RESPONSE(board_type)->mhz = F_CPU/1000000;
            buffer_len = sizeof(usb_response_board_type_t);
            break;
        case CMD_BD_POWER_STATE:
            buffer_len = 0;
            break;
        case CMD_BD_POWER_INFO:
            buffer_len = 0;
            break;
        case CMD_I2C_READ:
            counter = REQUEST(i2c_read)->read_len;
            RESPONSE(i2c_read)->result = counter;
            buffer_len = REQUEST(i2c_read)->read_len + 1;

            if((i2cMasterSendNI(REQUEST(i2c_read)->device << 1, 1, &(REQUEST(i2c_read)->address)) == I2C_OK) &&
               (i2cMasterReceiveNI(REQUEST(i2c_read)->device << 1, counter, (u08*)&(RESPONSE(i2c_read)->data)) == I2C_OK)) {
                RESPONSE(i2c_read)->result = 1;
            } else {
                RESPONSE(i2c_read)->result = 0;
                *RESPONSE(i2c_read)->data = I2C_E_NODEV;
            }

            break;

        case CMD_I2C_WRITE:
            buffer_len = sizeof(usb_response_i2c_write_t);

            counter = REQUEST(i2c_write)->len - 2;
            RESPONSE(i2c_write)->result = counter;

            if(i2cMasterSendNI(REQUEST(i2c_write)->device << 1, counter + 1, &(REQUEST(i2c_write)->address)) == I2C_OK) {
                RESPONSE(i2c_write)->result = 1;
            } else {
                RESPONSE(i2c_write)->result = 0;
                RESPONSE(i2c_write)->extended_result = I2C_E_NODEV;
            }
            break;

        case CMD_RESET:
            break;
        }
    }

    return bytesRemaining == 0;             // return 1 if we have all data
}
Esempio n. 14
0
#define EXCHANGE(a,b) {a, sizeof(a) - 1, b, sizeof(b) - 1}
#define RESPONSE(b) {"", 0, b, sizeof(b) - 1}
#define FAST_RESPONSE(b) {NULL, -1, b, sizeof(b) - 1}
#define FAST_SEND(b) {(const char *) 1, -2, b, sizeof(b) - 1}

static const struct command_response_s fax_send_test_seq[] =
{
    EXCHANGE("ATE0\r", "ATE0\r\r\nOK\r\n"),
    EXCHANGE("AT+FCLASS=1\r", "\r\nOK\r\n"),
    EXCHANGE("ATD123456789\r", "\r\nCONNECT\r\n"),
    //<NSF frame>         AT+FRH=3 is implied when dialing in the AT+FCLASS=1 state
    //RESPONSE("\xFF\x03\x10\x03"),
    //RESPONSE("\r\nOK\r\n"),
    //EXCHANGE("AT+FRH=3\r", "\r\nCONNECT\r\n"),
    //<CSI frame data>
    RESPONSE("\xFF\x03\x40\x31\x31\x31\x31\x31\x31\x31\x31\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x1e\x46\x10\x03"),
    RESPONSE("\r\nOK\r\n"),
    EXCHANGE("AT+FRH=3\r", "\r\nCONNECT\r\n"),
    //<DIS frame data>
    RESPONSE("\xFF\x13\x80\x00\xEE\xF8\x80\x80\x89\x80\x80\x80\x18\x18\xB9\x10\x03"),
    RESPONSE("\r\nOK\r\n"),
    //EXCHANGE("AT+FRH=3\r", "\r\nNO CARRIER\r\n"),
    EXCHANGE("AT+FTH=3\r", "\r\nCONNECT\r\n"),
    //<TSI frame data>
    EXCHANGE("\xFF\x03\x43\x32\x32\x32\x32\x32\x32\x32\x32\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x10\x03", "\r\nCONNECT\r\n"),
    //<DCS frame data>
    EXCHANGE("\xFF\x13\x83\x01\xC6\x80\x80\x80\x80\x01\xFD\x13\x10\x03", "\r\nOK\r\n"),
    //Do a wait for timed silence at this point, or there won't be one in the tests
    EXCHANGE("AT+FRS=7\r", "\r\nOK\r\n"),
    //EXCHANGE("AT+FTS=8;+FTM=96\r", "\r\nCONNECT\r\n"),
    EXCHANGE("AT+FTS=8\r", "\r\nOK\r\n"),