void handleClientRequest(int i) { ssize_t r; char * p; size_t remain; if (stream[i].len >= sizeof(stream[i].buffer) - 2) { logAbort("Input line on stream %d too long: %s\n", i, stream[i].buffer); } remain = sizeof(stream[i].buffer) - stream[i].len - 2; logDebug("handleClientRequest: read i=%d\n", i); logDebug("read %s i=%d fd=%d len=%u remain=%u\n", streamTypeName[stream[i].type], i, stream[i].fd, stream[i].len, remain); r = read(stream[i].fd, stream[i].buffer + stream[i].len, remain); if (r <= 0) { logDebug("read %s i=%d fd=%d r=%d\n", streamTypeName[stream[i].type], i, stream[i].fd, r); if (stream[i].type == DATA_INPUT_STREAM) { logAbort("EOF on reading stdin\n"); } closeStream(i); return; } stream[i].len += r; stream[i].buffer[stream[i].len] = 0; while (stream[i].len > 0) { size_t len; p = strchr(stream[i].buffer, '\n'); if (!p) { break; } len = p - stream[i].buffer; sbAppendData(&tcpMessage, stream[i].buffer, len + 1); if (stream[i].type != DATA_INPUT_STREAM || stream[outputIdx].type == DATA_OUTPUT_COPY) { /* Send all TCP client input and the main stdin stream if the mode is -o */ /* directly to stdout */ sbAppendData(&outMessage, stream[i].buffer, len + 1); } *p = 0; if (storeMessage(stream[i].buffer, len)) { convertJSONToNMEA0183(&nmeaMessage, stream[i].buffer); } p++, len++; stream[i].len -= len; /* Now remove [buffer..p> == the entire line */ memmove(stream[i].buffer, p, stream[i].len + 1); } }
//------------------------------------------------------------------ void MidiInputGenerator::newMidiMessage(ofxMidiMessage& msg){ midiMessage = msg; if (msg.portName == this->midiDeviceName) { if (midiLearnActive) { Param* p = new Param(); p->midiControl = msg.control; storeMessage(p); } else if (midiControlMaps[msg.control].size() > 0) { for(int i = 0; i < midiControlMaps[msg.control].size(); i++){ Param* p = new Param(); p->inputMax = 127; p->inputMin = 0; p->imageInputId = midiControlMaps[msg.control].at(i)->nodeId; p->name = midiControlMaps[msg.control].at(i)->paramId; p->value = msg.value; p->midiControl = msg.control; p->intVal = ofMap(msg.value, midiControlMaps[msg.control].at(i)->inputMinValue, midiControlMaps[msg.control].at(i)->inputMaxValue, midiControlMaps[msg.control].at(i)->paramMinValue, midiControlMaps[msg.control].at(i)->paramMaxValue); p->floatVal = ofMap(msg.value, midiControlMaps[msg.control].at(i)->inputMinValue, midiControlMaps[msg.control].at(i)->inputMaxValue, midiControlMaps[msg.control].at(i)->paramMinValue, midiControlMaps[msg.control].at(i)->paramMaxValue); // since this is unthreaded, then i dont need to lock and unlock storeMessage(p); } } } }
void ChannelWatcher::onMessageSent(const Tp::Message &message) { StorageMessage msg; msg.messageDateTime = message.sent(); msg.accountObjectPathId = m_accountDbId; msg.targetContactId = m_contactDbId; msg.message = message.text(); msg.messageToken = message.messageToken(); msg.isIncoming = false; msg.isDelivered = false; msg.type = 1; if (msg.messageToken.isEmpty()) { msg.messageToken = QCryptographicHash::hash(QString(msg.messageDateTime.toString() + msg.message).toUtf8(), QCryptographicHash::Md5); } storeMessage(msg); }
void ChannelWatcher::onMessageReceived(const Tp::ReceivedMessage &message) { if (!message.isDeliveryReport()) { StorageMessage msg; msg.messageDateTime = message.received(); msg.accountObjectPathId = m_accountDbId; msg.targetContactId = m_contactDbId; msg.message = message.text(); msg.messageToken = message.messageToken(); msg.isIncoming = true; msg.isDelivered = true; msg.type = 1; if (msg.messageToken.isEmpty()) { msg.messageToken = QCryptographicHash::hash(QString(msg.messageDateTime.toString() + msg.message).toUtf8(), QCryptographicHash::Md5); } storeMessage(msg); } else { qDebug() << "Received a delivery report for message" << message.deliveryDetails().originalToken(); //TODO // QSqlQuery updateQuery; // updateQuery.prepare("UPDATE data SET deliveredDateTime = :deliveredDateTime, isDelivered = :isDelivered WHERE id = :id"); // updateQuery.bindValue(":deliveredDateTime", message.deliveredDateTime); // updateQuery.bindValue(":isDelivered", message.isDelivered); // updateQuery.bindValue(":id", message.id); // // bool transactionBegin = d->db.transaction(); // qDebug() << "Update transaction begins" << transactionBegin; // bool queryResult = updateQuery.exec(); // qDebug() << "Update query gut" << queryResult; // if (queryResult) { // d->db.commit(); // } else { // qWarning() << updateQuery.lastError().text(); // d->db.rollback(); // } } }
int main(void) { int fd; ulong* map_base; if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL; map_base = (ulong*) mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, aam_port); printf("/dev/mem opened.\n"); fflush(stdout); //let's store a message std::vector<ulong> myMessage; myMessage.push_back(4); myMessage.push_back(7); myMessage.push_back(2); myMessage.push_back(4); storeMessage(myMessage.begin(), map_base); std::cout << "Message [4,7,2,4] written." << std::endl; //let's see if read works properly eraseMessage(myMessage, 0); eraseMessage(myMessage, 3); std::vector<ulong> rslt = readMessage(myMessage.begin(), map_base); std::cout << "[X,7,2,X] read" << std::endl; std::cout << "Contends of result from read: size= " <<rslt.size()<<" vals= ("<<rslt[0]<<", "<<rslt[1]<<")"<<std::endl; }
void handleClientRequest(int i) { ssize_t r; char * p; r = read(stream[i].fd, stream[i].buffer + stream[i].len, sizeof(stream[i].buffer) - 1 - stream[i].len); logDebug("read i=%d fd=%d r=%d\n", i, stream[i].fd, r); if (r < 0) { if (stream[i].fd == stdinfd) { logAbort("Read %d on reading stdin\n", r); } closeStream(i); return; } if (r == 0) { if (stream[i].type == DATA_INPUT_STREAM) { logAbort("EOF on reading stdin\n", r); } else { closeStream(i); } return; } stream[i].len += r; stream[i].buffer[stream[i].len] = 0; while (r > 0) { p = strchr(stream[i].buffer, '\n'); if (p) { size_t len = ++p - stream[i].buffer; /* Feed it into the NMEA2000 message handler */ char stash = *p; logDebug("Got msg='%1.*s'\n", len, stream[i].buffer); *p = 0; sbAppendData(&tcpMessage, stream[i].buffer, len); if (stream[i].type != DATA_INPUT_STREAM || stream[outputIdx].type == DATA_OUTPUT_COPY) { /* Send all TCP client input and the main stdin stream if the mode is -o */ /* directly to stdout */ sbAppendData(&outMessage, stream[i].buffer, len); } convertJSONToNMEA0183(&nmeaMessage, stream[i].buffer); storeMessage(stream[i].buffer, len); *p = stash; /* Now remove [buffer..p> */ memcpy(stream[i].buffer, p, strlen(p)); stream[i].len -= len; r -= len; } else { r = 0; } } }