Пользовательский API на языке C++
В этом разделе представлен набор пользовательских функций, реализованных в библиотеке libschsat.h.
Функции
Датчик угловой скорости
Получить показания ДУС.
SchSatApi int gyro_request_raw (uint16_t num, float *pRAW_dataX, float *pRAW_dataY, float *pRAW_dataZ)
Задать смещение нуля ДУС.
SchSatApi int gyro_set_offset (uint16_t num, float offset_X, float offset_Y, float offset_Z)
Отправить показания ДУС по УКВ.
SchSatApi int gyro_push_data_uhf ()
Магнитометр
Получить показания магнитометра.
SchSatApi int magnetometer_request_raw (uint16_t num, float *pRAW_dataX, float *pRAW_dataY, float *pRAW_dataZ)
Задать смещение нуля магнитометра.
SchSatApi int magnetometer_set_offset(uint16_t num,int16_t offset_X,int16_t offset_Y,int16_t offset_Z);
Отправить показания магнитометра по УКВ.
SchSatApi int magnetometer_push_data_uhf ()
Установить период телеметрии магнитометра и датчика угловых скоростей.
SchSatApi int magnetometer_gyro_set_telemetry_period (const uint16_t num, const uint16_t period)
Маховик
Получить скорость вращения маховика.
SchSatApi int motor_request_speed (uint16_t num, float *pRPM)
Задать скорость вращения маховика.
SchSatApi int motor_set_speed (uint16_t num, float RPM)
Установить период телеметрии маховика.
SchSatApi int motor_set_telemetry_period (const uint16_t num, const uint16_t period)
Солнечные датчики
Получить показания cолнечного датчика.
SchSatApi int sunsensor_get_raw (uint16_t num, int32_t *angle)
Отправить показания солнечного датчика по УКВ.
SchSatApi int sunsensor_push_data_uhf (uint16_t num)
Установить период телеметрии cолнечного датчика.
SchSatApi int sunsensor_set_telemetry_period (const uint16_t num, const uint16_t period)
UniCAN
Получить сообщение UniCAN.
SchSatApi int recieve_unican_message (const uint16_t address_from, const uint16_t msg_id, uint8_t *data, const uint16_t msg_size, const uint16_t timeout)
Отправить сообщение UniCAN.
SchSatApi int send_unican_message (const uint16_t address_to, const uint16_t msg_id, uint8_t *data, const uint16_t msg_size)
Камера
Передать снимок на приёмную станцию.
SchSatApi int transmitter_transmit_photo (uint16_t num)
Сделать снимок бортовой камерой.
SchSatApi int camera_take_photo (uint16_t num)
Внимание! Для корректной работы функций файл с пользовательской программой должен содержать выше пользовательского кода строку: #include «libschsat.h».
Подробное описание функций
Получить показания ДУС.
SchSatApi int gyro_request_raw (uint16_t num, float * pRAW_dataX, float * pRAW_dataY, float * pRAW_dataZ)
Функция получает актуальные данные от заданного датчика угловых скоростей и записывает в переменные pRAW_dataX, pRAW_dataY, pRAW_dataZ.
Значения представлены в град/сек.
Аргументы
[in] num идентификатор устройства
[out] pRAW_dataX Угловая скорость вокруг оси X, град/сек
[out] pRAW_dataY Угловая скорость вокруг оси Y, град/сек
[out] pRAW_dataZ Угловая скорость вокруг оси Z, град/сек
float gyro_x = 0, gyro_y = 0, gyro_z = 0;
if (gyro_request_raw(0, &gyro_x, &gyro_y, &gyro_z) != 0) {
puts ("Gyro data ERROR"); 4 }
printf ("Angular rate: X %f, Y %f, Z %f\n", gyro_x, gyro_y, gyro_z);
Задать смещение нуля ДУС.
SchSatApi int gyro_set_offset ( uint16_t num, float offset_X, float offset_Y, float offset_Z)
Функция задаёт постоянное смещение показателей ДУС совмещая физический и логический ноль. Значения аргументов в единицах ДУС (град/сек).
Аргументы
[in] num идентификатор устройства
[in] offset_X Смещение нуля скорости вокруг оси X, град/сек
[in] offset_Y Смещение нуля скорости вокруг оси Y, град/сек
[in] offset_Z Смещение нуля скорости вокруг оси Z, град/сек
Отправить показания ДУС по УКВ.
SchSatApi int gyro_push_data_uhf ( )
Функция отправляет актуальные данные от датчика угловых скоростей по УКВ связи. Значения представлены в град/сек.
Получить показания магнитометра.
SchSatApi int magnetometer_request_raw ( uint16_t num, float * pRAW_dataX, float * pRAW_dataY, float * pRAW_dataZ )
Функция получает актуальные данные от заданного магнитометра и сохраняет в переменные pRAW_dataX, pRAW_dataY, pRAW_dataZ. Значения представлены в нТ.
Аргументы
[in] num идентификатор устройства (сейчас не реализовано, num может быть любым)
[out] pRAW_dataX Магнитное поле по оси X, нТ
[out] pRAW_dataY Магнитное поле по оси Y, нТ
[out] pRAW_dataZ Магнитное поле по оси Z, нТ
float mag_x = 0, mag_y = 0, mag_z = 0;
if (magnetometer_request_raw(0, &mag_x, &mag_y, &mag_z) != 0) {
puts ("Magnetometer data ERROR"); }
printf ("Magfield: X %f, Y %f, Z %f\n", mag_x, mag_y, mag_z);
Задать смещение нуля заданного магнитометра.
SchSatApi int magnetometer_set_offset ( uint16_t num, int16_t offset_X, int16_t offset_Y, int16_t offset_Z)
Функция задаёт постоянное смещение показателей магнитометра совмещая физический и логический ноль. Значения аргументов в единицах магнитометра (нТ).
Внимание! Смещение нуля задаётся в int16_t и может иметь значение от -32768 до +32767. Если данного диапазона недостаточно, возможна дополнительная предобработка значений в пользовательской программе.
Аргументы
[in] num идентификатор устройства
[in] offset_X Смещение нуля магнитного поля по оси X, нТ
[in] offset_Y Смещение нуля магнитного поля по оси Y, нТ
[in] offset_Z Смещение нуля магнитного поля по оси Z, нТ
Отправить показания магнитометра по УКВ.
SchSatApi int magnetometer_push_data_uhf ( )
Функция отправляет актуальные данные от магнитометра по УКВ связи. Значения представлены в нТ.
Установить период телеметрии магнитометра и датчика угловых скоростей.
SchSatApi int magnetometer_gyro_set_telemetry_period ( const uint16_t num, const uint16_t period )
Функция устанавливает период отправки телеметрии заданными магнитометром и ДУС. Значение периода задаётся в мс и должно лежать в диапазоне 50..5000мс.
Внимание! Слишком низкий период телеметрии на большом количестве устройств может вызвать перегрузку CAN-шины.
Аргументы
[in] num идентификатор устройства
[in] period период телеметрии, мс
Получить скорость вращения маховика.
SchSatApi int motor_request_speed ( uint16_t num, float * pRPM )
Функция возвращает угловую скорость вращения определённого управляющего двигателя-маховика. Значение записывается в переменную pRPM. Единицы измерения: об/мин.
Аргументы
[in] num идентификатор устройства
[out] pRPM угловая скорость вращения, об/мин
Задать скорость вращения маховика.
SchSatApi int motor_set_speed ( uint16_t num, float RPM )
Функция задаёт угловую скорость вращения определённого управляющего двигателя-маховика. В качестве аргументов функция принимает порядковый номер маховика и скорость в об/мин.
Аргументы
[in] num идентификатор устройства
[in] RPM угловая скорость вращения, об/мин
Установить период телеметрии маховика.
SchSatApi int motor_set_telemetry_period ( const uint16_t num, const uint16_t period )
Функция устанавливает период отправки телеметрии заданным маховиком. Значение периода задаётся в мс и должно лежать в диапазоне 50..5000мс.
Внимание! Слишком низкий период телеметрии на большом количестве устройств может вызвать перегрузку CAN-шины.
Аргументы
[in] num идентификатор устройства
[in] period период телеметрии, мс
Получить показания cолнечного датчика.
SchSatApi int sunsensor_get_raw ( uint16_t num, int32_t * angle )
Функция получает актуальные данные от заданного солнечного датчика и сохраняет в переменную angle. Значения представлены в градусах. Угол отсчитывается от нормали к плоскости датчика. В случае, если датчик не освещён солнцем, функция возвращает значение -180.
Аргументы
[in] num идентификатор устройства
[out] angle угол между нормалью плоскости датчика и вектором на солнце, º.
int32_t angle = 0;
if (sunsensor_get_raw(0, &angle) != 0) {
puts ("Magnetometer data ERROR\n");
}
printf ("Angle to the sun #0: %d\n", angle);
Отправить показания солнечного датчика по УКВ.
SchSatApi int sunsensor_push_data_uhf ( uint16_t num )
Функция отправляет актуальные данные от заданного солнечного датчика по УКВ связи. Формат данных - компоненты вектора длиной 1е+9 направленного на источник света. Если источник света вне зоны видимости заданного датчика - передаётся нулевой вектор с флагом невалидности данных.
Аргументы
[in] num идентификатор устройства
Установить период телеметрии cолнечного датчика.
SchSatApi int sunsensor_set_telemetry_period ( const uint16_t num, const uint16_t period )
Функция устанавливает период отправки телеметрии заданным солнечным датчиком. Значение периода задаётся в мс и должно лежать в диапазоне 50..5000мс. Внимание! Слишком низкий период телеметрии на большом количестве устройств может вызвать перегрузку CAN шины.
Аргументы
[in] num идентификатор устройства
[in] period период телеметрии, мс
Получить сообщение UniCAN.
SchSatApi int recieve_unican_message ( const uint16_t address_from, const uint16_t msg_id, uint8_t * data, const uint16_t msg_size, const uint16_t timeout )
При нулевой длине сообщения (msg_size == 0) *data должен быть NULL.
Аргументы
[in] address_from Идентификатор устройства-отправителя
[in] msg_id Идентификатор сообщения
[out] *data Указатель на буфер для полученных данных приведённый формату uint8_t*
[in] msg_size Размер данных в байтах
[in] timeout Время ожидания сообщения с миллисекундах
Отправить сообщение UniCAN.
SchSatApi int send_unican_message ( const uint16_t address_to, const uint16_t msg_id, uint8_t * data, const uint16_t msg_size )
```cpp
Аргументы
```cpp
[in] address_to Идентификатор устройства-получателя
[in] msg_id Идентификатор сообщения
[in] *data Указатель на данные приведённый формату uint8_t *
[in] msg_size Размер данных в байтах
Передать снимок на приёмную станцию.
SchSatApi int transmitter_transmit_photo ( uint16_t num )
SchSatApi int push_photo_terra2 ( uint8_t photoNum )
SchSatApi int push_thumbs_terra2 ( uint8_t numFrom )
Аргументы
[in] num числовой идентификатор фото (8/16-битовый беззнаковый) или миниатюры, с которой начнется передача
Сделать снимок бортовой камерой.
SchSatApi int camera_take_photo ( uint16_t num )
Камера делает снимок и сохраняет его в памяти спутника.
Аргументы
[in] num числовой идентификатор фото (16-битовый беззнаковый)
Функция задержки с точностью до миллисекунд.
SchSatApi void mSleep(int msec)
Аргумент
[in] msec - Время задержки в мс
Функция задержки с точностью до секунд.
SchSatApi void Sleep(int sec)
Аргумент
[in] sec - Время задержки в секундах