So basically, a hacker modded a cheap CASIO calculator with code he says he wrote from scratch using publicly available resources. Someone commented in the article that the mod could be used to cheat on exams. The hacker said he hoped that's not the case.
Casio came down on him claiming he used proprietary Casio code and then used the DMCA to take down his project on Github. He is fighting back.
I think Casio used the DMCA to protect their brand especially in light of the potential for cheating mentioned earlier which could get Casio banned from the educational world out of fear that it could happen and teachers wouldn't know how to combat it without a Casio ban. That could cost them a lot of money I'm sure.
**Please provide a detailed description of the original copyrighted work that has allegedly been infringed. If possible, include a URL to where it is posted online.**
It came to our attention that the below-mentioned repository is using copyrighted source code in order to modify Casio's copyrighted program.
The code that is cited as the copyrighted code is completely unrelated to the code in the repository, which is all .ino (Arduino) files, and contains no Casio proprietary code.
The guy changed the project name and description to:
esp-oled-firebase-Integration
0.91" inch OLED and a esp8266-12E, which is integrated to firebase to fetch text file and send and receive text message.
Here's the file list:
the 'main' subdirectory:
Two candidates that I looked at for possible infringement are the firebase code, and the data management code.
Here's firebase:
Code:
//To fetch data from firebase, User2 should be your patners user name
String fetchStringData()
{
if (Firebase.getString(firebaseData,"/User2/chat"))
{
if(firebaseData.stringData())
{
return firebaseData.stringData();
}
else
{
return "No Text!";
}
}
else
{
Serial.println(firebaseData.errorReason());
}
}
//To send data to firebase, User1 should be where you send the data
void insertData(String value)
{
if (Firebase.set(firebaseData, "/User1/chat", value))
{
return;
}
else
{
Serial.println(firebaseData.errorReason());
}
}
and here's data management:
Code:
/*This function writes the data to the file system*/
void writeDownloads()
{
File spiffTextFile = SPIFFS.open(textFilePath, "w");
if(spiffTextFile)
{
spiffTextFile.print(textFile);
spiffTextFile.close();
}
}
/*This reads the data from the file system and store it in textFile variable*/
void readDownloads()
{
File spiffTextFile = SPIFFS.open(textFilePath, "r");
if(spiffTextFile)
{
int i;
for(i=0;i<spiffTextFile.size();i++) //Read upto complete file size
{
textFile += (char)spiffTextFile.read();
}
spiffTextFile.close(); //Close file
}
}
/*
To read JSON file form flash
this setup is not necessary if you have to read single URL, u can get away with above function
but this helps us to get multiple fields in the esp hosted server to enter multiple data.
*/
void readFlashJson()
{
if(SPIFFS.exists(textFileUrlPath))
{
const char* _url = "";
File configFile = SPIFFS.open(textFileUrlPath,"r");
if(configFile)
{
Serial.println("Reading to file");
//getting the size of the file
size_t size = configFile.size();
//using buffer to get the data
std::unique_ptr<char[]> buf(new char[size]);
//store it in buffer
configFile.readBytes(buf.get(), size);
//closing the file
configFile.close();
//json buffer to store the json
const size_t capacity = JSON_OBJECT_SIZE(1);
//json buffer to store the json
DynamicJsonDocument doc(capacity);
//parsing the json object
DeserializationError error = deserializeJson(doc,buf.get());
if(!error)
{
_url = doc["link"];
textFileUrl = _url;
/*More debugging*/
// Serial.println(textFileUrl);
// Serial.println();
}
}
}
}
Downloading the Casio code from the link in the DMCA complaint requires agreeing to their license, and especially given that it's the subject of a DMCA complaint, I won't post it here. It's 59 lines of sample code for a fx-FD10 Pro that imports fields from a CSV file (using a USB connection) ##-## here's what that file looks like in Excel:
The Casio code clearly has no contributory relationship whatsoever to the project code. None of the project code has anything to do with the calculator. The project doesn't even use any of the fx-991MS calculator's hardware other than the case.
Everything runs in the wifi processor, input is entirely from the Hall Effect sensors, and output is only to the OLED screen that sits where the solar cell was. The project uses a battery, and let's the calculator use the battery for power instead of its no-longer-present solar cell.