Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Gegurez
2 / 2 / 0
Регистрация: 08.09.2013
Сообщений: 10
#1

Приложение управление RGB лентой по wifi - Android

09.09.2013, 00:13. Просмотров 1604. Ответов 3
Метки нет (Все метки)

Всем привет.
Купил недавно один девайс - управление диодной лентой RGB по wifi (китай) c android/iOS (если надо могу ссылку скинуть). Исходников нигде нет...
Очень хочется научиться управлять этой штуковиной с компа (явой сладею слабо, больше как то c)
Пробовал получить исходники приложения через apktool, дело дошло до получения кода в .smali. dex2jar и дальнейшее открытие в jd-gui результата не дало (не открывается).
Изучение .smali дало результат что подключется по на ip 192.168.10.1 порт 5577 (проверено nmap и найдено в smali что именно этот порт \smali\com\Zengge\Sockets). Используются сокеты для соединения, формируется некое сообщение (массив byte) и записывается в поток метод send.
По smali: \smali\com\Zengge\Sockets
Код
.method public sendRgbColor(III)V
    .locals 3
    .parameter "r"
    .parameter "g"
    .parameter "b"

    .prologue
    const/4 v2, 0x0

    .line 203
    iput p1, p0, Lcom/Zengge/Sockets;->r:I

    .line 204
    iput p2, p0, Lcom/Zengge/Sockets;->g:I

    .line 205
    iput p3, p0, Lcom/Zengge/Sockets;->b:I

    .line 206
    iput v2, p0, Lcom/Zengge/Sockets;->modes:I

    .line 207
    const/4 v1, 0x5

    new-array v0, v1, [B

    .line 208
    .local v0, arrayOfByte:[B
    const/16 v1, 0x56

    aput-byte v1, v0, v2

    .line 209
    const/4 v1, 0x1

    int-to-byte v2, p1

    aput-byte v2, v0, v1

    .line 210
    const/4 v1, 0x2

    int-to-byte v2, p2

    aput-byte v2, v0, v1

    .line 211
    const/4 v1, 0x3

    int-to-byte v2, p3

    aput-byte v2, v0, v1

    .line 212
    const/4 v1, 0x4

    const/16 v2, -0x56

    aput-byte v2, v0, v1

    .line 213
    invoke-direct {p0, v0}, Lcom/Zengge/Sockets;->send([B)V

    .line 214
    return-void
.end method


.method private send([B)V
    .locals 2
    .parameter "paramArrayOfByte"

    .prologue
    .line 83
    :try_start_0
    iget-object v1, p0, Lcom/Zengge/Sockets;->socket:Ljava/net/Socket;

    invoke-virtual {v1}, Ljava/net/Socket;->getOutputStream()Ljava/io/OutputStream;

    move-result-object v1

    invoke-virtual {v1, p1}, Ljava/io/OutputStream;->write([B)V
    :try_end_0
    .catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0

    .line 89
    :goto_0
    return-void

    .line 85
    :catch_0
    move-exception v0

    .line 87
    .local v0, e:Ljava/io/IOException;
    invoke-virtual {v0}, Ljava/io/IOException;->printStackTrace()V

    goto :goto_0
.end method
Перед методом установки цвета вроде никаких инициализаций не выполняется.
Пытаюсь сделать тоже на с# (Пример клиента первый же из гугла камнями не кидайтесь)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
static void SendMessageFromSocket(int port)
        {
            byte[] bytes = new byte[1024];
            IPAddress ipAddr = IPAddress.Parse("192.168.10.1");
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);
 
            Socket sender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
 
            sender.Connect(ipEndPoint);
 
            Console.Write("Соединено!!!\n");
            Console.WriteLine("Сокет соединяется с {0} ", sender.RemoteEndPoint.ToString());
            byte[] msg = new byte[5];
 
            int r = 255;
            int g = 255;
            int b = 255;
            msg[0] = 0x45;
            msg[1] = (byte)r;
            msg[2] = (byte)g;
            msg[3] = (byte)b;
            msg[4] = 0x56;
 
            int bytesSent = sender.Send(msg);
 
            sender.Shutdown(SocketShutdown.Both);
            sender.Close();
        }
Результата ни какого, плюс сразу вопрос в byte отриц. число нельзя записать msg[4] = -0x56 (в smali -0x56 написано).
Пробовал тоже самое на java (уже можно записать msg[4] = -0x56 )
Пример кода тоже на java первый же запрос у гугле
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public static void main(String[] args) {
         int serverPort =5577; // здесь обязательно нужно указать порт к которому привязывается сервер.
            String address = "192.168.10.1"; // это IP-адрес компьютера, где исполняется наша серверная программа. 
                                          // Здесь указан адрес того самого компьютера где будет исполняться и клиент.
 
            try {
                InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес.
 
                Socket socket = new Socket(ipAddress, serverPort); // создаем сокет используя IP-адрес и порт сервера.
 
                // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиентом. 
                InputStream sin = socket.getInputStream();
                OutputStream sout = socket.getOutputStream();
 
                // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
                DataInputStream in = new DataInputStream(sin);
                DataOutputStream out = new DataOutputStream(sout);
 
                // Создаем поток для чтения с клавиатуры.
                BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
                String line = null;
                System.out.println("Type in something and press enter. Will send it to the server and tell ya what it thinks.");
                System.out.println();
 
                while (true) {
                    line = keyboard.readLine(); // ждем пока пользователь введет что-то и нажмет кнопку Enter.
                    byte mymsg[] = new byte[5];
                    int r = 255;
                    int g = 255;
                    int b = 255;
                    mymsg[0]=0x56;
                    mymsg[1]=(byte)r;
                    mymsg[2]=(byte)g;
                    mymsg[3]=(byte)b;
                    mymsg[4]=-0x56;
                    System.out.println("Sending this line to the server...");
                    out.write(mymsg); // отсылаем введенную строку текста серверу.
                    out.flush(); // заставляем поток закончить передачу данных.
                    line = in.readUTF(); // ждем неизвестно чего
                    System.out.println();
                }
            } catch (Exception x) {
                x.printStackTrace();
            }
    }
Оба примера подсоединяются, отсылается сообщение, только результата нет никакого.
Может есть знатоки чтения в smali. очень надо надо научиться управлять этой штуковиной, кто поможет даже могу даже скинуться на восстановление потраченного времени путем распития любимого алкогольного напитка (кефира например или др.). Все что есть прилагаю

О великие админы не серчайте если все же не в ту ветку написал)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2013, 00:13     Приложение управление RGB лентой по wifi
Посмотрите здесь:

Android WiFi и энергосбережение
Android Как сделать, чтобы приложение запускалось только при налиции WiFi соединения?
Android wifi чат
включение wifi Android
Android NETWORK_PROVIDER и Wifi
Android Управление звуком с ПК по WiFi
Информация о WiFi сетях Android
Android Узнать приложение которое запустило моё приложение
Android Сообщение "приложение остановлено" постоянно, даже когда приложение вообще не запущено
Android Переделать приложение для Андроид в приложение для ПК
Допиленное узкоспециализированное приложение или неповоротливое многофункциональное приложение? Android
Android Подключение к WiFi

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gegurez
2 / 2 / 0
Регистрация: 08.09.2013
Сообщений: 10
09.09.2013, 12:40  [ТС]     Приложение управление RGB лентой по wifi #2
Короче еще раз проверил второй код на яве дает результат (цвет меняется)...
Вопрос остался только в том почему на C не работает тоже самое и вопрос про тип byte. Но это уже похоже не совсем сюда вопрос так то...
raxp
10148 / 6535 / 477
Регистрация: 28.12.2010
Сообщений: 21,167
Записей в блоге: 1
26.06.2014, 00:12     Приложение управление RGB лентой по wifi #3
...есть такие http://ru.aliexpress.com/wholesale?S...20140625121325
Wonkyhole
6 / 6 / 1
Регистрация: 25.03.2014
Сообщений: 51
26.06.2014, 02:45     Приложение управление RGB лентой по wifi #4
Результата ни какого, плюс сразу вопрос в byte отриц. число нельзя записать msg[4] = -0x56 (в smali -0x56 написано).
В sbyte можно.
Yandex
Объявления
26.06.2014, 02:45     Приложение управление RGB лентой по wifi
Ответ Создать тему
Опции темы

Текущее время: 04:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru