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); } }
/********** 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); }
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; }