13e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt/*
23e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt * Copyright (C) 2008 The Android Open Source Project
33e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt *
43e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt * Licensed under the Apache License, Version 2.0 (the "License");
53e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt * you may not use this file except in compliance with the License.
63e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt * You may obtain a copy of the License at
73e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt *
83e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt *      http://www.apache.org/licenses/LICENSE-2.0
93e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt *
103e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt * Unless required by applicable law or agreed to in writing, software
113e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt * distributed under the License is distributed on an "AS IS" BASIS,
123e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt * See the License for the specific language governing permissions and
143e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt * limitations under the License.
153e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt */
163e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
173e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt#include <stdlib.h>
183e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt#include <errno.h>
193e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt#include <fcntl.h>
203e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
213e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
223e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt#include <netinet/in.h>
233e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt#include <arpa/inet.h>
243e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
253e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt#define LOG_TAG "UsbController"
263e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt#include <cutils/log.h>
273e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
283e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt#include "UsbController.h"
293e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
303e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
313e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert GreenwaltUsbController::UsbController() {
323e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt}
333e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
343e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert GreenwaltUsbController::~UsbController() {
353e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt}
363e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
373e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwaltint UsbController::startRNDIS() {
383e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    LOGD("Usb RNDIS start");
393e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    return enableRNDIS(true);
403e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt}
413e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
423e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwaltint UsbController::stopRNDIS() {
433e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    LOGD("Usb RNDIS stop");
443e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    return enableRNDIS(false);
453e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt}
463e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
473e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwaltint UsbController::enableRNDIS(bool enable) {
483e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    char value[20];
493e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    int fd = open("/sys/class/usb_composite/rndis/enable", O_RDWR);
503e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    int count = snprintf(value, sizeof(value), "%d\n", (enable ? 1 : 0));
513e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    write(fd, value, count);
5237dc4a51774b9c8a95205cb825eae6753170a851Robert Greenwalt    close(fd);
533e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    return 0;
543e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt}
553e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt
563e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwaltbool UsbController::isRNDISStarted() {
573e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    char value=0;
583e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    int fd = open("/sys/class/usb_composite/rndis/enable", O_RDWR);
593e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt    read(fd, &value, 1);
6037dc4a51774b9c8a95205cb825eae6753170a851Robert Greenwalt    close(fd);
61f15891b981b9a0ee5ab6c095b9a300bf224f2032Mike Lockwood    return (value == '1' ? true : false);
623e6ba3ce1abda6071d5b01f53ca6039bb7b5e2d3Robert Greenwalt}
63