diff --git a/Makefile b/Makefile index 617b5a4..5bca722 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 1.15 +VERSION=$(PKG_VERSION) ifdef CROSS_COMPILE CC := $(CROSS_COMPILE)-gcc @@ -20,7 +20,7 @@ ROOT_DIR := $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST))))) EXTRA_CFLAGS += -DVERSION='"$(VERSION)"' -mtpoe_ctrl-h := mtpoe_ctrl.h mk_com.h params.h signals.h +mtpoe_ctrl-h := mtpoe_ctrl.h mk_boards.h mk_com.h params.h signals.h mtpoe_ctrl-objs-c := mk_com.c mtpoe_ctrl-objs := $(mtpoe_ctrl-objs-c:%.c=objs/%.o) mtpoe_ctrl-bins-c := mtpoe_ctrl.c diff --git a/README b/README index ec0d703..114aa9c 100644 --- a/README +++ b/README @@ -13,10 +13,10 @@ Examples of using: mtpoe_ctrl --action=set_poe --port=1 --val=2 #auto-on PoE for port ether3 mtpoe_ctrl --action=set_poe --port=2 --val=1 #force-on PoE for port ether4 mtpoe_ctrl --action=set_poe --port=3 --val=0 #turn off PoE for port ether5 - mtpoe_ctrl --action=load_poe_from_uci #load PoE port settings from uci->network->mtik_poe + mtpoe_ctrl --action=load_poe_from_uci #load PoE port settings from uci->network->poe -In /etc/config/network the mtik_poe section should be present: -config mtik_poe +In /etc/config/network the poe section should be present: +config poe option port0 '1' option port1 '0' option port2 '1' @@ -68,3 +68,15 @@ or if you use DTS: spi-max-frequency = <2200000>; }; }; + +RB500UPr+S+IN: + The board name expected is "mikrotik,rb5009upr". + It is expected the appropriate spi device is defined in DT and the PoE is enabled. This is already ensured with + patches for this board (also refer to https://forum.openwrt.org/t/mikrotik-rb750-r2-series-poe/7032/68). + The get_poe command does not return the ports configuration (0x45), only the status. + +Build: + 1. Copy openwrt/package/utils/mtpoe_ctrl into /package/utils/ + 2. In run 'make menuconfig' and select this new package to build + 3a. Type 'make' to rebuild the openwrt OR + 3b. Type 'make package/utils/mtpoe_ctrl/{clean,compile}' to build this package only diff --git a/README.ru b/README.ru index 228aedf..585491f 100644 --- a/README.ru +++ b/README.ru @@ -13,10 +13,10 @@ mtpoe_ctrl --action=set_poe --port=1 --val=2 #auto-on PoE для порта ether3 mtpoe_ctrl --action=set_poe --port=2 --val=1 #force-on PoE для порта ether4 mtpoe_ctrl --action=set_poe --port=3 --val=0 #выключить PoE для порта ether5 - mtpoe_ctrl --action=load_poe_from_uci #загрузить PoE настройки портов из uci->network->mtik_poe + mtpoe_ctrl --action=load_poe_from_uci #загрузить PoE настройки портов из uci->network->poe -В /etc/config/network должна присутствовать секция mtik_poe: -config mtik_poe +В /etc/config/network должна присутствовать секция poe: +config poe option port0 '1' option port1 '0' option port2 '1' diff --git a/mk_boards.h b/mk_boards.h new file mode 100644 index 0000000..5a773e2 --- /dev/null +++ b/mk_boards.h @@ -0,0 +1,42 @@ +#ifndef _MK_BOARDS +#define _MK_BOARDS + +#include +#include "mk_com.h" + +#define BOARDS_NUM (sizeof(poe_boards)/sizeof(poe_boards[0])) +#define POE_BOARD_NAME_LEN 32 + +struct poe_board { + char *name; + int proto_ver; + char *spidev; + int ports_num; + int port_state_map[POE_CMD_PORTS_MAX]; +}; + +/************************************************************************************* + все изместные нам PoE устройства */ +const struct poe_board poe_boards[ ] = { + { /* RouterBOARD 750P r2, RouterBOARD 750UP r2*/ + .name = "rb-750p-pbr2", + .proto_ver = 2, + .spidev = "/dev/spidev0.2", + .ports_num = 4, + .port_state_map = {0xd, 0xc, 0xb, 0xa} + }, { /* RouterBOARD 960PGS */ + .name = "mikrotik,routerboard-960pgs", + .proto_ver = 3, + .spidev = "/dev/spidev0.2", + .ports_num = 4, + .port_state_map = {0xd, 0xc, 0xb, 0xa} + }, { /* RouterBOARD RB5009UPr+S+IN and its base */ + .name = "mikrotik,rb5009 mikrotik,rb5009upr", + .proto_ver = 4, + .spidev = "/dev/spidev2.0", + .ports_num = 8, + .port_state_map = {0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1} + } +};//---------------------------------------------------------------------------------- + +#endif diff --git a/mk_com.c b/mk_com.c index 126bcf7..c63c463 100644 --- a/mk_com.c +++ b/mk_com.c @@ -161,7 +161,7 @@ uint8_t *spidev_query(int fd, uint8_t cmd, uint8_t arg1, uint8_t arg2){ } /* проверим то, что получили от микроконтроллера */ p = rx + 4; //p указывает на начало ответа(+4 байта) - if(poe_proto == 3) + if((poe_proto == 3) || (poe_proto == 4)) tx_crc = 0xFF; //проверим что rx[0] == tx_crc if(*(p++) != tx_crc){ diff --git a/mk_com.h b/mk_com.h index 78edbe8..87159a0 100644 --- a/mk_com.h +++ b/mk_com.h @@ -9,7 +9,8 @@ #define POE_CMD_STATE 0x45 /* получение статуса всех POE портов(off, force-on, auto-on) */ /* запрос статуса(есть ли потребление, КЗ) POE для указанного порта. так же возвращает ток потребления в mA */ -#define POE_CMD_PORT_STATE_BASE 0x59 /* 0x59 .. 0x5C */ +#define POE_CMD_PORT_STATE_BASE 0x50 /* 0x50 .. 0x5F */ +#define POE_CMD_PORTS_MAX 16 /* Maximum number of handled ports.*/ uint8_t *spidev_query(int, uint8_t, uint8_t, uint8_t); uint8_t *spidev_raw_query(int, uint8_t *, size_t); diff --git a/mtpoe_ctrl.c b/mtpoe_ctrl.c index 1e5cd47..793e025 100644 --- a/mtpoe_ctrl.c +++ b/mtpoe_ctrl.c @@ -11,7 +11,6 @@ #include #include #include "signals.h" -#include "mk_com.h" #include "mtpoe_ctrl.h" char err_mess[255]; @@ -71,11 +70,12 @@ static void parse_options(int argc, char *argv[]){ while((pc = getopt_long_only(argc, argv, "", long_options, NULL)) != -1){ //загружаем значение из optarg в выделенную для этой опции переменную opt_set_val(pc, optarg); //этот макрос так же проверяет что pc не выходит за границы opt_MAX - //printf("%d\n", pc); passed_options[pc] = 1; //ставим флаг что эта опция была передана } }//----------------------------------------------------------------------------------- + + /************************************************************************************* выводит версию этой утилиты */ @@ -101,10 +101,16 @@ static void do_action_get_fw_ver(void){ static void do_action_get_voltage(void){ do_sq(POE_CMD_INP_VOLT, { float v = 0; - if(poe_proto == 2){ + switch(poe_proto){ + case 2: v = (x * 35.7 / 1024); - }else if(poe_proto == 3){ + break; + case 3: + case 4: v = x / 100.; + break; + default: + break; } printf(" %s: %.2f%s\n", "voltage", v, need_coma()); }); @@ -117,9 +123,12 @@ static void do_action_get_temperature(void){ do_sq(POE_CMD_TEMPERAT, { int c = 0; //в обоих случаях зависимость линейная - if(poe_proto == 2){ + switch(poe_proto){ + case 2: c = x - 273; //переходим на градусы Цельсия из Кельвинов - }else if(poe_proto == 3){ + break; + case 3: + case 4: /* 12 значений(блок) => 5 делений температуры ! */ int n = x / 12; //номер блока int o = x - n * 12; //остаток - хвост после блока @@ -130,6 +139,9 @@ static void do_action_get_temperature(void){ if(o > 6) c += 3; else if(o > 4) c += 2; else if(o > 2) c += 1; + break; + default: + break; } printf(" %s: %d%s\n", "temperature", c, need_coma()); }); @@ -138,18 +150,27 @@ static void do_action_get_temperature(void){ /************************************************************************************* возвращает массив с текущим состоянием PoE портов */ -static uint8_t *get_poe_ports_state(void){ +static uint8_t *get_poe_ports_config(void){ int a; - static uint8_t nps[POE_PORTS_N]; - uint8_t *ansv = spidev_query(spidev_fd, POE_CMD_STATE, 0, 0); - uint32_t x = ansv[0] << 8 | ansv[1]; - for(a = 0; a < POE_PORTS_N; a++){ - if(poe_proto == 2){ - nps[a] = x & 0xF; - } else if(poe_proto == 3){ - nps[POE_PORTS_N - a - 1] = x & 0xF; + static uint8_t nps[POE_CMD_PORTS_MAX]; + if(poe_proto == 4){ + // For now ignore + memset(nps, 0xff, POE_CMD_PORTS_MAX); + }else{ + uint8_t *ansv = spidev_query(spidev_fd, POE_CMD_STATE, 0, 0); + uint32_t x = ansv[0] << 8 | ansv[1]; + for(a = 0; a < POE_PORTS_N; a++){ + switch(poe_proto){ + case 2: + nps[a] = x & 0xF; + break; + case 3: + nps[POE_PORTS_N - a - 1] = x & 0xF; + default: + break; + } + x >>= 4; } - x >>= 4; } return nps; }//----------------------------------------------------------------------------------- @@ -158,48 +179,96 @@ static uint8_t *get_poe_ports_state(void){ /************************************************************************************* возвращает массив с текущим потреблением(mA) PoE портов */ -static int *get_poe_ports_cons(void){ +static int *get_poe_ports_status(void){ int a; - static int npc[POE_PORTS_N]; + static int npc[POE_CMD_PORTS_MAX]; int x; for(a = 0; a < POE_PORTS_N; a++){ //порты и номера команд обратны друг другу - int cmd = POE_CMD_PORT_STATE_BASE + POE_PORTS_N - 1 - a; + int cmd = POE_CMD_PORT_STATE_BASE + poe_boards[board].port_state_map[a]; uint8_t *ansv = spidev_query(spidev_fd, cmd, 0, 0); x = ansv[0] << 8 | ansv[1]; + npc[a] = x; + } + return npc; +}//----------------------------------------------------------------------------------- + +/************************************************************************************* + выводит данные о состоянии PoE(включено ли пое, на каких портах и в каком режиме) +*/ +static void show_poe_config(uint8_t *nps, int n){ + int a; + printf(" poe_config: [ "); + for(a = 0; a < n; a++){ + switch(nps[a]) + { + case 0: + printf("off"); + break; + case 1: + printf("on"); + break; + case 2: + printf("auto"); + break; + default: + printf("n/a"); + break; + } + if(a + 1 < POE_PORTS_N) + { + printf(", "); + } + } + printf(" ]%s\n", need_coma()); +}//----------------------------------------------------------------------------------- + +/************************************************************************************* + выводит данные о состоянии PoE(включено ли пое, на каких портах и в каком режиме) +*/ +static void show_poe_status(void){ + int a; + int *npc = get_poe_ports_status(); + printf(" poe_status: [ "); + for(a = 0; a < POE_PORTS_N; a++){ //если старший бит == 1 то порт отключен(off или КЗ или auto-on и нет нагрузки) - if(x & 0x8000){ - if(x == 0x800A){ //если значение 0x800A то это КЗ - x = -111; + switch(npc[a]){ + case 0x8001: //auto - waiting for load + printf("auto"); + break; + case 0x800A: //если значение 0x800A то это КЗ + printf("short"); + break; + case 0x800F: //forced on - no load + printf("on"); + break; + default: + if(npc[a] & 0x8000){ + printf("off"); //к порту просто ничего не подключено или он off }else{ - x = -1; //к порту просто ничего не подключено или он off + printf("%d", npc[a]); } + break; + } + if(a + 1 < POE_PORTS_N) + { + printf(", "); } - npc[a] = x; } - return npc; + printf(" ]%s\n", need_coma()); }//----------------------------------------------------------------------------------- /************************************************************************************* - выводит данные о состоянии PoE(включено ли пое, на каких портах и в каком режиме) + выводит данные о состоянии PoE(включено ли пое, на каких портах и в каком режиме) */ static void do_action_get_poe(void){ - int a; - uint8_t *nps = get_poe_ports_state(); - int *npc = get_poe_ports_cons(); scobs({ - printf(" %s: [ ", "poe_state"); - for(a = 0; a < POE_PORTS_N; a++){ - printf("%d%s ", nps[a], a + 1 < POE_PORTS_N ? "," : ""); + if(poe_proto < 4){ + show_poe_config(get_poe_ports_config(), POE_PORTS_N); } - printf("],\n"); - printf(" %s: [ ", "poe_cons"); - for(a = 0; a < POE_PORTS_N; a++){ - printf("%d%s ", npc[a], a + 1 < POE_PORTS_N ? "," : ""); - } - printf("]%s\n", need_coma()); + show_poe_status(); }); -}//----------------------------------------------------------------------------------- +} /************************************************************************************* устанавливает состояние определенного PoE порта @@ -219,8 +288,8 @@ static void __set_poe(int port, int val){ action для устанавки состояние определенного PoE порта */ static void do_action_set_poe(void){ - if(port < 0 || port > 3) - die_and_mess(-20, "port value must be 0..3"); + if(port < 0 || port >= POE_PORTS_N) + die_and_mess(-20, "port value must be 0..%d", POE_PORTS_N); if(val < 0 || val > 2) die_and_mess(-20, "PoE value must be 0..2"); __set_poe(port, val); @@ -241,7 +310,7 @@ static void do_action_load_poe_from_uci(void){ int a; int processed_ports = 0; //получмм текущее состояние poe портов - uint8_t *nps = get_poe_ports_state(); + uint8_t *nps = get_poe_ports_config(); ctx = uci_alloc_context(); if(!ctx) die_and_mess(-22, "Can't alloc UCI context: %s", strerror(errno)); @@ -279,11 +348,7 @@ static void do_action_load_poe_from_uci(void){ scobs({ printf(" status: \"ok\",\n"); printf(" processed_ports: %d,\n", processed_ports); - printf(" %s: [ ", "poe_state"); - for(a = 0; a < POE_PORTS_N; a++){ - printf("%d%s ", nps[a], a + 1 < POE_PORTS_N ? "," : ""); - } - printf("]%s\n", need_coma()); + show_poe_config(nps, POE_PORTS_N); }); }//----------------------------------------------------------------------------------- @@ -302,54 +367,6 @@ static void do_action_info(){ }//----------------------------------------------------------------------------------- -/************************************************************************************* - выполняет парсинг hex строки вида "0D 23 4C 56" возвращая ответ в виде массива байт - не забывай освобождать память массива с результатом !!! -*/ -static uint8_t *parse_hex_str(char *str, size_t *ret_len){ - char byte[3]; //для символов байта - int a, nw; - uint8_t *res = NULL; - uint8_t *p = NULL; - size_t len = 0; - *ret_len = 0; - /* делаем два прохода. в первом считаем размер для массива результата - а во втором парсим каждый найденный байт(его символы) */ - for(nw = 0; nw < 2; nw++){ - memset(byte, '\0', sizeof(byte)); - if(nw){ //если это второй проход цыкла - if(len == 0) - return NULL; - res = malloc(len); - if(!res) - return NULL; - p = res; - } - for(a = 0; a < strlen(str) + 1; a++){ - if((str[a] == ' ') || (str[a] == '\0')){ - if(byte[0] == '\0') - continue; - goto recogn; - } - if(byte[0] == '\0'){ - byte[0] = str[a]; - }else{ - byte[1] = str[a]; - goto recogn; - } - continue; - recogn: - if(nw) - *(p++) = strtol(byte, NULL, 16); - else - len++; - memset(byte, '\0', sizeof(byte)); - } - } - *ret_len = len; - return res; -}//----------------------------------------------------------------------------------- - /************************************************************************************* отправляет "сырую" команду состоящую из байтов заданных в raw_hex_val */ @@ -358,7 +375,15 @@ static void do_action_raw_send(){ check_for_needed_params("raw_hex_val"); size_t tx_len = 0; size_t rx_len = 0; - uint8_t *tx_data = parse_hex_str(raw_hex_val, &tx_len); + uint8_t tx_data[(strlen(raw_hex_val)+1)/2]; + char *ptr = raw_hex_val; + int n=0; + while(sscanf(ptr+=n, "%x%n", &a, &n) == 1) + { + tx_data[tx_len++] = a; + } + if(tx_len == 0) + return; uint8_t *rx_data = spidev_raw_query(spidev_fd, tx_data, tx_len); if(rx_data > 0) rx_len = tx_len; @@ -373,8 +398,6 @@ static void do_action_raw_send(){ printf("%s0x%02X", a > 0 ? " " : "", rx_data[a]); printf("\"\n"); }); - if(tx_data) - free(tx_data); if(rx_data) free(rx_data); }//----------------------------------------------------------------------------------- @@ -415,30 +438,12 @@ static void do_action(){ my_action_react(my_action->cb()); }//----------------------------------------------------------------------------------- -#define POE_BOARD_NAME_LEN 32 -struct poe_board { - char name[POE_BOARD_NAME_LEN]; - int ver; -}; - -/************************************************************************************* - все изместные нам PoE устройства */ -struct poe_board poe_boards[ ] = { - { /* RouterBOARD 750P r2, RouterBOARD 750UP r2*/ - .name = "rb-750p-pbr2", - .ver = 2 - }, { /* RouterBOARD 960PGS */ - .name = "mikrotik,routerboard-960pgs", - .ver = 3 - } -};//---------------------------------------------------------------------------------- - /************************************************************************************* пытается по модели устройства определить версию poe протокола. */ -char *try_to_detect_poe_proto(int fallback_val){ +char *try_to_detect_poe_board(int fallback_val){ static char res[8]; char buf[POE_BOARD_NAME_LEN]; - int ver = fallback_val; + int board_index = fallback_val; int fd = -1; size_t len; fd = open(BOARD_NAME_FILE, O_RDONLY); @@ -448,19 +453,29 @@ char *try_to_detect_poe_proto(int fallback_val){ int a; buf[len] = '\0'; if(len > 0 && buf[len - 1] == '\n') - buf[len - 1] = '\0'; - for(a = 0; a < sizeof(poe_boards) / sizeof(poe_boards[0]); a++){ - if((strlen(buf) == strlen(poe_boards[a].name)) && !strcmp(buf, poe_boards[a].name)){ - ver = poe_boards[a].ver; - } + buf[--len] = '\0'; + for(a = 0; a < BOARDS_NUM; a++){ + const char *n = poe_boards[a].name; + const char *c; + do{ + c = strchr(n, ' '); + int n_len = (c == NULL) ? strlen(n) : (int)(c - n); + if((n_len = len) && !strncmp(buf, n, len)){ + board_index = a; + a = BOARDS_NUM; + break; + } + n = c + 1; + } while(c != NULL); } } close(fd); } - snprintf(res, sizeof(res), "%d", ver); + snprintf(res, sizeof(res), "%d", board_index); return res; }//----------------------------------------------------------------------------------- + /************************************************************************************* main */ @@ -471,12 +486,18 @@ int main(int argc, char *argv[]){ memset(passed_options, 0x0, sizeof(passed_options)); //парсим переданные нам опции parse_options(argc, argv); - if(!poe_proto) //если протокол poe не был задан - add_default_if_not_set(poe_proto, try_to_detect_poe_proto(0)); - if(!poe_proto){ //если версию пое так определить и не удалось - die_and_mess(100, "Unsupported PoE device !"); - //то лучше дальше не продолжать. вдруг устройство вообще не имеет poe! + if(board == 0) + { + add_default_if_not_set(board, try_to_detect_poe_board(BOARDS_NUM)); + if(board == BOARDS_NUM) + die_and_mess(100, "Unsupported PoE device !"); + }else + { + board--; } + if(!poe_proto) //если протокол poe не был задан + add_default_if_not_set(poe_proto, sprf("%d", poe_boards[board].proto_ver)); + add_default_if_not_set(dev_file, poe_boards[board].spidev); if(version) //это тоже самое что и --action="get_version" add_default_if_not_set(action, "get_version"); //проверим что был передан параметр action. и если он не был передан то: diff --git a/mtpoe_ctrl.h b/mtpoe_ctrl.h index 1e9a02e..386e174 100644 --- a/mtpoe_ctrl.h +++ b/mtpoe_ctrl.h @@ -1,12 +1,14 @@ #ifndef _MTPOE_CTRL #define _MTPOE_CTRL +#include "mk_boards.h" + //файл для общения с spidev модулем #define DEFAULT_DEV_FILE "/dev/spidev0.2" //ключ субконфига uci->network в котором находятся настройки PoE #define MTIK_POE_UCI_CONFIG_KEY "mtik_poe" //сколько всего PoE портов -#define POE_PORTS_N 4 +#define POE_PORTS_N ((board < BOARDS_NUM) ? poe_boards[board].ports_num : 0) //где находится файл с board_name #define BOARD_NAME_FILE "/tmp/sysinfo/board_name" @@ -31,7 +33,8 @@ int verbose = 0; //быть более разговорчивым int port = -1; //номер порта. используется для set_poe int val = -1; //значение. например 0, 1 или 2 для set_poe int version = 0; //нужно показать версию и выйти -int poe_proto = 0; //версия протокола пое(v2, v3). 0 - auto. +int poe_proto = 0; //версия протокола пое(v2, v3, v4). 0 - auto. +int board = 0; //board index from the list, 0 - auto char raw_hex_val[64] = "00 00 00 00"; //сырые данные в hex формате(в виде строки) //структура с описанием нашей опции @@ -65,6 +68,7 @@ enum { opt_version, opt_raw_hex_val, opt_poe_proto, + opt_board, opt_MAX }; @@ -78,11 +82,12 @@ const struct my_option my_options[] = { define_str_opt(poe_uci_config_key), define_int_opt(period, 0, 3600), define_flag_opt(verbose), - define_int_opt(port, 0, 3), + define_int_opt(port, 0, POE_CMD_PORTS_MAX), define_int_opt(val, 0, 0xFFFF), define_flag_opt(version), define_str_opt(raw_hex_val), define_int_opt(poe_proto, 0, 0xFF), + define_int_opt(board, 0, BOARDS_NUM), define_empty_opt() }; diff --git a/openwrt/etc/init.d/mtpoe_ctrl b/openwrt/files/99_mtpoe-ctrl similarity index 60% rename from openwrt/etc/init.d/mtpoe_ctrl rename to openwrt/files/99_mtpoe-ctrl index 8fb7658..4d39fb4 100644 --- a/openwrt/etc/init.d/mtpoe_ctrl +++ b/openwrt/files/99_mtpoe-ctrl @@ -4,5 +4,5 @@ START=11 start() { - /usr/bin/mtpoe_ctrl --action=load_poe_from_uci >/dev/null 2>&1 + /usr/bin/mtpoe-ctrl --action=load_poe_from_uci >/dev/null 2>&1 } diff --git a/openwrt/files/99_mtpoe-ctrl.defaults b/openwrt/files/99_mtpoe-ctrl.defaults new file mode 100755 index 0000000..cd07c96 --- /dev/null +++ b/openwrt/files/99_mtpoe-ctrl.defaults @@ -0,0 +1,28 @@ +#!/bin/sh + +uci -q get network.mtik_poe || { + num=0 + board=$(cat /tmp/sysinfo/board_name) + case "$board" in + rb-750p-pbr2|\ + mikrotik,routerboard-960pgs) + num=4 + ;; + mikrotik,rb5009|\ + mikrotik,rb5009upr) + num=8 + ;; + *) + return 0 + ;; + esac + if [ "$num" -gt 0 ]; then + uci set network.mtik_poe='mtik_poe' + n=0 + while [ "$n" -lt "$num" ]; do + uci set network.mtik_poe.port$n='0' + n=$((n + 1)) + done + uci commit network + fi +} diff --git a/openwrt/package/utils/mtpoe-ctrl/Makefile b/openwrt/package/utils/mtpoe-ctrl/Makefile new file mode 100644 index 0000000..e37014c --- /dev/null +++ b/openwrt/package/utils/mtpoe-ctrl/Makefile @@ -0,0 +1,44 @@ +# +# Copyright (C) 2018 adron@yapic.net +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=mtpoe-ctrl +PKG_SOURCE_VERSION:=9c42b74274cca10810363dbbb6d161bfb9cedb7e +PKG_MIRROR_HASH:=1ac2902161ba4bb1e8af397aa48821ccea95740199b1c155f98161c7ff3a93df +PKG_VERSION:=1.15 +PKG_RELEASE:=18 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/prudy/mtpoe_ctrl.git +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) + +PKG_MAINTAINER:=Sergey Sergeev +PKG_LICENSE:=GPL-2.0 + +include $(INCLUDE_DIR)/package.mk + +define Package/mtpoe-ctrl + SECTION:=utils + CATEGORY:=Utilities + DEPENDS:=+libuci +kmod-spi-dev + TITLE:=Management utility for Mikrotiks PoE V2/V3/V4 + URL:=$(PKG_SOURCE_URL) +endef + +define Package/mtpoe-ctrl/description + Management utility for Mikrotiks PoE V2/V3/V4 +endef + +define Package/mtpoe-ctrl/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/bins/mtpoe_ctrl $(1)/usr/bin/mtpoe-ctrl + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) $(PKG_BUILD_DIR)/openwrt/files/99_mtpoe-ctrl $(1)/etc/init.d/ + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) $(PKG_BUILD_DIR)/openwrt/files/99_mtpoe-ctrl.defaults $(1)/etc/uci-defaults/ +endef + +$(eval $(call BuildPackage,mtpoe-ctrl)) diff --git a/openwrt/package/utils/mtpoe_ctrl/Makefile b/openwrt/package/utils/mtpoe_ctrl/Makefile deleted file mode 100644 index 96d4084..0000000 --- a/openwrt/package/utils/mtpoe_ctrl/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (C) 2018 adron@yapic.net -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=mtpoe_ctrl -PKG_SOURCE_VERSION:=a392b923ddc1efb5ef16ddc28db058929b6bb80f -PKG_MIRROR_HASH:=fedc3f0fa11d7f7b21e33f28d88cd607ad951877aab55d964b1653d45f04b5d7 -PKG_VERSION:=1.14 -PKG_RELEASE:=18 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/adron-s/mtpoe_ctrl.git -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) - -PKG_MAINTAINER:=Sergey Sergeev -PKG_LICENSE:=GPL-2.0 - -include $(INCLUDE_DIR)/package.mk - -define Package/mtpoe_ctrl - SECTION:=utils - CATEGORY:=Utilities - DEPENDS:=+libuci +kmod-spi-dev - TITLE:=Management utility for Mikrotiks PoE V2/V3 - URL:=https://github.com/adron-s/mtpoe_ctrl.git -endef - -define Package/mtpoe_ctrl/description - Management utility for Mikrotiks PoE V2/V3 -endef - -define Package/mtpoe_ctrl/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/bins/mtpoe_ctrl $(1)/usr/bin/ - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) $(PKG_BUILD_DIR)/openwrt/etc/init.d/mtpoe_ctrl $(1)/etc/init.d -endef - -$(eval $(call BuildPackage,mtpoe_ctrl))