Beispiel #1
0
static int
get_mode (void)
{
    GError *error = NULL;
    char *standard_output;
    char *standard_error;
    int exit_status;
    int retval;

    if (!bm.has_bm) {
        return NORMAL_MODE;
    }

    if (g_spawn_command_line_sync ("/usr/sbin/boot-mode --status",
                                   &standard_output,
                                   &standard_error,
                                   &exit_status,
                                   &error)) {
        retval = STARTSWITH (standard_output, "update") ? UPDATE_MODE : NORMAL_MODE;
    }
    g_free (standard_output);
    g_free (standard_error);
    if (error) {
        g_error_free (error);
    }
    return retval;
}
Beispiel #2
0
static void gpsd_read_gpsd(struct globals *globals)
{
	ssize_t ret;
	size_t cnt;
	bool eol = false;
	char buf[4096];
	const size_t tpv_size = sizeof(globals->buf) -
				sizeof(*globals->push) -
				sizeof(struct alfred_data) -
				sizeof(*globals->gpsd_data);

	cnt = 0;
	do {
		ret = read(globals->gpsdata.gps_fd, &buf[cnt], 1);
		if (ret != 1) {
			gps_close(&globals->gpsdata);
			globals->gpsdata.gps_fd = -1;
			return;
		}

		switch (buf[cnt]) {
		case '\r':
			cnt--;
			break;
		case '\n':
			eol = true;
			buf[cnt] = '\0';
			break;
		}
	} while (cnt++ < sizeof(buf) - 1 && !eol);

	if (!eol) {
		gps_close(&globals->gpsdata);
		globals->gpsdata.gps_fd = -1;
		return;
	}

#define STARTSWITH(str, prefix)	strncmp(str, prefix, sizeof(prefix)-1)==0
	if (STARTSWITH(buf, "{\"class\":\"TPV\"")) {
		strncpy(globals->gpsd_data->tpv, buf, tpv_size);
		globals->gpsd_data->tpv[tpv_size - 1] = '\0';

		globals->gpsd_data->tpv_len =
			htonl(strlen(globals->gpsd_data->tpv) + 1);
	}
}
Beispiel #3
0
int main(int argc, char** argv)
{
	logLevel = 2;

	int atFile = 0;
	unsigned addr = 0;
	unsigned lastAddr = 0xffff;
	bool debugSymbols = false;
	char c;
	DByteOrder byteOrder = DBO_LittleEndian;

	const char* files[2] = {NULL, NULL};
	const char* usage = "usage: %s (-vX | -h | -sX | -d | -eX) [dasm file] [out binary]";

	for(int i = 1; i < argc; i++){
		char* v = argv[i];
		if(STARTSWITH(v, '-')){
			if(!strcmp(v, "-h")){
				LogI(usage, argv[0]);
				LogI(" ");
				LogI("Available flags:");
				LogI("  -vX   set log level, where X is [0-5] - default: 2");
				LogI("  -sX   set assembly start address [0-FFFF] - default 0");
				LogI("  -h    show this help message");
				LogI("  -d    generate debug symbols");
				LogI("  -eX   set endianness of output, where X is [l | b] default: l");
				return 0;
			}
			else if(sscanf(v, "-v%d", &logLevel) == 1){}
			else if(sscanf(v, "-s%x", &addr) == 1){}
			else if(sscanf(v, "-e%1c", &c) == 1){ byteOrder = c == 'l' ? DBO_LittleEndian : DBO_BigEndian; }
			else if(!strcmp(v, "-d")){ debugSymbols = true; }
			else{
				LogF("No such flag: %s", v);
				return 1;
			}
		}else{
			LAssert(atFile < 2, "Please specify exactly one input file and one output file");
			files[atFile++] = v;
		}
	}

	LAssert(argc >= 3 && files[0] && files[1], usage, argv[0]);
	LAssert(addr <= 0xffff, "Assembly start address must be within range 0 - 0xFFFF (not %x)", addr);
	
	// Allocate 64 kword RAM file
	uint16_t* ram = calloc(1, sizeof(uint16_t) * 0x10000);

	Dasm* d = Dasm_Create();
	
	if(debugSymbols){
		char tmp[4096];
		sprintf(tmp, "%s.dbg", files[1]);
		d->debugFile = fopen(tmp, "w");
		LogV("Opening debug file: %s", tmp);
		LAssert(d->debugFile, "could not open file: %s", tmp);
	}

	uint16_t len = Dasm_Assemble(d, files[0], ram, addr, lastAddr);

	if(d->debugFile) fclose(d->debugFile);

	Dasm_Destroy(&d);

	if(logLevel == 0) DumpRam(ram, len - 1);

	LogV("Writing to: %s", files[1]);
	WriteRam(ram, files[1], len - 1, byteOrder);

	free(ram);
	return 0;
}
Beispiel #4
0
int main(int argc, char** argv)
{
	logLevel = 2;

	int atFile = 0;
	int romSize = 1024 * 1024 * 16;
	unsigned addr = 0;
	bool debugSymbols = false;

	const char* files[2] = {NULL, NULL};
	const char* usage = "usage: %s (-vX | -h | -sX | -d | -eX) [hasm file] [out binary]";

	for(int i = 1; i < argc; i++){
		char* v = argv[i];
		if(STARTSWITH(v, '-')){
			if(!strcmp(v, "-h")){
				LogI(usage, argv[0]);
				LogI(" ");
				LogI("Available flags:");
				LogI("  -vX   set log level, where X is [0-5] - default: 2");
				LogI("  -sX   set assembly start address [0-FFFF] - default 0");
				LogI("  -h    show this help message");
				LogI("  -d    generate debug symbols");
				LogI("  -t    unit tests");
				return 0;
			}
			else if(sscanf(v, "-v%d", &logLevel) == 1){}
			else if(sscanf(v, "-s%x", &addr) == 1){}
			else if(!strcmp(v, "-d")){ debugSymbols = true; }
			else if(!strcmp(v, "-t")){ return Tests(argc, argv); }
			else{
				LogF("No such flag: %s", v);
				return 1;
			}
		}else{
			LAssert(atFile < 2, "Please specify exactly one input file and one output file");
			files[atFile++] = v;
		}
	}

	LAssert(argc >= 3 && files[0] && files[1], usage, argv[0]);
	
	// Allocate 16 MB ROM
	uint8_t* ram = calloc(1, romSize);

	Hasm* d = Hasm_Create();
	
	if(debugSymbols){
		char tmp[4096];
		sprintf(tmp, "%s.dbg", files[1]);
		d->debugFile = fopen(tmp, "w");
		LogV("Opening debug file: %s", tmp);
		LAssert(d->debugFile, "could not open file: %s", tmp);
	}

	uint32_t len = Hasm_Assemble(d, files[0], ram, addr, romSize - 1);

	if(d->debugFile) fclose(d->debugFile);

	Hasm_Destroy(&d);

	if(logLevel == 0 && len) DumpRam(ram, len - 1);

	LogV("Writing to: %s", files[1]);
	WriteFile(ram, len ? len - 1 : 0, files[1]);

	LAssertWarn(len, "produced empty file");

	free(ram);
	return 0;
}