1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/coloz-blinker-library

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
BlinkerDuerOS.h 26 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
i3water Отправлено 3 лет назад cc1cd71
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935
#ifndef BLINKER_DUEROS_H
#define BLINKER_DUEROS_H
#include "../Blinker/BlinkerConfig.h"
#include "../Blinker/BlinkerUtility.h"
class BLINKERDUEROS
{
public :
BLINKERDUEROS() {}
void attachPowerState(blinker_callback_with_string_uint8_arg_t newFunction)
{
Blinker.attachDuerOSSetPowerState(newFunction);
}
void attachPowerState(blinker_callback_with_string_arg_t newFunction)
{
Blinker.attachDuerOSSetPowerState(newFunction);
}
void attachColor(blinker_callback_with_int32_arg_t newFunction)
{
Blinker.attachDuerOSSetColor(newFunction);
}
void attachMode(blinker_callback_with_string_arg_t newFunction)
{
Blinker.attachDuerOSSetMode(newFunction);
}
void attachCancelMode(blinker_callback_with_string_arg_t newFunction)
{
Blinker.attachDuerOSSetcMode(newFunction);
}
void attachLevel(blinker_callback_with_uint8_arg_t newFunction)
{
Blinker.attachDuerOSSetLevel(newFunction);
}
void attachRelativeLevel(blinker_callback_with_int32_arg_t newFunction)
{
Blinker.attachDuerOSRelativeLevel(newFunction);
}
void attachTemp(blinker_callback_with_uint8_arg_t newFunction)
{
Blinker.attachDuerOSSetTemp(newFunction);
}
void attachRelativeTemp(blinker_callback_with_int32_arg_t newFunction)
{
Blinker.attachDuerOSRelativeTemp(newFunction);
}
void attachBrightness(blinker_callback_with_string_arg_t newFunction)
{
Blinker.attachDuerOSSetBrightness(newFunction);
}
void attachRelativeBrightness(blinker_callback_with_int32_arg_t newFunction)
{
Blinker.attachDuerOSRelativeBrightness(newFunction);
}
void attachColorTemperature(blinker_callback_with_int32_arg_t newFunction)
{
Blinker.attachDuerOSSetColorTemperature(newFunction);
}
void attachRelativeColorTemperature(blinker_callback_with_int32_arg_t newFunction)
{
Blinker.attachDuerOSRelativeColorTemperature(newFunction);
}
void attachQuery(blinker_callback_with_int32_uint8_arg_t newFunction)
{
Blinker.attachDuerOSQuery(newFunction);
}
void attachQuery(blinker_callback_with_int32_arg_t newFunction)
{
Blinker.attachDuerOSQuery(newFunction);
}
void powerState(const String & state, uint8_t num)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_POWERSTATE);
payload += BLINKER_F("\":\"");
payload += state;
if (num != 0)
{
payload += BLINKER_F("\",\"num\":");
payload += STRING_format(num);
}
else
{
payload += BLINKER_F("\"");
}
// Blinker.DuerOSPrint(payload);
if (_fresh >> 0 & 0x01) {
free(aState);
}
aState = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aState, payload.c_str());
_fresh |= 0x01 << 0;
}
void powerState(const String & state)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_POWERSTATE);
payload += BLINKER_F("\":\"");
payload += state;
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 0 & 0x01) {
free(aState);
}
aState = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aState, payload.c_str());
_fresh |= 0x01 << 0;
}
void color(int32_t clr)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_COLOR_);
payload += BLINKER_F("\":\"");
payload += clr;
payload += BLINKER_F("\",");
payload += BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_COLOR);
payload += BLINKER_F("\":\"");
payload += clr;
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 1 & 0x01) {
free(aColor);
}
aColor = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aColor, payload.c_str());
_fresh |= 0x01 << 1;
}
void mode(const String & now_md)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_MODE);
payload += BLINKER_F("\":[\"\",\"");
payload += now_md;
payload += BLINKER_F("\"]");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 2 & 0x01) {
free(aMode);
}
aMode = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aMode, payload.c_str());
_fresh |= 0x01 << 2;
}
void mode(const String & pre_md, const String & now_md)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_MODE);
payload += BLINKER_F("\":[\"");
payload += pre_md;
payload += BLINKER_F("\",\"");
payload += now_md;
payload += BLINKER_F("\"]");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 2 & 0x01) {
free(aMode);
}
aMode = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aMode, payload.c_str());
_fresh |= 0x01 << 2;
}
void colorTemp(int clrTemp)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_COLORTEMP);
payload += BLINKER_F("\":\"");
payload += STRING_format(clrTemp);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 3 & 0x01) {
free(aCtemp);
}
aCtemp = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aCtemp, payload.c_str());
_fresh |= 0x01 << 3;
}
void brightness(int now_bright)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_BRIGHTNESS);
payload += BLINKER_F("\":[\"\",");
payload += STRING_format(now_bright);
payload += BLINKER_F("]");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 4 & 0x01) {
free(aBright);
}
aBright = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aBright, payload.c_str());
_fresh |= 0x01 << 4;
}
void brightness(int pre_bright, int now_bright)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_BRIGHTNESS);
payload += BLINKER_F("\":[");
payload += STRING_format(pre_bright);
payload += BLINKER_F(",");
payload += STRING_format(now_bright);
payload += BLINKER_F("]");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 4 & 0x01) {
free(aBright);
}
aBright = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aBright, payload.c_str());
_fresh |= 0x01 << 4;
}
void temp(double _temp)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_TEMP);
payload += BLINKER_F("\":\"");
payload += STRING_format(_temp);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 5 & 0x01) {
free(aTemp);
}
aTemp = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aTemp, payload.c_str());
_fresh |= 0x01 << 5;
}
void temp(float _temp)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_TEMP);
payload += BLINKER_F("\":\"");
payload += STRING_format(_temp);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 5 & 0x01) {
free(aTemp);
}
aTemp = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aTemp, payload.c_str());
_fresh |= 0x01 << 5;
}
void temp(int _temp)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_TEMP);
payload += BLINKER_F("\":\"");
payload += STRING_format(_temp);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 5 & 0x01) {
free(aTemp);
}
aTemp = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aTemp, payload.c_str());
_fresh |= 0x01 << 5;
}
void humi(double _humi)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_HUMI);
payload += BLINKER_F("\":\"");
payload += STRING_format(_humi);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 6 & 0x01) {
free(aHumi);
}
aHumi = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aHumi, payload.c_str());
_fresh |= 0x01 << 6;
}
void humi(float _humi)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_HUMI);
payload += BLINKER_F("\":\"");
payload += STRING_format(_humi);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 6 & 0x01) {
free(aHumi);
}
aHumi = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aHumi, payload.c_str());
_fresh |= 0x01 << 6;
}
void humi(int _humi)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_HUMI);
payload += BLINKER_F("\":\"");
payload += STRING_format(_humi);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 6 & 0x01) {
free(aHumi);
}
aHumi = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aHumi, payload.c_str());
_fresh |= 0x01 << 6;
}
void pm25(double _pm25)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_PM25);
payload += BLINKER_F("\":\"");
payload += STRING_format(_pm25);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 7 & 0x01) {
free(aPm25);
}
aPm25 = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aPm25, payload.c_str());
_fresh |= 0x01 << 7;
}
void pm25(float _pm25)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_PM25);
payload += BLINKER_F("\":\"");
payload += STRING_format(_pm25);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 7 & 0x01) {
free(aPm25);
}
aPm25 = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aPm25, payload.c_str());
_fresh |= 0x01 << 7;
}
void pm25(int _pm25)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_PM25);
payload += BLINKER_F("\":\"");
payload += STRING_format(_pm25);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 7 & 0x01) {
free(aPm25);
}
aPm25 = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aPm25, payload.c_str());
_fresh |= 0x01 << 7;
}
void pm10(double _pm10)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_PM10);
payload += BLINKER_F("\":\"");
payload += STRING_format(_pm10);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 8 & 0x01) {
free(aPm10);
}
aPm10 = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aPm10, payload.c_str());
_fresh |= 0x01 << 8;
}
void pm10(float _pm10)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_PM10);
payload += BLINKER_F("\":\"");
payload += STRING_format(_pm10);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 8 & 0x01) {
free(aPm10);
}
aPm10 = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aPm10, payload.c_str());
_fresh |= 0x01 << 8;
}
void pm10(int _pm10)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_PM10);
payload += BLINKER_F("\":\"");
payload += STRING_format(_pm10);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 8 & 0x01) {
free(aPm10);
}
aPm10 = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aPm10, payload.c_str());
_fresh |= 0x01 << 8;
}
void co2(double _co2)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_CO2);
payload += BLINKER_F("\":\"");
payload += STRING_format(_co2);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 9 & 0x01) {
free(aCO2);
}
aCO2 = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aCO2, payload.c_str());
_fresh |= 0x01 << 9;
}
void co2(float _co2)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_CO2);
payload += BLINKER_F("\":\"");
payload += STRING_format(_co2);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 9 & 0x01) {
free(aCO2);
}
aCO2 = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aCO2, payload.c_str());
_fresh |= 0x01 << 9;
}
void co2(int _co2)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_CO2);
payload += BLINKER_F("\":\"");
payload += STRING_format(_co2);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 9 & 0x01) {
free(aCO2);
}
aCO2 = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aCO2, payload.c_str());
_fresh |= 0x01 << 9;
}
void aqi(int _aqi)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_AQI);
payload += BLINKER_F("\":\"");
payload += STRING_format(_aqi);
payload += BLINKER_F("\"");
// Blinker.DuerOSPrint(payload);
if (_fresh >> 10 & 0x01) {
free(aAQI);
}
aAQI = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aAQI, payload.c_str());
_fresh |= 0x01 << 10;
}
void time(uint32_t _time)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_TIME_ALL);
payload += BLINKER_F("\":");
payload += STRING_format(_time/1000);
// Blinker.DuerOSPrint(payload);
if (_fresh >> 11 & 0x01) {
free(aTIME);
}
aTIME = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aTIME, payload.c_str());
_fresh |= 0x01 << 11;
}
void level(uint8_t _level)
{
String payload = BLINKER_F("\"");
payload += STRING_format(BLINKER_CMD_LEVEL);
payload += BLINKER_F("\":");
payload += STRING_format(_level);
// Blinker.DuerOSPrint(payload);
if (_fresh >> 12 & 0x01) {
free(aLevel);
}
aLevel = (char*)malloc((payload.length()+1)*sizeof(char));
strcpy(aLevel, payload.c_str());
_fresh |= 0x01 << 12;
}
void print()
{
if (_fresh == 0) return;
String duerData;
if (_fresh >> 0 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aState;
free(aState);
}
if (_fresh >> 1 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aColor;
free(aColor);
}
if (_fresh >> 2 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aMode;
free(aMode);
}
if (_fresh >> 3 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aCtemp;
free(aCtemp);
}
if (_fresh >> 4 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aBright;
free(aBright);
}
if (_fresh >> 5 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aTemp;
free(aTemp);
}
if (_fresh >> 6 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aHumi;
free(aHumi);
}
if (_fresh >> 7 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aPm25;
free(aPm25);
}
if (_fresh >> 8 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aPm10;
free(aPm10);
}
if (_fresh >> 9 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aCO2;
free(aCO2);
}
if (_fresh >> 10 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aAQI;
free(aAQI);
}
if (_fresh >> 11 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aTIME;
free(aTIME);
}
if (_fresh >> 12 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aLevel;
free(aLevel);
}
duerData += BLINKER_F("}");
_fresh = 0;
Blinker.duerPrint(duerData);
}
void report()
{
if (_fresh == 0) return;
String duerData;
bool isCheck = false;
if (_fresh >> 0 & 0x01) {
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aState;
isCheck = true;
free(aState);
}
if (_fresh >> 1 & 0x01) {
if (!isCheck)
{
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aColor;
isCheck = true;
}
free(aColor);
}
if (_fresh >> 2 & 0x01) {
if (!isCheck)
{
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aMode;
isCheck = true;
}
free(aMode);
}
if (_fresh >> 3 & 0x01) {
if (!isCheck)
{
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aBright;
isCheck = true;
}
free(aBright);
}
if (_fresh >> 4 & 0x01) {
if (!isCheck)
{
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aTemp;
isCheck = true;
}
free(aTemp);
}
if (_fresh >> 5 & 0x01) {
if (!isCheck)
{
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aHumi;
isCheck = true;
}
free(aHumi);
}
if (_fresh >> 6 & 0x01) {
if (!isCheck)
{
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aPm25;
isCheck = true;
}
free(aPm25);
}
if (_fresh >> 7 & 0x01) {
if (!isCheck)
{
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aPm10;
isCheck = true;
}
free(aPm10);
}
if (_fresh >> 8 & 0x01) {
if (!isCheck)
{
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aCO2;
isCheck = true;
}
free(aCO2);
}
if (_fresh >> 9 & 0x01) {
if (!isCheck)
{
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aAQI;
isCheck = true;
}
free(aAQI);
}
if (_fresh >> 10 & 0x01) {
if (!isCheck)
{
if (duerData.length()) duerData += BLINKER_F(",");
else duerData += BLINKER_F("{");
duerData += aTIME;
isCheck = true;
}
free(aTIME);
}
duerData += BLINKER_F("}");
_fresh = 0;
Blinker.duerPrint(duerData, true);
}
private :
char * aState;
char * aColor;
char * aMode;
char * aCtemp;
char * aBright;
char * aTemp;
char * aHumi;
char * aPm25;
char * aPm10;
char * aCO2;
char * aAQI;
char * aTIME;
char * aLevel;
uint16_t _fresh = 0;
};
#endif

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/coloz-blinker-library.git
git@gitlife.ru:oschina-mirror/coloz-blinker-library.git
oschina-mirror
coloz-blinker-library
coloz-blinker-library
master