Exemplo n.º 1
0
static void update_state_beacon(void)
{
    dfu_packet_t* p_beacon = NULL;
    uint16_t beacon_len = 0;
    switch (m_transaction.type)
    {
        case DFU_TYPE_APP:
            p_beacon = beacon_set(BEACON_TYPE_READY_APP);
            beacon_len = DFU_PACKET_LEN_STATE_APP;
            break;

        case DFU_TYPE_SD:
            p_beacon = beacon_set(BEACON_TYPE_READY_SD);
            beacon_len = DFU_PACKET_LEN_STATE_SD;
            break;

        case DFU_TYPE_BOOTLOADER:
            p_beacon = beacon_set(BEACON_TYPE_READY_BL);
            beacon_len = DFU_PACKET_LEN_STATE_BL;
            break;
        default:
            APP_ERROR_CHECK(NRF_ERROR_NOT_SUPPORTED);
    }

    if (p_beacon)
    {
        serial_tx(p_beacon, beacon_len);
    }
}
Exemplo n.º 2
0
/********** STATE MACHINE ENTRY POINTS ***********/
static void start_find_fwid(void)
{
    dfu_packet_t* p_fwid = beacon_set(BEACON_TYPE_FWID);
    set_timeout(STATE_TIMEOUT_FIND_FWID);
    m_state = BL_STATE_FIND_FWID;
    memset(&m_transaction, 0, sizeof(transaction_t));

    serial_tx(p_fwid, DFU_PACKET_LEN_FWID);
}
Exemplo n.º 3
0
Arquivo: beacon.c Projeto: oh2mqk/aprx
int beacon_config(struct configfile *cf)
{
	char *name, *param1;
	char *str = cf->buf;
	int   beaconmode = 0;
	int   has_fault  = 0;


        struct beaconset *bset = calloc(1, sizeof(*bset));
        bset->beacon_cycle_size = 20.0*60.0; // 20 minutes is the default

	while (readconfigline(cf) != NULL) {
		if (configline_is_comment(cf))
			continue;	/* Comment line, or empty line */

		// It can be severely indented...
		str = config_SKIPSPACE(cf->buf);

		name = str;
		str = config_SKIPTEXT(str, NULL);
		str = config_SKIPSPACE(str);
		config_STRLOWER(name);

		param1 = str;
		str = config_SKIPTEXT(str, NULL);
		str = config_SKIPSPACE(str);

		if (strcmp(name, "</beacon>") == 0)
		  break;

		if (strcmp(name, "cycle-size") == 0) {
		  int v;
		  if (config_parse_interval(param1, &v)) {
		    // Error
		    has_fault = 1;
		    continue;
		  }
		  bset->beacon_cycle_size = (float)v;
		  if (debug)
		    printf("Beacon cycle size: %.2f\n",
			   bset->beacon_cycle_size/60.0);
		  continue;
		}

		if (strcmp(name, "beacon") == 0) {
		  beacon_set(cf, param1, str, beaconmode, bset);

		} else if (strcmp(name, "beaconmode") == 0) {
		  if (strcasecmp(param1, "both") == 0) {
		    beaconmode = 0;

		  } else if (strcasecmp(param1,"radio") == 0) {
		    beaconmode = 1;

		  } else if (strcasecmp(param1,"aprsis") == 0) {
		    beaconmode = -1;

		  } else {
		    printf("%s:%d ERROR: Unknown beaconmode parameter keyword: '%s'\n",
			   cf->name, cf->linenum, param1);
		    has_fault = 1;
		  }

		} else {
		  printf("%s:%d ERROR: Unknown <beacon> block config keyword: '%s'\n",
			 cf->name, cf->linenum, name);
		  has_fault = 1;
		  continue;
		}
	}
        if (has_fault) {
          // discard it..
          free_beaconset(bset);
        } else {
          // save it..
          ++bsets_count;
          bsets = realloc( bsets,sizeof(*bsets)*bsets_count );
          bsets[bsets_count-1] = bset;

          if (debug > 0) {
            printf("<beacon> set %d defined with %d entries\n",
                   bsets_count, bset->beacon_msgs_count);
          }
        }

	return has_fault;
}