Squirrel Language: заставить функцию возвращать переменную из вложенных подпрограмм «IF» - PullRequest
0 голосов
/ 15 апреля 2019

В коде для стороны устройства BLE112 на GitHub есть эта функция, которую я хотел бы немного изменить, чтобы получить только переменную «маяк» (таблицу) в качестве окончательного значения, сообщаемого изфункционировать таким образом, чтобы я мог сохранить такой результат в глобальной переменной (скажем, myBeacons <- {}).Как я могу это сделать?Где я могу назначить оператор «return» для достижения этой цели? </p>

Я очень новичок в Squirrel и не знаю, какой будет правильный подход, я попытался объявить myBeacons вне функцииа затем использовал myBeacons = маяк.Но это мне не сильно помогло.

//..............................................................................
function discover_mode(active = false) {

    // Setup the scanning in passive mode
    ble112.gap_set_scan_parameters(75, 50, active ? 1 : 0);

    // start scanning for peripherals
    ble112.gap_discover(BLE_GAP_DISCOVER_MODE.GAP_DISCOVER_GENERIC);

    // Handle incoming scan responses here
    ble112.on("gap_scan_response", function(event) {

        // Parse the advertising packet
        foreach (advdata in event.payload.data) {
            if (advdata.type == BLE_GAP_AD_TYPES.GAP_AD_TYPE_MANUFACTURER_DATA) {
                // This is an ibeacon
                if (advdata.data.slice(0, 4) == "\x4c\x00\x02\x15") {
                    // This is an iBeacon
                    local uuid = advdata.data.slice(4, 20);
                    uuid = parse_uuid(uuid);
                    if (uuid in uuids) {

                        local major = advdata.data.slice(20, 22);
                        major = (major[0] << 8) + (major[1]);

                        local minor = advdata.data.slice(22, 24);
                        minor = (minor[0] << 8) + (minor[1]);

                        local power = advdata.data[24];

                        local beaconid = format("%s:%d:%d", uuid, major, minor)
                        if (!(beaconid in scans)) {
                            scans[beaconid] <- {};
                            scans[beaconid].rssi <- {};
                            scans[beaconid].rssi[address] <- {};
                            scans[beaconid].rssi[address].time <- time();
                            scans[beaconid].rssi[address].samples <- 0;
                            scans[beaconid].rssi[address].rssi <- 0.0;
                        }

                        local beacon = scans[beaconid];
                        beacon.uuid <- uuid;
                        beacon.major <- major;
                        beacon.minor <- minor;
                        beacon.time <- time();
                        beacon.rssi[address].samples++;
                        beacon.rssi[address].rssi += event.payload.rssi;
                        beacon.rssi[address].rssi /= 2;
                    }
                }
            }
        }
    })
}

Заранее спасибо!

...