vold2: Manually bootstrap the ums switch since switch kernel uevents are broken

Signed-off-by: San Mehat <san@google.com>
gugelfrei
San Mehat 15 years ago
parent a1c2ca1c70
commit 0cde53ce7b

@ -79,9 +79,15 @@ void VolumeManager::notifyUmsConnected(bool connected) {
}
void VolumeManager::handleSwitchEvent(NetlinkEvent *evt) {
const char *devpath = evt->findParam("DEVPATH");
const char *name = evt->findParam("SWITCH_NAME");
const char *state = evt->findParam("SWITCH_STATE");
if (!name || !state) {
LOGW("Switch %s event missing name/state info", devpath);
return;
}
if (!strcmp(name, "usb_mass_storage")) {
if (!strcmp(state, "online")) {
@ -228,7 +234,8 @@ int VolumeManager::shareVolume(const char *label, const char *method) {
sizeof(nodepath), "/dev/block/vold/%d:%d",
MAJOR(d), MINOR(d));
if ((fd = open("/sys/devices/platform/usb_mass_storage/lun0", O_WRONLY)) < 0) {
if ((fd = open("/sys/devices/platform/usb_mass_storage/lun0/file",
O_WRONLY)) < 0) {
LOGE("Unable to open ums lunfile (%s)", strerror(errno));
return -1;
}
@ -270,7 +277,7 @@ int VolumeManager::unshareVolume(const char *label, const char *method) {
sizeof(nodepath), "/dev/block/vold/%d:%d",
MAJOR(d), MINOR(d));
if ((fd = open("/sys/devices/platform/usb_mass_storage/lun0", O_WRONLY)) < 0) {
if ((fd = open("/sys/devices/platform/usb_mass_storage/lun0/file", O_WRONLY)) < 0) {
LOGE("Unable to open ums lunfile (%s)", strerror(errno));
return -1;
}

@ -56,6 +56,9 @@ public:
int simulate(const char *cmd, const char *arg);
int formatVolume(const char *label);
// XXX: This should be moved private once switch uevents are working
void notifyUmsConnected(bool connected);
void setBroadcaster(SocketListener *sl) { mBroadcaster = sl; }
SocketListener *getBroadcaster() { return mBroadcaster; }
@ -64,6 +67,5 @@ public:
private:
VolumeManager();
Volume *lookupVolume(const char *label);
void notifyUmsConnected(bool connected);
};
#endif

@ -78,6 +78,35 @@ int main() {
}
coldboot("/sys/block");
/*
* Switch uevents are broken.
* For now we manually bootstrap
* the ums switch
*/
{
FILE *fp;
char state[255];
if (!(fp = fopen("/sys/devices/virtual/switch/usb_mass_storage/state",
"r"))) {
LOGE("Failed to open ums switch (%s)", strerror(errno));
exit(1);
}
if (!fgets(state, sizeof(state), fp)) {
LOGE("Failed to read switch state (%s)", strerror(errno));
fclose(fp);
exit(1);
}
if (!strncmp(state, "online", 6)) {
LOGD("Bootstrapped ums is connected");
vm->notifyUmsConnected(true);
} else {
LOGD("Bootstrapped ums is disconnected");
vm->notifyUmsConnected(false);
}
fclose(fp);
}
// coldboot("/sys/class/switch");
/*
* Now that we're up, we can respond to commands

Loading…
Cancel
Save