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