SVN revision 1084

master
Ales Povalac 2019-05-21 10:18:24 +02:00
rodzic f9fb9b3952
commit 9e8397cb70
2 zmienionych plików z 188 dodań i 0 usunięć

187
PHP/psat2tlm.php 100644
Wyświetl plik

@ -0,0 +1,187 @@
<html><body>
<h2>PSAT-2 TLM decoder</h2>
<?php
if (isset($_GET['tlm'])) $tlm = $_GET['tlm'];
else $tlm = "";
?>
<form name="form" action="" method="get">
<input type="text" name="tlm" id="tlm" value="<?php echo $tlm; ?>" size=80>
<input type="submit">
</form>
<br>
<?php
function getval($inp)
{
$value = 0;
$hi5 = ord($inp[0]);
$lo5 = ord($inp[1]);
if ($hi5 >= ord('a') && $hi5 <= ord('z')) $value += $hi5 - ord('a');
else if ($hi5 >= ord('A') && $hi5 <= ord('F')) $value += $hi5 - ord('A') + 26;
$value <<= 5;
if ($lo5 >= ord('a') && $lo5 <= ord('z')) $value += $lo5 - ord('a');
else if ($lo5 >= ord('A') && $lo5 <= ord('F')) $value += $lo5 - ord('A') + 26;
return $value;
}
function parse_tlm_psk($tlm)
{
// PSAT-2 C apng eFaaijtkpokoaB aaaa A aokF eEadjluappjxay
echo "---- Current frame ----\n\n";
$tok = strtok($tlm, " ");
echo "Mode: " . $tok . "\n";
echo "\n";
$tok = strtok(" ");
$val = (getval(substr($tok, 0, 2)) << 10) + getval(substr($tok, 2, 2));
echo "ClockTimer = " . $val . " ticks = " . floor($val*20/3600) . gmdate(":i:s", $val*20) . "\n";
echo "\n";
$tok = strtok(" ");
echo "RebootCnt = " . getval(substr($tok, 0, 2)) . " times\n";
echo "val_PSK = " . getval(substr($tok, 2, 2)) . " %\n";
echo "val_AGC = " . getval(substr($tok, 4, 2)) . "\n";
echo "val_Vbat = " . getval(substr($tok, 6, 2)) . " = " . round(getval(substr($tok, 6, 2)) * 3300 * 147 / 47 / 1024 / 1000, 3) . " V\n";
echo "val_5V = " . getval(substr($tok, 8, 2)) . " = " . round(getval(substr($tok, 8, 2)) * 2500 * 409 / 100 / 1024 / 1000, 3) . " V\n";
echo "val_Ic = " . getval(substr($tok, 10, 2)) . " mA\n";
echo "val_T_RX = " . getval(substr($tok, 12, 2)) . " deg C\n";
echo "\n";
$tok = strtok(" ");
$val = getval(substr($tok, 0, 2));
echo "status.PeriodNr = " . (($val >> 5) & 0x1F) . "\n";
echo "status.PeriodsSSTV_RX = " . (($val >> 0) & 0x1F) . "\n";
$val = getval(substr($tok, 0, 2));
echo "status.PeriodsRX = " . (($val >> 5) & 0x1F) . "\n";
echo "status.PeriodsTX = " . (($val >> 0) & 0x1F) . "\n";
echo "\n\n";
echo "---- History frame ----\n\n";
$tok = strtok(" ");
echo "Mode: " . $tok . "\n";
echo "\n";
$tok = strtok(" ");
$val = (getval(substr($tok, 0, 2)) << 10) + getval(substr($tok, 2, 2));
echo "ClockTimer = " . $val . " ticks = " . floor($val*20/3600) . gmdate(":i:s", $val*20) . "\n";
echo "\n";
$tok = strtok(" ");
echo "RebootCnt = " . getval(substr($tok, 0, 2)) . " times\n";
echo "val_PSK = " . getval(substr($tok, 2, 2)) . " %\n";
echo "val_AGC = " . getval(substr($tok, 4, 2)) . "\n";
echo "val_Vbat = " . getval(substr($tok, 6, 2)) . " = " . round(getval(substr($tok, 6, 2)) * 3300 * 147 / 47 / 1024 / 1000, 3) . " V\n";
echo "val_5V = " . getval(substr($tok, 8, 2)) . " = " . round(getval(substr($tok, 8, 2)) * 2500 * 409 / 100 / 1024 / 1000, 3) . " V\n";
echo "val_Ic = " . getval(substr($tok, 10, 2)) . " mA\n";
echo "val_T_RX = " . getval(substr($tok, 12, 2)) . " deg C\n";
echo "\n";
}
function legend_psk()
{
?>
<h3>PSK footnotes</h3>
<b>ClockTimer</b> - frame counter, incremented every 20sec, persistent on reboot
<?php
}
function parse_tlm_sstv($tlm)
{
// PSAT-2 S ashd aDbiaaaa qralaitkboFxaa
echo "---- Current frame ----\n\n";
$tok = strtok($tlm, " ");
echo "Mode: " . $tok . "\n";
echo "\n";
$tok = strtok(" ");
$val = (getval(substr($tok, 0, 2)) << 10) + getval(substr($tok, 2, 2));
echo "Tick = " . $val . " sec = " . floor($val/3600) . gmdate(":i:s", $val) . "\n";
echo "\n";
$tok = strtok(" ");
echo "ADC_Temperature = " . getval(substr($tok, 0, 2)) . " deg C\n";
$val = getval(substr($tok, 2, 2));
echo "ADC_Light = " . (($val%100) * pow(10, floor($val/100))) . " lux\n";
echo "Plan_Auth = " . getval(substr($tok, 4, 2)) . "\n";
echo "Plan_*_Count = " . getval(substr($tok, 6, 2)) . "\n";
echo "\n";
$tok = strtok(" ");
echo "cnt_Boot = " . getval(substr($tok, 0, 2)) . " times\n";
echo "cnt_*_Error = " . getval(substr($tok, 2, 2)) . " times\n";
echo "cnt_AudioStart = " . getval(substr($tok, 4, 2)) . " times\n";
echo "cnt_CamSnapshot = " . getval(substr($tok, 6, 2)) . " times\n";
echo "cnt_CmdHandled = " . getval(substr($tok, 8, 2)) . " times\n";
echo "cnt_CmdIgnored = " . getval(substr($tok, 10, 2)) . " times\n";
echo "cnt_AuthError = " . getval(substr($tok, 12, 2)) . " times\n";
echo "\n";
}
function legend_sstv()
{
?>
<h3>SSTV footnotes</h3>
<b>Tick</b> - tick counter, i.e. number of seconds elapsed from reboot, not persistent on reboot<br>
<b>Plan_Auth</b> - authorization time counter; counts down the number of seconds, for which is the authorization valid (zero if not authorized)<br>
<b>Plan_*_Count</b> - number of planned events (sum of sstv_live, sstv_save, psk and cw)<br>
<b>cnt_Boot</b> - count of BOOT<br>
<b>cnt_*_Error</b> - sum of HARDFAULT, FLASH_INIT_ERROR, FLASH_TIMEOUT, CAM_I2C_ERROR, CAM_DCMI_ERROR, CAM_SIZE_ERROR, JPEG_ERROR and PSK_TIMEOUT<br>
<b>cnt_AudioStart</b> - count of AUDIO_START (start of SSTV/PSK/CW transmission)<br>
<b>cnt_CamSnapshot</b> - count of CAM_SNAPSHOT (frame transferred via DCMI)<br>
<b>cnt_CmdHandled</b> - sum of CMD_HANDLED and PSK_UPLINK (accepted command from APRS or CW)<br>
<b>cnt_CmdIgnored</b> - count of CMD_IGNORED (rejected data from APRS)<br>
<b>cnt_AuthError</b> - count of AUTH_ERROR (access to restricted command without autorization)<br>
<?php
}
if ($tlm != "") {
if (strpos($tlm, "T-2 ") === false) {
echo "No PSAT-2 header";
} else {
$tlm2 = substr($tlm, strpos($tlm, " ")+1, 255);
if ($tlm2[0] == 'A' || $tlm2[0] == 'B' || $tlm2[0] == 'C' || $tlm2[0] == 'D') {
echo "<h3>PSK TLM</h3>\n";
echo "<pre>\n";
parse_tlm_psk($tlm2);
echo "</pre>";
legend_psk();
}
else if ($tlm2[0] == 'S') {
echo "<h3>SSTV TLM</h3>\n";
echo "<pre>\n";
parse_tlm_sstv($tlm2);
echo "</pre>";
legend_sstv();
}
else {
echo "Unknown TLM type";
}
}
}
?>
</body></html>

Wyświetl plik

@ -164,6 +164,7 @@ void printf_debug(const char *format, ...)
}
/* FIXME: This is not always called - bug in HAL? Better to test DMAR every time => call comm_init() periodically */
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
/* restart DMA ring buffer RX after any error */